diff --git a/src/routes/api/aiFollowupQuestion.js b/src/routes/api/aiFollowupQuestion.js index 49d306c..0bbcb14 100644 --- a/src/routes/api/aiFollowupQuestion.js +++ b/src/routes/api/aiFollowupQuestion.js @@ -1,5 +1,4 @@ const aiFollowupQuestion = async (req, res) => { - const { MongoClient } = require('mongodb'); const fetch = require('node-fetch'); const { v4: uuidv4 } = require('uuid'); @@ -29,63 +28,72 @@ const aiFollowupQuestion = async (req, res) => { return data; } - - try { - const { prompt, sessionId, model = "gpt-4o-mini", max_tokens = 200 } = req.body; - if (!conversationsCollection) { - return res.status(500).json({ - success: false, - error: 'MongoDB is not connected yet. Please try again later.', - }); - } - let conversation; - - if (!sessionId) { - const newSessionId = uuidv4(); - - conversation = { - sessionId: newSessionId, - conversationHistory: [ - { role: 'system', content: 'answer within 50 words' }, - { role: 'user', content: prompt }, - ], - }; - await conversationsCollection.insertOne(conversation); - } else { - conversation = await conversationsCollection.findOne({ sessionId: sessionId }); - if (!conversation) { - return res.status(400).json({ - success: false, - error: 'Invalid session ID.', - }); - } - conversation.conversationHistory.push({ role: 'user', content: prompt }); - } - - const aiResponse = await fetchOpenAICompletion(prompt, conversation.conversationHistory, model, max_tokens); - - conversation.conversationHistory.push({ role: 'assistant', content: aiResponse.choices[0].message.content }); - - await conversationsCollection.updateOne( - { sessionId: conversation.sessionId }, - { $set: { conversationHistory: conversation.conversationHistory } } - ); - - res.json({ - success: true, - data: aiResponse.choices[0].message.content, - total_tokens: aiResponse.usage.total_tokens, - sessionId: conversation.sessionId, - }); - } catch (error) { - console.error('Error generating response:', error.message); - res.status(500).json({ + try { + const { prompt, sessionId, model = "gpt-4o-mini", max_tokens = 200 } = req.body; + if (!conversationsCollection) { + return res.status(500).json({ success: false, - error: 'Something went wrong. Please try again later.', + error: 'MongoDB is not connected yet. Please try again later.', }); } - - + + let conversation; + + if (!sessionId) { + const newSessionId = uuidv4(); + + // New conversation, start with system and user message + conversation = { + sessionId: newSessionId, + conversationHistory: [ + { role: 'system', content: 'answer within 50 words' }, + { role: 'user', content: prompt }, + ], + }; + await conversationsCollection.insertOne(conversation); + } else { + // Existing conversation, find it by sessionId + conversation = await conversationsCollection.findOne({ sessionId: sessionId }); + if (!conversation) { + return res.status(400).json({ + success: false, + error: 'Invalid session ID.', + }); + } + + // Keep only the last 2 messages (1 user and 1 assistant) + conversation.conversationHistory.push({ role: 'user', content: prompt }); + + // Limit conversation history to the last two entries: one user, one assistant + const lastTwoMessages = conversation.conversationHistory.slice(-2); + conversation.conversationHistory = lastTwoMessages; + } + + // Fetch AI response based on the last two messages (user + assistant) + const aiResponse = await fetchOpenAICompletion(prompt, conversation.conversationHistory, model, max_tokens); + + // Add the AI response to conversation history + conversation.conversationHistory.push({ role: 'assistant', content: aiResponse.choices[0].message.content }); + + // Update conversation in the database with new history + await conversationsCollection.updateOne( + { sessionId: conversation.sessionId }, + { $set: { conversationHistory: conversation.conversationHistory } } + ); + + res.json({ + success: true, + data: aiResponse.choices[0].message.content, + total_tokens: aiResponse.usage.total_tokens, + sessionId: conversation.sessionId, + }); + } catch (error) { + console.error('Error generating response:', error.message); + res.status(500).json({ + success: false, + error: 'Something went wrong. Please try again later.', + }); } - - module.exports = aiFollowupQuestion; \ No newline at end of file +} + +module.exports = aiFollowupQuestion;