Files
vendoo/lib/ai-local.mjs
T
Masterluke77andGitHub 6f48827f4d Vendoo 1.41.2 – Git Ignore Boundary & Module Tracking Hotfix (#18)
* docs: prepare Vendoo 1.41.2 git-ignore boundary hotfix

* fix: track native source modules with root-anchored runtime ignores
2026-07-09 17:09:00 +02:00

65 lines
2.1 KiB
JavaScript

export const MODELS = [
{ id: 'llama3.2-vision', name: 'Llama 3.2 Vision (11B)' },
{ id: 'llava', name: 'LLaVA 1.6 (7B)' },
{ id: 'moondream', name: 'Moondream 2 (1.8B, schnell)' },
{ id: 'gemma3', name: 'Gemma 3 (Vision)' },
];
export async function generate(images, systemPrompt, model) {
const baseUrl = process.env.OLLAMA_URL || 'http://localhost:11434';
const modelId = model || MODELS[0].id;
const ollamaImages = images.map(img => img.base64);
const res = await fetch(`${baseUrl}/api/chat`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
model: modelId,
stream: false,
messages: [
{ role: 'system', content: systemPrompt },
{
role: 'user',
content: 'Analysiere die Fotos und erstelle das Listing gemäß den Anweisungen. Antworte ausschließlich mit validem JSON.',
images: ollamaImages,
},
],
}),
});
if (!res.ok) {
const text = await res.text().catch(() => '');
throw new Error(`Ollama Fehler (${res.status}): ${text.slice(0, 200)}`);
}
const data = await res.json();
const text = data.message.content;
const jsonMatch = text.match(/\{[\s\S]*\}/);
if (!jsonMatch) throw new Error('AI returned no valid JSON');
return JSON.parse(jsonMatch[0]);
}
export async function generateText(systemPrompt, userPrompt, model) {
const baseUrl = process.env.OLLAMA_URL || 'http://localhost:11434';
const modelId = model || MODELS[0].id;
const res = await fetch(`${baseUrl}/api/chat`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
model: modelId,
stream: false,
messages: [
{ role: 'system', content: String(systemPrompt || '') },
{ role: 'user', content: String(userPrompt || '') },
],
}),
});
if (!res.ok) {
const text = await res.text().catch(() => '');
throw new Error(`Ollama Fehler (${res.status}): ${text.slice(0, 200)}`);
}
const data = await res.json();
return String(data.message?.content || '').trim();
}