Untitled
unknown
javascript
2 years ago
2.1 kB
9
Indexable
// main function for handling the route exports.chat = catchAsync(async (req, res, next) => { const { question, sessionId } = req.body; if (!question || !sessionId) { return res .status(400) .json({ status: "fail", message: "Please provide a prompt" }); } let session = await sessionModel.get(sessionId); session.messages.push({ role: "user", content: question }); const responseStream = await chatModel(session.system, session.messages); let assistantMessage = ""; for await (const chunk of responseStream) { const lines = chunk .toString("utf8") .split("\n") .filter((line) => line.trim().startsWith("data: ")); for (const line of lines) { const message = line.replace(/^data: /, ""); if (message === "[DONE]") { res.end(); session.messages.push({ role: "assistant", content: assistantMessage, }); await sessionModel.set(sessionId, session); return; } const json = JSON.parse(message); const token = json.choices[0].delta.content; if (token) { res.write(token); assistantMessage += token; res.flush(); } } } }); // chatModel funciton that process the api calling const { Configuration, OpenAIApi } = require("openai"); const configuration = new Configuration({ apiKey: process.env.OPENAI_API_KEY, }); const openAi = new OpenAIApi(configuration); module.exports = async (systemPrompt, messagesHistory) => { let lastMessages = messagesHistory.slice(-50); let responseStream; try { responseStream = await openAi.createChatCompletion( { model: "gpt-3.5-turbo", messages: [ { role: "system", content: systemPrompt, }, ...lastMessages, ], temperature: 0.7, stream: true, }, { responseType: "stream", } ); } catch (err) { console.log(err); } return responseStream.data; };
Editor is loading...