{"repo": "anuj8215/alpha-chat", "files": {"backend/src/services/temporaryChat.js": {"cdb78167242f983dae28d06881230d7a7206f59f": {"t": 1785746697.2553408, "n": 10857, "h": "1fff071e8dd0942f", "c": "//!SECTION - TEMPORARY CHAT SERVICE FOR HANDLING TEMPORARY AI CONVERSATIONS\n\nconst TemporaryChat = require('../models/temporaryChat');\nconst OpenAI = require('openai');\nconst { GoogleGenerativeAI } = require('@google/generative-ai');\nconst axios = require('axios');\nconst logger = require('../utils/logger');\n\n// Initialize AI services\nlet openaiChat = null;\nif (process.env.OPENAI_API_KEY) {\n openaiChat = new OpenAI({\n apiKey: process.env.OPENAI_API_KEY\n });\n}\n\nconst genAI = new GoogleGenerativeAI(process.env.GEMINI_API_KEY);\nconst DEEPSEEK_API_KEY = process.env.DEEPSEEK_API_KEY;\nconst DEEPSEEK_BASE_URL = 'https://api.deepseek.com/v1';\n\n//NOTE - CREATE NEW TEMPORARY CHAT SESSION\nconst createTemporarySession = async (options = {}) => {\n try {\n const session = await TemporaryChat.createTemporarySession({\n userId: options.userId || null,\n title: options.title || 'Temporary Chat',\n aiModel: options.aiModel || 'gpt-3.5-turbo',\n temperature: options.temperature || 0.7,\n maxTokens: options.maxTokens || 1000,\n systemPrompt: options.systemPrompt || 'You are a helpful AI assistant.',\n ipAddress: options.ipAddress,\n userAgent: options.userAgent\n });\n\n logger.info(`Created temporary chat session: ${session.sessionId}`);\n return session;\n } catch (error) {\n logger.error(`Create temporary session error: ${error.message}`);\n throw error;\n }\n};\n\n//NOTE - GET TEMPORARY CHAT SESSION\nconst getTemporarySession = async (sessionId) => {\n try {\n const session = await TemporaryChat.findActiveSession(sessionId);\n\n if (!session) {\n throw new Error('Session not found or expired');\n }\n\n return session;\n } catch (error) {\n logger.error(`Get temporary session error: ${error.message}`);\n throw error;\n }\n};\n\n//NOTE - SEND MESSAGE IN TEMPORARY CHAT\nconst sendTemporaryMessage = async (sessionId, userMessage, options = {}) => {\n try {\n const session = await getTemporarySession(sessionId);\n\n // Add user message to session\n await session.addMessage('user', userMessage);\n\n // Prepare conversation history for AI\n const conversationHistory = session.messages.map(msg => ({\n role: msg.role,\n content: msg.content\n }));\n\n // Add system prompt if it's the first message\n if (conversationHistory.length === 1) {\n conversationHistory.unshift({\n role: 'system',\n content: session.settings.systemPrompt\n });\n }\n\n // Get AI response based on selected model\n const aiResponse = await generateAIResponse(\n session.settings.aiModel,\n conversationHistory,\n {\n temperature: session.settings.temperature,\n maxTokens: session.settings.maxTokens\n }\n );\n\n // Add AI response to session\n await session.addMessage('assistant', aiResponse.content, {\n model: session.settings.aiModel,\n tokens: aiResponse.tokens,\n processingTime: aiResponse.processingTime\n });\n\n // Reload session to get updated data\n const updatedSession = await getTemporarySession(sessionId);\n\n return {\n sessionId: updatedSession.sessionId,\n messages: updatedSession.messages,\n metadata: updatedSession.metadata,\n lastMessage: aiResponse\n };\n\n } catch (error) {\n logger.error(`Send temporary message error: ${error.message}`);\n throw error;\n }\n};\n\n//NOTE - GENERATE AI RESPONSE BASED ON MODEL\nconst generateAIResponse = async (model, conversationHistory, settings) => {\n const startTime = Date.now();\n let response, tokens = 0;\n\n try {\n switch (model) {\n case 'gpt-3.5-turbo':\n case 'gpt-4':\n case 'gpt-4-turbo':\n response = await generateOpenAIResponse(model, conversationHistory, settings);\n break;\n\n case 'gemini-pro':\n response = await generateGeminiResponse(conversationHistory, settings);\n break;\n\n case 'deepseek-chat':\n response = await generateDeepSeekResponse(conversationHistory, settings);\n break;\n\n default:\n throw new Error(`Unsupported model: ${model}`);\n }\n\n const processingTime = Date.now() - startTime;\n\n return {\n content: response.content,\n tokens: response.tokens || tokens,\n processingTime\n };\n\n } catch (error) {\n logger.error(`Generate AI response error: ${error.message}`);\n throw error;\n }\n};\n\n//NOTE - OPENAI RESPONSE GENERATION\nconst generateOpenAIResponse = async (model, messages, settings) => {\n try {\n if (!openaiChat) {\n throw new Error('OpenAI API key not configured');\n }\n\n const completion = await openaiChat.chat.completions.create({\n model: model,\n messages: messages,\n temperature: settings.temperature,\n max_tokens: settings.maxTokens,\n });\n\n return {\n content: completion.choices[0].message.content,\n tokens: completion.usage?.total_tokens || 0\n };\n } catch (error) {\n logger.error(`OpenAI API error: ${error.message}`);\n throw new Error('Failed to generate response from OpenAI');\n }\n};\n\n//NOTE - GEMINI RESPONSE GENERATION\nconst generateGeminiResponse = async (messages, settings) => {\n try {\n const model = genAI.getGenerativeModel({ model: 'gemini-pro' });\n\n // Convert conversation to Gemini format\n const conversation = messages\n .filter(msg => msg.role !== 'system')\n .map(msg => msg.content)\n .join('\\n\\nUser: ');\n\n const result = await model.generateContent(conversation);\n const response = await result.response;\n\n return {\n content: response.text(),\n tokens: 0 // Gemini doesn't provide token count in free tier\n };\n } catch (error) {\n logger.error(`Gemini API error: ${error.message}`);\n throw new Error('Failed to generate response from Gemini');\n }\n};\n\n//NOTE - DEEPSEEK RESPONSE GENERATION\nconst generateDeepSeekResponse = async (messages, settings) => {\n try {\n const response = await axios.post(\n `${DEEPSEEK_BASE_URL}/chat/completions`,\n {\n model: 'deepseek-chat',\n messages: messages,\n temperature: settings.temperature,\n max_tokens: settings.maxTokens,\n stream: false\n },\n {\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${DEEPSEEK_API_KEY}`\n }\n }\n );\n\n return {\n content: response.data.choices[0].message.content,\n tokens: response.data.usage?.total_tokens || 0\n };\n } catch (error) {\n logger.error(`DeepSeek API error: ${error.message}`);\n throw new Error('Failed to generate response from DeepSeek');\n }\n};\n\n//NOTE - UPDATE TEMPORARY CHAT SETTINGS\nconst updateTemporarySettings = async (sessionId, newSettings) => {\n try {\n const session = await getTemporarySession(sessionId);\n\n const allowedSettings = ['aiModel', 'temperature', 'maxTokens', 'systemPrompt'];\n const filteredSettings = {};\n\n for (const key of allowedSettings) {\n if (newSettings[key] !== undefined) {\n filteredSettings[key] = newSettings[key];\n }\n }\n\n await session.updateSettings(filteredSettings);\n\n return session;\n } catch (error) {\n logger.error(`Update temporary settings error: ${error.message}`);\n throw error;\n }\n};\n\n//NOTE - DELETE TEMPORARY CHAT SESSION\nconst deleteTemporarySession = async (sessionId) => {\n try {\n const result = await TemporaryChat.findOneAndDelete({ sessionId });\n\n if (!result) {\n throw new Error('Session not found');\n }\n\n logger.info(`Deleted temporary chat session: ${sessionId}`);\n return { success: true, sessionId };\n } catch (error) {\n logger.error(`Delete temporary session error: ${error.message}`);\n throw error;\n }\n};\n\n//NOTE - EXTEND SESSION EXPIRY\nconst extendSessionExpiry = async (sessionId, hours = 24) => {\n try {\n const session = await getTemporarySession(sessionId);\n await session.extendExpiry(hours);\n\n return session;\n } catch (error) {\n logger.error(`Extend session expiry error: ${error.message}`);\n throw error;\n }\n};\n\n//NOTE - GET SESSION STATISTICS\nconst getSessionStats = async (sessionId) => {\n try {\n const session = await getTemporarySession(sessionId);\n\n return {\n sessionId: session.sessionId,\n totalMessages: session.metadata.totalMessages,\n totalTokensUsed: session.metadata.totalTokensUsed,\n createdAt: session.createdAt,\n lastActivity: session.lastActivity,\n expiresAt: session.expiresAt,\n settings: session.settings,\n isActive: session.isActive\n };\n } catch (error) {\n logger.error(`Get session stats error: ${error.message}`);\n throw error;\n }\n};\n\n//NOTE - CLEANUP EXPIRED SESSIONS (FOR SCHEDULED TASKS)\nconst cleanupExpiredSessions = async () => {\n try {\n const deletedCount = await TemporaryChat.cleanupExpiredSessions();\n logger.info(`Cleaned up ${deletedCount} expired temporary chat sessions`);\n return deletedCount;\n } catch (error) {\n logger.error(`Cleanup expired sessions error: ${error.message}`);\n throw error;\n }\n};\n\n//NOTE - GET USER'S TEMPORARY SESSIONS (IF AUTHENTICATED)\nconst getUserTemporarySessions = async (userId) => {\n try {\n const sessions = await TemporaryChat.find({\n userId: userId,\n isActive: true,\n expiresAt: { $gt: new Date() }\n })\n .select('sessionId title lastActivity expiresAt metadata.totalMessages metadata.totalTokensUsed')\n .sort({ lastActivity: -1 });\n\n return sessions;\n } catch (error) {\n logger.error(`Get user temporary sessions error: ${error.message}`);\n throw error;\n }\n};\n\nmodule.exports = {\n createTemporarySession,\n getTemporarySession,\n sendTemporaryMessage,\n updateTemporarySettings,\n deleteTemporarySession,\n extendSessionExpiry,\n getSessionStats,\n cleanupExpiredSessions,\n getUserTemporarySessions\n};"}, "c88e96522c7a761d37d93ffdc01e01eef378ef29": {"t": 1785766961.227494, "n": 10857, "h": "1fff071e8dd0942f", "c": "//!SECTION - TEMPORARY CHAT SERVICE FOR HANDLING TEMPORARY AI CONVERSATIONS\n\nconst TemporaryChat = require('../models/temporaryChat');\nconst OpenAI = require('openai');\nconst { GoogleGenerativeAI } = require('@google/generative-ai');\nconst axios = require('axios');\nconst logger = require('../utils/logger');\n\n// Initialize AI services\nlet openaiChat = null;\nif (process.env.OPENAI_API_KEY) {\n openaiChat = new OpenAI({\n apiKey: process.env.OPENAI_API_KEY\n });\n}\n\nconst genAI = new GoogleGenerativeAI(process.env.GEMINI_API_KEY);\nconst DEEPSEEK_API_KEY = process.env.DEEPSEEK_API_KEY;\nconst DEEPSEEK_BASE_URL = 'https://api.deepseek.com/v1';\n\n//NOTE - CREATE NEW TEMPORARY CHAT SESSION\nconst createTemporarySession = async (options = {}) => {\n try {\n const session = await TemporaryChat.createTemporarySession({\n userId: options.userId || null,\n title: options.title || 'Temporary Chat',\n aiModel: options.aiModel || 'gpt-3.5-turbo',\n temperature: options.temperature || 0.7,\n maxTokens: options.maxTokens || 1000,\n systemPrompt: options.systemPrompt || 'You are a helpful AI assistant.',\n ipAddress: options.ipAddress,\n userAgent: options.userAgent\n });\n\n logger.info(`Created temporary chat session: ${session.sessionId}`);\n return session;\n } catch (error) {\n logger.error(`Create temporary session error: ${error.message}`);\n throw error;\n }\n};\n\n//NOTE - GET TEMPORARY CHAT SESSION\nconst getTemporarySession = async (sessionId) => {\n try {\n const session = await TemporaryChat.findActiveSession(sessionId);\n\n if (!session) {\n throw new Error('Session not found or expired');\n }\n\n return session;\n } catch (error) {\n logger.error(`Get temporary session error: ${error.message}`);\n throw error;\n }\n};\n\n//NOTE - SEND MESSAGE IN TEMPORARY CHAT\nconst sendTemporaryMessage = async (sessionId, userMessage, options = {}) => {\n try {\n const session = await getTemporarySession(sessionId);\n\n // Add user message to session\n await session.addMessage('user', userMessage);\n\n // Prepare conversation history for AI\n const conversationHistory = session.messages.map(msg => ({\n role: msg.role,\n content: msg.content\n }));\n\n // Add system prompt if it's the first message\n if (conversationHistory.length === 1) {\n conversationHistory.unshift({\n role: 'system',\n content: session.settings.systemPrompt\n });\n }\n\n // Get AI response based on selected model\n const aiResponse = await generateAIResponse(\n session.settings.aiModel,\n conversationHistory,\n {\n temperature: session.settings.temperature,\n maxTokens: session.settings.maxTokens\n }\n );\n\n // Add AI response to session\n await session.addMessage('assistant', aiResponse.content, {\n model: session.settings.aiModel,\n tokens: aiResponse.tokens,\n processingTime: aiResponse.processingTime\n });\n\n // Reload session to get updated data\n const updatedSession = await getTemporarySession(sessionId);\n\n return {\n sessionId: updatedSession.sessionId,\n messages: updatedSession.messages,\n metadata: updatedSession.metadata,\n lastMessage: aiResponse\n };\n\n } catch (error) {\n logger.error(`Send temporary message error: ${error.message}`);\n throw error;\n }\n};\n\n//NOTE - GENERATE AI RESPONSE BASED ON MODEL\nconst generateAIResponse = async (model, conversationHistory, settings) => {\n const startTime = Date.now();\n let response, tokens = 0;\n\n try {\n switch (model) {\n case 'gpt-3.5-turbo':\n case 'gpt-4':\n case 'gpt-4-turbo':\n response = await generateOpenAIResponse(model, conversationHistory, settings);\n break;\n\n case 'gemini-pro':\n response = await generateGeminiResponse(conversationHistory, settings);\n break;\n\n case 'deepseek-chat':\n response = await generateDeepSeekResponse(conversationHistory, settings);\n break;\n\n default:\n throw new Error(`Unsupported model: ${model}`);\n }\n\n const processingTime = Date.now() - startTime;\n\n return {\n content: response.content,\n tokens: response.tokens || tokens,\n processingTime\n };\n\n } catch (error) {\n logger.error(`Generate AI response error: ${error.message}`);\n throw error;\n }\n};\n\n//NOTE - OPENAI RESPONSE GENERATION\nconst generateOpenAIResponse = async (model, messages, settings) => {\n try {\n if (!openaiChat) {\n throw new Error('OpenAI API key not configured');\n }\n\n const completion = await openaiChat.chat.completions.create({\n model: model,\n messages: messages,\n temperature: settings.temperature,\n max_tokens: settings.maxTokens,\n });\n\n return {\n content: completion.choices[0].message.content,\n tokens: completion.usage?.total_tokens || 0\n };\n } catch (error) {\n logger.error(`OpenAI API error: ${error.message}`);\n throw new Error('Failed to generate response from OpenAI');\n }\n};\n\n//NOTE - GEMINI RESPONSE GENERATION\nconst generateGeminiResponse = async (messages, settings) => {\n try {\n const model = genAI.getGenerativeModel({ model: 'gemini-pro' });\n\n // Convert conversation to Gemini format\n const conversation = messages\n .filter(msg => msg.role !== 'system')\n .map(msg => msg.content)\n .join('\\n\\nUser: ');\n\n const result = await model.generateContent(conversation);\n const response = await result.response;\n\n return {\n content: response.text(),\n tokens: 0 // Gemini doesn't provide token count in free tier\n };\n } catch (error) {\n logger.error(`Gemini API error: ${error.message}`);\n throw new Error('Failed to generate response from Gemini');\n }\n};\n\n//NOTE - DEEPSEEK RESPONSE GENERATION\nconst generateDeepSeekResponse = async (messages, settings) => {\n try {\n const response = await axios.post(\n `${DEEPSEEK_BASE_URL}/chat/completions`,\n {\n model: 'deepseek-chat',\n messages: messages,\n temperature: settings.temperature,\n max_tokens: settings.maxTokens,\n stream: false\n },\n {\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${DEEPSEEK_API_KEY}`\n }\n }\n );\n\n return {\n content: response.data.choices[0].message.content,\n tokens: response.data.usage?.total_tokens || 0\n };\n } catch (error) {\n logger.error(`DeepSeek API error: ${error.message}`);\n throw new Error('Failed to generate response from DeepSeek');\n }\n};\n\n//NOTE - UPDATE TEMPORARY CHAT SETTINGS\nconst updateTemporarySettings = async (sessionId, newSettings) => {\n try {\n const session = await getTemporarySession(sessionId);\n\n const allowedSettings = ['aiModel', 'temperature', 'maxTokens', 'systemPrompt'];\n const filteredSettings = {};\n\n for (const key of allowedSettings) {\n if (newSettings[key] !== undefined) {\n filteredSettings[key] = newSettings[key];\n }\n }\n\n await session.updateSettings(filteredSettings);\n\n return session;\n } catch (error) {\n logger.error(`Update temporary settings error: ${error.message}`);\n throw error;\n }\n};\n\n//NOTE - DELETE TEMPORARY CHAT SESSION\nconst deleteTemporarySession = async (sessionId) => {\n try {\n const result = await TemporaryChat.findOneAndDelete({ sessionId });\n\n if (!result) {\n throw new Error('Session not found');\n }\n\n logger.info(`Deleted temporary chat session: ${sessionId}`);\n return { success: true, sessionId };\n } catch (error) {\n logger.error(`Delete temporary session error: ${error.message}`);\n throw error;\n }\n};\n\n//NOTE - EXTEND SESSION EXPIRY\nconst extendSessionExpiry = async (sessionId, hours = 24) => {\n try {\n const session = await getTemporarySession(sessionId);\n await session.extendExpiry(hours);\n\n return session;\n } catch (error) {\n logger.error(`Extend session expiry error: ${error.message}`);\n throw error;\n }\n};\n\n//NOTE - GET SESSION STATISTICS\nconst getSessionStats = async (sessionId) => {\n try {\n const session = await getTemporarySession(sessionId);\n\n return {\n sessionId: session.sessionId,\n totalMessages: session.metadata.totalMessages,\n totalTokensUsed: session.metadata.totalTokensUsed,\n createdAt: session.createdAt,\n lastActivity: session.lastActivity,\n expiresAt: session.expiresAt,\n settings: session.settings,\n isActive: session.isActive\n };\n } catch (error) {\n logger.error(`Get session stats error: ${error.message}`);\n throw error;\n }\n};\n\n//NOTE - CLEANUP EXPIRED SESSIONS (FOR SCHEDULED TASKS)\nconst cleanupExpiredSessions = async () => {\n try {\n const deletedCount = await TemporaryChat.cleanupExpiredSessions();\n logger.info(`Cleaned up ${deletedCount} expired temporary chat sessions`);\n return deletedCount;\n } catch (error) {\n logger.error(`Cleanup expired sessions error: ${error.message}`);\n throw error;\n }\n};\n\n//NOTE - GET USER'S TEMPORARY SESSIONS (IF AUTHENTICATED)\nconst getUserTemporarySessions = async (userId) => {\n try {\n const sessions = await TemporaryChat.find({\n userId: userId,\n isActive: true,\n expiresAt: { $gt: new Date() }\n })\n .select('sessionId title lastActivity expiresAt metadata.totalMessages metadata.totalTokensUsed')\n .sort({ lastActivity: -1 });\n\n return sessions;\n } catch (error) {\n logger.error(`Get user temporary sessions error: ${error.message}`);\n throw error;\n }\n};\n\nmodule.exports = {\n createTemporarySession,\n getTemporarySession,\n sendTemporaryMessage,\n updateTemporarySettings,\n deleteTemporarySession,\n extendSessionExpiry,\n getSessionStats,\n cleanupExpiredSessions,\n getUserTemporarySessions\n};"}, "3c6241e421588a4433960a5d85367f327b42cf3a": {"t": 1785766964.4291549, "n": 10692, "h": "493395d49a044546", "c": "//!SECTION - TEMPORARY CHAT SERVICE FOR HANDLING TEMPORARY AI CONVERSATIONS\n\nconst TemporaryChat = require('../models/temporaryChat');\nconst OpenAI = require('openai');\nconst { GoogleGenerativeAI } = require('@google/generative-ai');\nconst axios = require('axios');\nconst logger = require('../utils/logger');\n\n// Initialize AI services\nconst openaiChat = new OpenAI({\n apiKey: process.env.OPENAI_API_KEY\n});\n\nconst genAI = new GoogleGenerativeAI(process.env.GEMINI_API_KEY);\nconst DEEPSEEK_API_KEY = process.env.DEEPSEEK_API_KEY;\nconst DEEPSEEK_BASE_URL = 'https://api.deepseek.com/v1';\n\n//NOTE - CREATE NEW TEMPORARY CHAT SESSION\nconst createTemporarySession = async (options = {}) => {\n try {\n const session = await TemporaryChat.createTemporarySession({\n userId: options.userId || null,\n title: options.title || 'Temporary Chat',\n aiModel: options.aiModel || 'gpt-3.5-turbo',\n temperature: options.temperature || 0.7,\n maxTokens: options.maxTokens || 1000,\n systemPrompt: options.systemPrompt || 'You are a helpful AI assistant.',\n ipAddress: options.ipAddress,\n userAgent: options.userAgent\n });\n\n logger.info(`Created temporary chat session: ${session.sessionId}`);\n return session;\n } catch (error) {\n logger.error(`Create temporary session error: ${error.message}`);\n throw error;\n }\n};\n\n//NOTE - GET TEMPORARY CHAT SESSION\nconst getTemporarySession = async (sessionId) => {\n try {\n const session = await TemporaryChat.findActiveSession(sessionId);\n\n if (!session) {\n throw new Error('Session not found or expired');\n }\n\n return session;\n } catch (error) {\n logger.error(`Get temporary session error: ${error.message}`);\n throw error;\n }\n};\n\n//NOTE - SEND MESSAGE IN TEMPORARY CHAT\nconst sendTemporaryMessage = async (sessionId, userMessage, options = {}) => {\n try {\n const session = await getTemporarySession(sessionId);\n\n // Add user message to session\n await session.addMessage('user', userMessage);\n\n // Prepare conversation history for AI\n const conversationHistory = session.messages.map(msg => ({\n role: msg.role,\n content: msg.content\n }));\n\n // Add system prompt if it's the first message\n if (conversationHistory.length === 1) {\n conversationHistory.unshift({\n role: 'system',\n content: session.settings.systemPrompt\n });\n }\n\n // Get AI response based on selected model\n const aiResponse = await generateAIResponse(\n session.settings.aiModel,\n conversationHistory,\n {\n temperature: session.settings.temperature,\n maxTokens: session.settings.maxTokens\n }\n );\n\n // Add AI response to session\n await session.addMessage('assistant', aiResponse.content, {\n model: session.settings.aiModel,\n tokens: aiResponse.tokens,\n processingTime: aiResponse.processingTime\n });\n\n // Reload session to get updated data\n const updatedSession = await getTemporarySession(sessionId);\n\n return {\n sessionId: updatedSession.sessionId,\n messages: updatedSession.messages,\n metadata: updatedSession.metadata,\n lastMessage: aiResponse\n };\n\n } catch (error) {\n logger.error(`Send temporary message error: ${error.message}`);\n throw error;\n }\n};\n\n//NOTE - GENERATE AI RESPONSE BASED ON MODEL\nconst generateAIResponse = async (model, conversationHistory, settings) => {\n const startTime = Date.now();\n let response, tokens = 0;\n\n try {\n switch (model) {\n case 'gpt-3.5-turbo':\n case 'gpt-4':\n case 'gpt-4-turbo':\n response = await generateOpenAIResponse(model, conversationHistory, settings);\n break;\n\n case 'gemini-pro':\n response = await generateGeminiResponse(conversationHistory, settings);\n break;\n\n case 'deepseek-chat':\n response = await generateDeepSeekResponse(conversationHistory, settings);\n break;\n\n default:\n throw new Error(`Unsupported model: ${model}`);\n }\n\n const processingTime = Date.now() - startTime;\n\n return {\n content: response.content,\n tokens: response.tokens || tokens,\n processingTime\n };\n\n } catch (error) {\n logger.error(`Generate AI response error: ${error.message}`);\n throw error;\n }\n};\n\n//NOTE - OPENAI RESPONSE GENERATION\nconst generateOpenAIResponse = async (model, messages, settings) => {\n try {\n const completion = await openaiChat.chat.completions.create({\n model: model,\n messages: messages,\n temperature: settings.temperature,\n max_tokens: settings.maxTokens,\n });\n\n return {\n content: completion.choices[0].message.content,\n tokens: completion.usage?.total_tokens || 0\n };\n } catch (error) {\n logger.error(`OpenAI API error: ${error.message}`);\n throw new Error('Failed to generate response from OpenAI');\n }\n};\n\n//NOTE - GEMINI RESPONSE GENERATION\nconst generateGeminiResponse = async (messages, settings) => {\n try {\n const model = genAI.getGenerativeModel({ model: 'gemini-pro' });\n\n // Convert conversation to Gemini format\n const conversation = messages\n .filter(msg => msg.role !== 'system')\n .map(msg => msg.content)\n .join('\\n\\nUser: ');\n\n const result = await model.generateContent(conversation);\n const response = await result.response;\n\n return {\n content: response.text(),\n tokens: 0 // Gemini doesn't provide token count in free tier\n };\n } catch (error) {\n logger.error(`Gemini API error: ${error.message}`);\n throw new Error('Failed to generate response from Gemini');\n }\n};\n\n//NOTE - DEEPSEEK RESPONSE GENERATION\nconst generateDeepSeekResponse = async (messages, settings) => {\n try {\n const response = await axios.post(\n `${DEEPSEEK_BASE_URL}/chat/completions`,\n {\n model: 'deepseek-chat',\n messages: messages,\n temperature: settings.temperature,\n max_tokens: settings.maxTokens,\n stream: false\n },\n {\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${DEEPSEEK_API_KEY}`\n }\n }\n );\n\n return {\n content: response.data.choices[0].message.content,\n tokens: response.data.usage?.total_tokens || 0\n };\n } catch (error) {\n logger.error(`DeepSeek API error: ${error.message}`);\n throw new Error('Failed to generate response from DeepSeek');\n }\n};\n\n//NOTE - UPDATE TEMPORARY CHAT SETTINGS\nconst updateTemporarySettings = async (sessionId, newSettings) => {\n try {\n const session = await getTemporarySession(sessionId);\n\n const allowedSettings = ['aiModel', 'temperature', 'maxTokens', 'systemPrompt'];\n const filteredSettings = {};\n\n for (const key of allowedSettings) {\n if (newSettings[key] !== undefined) {\n filteredSettings[key] = newSettings[key];\n }\n }\n\n await session.updateSettings(filteredSettings);\n\n return session;\n } catch (error) {\n logger.error(`Update temporary settings error: ${error.message}`);\n throw error;\n }\n};\n\n//NOTE - DELETE TEMPORARY CHAT SESSION\nconst deleteTemporarySession = async (sessionId) => {\n try {\n const result = await TemporaryChat.findOneAndDelete({ sessionId });\n\n if (!result) {\n throw new Error('Session not found');\n }\n\n logger.info(`Deleted temporary chat session: ${sessionId}`);\n return { success: true, sessionId };\n } catch (error) {\n logger.error(`Delete temporary session error: ${error.message}`);\n throw error;\n }\n};\n\n//NOTE - EXTEND SESSION EXPIRY\nconst extendSessionExpiry = async (sessionId, hours = 24) => {\n try {\n const session = await getTemporarySession(sessionId);\n await session.extendExpiry(hours);\n\n return session;\n } catch (error) {\n logger.error(`Extend session expiry error: ${error.message}`);\n throw error;\n }\n};\n\n//NOTE - GET SESSION STATISTICS\nconst getSessionStats = async (sessionId) => {\n try {\n const session = await getTemporarySession(sessionId);\n\n return {\n sessionId: session.sessionId,\n totalMessages: session.metadata.totalMessages,\n totalTokensUsed: session.metadata.totalTokensUsed,\n createdAt: session.createdAt,\n lastActivity: session.lastActivity,\n expiresAt: session.expiresAt,\n settings: session.settings,\n isActive: session.isActive\n };\n } catch (error) {\n logger.error(`Get session stats error: ${error.message}`);\n throw error;\n }\n};\n\n//NOTE - CLEANUP EXPIRED SESSIONS (FOR SCHEDULED TASKS)\nconst cleanupExpiredSessions = async () => {\n try {\n const deletedCount = await TemporaryChat.cleanupExpiredSessions();\n logger.info(`Cleaned up ${deletedCount} expired temporary chat sessions`);\n return deletedCount;\n } catch (error) {\n logger.error(`Cleanup expired sessions error: ${error.message}`);\n throw error;\n }\n};\n\n//NOTE - GET USER'S TEMPORARY SESSIONS (IF AUTHENTICATED)\nconst getUserTemporarySessions = async (userId) => {\n try {\n const sessions = await TemporaryChat.find({\n userId: userId,\n isActive: true,\n expiresAt: { $gt: new Date() }\n })\n .select('sessionId title lastActivity expiresAt metadata.totalMessages metadata.totalTokensUsed')\n .sort({ lastActivity: -1 });\n\n return sessions;\n } catch (error) {\n logger.error(`Get user temporary sessions error: ${error.message}`);\n throw error;\n }\n};\n\nmodule.exports = {\n createTemporarySession,\n getTemporarySession,\n sendTemporaryMessage,\n updateTemporarySettings,\n deleteTemporarySession,\n extendSessionExpiry,\n getSessionStats,\n cleanupExpiredSessions,\n getUserTemporarySessions\n};"}}}}