Spaces:
Running
Running
| const aiService = require('./ai.service'); | |
| const memoryService = require('./memory.service'); | |
| class SocketService { | |
| init(io) { | |
| io.on('connection', (socket) => { | |
| console.log('User connected:', socket.id); | |
| const sessionId = socket.id; | |
| socket.on('message', async (data) => { | |
| const { text, chatId, modelType = 'aura' } = data; | |
| const sessionId = chatId || socket.id; | |
| console.log(`📩 Received message for session: ${sessionId}`); | |
| try { | |
| // 1. Get History | |
| const history = await memoryService.getHistory(sessionId); | |
| // 2. Stream Response | |
| let fullResponse = ""; | |
| await aiService.getStreamingResponse(text, history, (data) => { | |
| // data is now { type: 'chunk'|'thought'|'tool'|'output', content: '...' } | |
| socket.emit('chunk', data); | |
| if (data.type === 'chunk') { | |
| fullResponse += data.content; | |
| } | |
| }, modelType); | |
| // 3. Update Memory | |
| await memoryService.addMessage(sessionId, 'user', text); | |
| await memoryService.addMessage(sessionId, 'model', fullResponse); | |
| socket.emit('done', { text: fullResponse }); | |
| } catch (error) { | |
| console.error('💥 Socket Service Error:', error); | |
| socket.emit('chunk', { type: 'chunk', content: "⚠️ *AURA is currently experiencing a connection blackout. Please ensure your backend is running and API keys are valid.*" }); | |
| } | |
| }); | |
| socket.on('disconnect', () => { | |
| console.log('User disconnected'); | |
| // Optional: clear memory after disconnect or keep for a while | |
| }); | |
| }); | |
| } | |
| } | |
| module.exports = new SocketService(); | |