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