memory isolation fix
This commit is contained in:
@@ -107,10 +107,10 @@ async function getSemanticEpisodes(
|
||||
}
|
||||
}
|
||||
|
||||
async function getRelevantEntities(userMessage) {
|
||||
async function getRelevantEntities(userMessage, projectId=null) {
|
||||
try {
|
||||
const vector = await embedding.embed(userMessage);
|
||||
const results = await qdrant.searchEntities(vector);
|
||||
const results = await qdrant.searchEntities(vector, { projectId });
|
||||
console.log(
|
||||
"[orchestration] Entity search results:",
|
||||
results.map((r) => ({ name: r.payload?.name, score: r.score })),
|
||||
@@ -176,7 +176,7 @@ async function chat(externalId, userMessage, options = {}) {
|
||||
);
|
||||
|
||||
// 3b. Entity Search
|
||||
const entities = await getRelevantEntities(userMessage);
|
||||
const entities = await getRelevantEntities(userMessage, session.project_id ?? null);
|
||||
|
||||
// 4. Assemble prompt
|
||||
const prompt = buildPrompt(
|
||||
@@ -196,6 +196,7 @@ async function chat(externalId, userMessage, options = {}) {
|
||||
userMessage,
|
||||
result.text,
|
||||
(result.evalCount || 0) + (result.promptEvalCount || 0),
|
||||
session.project_id ?? null,
|
||||
)
|
||||
.catch((err) =>
|
||||
console.error(`[orchestration] Failed to save episode`, err.message),
|
||||
@@ -262,7 +263,7 @@ async function chatStream(externalId, userMessage, onChunk, options = {}) {
|
||||
{semanticLimit, scoreThreshold }
|
||||
);
|
||||
|
||||
const entities = await getRelevantEntities(userMessage);
|
||||
const entities = await getRelevantEntities(userMessage, session.project_id ?? null);
|
||||
|
||||
const prompt = buildPrompt(
|
||||
recentEpisodes,
|
||||
@@ -323,7 +324,7 @@ async function chatStream(externalId, userMessage, onChunk, options = {}) {
|
||||
console.log("[orchestration] final streamed text length:", fullText.length);
|
||||
|
||||
if (fullText.trim()) {
|
||||
await memory.createEpisode(session.id, userMessage, fullText, tokenCount);
|
||||
await memory.createEpisode(session.id, userMessage, fullText, tokenCount, session.project_id ?? null);
|
||||
} else {
|
||||
console.warn(
|
||||
"[orchestration] Stream finished with no assistant text; episode not saved",
|
||||
|
||||
@@ -29,11 +29,11 @@ async function getRecentEpisodes(sessionId, limit = EPISODIC.DEFAULT_SESSIONS_LI
|
||||
return res.json();
|
||||
}
|
||||
|
||||
async function createEpisode(sessionId, userMessage, aiResponse, tokenCount) {
|
||||
async function createEpisode(sessionId, userMessage, aiResponse, tokenCount, projectId=null) {
|
||||
const res = await fetch(`${BASE_URL}/episodes`, {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({ sessionId, userMessage, aiResponse, tokenCount })
|
||||
body: JSON.stringify({ sessionId, userMessage, aiResponse, tokenCount, projectId })
|
||||
});
|
||||
if (!res.ok) throw new Error(`Failed to create episode: ${res.status} ${res.statusText}`);
|
||||
return res.json();
|
||||
|
||||
@@ -33,9 +33,15 @@ async function searchEpisodes( vector, {limit = ORCHESTRATION.RECENT_EPISODE_LIM
|
||||
return data.result;
|
||||
}
|
||||
|
||||
async function searchEntities(vector, { limit = 5, scoreThreshold = 0.6 } = {}) {
|
||||
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) {
|
||||
body.filter = {
|
||||
must: [{ key: 'projectId', match: { value: projectId ?? null } }]
|
||||
};
|
||||
}
|
||||
|
||||
const res = await fetch(
|
||||
`${BASE_URL}/collections/${COLLECTIONS.ENTITIES}/points/search`,
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user