| 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<number[][]> { | |
| 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<number[]> { | |
| 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)}`); | |
| } | |
| } | |
| } | |