@lobehub/chat
Version:
Lobe Chat - an open-source, high-performance chatbot framework that supports speech synthesis, multimodal, and extensible Function Call plugin system. Supports one-click free deployment of your private ChatGPT/LLM web application.
85 lines (73 loc) • 2.33 kB
text/typescript
/* eslint-disable sort-keys-fix/sort-keys-fix */
import {
integer,
jsonb,
pgTable,
text,
uniqueIndex,
uuid,
varchar,
vector,
} from 'drizzle-orm/pg-core';
import { timestamps } from './_helpers';
import { files } from './file';
import { users } from './user';
export const chunks = pgTable(
'chunks',
{
id: uuid('id').defaultRandom().primaryKey(),
text: text('text'),
abstract: text('abstract'),
metadata: jsonb('metadata'),
index: integer('index'),
type: varchar('type'),
clientId: text('client_id'),
userId: text('user_id').references(() => users.id, { onDelete: 'cascade' }),
...timestamps,
},
(t) => ({
clientIdUnique: uniqueIndex('chunks_client_id_user_id_unique').on(t.clientId, t.userId),
}),
);
export type NewChunkItem = typeof chunks.$inferInsert & { fileId?: string };
export const unstructuredChunks = pgTable(
'unstructured_chunks',
{
id: uuid('id').defaultRandom().primaryKey(),
text: text('text'),
metadata: jsonb('metadata'),
index: integer('index'),
type: varchar('type'),
...timestamps,
parentId: varchar('parent_id'),
compositeId: uuid('composite_id').references(() => chunks.id, { onDelete: 'cascade' }),
clientId: text('client_id'),
userId: text('user_id').references(() => users.id, { onDelete: 'cascade' }),
fileId: varchar('file_id').references(() => files.id, { onDelete: 'cascade' }),
},
(t) => ({
clientIdUnique: uniqueIndex('unstructured_chunks_client_id_user_id_unique').on(
t.clientId,
t.userId,
),
}),
);
export type NewUnstructuredChunkItem = typeof unstructuredChunks.$inferInsert;
export const embeddings = pgTable(
'embeddings',
{
id: uuid('id').defaultRandom().primaryKey(),
chunkId: uuid('chunk_id')
.references(() => chunks.id, { onDelete: 'cascade' })
.unique(),
embeddings: vector('embeddings', { dimensions: 1024 }),
model: text('model'),
clientId: text('client_id'),
userId: text('user_id').references(() => users.id, { onDelete: 'cascade' }),
},
(t) => ({
clientIdUnique: uniqueIndex('embeddings_client_id_user_id_unique').on(t.clientId, t.userId),
}),
);
export type NewEmbeddingsItem = typeof embeddings.$inferInsert;
export type EmbeddingsSelectItem = typeof embeddings.$inferSelect;