init push
This commit is contained in:
39
backend/services/ai.js
Normal file
39
backend/services/ai.js
Normal file
@@ -0,0 +1,39 @@
|
||||
import { SYSTEM_PROMPT } from '../prompts/extractRecipe.js';
|
||||
|
||||
const OLLAMA_URL = process.env.OLLAMA_URL || 'http://localhost:11434';
|
||||
const MODEL = process.env.OLLAMA_MODEL || 'mistral';
|
||||
|
||||
export async function isOllamaAvailable() {
|
||||
try {
|
||||
const res = await fetch(`${OLLAMA_URL}/api/tags`, { signal: AbortSignal.timeout(3000) });
|
||||
return res.ok;
|
||||
} catch {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
export async function extractRecipe(description) {
|
||||
const response = await fetch(`${OLLAMA_URL}/api/generate`, {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({
|
||||
model: MODEL,
|
||||
system: SYSTEM_PROMPT,
|
||||
prompt: `Extrahiere ein Rezept aus dieser TikTok-Videobeschreibung:\n\n${description}`,
|
||||
stream: false,
|
||||
}),
|
||||
});
|
||||
|
||||
if (!response.ok) {
|
||||
throw new Error(`Ollama Fehler: ${response.status}`);
|
||||
}
|
||||
|
||||
const data = await response.json();
|
||||
let text = data.response.trim();
|
||||
|
||||
if (text.startsWith('```')) {
|
||||
text = text.replace(/^```(?:json)?\n?/, '').replace(/\n?```$/, '');
|
||||
}
|
||||
|
||||
return JSON.parse(text);
|
||||
}
|
||||
Reference in New Issue
Block a user