@mneme-ai/embeddings 2.75.2 → 2.77.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/dist/ollama.d.ts +14 -0
- package/dist/ollama.d.ts.map +1 -1
- package/dist/ollama.js +161 -33
- package/dist/ollama.js.map +1 -1
- package/dist/ollama_robust.test.d.ts +10 -0
- package/dist/ollama_robust.test.d.ts.map +1 -0
- package/dist/ollama_robust.test.js +90 -0
- package/dist/ollama_robust.test.js.map +1 -0
- package/package.json +41 -41
package/dist/ollama.d.ts
CHANGED
|
@@ -42,7 +42,21 @@ export declare class OllamaEmbedder implements EmbeddingProvider {
|
|
|
42
42
|
reason: string;
|
|
43
43
|
}>;
|
|
44
44
|
embed(texts: string[]): Promise<Float32Array[]>;
|
|
45
|
+
/** How many inputs got a deterministic fallback vector because the model
|
|
46
|
+
* could not embed them (transparency — never silently fake a clean run). */
|
|
47
|
+
private degradedCount;
|
|
48
|
+
embedStats(): {
|
|
49
|
+
degraded: number;
|
|
50
|
+
};
|
|
45
51
|
private embedBatch;
|
|
52
|
+
/**
|
|
53
|
+
* Embed ONE input, robust to the bge-m3 "500 / NaN on a specific input" bug.
|
|
54
|
+
* Retries transient 5xx, validates against NaN, then sanitizes + retries.
|
|
55
|
+
* With allowFallback (indexer path) a persistently-unembeddable input yields a
|
|
56
|
+
* deterministic SAME-DIMENSION vector so the run completes; without it
|
|
57
|
+
* (verify path) it throws so a real outage still surfaces. Network errors
|
|
58
|
+
* always propagate — those are a down server, not a bad input.
|
|
59
|
+
*/
|
|
46
60
|
private embedOne;
|
|
47
61
|
private fetchWithTimeout;
|
|
48
62
|
ping(): Promise<boolean>;
|
package/dist/ollama.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ollama.d.ts","sourceRoot":"","sources":["../src/ollama.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iGAAiG;IACjG,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yGAAyG;IACzG,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACpD;
|
|
1
|
+
{"version":3,"file":"ollama.d.ts","sourceRoot":"","sources":["../src/ollama.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iGAAiG;IACjG,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yGAAyG;IACzG,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACpD;AAmED,qBAAa,cAAe,YAAW,iBAAiB;IACtD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAwC;IACpE,qFAAqF;IACrF,OAAO,CAAC,mBAAmB,CAAS;gBAExB,IAAI,GAAE,aAAkB;IAYpC;;;qCAGiC;IAC3B,MAAM,IAAI,OAAO,CAAC;QAAE,EAAE,EAAE,IAAI,CAAA;KAAE,GAAG;QAAE,EAAE,EAAE,KAAK,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IA6BrF;;;;;OAKG;IACG,UAAU,IAAI,OAAO,CAAC;QAAE,EAAE,EAAE,IAAI,CAAA;KAAE,GAAG;QAAE,EAAE,EAAE,KAAK,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAcnE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IA+BrD;iFAC6E;IAC7E,OAAO,CAAC,aAAa,CAAK;IAC1B,UAAU,IAAI;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE;YAEpB,UAAU;IA8BxB;;;;;;;OAOG;YACW,QAAQ;YAwCR,gBAAgB;IAqCxB,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC;CAQ/B"}
|
package/dist/ollama.js
CHANGED
|
@@ -5,6 +5,70 @@ const DEFAULT_DIMS = 768;
|
|
|
5
5
|
const DEFAULT_URL = "http://127.0.0.1:11434";
|
|
6
6
|
const DEFAULT_TIMEOUT_MS = 180_000;
|
|
7
7
|
const RETRYABLE_FETCH = ["fetch failed", "ECONNRESET", "ECONNREFUSED", "ETIMEDOUT", "EAI_AGAIN", "socket hang up"];
|
|
8
|
+
// v2.76.0 — Ollama sometimes returns 5xx (model still loading / transient OOM)
|
|
9
|
+
// OR a NaN-poisoned embedding on a SPECIFIC input (observed with bge-m3 on
|
|
10
|
+
// certain text, e.g. "...may encrypt where feasible..."). These are NOT fatal:
|
|
11
|
+
// retry, then sanitize + retry, then substitute a SAME-DIMENSION deterministic
|
|
12
|
+
// vector so one bad chunk never aborts a whole index. Server-DOWN (network)
|
|
13
|
+
// errors still propagate — those are real outages, not bad inputs.
|
|
14
|
+
const RETRYABLE_STATUS = new Set([429, 500, 502, 503, 504]);
|
|
15
|
+
const EMBED_MAX_ATTEMPTS = 3;
|
|
16
|
+
const EMBED_SANITIZE_CHARS = 8192;
|
|
17
|
+
/** A vector is usable iff it is non-empty and every element is a finite number
|
|
18
|
+
* (no NaN / ±Infinity — the bge-m3 failure mode). */
|
|
19
|
+
function isFiniteVec(v) {
|
|
20
|
+
if (!v || v.length === 0)
|
|
21
|
+
return false;
|
|
22
|
+
for (let i = 0; i < v.length; i++) {
|
|
23
|
+
const x = v[i];
|
|
24
|
+
if (!Number.isFinite(x))
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
return true;
|
|
28
|
+
}
|
|
29
|
+
/** Strip control chars + hard-truncate. Some model inputs trigger a 500/NaN;
|
|
30
|
+
* a sanitized retry usually succeeds before we resort to the fallback vector. */
|
|
31
|
+
function sanitizeForEmbed(text) {
|
|
32
|
+
// Drop C0/C1 control chars (keep tab/LF/CR) by codepoint, then truncate.
|
|
33
|
+
let out = "";
|
|
34
|
+
for (const ch of text) {
|
|
35
|
+
const x = ch.codePointAt(0) ?? 0;
|
|
36
|
+
if (x === 9 || x === 10 || x === 13 || (x >= 32 && !(x >= 127 && x <= 159)))
|
|
37
|
+
out += ch;
|
|
38
|
+
if (out.length >= EMBED_SANITIZE_CHARS)
|
|
39
|
+
break;
|
|
40
|
+
}
|
|
41
|
+
return out;
|
|
42
|
+
}
|
|
43
|
+
/** Deterministic FNV-1a bag-of-features vector, L2-normalized to `dim`. Used
|
|
44
|
+
* ONLY as a last-resort substitute for an input the model cannot embed, so
|
|
45
|
+
* the index stays dimension-consistent + the run completes. Same algorithm
|
|
46
|
+
* shape as the hash-tier embedder; reproducible per (text, dim). */
|
|
47
|
+
function fallbackVector(text, dim) {
|
|
48
|
+
const v = new Float32Array(dim);
|
|
49
|
+
const toks = (text.toLowerCase().match(/[a-z0-9]+/g) ?? []);
|
|
50
|
+
for (const t of toks) {
|
|
51
|
+
let h = 0x811c9dc5;
|
|
52
|
+
for (let i = 0; i < t.length; i++) {
|
|
53
|
+
h ^= t.charCodeAt(i);
|
|
54
|
+
h = Math.imul(h, 0x01000193) >>> 0;
|
|
55
|
+
}
|
|
56
|
+
let sgn = 0x811c9dc5;
|
|
57
|
+
for (let i = 0; i < t.length; i++) {
|
|
58
|
+
sgn ^= t.charCodeAt(i) + 7;
|
|
59
|
+
sgn = Math.imul(sgn, 0x01000193) >>> 0;
|
|
60
|
+
}
|
|
61
|
+
v[h % dim] += (sgn & 1) === 0 ? 1 : -1;
|
|
62
|
+
}
|
|
63
|
+
let norm = 0;
|
|
64
|
+
for (let i = 0; i < dim; i++)
|
|
65
|
+
norm += v[i] * v[i];
|
|
66
|
+
norm = Math.sqrt(norm);
|
|
67
|
+
if (norm > 0)
|
|
68
|
+
for (let i = 0; i < dim; i++)
|
|
69
|
+
v[i] /= norm;
|
|
70
|
+
return v;
|
|
71
|
+
}
|
|
8
72
|
export class OllamaEmbedder {
|
|
9
73
|
name;
|
|
10
74
|
dimensions;
|
|
@@ -93,57 +157,116 @@ export class OllamaEmbedder {
|
|
|
93
157
|
return vecs;
|
|
94
158
|
}
|
|
95
159
|
catch (err) {
|
|
96
|
-
// 404 →
|
|
97
|
-
|
|
98
|
-
|
|
160
|
+
// 404 → older Ollama without /api/embed; switch to singular permanently.
|
|
161
|
+
if (err instanceof OllamaNotFoundError) {
|
|
162
|
+
this.batchEndpointBroken = true;
|
|
163
|
+
}
|
|
164
|
+
// v2.76.0 — a 5xx OR a NaN-poisoned embedding in the batch is NOT fatal:
|
|
165
|
+
// fall through to SINGULAR for THIS batch so the one bad input is
|
|
166
|
+
// isolated + retried/fallback'd (without disabling the fast batch path).
|
|
167
|
+
else if (!(err instanceof OllamaBatchUnhealthyError))
|
|
99
168
|
throw err;
|
|
100
|
-
this.batchEndpointBroken = true;
|
|
101
169
|
}
|
|
102
170
|
}
|
|
103
|
-
// Fallback: singular endpoint
|
|
104
|
-
//
|
|
171
|
+
// Fallback: singular endpoint, per-input — isolates a bad chunk, gives
|
|
172
|
+
// per-item progress, and lets embedOne retry / sanitize / substitute so one
|
|
173
|
+
// input that the model 500s/NaNs on can never abort the whole index.
|
|
105
174
|
const out = [];
|
|
106
175
|
for (let i = 0; i < texts.length; i++) {
|
|
107
|
-
out.push(await this.embedOne(texts[i]));
|
|
176
|
+
out.push(await this.embedOne(texts[i], { allowFallback: true }));
|
|
108
177
|
if (this.onItemDone)
|
|
109
178
|
this.onItemDone(i + 1, texts.length);
|
|
110
179
|
}
|
|
111
180
|
return out;
|
|
112
181
|
}
|
|
182
|
+
/** How many inputs got a deterministic fallback vector because the model
|
|
183
|
+
* could not embed them (transparency — never silently fake a clean run). */
|
|
184
|
+
degradedCount = 0;
|
|
185
|
+
embedStats() { return { degraded: this.degradedCount }; }
|
|
113
186
|
async embedBatch(texts) {
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
187
|
+
let res = null;
|
|
188
|
+
// Retry the batch on transient 5xx/429 (model still loading / momentary OOM).
|
|
189
|
+
for (let attempt = 1; attempt <= EMBED_MAX_ATTEMPTS; attempt++) {
|
|
190
|
+
res = await this.fetchWithTimeout(`${this.baseUrl}/api/embed`, {
|
|
191
|
+
method: "POST",
|
|
192
|
+
headers: { "content-type": "application/json" },
|
|
193
|
+
body: JSON.stringify({ model: this.model, input: texts }),
|
|
194
|
+
});
|
|
195
|
+
if (res.status === 404)
|
|
196
|
+
throw new OllamaNotFoundError("/api/embed not available on this Ollama version");
|
|
197
|
+
if (res.ok)
|
|
198
|
+
break;
|
|
199
|
+
if (RETRYABLE_STATUS.has(res.status) && attempt < EMBED_MAX_ATTEMPTS) {
|
|
200
|
+
await new Promise((r) => setTimeout(r, 400 * attempt));
|
|
201
|
+
continue;
|
|
202
|
+
}
|
|
203
|
+
// Non-retryable, or retries exhausted → isolate via singular (NOT fatal).
|
|
204
|
+
throw new OllamaBatchUnhealthyError(`batch HTTP ${res.status}`);
|
|
124
205
|
}
|
|
125
206
|
const json = (await res.json());
|
|
126
|
-
if (!json.embeddings || !Array.isArray(json.embeddings)) {
|
|
127
|
-
throw new
|
|
207
|
+
if (!json.embeddings || !Array.isArray(json.embeddings) || json.embeddings.length !== texts.length) {
|
|
208
|
+
throw new OllamaBatchUnhealthyError("batch returned missing/mismatched embeddings");
|
|
128
209
|
}
|
|
129
|
-
|
|
130
|
-
|
|
210
|
+
// A single NaN-poisoned vector (the bge-m3 failure mode) must not silently
|
|
211
|
+
// enter the index — drop to singular so ONLY the bad input is repaired.
|
|
212
|
+
if (!json.embeddings.every((v) => isFiniteVec(v))) {
|
|
213
|
+
throw new OllamaBatchUnhealthyError("batch contained a NaN/non-finite embedding");
|
|
131
214
|
}
|
|
132
215
|
return json.embeddings.map((v) => Float32Array.from(v));
|
|
133
216
|
}
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
217
|
+
/**
|
|
218
|
+
* Embed ONE input, robust to the bge-m3 "500 / NaN on a specific input" bug.
|
|
219
|
+
* Retries transient 5xx, validates against NaN, then sanitizes + retries.
|
|
220
|
+
* With allowFallback (indexer path) a persistently-unembeddable input yields a
|
|
221
|
+
* deterministic SAME-DIMENSION vector so the run completes; without it
|
|
222
|
+
* (verify path) it throws so a real outage still surfaces. Network errors
|
|
223
|
+
* always propagate — those are a down server, not a bad input.
|
|
224
|
+
*/
|
|
225
|
+
async embedOne(text, opts = {}) {
|
|
226
|
+
const post = async (prompt) => {
|
|
227
|
+
const res = await this.fetchWithTimeout(`${this.baseUrl}/api/embeddings`, {
|
|
228
|
+
method: "POST",
|
|
229
|
+
headers: { "content-type": "application/json" },
|
|
230
|
+
body: JSON.stringify({ model: this.model, prompt }),
|
|
231
|
+
});
|
|
232
|
+
if (!res.ok)
|
|
233
|
+
return { ok: false, status: res.status };
|
|
234
|
+
const json = (await res.json());
|
|
235
|
+
return { ok: true, status: 200, vec: json.embedding };
|
|
236
|
+
};
|
|
237
|
+
let lastStatus = 0;
|
|
238
|
+
for (let attempt = 1; attempt <= EMBED_MAX_ATTEMPTS; attempt++) {
|
|
239
|
+
const r = await post(text);
|
|
240
|
+
lastStatus = r.status;
|
|
241
|
+
if (r.ok && isFiniteVec(r.vec))
|
|
242
|
+
return Float32Array.from(r.vec);
|
|
243
|
+
// Retry on a retryable status OR a NaN/empty embedding (the bge-m3 case).
|
|
244
|
+
const retryable = !r.ok ? RETRYABLE_STATUS.has(r.status) : true; // ok-but-NaN is retryable too
|
|
245
|
+
if (retryable && attempt < EMBED_MAX_ATTEMPTS) {
|
|
246
|
+
await new Promise((res) => setTimeout(res, 400 * attempt));
|
|
247
|
+
continue;
|
|
248
|
+
}
|
|
249
|
+
if (!r.ok && !RETRYABLE_STATUS.has(r.status))
|
|
250
|
+
break; // hard non-retryable HTTP error
|
|
142
251
|
}
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
252
|
+
// Last resort #1 — a sanitized retry (control chars / over-long inputs are a
|
|
253
|
+
// common trigger for the model-side 500/NaN).
|
|
254
|
+
const cleaned = sanitizeForEmbed(text);
|
|
255
|
+
if (cleaned !== text && cleaned.length > 0) {
|
|
256
|
+
const r = await post(cleaned);
|
|
257
|
+
if (r.ok && isFiniteVec(r.vec))
|
|
258
|
+
return Float32Array.from(r.vec);
|
|
259
|
+
}
|
|
260
|
+
// Last resort #2 — same-dimension deterministic substitute so the index
|
|
261
|
+
// stays consistent + the run finishes. Only on the indexer path.
|
|
262
|
+
if (opts.allowFallback) {
|
|
263
|
+
this.degradedCount++;
|
|
264
|
+
if (this.degradedCount === 1) {
|
|
265
|
+
process.stderr.write(`⚠ ollama:${this.model} could not embed an input (HTTP ${lastStatus}/NaN) — substituting a deterministic vector for that chunk so indexing continues. (mneme embeddings status shows the count.)\n`);
|
|
266
|
+
}
|
|
267
|
+
return fallbackVector(text, this.dimensions);
|
|
268
|
+
}
|
|
269
|
+
throw new Error(`Ollama embed failed for an input (last HTTP ${lastStatus}; embedding was missing or NaN even after a sanitized retry).`);
|
|
147
270
|
}
|
|
148
271
|
async fetchWithTimeout(url, init, attempt = 0) {
|
|
149
272
|
const ctrl = new AbortController();
|
|
@@ -192,6 +315,11 @@ export class OllamaEmbedder {
|
|
|
192
315
|
/** Internal sentinel for "server doesn't support /api/embed yet". */
|
|
193
316
|
class OllamaNotFoundError extends Error {
|
|
194
317
|
}
|
|
318
|
+
/** v2.76.0 — "the batch endpoint responded but the result is unhealthy"
|
|
319
|
+
* (5xx after retries, length mismatch, or a NaN-poisoned vector). Signals
|
|
320
|
+
* embed() to isolate via the singular path WITHOUT disabling batch forever. */
|
|
321
|
+
class OllamaBatchUnhealthyError extends Error {
|
|
322
|
+
}
|
|
195
323
|
/** Translate any fetch/server error into a (reason, remedy) pair the CLI can show.
|
|
196
324
|
* Decoupled from CLI rendering so we can also use it in MCP / programmatic callers. */
|
|
197
325
|
function friendlyError(err, baseUrl, model) {
|
package/dist/ollama.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ollama.js","sourceRoot":"","sources":["../src/ollama.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ollama.js","sourceRoot":"","sources":["../src/ollama.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.76.0 — Ollama embedder robustness (bge-m3 "500 / NaN on a specific input").
|
|
3
|
+
*
|
|
4
|
+
* The model occasionally returns HTTP 5xx OR a NaN-poisoned embedding on a
|
|
5
|
+
* particular input (observed with bge-m3). Before v2.76 that threw and aborted
|
|
6
|
+
* the whole index. Now: retry 5xx, validate against NaN, sanitize + retry, then
|
|
7
|
+
* substitute a same-dimension deterministic vector so the run always completes.
|
|
8
|
+
*/
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=ollama_robust.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ollama_robust.test.d.ts","sourceRoot":"","sources":["../src/ollama_robust.test.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.76.0 — Ollama embedder robustness (bge-m3 "500 / NaN on a specific input").
|
|
3
|
+
*
|
|
4
|
+
* The model occasionally returns HTTP 5xx OR a NaN-poisoned embedding on a
|
|
5
|
+
* particular input (observed with bge-m3). Before v2.76 that threw and aborted
|
|
6
|
+
* the whole index. Now: retry 5xx, validate against NaN, sanitize + retry, then
|
|
7
|
+
* substitute a same-dimension deterministic vector so the run always completes.
|
|
8
|
+
*/
|
|
9
|
+
import { describe, it, expect, afterEach } from "vitest";
|
|
10
|
+
import { OllamaEmbedder } from "./ollama.js";
|
|
11
|
+
const realFetch = globalThis.fetch;
|
|
12
|
+
afterEach(() => { globalThis.fetch = realFetch; });
|
|
13
|
+
function vec(n, fill = 0.1) { return Array.from({ length: n }, () => fill); }
|
|
14
|
+
function jsonResp(status, body) {
|
|
15
|
+
return new Response(JSON.stringify(body), { status, headers: { "content-type": "application/json" } });
|
|
16
|
+
}
|
|
17
|
+
/** Install a fetch mock that routes /api/embed (batch) + /api/embeddings (singular). */
|
|
18
|
+
function mockFetch(handler) {
|
|
19
|
+
globalThis.fetch = (async (url, init) => {
|
|
20
|
+
const u = String(url);
|
|
21
|
+
const body = init?.body ? JSON.parse(init.body) : {};
|
|
22
|
+
return handler(u, body);
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
describe("v2.76.0 — Ollama embedder robustness (PINNED)", () => {
|
|
26
|
+
it("N1 transient 5xx on singular → retries → succeeds (no fallback)", async () => {
|
|
27
|
+
const e = new OllamaEmbedder({ model: "bge-m3", dimensions: 8, timeoutMs: 2000 });
|
|
28
|
+
let singular = 0;
|
|
29
|
+
mockFetch((u) => {
|
|
30
|
+
if (u.endsWith("/api/embed"))
|
|
31
|
+
return jsonResp(500, { error: "loading" }); // batch unhealthy → singular
|
|
32
|
+
// singular: first call 503, then OK
|
|
33
|
+
singular++;
|
|
34
|
+
return singular < 2 ? jsonResp(503, { error: "busy" }) : jsonResp(200, { embedding: vec(8) });
|
|
35
|
+
});
|
|
36
|
+
const out = await e.embed(["hello"]);
|
|
37
|
+
expect(out).toHaveLength(1);
|
|
38
|
+
expect([...out[0]].every(Number.isFinite)).toBe(true);
|
|
39
|
+
expect(e.embedStats().degraded).toBe(0);
|
|
40
|
+
});
|
|
41
|
+
it("N2 ok-but-NaN embedding → retried as unhealthy → eventually valid", async () => {
|
|
42
|
+
const e = new OllamaEmbedder({ model: "bge-m3", dimensions: 4, timeoutMs: 2000 });
|
|
43
|
+
let n = 0;
|
|
44
|
+
mockFetch((u) => {
|
|
45
|
+
if (u.endsWith("/api/embed"))
|
|
46
|
+
return jsonResp(404, {}); // no batch endpoint → singular path
|
|
47
|
+
n++;
|
|
48
|
+
return n < 2 ? jsonResp(200, { embedding: [0.1, NaN, 0.3, 0.4] }) : jsonResp(200, { embedding: vec(4) });
|
|
49
|
+
});
|
|
50
|
+
const out = await e.embed(["x"]);
|
|
51
|
+
expect([...out[0]].every(Number.isFinite)).toBe(true);
|
|
52
|
+
expect(e.embedStats().degraded).toBe(0);
|
|
53
|
+
});
|
|
54
|
+
it("N3 persistent 500 on a specific input → deterministic SAME-DIM fallback (index completes)", async () => {
|
|
55
|
+
const e = new OllamaEmbedder({ model: "bge-m3", dimensions: 16, timeoutMs: 2000 });
|
|
56
|
+
mockFetch((u) => {
|
|
57
|
+
if (u.endsWith("/api/embed"))
|
|
58
|
+
return jsonResp(404, {});
|
|
59
|
+
return jsonResp(500, { error: "the bge-m3 NaN input" }); // never succeeds
|
|
60
|
+
});
|
|
61
|
+
const out = await e.embed(["...may encrypt where feasible..."]);
|
|
62
|
+
expect(out).toHaveLength(1);
|
|
63
|
+
expect(out[0].length).toBe(16); // dimension stays consistent
|
|
64
|
+
expect([...out[0]].every(Number.isFinite)).toBe(true); // a usable (non-NaN) vector
|
|
65
|
+
expect(e.embedStats().degraded).toBe(1); // transparently counted, not faked
|
|
66
|
+
});
|
|
67
|
+
it("N4 fallback vector is deterministic per (text, dim)", async () => {
|
|
68
|
+
const e = new OllamaEmbedder({ model: "bge-m3", dimensions: 16, timeoutMs: 2000 });
|
|
69
|
+
mockFetch((u) => u.endsWith("/api/embed") ? jsonResp(404, {}) : jsonResp(500, {}));
|
|
70
|
+
const a = await e.embed(["same text"]);
|
|
71
|
+
const b = await e.embed(["same text"]);
|
|
72
|
+
expect([...a[0]]).toEqual([...b[0]]);
|
|
73
|
+
});
|
|
74
|
+
it("N5 one bad input in a multi-item run does NOT abort the others", async () => {
|
|
75
|
+
const e = new OllamaEmbedder({ model: "bge-m3", dimensions: 8, timeoutMs: 2000 });
|
|
76
|
+
mockFetch((u, body) => {
|
|
77
|
+
if (u.endsWith("/api/embed"))
|
|
78
|
+
return jsonResp(404, {}); // force singular per-item
|
|
79
|
+
const prompt = body.prompt ?? "";
|
|
80
|
+
if (prompt.includes("POISON"))
|
|
81
|
+
return jsonResp(500, { error: "bad input" });
|
|
82
|
+
return jsonResp(200, { embedding: vec(8) });
|
|
83
|
+
});
|
|
84
|
+
const out = await e.embed(["good1", "POISON", "good3"]);
|
|
85
|
+
expect(out).toHaveLength(3);
|
|
86
|
+
expect(out.every((v) => v.length === 8 && [...v].every(Number.isFinite))).toBe(true);
|
|
87
|
+
expect(e.embedStats().degraded).toBe(1); // only the poison chunk degraded
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
//# sourceMappingURL=ollama_robust.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ollama_robust.test.js","sourceRoot":"","sources":["../src/ollama_robust.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,41 +1,41 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@mneme-ai/embeddings",
|
|
3
|
-
"version": "2.
|
|
4
|
-
"description": "Embedding providers (OpenAI, Ollama, bundled-WASM, hash-fallback) for Mneme",
|
|
5
|
-
"type": "module",
|
|
6
|
-
"main": "./dist/index.js",
|
|
7
|
-
"types": "./dist/index.d.ts",
|
|
8
|
-
"exports": {
|
|
9
|
-
".": {
|
|
10
|
-
"import": "./dist/index.js",
|
|
11
|
-
"types": "./dist/index.d.ts"
|
|
12
|
-
}
|
|
13
|
-
},
|
|
14
|
-
"repository": {
|
|
15
|
-
"type": "git",
|
|
16
|
-
"url": "git+https://github.com/patsa2561-art/mneme-ai.git",
|
|
17
|
-
"directory": "packages/embeddings"
|
|
18
|
-
},
|
|
19
|
-
"homepage": "https://github.com/patsa2561-art/mneme-ai#readme",
|
|
20
|
-
"bugs": {
|
|
21
|
-
"url": "https://github.com/patsa2561-art/mneme-ai/issues"
|
|
22
|
-
},
|
|
23
|
-
"license": "MIT",
|
|
24
|
-
"files": [
|
|
25
|
-
"dist",
|
|
26
|
-
"README.md"
|
|
27
|
-
],
|
|
28
|
-
"scripts": {
|
|
29
|
-
"build": "tsc -b",
|
|
30
|
-
"clean": "tsc -b --clean"
|
|
31
|
-
},
|
|
32
|
-
"engines": {
|
|
33
|
-
"node": ">=22.13.0 <25.0.0"
|
|
34
|
-
},
|
|
35
|
-
"dependencies": {
|
|
36
|
-
"@mneme-ai/core": "2.
|
|
37
|
-
},
|
|
38
|
-
"optionalDependencies": {
|
|
39
|
-
"@huggingface/transformers": "^3.0.0"
|
|
40
|
-
}
|
|
41
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@mneme-ai/embeddings",
|
|
3
|
+
"version": "2.77.0",
|
|
4
|
+
"description": "Embedding providers (OpenAI, Ollama, bundled-WASM, hash-fallback) for Mneme",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"import": "./dist/index.js",
|
|
11
|
+
"types": "./dist/index.d.ts"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"repository": {
|
|
15
|
+
"type": "git",
|
|
16
|
+
"url": "git+https://github.com/patsa2561-art/mneme-ai.git",
|
|
17
|
+
"directory": "packages/embeddings"
|
|
18
|
+
},
|
|
19
|
+
"homepage": "https://github.com/patsa2561-art/mneme-ai#readme",
|
|
20
|
+
"bugs": {
|
|
21
|
+
"url": "https://github.com/patsa2561-art/mneme-ai/issues"
|
|
22
|
+
},
|
|
23
|
+
"license": "MIT",
|
|
24
|
+
"files": [
|
|
25
|
+
"dist",
|
|
26
|
+
"README.md"
|
|
27
|
+
],
|
|
28
|
+
"scripts": {
|
|
29
|
+
"build": "tsc -b",
|
|
30
|
+
"clean": "tsc -b --clean"
|
|
31
|
+
},
|
|
32
|
+
"engines": {
|
|
33
|
+
"node": ">=22.13.0 <25.0.0"
|
|
34
|
+
},
|
|
35
|
+
"dependencies": {
|
|
36
|
+
"@mneme-ai/core": "2.77.0"
|
|
37
|
+
},
|
|
38
|
+
"optionalDependencies": {
|
|
39
|
+
"@huggingface/transformers": "^3.0.0"
|
|
40
|
+
}
|
|
41
|
+
}
|