sensemaking 0.25.1 → 0.27.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 +48 -12
- package/dist/cjs/cli/index.d.cts +3 -3
- package/dist/cjs/cli/index.d.ts +3 -3
- package/dist/cjs/cli/index.js +3 -3
- package/dist/cjs/cli/index.js.map +1 -1
- package/dist/cjs/cli/path.js +5 -29
- package/dist/cjs/cli/path.js.map +1 -1
- package/dist/cjs/cli/peek.js +43 -2
- package/dist/cjs/cli/peek.js.map +1 -1
- package/dist/cjs/cli/related.js +4 -3
- package/dist/cjs/cli/related.js.map +1 -1
- package/dist/cjs/cli/search.js +38 -6
- package/dist/cjs/cli/search.js.map +1 -1
- package/dist/cjs/commands/index.d.cts +6 -3
- package/dist/cjs/commands/index.d.ts +6 -3
- package/dist/cjs/commands/index.js +4 -0
- package/dist/cjs/commands/index.js.map +1 -1
- package/dist/cjs/commands/map.d.cts +14 -5
- package/dist/cjs/commands/map.d.ts +14 -5
- package/dist/cjs/commands/map.js +42 -35
- package/dist/cjs/commands/map.js.map +1 -1
- package/dist/cjs/commands/path.d.cts +14 -0
- package/dist/cjs/commands/path.d.ts +14 -0
- package/dist/cjs/commands/path.js +209 -0
- package/dist/cjs/commands/path.js.map +1 -0
- package/dist/cjs/commands/peek.d.cts +25 -2
- package/dist/cjs/commands/peek.d.ts +25 -2
- package/dist/cjs/commands/peek.js +131 -50
- package/dist/cjs/commands/peek.js.map +1 -1
- package/dist/cjs/commands/related.d.cts +16 -3
- package/dist/cjs/commands/related.d.ts +16 -3
- package/dist/cjs/commands/related.js +131 -98
- package/dist/cjs/commands/related.js.map +1 -1
- package/dist/cjs/commands/scope.d.cts +1 -0
- package/dist/cjs/commands/scope.d.ts +1 -0
- package/dist/cjs/commands/scope.js +149 -0
- package/dist/cjs/commands/scope.js.map +1 -1
- package/dist/cjs/commands/search.d.cts +30 -3
- package/dist/cjs/commands/search.d.ts +30 -3
- package/dist/cjs/commands/search.js +240 -73
- package/dist/cjs/commands/search.js.map +1 -1
- package/dist/cjs/commands/signals.d.cts +22 -7
- package/dist/cjs/commands/signals.d.ts +22 -7
- package/dist/cjs/commands/signals.js +77 -15
- package/dist/cjs/commands/signals.js.map +1 -1
- package/dist/cjs/commands/snapshot.d.cts +3 -0
- package/dist/cjs/commands/snapshot.d.ts +3 -0
- package/dist/cjs/commands/snapshot.js +180 -0
- package/dist/cjs/commands/snapshot.js.map +1 -0
- package/dist/cjs/config/load.js +6 -0
- package/dist/cjs/config/load.js.map +1 -1
- package/dist/cjs/embed/cohere.js +41 -16
- package/dist/cjs/embed/cohere.js.map +1 -1
- package/dist/cjs/embed/endpoint.d.cts +2 -0
- package/dist/cjs/embed/endpoint.d.ts +2 -0
- package/dist/cjs/embed/endpoint.js +30 -0
- package/dist/cjs/embed/endpoint.js.map +1 -0
- package/dist/cjs/embed/handoff.d.cts +7 -2
- package/dist/cjs/embed/handoff.d.ts +7 -2
- package/dist/cjs/embed/handoff.js +10 -0
- package/dist/cjs/embed/handoff.js.map +1 -1
- package/dist/cjs/embed/http.d.cts +18 -1
- package/dist/cjs/embed/http.d.ts +18 -1
- package/dist/cjs/embed/http.js +239 -40
- package/dist/cjs/embed/http.js.map +1 -1
- package/dist/cjs/embed/openai.js +39 -17
- package/dist/cjs/embed/openai.js.map +1 -1
- package/dist/cjs/embed/query.d.cts +9 -3
- package/dist/cjs/embed/query.d.ts +9 -3
- package/dist/cjs/embed/query.js +257 -90
- package/dist/cjs/embed/query.js.map +1 -1
- package/dist/cjs/embed/registry.d.cts +2 -2
- package/dist/cjs/embed/registry.d.ts +2 -2
- package/dist/cjs/embed/registry.js +36 -4
- package/dist/cjs/embed/registry.js.map +1 -1
- package/dist/cjs/embed/static.js +6 -2
- package/dist/cjs/embed/static.js.map +1 -1
- package/dist/cjs/embed/store.js +42 -77
- package/dist/cjs/embed/store.js.map +1 -1
- package/dist/cjs/embed/types.d.cts +5 -2
- package/dist/cjs/embed/types.d.ts +5 -2
- package/dist/cjs/embed/types.js.map +1 -1
- package/dist/cjs/features/embed.js +290 -43
- package/dist/cjs/features/embed.js.map +1 -1
- package/dist/cjs/graph/traverse.d.cts +2 -2
- package/dist/cjs/graph/traverse.d.ts +2 -2
- package/dist/cjs/graph/traverse.js +15 -5
- package/dist/cjs/graph/traverse.js.map +1 -1
- package/dist/cjs/index.d.cts +2 -2
- package/dist/cjs/index.d.ts +2 -2
- package/dist/cjs/index.js +6 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/output/output.d.cts +4 -36
- package/dist/cjs/output/output.d.ts +4 -36
- package/dist/cjs/output/output.js +1 -2
- package/dist/cjs/output/output.js.map +1 -1
- package/dist/cjs/scan/pool.d.cts +2 -1
- package/dist/cjs/scan/pool.d.ts +2 -1
- package/dist/cjs/scan/pool.js +116 -27
- package/dist/cjs/scan/pool.js.map +1 -1
- package/dist/cjs/scan/reparse.d.cts +1 -0
- package/dist/cjs/scan/reparse.d.ts +1 -0
- package/dist/cjs/scan/reparse.js +75 -21
- package/dist/cjs/scan/reparse.js.map +1 -1
- package/dist/cjs/store/builder.d.cts +11 -21
- package/dist/cjs/store/builder.d.ts +11 -21
- package/dist/cjs/store/builder.js +1077 -438
- package/dist/cjs/store/builder.js.map +1 -1
- package/dist/cjs/store/duckdb/connection.js +16 -2
- package/dist/cjs/store/duckdb/connection.js.map +1 -1
- package/dist/cjs/store/duckdb/open.d.cts +1 -1
- package/dist/cjs/store/duckdb/open.d.ts +1 -1
- package/dist/cjs/store/duckdb/open.js +73 -65
- package/dist/cjs/store/duckdb/open.js.map +1 -1
- package/dist/cjs/store/duckdb/reconcile.js +533 -15
- package/dist/cjs/store/duckdb/reconcile.js.map +1 -1
- package/dist/cjs/store/embed-scope.js +19 -9
- package/dist/cjs/store/embed-scope.js.map +1 -1
- package/dist/cjs/store/index.d.cts +6 -0
- package/dist/cjs/store/index.d.ts +6 -0
- package/dist/cjs/store/index.js +8 -4
- package/dist/cjs/store/index.js.map +1 -1
- package/dist/cjs/store/open.d.cts +6 -1
- package/dist/cjs/store/open.d.ts +6 -1
- package/dist/cjs/store/open.js +230 -307
- package/dist/cjs/store/open.js.map +1 -1
- package/dist/cjs/store/readiness.d.cts +5 -0
- package/dist/cjs/store/readiness.d.ts +5 -0
- package/dist/cjs/store/readiness.js +39 -0
- package/dist/cjs/store/readiness.js.map +1 -0
- package/dist/cjs/store/reconcile.d.cts +26 -1
- package/dist/cjs/store/reconcile.d.ts +26 -1
- package/dist/cjs/store/reconcile.js +670 -576
- package/dist/cjs/store/reconcile.js.map +1 -1
- package/dist/cjs/store/signature.d.cts +1 -0
- package/dist/cjs/store/signature.d.ts +1 -0
- package/dist/cjs/store/signature.js +9 -0
- package/dist/cjs/store/signature.js.map +1 -1
- package/dist/cjs/store/sqlite/open.d.cts +1 -1
- package/dist/cjs/store/sqlite/open.d.ts +1 -1
- package/dist/cjs/store/sqlite/open.js +84 -90
- package/dist/cjs/store/sqlite/open.js.map +1 -1
- package/dist/cjs/store/sqlite/reconcile.js.map +1 -1
- package/dist/cjs/store/sqlite/store.js +63 -60
- package/dist/cjs/store/sqlite/store.js.map +1 -1
- package/dist/cjs/store/sqlite/vectors.d.cts +2 -2
- package/dist/cjs/store/sqlite/vectors.d.ts +2 -2
- package/dist/cjs/store/sqlite/vectors.js +8 -4
- package/dist/cjs/store/sqlite/vectors.js.map +1 -1
- package/dist/cjs/store/stages.js.map +1 -1
- package/dist/cjs/store/turso/connection.d.cts +1 -0
- package/dist/cjs/store/turso/connection.d.ts +1 -0
- package/dist/cjs/store/turso/connection.js +319 -94
- package/dist/cjs/store/turso/connection.js.map +1 -1
- package/dist/cjs/store/turso/open.d.cts +1 -1
- package/dist/cjs/store/turso/open.d.ts +1 -1
- package/dist/cjs/store/turso/open.js +70 -74
- package/dist/cjs/store/turso/open.js.map +1 -1
- package/dist/cjs/store/turso/store.js +25 -23
- package/dist/cjs/store/turso/store.js.map +1 -1
- package/dist/cjs/store/turso/vectors.d.cts +2 -2
- package/dist/cjs/store/turso/vectors.d.ts +2 -2
- package/dist/cjs/store/turso/vectors.js +26 -16
- package/dist/cjs/store/turso/vectors.js.map +1 -1
- package/dist/cjs/store/types.d.cts +4 -1
- package/dist/cjs/store/types.d.ts +4 -1
- package/dist/cjs/store/types.js.map +1 -1
- package/dist/cjs/store/vectors.d.cts +14 -1
- package/dist/cjs/store/vectors.d.ts +14 -1
- package/dist/cjs/store/vectors.js +61 -0
- package/dist/cjs/store/vectors.js.map +1 -1
- package/dist/cjs/watch.d.cts +6 -0
- package/dist/cjs/watch.d.ts +6 -0
- package/dist/cjs/watch.js +42 -10
- package/dist/cjs/watch.js.map +1 -1
- package/dist/cjs/workers/parse.d.cts +4 -3
- package/dist/cjs/workers/parse.d.ts +4 -3
- package/dist/cjs/workers/parse.js +19 -17
- package/dist/cjs/workers/parse.js.map +1 -1
- package/dist/esm/cli/index.d.ts +3 -3
- package/dist/esm/cli/index.js +3 -3
- package/dist/esm/cli/index.js.map +1 -1
- package/dist/esm/cli/path.js +4 -10
- package/dist/esm/cli/path.js.map +1 -1
- package/dist/esm/cli/peek.js +20 -2
- package/dist/esm/cli/peek.js.map +1 -1
- package/dist/esm/cli/related.js +5 -3
- package/dist/esm/cli/related.js.map +1 -1
- package/dist/esm/cli/search.js +12 -2
- package/dist/esm/cli/search.js.map +1 -1
- package/dist/esm/commands/index.d.ts +6 -3
- package/dist/esm/commands/index.js +1 -0
- package/dist/esm/commands/index.js.map +1 -1
- package/dist/esm/commands/map.d.ts +14 -5
- package/dist/esm/commands/map.js +2 -0
- package/dist/esm/commands/map.js.map +1 -1
- package/dist/esm/commands/path.d.ts +14 -0
- package/dist/esm/commands/path.js +33 -0
- package/dist/esm/commands/path.js.map +1 -0
- package/dist/esm/commands/peek.d.ts +25 -2
- package/dist/esm/commands/peek.js +59 -19
- package/dist/esm/commands/peek.js.map +1 -1
- package/dist/esm/commands/related.d.ts +16 -3
- package/dist/esm/commands/related.js +45 -28
- package/dist/esm/commands/related.js.map +1 -1
- package/dist/esm/commands/scope.d.ts +1 -0
- package/dist/esm/commands/scope.js +58 -0
- package/dist/esm/commands/scope.js.map +1 -1
- package/dist/esm/commands/search.d.ts +30 -3
- package/dist/esm/commands/search.js +95 -20
- package/dist/esm/commands/search.js.map +1 -1
- package/dist/esm/commands/signals.d.ts +22 -7
- package/dist/esm/commands/signals.js +74 -17
- package/dist/esm/commands/signals.js.map +1 -1
- package/dist/esm/commands/snapshot.d.ts +3 -0
- package/dist/esm/commands/snapshot.js +25 -0
- package/dist/esm/commands/snapshot.js.map +1 -0
- package/dist/esm/config/load.js +6 -0
- package/dist/esm/config/load.js.map +1 -1
- package/dist/esm/embed/cohere.js +35 -10
- package/dist/esm/embed/cohere.js.map +1 -1
- package/dist/esm/embed/endpoint.d.ts +2 -0
- package/dist/esm/embed/endpoint.js +11 -0
- package/dist/esm/embed/endpoint.js.map +1 -0
- package/dist/esm/embed/handoff.d.ts +7 -2
- package/dist/esm/embed/handoff.js +7 -0
- package/dist/esm/embed/handoff.js.map +1 -1
- package/dist/esm/embed/http.d.ts +18 -1
- package/dist/esm/embed/http.js +137 -17
- package/dist/esm/embed/http.js.map +1 -1
- package/dist/esm/embed/openai.js +34 -12
- package/dist/esm/embed/openai.js.map +1 -1
- package/dist/esm/embed/query.d.ts +9 -3
- package/dist/esm/embed/query.js +98 -26
- package/dist/esm/embed/query.js.map +1 -1
- package/dist/esm/embed/registry.d.ts +2 -2
- package/dist/esm/embed/registry.js +34 -5
- package/dist/esm/embed/registry.js.map +1 -1
- package/dist/esm/embed/static.js +10 -2
- package/dist/esm/embed/static.js.map +1 -1
- package/dist/esm/embed/store.js +30 -21
- package/dist/esm/embed/store.js.map +1 -1
- package/dist/esm/embed/types.d.ts +5 -2
- package/dist/esm/embed/types.js.map +1 -1
- package/dist/esm/features/embed.js +82 -21
- package/dist/esm/features/embed.js.map +1 -1
- package/dist/esm/graph/traverse.d.ts +2 -2
- package/dist/esm/graph/traverse.js +4 -2
- package/dist/esm/graph/traverse.js.map +1 -1
- package/dist/esm/index.d.ts +2 -2
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/output/output.d.ts +4 -36
- package/dist/esm/output/output.js +1 -2
- package/dist/esm/output/output.js.map +1 -1
- package/dist/esm/scan/pool.d.ts +2 -1
- package/dist/esm/scan/pool.js +80 -23
- package/dist/esm/scan/pool.js.map +1 -1
- package/dist/esm/scan/reparse.d.ts +1 -0
- package/dist/esm/scan/reparse.js +40 -12
- package/dist/esm/scan/reparse.js.map +1 -1
- package/dist/esm/store/builder.d.ts +11 -21
- package/dist/esm/store/builder.js +337 -133
- package/dist/esm/store/builder.js.map +1 -1
- package/dist/esm/store/duckdb/connection.js +9 -1
- package/dist/esm/store/duckdb/connection.js.map +1 -1
- package/dist/esm/store/duckdb/open.d.ts +1 -1
- package/dist/esm/store/duckdb/open.js +13 -9
- package/dist/esm/store/duckdb/open.js.map +1 -1
- package/dist/esm/store/duckdb/reconcile.js +145 -10
- package/dist/esm/store/duckdb/reconcile.js.map +1 -1
- package/dist/esm/store/embed-scope.js +16 -6
- package/dist/esm/store/embed-scope.js.map +1 -1
- package/dist/esm/store/index.d.ts +6 -0
- package/dist/esm/store/index.js +10 -4
- package/dist/esm/store/index.js.map +1 -1
- package/dist/esm/store/open.d.ts +6 -1
- package/dist/esm/store/open.js +77 -87
- package/dist/esm/store/open.js.map +1 -1
- package/dist/esm/store/readiness.d.ts +5 -0
- package/dist/esm/store/readiness.js +11 -0
- package/dist/esm/store/readiness.js.map +1 -0
- package/dist/esm/store/reconcile.d.ts +26 -1
- package/dist/esm/store/reconcile.js +142 -120
- package/dist/esm/store/reconcile.js.map +1 -1
- package/dist/esm/store/signature.d.ts +1 -0
- package/dist/esm/store/signature.js +8 -0
- package/dist/esm/store/signature.js.map +1 -1
- package/dist/esm/store/sqlite/open.d.ts +1 -1
- package/dist/esm/store/sqlite/open.js +12 -12
- package/dist/esm/store/sqlite/open.js.map +1 -1
- package/dist/esm/store/sqlite/reconcile.js +2 -2
- package/dist/esm/store/sqlite/reconcile.js.map +1 -1
- package/dist/esm/store/sqlite/store.js +21 -18
- package/dist/esm/store/sqlite/store.js.map +1 -1
- package/dist/esm/store/sqlite/vectors.d.ts +2 -2
- package/dist/esm/store/sqlite/vectors.js +7 -5
- package/dist/esm/store/sqlite/vectors.js.map +1 -1
- package/dist/esm/store/stages.js.map +1 -1
- package/dist/esm/store/turso/connection.d.ts +1 -0
- package/dist/esm/store/turso/connection.js +97 -28
- package/dist/esm/store/turso/connection.js.map +1 -1
- package/dist/esm/store/turso/open.d.ts +1 -1
- package/dist/esm/store/turso/open.js +9 -8
- package/dist/esm/store/turso/open.js.map +1 -1
- package/dist/esm/store/turso/store.js +16 -14
- package/dist/esm/store/turso/store.js.map +1 -1
- package/dist/esm/store/turso/vectors.d.ts +2 -2
- package/dist/esm/store/turso/vectors.js +27 -17
- package/dist/esm/store/turso/vectors.js.map +1 -1
- package/dist/esm/store/types.d.ts +4 -1
- package/dist/esm/store/types.js.map +1 -1
- package/dist/esm/store/vectors.d.ts +14 -1
- package/dist/esm/store/vectors.js +55 -0
- package/dist/esm/store/vectors.js.map +1 -1
- package/dist/esm/watch.d.ts +6 -0
- package/dist/esm/watch.js +40 -14
- package/dist/esm/watch.js.map +1 -1
- package/dist/esm/workers/parse.d.ts +4 -3
- package/dist/esm/workers/parse.js +19 -17
- package/dist/esm/workers/parse.js.map +1 -1
- package/package.json +1 -1
- package/skills/sense/EXAMPLES.md +3 -3
- package/skills/sense/SKILL.md +11 -3
- package/skills/sense/references/search.md +17 -1
- package/skills/sense/references/sql.md +1 -1
- package/skills/sense/references/stores/duckdb.md +1 -1
- package/skills/sense/references/terminology.md +32 -0
- package/skills/sense-setup/SKILL.md +2 -2
- package/skills/sense-setup/references/embeddings.md +1 -1
- package/skills/sense-setup/references/store-benchmarks.md +5 -5
- package/skills/sense-setup/references/stores/duckdb.md +1 -1
package/dist/cjs/embed/http.d.ts
CHANGED
|
@@ -1,2 +1,19 @@
|
|
|
1
|
-
export declare
|
|
1
|
+
export declare const HTTP_ATTEMPT_TIMEOUT_MS = 30000;
|
|
2
|
+
export declare const MODEL_FILE_ATTEMPT_TIMEOUT_MS: number;
|
|
3
|
+
export type FetchRequestInit = Omit<RequestInit, 'signal'> & {
|
|
4
|
+
signal?: never;
|
|
5
|
+
};
|
|
6
|
+
export interface FetchRetryOptions {
|
|
7
|
+
signal?: AbortSignal;
|
|
8
|
+
attemptTimeoutMs?: number;
|
|
9
|
+
baseDelayMs?: number;
|
|
10
|
+
}
|
|
11
|
+
export interface BufferedResponse {
|
|
12
|
+
readonly ok: boolean;
|
|
13
|
+
readonly status: number;
|
|
14
|
+
readonly headers: Headers;
|
|
15
|
+
readonly body: ArrayBuffer;
|
|
16
|
+
readonly url: string;
|
|
17
|
+
}
|
|
18
|
+
export declare function fetchWithRetry(url: string, init: FetchRequestInit, options?: FetchRetryOptions): Promise<BufferedResponse>;
|
|
2
19
|
export declare function probeReachable(url: string, timeoutMs?: number): Promise<boolean>;
|
package/dist/cjs/embed/http.js
CHANGED
|
@@ -9,6 +9,12 @@ function _export(target, all) {
|
|
|
9
9
|
});
|
|
10
10
|
}
|
|
11
11
|
_export(exports, {
|
|
12
|
+
get HTTP_ATTEMPT_TIMEOUT_MS () {
|
|
13
|
+
return HTTP_ATTEMPT_TIMEOUT_MS;
|
|
14
|
+
},
|
|
15
|
+
get MODEL_FILE_ATTEMPT_TIMEOUT_MS () {
|
|
16
|
+
return MODEL_FILE_ATTEMPT_TIMEOUT_MS;
|
|
17
|
+
},
|
|
12
18
|
get fetchWithRetry () {
|
|
13
19
|
return fetchWithRetry;
|
|
14
20
|
},
|
|
@@ -16,6 +22,7 @@ _export(exports, {
|
|
|
16
22
|
return probeReachable;
|
|
17
23
|
}
|
|
18
24
|
});
|
|
25
|
+
var _errorsts = require("../errors.js");
|
|
19
26
|
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
|
|
20
27
|
try {
|
|
21
28
|
var info = gen[key](arg);
|
|
@@ -42,6 +49,55 @@ function _async_to_generator(fn) {
|
|
|
42
49
|
});
|
|
43
50
|
};
|
|
44
51
|
}
|
|
52
|
+
function _define_property(obj, key, value) {
|
|
53
|
+
if (key in obj) {
|
|
54
|
+
Object.defineProperty(obj, key, {
|
|
55
|
+
value: value,
|
|
56
|
+
enumerable: true,
|
|
57
|
+
configurable: true,
|
|
58
|
+
writable: true
|
|
59
|
+
});
|
|
60
|
+
} else obj[key] = value;
|
|
61
|
+
return obj;
|
|
62
|
+
}
|
|
63
|
+
function _object_spread(target) {
|
|
64
|
+
for(var i = 1; i < arguments.length; i++){
|
|
65
|
+
var source = arguments[i] != null ? arguments[i] : {};
|
|
66
|
+
var ownKeys = Object.keys(source);
|
|
67
|
+
if (typeof Object.getOwnPropertySymbols === "function") {
|
|
68
|
+
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
|
|
69
|
+
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
|
|
70
|
+
}));
|
|
71
|
+
}
|
|
72
|
+
ownKeys.forEach(function(key) {
|
|
73
|
+
_define_property(target, key, source[key]);
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
return target;
|
|
77
|
+
}
|
|
78
|
+
function ownKeys(object, enumerableOnly) {
|
|
79
|
+
var keys = Object.keys(object);
|
|
80
|
+
if (Object.getOwnPropertySymbols) {
|
|
81
|
+
var symbols = Object.getOwnPropertySymbols(object);
|
|
82
|
+
if (enumerableOnly) {
|
|
83
|
+
symbols = symbols.filter(function(sym) {
|
|
84
|
+
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
keys.push.apply(keys, symbols);
|
|
88
|
+
}
|
|
89
|
+
return keys;
|
|
90
|
+
}
|
|
91
|
+
function _object_spread_props(target, source) {
|
|
92
|
+
source = source != null ? source : {};
|
|
93
|
+
if (Object.getOwnPropertyDescriptors) Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
|
|
94
|
+
else {
|
|
95
|
+
ownKeys(Object(source)).forEach(function(key) {
|
|
96
|
+
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
return target;
|
|
100
|
+
}
|
|
45
101
|
function _ts_generator(thisArg, body) {
|
|
46
102
|
var f, y, t, _ = {
|
|
47
103
|
label: 0,
|
|
@@ -142,112 +198,255 @@ function _ts_generator(thisArg, body) {
|
|
|
142
198
|
}
|
|
143
199
|
}
|
|
144
200
|
var MAX_ATTEMPTS = 3;
|
|
145
|
-
|
|
146
|
-
|
|
201
|
+
var MAX_RETRY_AFTER_MS = 10000;
|
|
202
|
+
var DEFAULT_BASE_DELAY_MS = 200;
|
|
203
|
+
var HTTP_ATTEMPT_TIMEOUT_MS = 30000;
|
|
204
|
+
var MODEL_FILE_ATTEMPT_TIMEOUT_MS = 5 * 60000;
|
|
205
|
+
function safeUrl(url) {
|
|
206
|
+
try {
|
|
207
|
+
var parsed = new URL(url);
|
|
208
|
+
parsed.username = '';
|
|
209
|
+
parsed.password = '';
|
|
210
|
+
parsed.search = '';
|
|
211
|
+
parsed.hash = '';
|
|
212
|
+
return parsed.href;
|
|
213
|
+
} catch (unused) {
|
|
214
|
+
return 'the configured embedding endpoint';
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
function attemptController(callerSignal, timeoutMs) {
|
|
218
|
+
callerSignal === null || callerSignal === void 0 ? void 0 : callerSignal.throwIfAborted();
|
|
219
|
+
var controller = new AbortController();
|
|
220
|
+
var timeoutReason = {};
|
|
221
|
+
var relayAbort = function relayAbort() {
|
|
222
|
+
return controller.abort(callerSignal === null || callerSignal === void 0 ? void 0 : callerSignal.reason);
|
|
223
|
+
};
|
|
224
|
+
callerSignal === null || callerSignal === void 0 ? void 0 : callerSignal.addEventListener('abort', relayAbort, {
|
|
225
|
+
once: true
|
|
226
|
+
});
|
|
227
|
+
if (callerSignal === null || callerSignal === void 0 ? void 0 : callerSignal.aborted) relayAbort();
|
|
228
|
+
var timer = setTimeout(function() {
|
|
229
|
+
return controller.abort(timeoutReason);
|
|
230
|
+
}, timeoutMs);
|
|
231
|
+
return {
|
|
232
|
+
controller: controller,
|
|
233
|
+
timeoutReason: timeoutReason,
|
|
234
|
+
cleanup: function cleanup() {
|
|
235
|
+
clearTimeout(timer);
|
|
236
|
+
callerSignal === null || callerSignal === void 0 ? void 0 : callerSignal.removeEventListener('abort', relayAbort);
|
|
237
|
+
}
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
function disposeResponse(response, controller) {
|
|
241
|
+
var cancellation = response.body && !response.bodyUsed ? response.body.cancel() : undefined;
|
|
242
|
+
controller.abort();
|
|
243
|
+
// The controller owns socket cleanup; observe stream cancellation without delaying the attempt.
|
|
244
|
+
if (cancellation) void cancellation.then(function() {
|
|
245
|
+
return undefined;
|
|
246
|
+
}, function() {
|
|
247
|
+
return undefined;
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
function sleep(ms, signal) {
|
|
251
|
+
signal === null || signal === void 0 ? void 0 : signal.throwIfAborted();
|
|
252
|
+
if (!signal) return new Promise(function(resolve) {
|
|
147
253
|
return setTimeout(resolve, ms);
|
|
148
254
|
});
|
|
255
|
+
return new Promise(function(resolve, reject) {
|
|
256
|
+
var timer;
|
|
257
|
+
var cleanup = function cleanup() {
|
|
258
|
+
if (timer) clearTimeout(timer);
|
|
259
|
+
signal.removeEventListener('abort', onAbort);
|
|
260
|
+
};
|
|
261
|
+
var onAbort = function onAbort() {
|
|
262
|
+
cleanup();
|
|
263
|
+
reject(signal.reason);
|
|
264
|
+
};
|
|
265
|
+
signal.addEventListener('abort', onAbort, {
|
|
266
|
+
once: true
|
|
267
|
+
});
|
|
268
|
+
timer = setTimeout(function() {
|
|
269
|
+
cleanup();
|
|
270
|
+
resolve();
|
|
271
|
+
}, ms);
|
|
272
|
+
if (signal.aborted) onAbort();
|
|
273
|
+
});
|
|
149
274
|
}
|
|
150
|
-
function
|
|
151
|
-
var
|
|
152
|
-
|
|
153
|
-
|
|
275
|
+
function failedRequest(url, phase, attempts, timeoutMs, timedOut) {
|
|
276
|
+
var endpoint = safeUrl(url);
|
|
277
|
+
if (timedOut) {
|
|
278
|
+
return new _errorsts.SenseError('EMBED_MODEL', "".concat(endpoint, " timed out after ").concat(timeoutMs, "ms while waiting for ").concat(phase, " (attempt ").concat(attempts, "/").concat(MAX_ATTEMPTS, "); check the embedding service and network"));
|
|
279
|
+
}
|
|
280
|
+
return new _errorsts.SenseError('EMBED_MODEL', "".concat(endpoint, " failed while waiting for ").concat(phase, " after ").concat(attempts, " attempts; check the embedding service and network"));
|
|
281
|
+
}
|
|
282
|
+
function buffered(response, body, requestUrl) {
|
|
283
|
+
return {
|
|
284
|
+
ok: response.ok,
|
|
285
|
+
status: response.status,
|
|
286
|
+
headers: response.headers,
|
|
287
|
+
body: body,
|
|
288
|
+
url: safeUrl(response.url || requestUrl)
|
|
289
|
+
};
|
|
290
|
+
}
|
|
291
|
+
function fetchWithRetry(_0, _1) {
|
|
292
|
+
return _async_to_generator(function(url, init) {
|
|
293
|
+
var options, _options_attemptTimeoutMs, _options_baseDelayMs, timeoutMs, baseDelayMs, attempt, _options_signal, _attemptController, controller, timeoutReason, cleanup, response, phase, retryDelayMs, retryable, retryAfter, _options_signal1, _options_signal2, body, unused, _options_signal3, timedOut;
|
|
294
|
+
var _arguments = arguments;
|
|
154
295
|
return _ts_generator(this, function(_state) {
|
|
155
296
|
switch(_state.label){
|
|
156
297
|
case 0:
|
|
298
|
+
options = _arguments.length > 2 && _arguments[2] !== void 0 ? _arguments[2] : {};
|
|
299
|
+
timeoutMs = (_options_attemptTimeoutMs = options.attemptTimeoutMs) !== null && _options_attemptTimeoutMs !== void 0 ? _options_attemptTimeoutMs : HTTP_ATTEMPT_TIMEOUT_MS;
|
|
300
|
+
baseDelayMs = (_options_baseDelayMs = options.baseDelayMs) !== null && _options_baseDelayMs !== void 0 ? _options_baseDelayMs : DEFAULT_BASE_DELAY_MS;
|
|
157
301
|
attempt = 0;
|
|
158
302
|
_state.label = 1;
|
|
159
303
|
case 1:
|
|
160
304
|
if (!(attempt < MAX_ATTEMPTS)) return [
|
|
161
305
|
3,
|
|
162
|
-
|
|
306
|
+
12
|
|
163
307
|
];
|
|
308
|
+
(_options_signal = options.signal) === null || _options_signal === void 0 ? void 0 : _options_signal.throwIfAborted();
|
|
309
|
+
_attemptController = attemptController(options.signal, timeoutMs), controller = _attemptController.controller, timeoutReason = _attemptController.timeoutReason, cleanup = _attemptController.cleanup;
|
|
310
|
+
response = void 0;
|
|
311
|
+
phase = 'response headers';
|
|
312
|
+
retryDelayMs = void 0;
|
|
164
313
|
_state.label = 2;
|
|
165
314
|
case 2:
|
|
166
315
|
_state.trys.push([
|
|
167
316
|
2,
|
|
168
|
-
|
|
169
|
-
,
|
|
170
|
-
|
|
317
|
+
7,
|
|
318
|
+
8,
|
|
319
|
+
9
|
|
171
320
|
]);
|
|
172
321
|
return [
|
|
173
322
|
4,
|
|
174
|
-
fetch(url, init)
|
|
323
|
+
fetch(url, _object_spread_props(_object_spread({}, init), {
|
|
324
|
+
signal: controller.signal
|
|
325
|
+
}))
|
|
175
326
|
];
|
|
176
327
|
case 3:
|
|
177
|
-
|
|
178
|
-
if (
|
|
179
|
-
|
|
180
|
-
|
|
328
|
+
response = _state.sent();
|
|
329
|
+
if (!!response.ok) return [
|
|
330
|
+
3,
|
|
331
|
+
4
|
|
181
332
|
];
|
|
182
|
-
|
|
183
|
-
|
|
333
|
+
retryable = response.status === 429 || response.status >= 500;
|
|
334
|
+
if (retryable && attempt < MAX_ATTEMPTS - 1) {
|
|
335
|
+
retryAfter = Number(response.headers.get('retry-after'));
|
|
336
|
+
retryDelayMs = retryAfter > 0 ? Math.min(retryAfter * 1000, MAX_RETRY_AFTER_MS) : baseDelayMs * Math.pow(2, attempt);
|
|
337
|
+
disposeResponse(response, controller);
|
|
338
|
+
} else {
|
|
339
|
+
;
|
|
340
|
+
disposeResponse(response, controller);
|
|
341
|
+
(_options_signal1 = options.signal) === null || _options_signal1 === void 0 ? void 0 : _options_signal1.throwIfAborted();
|
|
342
|
+
return [
|
|
343
|
+
2,
|
|
344
|
+
buffered(response, new ArrayBuffer(0), url)
|
|
345
|
+
];
|
|
346
|
+
}
|
|
184
347
|
return [
|
|
185
|
-
|
|
186
|
-
|
|
348
|
+
3,
|
|
349
|
+
6
|
|
187
350
|
];
|
|
188
351
|
case 4:
|
|
189
|
-
|
|
352
|
+
phase = 'response body';
|
|
190
353
|
return [
|
|
191
|
-
|
|
192
|
-
|
|
354
|
+
4,
|
|
355
|
+
response.arrayBuffer()
|
|
193
356
|
];
|
|
194
357
|
case 5:
|
|
195
|
-
|
|
196
|
-
|
|
358
|
+
body = _state.sent();
|
|
359
|
+
(_options_signal2 = options.signal) === null || _options_signal2 === void 0 ? void 0 : _options_signal2.throwIfAborted();
|
|
197
360
|
return [
|
|
198
|
-
|
|
199
|
-
|
|
361
|
+
2,
|
|
362
|
+
buffered(response, body, url)
|
|
200
363
|
];
|
|
201
364
|
case 6:
|
|
202
|
-
_state.sent();
|
|
203
365
|
return [
|
|
204
366
|
3,
|
|
205
|
-
|
|
367
|
+
9
|
|
206
368
|
];
|
|
207
369
|
case 7:
|
|
370
|
+
unused = _state.sent();
|
|
371
|
+
try {
|
|
372
|
+
;
|
|
373
|
+
(_options_signal3 = options.signal) === null || _options_signal3 === void 0 ? void 0 : _options_signal3.throwIfAborted();
|
|
374
|
+
} finally{
|
|
375
|
+
if (response) disposeResponse(response, controller);
|
|
376
|
+
}
|
|
377
|
+
timedOut = controller.signal.reason === timeoutReason;
|
|
378
|
+
if (attempt === MAX_ATTEMPTS - 1) throw failedRequest(url, phase, attempt + 1, timeoutMs, timedOut);
|
|
379
|
+
retryDelayMs = baseDelayMs * Math.pow(2, attempt);
|
|
380
|
+
return [
|
|
381
|
+
3,
|
|
382
|
+
9
|
|
383
|
+
];
|
|
384
|
+
case 8:
|
|
385
|
+
cleanup();
|
|
386
|
+
return [
|
|
387
|
+
7
|
|
388
|
+
];
|
|
389
|
+
case 9:
|
|
390
|
+
return [
|
|
391
|
+
4,
|
|
392
|
+
sleep(retryDelayMs !== null && retryDelayMs !== void 0 ? retryDelayMs : baseDelayMs * Math.pow(2, attempt), options.signal)
|
|
393
|
+
];
|
|
394
|
+
case 10:
|
|
395
|
+
_state.sent();
|
|
396
|
+
_state.label = 11;
|
|
397
|
+
case 11:
|
|
208
398
|
attempt++;
|
|
209
399
|
return [
|
|
210
400
|
3,
|
|
211
401
|
1
|
|
212
402
|
];
|
|
213
|
-
case
|
|
403
|
+
case 12:
|
|
214
404
|
throw new Error('unreachable');
|
|
215
405
|
}
|
|
216
406
|
});
|
|
217
|
-
})();
|
|
407
|
+
}).apply(this, arguments);
|
|
218
408
|
}
|
|
219
409
|
function probeReachable(url) {
|
|
220
410
|
var timeoutMs = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 1500;
|
|
221
411
|
return _async_to_generator(function() {
|
|
222
|
-
var unused;
|
|
412
|
+
var _attemptController, controller, cleanup, response, unused;
|
|
223
413
|
return _ts_generator(this, function(_state) {
|
|
224
414
|
switch(_state.label){
|
|
225
415
|
case 0:
|
|
416
|
+
_attemptController = attemptController(undefined, timeoutMs), controller = _attemptController.controller, cleanup = _attemptController.cleanup;
|
|
417
|
+
_state.label = 1;
|
|
418
|
+
case 1:
|
|
226
419
|
_state.trys.push([
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
,
|
|
230
|
-
|
|
420
|
+
1,
|
|
421
|
+
3,
|
|
422
|
+
4,
|
|
423
|
+
5
|
|
231
424
|
]);
|
|
232
425
|
return [
|
|
233
426
|
4,
|
|
234
427
|
fetch(url, {
|
|
235
|
-
signal:
|
|
428
|
+
signal: controller.signal
|
|
236
429
|
})
|
|
237
430
|
];
|
|
238
|
-
case
|
|
239
|
-
_state.sent();
|
|
431
|
+
case 2:
|
|
432
|
+
response = _state.sent();
|
|
433
|
+
disposeResponse(response, controller);
|
|
240
434
|
return [
|
|
241
435
|
2,
|
|
242
436
|
true
|
|
243
437
|
];
|
|
244
|
-
case
|
|
438
|
+
case 3:
|
|
245
439
|
unused = _state.sent();
|
|
246
440
|
return [
|
|
247
441
|
2,
|
|
248
442
|
false
|
|
249
443
|
];
|
|
250
|
-
case
|
|
444
|
+
case 4:
|
|
445
|
+
cleanup();
|
|
446
|
+
return [
|
|
447
|
+
7
|
|
448
|
+
];
|
|
449
|
+
case 5:
|
|
251
450
|
return [
|
|
252
451
|
2
|
|
253
452
|
];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/sensemaking/src/embed/http.ts"],"sourcesContent":["const MAX_ATTEMPTS = 3;\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n// Shared retry glue for the HTTP providers: 429/5xx/network failure retry with exponential\n// backoff honoring Retry-After; any other status returns immediately for the caller to handle.\nexport async function fetchWithRetry(url: string, init: RequestInit, baseDelayMs = 200): Promise<Response> {\n for (let attempt = 0; attempt < MAX_ATTEMPTS; attempt++) {\n try {\n const res = await fetch(url, init);\n if (res.ok || (res.status !== 429 && res.status < 500) || attempt === MAX_ATTEMPTS - 1) return res;\n const retryAfter = Number(res.headers.get('retry-after'));\n // Capped: a server naming a huge Retry-After must not stall an embed run for it.\n await sleep(retryAfter > 0 ? Math.min(retryAfter * 1000, 10_000) : baseDelayMs * 2 ** attempt);\n } catch (err) {\n if (attempt === MAX_ATTEMPTS - 1) throw err;\n await sleep(baseDelayMs * 2 ** attempt);\n }\n }\n throw new Error('unreachable');\n}\n\n// Any HTTP response means the endpoint is up; only a network failure or the timeout counts as\n// unreachable, so an air-gapped machine never waits more than timeoutMs on `sense status`.\nexport async function probeReachable(url: string, timeoutMs = 1500): Promise<boolean> {\n try {\n await fetch(url, { signal: AbortSignal.timeout(timeoutMs) });\n return true;\n } catch {\n return false;\n }\n}\n"],"names":["fetchWithRetry","probeReachable","MAX_ATTEMPTS","sleep","ms","Promise","resolve","setTimeout","url","init","baseDelayMs","attempt","res","retryAfter","err","fetch","ok","status","Number","headers","get","Math","min","Error","timeoutMs","signal","AbortSignal","timeout"],"mappings":";;;;;;;;;;;QAQsBA;eAAAA;;QAkBAC;eAAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA1BtB,IAAMC,eAAe;AAErB,SAASC,MAAMC,EAAU;IACvB,OAAO,IAAIC,QAAQ,SAACC;eAAYC,WAAWD,SAASF;;AACtD;AAIO,SAAeJ,eAAeQ,GAAW,EAAEC,IAAiB;QAAEC,cAAAA,iEAAc;;YACxEC,SAECC,KAEAC,YAGCC;;;;oBAPFH,UAAU;;;yBAAGA,CAAAA,UAAUT,YAAW;;;;;;;;;;;;oBAE3B;;wBAAMa,MAAMP,KAAKC;;;oBAAvBG,MAAM;oBACZ,IAAIA,IAAII,EAAE,IAAKJ,IAAIK,MAAM,KAAK,OAAOL,IAAIK,MAAM,GAAG,OAAQN,YAAYT,eAAe,GAAG;;wBAAOU;;oBACzFC,aAAaK,OAAON,IAAIO,OAAO,CAACC,GAAG,CAAC;oBAC1C,iFAAiF;oBACjF;;wBAAMjB,MAAMU,aAAa,IAAIQ,KAAKC,GAAG,CAACT,aAAa,MAAM,SAAUH,uBAAc,GAAKC;;;oBAAtF;;;;;;oBACOG;oBACP,IAAIH,YAAYT,eAAe,GAAG,MAAMY;oBACxC;;wBAAMX,MAAMO,uBAAc,GAAKC;;;oBAA/B;;;;;;oBAT0CA;;;;;;oBAY9C,MAAM,IAAIY,MAAM;;;IAClB;;AAIO,SAAetB,eAAeO,GAAW;QAAEgB,YAAAA,iEAAY;;;;;;;;;;;;oBAE1D;;wBAAMT,MAAMP,KAAK;4BAAEiB,QAAQC,YAAYC,OAAO,CAACH;wBAAW;;;oBAA1D;oBACA;;wBAAO;;;;oBAEP;;wBAAO;;;;;;;;IAEX"}
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/sensemaking/src/embed/http.ts"],"sourcesContent":["import { SenseError } from '../errors.ts';\n\nconst MAX_ATTEMPTS = 3;\nconst MAX_RETRY_AFTER_MS = 10_000;\nconst DEFAULT_BASE_DELAY_MS = 200;\n\n// Initial policy bounds small API/metadata responses separately from model-file downloads.\nexport const HTTP_ATTEMPT_TIMEOUT_MS = 30_000;\nexport const MODEL_FILE_ATTEMPT_TIMEOUT_MS = 5 * 60_000;\n\nexport type FetchRequestInit = Omit<RequestInit, 'signal'> & { signal?: never };\n\nexport interface FetchRetryOptions {\n signal?: AbortSignal;\n attemptTimeoutMs?: number;\n baseDelayMs?: number;\n}\n\nexport interface BufferedResponse {\n readonly ok: boolean;\n readonly status: number;\n readonly headers: Headers;\n readonly body: ArrayBuffer;\n readonly url: string;\n}\n\ntype ResponsePhase = 'response headers' | 'response body';\n\nfunction safeUrl(url: string): string {\n try {\n const parsed = new URL(url);\n parsed.username = '';\n parsed.password = '';\n parsed.search = '';\n parsed.hash = '';\n return parsed.href;\n } catch {\n return 'the configured embedding endpoint';\n }\n}\n\nfunction attemptController(\n callerSignal: AbortSignal | undefined,\n timeoutMs: number\n): {\n controller: AbortController;\n timeoutReason: object;\n cleanup: () => void;\n} {\n callerSignal?.throwIfAborted();\n const controller = new AbortController();\n const timeoutReason = {};\n const relayAbort = () => controller.abort(callerSignal?.reason);\n callerSignal?.addEventListener('abort', relayAbort, { once: true });\n if (callerSignal?.aborted) relayAbort();\n const timer = setTimeout(() => controller.abort(timeoutReason), timeoutMs);\n return {\n controller,\n timeoutReason,\n cleanup: () => {\n clearTimeout(timer);\n callerSignal?.removeEventListener('abort', relayAbort);\n },\n };\n}\n\nfunction disposeResponse(response: Response, controller: AbortController): void {\n const cancellation = response.body && !response.bodyUsed ? response.body.cancel() : undefined;\n controller.abort();\n // The controller owns socket cleanup; observe stream cancellation without delaying the attempt.\n if (cancellation)\n void cancellation.then(\n () => undefined,\n () => undefined\n );\n}\n\nfunction sleep(ms: number, signal: AbortSignal | undefined): Promise<void> {\n signal?.throwIfAborted();\n if (!signal) return new Promise((resolve) => setTimeout(resolve, ms));\n return new Promise((resolve, reject) => {\n let timer: ReturnType<typeof setTimeout> | undefined;\n const cleanup = () => {\n if (timer) clearTimeout(timer);\n signal.removeEventListener('abort', onAbort);\n };\n const onAbort = () => {\n cleanup();\n reject(signal.reason);\n };\n signal.addEventListener('abort', onAbort, { once: true });\n timer = setTimeout(() => {\n cleanup();\n resolve();\n }, ms);\n if (signal.aborted) onAbort();\n });\n}\n\nfunction failedRequest(url: string, phase: ResponsePhase, attempts: number, timeoutMs: number, timedOut: boolean): SenseError {\n const endpoint = safeUrl(url);\n if (timedOut) {\n return new SenseError('EMBED_MODEL', `${endpoint} timed out after ${timeoutMs}ms while waiting for ${phase} (attempt ${attempts}/${MAX_ATTEMPTS}); check the embedding service and network`);\n }\n return new SenseError('EMBED_MODEL', `${endpoint} failed while waiting for ${phase} after ${attempts} attempts; check the embedding service and network`);\n}\n\nfunction buffered(response: Response, body: ArrayBuffer, requestUrl: string): BufferedResponse {\n return {\n ok: response.ok,\n status: response.status,\n headers: response.headers,\n body,\n url: safeUrl(response.url || requestUrl),\n };\n}\n\n// Each attempt covers response headers and the complete successful body. Retry cleanup and\n// backoff honor one caller signal without transferring ownership of that signal.\nexport async function fetchWithRetry(url: string, init: FetchRequestInit, options: FetchRetryOptions = {}): Promise<BufferedResponse> {\n const timeoutMs = options.attemptTimeoutMs ?? HTTP_ATTEMPT_TIMEOUT_MS;\n const baseDelayMs = options.baseDelayMs ?? DEFAULT_BASE_DELAY_MS;\n for (let attempt = 0; attempt < MAX_ATTEMPTS; attempt++) {\n options.signal?.throwIfAborted();\n const { controller, timeoutReason, cleanup } = attemptController(options.signal, timeoutMs);\n let response: Response | undefined;\n let phase: ResponsePhase = 'response headers';\n let retryDelayMs: number | undefined;\n try {\n response = await fetch(url, { ...init, signal: controller.signal });\n if (!response.ok) {\n const retryable = response.status === 429 || response.status >= 500;\n if (retryable && attempt < MAX_ATTEMPTS - 1) {\n const retryAfter = Number(response.headers.get('retry-after'));\n retryDelayMs = retryAfter > 0 ? Math.min(retryAfter * 1000, MAX_RETRY_AFTER_MS) : baseDelayMs * 2 ** attempt;\n disposeResponse(response, controller);\n } else {\n disposeResponse(response, controller);\n options.signal?.throwIfAborted();\n return buffered(response, new ArrayBuffer(0), url);\n }\n } else {\n phase = 'response body';\n const body = await response.arrayBuffer();\n options.signal?.throwIfAborted();\n return buffered(response, body, url);\n }\n } catch {\n try {\n options.signal?.throwIfAborted();\n } finally {\n if (response) disposeResponse(response, controller);\n }\n const timedOut = controller.signal.reason === timeoutReason;\n if (attempt === MAX_ATTEMPTS - 1) throw failedRequest(url, phase, attempt + 1, timeoutMs, timedOut);\n retryDelayMs = baseDelayMs * 2 ** attempt;\n } finally {\n cleanup();\n }\n await sleep(retryDelayMs ?? baseDelayMs * 2 ** attempt, options.signal);\n }\n throw new Error('unreachable');\n}\n\n// Any HTTP response means the endpoint is up. Abort it immediately because status does not\n// consume its body, and bound the headers wait for an air-gapped machine.\nexport async function probeReachable(url: string, timeoutMs = 1500): Promise<boolean> {\n const { controller, cleanup } = attemptController(undefined, timeoutMs);\n try {\n const response = await fetch(url, { signal: controller.signal });\n disposeResponse(response, controller);\n return true;\n } catch {\n return false;\n } finally {\n cleanup();\n }\n}\n"],"names":["HTTP_ATTEMPT_TIMEOUT_MS","MODEL_FILE_ATTEMPT_TIMEOUT_MS","fetchWithRetry","probeReachable","MAX_ATTEMPTS","MAX_RETRY_AFTER_MS","DEFAULT_BASE_DELAY_MS","safeUrl","url","parsed","URL","username","password","search","hash","href","attemptController","callerSignal","timeoutMs","throwIfAborted","controller","AbortController","timeoutReason","relayAbort","abort","reason","addEventListener","once","aborted","timer","setTimeout","cleanup","clearTimeout","removeEventListener","disposeResponse","response","cancellation","body","bodyUsed","cancel","undefined","then","sleep","ms","signal","Promise","resolve","reject","onAbort","failedRequest","phase","attempts","timedOut","endpoint","SenseError","buffered","requestUrl","ok","status","headers","init","options","baseDelayMs","attempt","retryDelayMs","retryable","retryAfter","attemptTimeoutMs","fetch","Number","get","Math","min","ArrayBuffer","arrayBuffer","Error"],"mappings":"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"}
|
package/dist/cjs/embed/openai.js
CHANGED
|
@@ -9,6 +9,7 @@ Object.defineProperty(exports, "openaiProvider", {
|
|
|
9
9
|
}
|
|
10
10
|
});
|
|
11
11
|
var _errorsts = require("../errors.js");
|
|
12
|
+
var _endpointts = require("./endpoint.js");
|
|
12
13
|
var _httpts = require("./http.js");
|
|
13
14
|
function _array_like_to_array(arr, len) {
|
|
14
15
|
if (len == null || len > arr.length) len = arr.length;
|
|
@@ -154,6 +155,10 @@ function _ts_generator(thisArg, body) {
|
|
|
154
155
|
};
|
|
155
156
|
}
|
|
156
157
|
}
|
|
158
|
+
function _type_of(obj) {
|
|
159
|
+
"@swc/helpers - typeof";
|
|
160
|
+
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
161
|
+
}
|
|
157
162
|
function _unsupported_iterable_to_array(o, minLen) {
|
|
158
163
|
if (!o) return;
|
|
159
164
|
if (typeof o === "string") return _array_like_to_array(o, minLen);
|
|
@@ -163,12 +168,30 @@ function _unsupported_iterable_to_array(o, minLen) {
|
|
|
163
168
|
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
|
|
164
169
|
}
|
|
165
170
|
var BATCH_CAP = 64;
|
|
171
|
+
function isEmbedding(value) {
|
|
172
|
+
if (value === null || (typeof value === "undefined" ? "undefined" : _type_of(value)) !== 'object' || !('embedding' in value) || !Array.isArray(value.embedding) || !value.embedding.every(function(part) {
|
|
173
|
+
return typeof part === 'number';
|
|
174
|
+
})) return false;
|
|
175
|
+
return !('index' in value) || value.index === undefined || typeof value.index === 'number';
|
|
176
|
+
}
|
|
177
|
+
function parseBody(body, endpoint) {
|
|
178
|
+
var decoded;
|
|
179
|
+
try {
|
|
180
|
+
decoded = JSON.parse(new TextDecoder().decode(body));
|
|
181
|
+
} catch (unused) {
|
|
182
|
+
throw new _errorsts.SenseError('EMBED_MODEL', "".concat(endpoint, " returned invalid JSON"));
|
|
183
|
+
}
|
|
184
|
+
if (decoded === null || (typeof decoded === "undefined" ? "undefined" : _type_of(decoded)) !== 'object' || !('data' in decoded) || !Array.isArray(decoded.data) || !decoded.data.every(isEmbedding)) {
|
|
185
|
+
throw new _errorsts.SenseError('EMBED_MODEL', "".concat(endpoint, " returned an invalid embedding response"));
|
|
186
|
+
}
|
|
187
|
+
return decoded.data;
|
|
188
|
+
}
|
|
166
189
|
function openaiProvider(model, url, keyEnv) {
|
|
167
190
|
return _async_to_generator(function() {
|
|
168
191
|
var base, headers, key, dims;
|
|
169
|
-
function post(texts) {
|
|
192
|
+
function post(texts, options) {
|
|
170
193
|
return _async_to_generator(function() {
|
|
171
|
-
var res, body, data;
|
|
194
|
+
var _options_signal, res, body, data;
|
|
172
195
|
return _ts_generator(this, function(_state) {
|
|
173
196
|
switch(_state.label){
|
|
174
197
|
case 0:
|
|
@@ -181,27 +204,26 @@ function openaiProvider(model, url, keyEnv) {
|
|
|
181
204
|
model: model,
|
|
182
205
|
input: texts
|
|
183
206
|
})
|
|
207
|
+
}, {
|
|
208
|
+
signal: options === null || options === void 0 ? void 0 : options.signal,
|
|
209
|
+
attemptTimeoutMs: _httpts.HTTP_ATTEMPT_TIMEOUT_MS
|
|
184
210
|
})
|
|
185
211
|
];
|
|
186
212
|
case 1:
|
|
187
213
|
res = _state.sent();
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
res.json()
|
|
192
|
-
];
|
|
193
|
-
case 2:
|
|
194
|
-
body = _state.sent();
|
|
214
|
+
options === null || options === void 0 ? void 0 : (_options_signal = options.signal) === null || _options_signal === void 0 ? void 0 : _options_signal.throwIfAborted();
|
|
215
|
+
if (!res.ok) throw new _errorsts.SenseError('EMBED_MODEL', "".concat(res.url, " -> HTTP ").concat(res.status));
|
|
216
|
+
body = parseBody(res.body, res.url);
|
|
195
217
|
// The schema carries `index` because response order is not promised, and the caller maps
|
|
196
218
|
// vectors back to chunks positionally: sort by it whenever every element has one.
|
|
197
|
-
data = body.
|
|
219
|
+
data = body.every(function(d) {
|
|
198
220
|
return typeof d.index === 'number';
|
|
199
|
-
}) ? _to_consumable_array(body
|
|
221
|
+
}) ? _to_consumable_array(body).sort(function(a, b) {
|
|
200
222
|
return a.index - b.index;
|
|
201
|
-
}) : body
|
|
223
|
+
}) : body;
|
|
202
224
|
// A server that drops an input (empty or over-length strings are the usual cause) would
|
|
203
225
|
// otherwise shift every later vector onto the wrong chunk, silently.
|
|
204
|
-
if (data.length !== texts.length) throw new _errorsts.SenseError('EMBED_MODEL', "".concat(
|
|
226
|
+
if (data.length !== texts.length) throw new _errorsts.SenseError('EMBED_MODEL', "".concat(res.url, " returned ").concat(data.length, " embeddings for ").concat(texts.length, " inputs"));
|
|
205
227
|
return [
|
|
206
228
|
2,
|
|
207
229
|
data.map(function(d) {
|
|
@@ -215,8 +237,8 @@ function openaiProvider(model, url, keyEnv) {
|
|
|
215
237
|
return _ts_generator(this, function(_state) {
|
|
216
238
|
switch(_state.label){
|
|
217
239
|
case 0:
|
|
218
|
-
|
|
219
|
-
base
|
|
240
|
+
base = (0, _endpointts.effectiveEmbedEndpoint)('openai', url);
|
|
241
|
+
if (!base) throw new _errorsts.SenseError('EMBED_MODEL', 'embed.provider "openai" requires a url');
|
|
220
242
|
headers = {
|
|
221
243
|
'content-type': 'application/json'
|
|
222
244
|
};
|
|
@@ -239,7 +261,7 @@ function openaiProvider(model, url, keyEnv) {
|
|
|
239
261
|
dims: dims,
|
|
240
262
|
batchCap: BATCH_CAP,
|
|
241
263
|
embedDocuments: post,
|
|
242
|
-
embedQuery: function embedQuery(text) {
|
|
264
|
+
embedQuery: function embedQuery(text, options) {
|
|
243
265
|
return _async_to_generator(function() {
|
|
244
266
|
return _ts_generator(this, function(_state) {
|
|
245
267
|
switch(_state.label){
|
|
@@ -248,7 +270,7 @@ function openaiProvider(model, url, keyEnv) {
|
|
|
248
270
|
4,
|
|
249
271
|
post([
|
|
250
272
|
text
|
|
251
|
-
])
|
|
273
|
+
], options)
|
|
252
274
|
];
|
|
253
275
|
case 1:
|
|
254
276
|
return [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/sensemaking/src/embed/openai.ts"],"sourcesContent":["import { SenseError } from '../errors.ts';\nimport { fetchWithRetry } from './http.ts';\nimport type { EmbedProvider } from './types.ts';\n\nconst BATCH_CAP = 64;\n\n// One POST against any OpenAI-compatible /embeddings endpoint: Ollama, LM Studio, Cloudflare\n// Workers AI, Jina, Voyage, and Gemini's compat base URL all serve this shape.\nexport async function openaiProvider(model: string, url: string | undefined, keyEnv: string | undefined): Promise<EmbedProvider> {\n if (!
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/sensemaking/src/embed/openai.ts"],"sourcesContent":["import { SenseError } from '../errors.ts';\nimport { effectiveEmbedEndpoint } from './endpoint.ts';\nimport { fetchWithRetry, HTTP_ATTEMPT_TIMEOUT_MS } from './http.ts';\nimport type { EmbedCallOptions, EmbedProvider } from './types.ts';\n\nconst BATCH_CAP = 64;\n\ninterface OpenaiEmbedding {\n embedding: number[];\n index?: number;\n}\n\nfunction isEmbedding(value: unknown): value is OpenaiEmbedding {\n if (value === null || typeof value !== 'object' || !('embedding' in value) || !Array.isArray(value.embedding) || !value.embedding.every((part) => typeof part === 'number')) return false;\n return !('index' in value) || value.index === undefined || typeof value.index === 'number';\n}\n\nfunction parseBody(body: ArrayBuffer, endpoint: string): OpenaiEmbedding[] {\n let decoded: unknown;\n try {\n decoded = JSON.parse(new TextDecoder().decode(body));\n } catch {\n throw new SenseError('EMBED_MODEL', `${endpoint} returned invalid JSON`);\n }\n if (decoded === null || typeof decoded !== 'object' || !('data' in decoded) || !Array.isArray(decoded.data) || !decoded.data.every(isEmbedding)) {\n throw new SenseError('EMBED_MODEL', `${endpoint} returned an invalid embedding response`);\n }\n return decoded.data;\n}\n\n// One POST against any OpenAI-compatible /embeddings endpoint: Ollama, LM Studio, Cloudflare\n// Workers AI, Jina, Voyage, and Gemini's compat base URL all serve this shape.\nexport async function openaiProvider(model: string, url: string | undefined, keyEnv: string | undefined): Promise<EmbedProvider> {\n const base = effectiveEmbedEndpoint('openai', url);\n if (!base) throw new SenseError('EMBED_MODEL', 'embed.provider \"openai\" requires a url');\n const headers: Record<string, string> = { 'content-type': 'application/json' };\n const key = keyEnv ? process.env[keyEnv] : undefined;\n if (key) headers.authorization = `Bearer ${key}`;\n\n async function post(texts: string[], options?: EmbedCallOptions): Promise<Float32Array[]> {\n const res = await fetchWithRetry(`${base}/embeddings`, { method: 'POST', headers, body: JSON.stringify({ model, input: texts }) }, { signal: options?.signal, attemptTimeoutMs: HTTP_ATTEMPT_TIMEOUT_MS });\n options?.signal?.throwIfAborted();\n if (!res.ok) throw new SenseError('EMBED_MODEL', `${res.url} -> HTTP ${res.status}`);\n const body = parseBody(res.body, res.url);\n // The schema carries `index` because response order is not promised, and the caller maps\n // vectors back to chunks positionally: sort by it whenever every element has one.\n const data = body.every((d): d is OpenaiEmbedding & { index: number } => typeof d.index === 'number') ? [...body].sort((a, b) => a.index - b.index) : body;\n // A server that drops an input (empty or over-length strings are the usual cause) would\n // otherwise shift every later vector onto the wrong chunk, silently.\n if (data.length !== texts.length) throw new SenseError('EMBED_MODEL', `${res.url} returned ${data.length} embeddings for ${texts.length} inputs`);\n return data.map((d) => Float32Array.from(d.embedding));\n }\n\n const dims = (await post(['dimension probe']))[0].length;\n // embedQuery and embedDocuments are symmetric here; per-model prefixes like nomic's\n // search_document/search_query are not applied.\n return { id: `openai:${base}:${model}`, dims, batchCap: BATCH_CAP, embedDocuments: post, embedQuery: async (text, options) => (await post([text], options))[0] };\n}\n"],"names":["openaiProvider","BATCH_CAP","isEmbedding","value","Array","isArray","embedding","every","part","index","undefined","parseBody","body","endpoint","decoded","JSON","parse","TextDecoder","decode","SenseError","data","model","url","keyEnv","base","headers","key","dims","post","texts","options","res","fetchWithRetry","method","stringify","input","signal","attemptTimeoutMs","HTTP_ATTEMPT_TIMEOUT_MS","throwIfAborted","ok","status","d","sort","a","b","length","map","Float32Array","from","effectiveEmbedEndpoint","process","env","authorization","id","batchCap","embedDocuments","embedQuery","text"],"mappings":"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"}
|
|
@@ -1,12 +1,18 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type Config } from '../config/index.js';
|
|
2
2
|
import type { Store, VectorCandidate, VectorSimilar } from '../store/types.js';
|
|
3
|
+
import { type EmbedCallOptions } from './types.js';
|
|
3
4
|
export declare function toStore(full: Float32Array, dims: number, int8: boolean): {
|
|
4
5
|
v: Float32Array;
|
|
5
6
|
scale: number;
|
|
6
7
|
};
|
|
7
|
-
export declare function embedPending(store: Store, cfg: Config, allowed?: ReadonlySet<string
|
|
8
|
+
export declare function embedPending(store: Store, cfg: Config, allowed?: ReadonlySet<string>, expectedSignature?: string | null, options?: EmbedCallOptions): Promise<void>;
|
|
8
9
|
export declare function ensureDocumentEmbeddings(store: Store, _cfg: Config, allowed: ReadonlySet<string>): Promise<void>;
|
|
9
|
-
export
|
|
10
|
+
export interface PreparedSemanticQuery {
|
|
11
|
+
readonly vector: Float32Array;
|
|
12
|
+
readonly storeDims: number;
|
|
13
|
+
}
|
|
14
|
+
export declare function prepareSemanticQuery(cfg: Config, terms: string, options?: EmbedCallOptions): Promise<PreparedSemanticQuery>;
|
|
15
|
+
export declare function semanticCandidates(store: Store, prepared: PreparedSemanticQuery, fetch: number, allowed?: Set<string>): Promise<VectorCandidate[]>;
|
|
10
16
|
export declare function hasEmbedding(store: Store, path: string): Promise<boolean>;
|
|
11
17
|
export declare function similarNotes(store: Store, _cfg: Config, path: string, opts: {
|
|
12
18
|
exclude: Set<string>;
|
|
@@ -1,12 +1,18 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type Config } from '../config/index.js';
|
|
2
2
|
import type { Store, VectorCandidate, VectorSimilar } from '../store/types.js';
|
|
3
|
+
import { type EmbedCallOptions } from './types.js';
|
|
3
4
|
export declare function toStore(full: Float32Array, dims: number, int8: boolean): {
|
|
4
5
|
v: Float32Array;
|
|
5
6
|
scale: number;
|
|
6
7
|
};
|
|
7
|
-
export declare function embedPending(store: Store, cfg: Config, allowed?: ReadonlySet<string
|
|
8
|
+
export declare function embedPending(store: Store, cfg: Config, allowed?: ReadonlySet<string>, expectedSignature?: string | null, options?: EmbedCallOptions): Promise<void>;
|
|
8
9
|
export declare function ensureDocumentEmbeddings(store: Store, _cfg: Config, allowed: ReadonlySet<string>): Promise<void>;
|
|
9
|
-
export
|
|
10
|
+
export interface PreparedSemanticQuery {
|
|
11
|
+
readonly vector: Float32Array;
|
|
12
|
+
readonly storeDims: number;
|
|
13
|
+
}
|
|
14
|
+
export declare function prepareSemanticQuery(cfg: Config, terms: string, options?: EmbedCallOptions): Promise<PreparedSemanticQuery>;
|
|
15
|
+
export declare function semanticCandidates(store: Store, prepared: PreparedSemanticQuery, fetch: number, allowed?: Set<string>): Promise<VectorCandidate[]>;
|
|
10
16
|
export declare function hasEmbedding(store: Store, path: string): Promise<boolean>;
|
|
11
17
|
export declare function similarNotes(store: Store, _cfg: Config, path: string, opts: {
|
|
12
18
|
exclude: Set<string>;
|