ollama-server2 / pages /api /generate.ts
bahadur3093's picture
feat: Add environment-based configuration and chat history support
8d8e945
Raw
History Blame Contribute Delete
2.03 kB
import type { NextApiRequest, NextApiResponse } from "next"
import fs from "fs"
import path from "path"
const CHAT_HISTORY_FILE = path.join(process.cwd(), "chat-history.json")
interface ChatMessage {
role: "user" | "assistant" | "system"
content: string
}
// Get Ollama base URL from environment variable
const OLLAMA_BASE_URL = process.env.OLLAMA_BASE_URL || "http://localhost:11434"
// Read chat history from file
function readChatHistory(): ChatMessage[] {
try {
if (fs.existsSync(CHAT_HISTORY_FILE)) {
const data = fs.readFileSync(CHAT_HISTORY_FILE, "utf-8")
const history = JSON.parse(data)
// Convert stored messages to Ollama format (only user and assistant roles)
return history.messages
.filter((msg: any) => msg.role === "user" || msg.role === "assistant")
.map((msg: any) => ({
role: msg.role,
content: msg.content,
}))
}
} catch (error) {
console.error("Error reading chat history:", error)
}
return []
}
export default async function handler(
req: NextApiRequest,
res: NextApiResponse
) {
if (req.method !== "POST") {
return res.status(405).json({ error: "Method not allowed" })
}
const { model, prompt } = req.body
try {
// Get conversation history
const conversationHistory = readChatHistory()
// Add current user message to the conversation
const messages = [
...conversationHistory,
{ role: "user" as const, content: prompt },
]
// Use chat endpoint instead of generate to maintain conversation context
const ollamaRes = await fetch(`${OLLAMA_BASE_URL}/api/chat`, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
model,
messages,
stream: false,
}),
})
const data = await ollamaRes.json()
res.status(200).json(data)
} catch (err) {
console.error("Ollama API error:", err)
res.status(500).json({ error: "Failed to connect to Ollama" })
}
}