Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 22 additions & 15 deletions src/core/brain/tools/definitions/memory/store_reasoning_memory.ts
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -420,39 +420,42 @@
qualityScore: evaluation.qualityScore,
});

// Generate embedding with error handling
// Generate embedding with graceful fallback to text-only storage
let embedding;
let usingEmbedding = true;
try {
embedding = await embedder.embed(searchableContent);
} catch (embedError) {
logger.error(
'StoreReasoningMemory: Failed to generate embedding, disabling embeddings globally',
logger.warn(
'StoreReasoningMemory: Failed to generate embedding, falling back to text-only storage',
{
error: embedError instanceof Error ? embedError.message : String(embedError),
contentLength: searchableContent.length,
provider: embedder.getConfig().type,
}
);

// Immediately disable embeddings globally on first failure
// Disable embeddings globally on first failure
if (context?.services?.embeddingManager && embedError instanceof Error) {
context.services.embeddingManager.handleRuntimeFailure(
embedError,
embedder.getConfig().type
);
}

// Return error response since embeddings are now disabled
return {
success: false,
message: `Embeddings disabled due to failure: ${embedError instanceof Error ? embedError.message : String(embedError)}`,
mode: 'chat-only',
error: embedError instanceof Error ? embedError.message : String(embedError),
metadata: {
toolName: 'store_reasoning_memory',
embeddingDisabled: true,
},
};
// Fallback: Create a zero-vector for text-only storage
// This allows the memory to be stored without embeddings while maintaining schema compatibility
const embeddingDimension = parseInt(env.VECTOR_STORE_DIMENSION || '1536', 10);

Check failure on line 448 in src/core/brain/tools/definitions/memory/store_reasoning_memory.ts

View workflow job for this annotation

GitHub Actions / TypeScript

Argument of type 'number | "1536"' is not assignable to parameter of type 'string'.
embedding = new Array(embeddingDimension).fill(0);
usingEmbedding = false;

logger.info(
'StoreReasoningMemory: Using zero-vector fallback for text-only storage',
{
embeddingDimension,
willStoreAsTextOnly: true,
}
);
}

// CRITICAL: Ensure all data types are correct (avoid string numbers like "0.6")
Expand Down Expand Up @@ -921,13 +924,17 @@
qualityScore: evaluation.qualityScore,
issueCount: evaluation.issues.length,
},
usingEmbedding: usingEmbedding,
storageMode: usingEmbedding ? 'semantic' : 'text-only',
},
metadata: {
toolName: 'store_reasoning_memory',
traceId: trace.id,
vectorId,
processingTime,
hasTaskContext: !!trace.metadata.taskContext,
usingEmbedding: usingEmbedding,
storageMode: usingEmbedding ? 'semantic' : 'text-only',
},
};
} catch (error) {
Expand Down
Loading