diff --git a/src/utils/embeddings.ts b/src/utils/embeddings.ts index 7c73228..b7bbbaa 100644 --- a/src/utils/embeddings.ts +++ b/src/utils/embeddings.ts @@ -119,16 +119,22 @@ class EmbeddingsService { const apiKey = process.env.AI_EMBEDDINGS_API_KEY; const model = process.env.AI_EMBEDDINGS_MODEL; - if (!endpoint || !apiKey || !model) { + if (!endpoint || !model) { throw new Error('Missing embeddings API configuration'); } + const headers: Record = { + 'Content-Type': 'application/json' + }; + + // API key is optional for Ollama but required for Mistral/OpenAI + if (apiKey) { + headers['Authorization'] = `Bearer ${apiKey}`; + } + const response = await fetch(endpoint, { method: 'POST', - headers: { - 'Content-Type': 'application/json', - 'Authorization': `Bearer ${apiKey}` - }, + headers, body: JSON.stringify({ model, input: contents @@ -141,7 +147,18 @@ class EmbeddingsService { } const data = await response.json(); - return data.data.map((item: any) => item.embedding); + + // Detect Ollama format + if (Array.isArray(data.embeddings)) { + return data.embeddings; + } + + // Detect OpenAI/Mistral format + if (Array.isArray(data.data)) { + return data.data.map((item: any) => item.embedding); + } + + throw new Error('Unknown embeddings API response format'); } private async generateEmbeddings(toolsData: any, version: string): Promise {