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,162 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BGE-large Embedding Client
|
|
3
|
+
*
|
|
4
|
+
* TypeScript client for the BGE-large embedding service.
|
|
5
|
+
* Provides methods for generating 1024-dimensional dense embeddings.
|
|
6
|
+
*/
|
|
7
|
+
import { LRUCache } from 'lru-cache';
|
|
8
|
+
/**
|
|
9
|
+
* BGE-large Embedding Client
|
|
10
|
+
*
|
|
11
|
+
* Communicates with the Python embedding service to generate
|
|
12
|
+
* 1024-dimensional dense embeddings using BGE-large-en-v1.5.
|
|
13
|
+
*/
|
|
14
|
+
export class EmbeddingClient {
|
|
15
|
+
serviceUrl;
|
|
16
|
+
timeout;
|
|
17
|
+
maxRetries;
|
|
18
|
+
embeddingCache;
|
|
19
|
+
constructor(config = {}) {
|
|
20
|
+
this.serviceUrl = config.serviceUrl || process.env.EMBEDDING_SERVICE_URL || 'http://localhost:8000';
|
|
21
|
+
this.timeout = config.timeout || 30000;
|
|
22
|
+
this.maxRetries = config.maxRetries || 3;
|
|
23
|
+
// Initialize LRU cache for embeddings (1000 entries, 1 hour TTL)
|
|
24
|
+
this.embeddingCache = new LRUCache({
|
|
25
|
+
max: 1000,
|
|
26
|
+
ttl: 1000 * 60 * 60, // 1 hour
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Check if the embedding service is healthy
|
|
31
|
+
*
|
|
32
|
+
* @returns Health status and model information
|
|
33
|
+
*/
|
|
34
|
+
async health() {
|
|
35
|
+
const response = await this.fetchWithRetry(`${this.serviceUrl}/health`, {
|
|
36
|
+
method: 'GET',
|
|
37
|
+
});
|
|
38
|
+
if (!response.ok) {
|
|
39
|
+
throw new Error(`Health check failed: ${response.status} ${response.statusText}`);
|
|
40
|
+
}
|
|
41
|
+
return (await response.json());
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Generate embedding for a single text
|
|
45
|
+
*
|
|
46
|
+
* @param text - Text to embed
|
|
47
|
+
* @param normalize - Whether to normalize the embedding (default: true)
|
|
48
|
+
* @returns 1024-dimensional embedding vector
|
|
49
|
+
*/
|
|
50
|
+
async embed(text, normalize = true) {
|
|
51
|
+
// Create cache key from text and normalize flag
|
|
52
|
+
const cacheKey = `${text}:${normalize}`;
|
|
53
|
+
// Check cache first
|
|
54
|
+
const cached = this.embeddingCache.get(cacheKey);
|
|
55
|
+
if (cached) {
|
|
56
|
+
return cached;
|
|
57
|
+
}
|
|
58
|
+
// Cache miss - generate embedding
|
|
59
|
+
const response = await this.embedBatch([text], normalize);
|
|
60
|
+
const embedding = response.embeddings[0];
|
|
61
|
+
// Store in cache
|
|
62
|
+
this.embeddingCache.set(cacheKey, embedding);
|
|
63
|
+
return embedding;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Generate embeddings for multiple texts
|
|
67
|
+
*
|
|
68
|
+
* @param texts - Array of texts to embed
|
|
69
|
+
* @param normalize - Whether to normalize embeddings (default: true)
|
|
70
|
+
* @returns Array of 1024-dimensional embedding vectors
|
|
71
|
+
*/
|
|
72
|
+
async embedBatch(texts, normalize = true) {
|
|
73
|
+
if (texts.length === 0) {
|
|
74
|
+
return {
|
|
75
|
+
embeddings: [],
|
|
76
|
+
dimensions: 1024,
|
|
77
|
+
count: 0,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
const response = await this.fetchWithRetry(`${this.serviceUrl}/embed`, {
|
|
81
|
+
method: 'POST',
|
|
82
|
+
headers: {
|
|
83
|
+
'Content-Type': 'application/json',
|
|
84
|
+
},
|
|
85
|
+
body: JSON.stringify({
|
|
86
|
+
text: texts,
|
|
87
|
+
normalize,
|
|
88
|
+
}),
|
|
89
|
+
});
|
|
90
|
+
if (!response.ok) {
|
|
91
|
+
const error = await response.text();
|
|
92
|
+
throw new Error(`Embedding generation failed: ${response.status} ${error}`);
|
|
93
|
+
}
|
|
94
|
+
const result = (await response.json());
|
|
95
|
+
// Validate dimensions
|
|
96
|
+
if (result.dimensions !== 1024) {
|
|
97
|
+
throw new Error(`Expected 1024-dimensional embeddings, got ${result.dimensions}`);
|
|
98
|
+
}
|
|
99
|
+
// Validate count
|
|
100
|
+
if (result.count !== texts.length) {
|
|
101
|
+
throw new Error(`Expected ${texts.length} embeddings, got ${result.count}`);
|
|
102
|
+
}
|
|
103
|
+
return result;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Generate embeddings with optimized batching
|
|
107
|
+
*
|
|
108
|
+
* Automatically splits large batches to avoid memory issues
|
|
109
|
+
* and timeouts on the embedding service.
|
|
110
|
+
*
|
|
111
|
+
* @param texts - Array of texts to embed
|
|
112
|
+
* @param batchSize - Number of texts per batch (default: 32)
|
|
113
|
+
* @returns Array of 1024-dimensional embedding vectors
|
|
114
|
+
*/
|
|
115
|
+
async embedLargeBatch(texts, batchSize = 32) {
|
|
116
|
+
const allEmbeddings = [];
|
|
117
|
+
for (let i = 0; i < texts.length; i += batchSize) {
|
|
118
|
+
const batch = texts.slice(i, i + batchSize);
|
|
119
|
+
const response = await this.embedBatch(batch);
|
|
120
|
+
allEmbeddings.push(...response.embeddings);
|
|
121
|
+
}
|
|
122
|
+
return allEmbeddings;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Fetch with automatic retry on failure
|
|
126
|
+
*
|
|
127
|
+
* @param url - URL to fetch
|
|
128
|
+
* @param options - Fetch options
|
|
129
|
+
* @returns Response
|
|
130
|
+
*/
|
|
131
|
+
async fetchWithRetry(url, options, retries = 0) {
|
|
132
|
+
try {
|
|
133
|
+
const controller = new AbortController();
|
|
134
|
+
const timeoutId = setTimeout(() => controller.abort(), this.timeout);
|
|
135
|
+
const response = await fetch(url, {
|
|
136
|
+
...options,
|
|
137
|
+
signal: controller.signal,
|
|
138
|
+
});
|
|
139
|
+
clearTimeout(timeoutId);
|
|
140
|
+
return response;
|
|
141
|
+
}
|
|
142
|
+
catch (error) {
|
|
143
|
+
if (retries < this.maxRetries) {
|
|
144
|
+
// Wait before retrying (exponential backoff)
|
|
145
|
+
const delay = Math.pow(2, retries) * 1000;
|
|
146
|
+
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
147
|
+
return this.fetchWithRetry(url, options, retries + 1);
|
|
148
|
+
}
|
|
149
|
+
throw new Error(`Embedding service request failed after ${this.maxRetries} retries: ${error instanceof Error ? error.message : String(error)}`);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Factory function to create an embedding client
|
|
155
|
+
*
|
|
156
|
+
* @param config - Optional configuration
|
|
157
|
+
* @returns Embedding client instance
|
|
158
|
+
*/
|
|
159
|
+
export function createEmbeddingClient(config) {
|
|
160
|
+
return new EmbeddingClient(config);
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/embeddings/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BGE-large Embedding Client
|
|
3
|
+
*
|
|
4
|
+
* TypeScript client for the BGE-large embedding service.
|
|
5
|
+
* Provides methods for generating 1024-dimensional dense embeddings.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Embedding service response
|
|
9
|
+
*/
|
|
10
|
+
export interface EmbeddingResponse {
|
|
11
|
+
embeddings: number[][];
|
|
12
|
+
dimensions: number;
|
|
13
|
+
count: number;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Health check response
|
|
17
|
+
*/
|
|
18
|
+
export interface HealthResponse {
|
|
19
|
+
status: string;
|
|
20
|
+
model: string;
|
|
21
|
+
dimensions: number;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* BGE-large embedding client configuration
|
|
25
|
+
*/
|
|
26
|
+
export interface EmbeddingClientConfig {
|
|
27
|
+
/** Embedding service URL (default: http://localhost:8000) */
|
|
28
|
+
serviceUrl?: string;
|
|
29
|
+
/** Request timeout in milliseconds (default: 30000) */
|
|
30
|
+
timeout?: number;
|
|
31
|
+
/** Maximum retries on failure (default: 3) */
|
|
32
|
+
maxRetries?: number;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* BGE-large Embedding Client
|
|
36
|
+
*
|
|
37
|
+
* Communicates with the Python embedding service to generate
|
|
38
|
+
* 1024-dimensional dense embeddings using BGE-large-en-v1.5.
|
|
39
|
+
*/
|
|
40
|
+
export declare class EmbeddingClient {
|
|
41
|
+
private serviceUrl;
|
|
42
|
+
private timeout;
|
|
43
|
+
private maxRetries;
|
|
44
|
+
constructor(config?: EmbeddingClientConfig);
|
|
45
|
+
/**
|
|
46
|
+
* Check if the embedding service is healthy
|
|
47
|
+
*
|
|
48
|
+
* @returns Health status and model information
|
|
49
|
+
*/
|
|
50
|
+
health(): Promise<HealthResponse>;
|
|
51
|
+
/**
|
|
52
|
+
* Generate embedding for a single text
|
|
53
|
+
*
|
|
54
|
+
* @param text - Text to embed
|
|
55
|
+
* @param normalize - Whether to normalize the embedding (default: true)
|
|
56
|
+
* @returns 1024-dimensional embedding vector
|
|
57
|
+
*/
|
|
58
|
+
embed(text: string, normalize?: boolean): Promise<number[]>;
|
|
59
|
+
/**
|
|
60
|
+
* Generate embeddings for multiple texts
|
|
61
|
+
*
|
|
62
|
+
* @param texts - Array of texts to embed
|
|
63
|
+
* @param normalize - Whether to normalize embeddings (default: true)
|
|
64
|
+
* @returns Array of 1024-dimensional embedding vectors
|
|
65
|
+
*/
|
|
66
|
+
embedBatch(texts: string[], normalize?: boolean): Promise<EmbeddingResponse>;
|
|
67
|
+
/**
|
|
68
|
+
* Generate embeddings with optimized batching
|
|
69
|
+
*
|
|
70
|
+
* Automatically splits large batches to avoid memory issues
|
|
71
|
+
* and timeouts on the embedding service.
|
|
72
|
+
*
|
|
73
|
+
* @param texts - Array of texts to embed
|
|
74
|
+
* @param batchSize - Number of texts per batch (default: 32)
|
|
75
|
+
* @returns Array of 1024-dimensional embedding vectors
|
|
76
|
+
*/
|
|
77
|
+
embedLargeBatch(texts: string[], batchSize?: number): Promise<number[][]>;
|
|
78
|
+
/**
|
|
79
|
+
* Fetch with automatic retry on failure
|
|
80
|
+
*
|
|
81
|
+
* @param url - URL to fetch
|
|
82
|
+
* @param options - Fetch options
|
|
83
|
+
* @returns Response
|
|
84
|
+
*/
|
|
85
|
+
private fetchWithRetry;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Factory function to create an embedding client
|
|
89
|
+
*
|
|
90
|
+
* @param config - Optional configuration
|
|
91
|
+
* @returns Embedding client instance
|
|
92
|
+
*/
|
|
93
|
+
export declare function createEmbeddingClient(config?: EmbeddingClientConfig): EmbeddingClient;
|
|
94
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/embeddings/client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,EAAE,EAAE,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,6DAA6D;IAC7D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8CAA8C;IAC9C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;GAKG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,UAAU,CAAS;gBAEf,MAAM,GAAE,qBAA0B;IAM9C;;;;OAIG;IACG,MAAM,IAAI,OAAO,CAAC,cAAc,CAAC;IAYvC;;;;;;OAMG;IACG,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,GAAE,OAAc,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAKvE;;;;;;OAMG;IACG,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,SAAS,GAAE,OAAc,GAAG,OAAO,CAAC,iBAAiB,CAAC;IA4CxF;;;;;;;;;OASG;IACG,eAAe,CACnB,KAAK,EAAE,MAAM,EAAE,EACf,SAAS,GAAE,MAAW,GACrB,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IAYtB;;;;;;OAMG;YACW,cAAc;CA6B7B;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,CAAC,EAAE,qBAAqB,GAC7B,eAAe,CAEjB"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BGE-large Embedding Client
|
|
3
|
+
*
|
|
4
|
+
* TypeScript client for the BGE-large embedding service.
|
|
5
|
+
* Provides methods for generating 1024-dimensional dense embeddings.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* BGE-large Embedding Client
|
|
9
|
+
*
|
|
10
|
+
* Communicates with the Python embedding service to generate
|
|
11
|
+
* 1024-dimensional dense embeddings using BGE-large-en-v1.5.
|
|
12
|
+
*/
|
|
13
|
+
export class EmbeddingClient {
|
|
14
|
+
serviceUrl;
|
|
15
|
+
timeout;
|
|
16
|
+
maxRetries;
|
|
17
|
+
constructor(config = {}) {
|
|
18
|
+
this.serviceUrl = config.serviceUrl || process.env.EMBEDDING_SERVICE_URL || 'http://localhost:8000';
|
|
19
|
+
this.timeout = config.timeout || 30000;
|
|
20
|
+
this.maxRetries = config.maxRetries || 3;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Check if the embedding service is healthy
|
|
24
|
+
*
|
|
25
|
+
* @returns Health status and model information
|
|
26
|
+
*/
|
|
27
|
+
async health() {
|
|
28
|
+
const response = await this.fetchWithRetry(`${this.serviceUrl}/health`, {
|
|
29
|
+
method: 'GET',
|
|
30
|
+
});
|
|
31
|
+
if (!response.ok) {
|
|
32
|
+
throw new Error(`Health check failed: ${response.status} ${response.statusText}`);
|
|
33
|
+
}
|
|
34
|
+
return (await response.json());
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Generate embedding for a single text
|
|
38
|
+
*
|
|
39
|
+
* @param text - Text to embed
|
|
40
|
+
* @param normalize - Whether to normalize the embedding (default: true)
|
|
41
|
+
* @returns 1024-dimensional embedding vector
|
|
42
|
+
*/
|
|
43
|
+
async embed(text, normalize = true) {
|
|
44
|
+
const response = await this.embedBatch([text], normalize);
|
|
45
|
+
return response.embeddings[0];
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Generate embeddings for multiple texts
|
|
49
|
+
*
|
|
50
|
+
* @param texts - Array of texts to embed
|
|
51
|
+
* @param normalize - Whether to normalize embeddings (default: true)
|
|
52
|
+
* @returns Array of 1024-dimensional embedding vectors
|
|
53
|
+
*/
|
|
54
|
+
async embedBatch(texts, normalize = true) {
|
|
55
|
+
if (texts.length === 0) {
|
|
56
|
+
return {
|
|
57
|
+
embeddings: [],
|
|
58
|
+
dimensions: 1024,
|
|
59
|
+
count: 0,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
const response = await this.fetchWithRetry(`${this.serviceUrl}/embed`, {
|
|
63
|
+
method: 'POST',
|
|
64
|
+
headers: {
|
|
65
|
+
'Content-Type': 'application/json',
|
|
66
|
+
},
|
|
67
|
+
body: JSON.stringify({
|
|
68
|
+
text: texts,
|
|
69
|
+
normalize,
|
|
70
|
+
}),
|
|
71
|
+
});
|
|
72
|
+
if (!response.ok) {
|
|
73
|
+
const error = await response.text();
|
|
74
|
+
throw new Error(`Embedding generation failed: ${response.status} ${error}`);
|
|
75
|
+
}
|
|
76
|
+
const result = (await response.json());
|
|
77
|
+
// Validate dimensions
|
|
78
|
+
if (result.dimensions !== 1024) {
|
|
79
|
+
throw new Error(`Expected 1024-dimensional embeddings, got ${result.dimensions}`);
|
|
80
|
+
}
|
|
81
|
+
// Validate count
|
|
82
|
+
if (result.count !== texts.length) {
|
|
83
|
+
throw new Error(`Expected ${texts.length} embeddings, got ${result.count}`);
|
|
84
|
+
}
|
|
85
|
+
return result;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Generate embeddings with optimized batching
|
|
89
|
+
*
|
|
90
|
+
* Automatically splits large batches to avoid memory issues
|
|
91
|
+
* and timeouts on the embedding service.
|
|
92
|
+
*
|
|
93
|
+
* @param texts - Array of texts to embed
|
|
94
|
+
* @param batchSize - Number of texts per batch (default: 32)
|
|
95
|
+
* @returns Array of 1024-dimensional embedding vectors
|
|
96
|
+
*/
|
|
97
|
+
async embedLargeBatch(texts, batchSize = 32) {
|
|
98
|
+
const allEmbeddings = [];
|
|
99
|
+
for (let i = 0; i < texts.length; i += batchSize) {
|
|
100
|
+
const batch = texts.slice(i, i + batchSize);
|
|
101
|
+
const response = await this.embedBatch(batch);
|
|
102
|
+
allEmbeddings.push(...response.embeddings);
|
|
103
|
+
}
|
|
104
|
+
return allEmbeddings;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Fetch with automatic retry on failure
|
|
108
|
+
*
|
|
109
|
+
* @param url - URL to fetch
|
|
110
|
+
* @param options - Fetch options
|
|
111
|
+
* @returns Response
|
|
112
|
+
*/
|
|
113
|
+
async fetchWithRetry(url, options, retries = 0) {
|
|
114
|
+
try {
|
|
115
|
+
const controller = new AbortController();
|
|
116
|
+
const timeoutId = setTimeout(() => controller.abort(), this.timeout);
|
|
117
|
+
const response = await fetch(url, {
|
|
118
|
+
...options,
|
|
119
|
+
signal: controller.signal,
|
|
120
|
+
});
|
|
121
|
+
clearTimeout(timeoutId);
|
|
122
|
+
return response;
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
if (retries < this.maxRetries) {
|
|
126
|
+
// Wait before retrying (exponential backoff)
|
|
127
|
+
const delay = Math.pow(2, retries) * 1000;
|
|
128
|
+
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
129
|
+
return this.fetchWithRetry(url, options, retries + 1);
|
|
130
|
+
}
|
|
131
|
+
throw new Error(`Embedding service request failed after ${this.maxRetries} retries: ${error instanceof Error ? error.message : String(error)}`);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Factory function to create an embedding client
|
|
137
|
+
*
|
|
138
|
+
* @param config - Optional configuration
|
|
139
|
+
* @returns Embedding client instance
|
|
140
|
+
*/
|
|
141
|
+
export function createEmbeddingClient(config) {
|
|
142
|
+
return new EmbeddingClient(config);
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/embeddings/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Semantic Memory Layer - v3.0 Implementation
|
|
3
|
+
*
|
|
4
|
+
* SQLite knowledge graph with HippoRAG Personalized PageRank.
|
|
5
|
+
*/
|
|
6
|
+
import Database from 'better-sqlite3';
|
|
7
|
+
export interface Entity {
|
|
8
|
+
id: string;
|
|
9
|
+
name: string;
|
|
10
|
+
type: 'person' | 'project' | 'concept' | 'preference';
|
|
11
|
+
description?: string;
|
|
12
|
+
confidence: number;
|
|
13
|
+
}
|
|
14
|
+
export interface Fact {
|
|
15
|
+
id: string;
|
|
16
|
+
entity_id: string;
|
|
17
|
+
property: string;
|
|
18
|
+
value: string;
|
|
19
|
+
confidence: number;
|
|
20
|
+
valid_from?: string;
|
|
21
|
+
valid_until?: string;
|
|
22
|
+
source_conversation?: string;
|
|
23
|
+
}
|
|
24
|
+
export interface TraversalPath {
|
|
25
|
+
sourceId: string;
|
|
26
|
+
targetId: string;
|
|
27
|
+
hops: number;
|
|
28
|
+
path: string[];
|
|
29
|
+
relationType: string;
|
|
30
|
+
}
|
|
31
|
+
export interface FactChain {
|
|
32
|
+
targetId: string;
|
|
33
|
+
targetName: string;
|
|
34
|
+
intermediaries: string[];
|
|
35
|
+
totalScore: number;
|
|
36
|
+
}
|
|
37
|
+
export interface PageRankWithFactsResult {
|
|
38
|
+
entities: Array<Entity & {
|
|
39
|
+
relevanceScore: number;
|
|
40
|
+
}>;
|
|
41
|
+
facts: Fact[];
|
|
42
|
+
paths: TraversalPath[];
|
|
43
|
+
chains?: FactChain[];
|
|
44
|
+
}
|
|
45
|
+
export declare class SemanticMemoryLayer {
|
|
46
|
+
private db;
|
|
47
|
+
constructor(db: Database.Database);
|
|
48
|
+
upsertEntity(entity: Partial<Entity> & {
|
|
49
|
+
name: string;
|
|
50
|
+
type: string;
|
|
51
|
+
}): Entity;
|
|
52
|
+
getEntity(name: string): any | null;
|
|
53
|
+
upsertRelationship(rel: {
|
|
54
|
+
sourceId: string;
|
|
55
|
+
targetId: string;
|
|
56
|
+
relationType: string;
|
|
57
|
+
strength?: number;
|
|
58
|
+
}): void;
|
|
59
|
+
personalizedPageRank(entityId: string, depth?: number): any[];
|
|
60
|
+
/**
|
|
61
|
+
* Enhanced Personalized PageRank with fact retrieval for multi-hop reasoning.
|
|
62
|
+
*
|
|
63
|
+
* Returns both entities AND their associated facts along the traversal path,
|
|
64
|
+
* enabling multi-hop query answering (e.g., "What protocol does Vesper follow?"
|
|
65
|
+
* can chain Vesper -> MCP -> "Model Context Protocol").
|
|
66
|
+
*
|
|
67
|
+
* @param entityId - Starting entity ID for traversal
|
|
68
|
+
* @param depth - Maximum hops to traverse (default: 3 for multi-hop queries)
|
|
69
|
+
* @returns PageRankWithFactsResult containing entities, facts, paths, and chains
|
|
70
|
+
*/
|
|
71
|
+
personalizedPageRankWithFacts(entityId: string, depth?: number): PageRankWithFactsResult;
|
|
72
|
+
applyTemporalDecay(): number;
|
|
73
|
+
getPreferences(domain?: string): any[];
|
|
74
|
+
getByTimeRange(start?: Date, end?: Date): any[];
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=semantic-memory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semantic-memory.d.ts","sourceRoot":"","sources":["../../src/memory-layers/semantic-memory.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAEtC,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,YAAY,CAAC;IACtD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,KAAK,CAAC,MAAM,GAAG;QAAE,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrD,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC;CACtB;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,EAAE,CAAoB;gBAElB,EAAE,EAAE,QAAQ,CAAC,QAAQ;IAIjC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM;IAiC9E,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI;IAcnC,kBAAkB,CAAC,GAAG,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAuB9G,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,GAAG,GAAG,EAAE;IAmChE;;;;;;;;;;OAUG;IACH,6BAA6B,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,GAAG,uBAAuB;IAyI3F,kBAAkB,IAAI,MAAM;IAgB5B,cAAc,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,GAAG,EAAE;IAStC,cAAc,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE,IAAI,GAAG,GAAG,EAAE;CAgBhD"}
|