import { IEmbeddingFunction } from "./IEmbeddingFunction"; export class JinaEmbeddingFunction implements IEmbeddingFunction { private model_name: string; private api_url: string; private headers: { [key: string]: string }; constructor({ jinaai_api_key, model_name }: { jinaai_api_key: string; model_name?: string }) { this.model_name = model_name || 'jina-embeddings-v2-base-en'; this.api_url = 'https://api.jina.ai/v1/embeddings'; this.headers = { Authorization: `Bearer ${jinaai_api_key}`, 'Accept-Encoding': 'identity', 'Content-Type': 'application/json', }; } public async generate(texts: string[]) { try { const response = await fetch(this.api_url, { method: 'POST', headers: this.headers, body: JSON.stringify({ input: texts, model: this.model_name, }), }); const data = (await response.json()) as { data: any[]; detail: string }; if (!data || !data.data) { throw new Error(data.detail); } const embeddings: any[] = data.data; const sortedEmbeddings = embeddings.sort((a, b) => a.index - b.index); return sortedEmbeddings.map((result) => result.embedding); } catch (error) { if (error instanceof Error) { throw new Error(`Error calling Jina AI API: ${error.message}`); } else { throw new Error(`Error calling Jina AI API: ${error}`); } } } }