hippo-memory 1.22.0 → 1.23.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/README.md +2 -1
- package/dist/capture.d.ts.map +1 -1
- package/dist/capture.js +3 -2
- package/dist/capture.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +94 -22
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +10 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +1 -0
- package/dist/config.js.map +1 -1
- package/dist/embedding-provider.d.ts +76 -0
- package/dist/embedding-provider.d.ts.map +1 -0
- package/dist/embedding-provider.js +301 -0
- package/dist/embedding-provider.js.map +1 -0
- package/dist/embeddings.d.ts +1 -0
- package/dist/embeddings.d.ts.map +1 -1
- package/dist/embeddings.js +112 -55
- package/dist/embeddings.js.map +1 -1
- package/dist/search.d.ts.map +1 -1
- package/dist/search.js +31 -13
- package/dist/search.js.map +1 -1
- package/dist/src/capture.js +3 -2
- package/dist/src/capture.js.map +1 -1
- package/dist/src/cli.js +94 -22
- package/dist/src/cli.js.map +1 -1
- package/dist/src/config.js +1 -0
- package/dist/src/config.js.map +1 -1
- package/dist/src/embedding-provider.js +301 -0
- package/dist/src/embedding-provider.js.map +1 -0
- package/dist/src/embeddings.js +112 -55
- package/dist/src/embeddings.js.map +1 -1
- package/dist/src/search.js +31 -13
- package/dist/src/search.js.map +1 -1
- package/dist/src/version.js +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
- package/extensions/openclaw-plugin/package.json +1 -1
- package/openclaw.plugin.json +1 -1
- package/package.json +1 -1
package/dist/src/config.js
CHANGED
package/dist/src/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAsB,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pluggable embedding providers for Hippo.
|
|
3
|
+
*
|
|
4
|
+
* The local `@xenova/transformers` path stays the zero-DEPENDENCY DEFAULT. Opt-in
|
|
5
|
+
* API providers (OpenAI / Voyage / Cohere) let a user bring a frontier embedder
|
|
6
|
+
* (e.g. text-embedding-3-large) for frontier-class retrieval. They use the native
|
|
7
|
+
* `fetch` global (Node >= 22.5, see package.json engines — NO new dependency) and
|
|
8
|
+
* read their key from a conventional env var. The provider is selected by
|
|
9
|
+
* `config.embeddings.provider` (default `'local'`).
|
|
10
|
+
*
|
|
11
|
+
* Design contract (see docs/plans/2026-06-08-b-pluggable-embedding-provider.md):
|
|
12
|
+
* - Local provider `id` is the BARE model string, so existing stores whose DB
|
|
13
|
+
* meta `embedding_model` is `Xenova/all-MiniLM-L6-v2` see NO identity change
|
|
14
|
+
* and are NOT force-reindexed on upgrade.
|
|
15
|
+
* - API provider `id` is `${kind}:${model}`; switching to/from an API embedder
|
|
16
|
+
* (or a dimension change) flips the identity and triggers the existing
|
|
17
|
+
* reindex-on-change path.
|
|
18
|
+
* - `resolveEmbeddingProvider` NEVER throws. `isAvailable()` is provider-aware
|
|
19
|
+
* (local -> dependency installed; api -> key present). `embed()` MAY throw on
|
|
20
|
+
* a hard transport/auth failure so a reindex can abort atomically; hot paths
|
|
21
|
+
* wrap it and fall back to BM25.
|
|
22
|
+
*
|
|
23
|
+
* The exact request/response shapes for the API providers are documented from each
|
|
24
|
+
* vendor's public embeddings API; they are unit-tested here against a mocked
|
|
25
|
+
* `fetch` and are integration-verified in Workstream C (real API calls are
|
|
26
|
+
* egress-blocked in the build sandbox).
|
|
27
|
+
*/
|
|
28
|
+
import { getEmbedding, isEmbeddingAvailable, resolveEmbeddingModel, DEFAULT_EMBEDDING_MODEL, } from './embeddings.js';
|
|
29
|
+
import { loadConfig } from './config.js';
|
|
30
|
+
export const API_PROVIDER_KINDS = ['openai', 'voyage', 'cohere'];
|
|
31
|
+
const DEFAULT_API_BATCH_SIZE = 64;
|
|
32
|
+
/** Per-request timeout for API embedding calls. A provider/proxy that accepts
|
|
33
|
+
* the connection but never responds must not hang embed/recall indefinitely. */
|
|
34
|
+
const REQUEST_TIMEOUT_MS = 30_000;
|
|
35
|
+
// ---------------------------------------------------------------------------
|
|
36
|
+
// Local provider — wraps the existing zero-dep transformers.js path.
|
|
37
|
+
// ---------------------------------------------------------------------------
|
|
38
|
+
class LocalEmbeddingProvider {
|
|
39
|
+
model;
|
|
40
|
+
enabled;
|
|
41
|
+
kind = 'local';
|
|
42
|
+
constructor(model, enabled = true) {
|
|
43
|
+
this.model = model;
|
|
44
|
+
this.enabled = enabled;
|
|
45
|
+
}
|
|
46
|
+
get id() {
|
|
47
|
+
return this.model;
|
|
48
|
+
}
|
|
49
|
+
isAvailable() {
|
|
50
|
+
return this.enabled && isEmbeddingAvailable();
|
|
51
|
+
}
|
|
52
|
+
async embed(texts, role) {
|
|
53
|
+
// Sequential to preserve the historical single-pipeline behaviour and avoid
|
|
54
|
+
// contending the one cached pipeline instance with N concurrent calls.
|
|
55
|
+
const out = [];
|
|
56
|
+
for (const text of texts) {
|
|
57
|
+
out.push(await getEmbedding(text, this.model, role));
|
|
58
|
+
}
|
|
59
|
+
return out;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
const API_SHAPES = {
|
|
63
|
+
openai: {
|
|
64
|
+
keyEnv: 'OPENAI_API_KEY',
|
|
65
|
+
defaultBaseUrl: 'https://api.openai.com/v1',
|
|
66
|
+
path: 'embeddings',
|
|
67
|
+
defaultModel: 'text-embedding-3-large',
|
|
68
|
+
// OpenAI has no asymmetric query/passage input type for embeddings.
|
|
69
|
+
buildBody: (model, texts) => ({ model, input: texts }),
|
|
70
|
+
extractVectors: (json) => {
|
|
71
|
+
const data = json.data ?? [];
|
|
72
|
+
return data.map((d) => d.embedding ?? []);
|
|
73
|
+
},
|
|
74
|
+
},
|
|
75
|
+
voyage: {
|
|
76
|
+
keyEnv: 'VOYAGE_API_KEY',
|
|
77
|
+
defaultBaseUrl: 'https://api.voyageai.com/v1',
|
|
78
|
+
path: 'embeddings',
|
|
79
|
+
defaultModel: 'voyage-3',
|
|
80
|
+
buildBody: (model, texts, role) => {
|
|
81
|
+
const body = { model, input: texts };
|
|
82
|
+
if (role)
|
|
83
|
+
body.input_type = role === 'query' ? 'query' : 'document';
|
|
84
|
+
return body;
|
|
85
|
+
},
|
|
86
|
+
extractVectors: (json) => {
|
|
87
|
+
const data = json.data ?? [];
|
|
88
|
+
return data.map((d) => d.embedding ?? []);
|
|
89
|
+
},
|
|
90
|
+
},
|
|
91
|
+
cohere: {
|
|
92
|
+
keyEnv: 'COHERE_API_KEY',
|
|
93
|
+
defaultBaseUrl: 'https://api.cohere.com/v2',
|
|
94
|
+
path: 'embed',
|
|
95
|
+
defaultModel: 'embed-v4.0',
|
|
96
|
+
buildBody: (model, texts, role) => ({
|
|
97
|
+
model,
|
|
98
|
+
texts,
|
|
99
|
+
input_type: role === 'query' ? 'search_query' : 'search_document',
|
|
100
|
+
embedding_types: ['float'],
|
|
101
|
+
}),
|
|
102
|
+
extractVectors: (json) => {
|
|
103
|
+
// Cohere v2: { embeddings: { float: number[][] } }
|
|
104
|
+
const emb = json.embeddings;
|
|
105
|
+
return emb?.float ?? [];
|
|
106
|
+
},
|
|
107
|
+
},
|
|
108
|
+
};
|
|
109
|
+
/** Remove a secret substring from any string before it surfaces in an error. */
|
|
110
|
+
function redact(text, secret) {
|
|
111
|
+
if (!secret)
|
|
112
|
+
return text;
|
|
113
|
+
return text.split(secret).join('***');
|
|
114
|
+
}
|
|
115
|
+
function l2normalize(v) {
|
|
116
|
+
let norm = 0;
|
|
117
|
+
for (const x of v)
|
|
118
|
+
norm += x * x;
|
|
119
|
+
norm = Math.sqrt(norm);
|
|
120
|
+
if (norm < 1e-12)
|
|
121
|
+
return v;
|
|
122
|
+
return v.map((x) => x / norm);
|
|
123
|
+
}
|
|
124
|
+
class ApiEmbeddingProvider {
|
|
125
|
+
kind;
|
|
126
|
+
model;
|
|
127
|
+
baseUrl;
|
|
128
|
+
batchSize;
|
|
129
|
+
enabled;
|
|
130
|
+
constructor(kind, model, baseUrl, batchSize, enabled = true) {
|
|
131
|
+
this.kind = kind;
|
|
132
|
+
this.model = model;
|
|
133
|
+
this.baseUrl = baseUrl;
|
|
134
|
+
this.batchSize = batchSize;
|
|
135
|
+
this.enabled = enabled;
|
|
136
|
+
}
|
|
137
|
+
get id() {
|
|
138
|
+
return `${this.kind}:${this.model}`;
|
|
139
|
+
}
|
|
140
|
+
get keyEnv() {
|
|
141
|
+
return API_SHAPES[this.kind].keyEnv;
|
|
142
|
+
}
|
|
143
|
+
isAvailable() {
|
|
144
|
+
return this.enabled && !!process.env[this.keyEnv]?.trim();
|
|
145
|
+
}
|
|
146
|
+
async embed(texts, role) {
|
|
147
|
+
if (texts.length === 0)
|
|
148
|
+
return [];
|
|
149
|
+
const key = process.env[this.keyEnv]?.trim();
|
|
150
|
+
if (!key) {
|
|
151
|
+
// Hard, actionable failure — never includes a key value (there is none).
|
|
152
|
+
throw new Error(`Embedding provider '${this.kind}' is configured but ${this.keyEnv} is not set. ` +
|
|
153
|
+
`Export ${this.keyEnv} or set config.embeddings.provider back to 'local'.`);
|
|
154
|
+
}
|
|
155
|
+
const out = [];
|
|
156
|
+
for (let i = 0; i < texts.length; i += this.batchSize) {
|
|
157
|
+
const chunk = texts.slice(i, i + this.batchSize);
|
|
158
|
+
const vecs = await this.embedChunk(chunk, key, role);
|
|
159
|
+
for (const v of vecs)
|
|
160
|
+
out.push(v.length > 0 ? l2normalize(v) : v);
|
|
161
|
+
}
|
|
162
|
+
return out;
|
|
163
|
+
}
|
|
164
|
+
async embedChunk(chunk, key, role) {
|
|
165
|
+
const shape = API_SHAPES[this.kind];
|
|
166
|
+
const url = `${this.baseUrl.replace(/\/$/, '')}/${shape.path}`;
|
|
167
|
+
let resp;
|
|
168
|
+
try {
|
|
169
|
+
resp = await fetch(url, {
|
|
170
|
+
method: 'POST',
|
|
171
|
+
headers: {
|
|
172
|
+
'content-type': 'application/json',
|
|
173
|
+
authorization: `Bearer ${key}`,
|
|
174
|
+
},
|
|
175
|
+
body: JSON.stringify(shape.buildBody(this.model, chunk, role)),
|
|
176
|
+
signal: AbortSignal.timeout(REQUEST_TIMEOUT_MS),
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
catch (err) {
|
|
180
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
181
|
+
throw new Error(redact(`embedding request to ${this.kind} failed: ${msg}`, key));
|
|
182
|
+
}
|
|
183
|
+
if (!resp.ok) {
|
|
184
|
+
let detail = '';
|
|
185
|
+
try {
|
|
186
|
+
detail = await resp.text();
|
|
187
|
+
}
|
|
188
|
+
catch {
|
|
189
|
+
/* ignore body read error */
|
|
190
|
+
}
|
|
191
|
+
throw new Error(redact(`${this.kind} embeddings HTTP ${resp.status}: ${detail.slice(0, 300)}`, key));
|
|
192
|
+
}
|
|
193
|
+
let json;
|
|
194
|
+
try {
|
|
195
|
+
json = await resp.json();
|
|
196
|
+
}
|
|
197
|
+
catch (err) {
|
|
198
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
199
|
+
throw new Error(redact(`${this.kind} embeddings returned invalid JSON: ${msg}`, key));
|
|
200
|
+
}
|
|
201
|
+
const vectors = shape.extractVectors(json);
|
|
202
|
+
// A 200 response with the wrong number of vectors (or any empty/malformed
|
|
203
|
+
// vector) is a provider/proxy contract violation, NOT a per-item miss. Throw
|
|
204
|
+
// so a reindex aborts atomically (preserving the prior usable index) and the
|
|
205
|
+
// explicit backfill surfaces it, instead of silently saving []-padded rows.
|
|
206
|
+
if (vectors.length !== chunk.length) {
|
|
207
|
+
throw new Error(redact(`${this.kind} embeddings returned ${vectors.length} vectors for ${chunk.length} inputs`, key));
|
|
208
|
+
}
|
|
209
|
+
for (let i = 0; i < vectors.length; i++) {
|
|
210
|
+
if (!vectors[i] || vectors[i].length === 0) {
|
|
211
|
+
throw new Error(redact(`${this.kind} embeddings returned an empty vector at index ${i}`, key));
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
return vectors;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
// ---------------------------------------------------------------------------
|
|
218
|
+
// Resolution
|
|
219
|
+
// ---------------------------------------------------------------------------
|
|
220
|
+
function readEmbeddingsConfig(hippoRoot) {
|
|
221
|
+
try {
|
|
222
|
+
return loadConfig(hippoRoot).embeddings;
|
|
223
|
+
}
|
|
224
|
+
catch {
|
|
225
|
+
return {};
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
/** Validate a user-supplied API base URL: HTTPS only (or explicit localhost). */
|
|
229
|
+
function validateBaseUrl(url, fallback) {
|
|
230
|
+
const candidate = url?.trim();
|
|
231
|
+
if (!candidate)
|
|
232
|
+
return fallback;
|
|
233
|
+
let parsed;
|
|
234
|
+
try {
|
|
235
|
+
parsed = new URL(candidate);
|
|
236
|
+
}
|
|
237
|
+
catch {
|
|
238
|
+
throw new Error(`config.embeddings.apiBaseUrl is not a valid URL: ${candidate}`);
|
|
239
|
+
}
|
|
240
|
+
const isLocalhost = parsed.hostname === 'localhost' || parsed.hostname === '127.0.0.1';
|
|
241
|
+
if (parsed.protocol !== 'https:' && !isLocalhost) {
|
|
242
|
+
throw new Error(`config.embeddings.apiBaseUrl must use https (got ${parsed.protocol}//${parsed.hostname}). ` +
|
|
243
|
+
`Plaintext http is only allowed for localhost.`);
|
|
244
|
+
}
|
|
245
|
+
return candidate;
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Build the active embedding provider from config (or an explicit override).
|
|
249
|
+
* Never throws for a missing key — that surfaces via `isAvailable()` on the hot
|
|
250
|
+
* paths and as a hard error only from the explicit `hippo embed` command. The
|
|
251
|
+
* only hard throw is an invalid config (e.g. an insecure apiBaseUrl), a
|
|
252
|
+
* deliberate loud failure; hot-path callers (search) wrap this in try/catch.
|
|
253
|
+
*/
|
|
254
|
+
export function resolveEmbeddingProvider(hippoRoot, opts = {}) {
|
|
255
|
+
const cfg = readEmbeddingsConfig(hippoRoot);
|
|
256
|
+
const requested = (opts.provider ?? cfg.provider ?? 'local');
|
|
257
|
+
// An explicit embeddings.enabled=false hard-disables embedding for BOTH local
|
|
258
|
+
// and API providers — for API this prevents unwanted paid off-box calls.
|
|
259
|
+
const enabled = cfg.enabled !== false;
|
|
260
|
+
if (requested === 'local') {
|
|
261
|
+
return new LocalEmbeddingProvider(resolveEmbeddingModel(hippoRoot, opts.model), enabled);
|
|
262
|
+
}
|
|
263
|
+
if (!API_PROVIDER_KINDS.includes(requested)) {
|
|
264
|
+
// Fail loud on a typo'd provider rather than silently using local (which
|
|
265
|
+
// would reindex with the local model and clobber the intended identity).
|
|
266
|
+
throw new Error(`Unknown embeddings.provider '${requested}'. Valid values: local, ${API_PROVIDER_KINDS.filter((k) => k !== 'local').join(', ')}.`);
|
|
267
|
+
}
|
|
268
|
+
const kind = requested;
|
|
269
|
+
const shape = API_SHAPES[kind];
|
|
270
|
+
// If no API model was chosen (config left the local default in place), fall
|
|
271
|
+
// back to the provider's flagship model rather than POSTing a local model id.
|
|
272
|
+
const requestedModel = (opts.model ?? cfg.model)?.trim();
|
|
273
|
+
const model = requestedModel && requestedModel !== DEFAULT_EMBEDDING_MODEL ? requestedModel : shape.defaultModel;
|
|
274
|
+
const baseUrl = validateBaseUrl(cfg.apiBaseUrl, shape.defaultBaseUrl);
|
|
275
|
+
const batchSize = typeof cfg.batchSize === 'number' && Number.isInteger(cfg.batchSize) && cfg.batchSize > 0
|
|
276
|
+
? cfg.batchSize
|
|
277
|
+
: DEFAULT_API_BATCH_SIZE;
|
|
278
|
+
return new ApiEmbeddingProvider(kind, model, baseUrl, batchSize, enabled);
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* The reindex identity for the active provider. Use this (NOT resolveEmbeddingModel)
|
|
282
|
+
* everywhere `embeddingModelRequiresReindex` / stored-model comparisons happen.
|
|
283
|
+
*/
|
|
284
|
+
export function resolveEmbeddingIdentity(hippoRoot, opts = {}) {
|
|
285
|
+
return resolveEmbeddingProvider(hippoRoot, opts).id;
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* Provider-aware availability for a store: local -> dependency installed;
|
|
289
|
+
* api -> key present. Use at the call sites that decide whether to embed.
|
|
290
|
+
*/
|
|
291
|
+
export function isEmbeddingConfigured(hippoRoot) {
|
|
292
|
+
try {
|
|
293
|
+
return resolveEmbeddingProvider(hippoRoot).isAvailable();
|
|
294
|
+
}
|
|
295
|
+
catch {
|
|
296
|
+
// Invalid embedding config (e.g. an insecure apiBaseUrl) must not crash the
|
|
297
|
+
// best-effort ingestion guard — treat it as "not configured" and skip.
|
|
298
|
+
return false;
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
//# sourceMappingURL=embedding-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embedding-provider.js","sourceRoot":"","sources":["../../src/embedding-provider.ts"],"names":[],"mappings":"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"}
|
package/dist/src/embeddings.js
CHANGED
|
@@ -10,6 +10,7 @@ import { loadAllEntries } from './store.js';
|
|
|
10
10
|
import { openHippoDb, closeHippoDb, getMeta, setMeta } from './db.js';
|
|
11
11
|
import { initializeParticle, savePhysicsState, loadPhysicsState, resetAllPhysicsState } from './physics-state.js';
|
|
12
12
|
import { loadConfig } from './config.js';
|
|
13
|
+
import { resolveEmbeddingProvider } from './embedding-provider.js';
|
|
13
14
|
// Use createRequire for synchronous module resolution check in ESM
|
|
14
15
|
const _require = createRequire(import.meta.url);
|
|
15
16
|
// Cached availability check
|
|
@@ -17,7 +18,7 @@ let _embeddingAvailable = null;
|
|
|
17
18
|
// Lazy-loaded pipeline (expensive to initialize)
|
|
18
19
|
const _pipelineInstances = new Map();
|
|
19
20
|
const _pipelineLoading = new Map();
|
|
20
|
-
const DEFAULT_EMBEDDING_MODEL = 'Xenova/all-MiniLM-L6-v2';
|
|
21
|
+
export const DEFAULT_EMBEDDING_MODEL = 'Xenova/all-MiniLM-L6-v2';
|
|
21
22
|
const EMBEDDING_MODEL_META_KEY = 'embedding_model';
|
|
22
23
|
/**
|
|
23
24
|
* Per-model pooling dispatch for `@xenova/transformers`'s feature-extraction
|
|
@@ -189,13 +190,19 @@ export function embeddingModelRequiresReindex(hippoRoot, model, index = loadEmbe
|
|
|
189
190
|
const indexedModel = resolveIndexedEmbeddingModel(hippoRoot, index);
|
|
190
191
|
return indexedModel !== null && indexedModel !== model;
|
|
191
192
|
}
|
|
192
|
-
async function rebuildEmbeddingIndex(entries,
|
|
193
|
+
async function rebuildEmbeddingIndex(entries, provider) {
|
|
193
194
|
const rebuilt = {};
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
195
|
+
if (entries.length === 0)
|
|
196
|
+
return rebuilt;
|
|
197
|
+
const texts = entries.map((e) => `${e.content} ${e.tags.join(' ')}`.trim());
|
|
198
|
+
// provider.embed batches internally; on a hard transport/auth failure it
|
|
199
|
+
// throws, so the caller aborts WITHOUT saving a partial index (atomic
|
|
200
|
+
// reindex: the old index + stored identity are preserved).
|
|
201
|
+
const vectors = await provider.embed(texts, 'passage');
|
|
202
|
+
for (let i = 0; i < entries.length; i++) {
|
|
203
|
+
const vec = vectors[i];
|
|
204
|
+
if (vec && vec.length > 0) {
|
|
205
|
+
rebuilt[entries[i].id] = vec;
|
|
199
206
|
}
|
|
200
207
|
}
|
|
201
208
|
return rebuilt;
|
|
@@ -314,47 +321,57 @@ async function withEmbedLock(fn) {
|
|
|
314
321
|
* Embed a single memory entry and cache the result in the embedding index.
|
|
315
322
|
*/
|
|
316
323
|
export async function embedMemory(hippoRoot, entry, model) {
|
|
317
|
-
|
|
324
|
+
const provider = resolveEmbeddingProvider(hippoRoot, { model });
|
|
325
|
+
if (!provider.isAvailable())
|
|
318
326
|
return;
|
|
319
327
|
return withEmbedLock(async () => {
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
// (which is tenant-scoped) but the index itself is one per hippoRoot.
|
|
325
|
-
// Cross-tenant content equivalence is visible at the vector level.
|
|
326
|
-
// Per-tenant indices would be a larger architecture change.
|
|
327
|
-
const entries = loadAllEntries(hippoRoot);
|
|
328
|
-
const rebuiltIndex = await rebuildEmbeddingIndex(entries, effectiveModel);
|
|
329
|
-
saveEmbeddingIndex(hippoRoot, rebuiltIndex);
|
|
330
|
-
saveStoredEmbeddingModel(hippoRoot, effectiveModel);
|
|
331
|
-
resetPhysicsFromIndex(hippoRoot, entries, rebuiltIndex);
|
|
332
|
-
return;
|
|
333
|
-
}
|
|
334
|
-
const text = `${entry.content} ${entry.tags.join(' ')}`.trim();
|
|
335
|
-
const vector = await getEmbedding(text, effectiveModel, 'passage');
|
|
336
|
-
if (vector.length === 0)
|
|
337
|
-
return;
|
|
338
|
-
const index = existingIndex;
|
|
339
|
-
index[entry.id] = vector;
|
|
340
|
-
saveEmbeddingIndex(hippoRoot, index);
|
|
341
|
-
saveStoredEmbeddingModel(hippoRoot, effectiveModel);
|
|
342
|
-
// Initialize physics state for this memory
|
|
328
|
+
// embedMemory is best-effort: an embedding failure (API down / bad key / 5xx)
|
|
329
|
+
// must not reject the caller's write — `getEmbedding` historically swallowed
|
|
330
|
+
// failures and returned []. The explicit `hippo embed` / `embedAll` path is
|
|
331
|
+
// where failures surface. On any failure we leave the existing index as-is.
|
|
343
332
|
try {
|
|
344
|
-
const
|
|
333
|
+
const identity = provider.id;
|
|
334
|
+
const existingIndex = loadEmbeddingIndex(hippoRoot);
|
|
335
|
+
if (embeddingModelRequiresReindex(hippoRoot, identity, existingIndex)) {
|
|
336
|
+
// L9: host-wide rebuild. The embedding index is keyed by entry.id
|
|
337
|
+
// (which is tenant-scoped) but the index itself is one per hippoRoot.
|
|
338
|
+
// Cross-tenant content equivalence is visible at the vector level.
|
|
339
|
+
// Per-tenant indices would be a larger architecture change.
|
|
340
|
+
const entries = loadAllEntries(hippoRoot);
|
|
341
|
+
const rebuiltIndex = await rebuildEmbeddingIndex(entries, provider);
|
|
342
|
+
saveEmbeddingIndex(hippoRoot, rebuiltIndex);
|
|
343
|
+
saveStoredEmbeddingModel(hippoRoot, identity);
|
|
344
|
+
resetPhysicsFromIndex(hippoRoot, entries, rebuiltIndex);
|
|
345
|
+
return;
|
|
346
|
+
}
|
|
347
|
+
const text = `${entry.content} ${entry.tags.join(' ')}`.trim();
|
|
348
|
+
const [vector] = await provider.embed([text], 'passage');
|
|
349
|
+
if (!vector || vector.length === 0)
|
|
350
|
+
return;
|
|
351
|
+
const index = existingIndex;
|
|
352
|
+
index[entry.id] = vector;
|
|
353
|
+
saveEmbeddingIndex(hippoRoot, index);
|
|
354
|
+
saveStoredEmbeddingModel(hippoRoot, identity);
|
|
355
|
+
// Initialize physics state for this memory
|
|
345
356
|
try {
|
|
346
|
-
const
|
|
347
|
-
|
|
348
|
-
const
|
|
349
|
-
|
|
357
|
+
const db = openHippoDb(hippoRoot);
|
|
358
|
+
try {
|
|
359
|
+
const existing = loadPhysicsState(db, [entry.id]);
|
|
360
|
+
if (!existing.has(entry.id)) {
|
|
361
|
+
const particle = initializeParticle(entry, vector);
|
|
362
|
+
savePhysicsState(db, [particle]);
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
finally {
|
|
366
|
+
closeHippoDb(db);
|
|
350
367
|
}
|
|
351
368
|
}
|
|
352
|
-
|
|
353
|
-
|
|
369
|
+
catch {
|
|
370
|
+
// Physics init is best-effort — don't break embedding
|
|
354
371
|
}
|
|
355
372
|
}
|
|
356
373
|
catch {
|
|
357
|
-
//
|
|
374
|
+
// Provider failure (API down / bad key). Best-effort: leave the index as-is.
|
|
358
375
|
}
|
|
359
376
|
});
|
|
360
377
|
}
|
|
@@ -364,23 +381,35 @@ export async function embedMemory(hippoRoot, entry, model) {
|
|
|
364
381
|
* Returns the count of newly embedded entries.
|
|
365
382
|
*/
|
|
366
383
|
export async function embedAll(hippoRoot, model) {
|
|
367
|
-
|
|
384
|
+
const provider = resolveEmbeddingProvider(hippoRoot, { model });
|
|
385
|
+
if (!provider.isAvailable()) {
|
|
386
|
+
// A configured (non-disabled) API provider with a missing key is a
|
|
387
|
+
// misconfiguration, not a no-op: surface it so programmatic callers of the
|
|
388
|
+
// exported embedAll() learn nothing was written. Local-not-installed and an
|
|
389
|
+
// explicit enabled=false stay silent no-ops (best-effort / intentional).
|
|
390
|
+
const cfg = loadConfig(hippoRoot).embeddings;
|
|
391
|
+
if (provider.kind !== 'local' &&
|
|
392
|
+
cfg.enabled !== false &&
|
|
393
|
+
provider.keyEnv &&
|
|
394
|
+
!process.env[provider.keyEnv]?.trim()) {
|
|
395
|
+
throw new Error(`Embedding provider '${provider.kind}' is configured but ${provider.keyEnv} is not set.`);
|
|
396
|
+
}
|
|
368
397
|
return 0;
|
|
398
|
+
}
|
|
369
399
|
return withEmbedLock(async () => {
|
|
370
|
-
const
|
|
400
|
+
const identity = provider.id;
|
|
371
401
|
// L9: host-wide by design. embedAll backfills vectors for all tenants'
|
|
372
402
|
// entries into the per-host embedding index. Per-tenant filtering would
|
|
373
403
|
// produce partial indices and break recall.
|
|
374
404
|
const entries = loadAllEntries(hippoRoot);
|
|
375
405
|
const index = loadEmbeddingIndex(hippoRoot);
|
|
376
|
-
if (embeddingModelRequiresReindex(hippoRoot,
|
|
377
|
-
const rebuiltIndex = await rebuildEmbeddingIndex(entries,
|
|
406
|
+
if (embeddingModelRequiresReindex(hippoRoot, identity, index)) {
|
|
407
|
+
const rebuiltIndex = await rebuildEmbeddingIndex(entries, provider);
|
|
378
408
|
saveEmbeddingIndex(hippoRoot, rebuiltIndex);
|
|
379
|
-
saveStoredEmbeddingModel(hippoRoot,
|
|
409
|
+
saveStoredEmbeddingModel(hippoRoot, identity);
|
|
380
410
|
resetPhysicsFromIndex(hippoRoot, entries, rebuiltIndex);
|
|
381
411
|
return Object.keys(rebuiltIndex).length;
|
|
382
412
|
}
|
|
383
|
-
let count = 0;
|
|
384
413
|
let dirty = false;
|
|
385
414
|
// Prune orphaned embeddings for deleted memories
|
|
386
415
|
const activeIds = new Set(entries.map((e) => e.id));
|
|
@@ -390,21 +419,49 @@ export async function embedAll(hippoRoot, model) {
|
|
|
390
419
|
dirty = true;
|
|
391
420
|
}
|
|
392
421
|
}
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
422
|
+
// Embed entries without a cached vector in save-checkpointed chunks.
|
|
423
|
+
// provider.embed batches internally (one HTTP request per batchSize for API
|
|
424
|
+
// providers; sequential for local). A `[]` row means that single item could
|
|
425
|
+
// not be embedded and is left for a later run (resumable). On a hard provider
|
|
426
|
+
// failure mid-backfill we persist the chunks already embedded this run rather
|
|
427
|
+
// than discarding paid progress, then stop and resume on the next run.
|
|
428
|
+
const pending = entries.filter((e) => !index[e.id]);
|
|
429
|
+
let count = 0;
|
|
430
|
+
let backfillError = null;
|
|
431
|
+
const SAVE_CHUNK = 64;
|
|
432
|
+
for (let i = 0; i < pending.length; i += SAVE_CHUNK) {
|
|
433
|
+
const chunk = pending.slice(i, i + SAVE_CHUNK);
|
|
434
|
+
let vectors;
|
|
435
|
+
try {
|
|
436
|
+
vectors = await provider.embed(chunk.map((e) => `${e.content} ${e.tags.join(' ')}`.trim()), 'passage');
|
|
437
|
+
}
|
|
438
|
+
catch (err) {
|
|
439
|
+
// Preserve the chunks already saved this run, then surface the failure
|
|
440
|
+
// below so the explicit `hippo embed` path never reports a false success.
|
|
441
|
+
backfillError = err;
|
|
442
|
+
break;
|
|
443
|
+
}
|
|
444
|
+
let chunkDirty = false;
|
|
445
|
+
for (let j = 0; j < chunk.length; j++) {
|
|
446
|
+
const vec = vectors[j];
|
|
447
|
+
if (vec && vec.length > 0) {
|
|
448
|
+
index[chunk[j].id] = vec;
|
|
449
|
+
count++;
|
|
450
|
+
dirty = true;
|
|
451
|
+
chunkDirty = true;
|
|
452
|
+
}
|
|
402
453
|
}
|
|
454
|
+
if (chunkDirty)
|
|
455
|
+
saveEmbeddingIndex(hippoRoot, index);
|
|
403
456
|
}
|
|
404
457
|
if (dirty) {
|
|
405
458
|
saveEmbeddingIndex(hippoRoot, index);
|
|
406
459
|
}
|
|
407
|
-
saveStoredEmbeddingModel(hippoRoot,
|
|
460
|
+
saveStoredEmbeddingModel(hippoRoot, identity);
|
|
461
|
+
// Partial progress is now persisted; surface a hard backfill failure so the
|
|
462
|
+
// explicit embed path reports it (best-effort callers go via embedMemory).
|
|
463
|
+
if (backfillError)
|
|
464
|
+
throw backfillError;
|
|
408
465
|
return count;
|
|
409
466
|
});
|
|
410
467
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embeddings.js","sourceRoot":"","sources":["../../src/embeddings.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"embeddings.js","sourceRoot":"","sources":["../../src/embeddings.ts"],"names":[],"mappings":"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"}
|