Compare commits

...

2 Commits

Author SHA1 Message Date
Storme-bit
588e8395f8 extraction error logging 2026-04-21 00:22:39 -07:00
Storme-bit
936b04742e extraction error logging 2026-04-21 00:22:29 -07:00
2 changed files with 11 additions and 4 deletions

View File

@@ -27,6 +27,10 @@ function buildExtractionPrompt(userMessage, aiResponse, knownEntities = []) {
'For each entity found, provide: name, type, and a one-sentence notes field.',
'Return your answer as: { "entities": [ ... ] }',
'For each entity found, you MUST provide a non-empty notes field describing it based on the conversation.',
'For each entity found, provide:',
' "name": short proper noun only (max 4 words, e.g. "Sydney", "NexusAI", "Tim")',
' "type": one of the valid types',
' "notes": one specific sentence about this entity based on the conversation (not generic)',
'',
knownBlock,
'--- CONVERSATION ---', // clear delimiter helps smaller models

View File

@@ -32,12 +32,11 @@ async function searchEpisodes( vector, {limit = ORCHESTRATION.RECENT_EPISODE_LIM
async function searchEntities(vector, { limit = ORCHESTRATION.ENTITIES_LIMIT, scoreThreshold = ORCHESTRATION.ENTITIES_THRESHOLD, projectId = undefined } = {}) {
const body = { vector, limit, score_threshold: scoreThreshold, with_payload: true };
if (projectId !== undefined) {
if (projectId !== null && projectId !== undefined) {
body.filter = {
must: [{ key: 'projectId', match: { value: projectId ?? null } }]
must: [{ key: 'projectId', match: { value: projectId } }]
};
}
const res = await fetch(
`${BASE_URL}/collections/${COLLECTIONS.ENTITIES}/points/search`,
{
@@ -47,7 +46,11 @@ async function searchEntities(vector, { limit = ORCHESTRATION.ENTITIES_LIMIT, sc
}
);
if (!res.ok) throw new Error(`Qdrant error: ${res.status}`);
if (!res.ok) {
const body = await res.text();
throw new Error(`Qdrant error: ${res.status} - ${body}`);
}
const data = await res.json();
return data.result;
}