@anvia/core 1.0.0-rc.1 → 1.0.0-rc.10
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 +381 -85
- package/dist/agent/index.d.ts +57 -19
- package/dist/agent/index.js +32 -17
- package/dist/agent/interactions/index.d.ts +122 -0
- package/dist/agent/interactions/index.js +20 -0
- package/dist/agent-DWzW9SoH.d.ts +150 -0
- package/dist/chunk-3RM57ZT2.js +31 -0
- package/dist/chunk-3RM57ZT2.js.map +1 -0
- package/dist/chunk-3RWESPUG.js +331 -0
- package/dist/chunk-3RWESPUG.js.map +1 -0
- package/dist/{chunk-DMPUP4R3.js → chunk-3SKZ2BKP.js} +7 -5
- package/dist/chunk-3SKZ2BKP.js.map +1 -0
- package/dist/chunk-3XQGVDU5.js +69 -0
- package/dist/chunk-3XQGVDU5.js.map +1 -0
- package/dist/{chunk-5XKDW36Z.js → chunk-5C6B6ZRH.js} +70 -75
- package/dist/chunk-5C6B6ZRH.js.map +1 -0
- package/dist/chunk-6BBOCFHV.js +323 -0
- package/dist/chunk-6BBOCFHV.js.map +1 -0
- package/dist/chunk-7JLAIN6E.js +15 -0
- package/dist/chunk-7JLAIN6E.js.map +1 -0
- package/dist/chunk-7PHMK7W4.js +1516 -0
- package/dist/chunk-7PHMK7W4.js.map +1 -0
- package/dist/{chunk-FNQB2JEH.js → chunk-AZB6N7P4.js} +94 -65
- package/dist/chunk-AZB6N7P4.js.map +1 -0
- package/dist/{chunk-I6G7BC42.js → chunk-D4PACGPA.js} +2 -6
- package/dist/chunk-D4PACGPA.js.map +1 -0
- package/dist/chunk-EFLT7XZD.js +51 -0
- package/dist/chunk-EFLT7XZD.js.map +1 -0
- package/dist/{chunk-R2LJSQUW.js → chunk-EMZKPRE6.js} +267 -107
- package/dist/chunk-EMZKPRE6.js.map +1 -0
- package/dist/chunk-I3Q7XSBB.js +59 -0
- package/dist/chunk-I3Q7XSBB.js.map +1 -0
- package/dist/chunk-J6LVLV6P.js +13 -0
- package/dist/chunk-J6LVLV6P.js.map +1 -0
- package/dist/chunk-LTXABCOO.js +127 -0
- package/dist/chunk-LTXABCOO.js.map +1 -0
- package/dist/chunk-OJBFDBLG.js +164 -0
- package/dist/chunk-OJBFDBLG.js.map +1 -0
- package/dist/chunk-QGX73TSQ.js +177 -0
- package/dist/chunk-QGX73TSQ.js.map +1 -0
- package/dist/chunk-QOUPWOGW.js +29 -0
- package/dist/chunk-QOUPWOGW.js.map +1 -0
- package/dist/chunk-SJMSS5SI.js +171 -0
- package/dist/chunk-SJMSS5SI.js.map +1 -0
- package/dist/chunk-T2C3CGDQ.js +56 -0
- package/dist/chunk-T2C3CGDQ.js.map +1 -0
- package/dist/chunk-VX3HS6PE.js +4569 -0
- package/dist/chunk-VX3HS6PE.js.map +1 -0
- package/dist/chunk-X4LK4ODN.js +86 -0
- package/dist/chunk-X4LK4ODN.js.map +1 -0
- package/dist/chunk-ZA564323.js +331 -0
- package/dist/chunk-ZA564323.js.map +1 -0
- package/dist/completion/index.d.ts +5 -4
- package/dist/completion/index.js +34 -28
- package/dist/documents/index.d.ts +34 -0
- package/dist/documents/index.js +340 -0
- package/dist/documents/index.js.map +1 -0
- package/dist/{dynamic-tools-i9woysFa.d.ts → dynamic-tools-aIZlg5x1.d.ts} +21 -9
- package/dist/embeddings/index.d.ts +11 -9
- package/dist/embeddings/index.js +3 -3
- package/dist/evals/index.d.ts +54 -25
- package/dist/evals/index.js +197 -114
- package/dist/evals/index.js.map +1 -1
- package/dist/extractor/index.d.ts +23 -26
- package/dist/extractor/index.js +9 -8
- package/dist/guardrails/index.d.ts +7 -129
- package/dist/guardrails/index.js +1 -1
- package/dist/image-generation/index.d.ts +18 -16
- package/dist/image-generation/index.js +4 -2
- package/dist/index.d.ts +24 -25
- package/dist/index.js +78 -56
- package/dist/internal/agent.d.ts +33 -30
- package/dist/internal/agent.js +50 -15
- package/dist/internal/agent.js.map +1 -1
- package/dist/mcp/index.d.ts +7 -15
- package/dist/mcp/index.js +3 -348
- package/dist/mcp/index.js.map +1 -1
- package/dist/memory/index.d.ts +20 -6
- package/dist/memory/index.js +12 -10
- package/dist/{middleware-KynLg_RW.d.ts → middleware-kcF8AusP.d.ts} +10 -7
- package/dist/model-call-options-CZkSw_xN.d.ts +6 -0
- package/dist/model-listing/index.d.ts +3 -1
- package/dist/observability/index.d.ts +22 -6
- package/dist/observability/index.js +10 -5
- package/dist/observability/index.js.map +1 -1
- package/dist/pipeline/index.d.ts +103 -58
- package/dist/pipeline/index.js +421 -236
- package/dist/pipeline/index.js.map +1 -1
- package/dist/provider-output-error-BEwDgVv3.d.ts +99 -0
- package/dist/{retry-D3Ruy-ba.d.ts → retry-CjvSlKGW.d.ts} +2 -1
- package/dist/skills/index.d.ts +5 -4
- package/dist/skills/index.js +8 -7
- package/dist/speech-generation/index.d.ts +37 -0
- package/dist/speech-generation/index.js +10 -0
- package/dist/text-ZLECpQE7.d.ts +32 -0
- package/dist/{think-tool-DZqZj2LV.d.ts → think-tool-BwCsJ365.d.ts} +16 -2
- package/dist/tool/index.d.ts +10 -7
- package/dist/tool/index.js +13 -10
- package/dist/{tool-C_8GudXn.d.ts → tool-BpqpoRSE.d.ts} +17 -8
- package/dist/transcription/index.d.ts +23 -14
- package/dist/transcription/index.js +4 -2
- package/dist/types-CXNE592e.d.ts +130 -0
- package/dist/types-Cr4uiYo5.d.ts +99 -0
- package/dist/{types-DhQfwiZn.d.ts → types-DC1U1XwW.d.ts} +1 -1
- package/dist/types-DKOXVTcq.d.ts +155 -0
- package/dist/types-DgvozfPc.d.ts +349 -0
- package/dist/types-DhkodEft.d.ts +105 -0
- package/dist/types-DjqRHeAi.d.ts +31 -0
- package/dist/{index-DxB74ybJ.d.ts → types-Sue2hb_L.d.ts} +142 -88
- package/dist/vector-store/index.d.ts +34 -34
- package/dist/vector-store/index.js +10 -6
- package/package.json +22 -16
- package/dist/agent-DGYY_onS.d.ts +0 -145
- package/dist/audio-generation/index.d.ts +0 -31
- package/dist/audio-generation/index.js +0 -8
- package/dist/chunk-5XKDW36Z.js.map +0 -1
- package/dist/chunk-6WGGTJE6.js +0 -139
- package/dist/chunk-6WGGTJE6.js.map +0 -1
- package/dist/chunk-A3UBYTJT.js +0 -157
- package/dist/chunk-A3UBYTJT.js.map +0 -1
- package/dist/chunk-ADH7NNCS.js +0 -512
- package/dist/chunk-ADH7NNCS.js.map +0 -1
- package/dist/chunk-CQNNSZPG.js +0 -9
- package/dist/chunk-CQNNSZPG.js.map +0 -1
- package/dist/chunk-DMPUP4R3.js.map +0 -1
- package/dist/chunk-DZ3CKYTH.js +0 -267
- package/dist/chunk-DZ3CKYTH.js.map +0 -1
- package/dist/chunk-FNQB2JEH.js.map +0 -1
- package/dist/chunk-I6G7BC42.js.map +0 -1
- package/dist/chunk-IL3ZSNJI.js +0 -3748
- package/dist/chunk-IL3ZSNJI.js.map +0 -1
- package/dist/chunk-J6GNQART.js +0 -122
- package/dist/chunk-J6GNQART.js.map +0 -1
- package/dist/chunk-M3IOWB4Y.js +0 -280
- package/dist/chunk-M3IOWB4Y.js.map +0 -1
- package/dist/chunk-QY5GZ7HR.js +0 -39
- package/dist/chunk-QY5GZ7HR.js.map +0 -1
- package/dist/chunk-R2LJSQUW.js.map +0 -1
- package/dist/chunk-RFDVKCIE.js +0 -12
- package/dist/chunk-RFDVKCIE.js.map +0 -1
- package/dist/chunk-RMUBRRSK.js +0 -34
- package/dist/chunk-RMUBRRSK.js.map +0 -1
- package/dist/chunk-RXKHOYEH.js +0 -466
- package/dist/chunk-RXKHOYEH.js.map +0 -1
- package/dist/chunk-XDRSPSR7.js +0 -38
- package/dist/chunk-XDRSPSR7.js.map +0 -1
- package/dist/chunk-XWUC7CIT.js +0 -1
- package/dist/chunk-XWUC7CIT.js.map +0 -1
- package/dist/errors-CYKUcU89.d.ts +0 -17
- package/dist/json-Zo7K3xmt.d.ts +0 -40
- package/dist/loaders/index.d.ts +0 -86
- package/dist/loaders/index.js +0 -299
- package/dist/loaders/index.js.map +0 -1
- package/dist/types-B3A4YxaA.d.ts +0 -354
- package/dist/types-BBEGKB9m.d.ts +0 -119
- package/dist/types-DT3nEemY.d.ts +0 -79
- package/dist/types-DulRCYdB.d.ts +0 -70
- package/dist/types-p55Jc-sr.d.ts +0 -47
- package/dist/ui/index.d.ts +0 -107
- package/dist/ui/index.js +0 -10
- /package/dist/{audio-generation → agent/interactions}/index.js.map +0 -0
- /package/dist/{ui → speech-generation}/index.js.map +0 -0
|
@@ -1,18 +1,38 @@
|
|
|
1
1
|
import {
|
|
2
2
|
cosineSimilarity,
|
|
3
|
+
embedSparseQuery,
|
|
3
4
|
embedText
|
|
4
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-ZA564323.js";
|
|
5
6
|
import {
|
|
7
|
+
parseMessage,
|
|
6
8
|
toProviderJsonSchema
|
|
7
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-QGX73TSQ.js";
|
|
8
10
|
import {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
11
|
+
isJsonValue
|
|
12
|
+
} from "./chunk-3XQGVDU5.js";
|
|
13
|
+
import {
|
|
14
|
+
resolveRetryOptions,
|
|
15
|
+
runWithRetries,
|
|
16
|
+
throwIfAborted
|
|
17
|
+
} from "./chunk-3RWESPUG.js";
|
|
12
18
|
|
|
13
19
|
// src/vector-store/index.ts
|
|
14
20
|
import { z } from "zod";
|
|
15
21
|
|
|
22
|
+
// src/internal/vector-search-options.ts
|
|
23
|
+
function assertPositiveSearchLimit(value, name = "topK") {
|
|
24
|
+
if (!Number.isSafeInteger(value) || value <= 0) {
|
|
25
|
+
throw new RangeError(`${name} must be a positive safe integer.`);
|
|
26
|
+
}
|
|
27
|
+
return value;
|
|
28
|
+
}
|
|
29
|
+
function assertFiniteMinScore(value, name = "minScore") {
|
|
30
|
+
if (value !== void 0 && !Number.isFinite(value)) {
|
|
31
|
+
throw new RangeError(`${name} must be a finite number.`);
|
|
32
|
+
}
|
|
33
|
+
return value;
|
|
34
|
+
}
|
|
35
|
+
|
|
16
36
|
// src/internal/agent-runtime/approval-requirement.ts
|
|
17
37
|
function toolMayRequireApproval(requirement) {
|
|
18
38
|
return requirement !== void 0 && requirement !== false;
|
|
@@ -62,22 +82,63 @@ var ToolJsonError = class extends Error {
|
|
|
62
82
|
};
|
|
63
83
|
|
|
64
84
|
// src/tool/tool.ts
|
|
85
|
+
var richToolOutput = /* @__PURE__ */ Symbol("anvia.tool-output.content");
|
|
86
|
+
var ToolResultSerializationError = class extends TypeError {
|
|
87
|
+
constructor(output) {
|
|
88
|
+
super("Tool output must be a string, a strict JSON value, or ToolOutput.content(...).");
|
|
89
|
+
this.output = output;
|
|
90
|
+
this.name = "ToolResultSerializationError";
|
|
91
|
+
}
|
|
92
|
+
output;
|
|
93
|
+
};
|
|
65
94
|
var ToolOutput = {
|
|
66
95
|
content(content) {
|
|
67
|
-
return content;
|
|
96
|
+
return { [richToolOutput]: true, content };
|
|
68
97
|
}
|
|
69
98
|
};
|
|
70
99
|
function normalizeToolResultOutput(output) {
|
|
71
|
-
|
|
100
|
+
if (typeof output === "string") {
|
|
101
|
+
return { type: "text", value: output };
|
|
102
|
+
}
|
|
103
|
+
if (isRichToolOutput(output)) {
|
|
104
|
+
try {
|
|
105
|
+
const message = parseMessage({
|
|
106
|
+
role: "tool",
|
|
107
|
+
content: [
|
|
108
|
+
{
|
|
109
|
+
type: "tool-result",
|
|
110
|
+
toolCallId: "validation",
|
|
111
|
+
toolName: "validation",
|
|
112
|
+
output: { type: "content", value: output.content }
|
|
113
|
+
}
|
|
114
|
+
]
|
|
115
|
+
});
|
|
116
|
+
if (message.role !== "tool") throw new TypeError("Unexpected message role");
|
|
117
|
+
const result = message.content[0];
|
|
118
|
+
if (result?.type !== "tool-result") throw new TypeError("Unexpected tool result part");
|
|
119
|
+
if (result?.output.type !== "content") throw new TypeError("Unexpected tool output");
|
|
120
|
+
return result.output;
|
|
121
|
+
} catch {
|
|
122
|
+
throw new ToolResultSerializationError(output);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
if (isJsonValue(output)) {
|
|
126
|
+
return { type: "json", value: output };
|
|
127
|
+
}
|
|
128
|
+
throw new ToolResultSerializationError(output);
|
|
72
129
|
}
|
|
73
130
|
function toolResultContentToText(content) {
|
|
74
|
-
return content.map((item) => item.type === "text" ? item.text : `[
|
|
131
|
+
return content.map((item) => item.type === "text" ? item.text : `[file:${item.mediaType}]`).join("\n");
|
|
132
|
+
}
|
|
133
|
+
function isRichToolOutput(value) {
|
|
134
|
+
return typeof value === "object" && value !== null && richToolOutput in value;
|
|
75
135
|
}
|
|
76
136
|
function parseToolArgs(args) {
|
|
77
|
-
|
|
78
|
-
|
|
137
|
+
const value = JSON.parse(args);
|
|
138
|
+
if (!isJsonValue(value)) {
|
|
139
|
+
throw new TypeError("Tool arguments must be a JSON value.");
|
|
79
140
|
}
|
|
80
|
-
return
|
|
141
|
+
return value;
|
|
81
142
|
}
|
|
82
143
|
|
|
83
144
|
// src/internal/agent-runtime/prepared-tool-call.ts
|
|
@@ -119,6 +180,9 @@ function prepareToolCall(tool, args) {
|
|
|
119
180
|
} catch (error) {
|
|
120
181
|
throw asToolCallError(tool.name, error);
|
|
121
182
|
}
|
|
183
|
+
return prepareToolCallFromInput(tool, input);
|
|
184
|
+
}
|
|
185
|
+
function prepareToolCallFromInput(tool, input) {
|
|
122
186
|
return {
|
|
123
187
|
input,
|
|
124
188
|
async call(context) {
|
|
@@ -299,6 +363,75 @@ function seededRandom(seed) {
|
|
|
299
363
|
};
|
|
300
364
|
}
|
|
301
365
|
|
|
366
|
+
// src/vector-store/retrieve.ts
|
|
367
|
+
async function retrieveDocuments(options) {
|
|
368
|
+
assertPositiveSearchLimit(options.topK);
|
|
369
|
+
assertFiniteMinScore(options.minScore);
|
|
370
|
+
throwIfAborted(options.abortSignal);
|
|
371
|
+
const retries = resolveRetries(options.retries);
|
|
372
|
+
const search = (operation) => runWithRetries(operation, retries, {
|
|
373
|
+
streaming: false,
|
|
374
|
+
abortSignal: options.abortSignal
|
|
375
|
+
});
|
|
376
|
+
if ("model" in options && options.model !== void 0) {
|
|
377
|
+
const { embedding } = await embedText({
|
|
378
|
+
model: options.model,
|
|
379
|
+
text: options.query,
|
|
380
|
+
retries: options.retries,
|
|
381
|
+
abortSignal: options.abortSignal
|
|
382
|
+
});
|
|
383
|
+
return deduplicateResults(
|
|
384
|
+
await search(
|
|
385
|
+
() => options.store.search({
|
|
386
|
+
vector: embedding.vector,
|
|
387
|
+
topK: options.topK,
|
|
388
|
+
minScore: options.minScore,
|
|
389
|
+
filter: options.filter,
|
|
390
|
+
abortSignal: options.abortSignal
|
|
391
|
+
})
|
|
392
|
+
)
|
|
393
|
+
);
|
|
394
|
+
}
|
|
395
|
+
const [{ embedding: dense }, { embedding: sparse }] = await Promise.all([
|
|
396
|
+
embedText({
|
|
397
|
+
model: options.models.dense,
|
|
398
|
+
text: options.query,
|
|
399
|
+
retries: options.retries,
|
|
400
|
+
abortSignal: options.abortSignal
|
|
401
|
+
}),
|
|
402
|
+
embedSparseQuery({
|
|
403
|
+
model: options.models.sparse,
|
|
404
|
+
query: options.query,
|
|
405
|
+
retries: options.retries,
|
|
406
|
+
abortSignal: options.abortSignal
|
|
407
|
+
})
|
|
408
|
+
]);
|
|
409
|
+
return deduplicateResults(
|
|
410
|
+
await search(
|
|
411
|
+
() => options.store.searchHybrid({
|
|
412
|
+
vector: dense.vector,
|
|
413
|
+
sparseVector: sparse.vector,
|
|
414
|
+
fusion: options.fusion,
|
|
415
|
+
topK: options.topK,
|
|
416
|
+
minScore: options.minScore,
|
|
417
|
+
filter: options.filter,
|
|
418
|
+
abortSignal: options.abortSignal
|
|
419
|
+
})
|
|
420
|
+
)
|
|
421
|
+
);
|
|
422
|
+
}
|
|
423
|
+
function deduplicateResults(results) {
|
|
424
|
+
const bestById = /* @__PURE__ */ new Map();
|
|
425
|
+
for (const result of results) {
|
|
426
|
+
const current = bestById.get(result.id);
|
|
427
|
+
if (current === void 0 || result.score > current.score) bestById.set(result.id, result);
|
|
428
|
+
}
|
|
429
|
+
return [...bestById.values()].sort((left, right) => right.score - left.score);
|
|
430
|
+
}
|
|
431
|
+
function resolveRetries(setting) {
|
|
432
|
+
return setting === void 0 || setting === false ? void 0 : resolveRetryOptions(setting);
|
|
433
|
+
}
|
|
434
|
+
|
|
302
435
|
// src/vector-store/index.ts
|
|
303
436
|
var InMemoryVectorStore = class _InMemoryVectorStore {
|
|
304
437
|
documents = /* @__PURE__ */ new Map();
|
|
@@ -307,22 +440,25 @@ var InMemoryVectorStore = class _InMemoryVectorStore {
|
|
|
307
440
|
embeddingDimension;
|
|
308
441
|
constructor(options = {}) {
|
|
309
442
|
this.indexStrategy = options.index ?? { type: "bruteForce" };
|
|
443
|
+
if (options.dimensions !== void 0 && (!Number.isSafeInteger(options.dimensions) || options.dimensions < 1)) {
|
|
444
|
+
throw new RangeError("Vector dimensions must be a positive safe integer.");
|
|
445
|
+
}
|
|
446
|
+
this.embeddingDimension = options.dimensions;
|
|
310
447
|
}
|
|
311
|
-
static fromDocuments(
|
|
448
|
+
static fromDocuments(options) {
|
|
312
449
|
const store = new _InMemoryVectorStore(options);
|
|
313
|
-
store.
|
|
450
|
+
store.replaceDocuments(options.documents);
|
|
314
451
|
return store;
|
|
315
452
|
}
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
this.documents.set(document.id, document);
|
|
320
|
-
}
|
|
321
|
-
this.rebuildLshIndex();
|
|
322
|
-
return this;
|
|
453
|
+
async ensure() {
|
|
454
|
+
}
|
|
455
|
+
async validate() {
|
|
323
456
|
}
|
|
324
|
-
|
|
325
|
-
|
|
457
|
+
async upsert(options) {
|
|
458
|
+
this.replaceDocuments(options.documents);
|
|
459
|
+
}
|
|
460
|
+
get(options) {
|
|
461
|
+
return this.documents.get(options.id);
|
|
326
462
|
}
|
|
327
463
|
values() {
|
|
328
464
|
return [...this.documents.values()];
|
|
@@ -333,18 +469,75 @@ var InMemoryVectorStore = class _InMemoryVectorStore {
|
|
|
333
469
|
isEmpty() {
|
|
334
470
|
return this.documents.size === 0;
|
|
335
471
|
}
|
|
336
|
-
|
|
337
|
-
|
|
472
|
+
async search(request) {
|
|
473
|
+
throwIfAborted2(request.abortSignal);
|
|
474
|
+
assertPositiveSearchLimit(request.topK);
|
|
475
|
+
assertFiniteMinScore(request.minScore);
|
|
476
|
+
const queryEmbedding = { document: "", vector: request.vector };
|
|
477
|
+
const results = this.candidates(queryEmbedding).filter((document) => matchesVectorFilter(document.metadata, request.filter)).flatMap((document) => {
|
|
478
|
+
const score = bestScore(queryEmbedding, document.embeddings);
|
|
479
|
+
if (score === void 0 || request.minScore !== void 0 && score < request.minScore) {
|
|
480
|
+
return [];
|
|
481
|
+
}
|
|
482
|
+
let result = {
|
|
483
|
+
score,
|
|
484
|
+
id: document.id,
|
|
485
|
+
document: document.document
|
|
486
|
+
};
|
|
487
|
+
if (document.metadata !== void 0) {
|
|
488
|
+
result = { ...result, metadata: document.metadata };
|
|
489
|
+
}
|
|
490
|
+
return [result];
|
|
491
|
+
}).sort((left, right) => right.score - left.score).slice(0, request.topK);
|
|
492
|
+
throwIfAborted2(request.abortSignal);
|
|
493
|
+
return results;
|
|
494
|
+
}
|
|
495
|
+
async inspect(request) {
|
|
496
|
+
throwIfAborted2(request.abortSignal);
|
|
497
|
+
const limit = assertPositiveSearchLimit(request.limit);
|
|
498
|
+
const start = Math.max(0, Math.trunc(Number(request.cursor ?? "0")));
|
|
499
|
+
const documents = this.values().filter(
|
|
500
|
+
(document) => matchesVectorFilter(document.metadata, request.filter)
|
|
501
|
+
);
|
|
502
|
+
const page = documents.slice(start, start + limit);
|
|
503
|
+
const nextOffset = start + page.length;
|
|
504
|
+
const result = {
|
|
505
|
+
items: page.map((document) => {
|
|
506
|
+
let item = {
|
|
507
|
+
id: document.id,
|
|
508
|
+
document: document.document
|
|
509
|
+
};
|
|
510
|
+
if (document.metadata !== void 0) {
|
|
511
|
+
item = { ...item, metadata: document.metadata };
|
|
512
|
+
}
|
|
513
|
+
return item;
|
|
514
|
+
}),
|
|
515
|
+
totalCount: documents.length
|
|
516
|
+
};
|
|
517
|
+
if (nextOffset < documents.length) result.nextCursor = String(nextOffset);
|
|
518
|
+
throwIfAborted2(request.abortSignal);
|
|
519
|
+
return result;
|
|
520
|
+
}
|
|
521
|
+
replaceDocuments(documents) {
|
|
522
|
+
const ids = /* @__PURE__ */ new Set();
|
|
523
|
+
for (const document of documents) {
|
|
524
|
+
if (ids.has(document.id)) throw new TypeError(`Duplicate vector document id: ${document.id}`);
|
|
525
|
+
ids.add(document.id);
|
|
526
|
+
if (document.embeddings.length === 0) {
|
|
527
|
+
throw new TypeError(`Vector document ${document.id} must contain at least one embedding.`);
|
|
528
|
+
}
|
|
529
|
+
for (const embedding of document.embeddings)
|
|
530
|
+
assertFiniteVector(embedding.vector, document.id);
|
|
531
|
+
}
|
|
532
|
+
this.validateDocumentDimensions(documents);
|
|
533
|
+
for (const document of documents) this.documents.set(document.id, document);
|
|
534
|
+
this.rebuildLshIndex();
|
|
338
535
|
}
|
|
339
536
|
candidates(queryEmbedding) {
|
|
340
537
|
this.validateQueryDimension(queryEmbedding);
|
|
341
|
-
if (this.indexStrategy.type !== "lsh" || this.lshIndex === void 0)
|
|
342
|
-
return this.values();
|
|
343
|
-
}
|
|
538
|
+
if (this.indexStrategy.type !== "lsh" || this.lshIndex === void 0) return this.values();
|
|
344
539
|
const candidateIds = this.lshIndex.query(queryEmbedding.vector);
|
|
345
|
-
if (candidateIds.size === 0)
|
|
346
|
-
return this.values();
|
|
347
|
-
}
|
|
540
|
+
if (candidateIds.size === 0) return this.values();
|
|
348
541
|
return [...candidateIds].flatMap((id) => {
|
|
349
542
|
const document = this.documents.get(id);
|
|
350
543
|
return document === void 0 ? [] : [document];
|
|
@@ -362,9 +555,7 @@ var InMemoryVectorStore = class _InMemoryVectorStore {
|
|
|
362
555
|
}
|
|
363
556
|
const index = new LshIndex(firstEmbedding.vector.length, this.indexStrategy);
|
|
364
557
|
for (const document of this.documents.values()) {
|
|
365
|
-
for (const embedding of document.embeddings)
|
|
366
|
-
index.insert(document.id, embedding.vector);
|
|
367
|
-
}
|
|
558
|
+
for (const embedding of document.embeddings) index.insert(document.id, embedding.vector);
|
|
368
559
|
}
|
|
369
560
|
this.lshIndex = index;
|
|
370
561
|
}
|
|
@@ -378,77 +569,26 @@ var InMemoryVectorStore = class _InMemoryVectorStore {
|
|
|
378
569
|
this.embeddingDimension = dimension;
|
|
379
570
|
}
|
|
380
571
|
validateQueryDimension(queryEmbedding) {
|
|
381
|
-
if (this.embeddingDimension
|
|
382
|
-
|
|
572
|
+
if (this.embeddingDimension !== void 0) {
|
|
573
|
+
validateEmbeddingDimension(this.embeddingDimension, queryEmbedding, "query");
|
|
383
574
|
}
|
|
384
|
-
validateEmbeddingDimension(this.embeddingDimension, queryEmbedding, "query");
|
|
385
575
|
}
|
|
386
576
|
};
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
model;
|
|
393
|
-
store;
|
|
394
|
-
async search(request) {
|
|
395
|
-
const queryEmbedding = await embedText(this.model, request.query);
|
|
396
|
-
return this.store.candidates(queryEmbedding).filter((document) => matchesVectorFilter(document.metadata, request.filter)).flatMap((document) => {
|
|
397
|
-
const score = bestScore(queryEmbedding, document.embeddings);
|
|
398
|
-
if (score === void 0) {
|
|
399
|
-
return [];
|
|
400
|
-
}
|
|
401
|
-
if (request.threshold !== void 0 && score < request.threshold) {
|
|
402
|
-
return [];
|
|
403
|
-
}
|
|
404
|
-
const result = {
|
|
405
|
-
score,
|
|
406
|
-
id: document.id,
|
|
407
|
-
document: document.document
|
|
408
|
-
};
|
|
409
|
-
if (document.metadata !== void 0) {
|
|
410
|
-
result.metadata = document.metadata;
|
|
411
|
-
}
|
|
412
|
-
return [result];
|
|
413
|
-
}).sort((left, right) => right.score - left.score).slice(0, Math.max(0, Math.trunc(request.topK)));
|
|
577
|
+
function throwIfAborted2(signal) {
|
|
578
|
+
if (signal?.aborted) {
|
|
579
|
+
const error = new Error("The operation was aborted.");
|
|
580
|
+
error.name = "AbortError";
|
|
581
|
+
throw error;
|
|
414
582
|
}
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
const limit = Math.max(0, Math.trunc(request.limit));
|
|
420
|
-
const start = Math.max(0, Math.trunc(Number(request.cursor ?? "0")));
|
|
421
|
-
const documents = this.store.values().filter((document) => matchesVectorFilter(document.metadata, request.filter));
|
|
422
|
-
const page = documents.slice(start, start + limit);
|
|
423
|
-
const nextOffset = start + page.length;
|
|
424
|
-
const result = {
|
|
425
|
-
items: page.map((document) => {
|
|
426
|
-
const item = {
|
|
427
|
-
id: document.id,
|
|
428
|
-
document: document.document
|
|
429
|
-
};
|
|
430
|
-
if (document.metadata !== void 0) {
|
|
431
|
-
item.metadata = document.metadata;
|
|
432
|
-
}
|
|
433
|
-
return item;
|
|
434
|
-
})
|
|
435
|
-
};
|
|
436
|
-
if (nextOffset < documents.length) {
|
|
437
|
-
result.nextCursor = String(nextOffset);
|
|
438
|
-
}
|
|
439
|
-
result.totalCount = documents.length;
|
|
440
|
-
return result;
|
|
441
|
-
}
|
|
442
|
-
asTool(options) {
|
|
443
|
-
return createVectorSearchTool(this, options);
|
|
444
|
-
}
|
|
445
|
-
};
|
|
446
|
-
function createVectorSearchTool(index, options) {
|
|
583
|
+
}
|
|
584
|
+
function createVectorSearchTool(options) {
|
|
585
|
+
const configuredTopK = assertPositiveSearchLimit(options.topK ?? 5);
|
|
586
|
+
assertFiniteMinScore(options.minScore);
|
|
447
587
|
return createTool({
|
|
448
588
|
name: options.name,
|
|
449
589
|
description: options.description ?? "Search a vector store for documents relevant to the provided query.",
|
|
450
590
|
inputSchema: z.object({
|
|
451
|
-
query: z.string().describe("The query string to search for relevant documents."),
|
|
591
|
+
query: z.string().min(1).describe("The query string to search for relevant documents."),
|
|
452
592
|
topK: z.number().int().positive().optional().describe("The maximum number of results.")
|
|
453
593
|
}),
|
|
454
594
|
outputSchema: z.array(
|
|
@@ -459,12 +599,22 @@ function createVectorSearchTool(index, options) {
|
|
|
459
599
|
metadata: z.record(z.string(), z.union([z.string(), z.number(), z.boolean(), z.null()])).optional()
|
|
460
600
|
})
|
|
461
601
|
),
|
|
462
|
-
execute: ({ query, topK }) =>
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
602
|
+
execute: ({ query, topK }, context) => {
|
|
603
|
+
const request = {
|
|
604
|
+
query,
|
|
605
|
+
topK: topK ?? configuredTopK,
|
|
606
|
+
minScore: options.minScore,
|
|
607
|
+
filter: options.filter,
|
|
608
|
+
retries: options.retries,
|
|
609
|
+
abortSignal: context.abortSignal
|
|
610
|
+
};
|
|
611
|
+
return "models" in options && options.models !== void 0 ? retrieveDocuments({
|
|
612
|
+
...request,
|
|
613
|
+
store: options.store,
|
|
614
|
+
models: options.models,
|
|
615
|
+
fusion: options.fusion
|
|
616
|
+
}) : retrieveDocuments({ ...request, store: options.store, model: options.model });
|
|
617
|
+
}
|
|
468
618
|
});
|
|
469
619
|
}
|
|
470
620
|
function bestScore(queryEmbedding, embeddings) {
|
|
@@ -476,9 +626,8 @@ function bestScore(queryEmbedding, embeddings) {
|
|
|
476
626
|
return best;
|
|
477
627
|
}
|
|
478
628
|
function validateEmbeddingDimension(expectedDimension, embedding, id) {
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
}
|
|
629
|
+
assertFiniteVector(embedding.vector, id);
|
|
630
|
+
if (expectedDimension === void 0) return embedding.vector.length;
|
|
482
631
|
if (embedding.vector.length !== expectedDimension) {
|
|
483
632
|
throw new Error(
|
|
484
633
|
`Vector dimension mismatch: expected ${expectedDimension} dimensions but received ${embedding.vector.length} for ${id}`
|
|
@@ -486,6 +635,12 @@ function validateEmbeddingDimension(expectedDimension, embedding, id) {
|
|
|
486
635
|
}
|
|
487
636
|
return expectedDimension;
|
|
488
637
|
}
|
|
638
|
+
function assertFiniteVector(vector, id) {
|
|
639
|
+
if (vector.length === 0) throw new TypeError(`Vector for ${id} must not be empty.`);
|
|
640
|
+
if (!vector.every(Number.isFinite)) {
|
|
641
|
+
throw new TypeError(`Vector for ${id} must contain only finite numbers.`);
|
|
642
|
+
}
|
|
643
|
+
}
|
|
489
644
|
|
|
490
645
|
export {
|
|
491
646
|
toolMayRequireApproval,
|
|
@@ -493,15 +648,20 @@ export {
|
|
|
493
648
|
ToolCallError,
|
|
494
649
|
ToolNotFoundError,
|
|
495
650
|
ToolJsonError,
|
|
651
|
+
ToolResultSerializationError,
|
|
496
652
|
ToolOutput,
|
|
497
653
|
normalizeToolResultOutput,
|
|
498
654
|
toolResultContentToText,
|
|
499
655
|
parseToolArgs,
|
|
500
656
|
prepareToolCall,
|
|
657
|
+
prepareToolCallFromInput,
|
|
501
658
|
createTool,
|
|
659
|
+
assertPositiveSearchLimit,
|
|
660
|
+
assertFiniteMinScore,
|
|
502
661
|
vectorFilter,
|
|
662
|
+
matchesVectorFilter,
|
|
663
|
+
retrieveDocuments,
|
|
503
664
|
InMemoryVectorStore,
|
|
504
|
-
InMemoryVectorIndex,
|
|
505
665
|
createVectorSearchTool
|
|
506
666
|
};
|
|
507
|
-
//# sourceMappingURL=chunk-
|
|
667
|
+
//# sourceMappingURL=chunk-EMZKPRE6.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/vector-store/index.ts","../src/internal/vector-search-options.ts","../src/internal/agent-runtime/approval-requirement.ts","../src/tool/errors.ts","../src/tool/tool.ts","../src/internal/agent-runtime/prepared-tool-call.ts","../src/tool/create-tool.ts","../src/vector-store/filter.ts","../src/vector-store/lsh.ts","../src/vector-store/retrieve.ts"],"sourcesContent":["import { z } from \"zod\";\nimport {\n cosineSimilarity,\n type EmbeddedDocument,\n type Embedding,\n type VectorMetadata,\n} from \"../embeddings\";\nimport { assertFiniteMinScore, assertPositiveSearchLimit } from \"../internal/vector-search-options\";\nimport { createTool } from \"../tool/create-tool\";\nimport type { Tool } from \"../tool/tool\";\nimport { matchesVectorFilter } from \"./filter\";\nimport { LshIndex } from \"./lsh\";\nimport { retrieveDocuments } from \"./retrieve\";\nimport type {\n IndexStrategy,\n VectorInspectItem,\n VectorInspectPage,\n VectorInspectRequest,\n VectorSearchRequest,\n VectorSearchResult,\n VectorSearchToolOptions,\n VectorStore,\n VectorStoreUpsertOptions,\n} from \"./types\";\n\nexport { matchesVectorFilter, vectorFilter } from \"./filter\";\nexport { retrieveDocuments } from \"./retrieve\";\nexport type * from \"./types\";\n\ntype StoredDocument<T, Metadata extends VectorMetadata> = EmbeddedDocument<T, Metadata>;\n\nexport type InMemoryVectorStoreOptions = {\n dimensions?: number | undefined;\n index?: IndexStrategy | undefined;\n};\n\nexport type InMemoryVectorStoreFromDocumentsOptions<\n T,\n Metadata extends VectorMetadata = VectorMetadata,\n> = InMemoryVectorStoreOptions & {\n documents: Array<EmbeddedDocument<T, Metadata>>;\n};\n\nexport class InMemoryVectorStore<T, Metadata extends VectorMetadata = VectorMetadata>\n implements VectorStore<T, Metadata>\n{\n private readonly documents = new Map<string, StoredDocument<T, Metadata>>();\n private readonly indexStrategy: IndexStrategy;\n private lshIndex: LshIndex | undefined;\n private embeddingDimension: number | undefined;\n\n constructor(options: InMemoryVectorStoreOptions = {}) {\n this.indexStrategy = options.index ?? { type: \"bruteForce\" };\n if (\n options.dimensions !== undefined &&\n (!Number.isSafeInteger(options.dimensions) || options.dimensions < 1)\n ) {\n throw new RangeError(\"Vector dimensions must be a positive safe integer.\");\n }\n this.embeddingDimension = options.dimensions;\n }\n\n static fromDocuments<T, Metadata extends VectorMetadata = VectorMetadata>(\n options: InMemoryVectorStoreFromDocumentsOptions<T, Metadata>,\n ): InMemoryVectorStore<T, Metadata> {\n const store = new InMemoryVectorStore<T, Metadata>(options);\n store.replaceDocuments(options.documents);\n return store;\n }\n\n async ensure(): Promise<void> {}\n async validate(): Promise<void> {}\n\n async upsert(options: VectorStoreUpsertOptions<T, Metadata>): Promise<void> {\n this.replaceDocuments(options.documents);\n }\n\n get(options: { id: string }): StoredDocument<T, Metadata> | undefined {\n return this.documents.get(options.id);\n }\n\n values(): Array<StoredDocument<T, Metadata>> {\n return [...this.documents.values()];\n }\n\n len(): number {\n return this.documents.size;\n }\n\n isEmpty(): boolean {\n return this.documents.size === 0;\n }\n\n async search(request: VectorSearchRequest): Promise<Array<VectorSearchResult<T, Metadata>>> {\n throwIfAborted(request.abortSignal);\n assertPositiveSearchLimit(request.topK);\n assertFiniteMinScore(request.minScore);\n const queryEmbedding: Embedding = { document: \"\", vector: request.vector };\n const results = this.candidates(queryEmbedding)\n .filter((document) => matchesVectorFilter(document.metadata, request.filter))\n .flatMap((document) => {\n const score = bestScore(queryEmbedding, document.embeddings);\n if (score === undefined || (request.minScore !== undefined && score < request.minScore)) {\n return [];\n }\n let result: VectorSearchResult<T, Metadata> = {\n score,\n id: document.id,\n document: document.document,\n };\n if (document.metadata !== undefined) {\n result = { ...result, metadata: document.metadata };\n }\n return [result];\n })\n .sort((left, right) => right.score - left.score)\n .slice(0, request.topK);\n throwIfAborted(request.abortSignal);\n return results;\n }\n\n async inspect(request: VectorInspectRequest): Promise<VectorInspectPage<T, Metadata>> {\n throwIfAborted(request.abortSignal);\n const limit = assertPositiveSearchLimit(request.limit);\n const start = Math.max(0, Math.trunc(Number(request.cursor ?? \"0\")));\n const documents = this.values().filter((document) =>\n matchesVectorFilter(document.metadata, request.filter),\n );\n const page = documents.slice(start, start + limit);\n const nextOffset = start + page.length;\n const result: VectorInspectPage<T, Metadata> = {\n items: page.map((document): VectorInspectItem<T, Metadata> => {\n let item: VectorInspectItem<T, Metadata> = {\n id: document.id,\n document: document.document,\n };\n if (document.metadata !== undefined) {\n item = { ...item, metadata: document.metadata };\n }\n return item;\n }),\n totalCount: documents.length,\n };\n if (nextOffset < documents.length) result.nextCursor = String(nextOffset);\n throwIfAborted(request.abortSignal);\n return result;\n }\n\n private replaceDocuments(documents: Array<EmbeddedDocument<T, Metadata>>): void {\n const ids = new Set<string>();\n for (const document of documents) {\n if (ids.has(document.id)) throw new TypeError(`Duplicate vector document id: ${document.id}`);\n ids.add(document.id);\n if (document.embeddings.length === 0) {\n throw new TypeError(`Vector document ${document.id} must contain at least one embedding.`);\n }\n for (const embedding of document.embeddings)\n assertFiniteVector(embedding.vector, document.id);\n }\n this.validateDocumentDimensions(documents);\n for (const document of documents) this.documents.set(document.id, document);\n this.rebuildLshIndex();\n }\n\n private candidates(queryEmbedding: Embedding): Array<StoredDocument<T, Metadata>> {\n this.validateQueryDimension(queryEmbedding);\n if (this.indexStrategy.type !== \"lsh\" || this.lshIndex === undefined) return this.values();\n const candidateIds = this.lshIndex.query(queryEmbedding.vector);\n if (candidateIds.size === 0) return this.values();\n return [...candidateIds].flatMap((id) => {\n const document = this.documents.get(id);\n return document === undefined ? [] : [document];\n });\n }\n\n private rebuildLshIndex(): void {\n if (this.indexStrategy.type !== \"lsh\") {\n this.lshIndex = undefined;\n return;\n }\n const firstEmbedding = this.values().flatMap((document) => document.embeddings)[0];\n if (firstEmbedding === undefined) {\n this.lshIndex = undefined;\n return;\n }\n const index = new LshIndex(firstEmbedding.vector.length, this.indexStrategy);\n for (const document of this.documents.values()) {\n for (const embedding of document.embeddings) index.insert(document.id, embedding.vector);\n }\n this.lshIndex = index;\n }\n\n private validateDocumentDimensions(documents: Array<EmbeddedDocument<T, Metadata>>): void {\n let dimension = this.embeddingDimension;\n for (const document of documents) {\n for (const embedding of document.embeddings) {\n dimension = validateEmbeddingDimension(dimension, embedding, document.id);\n }\n }\n this.embeddingDimension = dimension;\n }\n\n private validateQueryDimension(queryEmbedding: Embedding): void {\n if (this.embeddingDimension !== undefined) {\n validateEmbeddingDimension(this.embeddingDimension, queryEmbedding, \"query\");\n }\n }\n}\n\nfunction throwIfAborted(signal: AbortSignal | undefined): void {\n if (signal?.aborted) {\n const error = new Error(\"The operation was aborted.\");\n error.name = \"AbortError\";\n throw error;\n }\n}\n\nexport function createVectorSearchTool<T, Metadata extends VectorMetadata>(\n options: VectorSearchToolOptions<T, Metadata>,\n): Tool<{ query: string; topK?: number }, Array<VectorSearchResult<T, Metadata>>> {\n const configuredTopK = assertPositiveSearchLimit(options.topK ?? 5);\n assertFiniteMinScore(options.minScore);\n return createTool({\n name: options.name,\n description:\n options.description ?? \"Search a vector store for documents relevant to the provided query.\",\n inputSchema: z.object({\n query: z.string().min(1).describe(\"The query string to search for relevant documents.\"),\n topK: z.number().int().positive().optional().describe(\"The maximum number of results.\"),\n }),\n outputSchema: z.array(\n z.object({\n score: z.number(),\n id: z.string(),\n document: z.any(),\n metadata: z\n .record(z.string(), z.union([z.string(), z.number(), z.boolean(), z.null()]))\n .optional(),\n }),\n ),\n execute: ({ query, topK }, context) => {\n const request = {\n query,\n topK: topK ?? configuredTopK,\n minScore: options.minScore,\n filter: options.filter,\n retries: options.retries,\n abortSignal: context.abortSignal,\n };\n return \"models\" in options && options.models !== undefined\n ? retrieveDocuments({\n ...request,\n store: options.store,\n models: options.models,\n fusion: options.fusion,\n })\n : retrieveDocuments({ ...request, store: options.store, model: options.model });\n },\n }) as Tool<{ query: string; topK?: number }, Array<VectorSearchResult<T, Metadata>>>;\n}\n\nfunction bestScore(queryEmbedding: Embedding, embeddings: Embedding[]): number | undefined {\n let best: number | undefined;\n for (const embedding of embeddings) {\n const score = cosineSimilarity(queryEmbedding.vector, embedding.vector);\n best = best === undefined ? score : Math.max(best, score);\n }\n return best;\n}\n\nfunction validateEmbeddingDimension(\n expectedDimension: number | undefined,\n embedding: Embedding,\n id: string,\n): number {\n assertFiniteVector(embedding.vector, id);\n if (expectedDimension === undefined) return embedding.vector.length;\n if (embedding.vector.length !== expectedDimension) {\n throw new Error(\n `Vector dimension mismatch: expected ${expectedDimension} dimensions but received ${embedding.vector.length} for ${id}`,\n );\n }\n return expectedDimension;\n}\n\nfunction assertFiniteVector(vector: number[], id: string): void {\n if (vector.length === 0) throw new TypeError(`Vector for ${id} must not be empty.`);\n if (!vector.every(Number.isFinite)) {\n throw new TypeError(`Vector for ${id} must contain only finite numbers.`);\n }\n}\n","export function assertPositiveSearchLimit(value: number, name = \"topK\"): number {\n if (!Number.isSafeInteger(value) || value <= 0) {\n throw new RangeError(`${name} must be a positive safe integer.`);\n }\n return value;\n}\n\nexport function assertFiniteMinScore(\n value: number | undefined,\n name = \"minScore\",\n): number | undefined {\n if (value !== undefined && !Number.isFinite(value)) {\n throw new RangeError(`${name} must be a finite number.`);\n }\n return value;\n}\n","import type { ToolApprovalRequirement } from \"../../tool/tool\";\n\nexport function toolMayRequireApproval(requirement: unknown): boolean {\n return requirement !== undefined && requirement !== false;\n}\n\nexport function assertToolApprovalRequirement(\n requirement: unknown,\n options: { allowFunction: boolean },\n): asserts requirement is boolean | ToolApprovalRequirement | ((...args: never[]) => unknown) {\n if (typeof requirement === \"boolean\") {\n return;\n }\n if (options.allowFunction && typeof requirement === \"function\") {\n return;\n }\n if (typeof requirement !== \"object\" || requirement === null || Array.isArray(requirement)) {\n throw new TypeError(\n 'Tool \"requiresApproval\" must be a boolean, a function, or an object with an optional string reason.',\n );\n }\n const reason = (requirement as { reason?: unknown }).reason;\n if (reason !== undefined && typeof reason !== \"string\") {\n throw new TypeError('Tool \"requiresApproval.reason\" must be a string.');\n }\n}\n","export class ToolCallError extends Error {\n constructor(\n message: string,\n readonly cause?: unknown,\n ) {\n super(message);\n this.name = \"ToolCallError\";\n }\n}\n\nexport class ToolNotFoundError extends Error {\n constructor(readonly toolName: string) {\n super(`Tool not found: ${toolName}`);\n this.name = \"ToolNotFoundError\";\n }\n}\n\nexport class ToolJsonError extends Error {\n constructor(\n message: string,\n readonly cause?: unknown,\n ) {\n super(message);\n this.name = \"ToolJsonError\";\n }\n}\n","import { isJsonValue } from \"../completion/json\";\nimport { parseMessage } from \"../completion/message-schema\";\nimport type {\n JsonObject,\n JsonValue,\n ToolDefinition,\n ToolResultContentPart,\n ToolResultOutput,\n} from \"../completion/types\";\n\nexport type ToolApprovalRunContext = {\n agentId: string;\n runId: string;\n sessionId?: string;\n metadata?: JsonObject;\n};\n\nexport type ToolApprovalContext<Args = unknown> = {\n toolName: string;\n args: Args;\n rawArgs: string;\n toolCallId: string;\n callId?: string;\n internalCallId: string;\n run: ToolApprovalRunContext;\n};\n\nexport type ToolApprovalRequirement = {\n reason?: string | undefined;\n};\n\nexport type ToolRequiresApproval<Args = unknown> =\n | boolean\n | ToolApprovalRequirement\n | ((\n args: Args,\n context: ToolApprovalContext<Args>,\n ) => boolean | ToolApprovalRequirement | Promise<boolean | ToolApprovalRequirement>);\n\nexport type ToolCallStreamEvent = {\n agentId: string;\n agentName?: string | undefined;\n event: unknown;\n};\n\nexport type ToolCallContext = {\n emitStreamEvent?(event: ToolCallStreamEvent): void | Promise<void>;\n abortSignal?: AbortSignal | undefined;\n};\n\nexport interface Tool<Args = unknown, Output = unknown> {\n readonly name: string;\n readonly requiresApproval?: ToolRequiresApproval<Args>;\n definition(prompt: string): ToolDefinition | Promise<ToolDefinition>;\n call(args: Args, context?: ToolCallContext): Output | Promise<Output>;\n parseInput?(args: JsonValue): Args;\n}\n\nexport type AnyTool = Omit<Tool<unknown, unknown>, \"requiresApproval\"> & {\n readonly requiresApproval?: unknown;\n};\n\nconst richToolOutput = Symbol(\"anvia.tool-output.content\");\n\nexport type RichToolOutput = Readonly<{\n [richToolOutput]: true;\n content: readonly ToolResultContentPart[];\n}>;\n\nexport type NormalizedToolOutput = ToolResultOutput;\n\nexport class ToolResultSerializationError extends TypeError {\n constructor(readonly output: unknown) {\n super(\"Tool output must be a string, a strict JSON value, or ToolOutput.content(...).\");\n this.name = \"ToolResultSerializationError\";\n }\n}\n\nexport const ToolOutput = {\n content(content: readonly ToolResultContentPart[]): RichToolOutput {\n return { [richToolOutput]: true, content };\n },\n};\n\nexport function normalizeToolResultOutput(output: unknown): NormalizedToolOutput {\n if (typeof output === \"string\") {\n return { type: \"text\", value: output };\n }\n if (isRichToolOutput(output)) {\n try {\n const message = parseMessage({\n role: \"tool\",\n content: [\n {\n type: \"tool-result\",\n toolCallId: \"validation\",\n toolName: \"validation\",\n output: { type: \"content\", value: output.content },\n },\n ],\n });\n if (message.role !== \"tool\") throw new TypeError(\"Unexpected message role\");\n const result = message.content[0];\n if (result?.type !== \"tool-result\") throw new TypeError(\"Unexpected tool result part\");\n if (result?.output.type !== \"content\") throw new TypeError(\"Unexpected tool output\");\n return result.output;\n } catch {\n throw new ToolResultSerializationError(output);\n }\n }\n if (isJsonValue(output)) {\n return { type: \"json\", value: output };\n }\n throw new ToolResultSerializationError(output);\n}\n\nexport function toolResultContentToText(content: readonly ToolResultContentPart[]): string {\n return content\n .map((item) => (item.type === \"text\" ? item.text : `[file:${item.mediaType}]`))\n .join(\"\\n\");\n}\n\nfunction isRichToolOutput(value: unknown): value is RichToolOutput {\n return typeof value === \"object\" && value !== null && richToolOutput in value;\n}\n\nexport function parseToolArgs(args: string): JsonValue {\n const value: unknown = JSON.parse(args);\n if (!isJsonValue(value)) {\n throw new TypeError(\"Tool arguments must be a JSON value.\");\n }\n return value;\n}\n","import { ToolCallError, ToolJsonError } from \"../../tool/errors\";\nimport {\n type AnyTool,\n type NormalizedToolOutput,\n normalizeToolResultOutput,\n parseToolArgs,\n type ToolCallContext,\n} from \"../../tool/tool\";\n\nconst preparedToolInputSymbol = Symbol(\"preparedToolInput\");\nconst preparedToolOwnerSymbol = Symbol(\"preparedToolOwner\");\n\nexport type PreparedToolCall = {\n input: unknown;\n call(context: ToolCallContext): Promise<NormalizedToolOutput>;\n};\n\ntype PreparedToolCallContext = ToolCallContext & {\n [preparedToolInputSymbol]?: { owner: object; input: unknown };\n};\n\ntype ToolWithPreparedOwner = AnyTool & {\n [preparedToolOwnerSymbol]?: object;\n};\n\nexport function attachPreparedToolOwner<T extends AnyTool>(tool: T, owner: object): T {\n Object.defineProperty(tool, preparedToolOwnerSymbol, {\n configurable: false,\n enumerable: true,\n value: owner,\n writable: false,\n });\n return tool;\n}\n\nexport function preparedToolInput(\n context: ToolCallContext | undefined,\n owner: object,\n): { input: unknown } | undefined {\n if (context === undefined || !(preparedToolInputSymbol in context)) {\n return undefined;\n }\n const prepared = (context as PreparedToolCallContext)[preparedToolInputSymbol];\n return prepared?.owner === owner ? { input: prepared.input } : undefined;\n}\n\nexport function withoutPreparedToolInput(context: ToolCallContext): ToolCallContext {\n if (!(preparedToolInputSymbol in context)) {\n return context;\n }\n const { [preparedToolInputSymbol]: _prepared, ...publicContext } =\n context as PreparedToolCallContext;\n return publicContext;\n}\n\nexport function prepareToolCall(tool: AnyTool, args: string): PreparedToolCall {\n let rawInput: ReturnType<typeof parseToolArgs>;\n try {\n rawInput = parseToolArgs(args);\n } catch (error) {\n throw new ToolJsonError(`Invalid JSON arguments for tool ${tool.name}`, error);\n }\n\n let input: unknown;\n try {\n input = tool.parseInput === undefined ? rawInput : tool.parseInput(rawInput);\n } catch (error) {\n throw asToolCallError(tool.name, error);\n }\n\n return prepareToolCallFromInput(tool, input);\n}\n\nexport function prepareToolCallFromInput(tool: AnyTool, input: unknown): PreparedToolCall {\n return {\n input,\n async call(context) {\n try {\n const owner = (tool as ToolWithPreparedOwner)[preparedToolOwnerSymbol];\n return normalizeToolResultOutput(\n await tool.call(\n input,\n owner === undefined ? context : withPreparedToolInput(context, owner, input),\n ),\n );\n } catch (error) {\n throw asToolCallError(tool.name, error);\n }\n },\n };\n}\n\nfunction withPreparedToolInput(\n context: ToolCallContext,\n owner: object,\n input: unknown,\n): ToolCallContext {\n const preparedContext: PreparedToolCallContext = { ...context };\n Object.defineProperty(preparedContext, preparedToolInputSymbol, {\n configurable: false,\n enumerable: true,\n value: { owner, input },\n writable: false,\n });\n return preparedContext;\n}\n\nfunction asToolCallError(toolName: string, error: unknown): ToolCallError {\n if (error instanceof ToolCallError) {\n return error;\n }\n return error instanceof Error\n ? new ToolCallError(error.message, error)\n : new ToolCallError(`Tool ${toolName} failed`, error);\n}\n","import type { z } from \"zod\";\nimport { assertToolApprovalRequirement } from \"../internal/agent-runtime/approval-requirement\";\nimport {\n attachPreparedToolOwner,\n preparedToolInput,\n withoutPreparedToolInput,\n} from \"../internal/agent-runtime/prepared-tool-call\";\nimport { toProviderJsonSchema, type ZodSchema } from \"../schema/zod-schema\";\nimport type { Tool, ToolCallContext, ToolRequiresApproval } from \"./tool\";\n\nexport type CreateToolOptions<\n InputSchema extends ZodSchema,\n OutputSchema extends ZodSchema | undefined = undefined,\n Output = unknown,\n> = {\n name: string;\n description: string;\n inputSchema: InputSchema;\n outputSchema?: OutputSchema;\n requiresApproval?: ToolRequiresApproval<z.output<InputSchema>>;\n execute(\n args: z.output<InputSchema>,\n context: ToolCallContext,\n ): OutputSchema extends ZodSchema\n ? z.input<OutputSchema> | Promise<z.input<OutputSchema>>\n : Output | Promise<Output>;\n};\n\ntype CreateToolOutput<\n OutputSchema extends ZodSchema | undefined,\n Output,\n> = OutputSchema extends ZodSchema ? z.output<OutputSchema> : Output;\n\nexport function createTool<InputSchema extends ZodSchema, Output = unknown>(\n options: CreateToolOptions<InputSchema, undefined, Output> & { outputSchema?: undefined },\n): Tool<z.output<InputSchema>, Output>;\n\nexport function createTool<InputSchema extends ZodSchema, OutputSchema extends ZodSchema>(\n options: CreateToolOptions<InputSchema, OutputSchema>,\n): Tool<z.output<InputSchema>, z.output<OutputSchema>>;\n\nexport function createTool<\n InputSchema extends ZodSchema,\n OutputSchema extends ZodSchema | undefined = undefined,\n Output = unknown,\n>(\n options: CreateToolOptions<InputSchema, OutputSchema, Output>,\n): Tool<z.output<InputSchema>, CreateToolOutput<OutputSchema, Output>> {\n const { name, description, inputSchema, outputSchema, execute } = options;\n const requiresApproval = snapshotApprovalRequirement(options.requiresApproval);\n if (requiresApproval !== undefined) {\n assertToolApprovalRequirement(requiresApproval, { allowFunction: true });\n }\n const parameters = toProviderJsonSchema(inputSchema);\n const preparedInputOwner = {};\n const definition = () => ({\n name,\n description,\n parameters: globalThis.structuredClone(parameters),\n });\n const call = async (\n args: z.output<InputSchema>,\n context: ToolCallContext = {},\n ): Promise<CreateToolOutput<OutputSchema, Output>> => {\n const prepared = preparedToolInput(context, preparedInputOwner);\n const parsedArgs =\n prepared === undefined ? inputSchema.parse(args) : (prepared.input as z.output<InputSchema>);\n const executionContext = prepared === undefined ? context : withoutPreparedToolInput(context);\n const result = await execute(parsedArgs, executionContext);\n return (outputSchema === undefined ? result : outputSchema.parse(result)) as CreateToolOutput<\n OutputSchema,\n Output\n >;\n };\n const parseInput = (args: unknown): z.output<InputSchema> => inputSchema.parse(args);\n\n const tool: Tool<z.output<InputSchema>, CreateToolOutput<OutputSchema, Output>> = {\n name,\n definition,\n call,\n parseInput,\n };\n if (requiresApproval !== undefined) {\n Object.defineProperty(tool, \"requiresApproval\", {\n configurable: false,\n enumerable: true,\n value: requiresApproval,\n writable: false,\n });\n }\n return attachPreparedToolOwner(tool, preparedInputOwner);\n}\n\nfunction snapshotApprovalRequirement<Args>(\n requirement: ToolRequiresApproval<Args> | undefined,\n): ToolRequiresApproval<Args> | undefined {\n return typeof requirement === \"object\" && requirement !== null\n ? Object.freeze({ ...requirement })\n : requirement;\n}\n","import type { VectorMetadata, VectorMetadataValue } from \"../embeddings\";\nimport type { VectorFilter } from \"./types\";\n\nexport type { VectorFilter } from \"./types\";\n\nexport const vectorFilter = {\n eq(key: string, value: VectorMetadataValue): VectorFilter {\n return { type: \"eq\", key, value };\n },\n gt(key: string, value: VectorMetadataValue): VectorFilter {\n return { type: \"gt\", key, value };\n },\n lt(key: string, value: VectorMetadataValue): VectorFilter {\n return { type: \"lt\", key, value };\n },\n and(left: VectorFilter, right: VectorFilter): VectorFilter {\n return { type: \"and\", filters: [left, right] };\n },\n or(left: VectorFilter, right: VectorFilter): VectorFilter {\n return { type: \"or\", filters: [left, right] };\n },\n};\n\nexport function matchesVectorFilter(\n metadata: VectorMetadata | undefined,\n filter: VectorFilter | undefined,\n): boolean {\n if (filter === undefined) {\n return true;\n }\n if (metadata === undefined) {\n return false;\n }\n\n switch (filter.type) {\n case \"eq\":\n return metadata[filter.key] === filter.value;\n case \"gt\":\n return compare(metadata[filter.key], filter.value) > 0;\n case \"lt\":\n return compare(metadata[filter.key], filter.value) < 0;\n case \"and\":\n return (\n matchesVectorFilter(metadata, filter.filters[0]) &&\n matchesVectorFilter(metadata, filter.filters[1])\n );\n case \"or\":\n return (\n matchesVectorFilter(metadata, filter.filters[0]) ||\n matchesVectorFilter(metadata, filter.filters[1])\n );\n }\n}\n\nfunction compare(left: VectorMetadataValue | undefined, right: VectorMetadataValue): number {\n if (typeof left === \"number\" && typeof right === \"number\") {\n return left - right;\n }\n if (typeof left === \"string\" && typeof right === \"string\") {\n return left.localeCompare(right);\n }\n if (typeof left === \"boolean\" && typeof right === \"boolean\") {\n return Number(left) - Number(right);\n }\n return 0;\n}\n","import type { LshOptions } from \"./types\";\n\nexport type { LshOptions } from \"./types\";\n\nexport class LshIndex {\n private readonly hyperplanes: number[][];\n private readonly tables: Array<Map<string, Set<string>>>;\n\n constructor(\n dimensions: number,\n private readonly options: LshOptions,\n ) {\n const rng = seededRandom(options.seed ?? 42);\n this.hyperplanes = [];\n for (let index = 0; index < options.numTables * options.numHyperplanes; index += 1) {\n const plane = Array.from({ length: dimensions }, () => rng() * 2 - 1);\n const norm = Math.sqrt(plane.reduce((sum, value) => sum + value ** 2, 0));\n this.hyperplanes.push(norm === 0 ? plane : plane.map((value) => value / norm));\n }\n this.tables = Array.from({ length: options.numTables }, () => new Map());\n }\n\n insert(id: string, vector: number[]): void {\n for (let table = 0; table < this.options.numTables; table += 1) {\n const hash = this.hash(vector, table);\n const bucket = this.tables[table]?.get(hash) ?? new Set<string>();\n bucket.add(id);\n this.tables[table]?.set(hash, bucket);\n }\n }\n\n query(vector: number[]): Set<string> {\n const candidates = new Set<string>();\n for (let table = 0; table < this.options.numTables; table += 1) {\n const hash = this.hash(vector, table);\n for (const id of this.tables[table]?.get(hash) ?? []) {\n candidates.add(id);\n }\n }\n return candidates;\n }\n\n private hash(vector: number[], table: number): string {\n let hash = \"\";\n const start = table * this.options.numHyperplanes;\n for (let offset = 0; offset < this.options.numHyperplanes; offset += 1) {\n const plane = this.hyperplanes[start + offset] as number[];\n const dot = vector.reduce((sum, value, index) => sum + value * (plane[index] ?? 0), 0);\n hash += dot >= 0 ? \"1\" : \"0\";\n }\n return hash;\n }\n}\n\nfunction seededRandom(seed: number): () => number {\n let state = seed >>> 0;\n return () => {\n state = (state * 1664525 + 1013904223) >>> 0;\n return state / 0x100000000;\n };\n}\n","import { embedSparseQuery, embedText, type VectorMetadata } from \"../embeddings\";\nimport { throwIfAborted } from \"../internal/abort\";\nimport { assertFiniteMinScore, assertPositiveSearchLimit } from \"../internal/vector-search-options\";\nimport { type ResolvedRetryOptions, resolveRetryOptions, runWithRetries } from \"../retry\";\nimport type {\n RetrieveDocumentsOptions,\n RetrieveHybridDocumentsOptions,\n VectorSearchResult,\n} from \"./types\";\n\nexport function retrieveDocuments<T, Metadata extends VectorMetadata = VectorMetadata>(\n options: RetrieveDocumentsOptions<T, Metadata>,\n): Promise<Array<VectorSearchResult<T, Metadata>>>;\nexport function retrieveDocuments<T, Metadata extends VectorMetadata = VectorMetadata>(\n options: RetrieveHybridDocumentsOptions<T, Metadata>,\n): Promise<Array<VectorSearchResult<T, Metadata>>>;\nexport async function retrieveDocuments<T, Metadata extends VectorMetadata = VectorMetadata>(\n options: RetrieveDocumentsOptions<T, Metadata> | RetrieveHybridDocumentsOptions<T, Metadata>,\n): Promise<Array<VectorSearchResult<T, Metadata>>> {\n assertPositiveSearchLimit(options.topK);\n assertFiniteMinScore(options.minScore);\n throwIfAborted(options.abortSignal);\n const retries = resolveRetries(options.retries);\n const search = (operation: () => Promise<Array<VectorSearchResult<T, Metadata>>>) =>\n runWithRetries(operation, retries, {\n streaming: false,\n abortSignal: options.abortSignal,\n });\n\n if (\"model\" in options && options.model !== undefined) {\n const { embedding } = await embedText({\n model: options.model,\n text: options.query,\n retries: options.retries,\n abortSignal: options.abortSignal,\n });\n return deduplicateResults(\n await search(() =>\n options.store.search({\n vector: embedding.vector,\n topK: options.topK,\n minScore: options.minScore,\n filter: options.filter,\n abortSignal: options.abortSignal,\n }),\n ),\n );\n }\n\n const [{ embedding: dense }, { embedding: sparse }] = await Promise.all([\n embedText({\n model: options.models.dense,\n text: options.query,\n retries: options.retries,\n abortSignal: options.abortSignal,\n }),\n embedSparseQuery({\n model: options.models.sparse,\n query: options.query,\n retries: options.retries,\n abortSignal: options.abortSignal,\n }),\n ]);\n return deduplicateResults(\n await search(() =>\n options.store.searchHybrid({\n vector: dense.vector,\n sparseVector: sparse.vector,\n fusion: options.fusion,\n topK: options.topK,\n minScore: options.minScore,\n filter: options.filter,\n abortSignal: options.abortSignal,\n }),\n ),\n );\n}\n\nfunction deduplicateResults<T, Metadata extends VectorMetadata>(\n results: Array<VectorSearchResult<T, Metadata>>,\n): Array<VectorSearchResult<T, Metadata>> {\n const bestById = new Map<string, VectorSearchResult<T, Metadata>>();\n for (const result of results) {\n const current = bestById.get(result.id);\n if (current === undefined || result.score > current.score) bestById.set(result.id, result);\n }\n return [...bestById.values()].sort((left, right) => right.score - left.score);\n}\n\nfunction resolveRetries(\n setting: RetrieveDocumentsOptions<unknown>[\"retries\"],\n): ResolvedRetryOptions | undefined {\n return setting === undefined || setting === false ? undefined : resolveRetryOptions(setting);\n}\n"],"mappings":"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","names":["throwIfAborted"]}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import {
|
|
2
|
+
assertJsonObject
|
|
3
|
+
} from "./chunk-7JLAIN6E.js";
|
|
4
|
+
import {
|
|
5
|
+
resolveRetryOptions,
|
|
6
|
+
runWithRetries,
|
|
7
|
+
throwIfAborted
|
|
8
|
+
} from "./chunk-3RWESPUG.js";
|
|
9
|
+
|
|
10
|
+
// src/image-generation/generate-image.ts
|
|
11
|
+
async function generateImage(options) {
|
|
12
|
+
assertNonEmptyString(options.prompt, "Image prompt");
|
|
13
|
+
throwIfAborted(options.abortSignal);
|
|
14
|
+
const width = options.width ?? 1024;
|
|
15
|
+
const height = options.height ?? 1024;
|
|
16
|
+
assertPositiveInteger(width, "Image width");
|
|
17
|
+
assertPositiveInteger(height, "Image height");
|
|
18
|
+
const request = { prompt: options.prompt, width, height };
|
|
19
|
+
if (options.providerOptions !== void 0) {
|
|
20
|
+
assertJsonObject(options.providerOptions, "providerOptions");
|
|
21
|
+
request.providerOptions = options.providerOptions;
|
|
22
|
+
}
|
|
23
|
+
const result = await runWithRetries(
|
|
24
|
+
() => {
|
|
25
|
+
throwIfAborted(options.abortSignal);
|
|
26
|
+
return options.model.imageGeneration(
|
|
27
|
+
request,
|
|
28
|
+
modelCallOptions(options.abortSignal)
|
|
29
|
+
);
|
|
30
|
+
},
|
|
31
|
+
resolveRetries(options.retries),
|
|
32
|
+
{ streaming: false, abortSignal: options.abortSignal }
|
|
33
|
+
);
|
|
34
|
+
if (!Array.isArray(result.images) || result.images.length === 0) {
|
|
35
|
+
throw new Error("The image generation model returned no images.");
|
|
36
|
+
}
|
|
37
|
+
return result;
|
|
38
|
+
}
|
|
39
|
+
function resolveRetries(setting) {
|
|
40
|
+
return setting === void 0 || setting === false ? void 0 : resolveRetryOptions(setting);
|
|
41
|
+
}
|
|
42
|
+
function modelCallOptions(abortSignal) {
|
|
43
|
+
return abortSignal === void 0 ? void 0 : { abortSignal };
|
|
44
|
+
}
|
|
45
|
+
function assertNonEmptyString(value, name) {
|
|
46
|
+
if (typeof value !== "string" || value.trim().length === 0) {
|
|
47
|
+
throw new TypeError(`${name} must be a non-empty string.`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
function assertPositiveInteger(value, name) {
|
|
51
|
+
if (!Number.isSafeInteger(value) || value < 1) {
|
|
52
|
+
throw new RangeError(`${name} must be a positive integer.`);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export {
|
|
57
|
+
generateImage
|
|
58
|
+
};
|
|
59
|
+
//# sourceMappingURL=chunk-I3Q7XSBB.js.map
|