trivial turn patch
This commit is contained in:
@@ -2,7 +2,7 @@ const memory = require("../services/memory");
|
||||
const inference = require("../services/inference");
|
||||
const embedding = require("../services/embedding");
|
||||
const qdrant = require("../services/qdrant");
|
||||
const { ORCHESTRATION, RETRIEVAL, logger } = require("@nexusai/shared");
|
||||
const { ORCHESTRATION, RETRIEVAL, logger, isTrivialTurn } = require("@nexusai/shared");
|
||||
const appSettings = require("../config/settings");
|
||||
const {triggerSummary} = require('../services/summarization')
|
||||
const graph = require('../services/graph');
|
||||
@@ -283,20 +283,27 @@ async function assembleContext(externalId, userMessage) {
|
||||
const isFirstMessage = recentEpisodes.length === 0;
|
||||
const recentIds = new Set(recentEpisodes.map(e => e.id));
|
||||
|
||||
// 4. Embed the query once — the vector is shared by semantic episode search
|
||||
// and entity search, so embedding it twice was a wasted round-trip + Ollama call.
|
||||
let queryVector = null;
|
||||
try {
|
||||
queryVector = await embedding.embed(userMessage);
|
||||
} catch (err) {
|
||||
logger.warn('[orchestration] Query embedding failed; semantic + entity search disabled this turn:', err.message);
|
||||
}
|
||||
// 4. Retrieval — skipped entirely on contentless social turns (greetings,
|
||||
// sign-offs). On those, recent history alone is the right context; running
|
||||
// semantic/keyword/entity retrieval only surfaces marginal noise the model
|
||||
// then confabulates around. Embed once (shared by episode + entity search).
|
||||
let fusedWithScores = [];
|
||||
let entityResults = [];
|
||||
if (!isTrivialTurn(userMessage)) {
|
||||
let queryVector = null;
|
||||
try {
|
||||
queryVector = await embedding.embed(userMessage);
|
||||
} catch (err) {
|
||||
logger.warn('[orchestration] Query embedding failed; semantic + entity search disabled this turn:', err.message);
|
||||
}
|
||||
|
||||
// 4b. Fused retrieval + entity search in parallel (both are independent)
|
||||
const [fusedWithScores, entityResults] = await Promise.all([
|
||||
getFusedEpisodes(userMessage, session, recentIds, projectSessionIds, queryVector, { semanticLimit, scoreThreshold, semanticWeight, keywordWeight }),
|
||||
getRelevantEntities(queryVector, session.project_id ?? null),
|
||||
]);
|
||||
[fusedWithScores, entityResults] = await Promise.all([
|
||||
getFusedEpisodes(userMessage, session, recentIds, projectSessionIds, queryVector, { semanticLimit, scoreThreshold, semanticWeight, keywordWeight }),
|
||||
getRelevantEntities(queryVector, session.project_id ?? null),
|
||||
]);
|
||||
} else {
|
||||
logger.debug('[orchestration] Trivial turn — skipping semantic/keyword/entity retrieval');
|
||||
}
|
||||
|
||||
// 5. Entity-linked episode IDs for scoring bonus
|
||||
const entityIds = entityResults.map(e => e.id);
|
||||
|
||||
Reference in New Issue
Block a user