import type { OllamaEmbedOptions, OllamaEmbeddingResponse } from './types.js'; /** * Get embeddings for text using an Ollama embedding model. * * @param baseUrl - Ollama server base URL * @param options - Embedding options (model, input text) * @returns Array of embedding vectors (one per input string) */ export async function getEmbedding( baseUrl: string, options: OllamaEmbedOptions ): Promise { const res = await fetch(`${baseUrl}/api/embed`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ model: options.model, input: options.input, ...(options.options && { options: options.options }), }), }); if (!res.ok) { const text = await res.text().catch(() => ''); throw new Error(`Ollama embed failed (${res.status}): ${text.slice(0, 200)}`); } return (await res.json()) as OllamaEmbeddingResponse; } /** * Convenience: get a single embedding vector for a text string. * * @param baseUrl - Ollama server base URL * @param text - Text to embed * @param model - Embedding model name (default: 'nomic-embed-text') * @returns Single embedding vector */ export async function getEmbeddingVector( baseUrl: string, text: string, model: string = 'nomic-embed-text' ): Promise { const response = await getEmbedding(baseUrl, { model, input: text }); return response.embeddings?.[0] ?? []; }