feat(ai): ollama embed-text wrapper

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
root
2026-06-01 03:43:27 +10:00
parent afc20712cb
commit 5799ea663e
2 changed files with 60 additions and 0 deletions

24
lib/ai/ollama.js Normal file
View File

@@ -0,0 +1,24 @@
export class OllamaError extends Error {
constructor(status, body) { super(`ollama ${status}: ${body}`); this.status = status; }
}
export async function embedText(text, { model = 'nomic-embed-text', timeoutMs = 60_000 } = {}) {
const url = (process.env.OLLAMA_URL || 'http://192.168.1.185:11434') + '/api/embeddings';
const res = await fetch(url, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ model, prompt: text }),
signal: AbortSignal.timeout(timeoutMs)
});
if (!res.ok) throw new OllamaError(res.status, await res.text());
const j = await res.json();
return j.embedding;
}
export function padTo(vector, dim) {
if (vector.length === dim) return vector;
if (vector.length > dim) return vector.slice(0, dim);
const out = vector.slice();
while (out.length < dim) out.push(0);
return out;
}