sensemaking 0.25.1 → 0.26.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 +13 -9
- package/dist/cjs/cli/index.d.cts +1 -1
- package/dist/cjs/cli/index.d.ts +1 -1
- package/dist/cjs/cli/index.js +1 -1
- 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/related.js +4 -3
- package/dist/cjs/cli/related.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 +16 -1
- package/dist/cjs/commands/peek.d.ts +16 -1
- package/dist/cjs/commands/peek.js +71 -33
- 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 +26 -3
- package/dist/cjs/commands/search.d.ts +26 -3
- package/dist/cjs/commands/search.js +211 -71
- package/dist/cjs/commands/search.js.map +1 -1
- package/dist/cjs/commands/signals.d.cts +4 -3
- package/dist/cjs/commands/signals.d.ts +4 -3
- package/dist/cjs/commands/signals.js +13 -4
- 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/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 +1 -1
- package/dist/esm/cli/index.js +1 -1
- 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/related.js +5 -3
- package/dist/esm/cli/related.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 +16 -1
- package/dist/esm/commands/peek.js +35 -9
- 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 +26 -3
- package/dist/esm/commands/search.js +85 -18
- package/dist/esm/commands/search.js.map +1 -1
- package/dist/esm/commands/signals.d.ts +4 -3
- package/dist/esm/commands/signals.js +11 -4
- 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/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/SKILL.md +4 -2
- package/skills/sense/references/stores/duckdb.md +1 -1
- 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/cohere.js
CHANGED
|
@@ -9,6 +9,7 @@ Object.defineProperty(exports, "cohereProvider", {
|
|
|
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 asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
|
|
14
15
|
try {
|
|
@@ -135,13 +136,37 @@ function _ts_generator(thisArg, body) {
|
|
|
135
136
|
};
|
|
136
137
|
}
|
|
137
138
|
}
|
|
139
|
+
function _type_of(obj) {
|
|
140
|
+
"@swc/helpers - typeof";
|
|
141
|
+
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
142
|
+
}
|
|
138
143
|
var BATCH_CAP = 96;
|
|
144
|
+
function isNumberArray(value) {
|
|
145
|
+
return Array.isArray(value) && value.every(function(part) {
|
|
146
|
+
return typeof part === 'number';
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
function isEmbeddingArray(value) {
|
|
150
|
+
return Array.isArray(value) && value.every(isNumberArray);
|
|
151
|
+
}
|
|
152
|
+
function parseBody(body, endpoint) {
|
|
153
|
+
var decoded;
|
|
154
|
+
try {
|
|
155
|
+
decoded = JSON.parse(new TextDecoder().decode(body));
|
|
156
|
+
} catch (unused) {
|
|
157
|
+
throw new _errorsts.SenseError('EMBED_MODEL', "".concat(endpoint, " returned invalid JSON"));
|
|
158
|
+
}
|
|
159
|
+
if (decoded === null || (typeof decoded === "undefined" ? "undefined" : _type_of(decoded)) !== 'object' || !('embeddings' in decoded) || decoded.embeddings === null || _type_of(decoded.embeddings) !== 'object' || !('float' in decoded.embeddings) || !isEmbeddingArray(decoded.embeddings.float)) {
|
|
160
|
+
throw new _errorsts.SenseError('EMBED_MODEL', "".concat(endpoint, " returned an invalid embedding response"));
|
|
161
|
+
}
|
|
162
|
+
return decoded.embeddings.float;
|
|
163
|
+
}
|
|
139
164
|
function cohereProvider(model, url, keyEnv) {
|
|
140
165
|
return _async_to_generator(function() {
|
|
141
166
|
var base, headers, key, dims;
|
|
142
|
-
function post(texts, inputType) {
|
|
167
|
+
function post(texts, inputType, options) {
|
|
143
168
|
return _async_to_generator(function() {
|
|
144
|
-
var res, body, vectors;
|
|
169
|
+
var _options_signal, res, body, vectors;
|
|
145
170
|
return _ts_generator(this, function(_state) {
|
|
146
171
|
switch(_state.label){
|
|
147
172
|
case 0:
|
|
@@ -158,21 +183,20 @@ function cohereProvider(model, url, keyEnv) {
|
|
|
158
183
|
'float'
|
|
159
184
|
]
|
|
160
185
|
})
|
|
186
|
+
}, {
|
|
187
|
+
signal: options === null || options === void 0 ? void 0 : options.signal,
|
|
188
|
+
attemptTimeoutMs: _httpts.HTTP_ATTEMPT_TIMEOUT_MS
|
|
161
189
|
})
|
|
162
190
|
];
|
|
163
191
|
case 1:
|
|
164
192
|
res = _state.sent();
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
res.json()
|
|
169
|
-
];
|
|
170
|
-
case 2:
|
|
171
|
-
body = _state.sent();
|
|
193
|
+
options === null || options === void 0 ? void 0 : (_options_signal = options.signal) === null || _options_signal === void 0 ? void 0 : _options_signal.throwIfAborted();
|
|
194
|
+
if (!res.ok) throw new _errorsts.SenseError('EMBED_MODEL', "".concat(res.url, " -> HTTP ").concat(res.status));
|
|
195
|
+
body = parseBody(res.body, res.url);
|
|
172
196
|
// Cohere returns one vector per text in order, with no index field to re-sort by; a caller
|
|
173
197
|
// maps them positionally, so the count below must be trustworthy.
|
|
174
|
-
vectors = body
|
|
175
|
-
if (vectors.length !== texts.length) throw new _errorsts.SenseError('EMBED_MODEL', "".concat(
|
|
198
|
+
vectors = body;
|
|
199
|
+
if (vectors.length !== texts.length) throw new _errorsts.SenseError('EMBED_MODEL', "".concat(res.url, " returned ").concat(vectors.length, " embeddings for ").concat(texts.length, " inputs"));
|
|
176
200
|
return [
|
|
177
201
|
2,
|
|
178
202
|
vectors.map(function(v) {
|
|
@@ -186,7 +210,8 @@ function cohereProvider(model, url, keyEnv) {
|
|
|
186
210
|
return _ts_generator(this, function(_state) {
|
|
187
211
|
switch(_state.label){
|
|
188
212
|
case 0:
|
|
189
|
-
base = (
|
|
213
|
+
base = (0, _endpointts.effectiveEmbedEndpoint)('cohere', url);
|
|
214
|
+
if (!base) throw new _errorsts.SenseError('EMBED_MODEL', 'cohere endpoint resolution failed');
|
|
190
215
|
headers = {
|
|
191
216
|
'content-type': 'application/json'
|
|
192
217
|
};
|
|
@@ -206,10 +231,10 @@ function cohereProvider(model, url, keyEnv) {
|
|
|
206
231
|
id: "cohere:".concat(base, ":").concat(model),
|
|
207
232
|
dims: dims,
|
|
208
233
|
batchCap: BATCH_CAP,
|
|
209
|
-
embedDocuments: function embedDocuments(texts) {
|
|
210
|
-
return post(texts, 'search_document');
|
|
234
|
+
embedDocuments: function embedDocuments(texts, options) {
|
|
235
|
+
return post(texts, 'search_document', options);
|
|
211
236
|
},
|
|
212
|
-
embedQuery: function embedQuery(text) {
|
|
237
|
+
embedQuery: function embedQuery(text, options) {
|
|
213
238
|
return _async_to_generator(function() {
|
|
214
239
|
return _ts_generator(this, function(_state) {
|
|
215
240
|
switch(_state.label){
|
|
@@ -218,7 +243,7 @@ function cohereProvider(model, url, keyEnv) {
|
|
|
218
243
|
4,
|
|
219
244
|
post([
|
|
220
245
|
text
|
|
221
|
-
], 'search_query')
|
|
246
|
+
], 'search_query', options)
|
|
222
247
|
];
|
|
223
248
|
case 1:
|
|
224
249
|
return [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/sensemaking/src/embed/cohere.ts"],"sourcesContent":["import { SenseError } from '../errors.ts';\nimport { fetchWithRetry } from './http.ts';\nimport type { EmbedProvider } from './types.ts';\n\nconst BATCH_CAP = 96;\n\n// Cohere's native /v2/embed: input_type distinguishes doc vs query embeddings, which the\n// OpenAI-compatible shape cannot express.\nexport async function cohereProvider(model: string, url: string | undefined, keyEnv: string | undefined): Promise<EmbedProvider> {\n const base = (
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/sensemaking/src/embed/cohere.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 = 96;\n\nfunction isNumberArray(value: unknown): value is number[] {\n return Array.isArray(value) && value.every((part) => typeof part === 'number');\n}\n\nfunction isEmbeddingArray(value: unknown): value is number[][] {\n return Array.isArray(value) && value.every(isNumberArray);\n}\n\nfunction parseBody(body: ArrayBuffer, endpoint: string): number[][] {\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' || !('embeddings' in decoded) || decoded.embeddings === null || typeof decoded.embeddings !== 'object' || !('float' in decoded.embeddings) || !isEmbeddingArray(decoded.embeddings.float)) {\n throw new SenseError('EMBED_MODEL', `${endpoint} returned an invalid embedding response`);\n }\n return decoded.embeddings.float;\n}\n\n// Cohere's native /v2/embed: input_type distinguishes doc vs query embeddings, which the\n// OpenAI-compatible shape cannot express.\nexport async function cohereProvider(model: string, url: string | undefined, keyEnv: string | undefined): Promise<EmbedProvider> {\n const base = effectiveEmbedEndpoint('cohere', url);\n if (!base) throw new SenseError('EMBED_MODEL', 'cohere endpoint resolution failed');\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[], inputType: 'search_document' | 'search_query', options?: EmbedCallOptions): Promise<Float32Array[]> {\n const res = await fetchWithRetry(`${base}/v2/embed`, { method: 'POST', headers, body: JSON.stringify({ model, input_type: inputType, texts, embedding_types: ['float'] }) }, { 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 // Cohere returns one vector per text in order, with no index field to re-sort by; a caller\n // maps them positionally, so the count below must be trustworthy.\n const vectors = body;\n if (vectors.length !== texts.length) throw new SenseError('EMBED_MODEL', `${res.url} returned ${vectors.length} embeddings for ${texts.length} inputs`);\n return vectors.map((v) => Float32Array.from(v));\n }\n\n const dims = (await post(['dimension probe'], 'search_query'))[0].length;\n return { id: `cohere:${base}:${model}`, dims, batchCap: BATCH_CAP, embedDocuments: (texts, options) => post(texts, 'search_document', options), embedQuery: async (text, options) => (await post([text], 'search_query', options))[0] };\n}\n"],"names":["cohereProvider","BATCH_CAP","isNumberArray","value","Array","isArray","every","part","isEmbeddingArray","parseBody","body","endpoint","decoded","JSON","parse","TextDecoder","decode","SenseError","embeddings","float","model","url","keyEnv","base","headers","key","dims","post","texts","inputType","options","res","vectors","fetchWithRetry","method","stringify","input_type","embedding_types","signal","attemptTimeoutMs","HTTP_ATTEMPT_TIMEOUT_MS","throwIfAborted","ok","status","length","map","v","Float32Array","from","effectiveEmbedEndpoint","process","env","undefined","authorization","id","batchCap","embedDocuments","embedQuery","text"],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
function _export(target, all) {
|
|
6
|
+
for(var name in all)Object.defineProperty(target, name, {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
_export(exports, {
|
|
12
|
+
get effectiveEmbedEndpoint () {
|
|
13
|
+
return effectiveEmbedEndpoint;
|
|
14
|
+
},
|
|
15
|
+
get embedEndpointIdentity () {
|
|
16
|
+
return embedEndpointIdentity;
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
var _nodecrypto = require("node:crypto");
|
|
20
|
+
var DEFAULT_COHERE_ENDPOINT = 'https://api.cohere.com';
|
|
21
|
+
function effectiveEmbedEndpoint(provider, url) {
|
|
22
|
+
if (provider === 'static') return undefined;
|
|
23
|
+
var endpoint = provider === 'cohere' ? url !== null && url !== void 0 ? url : DEFAULT_COHERE_ENDPOINT : url;
|
|
24
|
+
return endpoint === null || endpoint === void 0 ? void 0 : endpoint.replace(/\/+$/, '');
|
|
25
|
+
}
|
|
26
|
+
function embedEndpointIdentity(provider, url) {
|
|
27
|
+
var endpoint = effectiveEmbedEndpoint(provider, url);
|
|
28
|
+
return endpoint === undefined ? undefined : (0, _nodecrypto.createHash)('sha256').update(endpoint).digest('hex');
|
|
29
|
+
}
|
|
30
|
+
/* CJS INTEROP */ if (exports.__esModule && exports.default) { try { Object.defineProperty(exports.default, '__esModule', { value: true }); for (var key in exports) { exports.default[key] = exports[key]; } } catch (_) {}; module.exports = exports.default; }
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/sensemaking/src/embed/endpoint.ts"],"sourcesContent":["import { createHash } from 'node:crypto';\n\nconst DEFAULT_COHERE_ENDPOINT = 'https://api.cohere.com';\n\nexport function effectiveEmbedEndpoint(provider: 'static' | 'openai' | 'cohere', url: string | undefined): string | undefined {\n if (provider === 'static') return undefined;\n const endpoint = provider === 'cohere' ? (url ?? DEFAULT_COHERE_ENDPOINT) : url;\n return endpoint?.replace(/\\/+$/, '');\n}\n\nexport function embedEndpointIdentity(provider: 'static' | 'openai' | 'cohere', url: string | undefined): string | undefined {\n const endpoint = effectiveEmbedEndpoint(provider, url);\n return endpoint === undefined ? undefined : createHash('sha256').update(endpoint).digest('hex');\n}\n"],"names":["effectiveEmbedEndpoint","embedEndpointIdentity","DEFAULT_COHERE_ENDPOINT","provider","url","undefined","endpoint","replace","createHash","update","digest"],"mappings":";;;;;;;;;;;QAIgBA;eAAAA;;QAMAC;eAAAA;;;0BAVW;AAE3B,IAAMC,0BAA0B;AAEzB,SAASF,uBAAuBG,QAAwC,EAAEC,GAAuB;IACtG,IAAID,aAAa,UAAU,OAAOE;IAClC,IAAMC,WAAWH,aAAa,WAAYC,gBAAAA,iBAAAA,MAAOF,0BAA2BE;IAC5E,OAAOE,qBAAAA,+BAAAA,SAAUC,OAAO,CAAC,QAAQ;AACnC;AAEO,SAASN,sBAAsBE,QAAwC,EAAEC,GAAuB;IACrG,IAAME,WAAWN,uBAAuBG,UAAUC;IAClD,OAAOE,aAAaD,YAAYA,YAAYG,IAAAA,sBAAU,EAAC,UAAUC,MAAM,CAACH,UAAUI,MAAM,CAAC;AAC3F"}
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
-
export
|
|
1
|
+
export interface ChunkText {
|
|
2
|
+
text: string;
|
|
3
|
+
identity: string;
|
|
4
|
+
}
|
|
5
|
+
export declare function identifyChunkText(text: string): ChunkText;
|
|
6
|
+
export declare function stashChunkText(key: object, texts: Map<string, ChunkText[]>): void;
|
|
2
7
|
export declare function rekeyChunkText(from: object, to: object): void;
|
|
3
|
-
export declare function takeChunkText(key: object): Map<string,
|
|
8
|
+
export declare function takeChunkText(key: object): Map<string, ChunkText[]> | undefined;
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
-
export
|
|
1
|
+
export interface ChunkText {
|
|
2
|
+
text: string;
|
|
3
|
+
identity: string;
|
|
4
|
+
}
|
|
5
|
+
export declare function identifyChunkText(text: string): ChunkText;
|
|
6
|
+
export declare function stashChunkText(key: object, texts: Map<string, ChunkText[]>): void;
|
|
2
7
|
export declare function rekeyChunkText(from: object, to: object): void;
|
|
3
|
-
export declare function takeChunkText(key: object): Map<string,
|
|
8
|
+
export declare function takeChunkText(key: object): Map<string, ChunkText[]> | undefined;
|
|
@@ -9,6 +9,9 @@ function _export(target, all) {
|
|
|
9
9
|
});
|
|
10
10
|
}
|
|
11
11
|
_export(exports, {
|
|
12
|
+
get identifyChunkText () {
|
|
13
|
+
return identifyChunkText;
|
|
14
|
+
},
|
|
12
15
|
get rekeyChunkText () {
|
|
13
16
|
return rekeyChunkText;
|
|
14
17
|
},
|
|
@@ -19,6 +22,13 @@ _export(exports, {
|
|
|
19
22
|
return takeChunkText;
|
|
20
23
|
}
|
|
21
24
|
});
|
|
25
|
+
var _nodecrypto = require("node:crypto");
|
|
26
|
+
function identifyChunkText(text) {
|
|
27
|
+
return {
|
|
28
|
+
text: text,
|
|
29
|
+
identity: (0, _nodecrypto.createHash)('sha256').update(text).digest('hex')
|
|
30
|
+
};
|
|
31
|
+
}
|
|
22
32
|
// Chunk text from reconcile to embed time when both run in one process, so the text is neither
|
|
23
33
|
// re-derived nor persisted. Keyed by the store it was stashed against, so an entry dies with it.
|
|
24
34
|
var HANDOFF = new WeakMap();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/sensemaking/src/embed/handoff.ts"],"sourcesContent":["// Chunk text from reconcile to embed time when both run in one process, so the text is neither\n// re-derived nor persisted. Keyed by the store it was stashed against, so an entry dies with it.\nconst HANDOFF = new WeakMap<object, Map<string,
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/sensemaking/src/embed/handoff.ts"],"sourcesContent":["import { createHash } from 'node:crypto';\n\nexport interface ChunkText {\n text: string;\n identity: string;\n}\n\nexport function identifyChunkText(text: string): ChunkText {\n return { text, identity: createHash('sha256').update(text).digest('hex') };\n}\n\n// Chunk text from reconcile to embed time when both run in one process, so the text is neither\n// re-derived nor persisted. Keyed by the store it was stashed against, so an entry dies with it.\nconst HANDOFF = new WeakMap<object, Map<string, ChunkText[]>>();\n\nexport function stashChunkText(key: object, texts: Map<string, ChunkText[]>): void {\n if (texts.size > 0) HANDOFF.set(key, texts);\n}\n\n// Moves an entry from one key to another: reconcile runs before the store object exists, so it\n// stashes against the connection and open() re-keys onto the store it then builds.\nexport function rekeyChunkText(from: object, to: object): void {\n const texts = HANDOFF.get(from);\n if (!texts) return;\n HANDOFF.delete(from);\n HANDOFF.set(to, texts);\n}\n\n// Read once and drop: the text is consumed by the embed pass that follows reconcile, and holding\n// it past that would pin the tree's prose in memory for the life of the store.\nexport function takeChunkText(key: object): Map<string, ChunkText[]> | undefined {\n const texts = HANDOFF.get(key);\n HANDOFF.delete(key);\n return texts;\n}\n"],"names":["identifyChunkText","rekeyChunkText","stashChunkText","takeChunkText","text","identity","createHash","update","digest","HANDOFF","WeakMap","key","texts","size","set","from","to","get","delete"],"mappings":";;;;;;;;;;;QAOgBA;eAAAA;;QAcAC;eAAAA;;QANAC;eAAAA;;QAeAC;eAAAA;;;0BA9BW;AAOpB,SAASH,kBAAkBI,IAAY;IAC5C,OAAO;QAAEA,MAAAA;QAAMC,UAAUC,IAAAA,sBAAU,EAAC,UAAUC,MAAM,CAACH,MAAMI,MAAM,CAAC;IAAO;AAC3E;AAEA,+FAA+F;AAC/F,iGAAiG;AACjG,IAAMC,UAAU,IAAIC;AAEb,SAASR,eAAeS,GAAW,EAAEC,KAA+B;IACzE,IAAIA,MAAMC,IAAI,GAAG,GAAGJ,QAAQK,GAAG,CAACH,KAAKC;AACvC;AAIO,SAASX,eAAec,IAAY,EAAEC,EAAU;IACrD,IAAMJ,QAAQH,QAAQQ,GAAG,CAACF;IAC1B,IAAI,CAACH,OAAO;IACZH,QAAQS,MAAM,CAACH;IACfN,QAAQK,GAAG,CAACE,IAAIJ;AAClB;AAIO,SAAST,cAAcQ,GAAW;IACvC,IAAMC,QAAQH,QAAQQ,GAAG,CAACN;IAC1BF,QAAQS,MAAM,CAACP;IACf,OAAOC;AACT"}
|
|
@@ -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.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>;
|