error response consistency, human readible1
This commit is contained in:
@@ -17,7 +17,7 @@ router.post('/complete', async (req, res) => {
|
||||
res.json(result);
|
||||
} catch (error) {
|
||||
logger.error('[Inference] Completion error:', error.message);
|
||||
res.status(500).json({ error: error.message });
|
||||
res.status(500).json({ error: 'Inference failed', detail: error.message });
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -87,15 +87,27 @@ async function extractAndStoreEntities(userMessage, aiResponse, projectId=null)
|
||||
const data = await res.json();
|
||||
const raw = data.response?.trim() ?? '';
|
||||
|
||||
const parsed = JSON.parse(raw);
|
||||
const jsonMatch = raw.match(/\{[\s\S]*\}/);
|
||||
if (!jsonMatch) {
|
||||
logger.warn('[entities] No JSON object found in response');
|
||||
logger.debug('[entities] Raw response was:', raw);
|
||||
return;
|
||||
}
|
||||
|
||||
let parsed;
|
||||
try {
|
||||
parsed = JSON.parse(jsonMatch[0]);
|
||||
} catch (err) {
|
||||
logger.warn('[entities] Failed to parse extraction response:', err.message);
|
||||
logger.debug('[entities] Raw response was:', raw);
|
||||
return;
|
||||
}
|
||||
const entities = Array.isArray(parsed.entities) ? parsed.entities : [];
|
||||
if (entities.length === 0) {
|
||||
logger.debug('[entities] No entities found in this exchange — skipping');
|
||||
return; // not an error, just nothing to extract
|
||||
}
|
||||
|
||||
if (!Array.isArray(entities)) throw new Error('Response was not a JSON array');
|
||||
|
||||
let saved = 0;
|
||||
|
||||
|
||||
|
||||
@@ -80,7 +80,7 @@ app.patch('/sessions/by-external/:externalId', (req, res) => {
|
||||
const session = episodic.updateSessionByExternalId(req.params.externalId, {name, projectId });
|
||||
res.json(session);
|
||||
} catch (err) {
|
||||
res.status(500).json({error: err.message });
|
||||
res.status(500).json({ error: 'Failed to update session', detail: err.message });
|
||||
}
|
||||
});
|
||||
|
||||
@@ -235,7 +235,7 @@ app.post('/projects', (req, res) => {
|
||||
try {
|
||||
res.status(201).json(createProject({ name: name.trim(), description, colour, icon }));
|
||||
} catch (err) {
|
||||
res.status(500).json({ error: err.message });
|
||||
res.status(500).json({ error: 'Failed to create project', detail: err.message });
|
||||
}
|
||||
});
|
||||
|
||||
@@ -255,7 +255,7 @@ app.post('/projects/:id/summarize', async (req, res) => {
|
||||
if (err.message.includes('No session summaries or episodes')) {
|
||||
return res.status(422).json({ error: err.message });
|
||||
}
|
||||
res.status(500).json({ error: err.message });
|
||||
res.status(500).json({ error: 'Failed to generate project summary', detail: err.message });
|
||||
}
|
||||
});
|
||||
|
||||
@@ -310,7 +310,7 @@ app.post('/summaries', (req, res) => {
|
||||
const summary = createSummary({ sessionId, projectId, content, tokenCount, episodeRange, metadata });
|
||||
res.status(201).json(summary);
|
||||
} catch (err) {
|
||||
res.status(500).json({ error: err.message });
|
||||
res.status(500).json({ error: 'Failed to create summary', detail: err.message });
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@ router.post('/', async (req, res) => {
|
||||
res.json(result)
|
||||
} catch (err) {
|
||||
logger.error(`[orchestration] chat error: `, err.message)
|
||||
res.status(500).json ({ error: err.message})
|
||||
res.status(500).json ({ error: 'Chat failed', detail: err.message })
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ router.get('/', async (req, res) => {
|
||||
const result = await memory.getEpisodes({ limit, offset, sessionId, q });
|
||||
res.json(result);
|
||||
} catch (err) {
|
||||
res.status(500).json({ error: err.message });
|
||||
res.status(500).json({ error: 'Failed to fetch episodes', detail: err.message });
|
||||
}
|
||||
});
|
||||
|
||||
@@ -18,7 +18,7 @@ router.delete('/:id', async (req, res) => {
|
||||
await memory.deleteEpisode(req.params.id);
|
||||
res.status(204).send();
|
||||
} catch (err) {
|
||||
res.status(500).json({ error: err.message });
|
||||
res.status(500).json({ error: 'Failed to delete episode', detail: err.message });
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ router.get('/', async (req, res) => {
|
||||
try {
|
||||
res.json(await memory.getProjects());
|
||||
} catch (err) {
|
||||
res.status(500).json({ error: err.message });
|
||||
res.status(500).json({ error: 'Failed to fetch projects', detail: err.message });
|
||||
}
|
||||
});
|
||||
|
||||
@@ -17,7 +17,7 @@ router.post('/', async (req, res) => {
|
||||
try {
|
||||
res.status(201).json(await memory.createProject({ name: name.trim(), description, colour, icon, isolated }));
|
||||
} catch (err) {
|
||||
res.status(500).json({ error: err.message });
|
||||
res.status(500).json({ error: 'Failed to create project', detail: err.message });
|
||||
}
|
||||
});
|
||||
|
||||
@@ -25,7 +25,7 @@ router.patch('/:id', async (req, res) => {
|
||||
try {
|
||||
res.json(await memory.updateProject(req.params.id, req.body));
|
||||
} catch (err) {
|
||||
res.status(500).json({ error: err.message });
|
||||
res.status(500).json({ error: 'Failed to update project', detail: err.message });
|
||||
}
|
||||
});
|
||||
|
||||
@@ -34,7 +34,7 @@ router.delete('/:id', async (req, res) => {
|
||||
await memory.deleteProject(req.params.id);
|
||||
res.status(204).send();
|
||||
} catch (err) {
|
||||
res.status(500).json({ error: err.message });
|
||||
res.status(500).json({ error: 'Failed to delete project', detail: err.message });
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ router.get('/project/:projectId/overview', async (req, res) => {
|
||||
const summary = await memory.getProjectOverviewSummary(req.params.projectId);
|
||||
res.json(summary);
|
||||
} catch (err) {
|
||||
res.status(500).json({ error: err.message });
|
||||
res.status(500).json({ error: 'Failed to fetch project overview summary', detail: err.message });
|
||||
}
|
||||
});
|
||||
|
||||
@@ -32,7 +32,7 @@ router.get('/session/:sessionId', async (req, res) => {
|
||||
const summaries = await memory.getSummariesBySession(session.id);
|
||||
res.json(summaries);
|
||||
} catch (err) {
|
||||
res.status(500).json({ error: err.message });
|
||||
res.status(500).json({ error: 'Failed to fetch session summaries', detail: err.message });
|
||||
}
|
||||
});
|
||||
|
||||
@@ -41,7 +41,7 @@ router.get('/project/:projectId', async (req, res) => {
|
||||
const summaries = await memory.getSummariesByProject(req.params.projectId);
|
||||
res.json(summaries);
|
||||
} catch (err) {
|
||||
res.status(500).json({ error: err.message });
|
||||
res.status(500).json({ error: 'Failed to fetch project summaries', detail: err.message });
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user