This commit is contained in:
Carlos
2025-04-10 01:19:04 -04:00
parent baa4486c79
commit 66fb26ff50

View File

@ -34,17 +34,17 @@ const validateApiKey = (req, res, next) => {
}; };
// Forward request to localhost:11434 (ollama) // Forward request to localhost:11434 (ollama)
app.post("/api/generate/chat/completions", validateApiKey, async (req, res) => { app.post("/api/generate/chat/completions", validateApiKey, async (req, res) => {
try { try {
const { model, messages } = req.body; const { model, messages } = req.body;
const prompt = const prompt = messages
messages .map(
.map((msg) => { (msg) =>
if (msg.role === "system") return `${msg.content}\n`; `${msg.role === "system" ? "" : msg.role + ": "}${msg.content}`,
return `${msg.role === "user" ? "User" : "Assistant"}: ${msg.content}`; )
}) .join("\n");
.join("\n") + "\nAssistant:";
console.log("Generated prompt for Ollama:\n", prompt); console.log("Generated prompt for Ollama:\n", prompt);
@ -58,37 +58,40 @@ app.post("/api/generate/chat/completions", validateApiKey, async (req, res) => {
{ responseType: "stream" }, { responseType: "stream" },
); );
// 🔥 Manual stream reading for logging let finalAnswer = "";
let fullResponse = ""; let lastChunk = "";
response.data.on("data", (chunk) => { response.data.on("data", (chunk) => {
const lines = chunk.toString("utf8").split("\n").filter(Boolean); // Remove empty lines const lines = chunk.toString("utf8").split("\n").filter(Boolean);
for (const line of lines) { for (const line of lines) {
try { try {
const json = JSON.parse(line); const json = JSON.parse(line);
fullResponse += json.response || ""; lastChunk = json.response || lastChunk;
if (json.done) {
finalAnswer = lastChunk;
}
} catch (err) { } catch (err) {
console.warn("Error parsing chunk:", err); console.warn("Chunk parsing failed:", err);
} }
} }
}); });
response.data.on("end", () => { response.data.on("end", () => {
console.log("\n Full Response:\n", fullResponse); console.log("\n🎯 Final Answer Only:\n", finalAnswer);
res.json({ response: fullResponse }); res.json({ response: finalAnswer.trim() });
}); });
response.data.on("error", (err) => { response.data.on("error", (err) => {
console.error("Stream error from Ollama:", err); console.error("Ollama stream error:", err);
res res
.status(500) .status(500)
.json({ error: "Stream error from Ollama", message: err.message }); .json({ error: "Ollama stream error", message: err.message });
}); });
} catch (error) { } catch (error) {
console.error( console.error(
"Error forwarding request to Ollama:", "Error communicating with Ollama:",
error.response ? error.response.data : error.message, error.response?.data || error.message,
); );
res res
.status(500) .status(500)