const aiFollowupQuestion = async (req, res) => { const { MongoClient } = require('mongodb'); const fetch = require('node-fetch'); const { v4: uuidv4 } = require('uuid'); const url = process.env.MONGODB_URL; const dbName = process.env.MONGO_DB_NAME; const client = new MongoClient(url); await client.connect(); const database = client.db(dbName); const conversationsCollection = database.collection('conversations'); async function fetchOpenAICompletion(prompt, messages, model = "gpt-4o-mini", max_tokens = 200) { const response = await fetch('https://api.openai.com/v1/chat/completions', { method: 'POST', headers: { 'Authorization': `Bearer ${process.env.OPENAI_KEY}`, 'Content-Type': 'application/json', }, body: JSON.stringify({ model: model, messages: messages, max_tokens: max_tokens, }), }); const data = await response.json(); 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({ success: false, error: 'Something went wrong. Please try again later.', }); } } module.exports = aiFollowupQuestion;