// This service calls the Hugging Face Inference API. // It's best for models fine-tuned for JSON output, like Llama 3. export const callHuggingFaceAPI = async (prompt, apiKey, maxTokens = 2000) => { if (!apiKey) { throw new Error("Hugging Face API Key is required."); } // Recommended model: Meta's Llama 3 is excellent at following instructions. const API_URL = "https://api-inference.huggingface.co/models/meta-llama/Meta-Llama-3-8B-Instruct"; const headers = { "Authorization": `Bearer ${apiKey}`, "Content-Type": "application/json", }; const payload = { inputs: prompt, parameters: { max_new_tokens: maxTokens, return_full_text: false, // Important: only return the generated text temperature: 0.6, // A bit of creativity but still factual top_p: 0.9, } }; try { const response = await fetch(API_URL, { method: "POST", headers: headers, body: JSON.stringify(payload), }); if (!response.ok) { const errorText = await response.text(); throw new Error(`Hugging Face API request failed: ${response.status} - ${errorText}`); } const data = await response.json(); // The response is an array, we take the first element's generated text. if (data && data[0] && data[0].generated_text) { return data[0].generated_text; } else { throw new Error("Invalid response structure from Hugging Face API."); } } catch (error) { console.error("Hugging Face API Error:", error); throw error; } };