import { InferenceClient } from "@huggingface/inference"; export async function callHuggingFace({ model, messages, temperature = 1.0, maxTokens = 2048, stream = false, apiKey, onToken, }) { const client = new InferenceClient(apiKey); const modelName = model.replace(/^hf:/, ""); const chatMessages = messages.map((m) => ({ role: m.role, content: m.content })); if (stream) { let fullText = ""; const out = await client.chatCompletionStream({ model: modelName, messages: chatMessages, temperature: Number(temperature), max_tokens: Number(maxTokens), }); for await (const chunk of out) { const delta = chunk.choices?.[0]?.delta?.content; if (delta) { fullText += delta; onToken?.(delta); } } return { text: fullText, usage: null }; } const out = await client.chatCompletion({ model: modelName, messages: chatMessages, temperature: Number(temperature), max_tokens: Number(maxTokens), }); return { text: out.choices?.[0]?.message?.content || "", usage: { promptTokens: out.usage?.prompt_tokens, completionTokens: out.usage?.completion_tokens, }, }; }