agentdb 2.0.0-alpha.2 → 2.0.0-alpha.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agentdb.min.js +4 -4
- package/dist/simulation/cli.js +0 -0
- package/dist/src/cli/agentdb-cli.d.ts.map +1 -1
- package/dist/src/cli/agentdb-cli.js +78 -0
- package/dist/src/cli/agentdb-cli.js.map +1 -1
- package/package.json +3 -3
- package/src/cli/agentdb-cli.ts +78 -0
- package/dist/agentdb-advanced.js +0 -2110
- package/dist/agentdb-advanced.min.js +0 -1
- package/dist/backends/GraphBackend.d.ts +0 -196
- package/dist/backends/GraphBackend.d.ts.map +0 -1
- package/dist/backends/GraphBackend.js +0 -33
- package/dist/backends/GraphBackend.js.map +0 -1
- package/dist/backends/LearningBackend.d.ts +0 -148
- package/dist/backends/LearningBackend.d.ts.map +0 -1
- package/dist/backends/LearningBackend.js +0 -27
- package/dist/backends/LearningBackend.js.map +0 -1
- package/dist/backends/VectorBackend.d.ts +0 -119
- package/dist/backends/VectorBackend.d.ts.map +0 -1
- package/dist/backends/VectorBackend.js +0 -14
- package/dist/backends/VectorBackend.js.map +0 -1
- package/dist/backends/detector.d.ts +0 -81
- package/dist/backends/detector.d.ts.map +0 -1
- package/dist/backends/detector.js +0 -192
- package/dist/backends/detector.js.map +0 -1
- package/dist/backends/factory.d.ts +0 -50
- package/dist/backends/factory.d.ts.map +0 -1
- package/dist/backends/factory.js +0 -161
- package/dist/backends/factory.js.map +0 -1
- package/dist/backends/graph/GraphDatabaseAdapter.d.ts +0 -139
- package/dist/backends/graph/GraphDatabaseAdapter.d.ts.map +0 -1
- package/dist/backends/graph/GraphDatabaseAdapter.js +0 -194
- package/dist/backends/graph/GraphDatabaseAdapter.js.map +0 -1
- package/dist/backends/hnswlib/HNSWLibBackend.d.ts +0 -92
- package/dist/backends/hnswlib/HNSWLibBackend.d.ts.map +0 -1
- package/dist/backends/hnswlib/HNSWLibBackend.js +0 -316
- package/dist/backends/hnswlib/HNSWLibBackend.js.map +0 -1
- package/dist/backends/hnswlib/index.d.ts +0 -7
- package/dist/backends/hnswlib/index.d.ts.map +0 -1
- package/dist/backends/hnswlib/index.js +0 -7
- package/dist/backends/hnswlib/index.js.map +0 -1
- package/dist/backends/index.d.ts +0 -14
- package/dist/backends/index.d.ts.map +0 -1
- package/dist/backends/index.js +0 -13
- package/dist/backends/index.js.map +0 -1
- package/dist/backends/ruvector/RuVectorBackend.d.ts +0 -75
- package/dist/backends/ruvector/RuVectorBackend.d.ts.map +0 -1
- package/dist/backends/ruvector/RuVectorBackend.js +0 -198
- package/dist/backends/ruvector/RuVectorBackend.js.map +0 -1
- package/dist/backends/ruvector/RuVectorLearning.d.ts +0 -104
- package/dist/backends/ruvector/RuVectorLearning.d.ts.map +0 -1
- package/dist/backends/ruvector/RuVectorLearning.js +0 -177
- package/dist/backends/ruvector/RuVectorLearning.js.map +0 -1
- package/dist/backends/ruvector/index.d.ts +0 -9
- package/dist/backends/ruvector/index.d.ts.map +0 -1
- package/dist/backends/ruvector/index.js +0 -8
- package/dist/backends/ruvector/index.js.map +0 -1
- package/dist/benchmarks/wasm-vector-benchmark.d.ts +0 -10
- package/dist/benchmarks/wasm-vector-benchmark.d.ts.map +0 -1
- package/dist/benchmarks/wasm-vector-benchmark.js +0 -196
- package/dist/benchmarks/wasm-vector-benchmark.js.map +0 -1
- package/dist/browser/AdvancedFeatures.d.ts +0 -144
- package/dist/browser/AdvancedFeatures.d.ts.map +0 -1
- package/dist/browser/AdvancedFeatures.js +0 -430
- package/dist/browser/AdvancedFeatures.js.map +0 -1
- package/dist/browser/HNSWIndex.d.ts +0 -117
- package/dist/browser/HNSWIndex.d.ts.map +0 -1
- package/dist/browser/HNSWIndex.js +0 -402
- package/dist/browser/HNSWIndex.js.map +0 -1
- package/dist/browser/ProductQuantization.d.ts +0 -107
- package/dist/browser/ProductQuantization.d.ts.map +0 -1
- package/dist/browser/ProductQuantization.js +0 -337
- package/dist/browser/ProductQuantization.js.map +0 -1
- package/dist/browser/browser/AdvancedFeatures.d.ts +0 -144
- package/dist/browser/browser/AdvancedFeatures.d.ts.map +0 -1
- package/dist/browser/browser/AdvancedFeatures.js +0 -427
- package/dist/browser/browser/HNSWIndex.d.ts +0 -117
- package/dist/browser/browser/HNSWIndex.d.ts.map +0 -1
- package/dist/browser/browser/HNSWIndex.js +0 -402
- package/dist/browser/browser/ProductQuantization.d.ts +0 -107
- package/dist/browser/browser/ProductQuantization.d.ts.map +0 -1
- package/dist/browser/browser/ProductQuantization.js +0 -348
- package/dist/browser/browser/index.d.ts +0 -223
- package/dist/browser/browser/index.d.ts.map +0 -1
- package/dist/browser/browser/index.js +0 -233
- package/dist/browser/index.d.ts +0 -223
- package/dist/browser/index.d.ts.map +0 -1
- package/dist/browser/index.js +0 -225
- package/dist/browser/index.js.map +0 -1
- package/dist/cli/agentdb-cli.d.ts +0 -154
- package/dist/cli/agentdb-cli.d.ts.map +0 -1
- package/dist/cli/agentdb-cli.js +0 -2273
- package/dist/cli/agentdb-cli.js.map +0 -1
- package/dist/cli/agentdb.db +0 -0
- package/dist/cli/commands/init.d.ts +0 -12
- package/dist/cli/commands/init.d.ts.map +0 -1
- package/dist/cli/commands/init.js +0 -115
- package/dist/cli/commands/init.js.map +0 -1
- package/dist/cli/commands/install-embeddings.d.ts +0 -10
- package/dist/cli/commands/install-embeddings.d.ts.map +0 -1
- package/dist/cli/commands/install-embeddings.js +0 -68
- package/dist/cli/commands/install-embeddings.js.map +0 -1
- package/dist/cli/commands/migrate.d.ts +0 -15
- package/dist/cli/commands/migrate.d.ts.map +0 -1
- package/dist/cli/commands/migrate.js +0 -425
- package/dist/cli/commands/migrate.js.map +0 -1
- package/dist/cli/commands/status.d.ts +0 -10
- package/dist/cli/commands/status.d.ts.map +0 -1
- package/dist/cli/commands/status.js +0 -129
- package/dist/cli/commands/status.js.map +0 -1
- package/dist/controllers/CausalMemoryGraph.d.ts +0 -126
- package/dist/controllers/CausalMemoryGraph.d.ts.map +0 -1
- package/dist/controllers/CausalMemoryGraph.js +0 -323
- package/dist/controllers/CausalMemoryGraph.js.map +0 -1
- package/dist/controllers/CausalRecall.d.ts +0 -139
- package/dist/controllers/CausalRecall.d.ts.map +0 -1
- package/dist/controllers/CausalRecall.js +0 -356
- package/dist/controllers/CausalRecall.js.map +0 -1
- package/dist/controllers/ContextSynthesizer.d.ts +0 -65
- package/dist/controllers/ContextSynthesizer.d.ts.map +0 -1
- package/dist/controllers/ContextSynthesizer.js +0 -208
- package/dist/controllers/ContextSynthesizer.js.map +0 -1
- package/dist/controllers/EmbeddingService.d.ts +0 -37
- package/dist/controllers/EmbeddingService.d.ts.map +0 -1
- package/dist/controllers/EmbeddingService.js +0 -136
- package/dist/controllers/EmbeddingService.js.map +0 -1
- package/dist/controllers/EnhancedEmbeddingService.d.ts +0 -50
- package/dist/controllers/EnhancedEmbeddingService.d.ts.map +0 -1
- package/dist/controllers/EnhancedEmbeddingService.js +0 -119
- package/dist/controllers/EnhancedEmbeddingService.js.map +0 -1
- package/dist/controllers/ExplainableRecall.d.ts +0 -163
- package/dist/controllers/ExplainableRecall.d.ts.map +0 -1
- package/dist/controllers/ExplainableRecall.js +0 -485
- package/dist/controllers/ExplainableRecall.js.map +0 -1
- package/dist/controllers/HNSWIndex.d.ts +0 -128
- package/dist/controllers/HNSWIndex.d.ts.map +0 -1
- package/dist/controllers/HNSWIndex.js +0 -361
- package/dist/controllers/HNSWIndex.js.map +0 -1
- package/dist/controllers/LearningSystem.d.ts +0 -195
- package/dist/controllers/LearningSystem.d.ts.map +0 -1
- package/dist/controllers/LearningSystem.js +0 -929
- package/dist/controllers/LearningSystem.js.map +0 -1
- package/dist/controllers/MMRDiversityRanker.d.ts +0 -50
- package/dist/controllers/MMRDiversityRanker.d.ts.map +0 -1
- package/dist/controllers/MMRDiversityRanker.js +0 -130
- package/dist/controllers/MMRDiversityRanker.js.map +0 -1
- package/dist/controllers/MetadataFilter.d.ts +0 -70
- package/dist/controllers/MetadataFilter.d.ts.map +0 -1
- package/dist/controllers/MetadataFilter.js +0 -243
- package/dist/controllers/MetadataFilter.js.map +0 -1
- package/dist/controllers/NightlyLearner.d.ts +0 -114
- package/dist/controllers/NightlyLearner.d.ts.map +0 -1
- package/dist/controllers/NightlyLearner.js +0 -394
- package/dist/controllers/NightlyLearner.js.map +0 -1
- package/dist/controllers/QUICClient.d.ts +0 -109
- package/dist/controllers/QUICClient.d.ts.map +0 -1
- package/dist/controllers/QUICClient.js +0 -299
- package/dist/controllers/QUICClient.js.map +0 -1
- package/dist/controllers/QUICServer.d.ts +0 -121
- package/dist/controllers/QUICServer.d.ts.map +0 -1
- package/dist/controllers/QUICServer.js +0 -383
- package/dist/controllers/QUICServer.js.map +0 -1
- package/dist/controllers/ReasoningBank.d.ts +0 -196
- package/dist/controllers/ReasoningBank.d.ts.map +0 -1
- package/dist/controllers/ReasoningBank.js +0 -494
- package/dist/controllers/ReasoningBank.js.map +0 -1
- package/dist/controllers/ReflexionMemory.d.ts +0 -125
- package/dist/controllers/ReflexionMemory.d.ts.map +0 -1
- package/dist/controllers/ReflexionMemory.js +0 -521
- package/dist/controllers/ReflexionMemory.js.map +0 -1
- package/dist/controllers/SkillLibrary.d.ts +0 -149
- package/dist/controllers/SkillLibrary.d.ts.map +0 -1
- package/dist/controllers/SkillLibrary.js +0 -547
- package/dist/controllers/SkillLibrary.js.map +0 -1
- package/dist/controllers/SyncCoordinator.d.ts +0 -120
- package/dist/controllers/SyncCoordinator.d.ts.map +0 -1
- package/dist/controllers/SyncCoordinator.js +0 -441
- package/dist/controllers/SyncCoordinator.js.map +0 -1
- package/dist/controllers/WASMVectorSearch.d.ts +0 -89
- package/dist/controllers/WASMVectorSearch.d.ts.map +0 -1
- package/dist/controllers/WASMVectorSearch.js +0 -234
- package/dist/controllers/WASMVectorSearch.js.map +0 -1
- package/dist/controllers/frontier-index.d.ts +0 -14
- package/dist/controllers/frontier-index.d.ts.map +0 -1
- package/dist/controllers/frontier-index.js +0 -10
- package/dist/controllers/frontier-index.js.map +0 -1
- package/dist/controllers/index.d.ts +0 -30
- package/dist/controllers/index.d.ts.map +0 -1
- package/dist/controllers/index.js +0 -18
- package/dist/controllers/index.js.map +0 -1
- package/dist/db-fallback.d.ts +0 -26
- package/dist/db-fallback.d.ts.map +0 -1
- package/dist/db-fallback.js +0 -264
- package/dist/db-fallback.js.map +0 -1
- package/dist/db-test.d.ts +0 -13
- package/dist/db-test.d.ts.map +0 -1
- package/dist/db-test.js +0 -55
- package/dist/db-test.js.map +0 -1
- package/dist/db-unified.d.ts +0 -76
- package/dist/db-unified.d.ts.map +0 -1
- package/dist/db-unified.js +0 -278
- package/dist/db-unified.js.map +0 -1
- package/dist/examples/quic-sync-example.d.ts +0 -9
- package/dist/examples/quic-sync-example.d.ts.map +0 -1
- package/dist/examples/quic-sync-example.js +0 -169
- package/dist/examples/quic-sync-example.js.map +0 -1
- package/dist/examples/wasm-vector-usage.d.ts +0 -12
- package/dist/examples/wasm-vector-usage.d.ts.map +0 -1
- package/dist/examples/wasm-vector-usage.js +0 -190
- package/dist/examples/wasm-vector-usage.js.map +0 -1
- package/dist/index.d.ts +0 -28
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -35
- package/dist/index.js.map +0 -1
- package/dist/malp/core/ccc.d.ts +0 -99
- package/dist/malp/core/ccc.d.ts.map +0 -1
- package/dist/malp/core/ccc.js +0 -181
- package/dist/malp/core/ccc.js.map +0 -1
- package/dist/malp/core/index.d.ts +0 -9
- package/dist/malp/core/index.d.ts.map +0 -1
- package/dist/malp/core/index.js +0 -9
- package/dist/malp/core/index.js.map +0 -1
- package/dist/malp/core/linalg.d.ts +0 -101
- package/dist/malp/core/linalg.d.ts.map +0 -1
- package/dist/malp/core/linalg.js +0 -278
- package/dist/malp/core/linalg.js.map +0 -1
- package/dist/malp/core/optimizer.d.ts +0 -68
- package/dist/malp/core/optimizer.d.ts.map +0 -1
- package/dist/malp/core/optimizer.js +0 -160
- package/dist/malp/core/optimizer.js.map +0 -1
- package/dist/malp/index.d.ts +0 -33
- package/dist/malp/index.d.ts.map +0 -1
- package/dist/malp/index.js +0 -37
- package/dist/malp/index.js.map +0 -1
- package/dist/malp/metrics/agreement.d.ts +0 -106
- package/dist/malp/metrics/agreement.d.ts.map +0 -1
- package/dist/malp/metrics/agreement.js +0 -199
- package/dist/malp/metrics/agreement.js.map +0 -1
- package/dist/malp/metrics/comparison.d.ts +0 -93
- package/dist/malp/metrics/comparison.d.ts.map +0 -1
- package/dist/malp/metrics/comparison.js +0 -256
- package/dist/malp/metrics/comparison.js.map +0 -1
- package/dist/malp/metrics/index.d.ts +0 -8
- package/dist/malp/metrics/index.d.ts.map +0 -1
- package/dist/malp/metrics/index.js +0 -8
- package/dist/malp/metrics/index.js.map +0 -1
- package/dist/malp/metrics/performance.d.ts +0 -61
- package/dist/malp/metrics/performance.d.ts.map +0 -1
- package/dist/malp/metrics/performance.js +0 -190
- package/dist/malp/metrics/performance.js.map +0 -1
- package/dist/malp/models/index.d.ts +0 -7
- package/dist/malp/models/index.d.ts.map +0 -1
- package/dist/malp/models/index.js +0 -7
- package/dist/malp/models/index.js.map +0 -1
- package/dist/malp/models/malp.d.ts +0 -116
- package/dist/malp/models/malp.d.ts.map +0 -1
- package/dist/malp/models/malp.js +0 -206
- package/dist/malp/models/malp.js.map +0 -1
- package/dist/malp/models/regressor.d.ts +0 -80
- package/dist/malp/models/regressor.d.ts.map +0 -1
- package/dist/malp/models/regressor.js +0 -229
- package/dist/malp/models/regressor.js.map +0 -1
- package/dist/malp/reasoningbank_validator.d.ts +0 -187
- package/dist/malp/reasoningbank_validator.d.ts.map +0 -1
- package/dist/malp/reasoningbank_validator.js +0 -246
- package/dist/malp/reasoningbank_validator.js.map +0 -1
- package/dist/malp/wasm_bindings.d.ts +0 -344
- package/dist/malp/wasm_bindings.d.ts.map +0 -1
- package/dist/malp/wasm_bindings.js +0 -9
- package/dist/malp/wasm_bindings.js.map +0 -1
- package/dist/mcp/agentdb-mcp-server.d.ts +0 -8
- package/dist/mcp/agentdb-mcp-server.d.ts.map +0 -1
- package/dist/mcp/agentdb-mcp-server.js +0 -2116
- package/dist/mcp/agentdb-mcp-server.js.map +0 -1
- package/dist/mcp/learning-tools-handlers.d.ts +0 -16
- package/dist/mcp/learning-tools-handlers.d.ts.map +0 -1
- package/dist/mcp/learning-tools-handlers.js +0 -105
- package/dist/mcp/learning-tools-handlers.js.map +0 -1
- package/dist/optimizations/BatchOperations.d.ts +0 -109
- package/dist/optimizations/BatchOperations.d.ts.map +0 -1
- package/dist/optimizations/BatchOperations.js +0 -407
- package/dist/optimizations/BatchOperations.js.map +0 -1
- package/dist/optimizations/QueryOptimizer.d.ts +0 -83
- package/dist/optimizations/QueryOptimizer.d.ts.map +0 -1
- package/dist/optimizations/QueryOptimizer.js +0 -228
- package/dist/optimizations/QueryOptimizer.js.map +0 -1
- package/dist/optimizations/ToolCache.d.ts +0 -137
- package/dist/optimizations/ToolCache.d.ts.map +0 -1
- package/dist/optimizations/ToolCache.js +0 -281
- package/dist/optimizations/ToolCache.js.map +0 -1
- package/dist/optimizations/index.d.ts +0 -10
- package/dist/optimizations/index.d.ts.map +0 -1
- package/dist/optimizations/index.js +0 -8
- package/dist/optimizations/index.js.map +0 -1
- package/dist/security/input-validation.d.ts +0 -109
- package/dist/security/input-validation.d.ts.map +0 -1
- package/dist/security/input-validation.js +0 -398
- package/dist/security/input-validation.js.map +0 -1
- package/dist/security/limits.d.ts +0 -150
- package/dist/security/limits.d.ts.map +0 -1
- package/dist/security/limits.js +0 -288
- package/dist/security/limits.js.map +0 -1
- package/dist/security/path-security.d.ts +0 -100
- package/dist/security/path-security.d.ts.map +0 -1
- package/dist/security/path-security.js +0 -337
- package/dist/security/path-security.js.map +0 -1
- package/dist/security/validation.d.ts +0 -95
- package/dist/security/validation.d.ts.map +0 -1
- package/dist/security/validation.js +0 -315
- package/dist/security/validation.js.map +0 -1
- package/dist/types/quic.d.ts +0 -518
- package/dist/types/quic.d.ts.map +0 -1
- package/dist/types/quic.js +0 -272
- package/dist/types/quic.js.map +0 -1
|
@@ -1,356 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* CausalRecall - Utility-Based Reranking + Certificate Issuer
|
|
3
|
-
*
|
|
4
|
-
* Combines:
|
|
5
|
-
* 1. Vector similarity search
|
|
6
|
-
* 2. Causal uplift from CausalMemoryGraph
|
|
7
|
-
* 3. Utility-based reranking: U = α*similarity + β*uplift − γ*latencyCost
|
|
8
|
-
* 4. Automatic certificate issuance via ExplainableRecall
|
|
9
|
-
*
|
|
10
|
-
* This is the main entry point for production retrieval with:
|
|
11
|
-
* - Causal-aware ranking
|
|
12
|
-
* - Explainable provenance
|
|
13
|
-
* - Policy compliance
|
|
14
|
-
*/
|
|
15
|
-
import { CausalMemoryGraph } from './CausalMemoryGraph.js';
|
|
16
|
-
import { ExplainableRecall } from './ExplainableRecall.js';
|
|
17
|
-
export class CausalRecall {
|
|
18
|
-
config;
|
|
19
|
-
db;
|
|
20
|
-
causalGraph;
|
|
21
|
-
explainableRecall;
|
|
22
|
-
embedder;
|
|
23
|
-
vectorBackend;
|
|
24
|
-
constructor(db, embedder, vectorBackend, config = {
|
|
25
|
-
alpha: 0.7,
|
|
26
|
-
beta: 0.2,
|
|
27
|
-
gamma: 0.1,
|
|
28
|
-
minConfidence: 0.6
|
|
29
|
-
}) {
|
|
30
|
-
this.config = config;
|
|
31
|
-
this.db = db;
|
|
32
|
-
this.embedder = embedder;
|
|
33
|
-
this.vectorBackend = vectorBackend;
|
|
34
|
-
this.causalGraph = new CausalMemoryGraph(db);
|
|
35
|
-
this.explainableRecall = new ExplainableRecall(db);
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* Main recall function with utility-based reranking and certificate issuance
|
|
39
|
-
*
|
|
40
|
-
* @param queryId Unique query identifier
|
|
41
|
-
* @param queryText Natural language query
|
|
42
|
-
* @param k Number of results to return (default: 12)
|
|
43
|
-
* @param requirements Optional list of requirements for completeness checking
|
|
44
|
-
* @param accessLevel Security access level for certificate
|
|
45
|
-
* @returns Reranked results with certificate
|
|
46
|
-
*/
|
|
47
|
-
async recall(queryId, queryText, k = 12, requirements, accessLevel = 'internal') {
|
|
48
|
-
const startTime = Date.now();
|
|
49
|
-
const metrics = {
|
|
50
|
-
vectorSearchMs: 0,
|
|
51
|
-
causalLookupMs: 0,
|
|
52
|
-
rerankMs: 0,
|
|
53
|
-
certificateMs: 0
|
|
54
|
-
};
|
|
55
|
-
// Step 1: Vector similarity search
|
|
56
|
-
const vectorStart = Date.now();
|
|
57
|
-
const queryEmbedding = await this.embedder.embed(queryText);
|
|
58
|
-
const candidates = await this.vectorSearch(queryEmbedding, k * 2); // Fetch 2k for reranking
|
|
59
|
-
metrics.vectorSearchMs = Date.now() - vectorStart;
|
|
60
|
-
// Step 2: Load causal edges for candidates
|
|
61
|
-
const causalStart = Date.now();
|
|
62
|
-
const causalEdges = await this.loadCausalEdges(candidates.map(c => c.id));
|
|
63
|
-
metrics.causalLookupMs = Date.now() - causalStart;
|
|
64
|
-
// Step 3: Rerank by utility
|
|
65
|
-
const rerankStart = Date.now();
|
|
66
|
-
const reranked = this.rerankByUtility(candidates, causalEdges);
|
|
67
|
-
const topK = reranked.slice(0, k);
|
|
68
|
-
metrics.rerankMs = Date.now() - rerankStart;
|
|
69
|
-
// Step 4: Issue certificate
|
|
70
|
-
const certStart = Date.now();
|
|
71
|
-
const certificate = this.issueCertificate({
|
|
72
|
-
queryId,
|
|
73
|
-
queryText,
|
|
74
|
-
candidates: topK,
|
|
75
|
-
requirements: requirements || this.extractRequirements(queryText),
|
|
76
|
-
accessLevel
|
|
77
|
-
});
|
|
78
|
-
metrics.certificateMs = Date.now() - certStart;
|
|
79
|
-
const totalLatencyMs = Date.now() - startTime;
|
|
80
|
-
return {
|
|
81
|
-
candidates: topK,
|
|
82
|
-
certificate,
|
|
83
|
-
queryId,
|
|
84
|
-
totalLatencyMs,
|
|
85
|
-
metrics
|
|
86
|
-
};
|
|
87
|
-
}
|
|
88
|
-
/**
|
|
89
|
-
* Vector similarity search using cosine similarity
|
|
90
|
-
*/
|
|
91
|
-
async vectorSearch(queryEmbedding, k) {
|
|
92
|
-
// Use optimized vector backend if available (100x faster)
|
|
93
|
-
if (this.vectorBackend) {
|
|
94
|
-
const searchResults = this.vectorBackend.search(queryEmbedding, k, {
|
|
95
|
-
threshold: 0.0
|
|
96
|
-
});
|
|
97
|
-
// Fetch episode content from DB
|
|
98
|
-
if (searchResults.length === 0) {
|
|
99
|
-
return [];
|
|
100
|
-
}
|
|
101
|
-
const episodeIds = searchResults.map(r => r.id);
|
|
102
|
-
const placeholders = episodeIds.map(() => '?').join(',');
|
|
103
|
-
const episodes = this.db.prepare(`
|
|
104
|
-
SELECT
|
|
105
|
-
id,
|
|
106
|
-
task || ' ' || COALESCE(output, '') as content,
|
|
107
|
-
latency_ms
|
|
108
|
-
FROM episodes
|
|
109
|
-
WHERE id IN (${placeholders})
|
|
110
|
-
`).all(...episodeIds);
|
|
111
|
-
const episodeMap = new Map(episodes.map((e) => [e.id, e]));
|
|
112
|
-
return searchResults.map(result => {
|
|
113
|
-
const ep = episodeMap.get(result.id);
|
|
114
|
-
return {
|
|
115
|
-
id: result.id.toString(),
|
|
116
|
-
type: 'episode',
|
|
117
|
-
content: ep?.content || '',
|
|
118
|
-
similarity: result.similarity,
|
|
119
|
-
latencyMs: ep?.latency_ms || 0
|
|
120
|
-
};
|
|
121
|
-
});
|
|
122
|
-
}
|
|
123
|
-
// Fallback to SQL-based similarity search
|
|
124
|
-
const results = [];
|
|
125
|
-
const episodes = this.db.prepare(`
|
|
126
|
-
SELECT
|
|
127
|
-
e.id,
|
|
128
|
-
'episode' as type,
|
|
129
|
-
e.task || ' ' || COALESCE(e.output, '') as content,
|
|
130
|
-
ee.embedding,
|
|
131
|
-
e.latency_ms
|
|
132
|
-
FROM episodes e
|
|
133
|
-
JOIN episode_embeddings ee ON e.id = ee.episode_id
|
|
134
|
-
ORDER BY e.ts DESC
|
|
135
|
-
LIMIT ?
|
|
136
|
-
`).all(k * 2);
|
|
137
|
-
for (const ep of episodes) {
|
|
138
|
-
const episodeRow = ep;
|
|
139
|
-
const embedding = this.deserializeEmbedding(episodeRow.embedding);
|
|
140
|
-
const similarity = this.cosineSimilarity(queryEmbedding, embedding);
|
|
141
|
-
results.push({
|
|
142
|
-
id: episodeRow.id.toString(),
|
|
143
|
-
type: episodeRow.type,
|
|
144
|
-
content: episodeRow.content,
|
|
145
|
-
similarity,
|
|
146
|
-
latencyMs: episodeRow.latency_ms || 0
|
|
147
|
-
});
|
|
148
|
-
}
|
|
149
|
-
return results
|
|
150
|
-
.sort((a, b) => b.similarity - a.similarity)
|
|
151
|
-
.slice(0, k);
|
|
152
|
-
}
|
|
153
|
-
/**
|
|
154
|
-
* Load causal edges for candidates
|
|
155
|
-
*/
|
|
156
|
-
async loadCausalEdges(candidateIds) {
|
|
157
|
-
const edgeMap = new Map();
|
|
158
|
-
if (candidateIds.length === 0) {
|
|
159
|
-
return edgeMap;
|
|
160
|
-
}
|
|
161
|
-
const placeholders = candidateIds.map(() => '?').join(',');
|
|
162
|
-
const edges = this.db.prepare(`
|
|
163
|
-
SELECT * FROM causal_edges
|
|
164
|
-
WHERE from_memory_id IN (${placeholders})
|
|
165
|
-
AND confidence >= ?
|
|
166
|
-
`).all(...candidateIds.map(id => parseInt(id)), this.config.minConfidence || 0.6);
|
|
167
|
-
for (const edge of edges) {
|
|
168
|
-
const fromId = edge.from_memory_id.toString();
|
|
169
|
-
if (!edgeMap.has(fromId)) {
|
|
170
|
-
edgeMap.set(fromId, []);
|
|
171
|
-
}
|
|
172
|
-
edgeMap.get(fromId).push({
|
|
173
|
-
id: edge.id,
|
|
174
|
-
fromMemoryId: edge.from_memory_id,
|
|
175
|
-
fromMemoryType: edge.from_memory_type,
|
|
176
|
-
toMemoryId: edge.to_memory_id,
|
|
177
|
-
toMemoryType: edge.to_memory_type,
|
|
178
|
-
similarity: edge.similarity,
|
|
179
|
-
uplift: edge.uplift,
|
|
180
|
-
confidence: edge.confidence,
|
|
181
|
-
sampleSize: edge.sample_size,
|
|
182
|
-
evidenceIds: edge.evidence_ids ? JSON.parse(edge.evidence_ids) : undefined,
|
|
183
|
-
mechanism: edge.mechanism
|
|
184
|
-
});
|
|
185
|
-
}
|
|
186
|
-
return edgeMap;
|
|
187
|
-
}
|
|
188
|
-
/**
|
|
189
|
-
* Rerank by utility: U = α*similarity + β*uplift − γ*latencyCost
|
|
190
|
-
*/
|
|
191
|
-
rerankByUtility(candidates, causalEdges) {
|
|
192
|
-
const { alpha, beta, gamma } = this.config;
|
|
193
|
-
const reranked = candidates.map(candidate => {
|
|
194
|
-
// Get causal uplift (average if multiple edges)
|
|
195
|
-
const edges = causalEdges.get(candidate.id) || [];
|
|
196
|
-
const avgUplift = edges.length > 0
|
|
197
|
-
? edges.reduce((sum, e) => sum + (e.uplift || 0), 0) / edges.length
|
|
198
|
-
: 0;
|
|
199
|
-
const avgConfidence = edges.length > 0
|
|
200
|
-
? edges.reduce((sum, e) => sum + e.confidence, 0) / edges.length
|
|
201
|
-
: 0;
|
|
202
|
-
// Normalize latency (assume max 1000ms)
|
|
203
|
-
const latencyCost = Math.min(candidate.latencyMs / 1000, 1.0);
|
|
204
|
-
// Calculate utility
|
|
205
|
-
const utilityScore = alpha * candidate.similarity + beta * avgUplift - gamma * latencyCost;
|
|
206
|
-
return {
|
|
207
|
-
id: candidate.id,
|
|
208
|
-
type: candidate.type,
|
|
209
|
-
content: candidate.content,
|
|
210
|
-
similarity: candidate.similarity,
|
|
211
|
-
uplift: avgUplift,
|
|
212
|
-
causalConfidence: avgConfidence,
|
|
213
|
-
latencyMs: candidate.latencyMs,
|
|
214
|
-
utilityScore,
|
|
215
|
-
rank: 0 // Will be set after sorting
|
|
216
|
-
};
|
|
217
|
-
});
|
|
218
|
-
// Sort by utility score descending
|
|
219
|
-
reranked.sort((a, b) => b.utilityScore - a.utilityScore);
|
|
220
|
-
// Assign ranks
|
|
221
|
-
reranked.forEach((candidate, idx) => {
|
|
222
|
-
candidate.rank = idx + 1;
|
|
223
|
-
});
|
|
224
|
-
return reranked;
|
|
225
|
-
}
|
|
226
|
-
/**
|
|
227
|
-
* Issue certificate for the retrieval
|
|
228
|
-
*/
|
|
229
|
-
issueCertificate(params) {
|
|
230
|
-
const { queryId, queryText, candidates, requirements, accessLevel } = params;
|
|
231
|
-
const chunks = candidates.map(c => ({
|
|
232
|
-
id: c.id,
|
|
233
|
-
type: c.type,
|
|
234
|
-
content: c.content,
|
|
235
|
-
relevance: c.similarity
|
|
236
|
-
}));
|
|
237
|
-
return this.explainableRecall.createCertificate({
|
|
238
|
-
queryId,
|
|
239
|
-
queryText,
|
|
240
|
-
chunks,
|
|
241
|
-
requirements,
|
|
242
|
-
accessLevel
|
|
243
|
-
});
|
|
244
|
-
}
|
|
245
|
-
/**
|
|
246
|
-
* Extract requirements from query text (simple keyword extraction)
|
|
247
|
-
*/
|
|
248
|
-
extractRequirements(queryText) {
|
|
249
|
-
// Simple extraction: split on common words and filter
|
|
250
|
-
const stopWords = new Set(['a', 'an', 'the', 'is', 'are', 'was', 'were', 'to', 'from', 'for', 'with', 'how', 'what', 'where', 'when', 'why', 'who']);
|
|
251
|
-
const words = queryText
|
|
252
|
-
.toLowerCase()
|
|
253
|
-
.replace(/[^a-z0-9\s]/g, '')
|
|
254
|
-
.split(/\s+/)
|
|
255
|
-
.filter(w => w.length > 3 && !stopWords.has(w));
|
|
256
|
-
// Return unique words
|
|
257
|
-
return [...new Set(words)];
|
|
258
|
-
}
|
|
259
|
-
/**
|
|
260
|
-
* Deserialize embedding from Buffer
|
|
261
|
-
*/
|
|
262
|
-
deserializeEmbedding(buffer) {
|
|
263
|
-
return new Float32Array(buffer.buffer, buffer.byteOffset, buffer.length / 4);
|
|
264
|
-
}
|
|
265
|
-
/**
|
|
266
|
-
* Cosine similarity between two vectors
|
|
267
|
-
*/
|
|
268
|
-
cosineSimilarity(a, b) {
|
|
269
|
-
if (a.length !== b.length) {
|
|
270
|
-
throw new Error('Vector dimensions must match');
|
|
271
|
-
}
|
|
272
|
-
let dotProduct = 0;
|
|
273
|
-
let magnitudeA = 0;
|
|
274
|
-
let magnitudeB = 0;
|
|
275
|
-
for (let i = 0; i < a.length; i++) {
|
|
276
|
-
dotProduct += a[i] * b[i];
|
|
277
|
-
magnitudeA += a[i] * a[i];
|
|
278
|
-
magnitudeB += b[i] * b[i];
|
|
279
|
-
}
|
|
280
|
-
const magnitude = Math.sqrt(magnitudeA) * Math.sqrt(magnitudeB);
|
|
281
|
-
return magnitude === 0 ? 0 : dotProduct / magnitude;
|
|
282
|
-
}
|
|
283
|
-
/**
|
|
284
|
-
* Batch recall for multiple queries
|
|
285
|
-
*/
|
|
286
|
-
async batchRecall(queries, requirements, accessLevel = 'internal') {
|
|
287
|
-
const results = [];
|
|
288
|
-
for (const query of queries) {
|
|
289
|
-
const result = await this.recall(query.queryId, query.queryText, query.k || 12, requirements, accessLevel);
|
|
290
|
-
results.push(result);
|
|
291
|
-
}
|
|
292
|
-
return results;
|
|
293
|
-
}
|
|
294
|
-
/**
|
|
295
|
-
* Get recall statistics
|
|
296
|
-
*/
|
|
297
|
-
getStats() {
|
|
298
|
-
const causalEdges = this.db.prepare('SELECT COUNT(*) as count FROM causal_edges').get();
|
|
299
|
-
const certificates = this.db.prepare('SELECT COUNT(*) as count FROM recall_certificates').get();
|
|
300
|
-
const avgStats = this.db.prepare(`
|
|
301
|
-
SELECT
|
|
302
|
-
AVG(redundancy_ratio) as avg_redundancy,
|
|
303
|
-
AVG(completeness_score) as avg_completeness
|
|
304
|
-
FROM recall_certificates
|
|
305
|
-
`).get();
|
|
306
|
-
return {
|
|
307
|
-
totalCausalEdges: causalEdges.count,
|
|
308
|
-
totalCertificates: certificates.count,
|
|
309
|
-
avgRedundancyRatio: avgStats?.avg_redundancy || 0,
|
|
310
|
-
avgCompletenessScore: avgStats?.avg_completeness || 0
|
|
311
|
-
};
|
|
312
|
-
}
|
|
313
|
-
/**
|
|
314
|
-
* Update rerank configuration
|
|
315
|
-
*/
|
|
316
|
-
updateConfig(config) {
|
|
317
|
-
this.config = { ...this.config, ...config };
|
|
318
|
-
}
|
|
319
|
-
/**
|
|
320
|
-
* Search for memories with semantic similarity and causal utility ranking
|
|
321
|
-
*
|
|
322
|
-
* @param params Search parameters
|
|
323
|
-
* @returns Array of ranked search results with similarity and causal uplift scores
|
|
324
|
-
*/
|
|
325
|
-
async search(params) {
|
|
326
|
-
const { query, k = 12, includeEvidence = false, alpha = this.config.alpha, beta = this.config.beta, gamma = this.config.gamma } = params;
|
|
327
|
-
// Temporarily override config for this search
|
|
328
|
-
const originalConfig = { ...this.config };
|
|
329
|
-
this.config = { ...this.config, alpha, beta, gamma };
|
|
330
|
-
try {
|
|
331
|
-
// Step 1: Generate query embedding
|
|
332
|
-
const queryEmbedding = await this.embedder.embed(query);
|
|
333
|
-
// Step 2: Vector similarity search
|
|
334
|
-
const candidates = await this.vectorSearch(queryEmbedding, k * 2);
|
|
335
|
-
// Step 3: Load causal edges for uplift scoring
|
|
336
|
-
const causalEdges = await this.loadCausalEdges(candidates.map(c => c.id));
|
|
337
|
-
// Step 4: Rerank by utility
|
|
338
|
-
const reranked = this.rerankByUtility(candidates, causalEdges);
|
|
339
|
-
// Step 5: Format results for search interface
|
|
340
|
-
const results = reranked.slice(0, k).map(candidate => ({
|
|
341
|
-
id: parseInt(candidate.id),
|
|
342
|
-
type: candidate.type,
|
|
343
|
-
content: candidate.content,
|
|
344
|
-
similarity: candidate.similarity,
|
|
345
|
-
causalUplift: candidate.uplift || 0,
|
|
346
|
-
utilityScore: candidate.utilityScore
|
|
347
|
-
}));
|
|
348
|
-
return results;
|
|
349
|
-
}
|
|
350
|
-
finally {
|
|
351
|
-
// Restore original config
|
|
352
|
-
this.config = originalConfig;
|
|
353
|
-
}
|
|
354
|
-
}
|
|
355
|
-
}
|
|
356
|
-
//# sourceMappingURL=CausalRecall.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"CausalRecall.js","sourceRoot":"","sources":["../../src/controllers/CausalRecall.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Context Synthesis - Generate coherent narratives from multiple memories
|
|
3
|
-
*
|
|
4
|
-
* Takes a collection of retrieved episodes/patterns and synthesizes
|
|
5
|
-
* a coherent context summary with extracted patterns, success rates,
|
|
6
|
-
* and actionable insights.
|
|
7
|
-
*/
|
|
8
|
-
export interface MemoryPattern {
|
|
9
|
-
task: string;
|
|
10
|
-
reward: number;
|
|
11
|
-
success: boolean;
|
|
12
|
-
critique?: string;
|
|
13
|
-
input?: string;
|
|
14
|
-
output?: string;
|
|
15
|
-
similarity?: number;
|
|
16
|
-
[key: string]: any;
|
|
17
|
-
}
|
|
18
|
-
export interface SynthesizedContext {
|
|
19
|
-
summary: string;
|
|
20
|
-
patterns: string[];
|
|
21
|
-
successRate: number;
|
|
22
|
-
averageReward: number;
|
|
23
|
-
recommendations: string[];
|
|
24
|
-
keyInsights: string[];
|
|
25
|
-
totalMemories: number;
|
|
26
|
-
}
|
|
27
|
-
export declare class ContextSynthesizer {
|
|
28
|
-
/**
|
|
29
|
-
* Synthesize context from multiple memories
|
|
30
|
-
*
|
|
31
|
-
* @param memories - Retrieved episodes/patterns
|
|
32
|
-
* @param options - Synthesis options
|
|
33
|
-
* @returns Synthesized context with insights
|
|
34
|
-
*/
|
|
35
|
-
static synthesize(memories: MemoryPattern[], options?: {
|
|
36
|
-
minPatternFrequency?: number;
|
|
37
|
-
includeRecommendations?: boolean;
|
|
38
|
-
maxSummaryLength?: number;
|
|
39
|
-
}): SynthesizedContext;
|
|
40
|
-
/**
|
|
41
|
-
* Extract common patterns from memory critiques
|
|
42
|
-
*/
|
|
43
|
-
private static extractPatterns;
|
|
44
|
-
/**
|
|
45
|
-
* Extract meaningful phrases from text
|
|
46
|
-
*/
|
|
47
|
-
private static extractPhrases;
|
|
48
|
-
/**
|
|
49
|
-
* Generate key insights from memories
|
|
50
|
-
*/
|
|
51
|
-
private static generateKeyInsights;
|
|
52
|
-
/**
|
|
53
|
-
* Generate actionable recommendations
|
|
54
|
-
*/
|
|
55
|
-
private static generateRecommendations;
|
|
56
|
-
/**
|
|
57
|
-
* Generate narrative summary
|
|
58
|
-
*/
|
|
59
|
-
private static generateSummary;
|
|
60
|
-
/**
|
|
61
|
-
* Extract actionable steps from successful memories
|
|
62
|
-
*/
|
|
63
|
-
static extractActionableSteps(memories: MemoryPattern[]): string[];
|
|
64
|
-
}
|
|
65
|
-
//# sourceMappingURL=ContextSynthesizer.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ContextSynthesizer.d.ts","sourceRoot":"","sources":["../../src/controllers/ContextSynthesizer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,kBAAkB;IAC7B;;;;;;OAMG;IACH,MAAM,CAAC,UAAU,CACf,QAAQ,EAAE,aAAa,EAAE,EACzB,OAAO,GAAE;QACP,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,sBAAsB,CAAC,EAAE,OAAO,CAAC;QACjC,gBAAgB,CAAC,EAAE,MAAM,CAAC;KACtB,GACL,kBAAkB;IA8CrB;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IAwB9B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;IAoB7B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAuClC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,uBAAuB;IAoCtC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IAwC9B;;OAEG;IACH,MAAM,CAAC,sBAAsB,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,MAAM,EAAE;CAiBnE"}
|
|
@@ -1,208 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Context Synthesis - Generate coherent narratives from multiple memories
|
|
3
|
-
*
|
|
4
|
-
* Takes a collection of retrieved episodes/patterns and synthesizes
|
|
5
|
-
* a coherent context summary with extracted patterns, success rates,
|
|
6
|
-
* and actionable insights.
|
|
7
|
-
*/
|
|
8
|
-
export class ContextSynthesizer {
|
|
9
|
-
/**
|
|
10
|
-
* Synthesize context from multiple memories
|
|
11
|
-
*
|
|
12
|
-
* @param memories - Retrieved episodes/patterns
|
|
13
|
-
* @param options - Synthesis options
|
|
14
|
-
* @returns Synthesized context with insights
|
|
15
|
-
*/
|
|
16
|
-
static synthesize(memories, options = {}) {
|
|
17
|
-
const minPatternFrequency = options.minPatternFrequency ?? 2;
|
|
18
|
-
const includeRecommendations = options.includeRecommendations ?? true;
|
|
19
|
-
if (memories.length === 0) {
|
|
20
|
-
return {
|
|
21
|
-
summary: 'No relevant memories found.',
|
|
22
|
-
patterns: [],
|
|
23
|
-
successRate: 0,
|
|
24
|
-
averageReward: 0,
|
|
25
|
-
recommendations: [],
|
|
26
|
-
keyInsights: [],
|
|
27
|
-
totalMemories: 0,
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
// Calculate statistics
|
|
31
|
-
const successCount = memories.filter(m => m.success).length;
|
|
32
|
-
const successRate = successCount / memories.length;
|
|
33
|
-
const averageReward = memories.reduce((sum, m) => sum + (m.reward || 0), 0) / memories.length;
|
|
34
|
-
// Extract common patterns from critiques
|
|
35
|
-
const patterns = this.extractPatterns(memories, minPatternFrequency);
|
|
36
|
-
// Generate key insights
|
|
37
|
-
const keyInsights = this.generateKeyInsights(memories, successRate, averageReward);
|
|
38
|
-
// Generate recommendations
|
|
39
|
-
const recommendations = includeRecommendations
|
|
40
|
-
? this.generateRecommendations(memories, patterns, successRate)
|
|
41
|
-
: [];
|
|
42
|
-
// Generate summary narrative
|
|
43
|
-
const summary = this.generateSummary(memories, patterns, successRate, averageReward);
|
|
44
|
-
return {
|
|
45
|
-
summary,
|
|
46
|
-
patterns,
|
|
47
|
-
successRate,
|
|
48
|
-
averageReward,
|
|
49
|
-
recommendations,
|
|
50
|
-
keyInsights,
|
|
51
|
-
totalMemories: memories.length,
|
|
52
|
-
};
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* Extract common patterns from memory critiques
|
|
56
|
-
*/
|
|
57
|
-
static extractPatterns(memories, minFrequency) {
|
|
58
|
-
const phraseCount = new Map();
|
|
59
|
-
// Extract meaningful phrases from critiques
|
|
60
|
-
for (const memory of memories) {
|
|
61
|
-
if (memory.critique) {
|
|
62
|
-
const phrases = this.extractPhrases(memory.critique);
|
|
63
|
-
for (const phrase of phrases) {
|
|
64
|
-
phraseCount.set(phrase, (phraseCount.get(phrase) || 0) + 1);
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
// Filter by minimum frequency
|
|
69
|
-
const patterns = [];
|
|
70
|
-
for (const [phrase, count] of phraseCount.entries()) {
|
|
71
|
-
if (count >= minFrequency) {
|
|
72
|
-
patterns.push(`${phrase} (${count}/${memories.length} times)`);
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
return patterns.slice(0, 10); // Top 10 patterns
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* Extract meaningful phrases from text
|
|
79
|
-
*/
|
|
80
|
-
static extractPhrases(text) {
|
|
81
|
-
// Simple phrase extraction (can be enhanced with NLP)
|
|
82
|
-
const sentences = text.split(/[.!?]/).filter(s => s.trim().length > 0);
|
|
83
|
-
const phrases = [];
|
|
84
|
-
for (const sentence of sentences) {
|
|
85
|
-
const trimmed = sentence.trim();
|
|
86
|
-
// Extract phrases with key action words
|
|
87
|
-
if (trimmed.match(/\b(use|implement|fix|improve|add|create|design|test)\b/i) &&
|
|
88
|
-
trimmed.length > 10 &&
|
|
89
|
-
trimmed.length < 100) {
|
|
90
|
-
phrases.push(trimmed.toLowerCase());
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
return phrases;
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* Generate key insights from memories
|
|
97
|
-
*/
|
|
98
|
-
static generateKeyInsights(memories, successRate, averageReward) {
|
|
99
|
-
const insights = [];
|
|
100
|
-
// Success rate insight
|
|
101
|
-
if (successRate >= 0.8) {
|
|
102
|
-
insights.push(`High success rate (${(successRate * 100).toFixed(0)}%) indicates strong pattern match`);
|
|
103
|
-
}
|
|
104
|
-
else if (successRate < 0.5) {
|
|
105
|
-
insights.push(`Low success rate (${(successRate * 100).toFixed(0)}%) suggests exploring alternative approaches`);
|
|
106
|
-
}
|
|
107
|
-
// Reward insight
|
|
108
|
-
if (averageReward >= 0.8) {
|
|
109
|
-
insights.push(`High average reward (${averageReward.toFixed(2)}) shows effective past solutions`);
|
|
110
|
-
}
|
|
111
|
-
else if (averageReward < 0.6) {
|
|
112
|
-
insights.push(`Moderate reward (${averageReward.toFixed(2)}) indicates room for improvement`);
|
|
113
|
-
}
|
|
114
|
-
// Identify high-performing memories
|
|
115
|
-
const topMemories = memories
|
|
116
|
-
.filter(m => m.success && (m.reward || 0) >= 0.9)
|
|
117
|
-
.slice(0, 3);
|
|
118
|
-
if (topMemories.length > 0) {
|
|
119
|
-
insights.push(`${topMemories.length} exemplary solution(s) found with reward ≥0.9`);
|
|
120
|
-
}
|
|
121
|
-
// Task diversity
|
|
122
|
-
const uniqueTasks = new Set(memories.map(m => m.task)).size;
|
|
123
|
-
if (uniqueTasks > 1) {
|
|
124
|
-
insights.push(`${uniqueTasks} different task types provide diverse perspectives`);
|
|
125
|
-
}
|
|
126
|
-
return insights;
|
|
127
|
-
}
|
|
128
|
-
/**
|
|
129
|
-
* Generate actionable recommendations
|
|
130
|
-
*/
|
|
131
|
-
static generateRecommendations(memories, patterns, successRate) {
|
|
132
|
-
const recommendations = [];
|
|
133
|
-
// Extract successful strategies
|
|
134
|
-
const successfulMemories = memories.filter(m => m.success && (m.reward || 0) >= 0.8);
|
|
135
|
-
if (successfulMemories.length > 0) {
|
|
136
|
-
recommendations.push('Apply strategies from high-reward solutions');
|
|
137
|
-
}
|
|
138
|
-
// Pattern-based recommendations
|
|
139
|
-
if (patterns.length > 0) {
|
|
140
|
-
recommendations.push(`Follow common patterns: ${patterns[0].split(' (')[0]}`);
|
|
141
|
-
}
|
|
142
|
-
// Success rate recommendations
|
|
143
|
-
if (successRate >= 0.7) {
|
|
144
|
-
recommendations.push('Previous approaches were effective - follow similar methodology');
|
|
145
|
-
}
|
|
146
|
-
else {
|
|
147
|
-
recommendations.push('Consider alternative approaches given mixed past results');
|
|
148
|
-
}
|
|
149
|
-
// Add general recommendations
|
|
150
|
-
if (memories.length >= 5) {
|
|
151
|
-
recommendations.push('Sufficient historical data available for confident decision-making');
|
|
152
|
-
}
|
|
153
|
-
else {
|
|
154
|
-
recommendations.push('Limited data - proceed with caution and validate assumptions');
|
|
155
|
-
}
|
|
156
|
-
return recommendations.slice(0, 5);
|
|
157
|
-
}
|
|
158
|
-
/**
|
|
159
|
-
* Generate narrative summary
|
|
160
|
-
*/
|
|
161
|
-
static generateSummary(memories, patterns, successRate, averageReward) {
|
|
162
|
-
const parts = [];
|
|
163
|
-
// Opening
|
|
164
|
-
parts.push(`Based on ${memories.length} similar past ${memories.length === 1 ? 'experience' : 'experiences'}`);
|
|
165
|
-
// Success rate
|
|
166
|
-
const successPercent = (successRate * 100).toFixed(0);
|
|
167
|
-
if (successRate >= 0.7) {
|
|
168
|
-
parts.push(`with a high success rate of ${successPercent}%`);
|
|
169
|
-
}
|
|
170
|
-
else {
|
|
171
|
-
parts.push(`with a ${successPercent}% success rate`);
|
|
172
|
-
}
|
|
173
|
-
// Average reward
|
|
174
|
-
parts.push(`and average reward of ${averageReward.toFixed(2)}`);
|
|
175
|
-
// Key patterns
|
|
176
|
-
if (patterns.length > 0) {
|
|
177
|
-
parts.push('. Common effective approaches include:');
|
|
178
|
-
const topPatterns = patterns.slice(0, 3).map(p => p.split(' (')[0]);
|
|
179
|
-
parts.push(topPatterns.map((p, i) => `${i + 1}) ${p}`).join(', '));
|
|
180
|
-
}
|
|
181
|
-
// High performers
|
|
182
|
-
const topMemories = memories.filter(m => m.success && (m.reward || 0) >= 0.9);
|
|
183
|
-
if (topMemories.length > 0) {
|
|
184
|
-
parts.push(`. ${topMemories.length} exemplary solution(s) achieved reward ≥0.9`);
|
|
185
|
-
}
|
|
186
|
-
parts.push('.');
|
|
187
|
-
return parts.join(' ');
|
|
188
|
-
}
|
|
189
|
-
/**
|
|
190
|
-
* Extract actionable steps from successful memories
|
|
191
|
-
*/
|
|
192
|
-
static extractActionableSteps(memories) {
|
|
193
|
-
const steps = [];
|
|
194
|
-
const successfulMemories = memories.filter(m => m.success && (m.reward || 0) >= 0.8);
|
|
195
|
-
for (const memory of successfulMemories) {
|
|
196
|
-
if (memory.critique) {
|
|
197
|
-
// Extract step-like phrases
|
|
198
|
-
const matches = memory.critique.match(/\b\d+\.\s+([^.!?]+)/g);
|
|
199
|
-
if (matches) {
|
|
200
|
-
steps.push(...matches.map(m => m.trim()));
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
// Remove duplicates and return top 5
|
|
205
|
-
return Array.from(new Set(steps)).slice(0, 5);
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
//# sourceMappingURL=ContextSynthesizer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ContextSynthesizer.js","sourceRoot":"","sources":["../../src/controllers/ContextSynthesizer.ts"],"names":[],"mappings":"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"}
|