@mneme-ai/embeddings 0.22.0 → 0.22.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/enrich.d.ts +59 -0
- package/dist/enrich.d.ts.map +1 -1
- package/dist/enrich.js +182 -0
- package/dist/enrich.js.map +1 -1
- package/dist/enrich.test.d.ts +2 -0
- package/dist/enrich.test.d.ts.map +1 -0
- package/dist/enrich.test.js +120 -0
- package/dist/enrich.test.js.map +1 -0
- package/package.json +2 -2
package/dist/enrich.d.ts
CHANGED
|
@@ -111,5 +111,64 @@ export declare class NoEnricherAvailableError extends Error {
|
|
|
111
111
|
}
|
|
112
112
|
/** Catalog exposed for `mneme setup-free` and CLI hints. */
|
|
113
113
|
export declare function listProviders(): typeof PROVIDERS;
|
|
114
|
+
/**
|
|
115
|
+
* Classify a thrown error into a category that determines retry behavior.
|
|
116
|
+
* Used by ResilientEnricher to set per-provider cooldown durations: a 429
|
|
117
|
+
* (quota exhausted) merits a longer cooldown than a transient 503.
|
|
118
|
+
*/
|
|
119
|
+
export type FailureKind = "timeout" | "network" | "rate-limit" | "server" | "auth" | "model-missing" | "empty" | "unknown";
|
|
120
|
+
export declare function classifyFailure(err: unknown): FailureKind;
|
|
121
|
+
interface ProviderHealth {
|
|
122
|
+
lastFailure?: {
|
|
123
|
+
kind: FailureKind;
|
|
124
|
+
at: number;
|
|
125
|
+
reason: string;
|
|
126
|
+
};
|
|
127
|
+
lastSuccess?: number;
|
|
128
|
+
cooldownUntil?: number;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Self-healing enricher. Wraps an ordered list of providers and:
|
|
132
|
+
*
|
|
133
|
+
* 1. Tracks per-provider health state (lastSuccess / lastFailure / cooldownUntil)
|
|
134
|
+
* 2. Skips providers in cooldown — different durations per failure type
|
|
135
|
+
* 3. On call: tries providers in order, returns first success
|
|
136
|
+
* 4. On every failure: classifies + sets cooldown so the next call avoids
|
|
137
|
+
* the bad provider without thrashing
|
|
138
|
+
* 5. Surfaces switches via onSwitch() so the CLI can show "Ollama timed
|
|
139
|
+
* out (cooldown 30s), trying Groq..."
|
|
140
|
+
*
|
|
141
|
+
* The key UX win: a flaky cloud call NEVER kills `mneme ask`. The user
|
|
142
|
+
* always gets an answer (or a final extractive fallback) — Mneme silently
|
|
143
|
+
* adapts.
|
|
144
|
+
*/
|
|
145
|
+
export declare class ResilientEnricher implements EnricherProvider {
|
|
146
|
+
readonly name: string;
|
|
147
|
+
private readonly chain;
|
|
148
|
+
private readonly health;
|
|
149
|
+
private readonly onSwitch?;
|
|
150
|
+
constructor(chain: EnricherProvider[], onSwitch?: (event: {
|
|
151
|
+
from: string;
|
|
152
|
+
to: string;
|
|
153
|
+
reason: string;
|
|
154
|
+
kind: FailureKind;
|
|
155
|
+
}) => void);
|
|
156
|
+
/** Inspect health for testing / debugging. */
|
|
157
|
+
inspectHealth(): Record<string, ProviderHealth>;
|
|
158
|
+
enrich(input: EnrichInput): Promise<EnrichResult>;
|
|
159
|
+
}
|
|
160
|
+
export declare class AllProvidersFailedError extends Error {
|
|
161
|
+
constructor(msg: string);
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Build the FULL ladder of enrichers available to this user, in
|
|
165
|
+
* preference order. Used by callers that want runtime fallback (e.g.
|
|
166
|
+
* `mneme ask`) — try Ollama first, fall back to Groq, fall back to
|
|
167
|
+
* OpenRouter, etc., on EVERY call rather than just at startup.
|
|
168
|
+
*
|
|
169
|
+
* Returns [] if the user has nothing configured. Caller decides what
|
|
170
|
+
* to do (typically: degrade to extractive answer).
|
|
171
|
+
*/
|
|
172
|
+
export declare function resolveAllEnrichers(opts?: ResolveEnricherOptions): Promise<EnricherProvider[]>;
|
|
114
173
|
export {};
|
|
115
174
|
//# sourceMappingURL=enrich.d.ts.map
|
package/dist/enrich.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enrich.d.ts","sourceRoot":"","sources":["../src/enrich.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"enrich.d.ts","sourceRoot":"","sources":["../src/enrich.ts"],"names":[],"mappings":"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"}
|
package/dist/enrich.js
CHANGED
|
@@ -252,4 +252,186 @@ export class NoEnricherAvailableError extends Error {
|
|
|
252
252
|
export function listProviders() {
|
|
253
253
|
return PROVIDERS;
|
|
254
254
|
}
|
|
255
|
+
export function classifyFailure(err) {
|
|
256
|
+
const msg = err?.message ?? String(err);
|
|
257
|
+
if (/no\s+such\s+model|model.+(not\s+found|not\s+pulled)|404/i.test(msg))
|
|
258
|
+
return "model-missing";
|
|
259
|
+
if (/401|403|invalid.*key|unauthor|forbidden/i.test(msg))
|
|
260
|
+
return "auth";
|
|
261
|
+
if (/429|rate.?limit|quota|too\s+many/i.test(msg))
|
|
262
|
+
return "rate-limit";
|
|
263
|
+
if (/5\d\d|server\s+error|unavailable|bad\s+gateway/i.test(msg))
|
|
264
|
+
return "server";
|
|
265
|
+
if (/timeout|aborted|ETIMEDOUT/i.test(msg))
|
|
266
|
+
return "timeout";
|
|
267
|
+
if (/ECONNREFUSED|ENOTFOUND|EAI_AGAIN|fetch\s+failed|socket\s+hang/i.test(msg))
|
|
268
|
+
return "network";
|
|
269
|
+
return "unknown";
|
|
270
|
+
}
|
|
271
|
+
/** Cooldown in ms per failure kind. Tuned so a flaky provider self-heals
|
|
272
|
+
* without thrashing, but a permanently-broken one is skipped for hours. */
|
|
273
|
+
const COOLDOWN_MS = {
|
|
274
|
+
timeout: 30_000,
|
|
275
|
+
network: 30_000,
|
|
276
|
+
"rate-limit": 5 * 60_000,
|
|
277
|
+
server: 60_000,
|
|
278
|
+
auth: 60 * 60_000, // 1 hr — auth issues require user fix
|
|
279
|
+
"model-missing": 60 * 60_000,
|
|
280
|
+
empty: 5_000,
|
|
281
|
+
unknown: 30_000,
|
|
282
|
+
};
|
|
283
|
+
/**
|
|
284
|
+
* Self-healing enricher. Wraps an ordered list of providers and:
|
|
285
|
+
*
|
|
286
|
+
* 1. Tracks per-provider health state (lastSuccess / lastFailure / cooldownUntil)
|
|
287
|
+
* 2. Skips providers in cooldown — different durations per failure type
|
|
288
|
+
* 3. On call: tries providers in order, returns first success
|
|
289
|
+
* 4. On every failure: classifies + sets cooldown so the next call avoids
|
|
290
|
+
* the bad provider without thrashing
|
|
291
|
+
* 5. Surfaces switches via onSwitch() so the CLI can show "Ollama timed
|
|
292
|
+
* out (cooldown 30s), trying Groq..."
|
|
293
|
+
*
|
|
294
|
+
* The key UX win: a flaky cloud call NEVER kills `mneme ask`. The user
|
|
295
|
+
* always gets an answer (or a final extractive fallback) — Mneme silently
|
|
296
|
+
* adapts.
|
|
297
|
+
*/
|
|
298
|
+
export class ResilientEnricher {
|
|
299
|
+
name;
|
|
300
|
+
chain;
|
|
301
|
+
health = new Map();
|
|
302
|
+
onSwitch;
|
|
303
|
+
constructor(chain, onSwitch) {
|
|
304
|
+
if (chain.length === 0)
|
|
305
|
+
throw new Error("ResilientEnricher requires at least one provider");
|
|
306
|
+
this.chain = chain;
|
|
307
|
+
this.onSwitch = onSwitch;
|
|
308
|
+
this.name = `resilient:[${chain.map((p) => p.name).join(", ")}]`;
|
|
309
|
+
}
|
|
310
|
+
/** Inspect health for testing / debugging. */
|
|
311
|
+
inspectHealth() {
|
|
312
|
+
return Object.fromEntries(this.health);
|
|
313
|
+
}
|
|
314
|
+
async enrich(input) {
|
|
315
|
+
const now = Date.now();
|
|
316
|
+
const errors = [];
|
|
317
|
+
let lastTried = -1;
|
|
318
|
+
for (let i = 0; i < this.chain.length; i++) {
|
|
319
|
+
const p = this.chain[i];
|
|
320
|
+
const h = this.health.get(p.name) ?? {};
|
|
321
|
+
// Skip if in cooldown
|
|
322
|
+
if (h.cooldownUntil && h.cooldownUntil > now) {
|
|
323
|
+
errors.push({
|
|
324
|
+
name: p.name,
|
|
325
|
+
kind: h.lastFailure?.kind ?? "unknown",
|
|
326
|
+
reason: `in cooldown for ${Math.ceil((h.cooldownUntil - now) / 1000)}s (${h.lastFailure?.reason ?? "?"})`,
|
|
327
|
+
});
|
|
328
|
+
continue;
|
|
329
|
+
}
|
|
330
|
+
// Notify CLI if we're switching
|
|
331
|
+
if (lastTried >= 0 && this.onSwitch) {
|
|
332
|
+
const prev = errors[errors.length - 1];
|
|
333
|
+
this.onSwitch({ from: this.chain[lastTried].name, to: p.name, reason: prev.reason, kind: prev.kind });
|
|
334
|
+
}
|
|
335
|
+
lastTried = i;
|
|
336
|
+
try {
|
|
337
|
+
const result = await p.enrich(input);
|
|
338
|
+
if (!result.text || result.text.trim().length === 0) {
|
|
339
|
+
// Empty answer = soft failure → short cooldown, try next
|
|
340
|
+
this.health.set(p.name, {
|
|
341
|
+
...h,
|
|
342
|
+
lastFailure: { kind: "empty", at: now, reason: "empty answer" },
|
|
343
|
+
cooldownUntil: now + COOLDOWN_MS.empty,
|
|
344
|
+
});
|
|
345
|
+
errors.push({ name: p.name, kind: "empty", reason: "empty answer" });
|
|
346
|
+
continue;
|
|
347
|
+
}
|
|
348
|
+
// Success — clear cooldown, record timestamp
|
|
349
|
+
this.health.set(p.name, { ...h, lastSuccess: now, cooldownUntil: undefined });
|
|
350
|
+
return result;
|
|
351
|
+
}
|
|
352
|
+
catch (err) {
|
|
353
|
+
const kind = classifyFailure(err);
|
|
354
|
+
const msg = err.message ?? String(err);
|
|
355
|
+
this.health.set(p.name, {
|
|
356
|
+
...h,
|
|
357
|
+
lastFailure: { kind, at: now, reason: msg.slice(0, 200) },
|
|
358
|
+
cooldownUntil: now + COOLDOWN_MS[kind],
|
|
359
|
+
});
|
|
360
|
+
errors.push({ name: p.name, kind, reason: msg.slice(0, 120) });
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
// Every provider failed (or all in cooldown). Throw a descriptive error
|
|
364
|
+
// so the caller can fall back to extractive synthesis.
|
|
365
|
+
const summary = errors
|
|
366
|
+
.map((e) => ` • ${e.name} (${e.kind}): ${e.reason}`)
|
|
367
|
+
.join("\n");
|
|
368
|
+
throw new AllProvidersFailedError(`All ${this.chain.length} provider(s) failed or in cooldown:\n${summary}\n` +
|
|
369
|
+
`→ Run \`mneme setup-free\` if no providers are configured.`);
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
export class AllProvidersFailedError extends Error {
|
|
373
|
+
constructor(msg) {
|
|
374
|
+
super(msg);
|
|
375
|
+
this.name = "AllProvidersFailedError";
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
/**
|
|
379
|
+
* Build the FULL ladder of enrichers available to this user, in
|
|
380
|
+
* preference order. Used by callers that want runtime fallback (e.g.
|
|
381
|
+
* `mneme ask`) — try Ollama first, fall back to Groq, fall back to
|
|
382
|
+
* OpenRouter, etc., on EVERY call rather than just at startup.
|
|
383
|
+
*
|
|
384
|
+
* Returns [] if the user has nothing configured. Caller decides what
|
|
385
|
+
* to do (typically: degrade to extractive answer).
|
|
386
|
+
*/
|
|
387
|
+
export async function resolveAllEnrichers(opts = {}) {
|
|
388
|
+
const out = [];
|
|
389
|
+
// 1. Local Ollama — only add if reachable, AND auto-pick the first
|
|
390
|
+
// available chat model so we don't pass a wrong/embedder name.
|
|
391
|
+
const ollama = new OllamaEnricher({ model: opts.model, baseUrl: opts.baseUrl });
|
|
392
|
+
if (await ollama.ping()) {
|
|
393
|
+
const chatModel = opts.model ?? (await pickOllamaChatModel(ollama));
|
|
394
|
+
if (chatModel) {
|
|
395
|
+
out.push(new OllamaEnricher({ model: chatModel, baseUrl: opts.baseUrl }));
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
// 2. Free-tier cloud providers (env-var detection)
|
|
399
|
+
for (const cfg of PROVIDERS) {
|
|
400
|
+
const key = process.env[cfg.envKey];
|
|
401
|
+
if (key) {
|
|
402
|
+
out.push(new OpenAIEnricher({
|
|
403
|
+
apiKey: key,
|
|
404
|
+
model: opts.model ?? cfg.defaultModel,
|
|
405
|
+
baseUrl: opts.baseUrl ?? cfg.baseUrl,
|
|
406
|
+
}));
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
return out;
|
|
410
|
+
}
|
|
411
|
+
/** Probe Ollama's installed models and pick the first viable chat model.
|
|
412
|
+
* Skips embedders (nomic-embed-*, bge-*, e5-*, minilm-*). */
|
|
413
|
+
async function pickOllamaChatModel(probe) {
|
|
414
|
+
try {
|
|
415
|
+
const res = await fetch(`${probe.baseUrl}/api/tags`, {
|
|
416
|
+
signal: AbortSignal.timeout(2000),
|
|
417
|
+
});
|
|
418
|
+
if (!res.ok)
|
|
419
|
+
return undefined;
|
|
420
|
+
const data = (await res.json());
|
|
421
|
+
const names = (data.models ?? []).map((m) => m.name);
|
|
422
|
+
// Filter out embedding-only models that would crash chat API
|
|
423
|
+
const chatModels = names.filter((n) => !/^(nomic-embed|bge-|e5-|all-minilm|paraphrase-|gte-|jina-)/i.test(n));
|
|
424
|
+
// Prefer modern small models in this order
|
|
425
|
+
const preferred = ["qwen2.5:3b", "gemma2:2b", "llama3.2:1b", "llama3.2:3b", "qwen2.5:7b"];
|
|
426
|
+
for (const want of preferred) {
|
|
427
|
+
const hit = chatModels.find((n) => n === want || n.startsWith(want.split(":")[0] + ":"));
|
|
428
|
+
if (hit)
|
|
429
|
+
return hit;
|
|
430
|
+
}
|
|
431
|
+
return chatModels[0];
|
|
432
|
+
}
|
|
433
|
+
catch {
|
|
434
|
+
return undefined;
|
|
435
|
+
}
|
|
436
|
+
}
|
|
255
437
|
//# sourceMappingURL=enrich.js.map
|
package/dist/enrich.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enrich.js","sourceRoot":"","sources":["../src/enrich.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAkCH,MAAM,oBAAoB,GAAG,aAAa,CAAC;AAC3C,4EAA4E;AAC5E,sFAAsF;AACtF,MAAM,kBAAkB,GAAG,wBAAwB,CAAC;AAEpD,MAAM,OAAO,cAAc;IAChB,IAAI,CAAS;IACL,OAAO,CAAS;IAChB,KAAK,CAAS;IACd,SAAS,CAAS;IAEnC,YAAY,OAA8B,EAAE;QAC1C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,oBAAoB,CAAC;QAChD,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,kBAAkB,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACpE,yEAAyE;QACzE,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,8BAA8B,EAAE,oBAAoB,CAAC,CAAC;QACjF,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,MAAM,CAAC;QAC1C,IAAI,CAAC,IAAI,GAAG,UAAU,IAAI,CAAC,KAAK,EAAE,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAkB;QAC7B,MAAM,IAAI,GAAG,IAAI,eAAe,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7D,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,WAAW,EAAE;gBAClD,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,QAAQ,EAAE;wBACR,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,MAAM,EAAE;wBACzC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE;qBACtC;oBACD,MAAM,EAAE,KAAK;oBACb,OAAO,EAAE;wBACP,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,GAAG;wBACrC,WAAW,EAAE,KAAK,CAAC,SAAS,IAAI,GAAG;qBACpC;iBACF,CAAC;gBACF,MAAM,EAAE,IAAI,CAAC,MAAM;aACpB,CAAC,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CAAC,yBAAyB,GAAG,CAAC,MAAM,MAAM,MAAM,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC/E,CAAC;YACD,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAI7B,CAAC;YACF,OAAO;gBACL,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE;gBACzC,MAAM,EAAE,IAAI,CAAC,IAAI;gBACjB,KAAK,EAAE;oBACL,YAAY,EAAE,IAAI,CAAC,iBAAiB;oBACpC,gBAAgB,EAAE,IAAI,CAAC,UAAU;iBAClC;aACF,CAAC;QACJ,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,WAAW,CAAC,CAAC;YACpD,OAAO,GAAG,CAAC,EAAE,CAAC;QAChB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;CACF;AAWD,MAAM,oBAAoB,GAAG,aAAa,CAAC;AAC3C,MAAM,kBAAkB,GAAG,2BAA2B,CAAC;AAEvD,MAAM,OAAO,cAAc;IAChB,IAAI,CAAS;IACL,MAAM,CAAS;IACf,KAAK,CAAS;IACd,OAAO,CAAS;IAChB,SAAS,CAAS;IAEnC,YAAY,IAA2B;QACrC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,oBAAoB,CAAC;QAChD,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,kBAAkB,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACvE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,MAAM,CAAC;QAC1C,IAAI,CAAC,IAAI,GAAG,UAAU,IAAI,CAAC,KAAK,EAAE,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAkB;QAC7B,MAAM,IAAI,GAAG,IAAI,eAAe,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7D,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,mBAAmB,EAAE;gBAC1D,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;iBACvC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,QAAQ,EAAE;wBACR,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,MAAM,EAAE;wBACzC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE;qBACtC;oBACD,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,GAAG;oBACrC,UAAU,EAAE,KAAK,CAAC,SAAS,IAAI,GAAG;iBACnC,CAAC;gBACF,MAAM,EAAE,IAAI,CAAC,MAAM;aACpB,CAAC,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CAAC,yBAAyB,GAAG,CAAC,MAAM,MAAM,MAAM,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC/E,CAAC;YACD,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAG7B,CAAC;YACF,OAAO;gBACL,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE;gBACvD,MAAM,EAAE,IAAI,CAAC,IAAI;gBACjB,KAAK,EAAE;oBACL,YAAY,EAAE,IAAI,CAAC,KAAK,EAAE,aAAa;oBACvC,gBAAgB,EAAE,IAAI,CAAC,KAAK,EAAE,iBAAiB;iBAChD;aACF,CAAC;QACJ,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;CACF;AAiCD,MAAM,SAAS,GAAoB;IACjC;QACE,EAAE,EAAE,MAAM;QACV,MAAM,EAAE,cAAc;QACtB,OAAO,EAAE,gCAAgC;QACzC,YAAY,EAAE,yBAAyB;QACvC,UAAU,EAAE;YACV,yBAAyB;YACzB,cAAc;YACd,cAAc;YACd,sBAAsB;SACvB;QACD,QAAQ,EAAE,IAAI;QACd,SAAS,EAAE,+BAA+B;KAC3C;IACD;QACE,EAAE,EAAE,UAAU;QACd,MAAM,EAAE,kBAAkB;QAC1B,OAAO,EAAE,6BAA6B;QACtC,YAAY,EAAE,yCAAyC;QACvD,UAAU,EAAE;YACV,yCAAyC;YACzC,iCAAiC;YACjC,sBAAsB;SACvB;QACD,QAAQ,EAAE,IAAI;QACd,SAAS,EAAE,4CAA4C;KACxD;IACD;QACE,EAAE,EAAE,YAAY;QAChB,MAAM,EAAE,oBAAoB;QAC5B,OAAO,EAAE,8BAA8B;QACvC,YAAY,EAAE,wCAAwC;QACtD,UAAU,EAAE;YACV,wCAAwC;YACxC,iCAAiC;YACjC,2BAA2B;YAC3B,mBAAmB;SACpB;QACD,QAAQ,EAAE,IAAI;QACd,SAAS,EAAE,4BAA4B;KACxC;IACD;QACE,EAAE,EAAE,QAAQ;QACZ,MAAM,EAAE,gBAAgB;QACxB,OAAO,EAAE,2BAA2B;QACpC,YAAY,EAAE,aAAa;QAC3B,UAAU,EAAE,EAAE,EAAE,2BAA2B;QAC3C,QAAQ,EAAE,KAAK;QACf,SAAS,EAAE,sCAAsC;KAClD;CACF,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAwD;IAC1F,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,kDAAkD,EAAE;IAC/F,EAAE,IAAI,EAAE,WAAW,EAAG,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,+BAA+B,EAAE;IAC5E,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,oCAAoC,EAAE;IAClF,EAAE,IAAI,EAAE,YAAY,EAAG,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,oCAAoC,EAAE;IAClF,EAAE,IAAI,EAAE,WAAW,EAAI,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,gCAAgC,EAAE;CAC/E,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,OAA+B,EAAE;IAEjC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC;IAEzC,iBAAiB;IACjB,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QAChF,IAAI,MAAM,MAAM,CAAC,IAAI,EAAE;YAAE,OAAO,MAAM,CAAC;QACvC,MAAM,IAAI,KAAK,CACb,0BAA0B;YACxB,CAAC,IAAI,CAAC,OAAO,IAAI,wBAAwB,CAAC;YAC1C,6EAA6E,CAChF,CAAC;IACJ,CAAC;IACD,IAAI,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,UAAU,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;QACzG,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAE,CAAC;QACtD,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACnD,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CACb,MAAM,QAAQ,mBAAmB,GAAG,CAAC,MAAM,uBAAuB;gBAChE,wBAAwB,GAAG,CAAC,SAAS,EAAE,CAC1C,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,cAAc,CAAC;YACxB,MAAM,EAAE,GAAG;YACX,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC,YAAY;YACrC,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,GAAG,CAAC,OAAO;SACrC,CAAC,CAAC;IACL,CAAC;IAED,4EAA4E;IAC5E,gFAAgF;IAChF,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IAChF,IAAI,MAAM,MAAM,CAAC,IAAI,EAAE;QAAE,OAAO,MAAM,CAAC;IAEvC,iCAAiC;IACjC,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAC5B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,GAAG,EAAE,CAAC;YACR,OAAO,IAAI,cAAc,CAAC;gBACxB,MAAM,EAAE,GAAG;gBACX,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC,YAAY;gBACrC,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,GAAG,CAAC,OAAO;aACrC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,MAAM,IAAI,wBAAwB,EAAE,CAAC;AACvC,CAAC;AAED;;;;GAIG;AACH,MAAM,OAAO,wBAAyB,SAAQ,KAAK;IACjD;QACE,KAAK,CACH,4CAA4C;YAC1C,6DAA6D;YAC7D,wHAAwH;YACxH,2DAA2D,CAC9D,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC;IACzC,CAAC;CACF;AAED,4DAA4D;AAC5D,MAAM,UAAU,aAAa;IAC3B,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
1
|
+
{"version":3,"file":"enrich.js","sourceRoot":"","sources":["../src/enrich.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enrich.test.d.ts","sourceRoot":"","sources":["../src/enrich.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for ResilientEnricher's self-healing fallback chain.
|
|
3
|
+
*
|
|
4
|
+
* Strategy: mock providers that throw classified errors and verify:
|
|
5
|
+
* - chain order is honored
|
|
6
|
+
* - successful provider returns immediately
|
|
7
|
+
* - failures cool the provider down for the right duration
|
|
8
|
+
* - subsequent calls skip cooled-down providers
|
|
9
|
+
* - all-fail throws AllProvidersFailedError (so caller can degrade)
|
|
10
|
+
* - empty answers count as soft failures + try the next provider
|
|
11
|
+
*/
|
|
12
|
+
import { describe, it, expect, vi } from "vitest";
|
|
13
|
+
import { ResilientEnricher, AllProvidersFailedError, classifyFailure, } from "./enrich.js";
|
|
14
|
+
function mockProvider(name, responses) {
|
|
15
|
+
let i = 0;
|
|
16
|
+
return {
|
|
17
|
+
name,
|
|
18
|
+
enrich: vi.fn().mockImplementation(async () => {
|
|
19
|
+
const r = responses[Math.min(i++, responses.length - 1)];
|
|
20
|
+
if (r instanceof Error)
|
|
21
|
+
throw r;
|
|
22
|
+
return { text: r, source: name };
|
|
23
|
+
}),
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
const INPUT = { system: "s", user: "u" };
|
|
27
|
+
describe("classifyFailure — error category detection", () => {
|
|
28
|
+
it("recognizes rate-limit phrases as rate-limit (long cooldown)", () => {
|
|
29
|
+
expect(classifyFailure(new Error("HTTP 429: too many requests"))).toBe("rate-limit");
|
|
30
|
+
expect(classifyFailure(new Error("daily quota exhausted"))).toBe("rate-limit");
|
|
31
|
+
});
|
|
32
|
+
it("recognizes 5xx as server (medium cooldown)", () => {
|
|
33
|
+
expect(classifyFailure(new Error("503 service unavailable"))).toBe("server");
|
|
34
|
+
expect(classifyFailure(new Error("Internal server error"))).toBe("server");
|
|
35
|
+
});
|
|
36
|
+
it("recognizes auth failures (long cooldown — needs user fix)", () => {
|
|
37
|
+
expect(classifyFailure(new Error("401 invalid API key"))).toBe("auth");
|
|
38
|
+
expect(classifyFailure(new Error("Forbidden"))).toBe("auth");
|
|
39
|
+
});
|
|
40
|
+
it("recognizes model-missing (skip until next env change)", () => {
|
|
41
|
+
expect(classifyFailure(new Error("model not found"))).toBe("model-missing");
|
|
42
|
+
expect(classifyFailure(new Error("no such model: qwen2.5"))).toBe("model-missing");
|
|
43
|
+
});
|
|
44
|
+
it("recognizes timeout / network errors", () => {
|
|
45
|
+
expect(classifyFailure(new Error("aborted"))).toBe("timeout");
|
|
46
|
+
expect(classifyFailure(new Error("ECONNREFUSED"))).toBe("network");
|
|
47
|
+
expect(classifyFailure(new Error("fetch failed"))).toBe("network");
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
describe("ResilientEnricher — fallback chain behavior", () => {
|
|
51
|
+
it("returns immediately when first provider succeeds", async () => {
|
|
52
|
+
const a = mockProvider("a", ["A answer"]);
|
|
53
|
+
const b = mockProvider("b", ["B answer"]);
|
|
54
|
+
const r = new ResilientEnricher([a, b]);
|
|
55
|
+
const out = await r.enrich(INPUT);
|
|
56
|
+
expect(out.text).toBe("A answer");
|
|
57
|
+
expect(b.enrich).not.toHaveBeenCalled();
|
|
58
|
+
});
|
|
59
|
+
it("falls back to next provider on hard failure", async () => {
|
|
60
|
+
const a = mockProvider("a", [new Error("503 unavailable")]);
|
|
61
|
+
const b = mockProvider("b", ["B answer"]);
|
|
62
|
+
const r = new ResilientEnricher([a, b]);
|
|
63
|
+
const out = await r.enrich(INPUT);
|
|
64
|
+
expect(out.text).toBe("B answer");
|
|
65
|
+
});
|
|
66
|
+
it("treats empty answer as soft failure → tries next provider", async () => {
|
|
67
|
+
const a = mockProvider("a", [" "]); // whitespace-only = empty
|
|
68
|
+
const b = mockProvider("b", ["B answer"]);
|
|
69
|
+
const r = new ResilientEnricher([a, b]);
|
|
70
|
+
const out = await r.enrich(INPUT);
|
|
71
|
+
expect(out.text).toBe("B answer");
|
|
72
|
+
});
|
|
73
|
+
it("throws AllProvidersFailedError when every provider fails", async () => {
|
|
74
|
+
const a = mockProvider("a", [new Error("503 unavailable")]);
|
|
75
|
+
const b = mockProvider("b", [new Error("ECONNREFUSED")]);
|
|
76
|
+
const r = new ResilientEnricher([a, b]);
|
|
77
|
+
await expect(r.enrich(INPUT)).rejects.toThrow(AllProvidersFailedError);
|
|
78
|
+
});
|
|
79
|
+
it("skips a provider while it's in cooldown (5xx → 60s default)", async () => {
|
|
80
|
+
// First call: a fails, b answers. a now in cooldown for 60s.
|
|
81
|
+
// Second call: a should be SKIPPED (still in cooldown), b answers again.
|
|
82
|
+
const a = mockProvider("a", [new Error("503"), "A would-recover"]);
|
|
83
|
+
const b = mockProvider("b", ["B1", "B2"]);
|
|
84
|
+
const r = new ResilientEnricher([a, b]);
|
|
85
|
+
const r1 = await r.enrich(INPUT);
|
|
86
|
+
expect(r1.text).toBe("B1");
|
|
87
|
+
expect(a.enrich).toHaveBeenCalledTimes(1);
|
|
88
|
+
const r2 = await r.enrich(INPUT);
|
|
89
|
+
expect(r2.text).toBe("B2");
|
|
90
|
+
// Critically, a should NOT have been retried — it's in cooldown
|
|
91
|
+
expect(a.enrich).toHaveBeenCalledTimes(1);
|
|
92
|
+
});
|
|
93
|
+
it("emits onSwitch event with reason when falling back", async () => {
|
|
94
|
+
const a = mockProvider("a", [new Error("aborted (timeout)")]);
|
|
95
|
+
const b = mockProvider("b", ["B answer"]);
|
|
96
|
+
const events = [];
|
|
97
|
+
const r = new ResilientEnricher([a, b], (ev) => events.push(ev));
|
|
98
|
+
await r.enrich(INPUT);
|
|
99
|
+
expect(events).toHaveLength(1);
|
|
100
|
+
expect(events[0].from).toBe("a");
|
|
101
|
+
expect(events[0].to).toBe("b");
|
|
102
|
+
expect(events[0].kind).toBe("timeout");
|
|
103
|
+
});
|
|
104
|
+
it("rate-limit failure cools down longer than server failure", async () => {
|
|
105
|
+
const aRate = mockProvider("aRate", [new Error("429 rate limit")]);
|
|
106
|
+
const aServer = mockProvider("aServer", [new Error("503")]);
|
|
107
|
+
const b = mockProvider("b", ["B"]);
|
|
108
|
+
const r1 = new ResilientEnricher([aRate, b]);
|
|
109
|
+
const r2 = new ResilientEnricher([aServer, b]);
|
|
110
|
+
await r1.enrich(INPUT);
|
|
111
|
+
await r2.enrich(INPUT);
|
|
112
|
+
const h1 = r1.inspectHealth().aRate?.cooldownUntil ?? 0;
|
|
113
|
+
const h2 = r2.inspectHealth().aServer?.cooldownUntil ?? 0;
|
|
114
|
+
expect(h1).toBeGreaterThan(h2); // rate-limit cooldown > server cooldown
|
|
115
|
+
});
|
|
116
|
+
it("constructor rejects empty chain (you must give SOMETHING)", () => {
|
|
117
|
+
expect(() => new ResilientEnricher([])).toThrow();
|
|
118
|
+
});
|
|
119
|
+
});
|
|
120
|
+
//# sourceMappingURL=enrich.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enrich.test.js","sourceRoot":"","sources":["../src/enrich.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mneme-ai/embeddings",
|
|
3
|
-
"version": "0.22.
|
|
3
|
+
"version": "0.22.1",
|
|
4
4
|
"description": "Embedding providers (OpenAI, Ollama, bundled-WASM, hash-fallback) for Mneme",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"clean": "tsc -b --clean"
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"@mneme-ai/core": "0.22.
|
|
33
|
+
"@mneme-ai/core": "0.22.1",
|
|
34
34
|
"@xenova/transformers": "^2.17.2"
|
|
35
35
|
}
|
|
36
36
|
}
|