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,413 @@
|
|
|
1
|
+
-- AI Memory System v3.0 - SQLite Schema
|
|
2
|
+
-- Core graph structure for semantic memory layer
|
|
3
|
+
-- Includes entities, relationships, facts, conflicts, and procedural skills
|
|
4
|
+
|
|
5
|
+
-- ============================================================================
|
|
6
|
+
-- ENTITIES TABLE
|
|
7
|
+
-- Represents semantic concepts: people, projects, preferences, general concepts
|
|
8
|
+
-- ============================================================================
|
|
9
|
+
|
|
10
|
+
CREATE TABLE IF NOT EXISTS entities (
|
|
11
|
+
id TEXT PRIMARY KEY,
|
|
12
|
+
name TEXT NOT NULL,
|
|
13
|
+
type TEXT NOT NULL, -- 'person', 'project', 'concept', 'preference'
|
|
14
|
+
description TEXT,
|
|
15
|
+
embedding BLOB, -- Vector for Qdrant synchronization (binary-encoded)
|
|
16
|
+
confidence REAL DEFAULT 1.0, -- 0.0-1.0, decreases when conflicts detected
|
|
17
|
+
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
18
|
+
last_accessed TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
19
|
+
access_count INTEGER DEFAULT 1,
|
|
20
|
+
|
|
21
|
+
-- Metadata for tracking
|
|
22
|
+
last_modified TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
23
|
+
is_archived BOOLEAN DEFAULT 0,
|
|
24
|
+
metadata TEXT -- JSON for extensibility
|
|
25
|
+
);
|
|
26
|
+
|
|
27
|
+
-- Entity indexes for fast lookup and retrieval
|
|
28
|
+
CREATE INDEX IF NOT EXISTS idx_entities_name ON entities(name);
|
|
29
|
+
CREATE INDEX IF NOT EXISTS idx_entities_type ON entities(type);
|
|
30
|
+
CREATE INDEX IF NOT EXISTS idx_entities_confidence ON entities(confidence DESC);
|
|
31
|
+
CREATE INDEX IF NOT EXISTS idx_entities_created_at ON entities(created_at DESC);
|
|
32
|
+
CREATE INDEX IF NOT EXISTS idx_entities_last_accessed ON entities(last_accessed DESC);
|
|
33
|
+
CREATE INDEX IF NOT EXISTS idx_entities_access_count ON entities(access_count DESC);
|
|
34
|
+
|
|
35
|
+
-- Optimized index for preference queries (direct SQLite lookup optimization)
|
|
36
|
+
-- Used by handlePreferenceQueryDirect for fast preference retrieval
|
|
37
|
+
CREATE INDEX IF NOT EXISTS idx_entities_preference_lookup
|
|
38
|
+
ON entities(type, last_accessed DESC, confidence DESC)
|
|
39
|
+
WHERE type = 'preference';
|
|
40
|
+
|
|
41
|
+
-- ============================================================================
|
|
42
|
+
-- RELATIONSHIPS TABLE
|
|
43
|
+
-- Represents connections between entities with temporal decay
|
|
44
|
+
-- ============================================================================
|
|
45
|
+
|
|
46
|
+
CREATE TABLE IF NOT EXISTS relationships (
|
|
47
|
+
id TEXT PRIMARY KEY,
|
|
48
|
+
source_id TEXT NOT NULL,
|
|
49
|
+
target_id TEXT NOT NULL,
|
|
50
|
+
relation_type TEXT NOT NULL, -- 'worked_on', 'prefers', 'mentioned', 'related_to', etc.
|
|
51
|
+
strength REAL NOT NULL DEFAULT 1.0, -- 0.0-1.0, decays over time with exponential formula
|
|
52
|
+
evidence TEXT, -- JSON array of conversation IDs supporting this relationship
|
|
53
|
+
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
54
|
+
last_reinforced TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
55
|
+
last_modified TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
56
|
+
|
|
57
|
+
-- Access tracking for decay calculation
|
|
58
|
+
access_count INTEGER DEFAULT 1,
|
|
59
|
+
|
|
60
|
+
-- Metadata
|
|
61
|
+
is_archived BOOLEAN DEFAULT 0,
|
|
62
|
+
metadata TEXT, -- JSON for extensibility
|
|
63
|
+
|
|
64
|
+
-- Foreign key constraints
|
|
65
|
+
FOREIGN KEY (source_id) REFERENCES entities(id) ON DELETE CASCADE,
|
|
66
|
+
FOREIGN KEY (target_id) REFERENCES entities(id) ON DELETE CASCADE,
|
|
67
|
+
CONSTRAINT unique_relationship UNIQUE(source_id, target_id, relation_type)
|
|
68
|
+
);
|
|
69
|
+
|
|
70
|
+
-- Relationship indexes for efficient traversal and decay updates
|
|
71
|
+
CREATE INDEX IF NOT EXISTS idx_relationships_source ON relationships(source_id);
|
|
72
|
+
CREATE INDEX IF NOT EXISTS idx_relationships_target ON relationships(target_id);
|
|
73
|
+
CREATE INDEX IF NOT EXISTS idx_relationships_type ON relationships(relation_type);
|
|
74
|
+
CREATE INDEX IF NOT EXISTS idx_relationships_strength ON relationships(strength DESC);
|
|
75
|
+
CREATE INDEX IF NOT EXISTS idx_relationships_last_reinforced ON relationships(last_reinforced DESC);
|
|
76
|
+
CREATE INDEX IF NOT EXISTS idx_relationships_created_at ON relationships(created_at DESC);
|
|
77
|
+
|
|
78
|
+
-- Index for finding relationships that need decay updates (consolidation process)
|
|
79
|
+
CREATE INDEX IF NOT EXISTS idx_relationships_decay_candidates
|
|
80
|
+
ON relationships(last_reinforced, access_count)
|
|
81
|
+
WHERE strength > 0.0 AND is_archived = 0;
|
|
82
|
+
|
|
83
|
+
-- ============================================================================
|
|
84
|
+
-- FACTS TABLE
|
|
85
|
+
-- Represents temporal properties of entities with validity windows
|
|
86
|
+
-- Tracks confidence and detected contradictions
|
|
87
|
+
-- ============================================================================
|
|
88
|
+
|
|
89
|
+
CREATE TABLE IF NOT EXISTS facts (
|
|
90
|
+
id TEXT PRIMARY KEY,
|
|
91
|
+
entity_id TEXT NOT NULL,
|
|
92
|
+
property TEXT NOT NULL,
|
|
93
|
+
value TEXT NOT NULL,
|
|
94
|
+
confidence REAL NOT NULL DEFAULT 1.0, -- 0.0-1.0, lowered when contradictions detected
|
|
95
|
+
valid_from TIMESTAMP NOT NULL, -- When this fact became true
|
|
96
|
+
valid_until TIMESTAMP, -- When this fact became false (NULL if currently valid)
|
|
97
|
+
source_conversation TEXT, -- ID of conversation where fact was learned
|
|
98
|
+
contradicts TEXT, -- JSON array of fact IDs that contradict this one
|
|
99
|
+
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
100
|
+
last_modified TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
101
|
+
|
|
102
|
+
-- Metadata for tracking
|
|
103
|
+
is_archived BOOLEAN DEFAULT 0,
|
|
104
|
+
notes TEXT, -- Explanation of why this fact was lowered/disputed
|
|
105
|
+
metadata TEXT, -- JSON for extensibility
|
|
106
|
+
|
|
107
|
+
-- Foreign key constraint
|
|
108
|
+
FOREIGN KEY (entity_id) REFERENCES entities(id) ON DELETE CASCADE,
|
|
109
|
+
|
|
110
|
+
-- Ensure no exact duplicates
|
|
111
|
+
CONSTRAINT unique_fact UNIQUE(entity_id, property, value, valid_from)
|
|
112
|
+
);
|
|
113
|
+
|
|
114
|
+
-- Fact indexes for retrieval and conflict detection
|
|
115
|
+
CREATE INDEX IF NOT EXISTS idx_facts_entity ON facts(entity_id);
|
|
116
|
+
CREATE INDEX IF NOT EXISTS idx_facts_property ON facts(property);
|
|
117
|
+
CREATE INDEX IF NOT EXISTS idx_facts_confidence ON facts(confidence DESC);
|
|
118
|
+
CREATE INDEX IF NOT EXISTS idx_facts_valid_from ON facts(valid_from DESC);
|
|
119
|
+
CREATE INDEX IF NOT EXISTS idx_facts_valid_until ON facts(valid_until DESC);
|
|
120
|
+
CREATE INDEX IF NOT EXISTS idx_facts_source ON facts(source_conversation);
|
|
121
|
+
CREATE INDEX IF NOT EXISTS idx_facts_created_at ON facts(created_at DESC);
|
|
122
|
+
|
|
123
|
+
-- Composite index for finding currently valid facts (used in retrieval)
|
|
124
|
+
CREATE INDEX IF NOT EXISTS idx_facts_valid_temporal
|
|
125
|
+
ON facts(entity_id, property, valid_from DESC)
|
|
126
|
+
WHERE valid_until IS NULL AND is_archived = 0;
|
|
127
|
+
|
|
128
|
+
-- Index for conflict detection queries
|
|
129
|
+
CREATE INDEX IF NOT EXISTS idx_facts_conflicts
|
|
130
|
+
ON facts(entity_id, property)
|
|
131
|
+
WHERE contradicts IS NOT NULL AND is_archived = 0;
|
|
132
|
+
|
|
133
|
+
-- ============================================================================
|
|
134
|
+
-- CONFLICTS TABLE
|
|
135
|
+
-- Tracks detected contradictions between facts
|
|
136
|
+
-- Never auto-resolves, only flags for user clarification
|
|
137
|
+
-- ============================================================================
|
|
138
|
+
|
|
139
|
+
CREATE TABLE IF NOT EXISTS conflicts (
|
|
140
|
+
id TEXT PRIMARY KEY,
|
|
141
|
+
fact_id_1 TEXT NOT NULL,
|
|
142
|
+
fact_id_2 TEXT NOT NULL,
|
|
143
|
+
conflict_type TEXT NOT NULL, -- 'temporal_overlap', 'contradiction', 'preference_shift', 'unknown'
|
|
144
|
+
entity_id TEXT NOT NULL, -- The entity involved in both facts
|
|
145
|
+
property TEXT, -- If applicable, the property being contradicted
|
|
146
|
+
description TEXT, -- Human-readable description of the conflict
|
|
147
|
+
severity TEXT DEFAULT 'medium', -- 'low', 'medium', 'high'
|
|
148
|
+
resolution_status TEXT DEFAULT 'flagged', -- 'flagged', 'acknowledged', 'resolved'
|
|
149
|
+
user_resolution TEXT, -- User's clarification of which fact is correct
|
|
150
|
+
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
151
|
+
last_reviewed TIMESTAMP,
|
|
152
|
+
|
|
153
|
+
-- Metadata
|
|
154
|
+
metadata TEXT, -- JSON for extensibility
|
|
155
|
+
|
|
156
|
+
-- Foreign key constraints
|
|
157
|
+
FOREIGN KEY (fact_id_1) REFERENCES facts(id) ON DELETE CASCADE,
|
|
158
|
+
FOREIGN KEY (fact_id_2) REFERENCES facts(id) ON DELETE CASCADE,
|
|
159
|
+
FOREIGN KEY (entity_id) REFERENCES entities(id) ON DELETE CASCADE
|
|
160
|
+
);
|
|
161
|
+
|
|
162
|
+
-- Conflict indexes for efficient detection and resolution
|
|
163
|
+
CREATE INDEX IF NOT EXISTS idx_conflicts_entity ON conflicts(entity_id);
|
|
164
|
+
CREATE INDEX IF NOT EXISTS idx_conflicts_fact_1 ON conflicts(fact_id_1);
|
|
165
|
+
CREATE INDEX IF NOT EXISTS idx_conflicts_fact_2 ON conflicts(fact_id_2);
|
|
166
|
+
CREATE INDEX IF NOT EXISTS idx_conflicts_type ON conflicts(conflict_type);
|
|
167
|
+
CREATE INDEX IF NOT EXISTS idx_conflicts_status ON conflicts(resolution_status);
|
|
168
|
+
CREATE INDEX IF NOT EXISTS idx_conflicts_created_at ON conflicts(created_at DESC);
|
|
169
|
+
|
|
170
|
+
-- Index for finding unresolved conflicts (used during consolidation)
|
|
171
|
+
CREATE INDEX IF NOT EXISTS idx_conflicts_unresolved
|
|
172
|
+
ON conflicts(entity_id, created_at DESC)
|
|
173
|
+
WHERE resolution_status IN ('flagged', 'acknowledged');
|
|
174
|
+
|
|
175
|
+
-- ============================================================================
|
|
176
|
+
-- SKILLS TABLE
|
|
177
|
+
-- Voyager-style procedural memory: reusable patterns that work well
|
|
178
|
+
-- Tracks executable logic, success rates, and dependencies
|
|
179
|
+
-- ============================================================================
|
|
180
|
+
|
|
181
|
+
CREATE TABLE IF NOT EXISTS skills (
|
|
182
|
+
id TEXT PRIMARY KEY,
|
|
183
|
+
name TEXT NOT NULL UNIQUE,
|
|
184
|
+
description TEXT NOT NULL,
|
|
185
|
+
category TEXT, -- Optional categorization: 'data_analysis', 'writing', 'coding', etc.
|
|
186
|
+
|
|
187
|
+
-- Executable logic (references or code)
|
|
188
|
+
code TEXT, -- The actual implementation (TypeScript or reference)
|
|
189
|
+
code_type TEXT DEFAULT 'reference', -- 'inline' or 'reference'
|
|
190
|
+
|
|
191
|
+
-- Triggering conditions
|
|
192
|
+
triggers TEXT NOT NULL, -- JSON array of semantic descriptions for when to use
|
|
193
|
+
prerequisites TEXT, -- JSON array of required context/skills
|
|
194
|
+
|
|
195
|
+
-- Success tracking
|
|
196
|
+
success_count INTEGER DEFAULT 0,
|
|
197
|
+
failure_count INTEGER DEFAULT 0,
|
|
198
|
+
avg_user_satisfaction REAL DEFAULT 0.5, -- 0.0-1.0, from feedback
|
|
199
|
+
|
|
200
|
+
-- Dependency tracking (for composition)
|
|
201
|
+
uses_skills TEXT, -- JSON array of skill IDs this skill depends on
|
|
202
|
+
used_by_skills TEXT, -- JSON array of skill IDs that use this skill
|
|
203
|
+
|
|
204
|
+
-- Metadata
|
|
205
|
+
created_from TEXT, -- Conversation ID where skill was extracted
|
|
206
|
+
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
207
|
+
last_used TIMESTAMP,
|
|
208
|
+
last_modified TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
209
|
+
version INTEGER DEFAULT 1,
|
|
210
|
+
is_archived BOOLEAN DEFAULT 0,
|
|
211
|
+
notes TEXT,
|
|
212
|
+
metadata TEXT -- JSON for extensibility
|
|
213
|
+
);
|
|
214
|
+
|
|
215
|
+
-- Skill indexes for efficient retrieval
|
|
216
|
+
CREATE INDEX IF NOT EXISTS idx_skills_name ON skills(name);
|
|
217
|
+
CREATE INDEX IF NOT EXISTS idx_skills_category ON skills(category);
|
|
218
|
+
CREATE INDEX IF NOT EXISTS idx_skills_created_at ON skills(created_at DESC);
|
|
219
|
+
CREATE INDEX IF NOT EXISTS idx_skills_last_used ON skills(last_used DESC);
|
|
220
|
+
CREATE INDEX IF NOT EXISTS idx_skills_success_rate ON skills(success_count, failure_count);
|
|
221
|
+
|
|
222
|
+
-- Index for finding high-confidence skills (used in skill-based retrieval)
|
|
223
|
+
CREATE INDEX IF NOT EXISTS idx_skills_reliability
|
|
224
|
+
ON skills(avg_user_satisfaction DESC, success_count DESC)
|
|
225
|
+
WHERE is_archived = 0;
|
|
226
|
+
|
|
227
|
+
-- ============================================================================
|
|
228
|
+
-- CONSOLIDATION METADATA TABLE
|
|
229
|
+
-- Tracks the consolidation process for recovery and monitoring
|
|
230
|
+
-- ============================================================================
|
|
231
|
+
|
|
232
|
+
CREATE TABLE IF NOT EXISTS consolidation_log (
|
|
233
|
+
id TEXT PRIMARY KEY,
|
|
234
|
+
consolidation_id TEXT NOT NULL UNIQUE,
|
|
235
|
+
started_at TIMESTAMP NOT NULL,
|
|
236
|
+
completed_at TIMESTAMP,
|
|
237
|
+
status TEXT NOT NULL, -- 'in_progress', 'completed', 'failed'
|
|
238
|
+
|
|
239
|
+
-- Statistics
|
|
240
|
+
entities_processed INTEGER DEFAULT 0,
|
|
241
|
+
relationships_processed INTEGER DEFAULT 0,
|
|
242
|
+
facts_processed INTEGER DEFAULT 0,
|
|
243
|
+
conflicts_detected INTEGER DEFAULT 0,
|
|
244
|
+
relationships_pruned INTEGER DEFAULT 0,
|
|
245
|
+
skills_extracted INTEGER DEFAULT 0,
|
|
246
|
+
|
|
247
|
+
-- Recovery information
|
|
248
|
+
last_checkpoint TIMESTAMP,
|
|
249
|
+
checkpoint_entity_count INTEGER DEFAULT 0,
|
|
250
|
+
error_message TEXT,
|
|
251
|
+
|
|
252
|
+
-- Performance tracking
|
|
253
|
+
duration_seconds INTEGER,
|
|
254
|
+
|
|
255
|
+
-- Metadata
|
|
256
|
+
notes TEXT,
|
|
257
|
+
metadata TEXT -- JSON for extensibility
|
|
258
|
+
);
|
|
259
|
+
|
|
260
|
+
-- Consolidation log indexes for monitoring
|
|
261
|
+
CREATE INDEX IF NOT EXISTS idx_consolidation_started ON consolidation_log(started_at DESC);
|
|
262
|
+
CREATE INDEX IF NOT EXISTS idx_consolidation_status ON consolidation_log(status);
|
|
263
|
+
|
|
264
|
+
-- ============================================================================
|
|
265
|
+
-- BACKUP METADATA TABLE
|
|
266
|
+
-- Tracks backups for rollback capability
|
|
267
|
+
-- ============================================================================
|
|
268
|
+
|
|
269
|
+
CREATE TABLE IF NOT EXISTS backup_metadata (
|
|
270
|
+
id TEXT PRIMARY KEY,
|
|
271
|
+
backup_timestamp TIMESTAMP NOT NULL,
|
|
272
|
+
backup_type TEXT NOT NULL, -- 'daily', 'pre_consolidation', 'manual'
|
|
273
|
+
status TEXT NOT NULL, -- 'completed', 'failed'
|
|
274
|
+
|
|
275
|
+
-- Backup information
|
|
276
|
+
backup_path TEXT,
|
|
277
|
+
file_size_bytes INTEGER,
|
|
278
|
+
|
|
279
|
+
-- Backup contents summary
|
|
280
|
+
entities_count INTEGER,
|
|
281
|
+
relationships_count INTEGER,
|
|
282
|
+
facts_count INTEGER,
|
|
283
|
+
|
|
284
|
+
-- Retention
|
|
285
|
+
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
286
|
+
expires_at TIMESTAMP, -- Auto-delete after 7 days
|
|
287
|
+
|
|
288
|
+
-- Metadata
|
|
289
|
+
notes TEXT,
|
|
290
|
+
metadata TEXT
|
|
291
|
+
);
|
|
292
|
+
|
|
293
|
+
-- Backup metadata indexes
|
|
294
|
+
CREATE INDEX IF NOT EXISTS idx_backup_timestamp ON backup_metadata(backup_timestamp DESC);
|
|
295
|
+
CREATE INDEX IF NOT EXISTS idx_backup_status ON backup_metadata(status);
|
|
296
|
+
CREATE INDEX IF NOT EXISTS idx_backup_expiry ON backup_metadata(expires_at);
|
|
297
|
+
|
|
298
|
+
-- ============================================================================
|
|
299
|
+
-- VIEWS FOR COMMON QUERIES
|
|
300
|
+
-- Provide convenient access patterns for application code
|
|
301
|
+
-- ============================================================================
|
|
302
|
+
|
|
303
|
+
-- View: Currently valid facts (no longer temporal lookup needed in code)
|
|
304
|
+
CREATE VIEW IF NOT EXISTS valid_facts AS
|
|
305
|
+
SELECT f.*
|
|
306
|
+
FROM facts f
|
|
307
|
+
WHERE f.valid_until IS NULL
|
|
308
|
+
AND f.is_archived = 0
|
|
309
|
+
AND f.confidence > 0.0;
|
|
310
|
+
|
|
311
|
+
-- View: Active relationships (not archived, still have strength)
|
|
312
|
+
CREATE VIEW IF NOT EXISTS active_relationships AS
|
|
313
|
+
SELECT r.*,
|
|
314
|
+
e1.name as source_name,
|
|
315
|
+
e2.name as target_name
|
|
316
|
+
FROM relationships r
|
|
317
|
+
JOIN entities e1 ON r.source_id = e1.id
|
|
318
|
+
JOIN entities e2 ON r.target_id = e2.id
|
|
319
|
+
WHERE r.is_archived = 0
|
|
320
|
+
AND r.strength > 0.0;
|
|
321
|
+
|
|
322
|
+
-- View: Unresolved conflicts for consolidation
|
|
323
|
+
CREATE VIEW IF NOT EXISTS unresolved_conflicts AS
|
|
324
|
+
SELECT c.*,
|
|
325
|
+
f1.property as property_1,
|
|
326
|
+
f1.value as value_1,
|
|
327
|
+
f2.property as property_2,
|
|
328
|
+
f2.value as value_2
|
|
329
|
+
FROM conflicts c
|
|
330
|
+
JOIN facts f1 ON c.fact_id_1 = f1.id
|
|
331
|
+
JOIN facts f2 ON c.fact_id_2 = f2.id
|
|
332
|
+
WHERE c.resolution_status IN ('flagged', 'acknowledged');
|
|
333
|
+
|
|
334
|
+
-- View: High-confidence skills ready for use
|
|
335
|
+
CREATE VIEW IF NOT EXISTS reliable_skills AS
|
|
336
|
+
SELECT s.*,
|
|
337
|
+
CASE
|
|
338
|
+
WHEN (s.success_count + s.failure_count) = 0 THEN 0.5
|
|
339
|
+
ELSE CAST(s.success_count AS REAL) / (s.success_count + s.failure_count)
|
|
340
|
+
END as success_rate
|
|
341
|
+
FROM skills s
|
|
342
|
+
WHERE s.is_archived = 0
|
|
343
|
+
ORDER BY s.avg_user_satisfaction DESC, s.success_count DESC;
|
|
344
|
+
|
|
345
|
+
-- View: Entities with connection counts
|
|
346
|
+
CREATE VIEW IF NOT EXISTS entity_stats AS
|
|
347
|
+
SELECT
|
|
348
|
+
e.id,
|
|
349
|
+
e.name,
|
|
350
|
+
e.type,
|
|
351
|
+
e.confidence,
|
|
352
|
+
COUNT(DISTINCT r.id) as relationship_count,
|
|
353
|
+
COUNT(DISTINCT f.id) as fact_count,
|
|
354
|
+
e.access_count,
|
|
355
|
+
e.last_accessed
|
|
356
|
+
FROM entities e
|
|
357
|
+
LEFT JOIN relationships r ON (e.id = r.source_id OR e.id = r.target_id) AND r.is_archived = 0
|
|
358
|
+
LEFT JOIN facts f ON e.id = f.entity_id AND f.is_archived = 0
|
|
359
|
+
GROUP BY e.id;
|
|
360
|
+
|
|
361
|
+
-- ============================================================================
|
|
362
|
+
-- INITIALIZATION NOTES
|
|
363
|
+
-- ============================================================================
|
|
364
|
+
--
|
|
365
|
+
-- This schema supports the AI Memory System v3.0 architecture:
|
|
366
|
+
--
|
|
367
|
+
-- 1. ENTITIES: Semantic concepts (people, projects, preferences)
|
|
368
|
+
-- - Embedding field enables Qdrant vector search integration
|
|
369
|
+
-- - Confidence tracks reliability (lowered when conflicts detected)
|
|
370
|
+
-- - Access patterns tracked for eviction decisions
|
|
371
|
+
--
|
|
372
|
+
-- 2. RELATIONSHIPS: Temporal connections between entities
|
|
373
|
+
-- - strength: Decays over time using exponential formula
|
|
374
|
+
-- - evidence: Links to source conversations for traceability
|
|
375
|
+
-- - Indexed for efficient graph traversal (HippoRAG support)
|
|
376
|
+
--
|
|
377
|
+
-- 3. FACTS: Temporal properties with validity windows
|
|
378
|
+
-- - valid_from/valid_until: Enables temporal reasoning
|
|
379
|
+
-- - contradicts: Links to conflicting facts for detection
|
|
380
|
+
-- - confidence: Lowered when contradictions detected
|
|
381
|
+
--
|
|
382
|
+
-- 4. CONFLICTS: Flagged contradictions (never auto-resolved)
|
|
383
|
+
-- - Types: temporal_overlap, contradiction, preference_shift
|
|
384
|
+
-- - Resolution: Manual user clarification required
|
|
385
|
+
--
|
|
386
|
+
-- 5. SKILLS: Procedural memory (Voyager-style)
|
|
387
|
+
-- - triggers: Semantic descriptions for skill matching
|
|
388
|
+
-- - Dependency tracking for composition
|
|
389
|
+
-- - Success/satisfaction metrics for ranking
|
|
390
|
+
--
|
|
391
|
+
-- CONSOLIDATION PROCESS (Nightly at 3 AM):
|
|
392
|
+
-- 1. Extract entities/relationships from working memory
|
|
393
|
+
-- 2. Upsert to semantic layer (entities, relationships, facts)
|
|
394
|
+
-- 3. Apply exponential decay to all relationships
|
|
395
|
+
-- 4. Detect conflicts (temporal, semantic, preference shifts)
|
|
396
|
+
-- 5. Prune low-strength, rarely-accessed memories
|
|
397
|
+
-- 6. Extract skills from positive interactions
|
|
398
|
+
-- 7. Create backup for recovery
|
|
399
|
+
--
|
|
400
|
+
-- DECAY FORMULA (exponential):
|
|
401
|
+
-- strength(t) = strength(0) * e^(-t/30)
|
|
402
|
+
-- - Decays to 50% in ~21 days
|
|
403
|
+
-- - Decays to 10% in ~69 days
|
|
404
|
+
-- - Pruning threshold: strength < 0.05 AND access_count < 3
|
|
405
|
+
--
|
|
406
|
+
-- PERFORMANCE TARGETS:
|
|
407
|
+
-- - Entity lookup: <1ms (indexed by name, type)
|
|
408
|
+
-- - Relationship traversal: <10ms (indexed for HippoRAG)
|
|
409
|
+
-- - Fact retrieval: <5ms (indexed by entity, temporal)
|
|
410
|
+
-- - Conflict detection: <100ms (indexed for query efficiency)
|
|
411
|
+
-- - Consolidation: <15min for 10K memories
|
|
412
|
+
--
|
|
413
|
+
-- ============================================================================
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Scientific Benchmark System for Vesper Memory
|
|
3
|
+
*
|
|
4
|
+
* Main entry point for the benchmark module.
|
|
5
|
+
* Provides A/B testing with statistical analysis.
|
|
6
|
+
*/
|
|
7
|
+
export { BenchmarkConfigSchema, BenchmarkResultSchema, MetricsSnapshotSchema, ScenarioResultSchema, ComparisonResultSchema, validateBenchmarkConfig, validateBenchmarkResult, validateMetricsSnapshot, createDefaultConfig, SCENARIO_DESCRIPTIONS, getScenarioDescription, } from "./types.js";
|
|
8
|
+
export type { BenchmarkConfig, BenchmarkResult, MetricsSnapshot, ScenarioResult, ComparisonResult, AggregateMetrics, StatisticalComparison, BenchmarkSummary, TTestResult, EffectSize, ScenarioType, BenchmarkPhase, Winner, } from "./types.js";
|
|
9
|
+
export { mean, median, percentile, variance, standardDeviation, confidenceInterval, welchTTest, cohensD, interpretEffectSize, StatisticsError, } from "./statistics.js";
|
|
10
|
+
export type { ConfidenceIntervalResult, WelchTTestResult, } from "./statistics.js";
|
|
11
|
+
export { createMetricsCollector, measureLatency, estimateTokens, evaluateResponseQuality, aggregateMetrics, MetricsCollectorError, } from "./metrics-collector.js";
|
|
12
|
+
export type { MetricsCollector, LatencyMeasurement, ContentType, QualityEvaluationOptions, } from "./metrics-collector.js";
|
|
13
|
+
export { createScenario, createContextRecallScenario, CONTEXT_RECALL_TEST_DATA, } from "./scenarios/index.js";
|
|
14
|
+
export type { BenchmarkScenario, MCPClient, ContextRecallScenario, ContextRecallTestCase, } from "./scenarios/index.js";
|
|
15
|
+
export { createBenchmarkRunner, comparePhasesStatistically, } from "./runner.js";
|
|
16
|
+
export type { BenchmarkRunner } from "./runner.js";
|
|
17
|
+
export { generateMarkdownReport, formatNumber, formatPercentage, formatDuration, generateSummaryTable, generateComparisonSection, } from "./report-generator.js";
|
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/benchmark/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,EACpB,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,EACvB,uBAAuB,EACvB,mBAAmB,EACnB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,YAAY,CAAC;AAEpB,YAAY,EACV,eAAe,EACf,eAAe,EACf,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,qBAAqB,EACrB,gBAAgB,EAChB,WAAW,EACX,UAAU,EACV,YAAY,EACZ,cAAc,EACd,MAAM,GACP,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,IAAI,EACJ,MAAM,EACN,UAAU,EACV,QAAQ,EACR,iBAAiB,EACjB,kBAAkB,EAClB,UAAU,EACV,OAAO,EACP,mBAAmB,EACnB,eAAe,GAChB,MAAM,iBAAiB,CAAC;AAEzB,YAAY,EACV,wBAAwB,EACxB,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,sBAAsB,EACtB,cAAc,EACd,cAAc,EACd,uBAAuB,EACvB,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,wBAAwB,CAAC;AAEhC,YAAY,EACV,gBAAgB,EAChB,kBAAkB,EAClB,WAAW,EACX,wBAAwB,GACzB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EACL,cAAc,EACd,2BAA2B,EAC3B,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAE9B,YAAY,EACV,iBAAiB,EACjB,SAAS,EACT,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,qBAAqB,EACrB,0BAA0B,GAC3B,MAAM,aAAa,CAAC;AAErB,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAGnD,OAAO,EACL,sBAAsB,EACtB,YAAY,EACZ,gBAAgB,EAChB,cAAc,EACd,oBAAoB,EACpB,yBAAyB,GAC1B,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Scientific Benchmark System for Vesper Memory
|
|
3
|
+
*
|
|
4
|
+
* Main entry point for the benchmark module.
|
|
5
|
+
* Provides A/B testing with statistical analysis.
|
|
6
|
+
*/
|
|
7
|
+
// Types
|
|
8
|
+
export { BenchmarkConfigSchema, BenchmarkResultSchema, MetricsSnapshotSchema, ScenarioResultSchema, ComparisonResultSchema, validateBenchmarkConfig, validateBenchmarkResult, validateMetricsSnapshot, createDefaultConfig, SCENARIO_DESCRIPTIONS, getScenarioDescription, } from "./types.js";
|
|
9
|
+
// Statistics
|
|
10
|
+
export { mean, median, percentile, variance, standardDeviation, confidenceInterval, welchTTest, cohensD, interpretEffectSize, StatisticsError, } from "./statistics.js";
|
|
11
|
+
// Metrics Collector
|
|
12
|
+
export { createMetricsCollector, measureLatency, estimateTokens, evaluateResponseQuality, aggregateMetrics, MetricsCollectorError, } from "./metrics-collector.js";
|
|
13
|
+
// Scenarios
|
|
14
|
+
export { createScenario, createContextRecallScenario, CONTEXT_RECALL_TEST_DATA, } from "./scenarios/index.js";
|
|
15
|
+
// Runner
|
|
16
|
+
export { createBenchmarkRunner, comparePhasesStatistically, } from "./runner.js";
|
|
17
|
+
// Report Generator
|
|
18
|
+
export { generateMarkdownReport, formatNumber, formatPercentage, formatDuration, generateSummaryTable, generateComparisonSection, } from "./report-generator.js";
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/benchmark/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,QAAQ;AACR,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,EACpB,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,EACvB,uBAAuB,EACvB,mBAAmB,EACnB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,YAAY,CAAC;AAkBpB,aAAa;AACb,OAAO,EACL,IAAI,EACJ,MAAM,EACN,UAAU,EACV,QAAQ,EACR,iBAAiB,EACjB,kBAAkB,EAClB,UAAU,EACV,OAAO,EACP,mBAAmB,EACnB,eAAe,GAChB,MAAM,iBAAiB,CAAC;AAOzB,oBAAoB;AACpB,OAAO,EACL,sBAAsB,EACtB,cAAc,EACd,cAAc,EACd,uBAAuB,EACvB,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,wBAAwB,CAAC;AAShC,YAAY;AACZ,OAAO,EACL,cAAc,EACd,2BAA2B,EAC3B,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAS9B,SAAS;AACT,OAAO,EACL,qBAAqB,EACrB,0BAA0B,GAC3B,MAAM,aAAa,CAAC;AAIrB,mBAAmB;AACnB,OAAO,EACL,sBAAsB,EACtB,YAAY,EACZ,gBAAgB,EAChB,cAAc,EACd,oBAAoB,EACpB,yBAAyB,GAC1B,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Metrics Collector for Scientific Benchmarks
|
|
3
|
+
*
|
|
4
|
+
* Real-time collection and aggregation of benchmark metrics.
|
|
5
|
+
* Provides accurate latency measurement, token estimation, and quality evaluation.
|
|
6
|
+
*/
|
|
7
|
+
import type { MetricsSnapshot, AggregateMetrics } from "./types.js";
|
|
8
|
+
/**
|
|
9
|
+
* Error class for metrics collection errors
|
|
10
|
+
*/
|
|
11
|
+
export declare class MetricsCollectorError extends Error {
|
|
12
|
+
constructor(message: string);
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Metrics collector interface
|
|
16
|
+
*/
|
|
17
|
+
export interface MetricsCollector {
|
|
18
|
+
/** Record a new metrics snapshot */
|
|
19
|
+
record(snapshot: MetricsSnapshot): void;
|
|
20
|
+
/** Get all recorded metrics */
|
|
21
|
+
getMetrics(): MetricsSnapshot[];
|
|
22
|
+
/** Get count of recorded metrics */
|
|
23
|
+
getCount(): number;
|
|
24
|
+
/** Clear all recorded metrics */
|
|
25
|
+
clear(): void;
|
|
26
|
+
/** Aggregate all recorded metrics into summary statistics */
|
|
27
|
+
aggregate(): AggregateMetrics;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Create a new metrics collector
|
|
31
|
+
*/
|
|
32
|
+
export declare function createMetricsCollector(): MetricsCollector;
|
|
33
|
+
/**
|
|
34
|
+
* Result of latency measurement
|
|
35
|
+
*/
|
|
36
|
+
export interface LatencyMeasurement<T> {
|
|
37
|
+
result: T;
|
|
38
|
+
latencyMs: number;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Measure the latency of a function execution
|
|
42
|
+
*
|
|
43
|
+
* @param fn - Function to measure (can be sync or async)
|
|
44
|
+
* @returns Object containing the result and latency in milliseconds
|
|
45
|
+
*/
|
|
46
|
+
export declare function measureLatency<T>(fn: () => T | Promise<T>): Promise<LatencyMeasurement<T>>;
|
|
47
|
+
/**
|
|
48
|
+
* Content type hint for token estimation
|
|
49
|
+
*/
|
|
50
|
+
export type ContentType = "prose" | "code" | "mixed";
|
|
51
|
+
/**
|
|
52
|
+
* Estimate the number of tokens in a text string
|
|
53
|
+
*
|
|
54
|
+
* Uses a heuristic approximation:
|
|
55
|
+
* - English prose: ~4 characters per token
|
|
56
|
+
* - Code: ~3 characters per token (more punctuation)
|
|
57
|
+
* - Mixed: ~3.5 characters per token
|
|
58
|
+
*
|
|
59
|
+
* @param text - The text to estimate tokens for
|
|
60
|
+
* @param contentType - Optional hint about content type
|
|
61
|
+
* @returns Estimated token count
|
|
62
|
+
*/
|
|
63
|
+
export declare function estimateTokens(text: string, contentType?: ContentType): number;
|
|
64
|
+
/**
|
|
65
|
+
* Options for response quality evaluation
|
|
66
|
+
*/
|
|
67
|
+
export interface QualityEvaluationOptions {
|
|
68
|
+
/** Evaluation mode: 'similarity' (default) or 'keywords' */
|
|
69
|
+
mode?: "similarity" | "keywords";
|
|
70
|
+
/** Minimum similarity threshold (0-1) */
|
|
71
|
+
minThreshold?: number;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Evaluate the quality of a response against expected content
|
|
75
|
+
*
|
|
76
|
+
* @param actual - The actual response
|
|
77
|
+
* @param expected - Expected response (string) or keywords (array)
|
|
78
|
+
* @param options - Evaluation options
|
|
79
|
+
* @returns Quality score from 0.0 to 1.0
|
|
80
|
+
*/
|
|
81
|
+
export declare function evaluateResponseQuality(actual: string, expected: string | string[], options?: QualityEvaluationOptions): number;
|
|
82
|
+
/**
|
|
83
|
+
* Aggregate an array of metrics snapshots into summary statistics
|
|
84
|
+
*
|
|
85
|
+
* @param metrics - Array of metrics snapshots
|
|
86
|
+
* @returns Aggregated metrics
|
|
87
|
+
* @throws MetricsCollectorError if metrics array is empty
|
|
88
|
+
*/
|
|
89
|
+
export declare function aggregateMetrics(metrics: MetricsSnapshot[]): AggregateMetrics;
|
|
90
|
+
//# sourceMappingURL=metrics-collector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics-collector.d.ts","sourceRoot":"","sources":["../../src/benchmark/metrics-collector.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGpE;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;gBAClC,OAAO,EAAE,MAAM;CAI5B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,oCAAoC;IACpC,MAAM,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI,CAAC;IAExC,+BAA+B;IAC/B,UAAU,IAAI,eAAe,EAAE,CAAC;IAEhC,oCAAoC;IACpC,QAAQ,IAAI,MAAM,CAAC;IAEnB,iCAAiC;IACjC,KAAK,IAAI,IAAI,CAAC;IAEd,6DAA6D;IAC7D,SAAS,IAAI,gBAAgB,CAAC;CAC/B;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,gBAAgB,CA6BzD;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB,CAAC,CAAC;IACnC,MAAM,EAAE,CAAC,CAAC;IACV,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,CAAC,EACpC,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GACvB,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAYhC;AAED;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;AAErD;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,WAAW,GAAE,WAAqB,GACjC,MAAM,CAoCR;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,4DAA4D;IAC5D,IAAI,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC;IACjC,yCAAyC;IACzC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,EAC3B,OAAO,GAAE,wBAA6B,GACrC,MAAM,CA0DR;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,gBAAgB,CA4C7E"}
|