UNPKG

@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.

64 lines (51 loc) 1.61 kB
import { count } from 'drizzle-orm'; import { and, eq } from 'drizzle-orm/expressions'; import { LobeChatDatabase } from '@/database/type'; import { NewEmbeddingsItem, embeddings } from '../schemas'; export class EmbeddingModel { private userId: string; private db: LobeChatDatabase; constructor(db: LobeChatDatabase, userId: string) { this.userId = userId; this.db = db; } create = async (value: Omit<NewEmbeddingsItem, 'userId'>) => { const [item] = await this.db .insert(embeddings) .values({ ...value, userId: this.userId }) .returning(); return item.id as string; }; bulkCreate = async (values: Omit<NewEmbeddingsItem, 'userId'>[]) => { return this.db .insert(embeddings) .values(values.map((item) => ({ ...item, userId: this.userId }))) .onConflictDoNothing({ target: [embeddings.chunkId], }); }; delete = async (id: string) => { return this.db .delete(embeddings) .where(and(eq(embeddings.id, id), eq(embeddings.userId, this.userId))); }; query = async () => { return this.db.query.embeddings.findMany({ where: eq(embeddings.userId, this.userId), }); }; findById = async (id: string) => { return this.db.query.embeddings.findFirst({ where: and(eq(embeddings.id, id), eq(embeddings.userId, this.userId)), }); }; countUsage = async (): Promise<number> => { const result = await this.db .select({ count: count(), }) .from(embeddings) .where(eq(embeddings.userId, this.userId)); return result[0].count; }; }