diff --git a/packages/memory-service/src/episodic/index.js b/packages/memory-service/src/episodic/index.js index 19f9c56..d18c5ec 100644 --- a/packages/memory-service/src/episodic/index.js +++ b/packages/memory-service/src/episodic/index.js @@ -98,27 +98,26 @@ function deleteSessionByExternalId(externalId) { // --Episodes -------------------------------------------------- // Creates a new episode linked to a session, with user message, AI response, optional token count, and metadata -async function createEpisode(sessionId, userMessage, aiResponse, tokenCount = null, metadata = null, projectId=null) { +async function createEpisode(sessionId, userMessage, aiResponse, tokenCount = null, projectId=null) { const db = getDB(); // Wrap insert + session touch in a transaction — both succeed or neither does const insert = db.transaction(() => { const stmt = db.prepare(` - INSERT INTO episodes (session_id, user_message, ai_response, token_count, metadata) - VALUES (?, ?, ?, ?, ?) + INSERT INTO episodes (session_id, user_message, ai_response, token_count) + VALUES (?, ?, ?, ?) `); const result = stmt.run( sessionId, userMessage, aiResponse, tokenCount, - metadata ? JSON.stringify(metadata) : null ); touchSession(sessionId); return getEpisode(result.lastInsertRowid); }); - const episode= insert(); + const episode = insert(); //embed ascynchronously after SQLite completes, non-blocking. If embedding fail, the episode still saved. getEpisodeEmbedding(userMessage, aiResponse) @@ -155,11 +154,12 @@ function getEpisodesBySession(sessionId, limit = EPISODIC.DEFAULT_PAGE_SIZE, off } // Retrieves recent episodes across all sessions, ordered by creation time descending, with a limit -function getRecentEpisodes(limit = EPISODIC.DEFAULT_RECENT_LIMIT) { +function getRecentEpisodes(sessionId, limit = EPISODIC.DEFAULT_RECENT_LIMIT) { // Cross-session recent episodes — useful for recency-based retrieval const db = getDB(); const stmt = db.prepare(` SELECT * FROM episodes + WHERE session_id = ? ORDER BY created_at DESC LIMIT ? `); diff --git a/packages/memory-service/src/index.js b/packages/memory-service/src/index.js index 34cfe36..50357f4 100644 --- a/packages/memory-service/src/index.js +++ b/packages/memory-service/src/index.js @@ -83,9 +83,7 @@ app.patch('/sessions/by-external/:externalId', (req, res) => { } }); - - -// Updates the session's updated_at timestamp to now +// Deletes a session and all associated episodes app.delete('/sessions/by-external/:externalId', (req, res) => { episodic.deleteSessionByExternalId(req.params.externalId); res.status(204).send(); @@ -103,13 +101,6 @@ app.post('/episodes', async (req, res) => { } const episode = await episodic.createEpisode(sessionId, userMessage, aiResponse, tokenCount, metadata, projectId); - console.log('[memory] create episode body:', { - sessionId, - userMessageLength: userMessage?.length, - aiResponseLength: aiResponse?.length, - tokenCount - }); - res.status(201).json(episode); }); diff --git a/packages/orchestration-service/src/chat/index.js b/packages/orchestration-service/src/chat/index.js index 104b28a..a9d9c00 100644 --- a/packages/orchestration-service/src/chat/index.js +++ b/packages/orchestration-service/src/chat/index.js @@ -182,20 +182,15 @@ async function chat(externalId, userMessage, options = {}) { const result = await inference.complete(prompt, {...options, temperature, repeatPenalty, topP, topK}); // 6. Write episode back to memory - memory - .createEpisode( - session.id, - userMessage, - result.text, - (result.evalCount || 0) + (result.promptEvalCount || 0), - session.project_id ?? null, - ) - .catch((err) => - console.error(`[orchestration] Failed to save episode`, err.message), + try { + await memory.createEpisode( + session.id, userMessage, result.text, + (result.evalCount || 0) + (result.promptEvalCount || 0), + session.project_id ?? null, ); - - // 7. Trigger summarization check (fire-and-forget) - // Pass full episodes list so summarization can sum tokens accurately + } catch (err) { + console.error('[orchestration] Failed to save episode:', err.message); + } const allEpisodes = await memory.getRecentEpisodes(session.id, 9999); triggerSummary(session, allEpisodes); @@ -258,7 +253,6 @@ async function chatStream(externalId, userMessage, onChunk, options = {}) { ); const entities = await getRelevantEntities(userMessage, session.project_id ?? null); - console.log('[orchestration] entity search projectId:', session.project_id ?? null); const prompt = buildPrompt( recentEpisodes,