import { Embeddings } from '@langchain/core/embeddings'; import { GoogleGenerativeAI } from '@google/generative-ai'; import { config } from '../utils/config.js'; import { logger } from '../utils/logger.js'; export class GeminiEmbedding extends Embeddings { private genAI: GoogleGenerativeAI; private modelName: string; constructor() { super({}); this.genAI = new GoogleGenerativeAI(config.gemini.apiKey); this.modelName = config.gemini.embeddingModel; } async embedDocuments(texts: string[]): Promise { try { const model = this.genAI.getGenerativeModel({ model: this.modelName }); const embeddings = await Promise.all( texts.map(async (text) => { const result = await model.embedContent(text); return result.embedding.values; }) ); return embeddings; } catch (error) { logger.error({ error }, 'Error generating embeddings'); throw new Error(`Embedding error: ${error instanceof Error ? error.message : String(error)}`); } } async embedQuery(text: string): Promise { try { const model = this.genAI.getGenerativeModel({ model: this.modelName }); const result = await model.embedContent(text); return result.embedding.values; } catch (error) { logger.error({ error }, 'Error generating query embedding'); throw new Error(`Query embedding error: ${error instanceof Error ? error.message : String(error)}`); } } }