vesper-memory 0.3.0
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/.env.example +28 -0
- package/CHANGELOG.md +137 -0
- package/LICENSE +21 -0
- package/README.md +665 -0
- package/config/sqlite-schema.sql +413 -0
- package/dist/benchmark/index.d.ts +18 -0
- package/dist/benchmark/index.d.ts.map +1 -0
- package/dist/benchmark/index.js +19 -0
- package/dist/benchmark/index.js.map +1 -0
- package/dist/benchmark/metrics-collector.d.ts +90 -0
- package/dist/benchmark/metrics-collector.d.ts.map +1 -0
- package/dist/benchmark/metrics-collector.js +196 -0
- package/dist/benchmark/metrics-collector.js.map +1 -0
- package/dist/benchmark/report-generator.d.ts +35 -0
- package/dist/benchmark/report-generator.d.ts.map +1 -0
- package/dist/benchmark/report-generator.js +221 -0
- package/dist/benchmark/report-generator.js.map +1 -0
- package/dist/benchmark/runner.d.ts +30 -0
- package/dist/benchmark/runner.d.ts.map +1 -0
- package/dist/benchmark/runner.js +308 -0
- package/dist/benchmark/runner.js.map +1 -0
- package/dist/benchmark/scenarios/context-recall.d.ts +65 -0
- package/dist/benchmark/scenarios/context-recall.d.ts.map +1 -0
- package/dist/benchmark/scenarios/context-recall.js +180 -0
- package/dist/benchmark/scenarios/context-recall.js.map +1 -0
- package/dist/benchmark/scenarios/index.d.ts +34 -0
- package/dist/benchmark/scenarios/index.d.ts.map +1 -0
- package/dist/benchmark/scenarios/index.js +230 -0
- package/dist/benchmark/scenarios/index.js.map +1 -0
- package/dist/benchmark/statistics.d.ts +125 -0
- package/dist/benchmark/statistics.d.ts.map +1 -0
- package/dist/benchmark/statistics.js +520 -0
- package/dist/benchmark/statistics.js.map +1 -0
- package/dist/benchmark/types.d.ts +458 -0
- package/dist/benchmark/types.d.ts.map +1 -0
- package/dist/benchmark/types.js +297 -0
- package/dist/benchmark/types.js.map +1 -0
- package/dist/cli 2.js +583 -0
- package/dist/cli.d 2.ts +8 -0
- package/dist/cli.d.ts +8 -0
- package/dist/cli.d.ts 2.map +1 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +583 -0
- package/dist/cli.js 2.map +1 -0
- package/dist/cli.js.map +1 -0
- package/dist/config/rate-limits.d.ts +76 -0
- package/dist/config/rate-limits.d.ts.map +1 -0
- package/dist/config/rate-limits.js +161 -0
- package/dist/config/rate-limits.js.map +1 -0
- package/dist/config 2/rate-limits.d.ts +76 -0
- package/dist/config 2/rate-limits.d.ts.map +1 -0
- package/dist/config 2/rate-limits.js +161 -0
- package/dist/config 2/rate-limits.js.map +1 -0
- package/dist/consolidation/pipeline.d.ts +52 -0
- package/dist/consolidation/pipeline.d.ts.map +1 -0
- package/dist/consolidation/pipeline.js +193 -0
- package/dist/consolidation/pipeline.js.map +1 -0
- package/dist/consolidation 2/pipeline.d.ts +52 -0
- package/dist/consolidation 2/pipeline.d.ts.map +1 -0
- package/dist/consolidation 2/pipeline.js +193 -0
- package/dist/consolidation 2/pipeline.js.map +1 -0
- package/dist/embeddings/client.d.ts +95 -0
- package/dist/embeddings/client.d.ts.map +1 -0
- package/dist/embeddings/client.js +162 -0
- package/dist/embeddings/client.js.map +1 -0
- package/dist/embeddings 2/client.d.ts +94 -0
- package/dist/embeddings 2/client.d.ts.map +1 -0
- package/dist/embeddings 2/client.js +144 -0
- package/dist/embeddings 2/client.js.map +1 -0
- package/dist/memory-layers/semantic-memory.d.ts +76 -0
- package/dist/memory-layers/semantic-memory.d.ts.map +1 -0
- package/dist/memory-layers/semantic-memory.js +231 -0
- package/dist/memory-layers/semantic-memory.js.map +1 -0
- package/dist/memory-layers/skill-library.d.ts +25 -0
- package/dist/memory-layers/skill-library.d.ts.map +1 -0
- package/dist/memory-layers/skill-library.js +54 -0
- package/dist/memory-layers/skill-library.js.map +1 -0
- package/dist/memory-layers/working-memory.d.ts +57 -0
- package/dist/memory-layers/working-memory.d.ts.map +1 -0
- package/dist/memory-layers/working-memory.js +153 -0
- package/dist/memory-layers/working-memory.js.map +1 -0
- package/dist/memory-layers 2/semantic-memory.d.ts +33 -0
- package/dist/memory-layers 2/semantic-memory.d.ts.map +1 -0
- package/dist/memory-layers 2/semantic-memory.js +114 -0
- package/dist/memory-layers 2/semantic-memory.js.map +1 -0
- package/dist/memory-layers 2/skill-library.d.ts +25 -0
- package/dist/memory-layers 2/skill-library.d.ts.map +1 -0
- package/dist/memory-layers 2/skill-library.js +54 -0
- package/dist/memory-layers 2/skill-library.js.map +1 -0
- package/dist/memory-layers 2/working-memory.d.ts +57 -0
- package/dist/memory-layers 2/working-memory.d.ts.map +1 -0
- package/dist/memory-layers 2/working-memory.js +153 -0
- package/dist/memory-layers 2/working-memory.js.map +1 -0
- package/dist/middleware/auth.d.ts +287 -0
- package/dist/middleware/auth.d.ts.map +1 -0
- package/dist/middleware/auth.js +610 -0
- package/dist/middleware/auth.js.map +1 -0
- package/dist/middleware 2/auth.d.ts +287 -0
- package/dist/middleware 2/auth.d.ts.map +1 -0
- package/dist/middleware 2/auth.js +610 -0
- package/dist/middleware 2/auth.js.map +1 -0
- package/dist/monitoring/health.d.ts +241 -0
- package/dist/monitoring/health.d.ts.map +1 -0
- package/dist/monitoring/health.js +649 -0
- package/dist/monitoring/health.js.map +1 -0
- package/dist/monitoring/metrics.d.ts +153 -0
- package/dist/monitoring/metrics.d.ts.map +1 -0
- package/dist/monitoring/metrics.js +349 -0
- package/dist/monitoring/metrics.js.map +1 -0
- package/dist/monitoring 2/health.d.ts +241 -0
- package/dist/monitoring 2/health.d.ts.map +1 -0
- package/dist/monitoring 2/health.js +649 -0
- package/dist/monitoring 2/health.js.map +1 -0
- package/dist/monitoring 2/metrics.d.ts +153 -0
- package/dist/monitoring 2/metrics.d.ts.map +1 -0
- package/dist/monitoring 2/metrics.js +349 -0
- package/dist/monitoring 2/metrics.js.map +1 -0
- package/dist/retrieval/hybrid-search.d.ts +186 -0
- package/dist/retrieval/hybrid-search.d.ts.map +1 -0
- package/dist/retrieval/hybrid-search.js +330 -0
- package/dist/retrieval/hybrid-search.js.map +1 -0
- package/dist/retrieval 2/hybrid-search.d.ts +186 -0
- package/dist/retrieval 2/hybrid-search.d.ts.map +1 -0
- package/dist/retrieval 2/hybrid-search.js +327 -0
- package/dist/retrieval 2/hybrid-search.js.map +1 -0
- package/dist/router/smart-router.d.ts +157 -0
- package/dist/router/smart-router.d.ts.map +1 -0
- package/dist/router/smart-router.js +524 -0
- package/dist/router/smart-router.js.map +1 -0
- package/dist/router 2/smart-router.d.ts +111 -0
- package/dist/router 2/smart-router.d.ts.map +1 -0
- package/dist/router 2/smart-router.js +383 -0
- package/dist/router 2/smart-router.js.map +1 -0
- package/dist/security/rate-limit-middleware.d.ts +119 -0
- package/dist/security/rate-limit-middleware.d.ts.map +1 -0
- package/dist/security/rate-limit-middleware.js +193 -0
- package/dist/security/rate-limit-middleware.js.map +1 -0
- package/dist/security 2/rate-limit-middleware.d.ts +119 -0
- package/dist/security 2/rate-limit-middleware.d.ts.map +1 -0
- package/dist/security 2/rate-limit-middleware.js +193 -0
- package/dist/security 2/rate-limit-middleware.js.map +1 -0
- package/dist/server 2.js +861 -0
- package/dist/server-wrapper 2.js +170 -0
- package/dist/server-wrapper.d 2.ts +12 -0
- package/dist/server-wrapper.d.ts +12 -0
- package/dist/server-wrapper.d.ts 2.map +1 -0
- package/dist/server-wrapper.d.ts.map +1 -0
- package/dist/server-wrapper.js +170 -0
- package/dist/server-wrapper.js 2.map +1 -0
- package/dist/server-wrapper.js.map +1 -0
- package/dist/server.d 2.ts +14 -0
- package/dist/server.d.ts +14 -0
- package/dist/server.d.ts 2.map +1 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +656 -0
- package/dist/server.js 2.map +1 -0
- package/dist/server.js.map +1 -0
- package/dist/synthesis/conflict-detector.d.ts +43 -0
- package/dist/synthesis/conflict-detector.d.ts.map +1 -0
- package/dist/synthesis/conflict-detector.js +125 -0
- package/dist/synthesis/conflict-detector.js.map +1 -0
- package/dist/synthesis 2/conflict-detector.d.ts +43 -0
- package/dist/synthesis 2/conflict-detector.d.ts.map +1 -0
- package/dist/synthesis 2/conflict-detector.js +125 -0
- package/dist/synthesis 2/conflict-detector.js.map +1 -0
- package/dist/utils/monitoring.d.ts +25 -0
- package/dist/utils/monitoring.d.ts.map +1 -0
- package/dist/utils/monitoring.js +41 -0
- package/dist/utils/monitoring.js.map +1 -0
- package/dist/utils/rate-limiter.d.ts +97 -0
- package/dist/utils/rate-limiter.d.ts.map +1 -0
- package/dist/utils/rate-limiter.js +166 -0
- package/dist/utils/rate-limiter.js.map +1 -0
- package/dist/utils/validation.d.ts +139 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +195 -0
- package/dist/utils/validation.js.map +1 -0
- package/dist/utils 2/monitoring.d.ts +25 -0
- package/dist/utils 2/monitoring.d.ts.map +1 -0
- package/dist/utils 2/monitoring.js +41 -0
- package/dist/utils 2/monitoring.js.map +1 -0
- package/dist/utils 2/rate-limiter.d.ts +97 -0
- package/dist/utils 2/rate-limiter.d.ts.map +1 -0
- package/dist/utils 2/rate-limiter.js +166 -0
- package/dist/utils 2/rate-limiter.js.map +1 -0
- package/dist/utils 2/validation.d.ts +139 -0
- package/dist/utils 2/validation.d.ts.map +1 -0
- package/dist/utils 2/validation.js +195 -0
- package/dist/utils 2/validation.js.map +1 -0
- package/docker-compose.yml +65 -0
- package/embedding-service/Dockerfile +29 -0
- package/embedding-service/README.md +68 -0
- package/embedding-service/requirements.txt +6 -0
- package/embedding-service/server.py +110 -0
- package/package.json +92 -0
- package/scripts/FRESH_INSTALL.md +280 -0
- package/scripts/README.md +101 -0
- package/scripts/ensure-infrastructure.sh +38 -0
- package/scripts/fresh-install-auto.sh +96 -0
- package/scripts/fresh-install.sh +167 -0
- package/scripts/health-check.sh +72 -0
- package/scripts/init-qdrant.ts +201 -0
- package/scripts/postinstall.js +94 -0
- package/scripts/run-accuracy-benchmark.ts +1237 -0
- package/scripts/run-real-benchmark.ts +581 -0
- package/scripts/test-mcp-server.sh +38 -0
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Benchmark Runner
|
|
3
|
+
*
|
|
4
|
+
* Orchestrates the execution of all benchmark scenarios.
|
|
5
|
+
* Runs A/B tests (Vesper enabled vs disabled) and compares results.
|
|
6
|
+
*/
|
|
7
|
+
import { randomUUID } from "crypto";
|
|
8
|
+
import { validateBenchmarkConfig } from "./types.js";
|
|
9
|
+
import { createScenario } from "./scenarios/index.js";
|
|
10
|
+
import { welchTTest, cohensD, interpretEffectSize, mean } from "./statistics.js";
|
|
11
|
+
import { estimateTokens } from "./metrics-collector.js";
|
|
12
|
+
/**
|
|
13
|
+
* Create a benchmark runner
|
|
14
|
+
*
|
|
15
|
+
* @param client - MCP client for memory operations
|
|
16
|
+
* @param config - Benchmark configuration
|
|
17
|
+
* @returns BenchmarkRunner instance
|
|
18
|
+
*/
|
|
19
|
+
export function createBenchmarkRunner(client, config) {
|
|
20
|
+
// Validate config
|
|
21
|
+
const validatedConfig = validateBenchmarkConfig(config);
|
|
22
|
+
return {
|
|
23
|
+
getConfig() {
|
|
24
|
+
return { ...validatedConfig };
|
|
25
|
+
},
|
|
26
|
+
async run() {
|
|
27
|
+
const startTime = Date.now();
|
|
28
|
+
const benchmarkId = `bench-${randomUUID().slice(0, 8)}`;
|
|
29
|
+
const comparisons = [];
|
|
30
|
+
// Run each scenario
|
|
31
|
+
for (const scenarioType of validatedConfig.scenarios) {
|
|
32
|
+
try {
|
|
33
|
+
const comparison = await runScenarioComparison(client, scenarioType, validatedConfig);
|
|
34
|
+
comparisons.push(comparison);
|
|
35
|
+
}
|
|
36
|
+
catch (err) {
|
|
37
|
+
console.error(`Error running scenario ${scenarioType}:`, err instanceof Error ? err.message : String(err));
|
|
38
|
+
// Create a placeholder comparison for failed scenario
|
|
39
|
+
comparisons.push(createFailedComparison(scenarioType, err));
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
const endTime = Date.now();
|
|
43
|
+
// Calculate summary
|
|
44
|
+
const summary = calculateSummary(comparisons);
|
|
45
|
+
return {
|
|
46
|
+
id: benchmarkId,
|
|
47
|
+
startTime,
|
|
48
|
+
endTime,
|
|
49
|
+
config: validatedConfig,
|
|
50
|
+
comparisons,
|
|
51
|
+
summary,
|
|
52
|
+
metadata: {
|
|
53
|
+
version: "0.1.0",
|
|
54
|
+
environment: process.env.NODE_ENV || "development",
|
|
55
|
+
hostname: process.env.HOSTNAME,
|
|
56
|
+
nodeVersion: process.version,
|
|
57
|
+
},
|
|
58
|
+
};
|
|
59
|
+
},
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Run a single scenario comparison (enabled vs disabled)
|
|
64
|
+
*/
|
|
65
|
+
async function runScenarioComparison(client, scenarioType, config) {
|
|
66
|
+
const scenario = createScenario(scenarioType, client);
|
|
67
|
+
// Setup scenario
|
|
68
|
+
await scenario.setup();
|
|
69
|
+
// Run warmup (if configured)
|
|
70
|
+
for (let i = 0; i < config.warmupRuns; i++) {
|
|
71
|
+
await scenario.run("vesper-enabled");
|
|
72
|
+
}
|
|
73
|
+
// Run measurement - Vesper enabled
|
|
74
|
+
const enabledResults = [];
|
|
75
|
+
for (let i = 0; i < config.measurementRuns; i++) {
|
|
76
|
+
const result = await scenario.run("vesper-enabled");
|
|
77
|
+
enabledResults.push(result);
|
|
78
|
+
}
|
|
79
|
+
// Aggregate enabled results
|
|
80
|
+
const enabledResult = aggregateScenarioRuns(enabledResults, "vesper-enabled");
|
|
81
|
+
// Run measurement - Vesper disabled
|
|
82
|
+
const disabledResults = [];
|
|
83
|
+
for (let i = 0; i < config.measurementRuns; i++) {
|
|
84
|
+
const result = await scenario.run("vesper-disabled");
|
|
85
|
+
disabledResults.push(result);
|
|
86
|
+
}
|
|
87
|
+
// Aggregate disabled results
|
|
88
|
+
const disabledResult = aggregateScenarioRuns(disabledResults, "vesper-disabled");
|
|
89
|
+
// Teardown
|
|
90
|
+
await scenario.teardown();
|
|
91
|
+
// Statistical comparison
|
|
92
|
+
const statistics = comparePhasesStatistically(enabledResult, disabledResult, config.significanceLevel);
|
|
93
|
+
// Determine winner
|
|
94
|
+
const winner = determineWinner(statistics);
|
|
95
|
+
return {
|
|
96
|
+
scenarioType,
|
|
97
|
+
enabledResult,
|
|
98
|
+
disabledResult,
|
|
99
|
+
statistics,
|
|
100
|
+
winner,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Aggregate multiple scenario runs into a single result
|
|
105
|
+
*/
|
|
106
|
+
function aggregateScenarioRuns(runs, phase) {
|
|
107
|
+
if (runs.length === 0) {
|
|
108
|
+
throw new Error("No runs to aggregate");
|
|
109
|
+
}
|
|
110
|
+
// Flatten all metrics
|
|
111
|
+
const allMetrics = runs.flatMap((r) => r.metrics);
|
|
112
|
+
// Aggregate latencies for percentiles
|
|
113
|
+
const latencies = allMetrics.map((m) => m.latencyMs);
|
|
114
|
+
const sortedLatencies = [...latencies].sort((a, b) => a - b);
|
|
115
|
+
const latencyP50 = percentileFromSorted(sortedLatencies, 50);
|
|
116
|
+
const latencyP95 = percentileFromSorted(sortedLatencies, 95);
|
|
117
|
+
const latencyP99 = percentileFromSorted(sortedLatencies, 99);
|
|
118
|
+
// Calculate memory hit rate
|
|
119
|
+
const memoryHitRate = allMetrics.filter((m) => m.memoryHit).length / allMetrics.length;
|
|
120
|
+
// Calculate average accuracy if available
|
|
121
|
+
const accuracies = allMetrics
|
|
122
|
+
.filter((m) => m.retrievalAccuracy !== undefined)
|
|
123
|
+
.map((m) => m.retrievalAccuracy);
|
|
124
|
+
const avgAccuracy = accuracies.length > 0 ? mean(accuracies) : undefined;
|
|
125
|
+
// Take the last run's metrics as the representative sample
|
|
126
|
+
// (this matches the measurementRuns count for statistical analysis)
|
|
127
|
+
const lastRun = runs[runs.length - 1];
|
|
128
|
+
return {
|
|
129
|
+
scenarioType: lastRun.scenarioType,
|
|
130
|
+
phase,
|
|
131
|
+
metrics: lastRun.metrics,
|
|
132
|
+
aggregates: {
|
|
133
|
+
latencyP50,
|
|
134
|
+
latencyP95,
|
|
135
|
+
latencyP99,
|
|
136
|
+
memoryHitRate,
|
|
137
|
+
avgAccuracy,
|
|
138
|
+
},
|
|
139
|
+
rawResponses: lastRun.rawResponses,
|
|
140
|
+
errors: runs.flatMap((r) => r.errors || []),
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Calculate percentile from sorted array
|
|
145
|
+
*/
|
|
146
|
+
function percentileFromSorted(sorted, p) {
|
|
147
|
+
if (sorted.length === 0)
|
|
148
|
+
return 0;
|
|
149
|
+
const index = Math.ceil((p / 100) * sorted.length) - 1;
|
|
150
|
+
return sorted[Math.max(0, index)];
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Compare two scenario results statistically
|
|
154
|
+
*/
|
|
155
|
+
export function comparePhasesStatistically(enabledResult, disabledResult, alpha) {
|
|
156
|
+
const enabledLatencies = enabledResult.metrics.map((m) => m.latencyMs);
|
|
157
|
+
const disabledLatencies = disabledResult.metrics.map((m) => m.latencyMs);
|
|
158
|
+
// Calculate latency improvement (positive = enabled is faster)
|
|
159
|
+
const enabledMean = mean(enabledLatencies);
|
|
160
|
+
const disabledMean = mean(disabledLatencies);
|
|
161
|
+
const latencyImprovement = disabledMean > 0
|
|
162
|
+
? ((disabledMean - enabledMean) / disabledMean) * 100
|
|
163
|
+
: 0;
|
|
164
|
+
// Calculate token savings (estimate based on response length)
|
|
165
|
+
const enabledTokens = enabledResult.rawResponses
|
|
166
|
+
.map((r) => estimateTokens(r))
|
|
167
|
+
.reduce((a, b) => a + b, 0);
|
|
168
|
+
const disabledTokens = disabledResult.rawResponses
|
|
169
|
+
.map((r) => estimateTokens(r))
|
|
170
|
+
.reduce((a, b) => a + b, 0);
|
|
171
|
+
const tokenSavings = disabledTokens > 0
|
|
172
|
+
? ((disabledTokens - enabledTokens) / disabledTokens) * 100
|
|
173
|
+
: 0;
|
|
174
|
+
// Calculate accuracy delta
|
|
175
|
+
const enabledAccuracies = enabledResult.metrics
|
|
176
|
+
.filter((m) => m.retrievalAccuracy !== undefined)
|
|
177
|
+
.map((m) => m.retrievalAccuracy);
|
|
178
|
+
const disabledAccuracies = disabledResult.metrics
|
|
179
|
+
.filter((m) => m.retrievalAccuracy !== undefined)
|
|
180
|
+
.map((m) => m.retrievalAccuracy);
|
|
181
|
+
const enabledAvgAccuracy = enabledAccuracies.length > 0 ? mean(enabledAccuracies) : 0;
|
|
182
|
+
const disabledAvgAccuracy = disabledAccuracies.length > 0 ? mean(disabledAccuracies) : 0;
|
|
183
|
+
const accuracyDelta = enabledAvgAccuracy - disabledAvgAccuracy;
|
|
184
|
+
// Perform Welch's t-test on latencies
|
|
185
|
+
let tTestResult;
|
|
186
|
+
try {
|
|
187
|
+
tTestResult = welchTTest(enabledLatencies, disabledLatencies, alpha);
|
|
188
|
+
}
|
|
189
|
+
catch {
|
|
190
|
+
// Fallback if t-test fails (e.g., identical values)
|
|
191
|
+
// Ensure degreesOfFreedom is non-negative (min 1 for valid schema)
|
|
192
|
+
const df = Math.max(1, enabledLatencies.length + disabledLatencies.length - 2);
|
|
193
|
+
tTestResult = {
|
|
194
|
+
tStatistic: 0,
|
|
195
|
+
pValue: 1,
|
|
196
|
+
degreesOfFreedom: df,
|
|
197
|
+
significant: false,
|
|
198
|
+
alpha,
|
|
199
|
+
meanDifference: enabledMean - disabledMean,
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
// Calculate Cohen's d effect size
|
|
203
|
+
let d = 0;
|
|
204
|
+
let interpretation = "negligible";
|
|
205
|
+
try {
|
|
206
|
+
d = cohensD(enabledLatencies, disabledLatencies);
|
|
207
|
+
interpretation = interpretEffectSize(d);
|
|
208
|
+
}
|
|
209
|
+
catch {
|
|
210
|
+
// Fallback
|
|
211
|
+
}
|
|
212
|
+
return {
|
|
213
|
+
latencyImprovement,
|
|
214
|
+
tokenSavings,
|
|
215
|
+
accuracyDelta,
|
|
216
|
+
tTestResult,
|
|
217
|
+
effectSize: {
|
|
218
|
+
cohensD: d,
|
|
219
|
+
interpretation,
|
|
220
|
+
},
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Determine winner based on statistical comparison
|
|
225
|
+
*/
|
|
226
|
+
function determineWinner(stats) {
|
|
227
|
+
// Primary criteria: statistical significance
|
|
228
|
+
if (!stats.tTestResult.significant) {
|
|
229
|
+
return "tie";
|
|
230
|
+
}
|
|
231
|
+
// If significant, check direction
|
|
232
|
+
// Negative t-statistic means enabled < disabled (enabled is faster = better)
|
|
233
|
+
// Positive latency improvement means enabled is faster
|
|
234
|
+
if (stats.latencyImprovement > 0 && stats.tTestResult.tStatistic < 0) {
|
|
235
|
+
return "vesper-enabled";
|
|
236
|
+
}
|
|
237
|
+
if (stats.latencyImprovement < 0 && stats.tTestResult.tStatistic > 0) {
|
|
238
|
+
return "vesper-disabled";
|
|
239
|
+
}
|
|
240
|
+
// Secondary criteria: accuracy
|
|
241
|
+
if (stats.accuracyDelta > 0.1) {
|
|
242
|
+
return "vesper-enabled";
|
|
243
|
+
}
|
|
244
|
+
if (stats.accuracyDelta < -0.1) {
|
|
245
|
+
return "vesper-disabled";
|
|
246
|
+
}
|
|
247
|
+
return "tie";
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Calculate summary from all comparisons
|
|
251
|
+
*/
|
|
252
|
+
function calculateSummary(comparisons) {
|
|
253
|
+
const vesperWins = comparisons.filter((c) => c.winner === "vesper-enabled").length;
|
|
254
|
+
const disabledWins = comparisons.filter((c) => c.winner === "vesper-disabled").length;
|
|
255
|
+
const ties = comparisons.filter((c) => c.winner === "tie").length;
|
|
256
|
+
// Calculate overall improvement (average of latency improvements)
|
|
257
|
+
const improvements = comparisons.map((c) => c.statistics.latencyImprovement);
|
|
258
|
+
const overallImprovement = improvements.length > 0 ? mean(improvements) : 0;
|
|
259
|
+
// Determine if overall result is statistically significant
|
|
260
|
+
const significantCount = comparisons.filter((c) => c.statistics.tTestResult.significant).length;
|
|
261
|
+
const statisticallySignificant = significantCount > comparisons.length / 2;
|
|
262
|
+
return {
|
|
263
|
+
totalScenarios: comparisons.length,
|
|
264
|
+
vesperWins,
|
|
265
|
+
disabledWins,
|
|
266
|
+
ties,
|
|
267
|
+
overallImprovement,
|
|
268
|
+
statisticallySignificant,
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Create a failed comparison placeholder
|
|
273
|
+
*/
|
|
274
|
+
function createFailedComparison(scenarioType, error) {
|
|
275
|
+
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
276
|
+
const emptyResult = {
|
|
277
|
+
scenarioType,
|
|
278
|
+
phase: "vesper-enabled",
|
|
279
|
+
metrics: [{ timestamp: Date.now(), latencyMs: 0, memoryHit: false }],
|
|
280
|
+
aggregates: { latencyP50: 0, latencyP95: 0, latencyP99: 0 },
|
|
281
|
+
rawResponses: [],
|
|
282
|
+
errors: [errorMsg],
|
|
283
|
+
};
|
|
284
|
+
return {
|
|
285
|
+
scenarioType,
|
|
286
|
+
enabledResult: { ...emptyResult, phase: "vesper-enabled" },
|
|
287
|
+
disabledResult: { ...emptyResult, phase: "vesper-disabled" },
|
|
288
|
+
statistics: {
|
|
289
|
+
latencyImprovement: 0,
|
|
290
|
+
tokenSavings: 0,
|
|
291
|
+
accuracyDelta: 0,
|
|
292
|
+
tTestResult: {
|
|
293
|
+
tStatistic: 0,
|
|
294
|
+
pValue: 1,
|
|
295
|
+
degreesOfFreedom: 0,
|
|
296
|
+
significant: false,
|
|
297
|
+
alpha: 0.05,
|
|
298
|
+
meanDifference: 0,
|
|
299
|
+
},
|
|
300
|
+
effectSize: {
|
|
301
|
+
cohensD: 0,
|
|
302
|
+
interpretation: "negligible",
|
|
303
|
+
},
|
|
304
|
+
},
|
|
305
|
+
winner: "tie",
|
|
306
|
+
};
|
|
307
|
+
}
|
|
308
|
+
//# sourceMappingURL=runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/benchmark/runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context Recall Scenario
|
|
3
|
+
*
|
|
4
|
+
* Tests the ability to recall facts from previous conversations.
|
|
5
|
+
* This is the most basic memory scenario - can we remember what was said?
|
|
6
|
+
*/
|
|
7
|
+
import type { ScenarioType, ScenarioResult, BenchmarkPhase } from "../types.js";
|
|
8
|
+
/**
|
|
9
|
+
* Test case structure for context recall
|
|
10
|
+
*/
|
|
11
|
+
export interface ContextRecallTestCase {
|
|
12
|
+
/** The fact to store */
|
|
13
|
+
fact: string;
|
|
14
|
+
/** The question to ask */
|
|
15
|
+
question: string;
|
|
16
|
+
/** Expected keywords in the response */
|
|
17
|
+
expectedKeywords: string[];
|
|
18
|
+
/** Category of the fact */
|
|
19
|
+
category: "personal" | "project" | "preference" | "technical";
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Test data for context recall scenario
|
|
23
|
+
*/
|
|
24
|
+
export declare const CONTEXT_RECALL_TEST_DATA: ContextRecallTestCase[];
|
|
25
|
+
/**
|
|
26
|
+
* MCP Client interface for memory operations
|
|
27
|
+
*/
|
|
28
|
+
export interface MCPClient {
|
|
29
|
+
storeMemory(content: string, memoryType: string, metadata?: Record<string, unknown>): Promise<{
|
|
30
|
+
success: boolean;
|
|
31
|
+
memory_id: string;
|
|
32
|
+
}>;
|
|
33
|
+
retrieveMemory(query: string, options?: {
|
|
34
|
+
max_results?: number;
|
|
35
|
+
}): Promise<{
|
|
36
|
+
success: boolean;
|
|
37
|
+
results: Array<{
|
|
38
|
+
content: string;
|
|
39
|
+
similarity_score: number;
|
|
40
|
+
}>;
|
|
41
|
+
}>;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Context Recall Scenario interface
|
|
45
|
+
*/
|
|
46
|
+
export interface ContextRecallScenario {
|
|
47
|
+
/** Get scenario type */
|
|
48
|
+
getType(): ScenarioType;
|
|
49
|
+
/** Get scenario description */
|
|
50
|
+
getDescription(): string;
|
|
51
|
+
/** Setup the scenario (store initial facts) */
|
|
52
|
+
setup(): Promise<void>;
|
|
53
|
+
/** Run the scenario in specified phase */
|
|
54
|
+
run(phase: BenchmarkPhase): Promise<ScenarioResult>;
|
|
55
|
+
/** Clean up after scenario */
|
|
56
|
+
teardown(): Promise<void>;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Create a context recall scenario
|
|
60
|
+
*
|
|
61
|
+
* @param client - MCP client for memory operations
|
|
62
|
+
* @returns ContextRecallScenario instance
|
|
63
|
+
*/
|
|
64
|
+
export declare function createContextRecallScenario(client: MCPClient): ContextRecallScenario;
|
|
65
|
+
//# sourceMappingURL=context-recall.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-recall.d.ts","sourceRoot":"","sources":["../../../src/benchmark/scenarios/context-recall.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EACd,cAAc,EAGf,MAAM,aAAa,CAAC;AAQrB;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,0BAA0B;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,wCAAwC;IACxC,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,2BAA2B;IAC3B,QAAQ,EAAE,UAAU,GAAG,SAAS,GAAG,YAAY,GAAG,WAAW,CAAC;CAC/D;AAED;;GAEG;AACH,eAAO,MAAM,wBAAwB,EAAE,qBAAqB,EAiD3D,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,WAAW,CACT,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAEpD,cAAc,CACZ,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,GACjC,OAAO,CAAC;QACT,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,EAAE,KAAK,CAAC;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,gBAAgB,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KAC/D,CAAC,CAAC;CACJ;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,wBAAwB;IACxB,OAAO,IAAI,YAAY,CAAC;IAExB,+BAA+B;IAC/B,cAAc,IAAI,MAAM,CAAC;IAEzB,+CAA+C;IAC/C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvB,0CAA0C;IAC1C,GAAG,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAEpD,8BAA8B;IAC9B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,SAAS,GAChB,qBAAqB,CA+HvB"}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context Recall Scenario
|
|
3
|
+
*
|
|
4
|
+
* Tests the ability to recall facts from previous conversations.
|
|
5
|
+
* This is the most basic memory scenario - can we remember what was said?
|
|
6
|
+
*/
|
|
7
|
+
import { measureLatency, evaluateResponseQuality, aggregateMetrics, } from "../metrics-collector.js";
|
|
8
|
+
/**
|
|
9
|
+
* Test data for context recall scenario
|
|
10
|
+
*/
|
|
11
|
+
export const CONTEXT_RECALL_TEST_DATA = [
|
|
12
|
+
{
|
|
13
|
+
fact: "The user prefers TypeScript over JavaScript for type safety",
|
|
14
|
+
question: "What programming language do I prefer?",
|
|
15
|
+
expectedKeywords: ["TypeScript", "type safety"],
|
|
16
|
+
category: "preference",
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
fact: "The user is working on a project called Vesper, which is a memory system for AI",
|
|
20
|
+
question: "What project am I currently working on?",
|
|
21
|
+
expectedKeywords: ["Vesper", "memory"],
|
|
22
|
+
category: "project",
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
fact: "The user's name is David and they are based in San Francisco",
|
|
26
|
+
question: "What is my name?",
|
|
27
|
+
expectedKeywords: ["David"],
|
|
28
|
+
category: "personal",
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
fact: "The user wants test coverage above 80% for all code",
|
|
32
|
+
question: "What are my testing requirements?",
|
|
33
|
+
expectedKeywords: ["80%", "coverage", "test"],
|
|
34
|
+
category: "technical",
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
fact: "The user prefers functional programming style over object-oriented",
|
|
38
|
+
question: "What programming paradigm do I prefer?",
|
|
39
|
+
expectedKeywords: ["functional"],
|
|
40
|
+
category: "preference",
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
fact: "The user is collaborating with Claude on this project",
|
|
44
|
+
question: "Who am I collaborating with?",
|
|
45
|
+
expectedKeywords: ["Claude"],
|
|
46
|
+
category: "personal",
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
fact: "The target latency for the system is under 200ms P95",
|
|
50
|
+
question: "What is the target latency for the system?",
|
|
51
|
+
expectedKeywords: ["200ms", "P95", "latency"],
|
|
52
|
+
category: "technical",
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
fact: "The user emphasizes pragmatic solutions over theoretical perfection",
|
|
56
|
+
question: "What is my approach to problem solving?",
|
|
57
|
+
expectedKeywords: ["pragmatic"],
|
|
58
|
+
category: "preference",
|
|
59
|
+
},
|
|
60
|
+
];
|
|
61
|
+
/**
|
|
62
|
+
* Create a context recall scenario
|
|
63
|
+
*
|
|
64
|
+
* @param client - MCP client for memory operations
|
|
65
|
+
* @returns ContextRecallScenario instance
|
|
66
|
+
*/
|
|
67
|
+
export function createContextRecallScenario(client) {
|
|
68
|
+
const errors = [];
|
|
69
|
+
return {
|
|
70
|
+
getType() {
|
|
71
|
+
return "context-recall";
|
|
72
|
+
},
|
|
73
|
+
getDescription() {
|
|
74
|
+
return "Tests ability to recall facts from previous conversations within the same session.";
|
|
75
|
+
},
|
|
76
|
+
async setup() {
|
|
77
|
+
errors.length = 0;
|
|
78
|
+
// Store all facts as semantic memories
|
|
79
|
+
for (const testCase of CONTEXT_RECALL_TEST_DATA) {
|
|
80
|
+
try {
|
|
81
|
+
await client.storeMemory(testCase.fact, "semantic", {
|
|
82
|
+
category: testCase.category,
|
|
83
|
+
timestamp: Date.now(),
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
catch (err) {
|
|
87
|
+
const errorMsg = err instanceof Error ? err.message : String(err);
|
|
88
|
+
errors.push(`Setup error storing fact: ${errorMsg}`);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
},
|
|
92
|
+
async run(phase) {
|
|
93
|
+
const metrics = [];
|
|
94
|
+
const rawResponses = [];
|
|
95
|
+
for (const testCase of CONTEXT_RECALL_TEST_DATA) {
|
|
96
|
+
if (phase === "vesper-enabled") {
|
|
97
|
+
// With Vesper enabled: retrieve from memory
|
|
98
|
+
try {
|
|
99
|
+
const { result, latencyMs } = await measureLatency(async () => {
|
|
100
|
+
return await client.retrieveMemory(testCase.question, {
|
|
101
|
+
max_results: 3,
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
const memoryHit = result.success && result.results.length > 0;
|
|
105
|
+
const responseContent = memoryHit
|
|
106
|
+
? result.results[0].content
|
|
107
|
+
: "No relevant memory found";
|
|
108
|
+
// Evaluate quality
|
|
109
|
+
const retrievalAccuracy = memoryHit
|
|
110
|
+
? evaluateResponseQuality(responseContent, testCase.expectedKeywords, {
|
|
111
|
+
mode: "keywords",
|
|
112
|
+
})
|
|
113
|
+
: 0;
|
|
114
|
+
metrics.push({
|
|
115
|
+
timestamp: Date.now(),
|
|
116
|
+
latencyMs,
|
|
117
|
+
memoryHit,
|
|
118
|
+
retrievalAccuracy,
|
|
119
|
+
});
|
|
120
|
+
rawResponses.push(responseContent);
|
|
121
|
+
}
|
|
122
|
+
catch (err) {
|
|
123
|
+
const errorMsg = err instanceof Error ? err.message : String(err);
|
|
124
|
+
errors.push(`Run error: ${errorMsg}`);
|
|
125
|
+
// Record failed attempt
|
|
126
|
+
metrics.push({
|
|
127
|
+
timestamp: Date.now(),
|
|
128
|
+
latencyMs: 0,
|
|
129
|
+
memoryHit: false,
|
|
130
|
+
retrievalAccuracy: 0,
|
|
131
|
+
});
|
|
132
|
+
rawResponses.push(`Error: ${errorMsg}`);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
// With Vesper disabled: simulate no memory access
|
|
137
|
+
const startTime = performance.now();
|
|
138
|
+
// Simulate baseline latency (no memory lookup, just processing)
|
|
139
|
+
await new Promise((resolve) => setTimeout(resolve, 1));
|
|
140
|
+
const latencyMs = performance.now() - startTime;
|
|
141
|
+
// Without memory, we can't recall the fact
|
|
142
|
+
metrics.push({
|
|
143
|
+
timestamp: Date.now(),
|
|
144
|
+
latencyMs,
|
|
145
|
+
memoryHit: false,
|
|
146
|
+
retrievalAccuracy: 0,
|
|
147
|
+
});
|
|
148
|
+
rawResponses.push("Memory disabled - cannot recall");
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
// Calculate aggregates
|
|
152
|
+
let aggregates;
|
|
153
|
+
try {
|
|
154
|
+
aggregates = aggregateMetrics(metrics);
|
|
155
|
+
}
|
|
156
|
+
catch (err) {
|
|
157
|
+
// Fallback if aggregation fails
|
|
158
|
+
aggregates = {
|
|
159
|
+
latencyP50: 0,
|
|
160
|
+
latencyP95: 0,
|
|
161
|
+
latencyP99: 0,
|
|
162
|
+
memoryHitRate: 0,
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
return {
|
|
166
|
+
scenarioType: "context-recall",
|
|
167
|
+
phase,
|
|
168
|
+
metrics,
|
|
169
|
+
aggregates,
|
|
170
|
+
rawResponses,
|
|
171
|
+
errors: errors.length > 0 ? [...errors] : undefined,
|
|
172
|
+
};
|
|
173
|
+
},
|
|
174
|
+
async teardown() {
|
|
175
|
+
errors.length = 0;
|
|
176
|
+
// MCP client cleanup would happen at a higher level
|
|
177
|
+
},
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=context-recall.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-recall.js","sourceRoot":"","sources":["../../../src/benchmark/scenarios/context-recall.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Scenario Module Index
|
|
3
|
+
*
|
|
4
|
+
* Exports all scenario implementations and factory functions.
|
|
5
|
+
*/
|
|
6
|
+
export { createContextRecallScenario, CONTEXT_RECALL_TEST_DATA } from "./context-recall.js";
|
|
7
|
+
export type { ContextRecallScenario, ContextRecallTestCase, MCPClient, } from "./context-recall.js";
|
|
8
|
+
import type { ScenarioType, ScenarioResult, BenchmarkPhase } from "../types.js";
|
|
9
|
+
import { MCPClient } from "./context-recall.js";
|
|
10
|
+
/**
|
|
11
|
+
* Common scenario interface
|
|
12
|
+
*/
|
|
13
|
+
export interface BenchmarkScenario {
|
|
14
|
+
/** Get scenario type */
|
|
15
|
+
getType(): ScenarioType;
|
|
16
|
+
/** Get scenario description */
|
|
17
|
+
getDescription(): string;
|
|
18
|
+
/** Setup the scenario */
|
|
19
|
+
setup(): Promise<void>;
|
|
20
|
+
/** Run the scenario in specified phase */
|
|
21
|
+
run(phase: BenchmarkPhase): Promise<ScenarioResult>;
|
|
22
|
+
/** Clean up after scenario */
|
|
23
|
+
teardown(): Promise<void>;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Create a scenario by type
|
|
27
|
+
*
|
|
28
|
+
* @param type - The scenario type to create
|
|
29
|
+
* @param client - MCP client for memory operations
|
|
30
|
+
* @returns Scenario instance
|
|
31
|
+
* @throws Error if scenario type is not supported
|
|
32
|
+
*/
|
|
33
|
+
export declare function createScenario(type: ScenarioType, client: MCPClient): BenchmarkScenario;
|
|
34
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/benchmark/scenarios/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,2BAA2B,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC5F,YAAY,EACV,qBAAqB,EACrB,qBAAqB,EACrB,SAAS,GACV,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAChF,OAAO,EAA+B,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAE7E;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,wBAAwB;IACxB,OAAO,IAAI,YAAY,CAAC;IAExB,+BAA+B;IAC/B,cAAc,IAAI,MAAM,CAAC;IAEzB,yBAAyB;IACzB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvB,0CAA0C;IAC1C,GAAG,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAEpD,8BAA8B;IAC9B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,YAAY,EAClB,MAAM,EAAE,SAAS,GAChB,iBAAiB,CAoBnB"}
|