diff --git a/packages/memory-service/src/episodic/index.js b/packages/memory-service/src/episodic/index.js index df2d7e9..cd4cefe 100644 --- a/packages/memory-service/src/episodic/index.js +++ b/packages/memory-service/src/episodic/index.js @@ -23,6 +23,16 @@ function getSession(id) { return parseSession(stmt.get(id)); } +function getSessions(limit = EPISODIC.DEFAULT_PAGE_SIZE, offset = 0) { + const db = getDB(); + const stmt = db.prepare(` + SELECT * FROM sessions + ORDER BY updated_at DESC + LIMIT ? OFFSET ? + `); + return stmt.all(limit, offset).map(parseSession); +} + // Retrieves a session by its external ID function getSessionByExternalId(externalId) { const db = getDB(); @@ -172,6 +182,7 @@ async function getEpisodeEmbedding(userMessage, aiResponse){ module.exports = { createSession, getSession, + getSessions, getSessionByExternalId, deleteSession, createEpisode, diff --git a/packages/memory-service/src/index.js b/packages/memory-service/src/index.js index 99df064..c496d6a 100644 --- a/packages/memory-service/src/index.js +++ b/packages/memory-service/src/index.js @@ -41,6 +41,12 @@ app.post('/sessions', (req, res) => { } }); +app.get('/sessions', (req, res) => { + const {limit = 20, offset = 0 } = req.query; + const sessions = episodic.getSessions(Number(limit), Number(offset)); + res.json(sessions); +}) + // Retrieves a session by its external ID app.get('/sessions/by-external/:externalId', (req, res) => { const session = episodic.getSessionByExternalId(req.params.externalId); @@ -48,6 +54,8 @@ app.get('/sessions/by-external/:externalId', (req, res) => { res.json(session); }); + + // Retrieves a session by its internal ID app.get('/sessions/:id', (req, res) => { const session = episodic.getSession(req.params.id); diff --git a/packages/orchestration-service/src/routes/sessions.js b/packages/orchestration-service/src/routes/sessions.js index 27db379..2142e9a 100644 --- a/packages/orchestration-service/src/routes/sessions.js +++ b/packages/orchestration-service/src/routes/sessions.js @@ -18,4 +18,14 @@ router.get('/:sessionId/history', async (req, res) => { } }); +router.get('/', async (req, res) => { + const {limit = 20, offset = 0 } = req.query; + try { + const sessions = await memory.getSessions(Number(limit), Number(offset)); + res.json(sessions); + } catch (err) { + res.status(500).json({error: err.message}); + } +}) + module.exports = router; \ No newline at end of file diff --git a/packages/orchestration-service/src/services/memory.js b/packages/orchestration-service/src/services/memory.js index e5c2a63..af5a804 100644 --- a/packages/orchestration-service/src/services/memory.js +++ b/packages/orchestration-service/src/services/memory.js @@ -56,11 +56,20 @@ async function getSessionHistory(sessionId, limit = 20, offset = 0) { return res.json(); } +async function getSessions(limit = 20, offset = 0) { + const res = await fetch( + `${BASE_URL}/sessions?limit${limit}&offset=${offset}` + ); + if (!res.ok) throw new Error(`Failed to fetch sessions: ${res.status}`); + return res.json(); +} + module.exports = { getSessionByExternalId, createSession, getRecentEpisodes, createEpisode, getEpisodeById, - getSessionHistory + getSessionHistory, + getSessions } \ No newline at end of file