@anvia/core 1.14.1 → 1.17.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 +17 -0
- package/dist/agent/agent-tool.js +12 -12
- package/dist/agent/agent.js +39 -39
- package/dist/agent/index.d.ts +9 -9
- package/dist/agent/index.js +47 -47
- package/dist/agent/resolve-options.js +13 -13
- package/dist/agent/resolved-agent.js +40 -40
- package/dist/agent/team/agent-team.js +43 -43
- package/dist/agent/team/index.js +43 -43
- package/dist/agent/tool-catalog.js +12 -12
- package/dist/{agent-DdkrgyW0.d.ts → agent-DopgSEYL.d.ts} +6 -6
- package/dist/chunk-2O3MLES7.js +82 -0
- package/dist/chunk-2O3MLES7.js.map +1 -0
- package/dist/{chunk-6S7ZON2E.js → chunk-2PULUVZ3.js} +5 -5
- package/dist/{chunk-ZWYMXBGB.js → chunk-35LALOZE.js} +2 -2
- package/dist/{chunk-GSVOMQEE.js → chunk-37IETBS7.js} +4 -4
- package/dist/{chunk-MIPBH5S7.js → chunk-3VIMLOWJ.js} +2 -1
- package/dist/{chunk-MIPBH5S7.js.map → chunk-3VIMLOWJ.js.map} +1 -1
- package/dist/{chunk-EKZRAWBP.js → chunk-4HO6VPC7.js} +2 -2
- package/dist/{chunk-X4XULHDO.js → chunk-4IOC4SP6.js} +7 -7
- package/dist/{chunk-27MBNR47.js → chunk-6YYZ7VJQ.js} +2 -2
- package/dist/{chunk-V5KBSXAJ.js → chunk-AJ6CRV4D.js} +2 -2
- package/dist/{chunk-IRXAEVEQ.js → chunk-BX52ILPM.js} +2 -2
- package/dist/{chunk-X35O3AQG.js → chunk-C6YE3JXV.js} +2 -2
- package/dist/{chunk-ETYB5JO6.js → chunk-EM4F5SRB.js} +5 -3
- package/dist/chunk-EM4F5SRB.js.map +1 -0
- package/dist/{chunk-ATFSEEFX.js → chunk-ETNDP75V.js} +30 -30
- package/dist/{chunk-LGPXCJJO.js → chunk-EYBJZ5EU.js} +3 -3
- package/dist/{chunk-5G4NMOTJ.js → chunk-GRGD4ZCM.js} +2 -2
- package/dist/{chunk-TJOIYN4O.js → chunk-GV2XETGV.js} +26 -26
- package/dist/{chunk-MNWULFRX.js → chunk-I4AOH75W.js} +2 -2
- package/dist/{chunk-GEFG7VGF.js → chunk-JLSNI3DV.js} +4 -4
- package/dist/{chunk-PFJN5OIQ.js → chunk-K6F734I4.js} +4 -4
- package/dist/{chunk-Y5FHUUNC.js → chunk-L2UPWQQZ.js} +27 -7
- package/dist/chunk-L2UPWQQZ.js.map +1 -0
- package/dist/{chunk-3PSBUYXQ.js → chunk-LZV5RHKG.js} +5 -5
- package/dist/{chunk-XIIVC5LY.js → chunk-MDEDFA5J.js} +12 -12
- package/dist/{chunk-XQRMPPTC.js → chunk-MK7YLH6A.js} +111 -26
- package/dist/chunk-MK7YLH6A.js.map +1 -0
- package/dist/{chunk-PNMBJMLB.js → chunk-QNNDKCZG.js} +2 -2
- package/dist/{chunk-EF26KTFU.js → chunk-RJILUEGK.js} +19 -16
- package/dist/{chunk-EF26KTFU.js.map → chunk-RJILUEGK.js.map} +1 -1
- package/dist/{chunk-RVGSTZD3.js → chunk-SC5HSCR3.js} +13 -13
- package/dist/{chunk-VHPT2C4P.js → chunk-TMSWHXYQ.js} +2 -1
- package/dist/{chunk-VHPT2C4P.js.map → chunk-TMSWHXYQ.js.map} +1 -1
- package/dist/{chunk-3F6ZY63S.js → chunk-TROKS4TY.js} +3 -3
- package/dist/{chunk-R4AJ2EE3.js → chunk-U4IRS5H6.js} +5 -5
- package/dist/{chunk-ET5SCES6.js → chunk-VO42OTBP.js} +8 -8
- package/dist/{chunk-VCOGUS3Q.js → chunk-VWN6BO6G.js} +5 -5
- package/dist/{chunk-CASF2TDK.js → chunk-WACXVXGU.js} +2 -2
- package/dist/{chunk-V3FFZWF3.js → chunk-YKGIOXTR.js} +38 -19
- package/dist/chunk-YKGIOXTR.js.map +1 -0
- package/dist/{chunk-SS52CC5R.js → chunk-YTXOK37S.js} +3 -3
- package/dist/{chunk-MEFGXAKJ.js → chunk-Z5WMW4NP.js} +2 -2
- package/dist/{chunk-VUY2C2QD.js → chunk-ZQC5V2AM.js} +2 -2
- package/dist/{chunk-6Q5VOKBO.js → chunk-ZW4UHQJT.js} +12 -9
- package/dist/chunk-ZW4UHQJT.js.map +1 -0
- package/dist/completion/generate-completion.js +5 -5
- package/dist/completion/index.js +21 -21
- package/dist/completion/stream-accumulator.js +1 -1
- package/dist/decision/index.d.ts +6 -119
- package/dist/decision/index.js +5 -5
- package/dist/{dynamic-tools-B3OjYyhC.d.ts → dynamic-tools-BtvhcGIC.d.ts} +2 -2
- package/dist/embeddings/index.js +8 -8
- package/dist/evals/advanced-metrics.js +13 -13
- package/dist/evals/cli.js +11 -11
- package/dist/evals/index.d.ts +2 -2
- package/dist/evals/index.js +44 -44
- package/dist/evals/judge.js +9 -9
- package/dist/evals/metrics.js +13 -13
- package/dist/evals/runner.js +10 -10
- package/dist/extractor/extractor.js +8 -8
- package/dist/extractor/index.js +8 -8
- package/dist/index.d.ts +10 -9
- package/dist/index.js +74 -74
- package/dist/internal/agent-runtime/agent-run.js +33 -33
- package/dist/internal/agent-runtime/continuation-state.js +8 -8
- package/dist/internal/agent-runtime/interaction-suspension.js +7 -7
- package/dist/internal/agent-runtime/loop-context.js +10 -10
- package/dist/internal/agent-runtime/memory.js +11 -11
- package/dist/internal/agent-runtime/prepared-tool-call.js +2 -2
- package/dist/internal/agent-runtime/retrieval.js +12 -12
- package/dist/internal/agent-runtime/tool-execution.js +25 -25
- package/dist/internal/agent.d.ts +7 -7
- package/dist/internal/agent.js +42 -42
- package/dist/internal/completion-request.js +2 -2
- package/dist/internal/team-runtime/member.js +8 -8
- package/dist/internal/team-runtime/run.js +42 -42
- package/dist/internal/team-runtime/tools.js +5 -5
- package/dist/mcp/index.d.ts +3 -3
- package/dist/memory/compaction.js +6 -6
- package/dist/memory/index.js +6 -6
- package/dist/{middleware-rxi6GI2B.d.ts → middleware-DOCIUIl2.d.ts} +13 -3
- package/dist/model-listing/index.d.ts +4 -0
- package/dist/observability/group.js +7 -7
- package/dist/observability/index.d.ts +2 -2
- package/dist/observability/index.js +7 -7
- package/dist/pipeline/graph.js +5 -7
- package/dist/pipeline/index.d.ts +45 -11
- package/dist/pipeline/index.js +18 -14
- package/dist/pipeline/observability.js +1 -1
- package/dist/pipeline/pipeline.js +18 -14
- package/dist/pipeline/runtime.js +2 -2
- package/dist/skills/index.d.ts +3 -3
- package/dist/skills/index.js +15 -15
- package/dist/skills/load.js +15 -15
- package/dist/skills/tools.js +14 -14
- package/dist/speech-generation/index.js +1 -1
- package/dist/{think-tool-CTuagAtn.d.ts → think-tool-vmLIfQik.d.ts} +1 -1
- package/dist/tool/create-tool.js +4 -4
- package/dist/tool/dynamic-tools.js +11 -11
- package/dist/tool/index.d.ts +5 -5
- package/dist/tool/index.js +13 -13
- package/dist/tool/question-tool.js +5 -5
- package/dist/tool/think-tool.js +5 -5
- package/dist/tool/tool.js +1 -1
- package/dist/{tool-W1cAPuRF.d.ts → tool-B6meo2AE.d.ts} +4 -1
- package/dist/{types-94Q2mPRa.d.ts → types-BOxOjkbS.d.ts} +1 -1
- package/dist/types-Bt19cjEr.d.ts +119 -0
- package/dist/{types-ChyQISt-.d.ts → types-CmdZOpKi.d.ts} +23 -3
- package/dist/{types-CIG2loIE.d.ts → types-jVXFDum8.d.ts} +1 -1
- package/dist/vector-store/filter.js +1 -1
- package/dist/vector-store/index.d.ts +24 -6
- package/dist/vector-store/index.js +10 -10
- package/dist/vector-store/ingest.js +4 -4
- package/dist/vector-store/retrieve.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-5WLIHNNJ.js +0 -56
- package/dist/chunk-5WLIHNNJ.js.map +0 -1
- package/dist/chunk-6Q5VOKBO.js.map +0 -1
- package/dist/chunk-ETYB5JO6.js.map +0 -1
- package/dist/chunk-V3FFZWF3.js.map +0 -1
- package/dist/chunk-XQRMPPTC.js.map +0 -1
- package/dist/chunk-Y5FHUUNC.js.map +0 -1
- /package/dist/{chunk-6S7ZON2E.js.map → chunk-2PULUVZ3.js.map} +0 -0
- /package/dist/{chunk-ZWYMXBGB.js.map → chunk-35LALOZE.js.map} +0 -0
- /package/dist/{chunk-GSVOMQEE.js.map → chunk-37IETBS7.js.map} +0 -0
- /package/dist/{chunk-EKZRAWBP.js.map → chunk-4HO6VPC7.js.map} +0 -0
- /package/dist/{chunk-X4XULHDO.js.map → chunk-4IOC4SP6.js.map} +0 -0
- /package/dist/{chunk-27MBNR47.js.map → chunk-6YYZ7VJQ.js.map} +0 -0
- /package/dist/{chunk-V5KBSXAJ.js.map → chunk-AJ6CRV4D.js.map} +0 -0
- /package/dist/{chunk-IRXAEVEQ.js.map → chunk-BX52ILPM.js.map} +0 -0
- /package/dist/{chunk-X35O3AQG.js.map → chunk-C6YE3JXV.js.map} +0 -0
- /package/dist/{chunk-ATFSEEFX.js.map → chunk-ETNDP75V.js.map} +0 -0
- /package/dist/{chunk-LGPXCJJO.js.map → chunk-EYBJZ5EU.js.map} +0 -0
- /package/dist/{chunk-5G4NMOTJ.js.map → chunk-GRGD4ZCM.js.map} +0 -0
- /package/dist/{chunk-TJOIYN4O.js.map → chunk-GV2XETGV.js.map} +0 -0
- /package/dist/{chunk-MNWULFRX.js.map → chunk-I4AOH75W.js.map} +0 -0
- /package/dist/{chunk-GEFG7VGF.js.map → chunk-JLSNI3DV.js.map} +0 -0
- /package/dist/{chunk-PFJN5OIQ.js.map → chunk-K6F734I4.js.map} +0 -0
- /package/dist/{chunk-3PSBUYXQ.js.map → chunk-LZV5RHKG.js.map} +0 -0
- /package/dist/{chunk-XIIVC5LY.js.map → chunk-MDEDFA5J.js.map} +0 -0
- /package/dist/{chunk-PNMBJMLB.js.map → chunk-QNNDKCZG.js.map} +0 -0
- /package/dist/{chunk-RVGSTZD3.js.map → chunk-SC5HSCR3.js.map} +0 -0
- /package/dist/{chunk-3F6ZY63S.js.map → chunk-TROKS4TY.js.map} +0 -0
- /package/dist/{chunk-R4AJ2EE3.js.map → chunk-U4IRS5H6.js.map} +0 -0
- /package/dist/{chunk-ET5SCES6.js.map → chunk-VO42OTBP.js.map} +0 -0
- /package/dist/{chunk-VCOGUS3Q.js.map → chunk-VWN6BO6G.js.map} +0 -0
- /package/dist/{chunk-CASF2TDK.js.map → chunk-WACXVXGU.js.map} +0 -0
- /package/dist/{chunk-SS52CC5R.js.map → chunk-YTXOK37S.js.map} +0 -0
- /package/dist/{chunk-MEFGXAKJ.js.map → chunk-Z5WMW4NP.js.map} +0 -0
- /package/dist/{chunk-VUY2C2QD.js.map → chunk-ZQC5V2AM.js.map} +0 -0
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
createSkillTools
|
|
3
|
-
} from "./chunk-5G4NMOTJ.js";
|
|
4
1
|
import {
|
|
5
2
|
skillInstructions
|
|
6
3
|
} from "./chunk-JBQNCUXA.js";
|
|
4
|
+
import {
|
|
5
|
+
createSkillTools
|
|
6
|
+
} from "./chunk-GRGD4ZCM.js";
|
|
7
7
|
|
|
8
8
|
// src/skills/load.ts
|
|
9
9
|
async function loadSkills(loaders) {
|
|
@@ -26,4 +26,4 @@ async function loadSkills(loaders) {
|
|
|
26
26
|
export {
|
|
27
27
|
loadSkills
|
|
28
28
|
};
|
|
29
|
-
//# sourceMappingURL=chunk-
|
|
29
|
+
//# sourceMappingURL=chunk-JLSNI3DV.js.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
getAgentToolState
|
|
3
|
-
} from "./chunk-A7BXVZXZ.js";
|
|
4
1
|
import {
|
|
5
2
|
retrieveDocuments
|
|
6
3
|
} from "./chunk-CB2L2NIQ.js";
|
|
4
|
+
import {
|
|
5
|
+
getAgentToolState
|
|
6
|
+
} from "./chunk-A7BXVZXZ.js";
|
|
7
7
|
import {
|
|
8
8
|
isVectorContext
|
|
9
9
|
} from "./chunk-ZHC5CD6J.js";
|
|
@@ -80,4 +80,4 @@ export {
|
|
|
80
80
|
fetchContextDocuments,
|
|
81
81
|
fetchToolDefinitions
|
|
82
82
|
};
|
|
83
|
-
//# sourceMappingURL=chunk-
|
|
83
|
+
//# sourceMappingURL=chunk-K6F734I4.js.map
|
|
@@ -6,9 +6,11 @@ import {
|
|
|
6
6
|
} from "./chunk-CB2L2NIQ.js";
|
|
7
7
|
import {
|
|
8
8
|
matchesVectorFilter
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-2O3MLES7.js";
|
|
10
10
|
import {
|
|
11
|
-
cosineSimilarity
|
|
11
|
+
cosineSimilarity,
|
|
12
|
+
dotProduct,
|
|
13
|
+
euclideanDistance
|
|
12
14
|
} from "./chunk-7F53DOML.js";
|
|
13
15
|
import {
|
|
14
16
|
assertFiniteMinScore,
|
|
@@ -16,17 +18,23 @@ import {
|
|
|
16
18
|
} from "./chunk-5V533R7F.js";
|
|
17
19
|
import {
|
|
18
20
|
createTool
|
|
19
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-Z5WMW4NP.js";
|
|
20
22
|
|
|
21
23
|
// src/vector-store/index.ts
|
|
22
24
|
import { z } from "zod";
|
|
25
|
+
var VECTOR_METRICS = /* @__PURE__ */ new Set(["cosine", "euclidean", "dotProduct"]);
|
|
23
26
|
var InMemoryVectorStore = class _InMemoryVectorStore {
|
|
24
27
|
documents = /* @__PURE__ */ new Map();
|
|
25
28
|
indexStrategy;
|
|
29
|
+
metric;
|
|
26
30
|
lshIndex;
|
|
27
31
|
embeddingDimension;
|
|
28
32
|
constructor(options = {}) {
|
|
29
33
|
this.indexStrategy = options.index ?? { type: "bruteForce" };
|
|
34
|
+
this.metric = options.metric ?? "cosine";
|
|
35
|
+
if (!VECTOR_METRICS.has(this.metric)) {
|
|
36
|
+
throw new TypeError(`Unsupported vector metric: ${String(this.metric)}`);
|
|
37
|
+
}
|
|
30
38
|
if (options.dimensions !== void 0 && (!Number.isSafeInteger(options.dimensions) || options.dimensions < 1)) {
|
|
31
39
|
throw new RangeError("Vector dimensions must be a positive safe integer.");
|
|
32
40
|
}
|
|
@@ -62,7 +70,7 @@ var InMemoryVectorStore = class _InMemoryVectorStore {
|
|
|
62
70
|
assertFiniteMinScore(request.minScore);
|
|
63
71
|
const queryEmbedding = { document: "", vector: request.vector };
|
|
64
72
|
const results = this.candidates(queryEmbedding).filter((document) => matchesVectorFilter(document.metadata, request.filter)).flatMap((document) => {
|
|
65
|
-
const score = bestScore(queryEmbedding, document.embeddings);
|
|
73
|
+
const score = bestScore(queryEmbedding, document.embeddings, this.metric);
|
|
66
74
|
if (score === void 0 || request.minScore !== void 0 && score < request.minScore) {
|
|
67
75
|
return [];
|
|
68
76
|
}
|
|
@@ -204,14 +212,26 @@ function createVectorSearchTool(options) {
|
|
|
204
212
|
}
|
|
205
213
|
});
|
|
206
214
|
}
|
|
207
|
-
function bestScore(queryEmbedding, embeddings) {
|
|
215
|
+
function bestScore(queryEmbedding, embeddings, metric) {
|
|
208
216
|
let best;
|
|
209
217
|
for (const embedding of embeddings) {
|
|
210
|
-
const score =
|
|
218
|
+
const score = metricScore(queryEmbedding.vector, embedding.vector, metric);
|
|
211
219
|
best = best === void 0 ? score : Math.max(best, score);
|
|
212
220
|
}
|
|
213
221
|
return best;
|
|
214
222
|
}
|
|
223
|
+
function metricScore(left, right, metric) {
|
|
224
|
+
switch (metric) {
|
|
225
|
+
case "euclidean": {
|
|
226
|
+
const distance = euclideanDistance(left, right);
|
|
227
|
+
return distance === 0 ? 0 : -distance;
|
|
228
|
+
}
|
|
229
|
+
case "dotProduct":
|
|
230
|
+
return dotProduct(left, right);
|
|
231
|
+
default:
|
|
232
|
+
return cosineSimilarity(left, right);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
215
235
|
function validateEmbeddingDimension(expectedDimension, embedding, id) {
|
|
216
236
|
assertFiniteVector(embedding.vector, id);
|
|
217
237
|
if (expectedDimension === void 0) return embedding.vector.length;
|
|
@@ -233,4 +253,4 @@ export {
|
|
|
233
253
|
InMemoryVectorStore,
|
|
234
254
|
createVectorSearchTool
|
|
235
255
|
};
|
|
236
|
-
//# sourceMappingURL=chunk-
|
|
256
|
+
//# sourceMappingURL=chunk-L2UPWQQZ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/vector-store/index.ts"],"sourcesContent":["import { z } from \"zod\";\nimport {\n cosineSimilarity,\n dotProduct,\n type EmbeddedDocument,\n type Embedding,\n euclideanDistance,\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 VectorMetric,\n VectorSearchRequest,\n VectorSearchResult,\n VectorSearchToolOptions,\n VectorStore,\n VectorStoreUpsertOptions,\n} from \"./types\";\n\nexport { matchesVectorFilter, vectorFilter } from \"./filter\";\nexport * from \"./ingest\";\nexport { retrieveDocuments } from \"./retrieve\";\nexport type * from \"./types\";\n\nconst VECTOR_METRICS: ReadonlySet<VectorMetric> = new Set([\"cosine\", \"euclidean\", \"dotProduct\"]);\n\ntype StoredDocument<T, Metadata extends VectorMetadata> = EmbeddedDocument<T, Metadata>;\n\nexport type InMemoryVectorStoreOptions = {\n dimensions?: number | undefined;\n index?: IndexStrategy | undefined;\n /**\n * Similarity metric used to score documents. Defaults to `\"cosine\"`.\n *\n * Scores are always \"higher is better\": `\"cosine\"` returns cosine similarity,\n * `\"dotProduct\"` returns the raw inner product, and `\"euclidean\"` returns the\n * negated Euclidean distance (matching the pgvector, Chroma, LanceDB, and Milvus\n * adapters), so the nearest document ranks first and `minScore` is a negative\n * distance threshold.\n *\n * With an `{ type: \"lsh\" }` index, non-cosine metrics are approximate because LSH\n * buckets are angle-based; `{ type: \"bruteForce\" }` (the default) is exact.\n */\n metric?: VectorMetric | 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<\n T,\n Metadata extends VectorMetadata = VectorMetadata,\n> implements VectorStore<T, Metadata> {\n private readonly documents = new Map<string, StoredDocument<T, Metadata>>();\n private readonly indexStrategy: IndexStrategy;\n private readonly metric: VectorMetric;\n private lshIndex: LshIndex | undefined;\n private embeddingDimension: number | undefined;\n\n constructor(options: InMemoryVectorStoreOptions = {}) {\n this.indexStrategy = options.index ?? { type: \"bruteForce\" };\n this.metric = options.metric ?? \"cosine\";\n if (!VECTOR_METRICS.has(this.metric)) {\n throw new TypeError(`Unsupported vector metric: ${String(this.metric)}`);\n }\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, this.metric);\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(\n queryEmbedding: Embedding,\n embeddings: Embedding[],\n metric: VectorMetric,\n): number | undefined {\n let best: number | undefined;\n for (const embedding of embeddings) {\n const score = metricScore(queryEmbedding.vector, embedding.vector, metric);\n best = best === undefined ? score : Math.max(best, score);\n }\n return best;\n}\n\nfunction metricScore(left: number[], right: number[], metric: VectorMetric): number {\n switch (metric) {\n case \"euclidean\": {\n const distance = euclideanDistance(left, right);\n return distance === 0 ? 0 : -distance;\n }\n case \"dotProduct\":\n return dotProduct(left, right);\n default:\n return cosineSimilarity(left, right);\n }\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"],"mappings":"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","names":[]}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import {
|
|
2
|
-
isStreamingCompletionModel
|
|
3
|
-
} from "./chunk-LGPXCJJO.js";
|
|
4
1
|
import {
|
|
5
2
|
createTool
|
|
6
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-Z5WMW4NP.js";
|
|
7
4
|
import {
|
|
8
5
|
AgentRunBlockedError,
|
|
9
6
|
AgentToolSuspensionError
|
|
10
7
|
} from "./chunk-WN6AVBO4.js";
|
|
8
|
+
import {
|
|
9
|
+
isStreamingCompletionModel
|
|
10
|
+
} from "./chunk-EYBJZ5EU.js";
|
|
11
11
|
|
|
12
12
|
// src/agent/agent-tool.ts
|
|
13
13
|
import { z } from "zod";
|
|
@@ -78,4 +78,4 @@ function createAgentTool(agent, options) {
|
|
|
78
78
|
export {
|
|
79
79
|
createAgentTool
|
|
80
80
|
};
|
|
81
|
-
//# sourceMappingURL=chunk-
|
|
81
|
+
//# sourceMappingURL=chunk-LZV5RHKG.js.map
|
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
import {
|
|
12
12
|
TEAM_INSTRUCTIONS,
|
|
13
13
|
teamTools
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-C6YE3JXV.js";
|
|
15
15
|
import {
|
|
16
16
|
AgentTeamInteractionError,
|
|
17
17
|
AgentTeamLimitError
|
|
@@ -19,13 +19,17 @@ import {
|
|
|
19
19
|
import {
|
|
20
20
|
createResolvedAgent,
|
|
21
21
|
getResolvedAgentOptions
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-2PULUVZ3.js";
|
|
23
23
|
import {
|
|
24
24
|
AgentRun
|
|
25
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-ETNDP75V.js";
|
|
26
26
|
import {
|
|
27
27
|
withInternalAgentRunOptions
|
|
28
28
|
} from "./chunk-7FBSGD6E.js";
|
|
29
|
+
import {
|
|
30
|
+
AgentRunCancelledError,
|
|
31
|
+
AgentStreamClosedError
|
|
32
|
+
} from "./chunk-WN6AVBO4.js";
|
|
29
33
|
import {
|
|
30
34
|
assertAgentInteractionResponse,
|
|
31
35
|
parseAgentInteractionResponse
|
|
@@ -36,20 +40,16 @@ import {
|
|
|
36
40
|
} from "./chunk-KFAVEL5F.js";
|
|
37
41
|
import {
|
|
38
42
|
isStreamingCompletionModel
|
|
39
|
-
} from "./chunk-
|
|
40
|
-
import {
|
|
41
|
-
Usage
|
|
42
|
-
} from "./chunk-HJ6KTQTZ.js";
|
|
43
|
+
} from "./chunk-EYBJZ5EU.js";
|
|
43
44
|
import {
|
|
44
45
|
parseMessages
|
|
45
46
|
} from "./chunk-BONQTXRQ.js";
|
|
47
|
+
import {
|
|
48
|
+
Usage
|
|
49
|
+
} from "./chunk-HJ6KTQTZ.js";
|
|
46
50
|
import {
|
|
47
51
|
throwIfAborted
|
|
48
52
|
} from "./chunk-USRKPEQN.js";
|
|
49
|
-
import {
|
|
50
|
-
AgentRunCancelledError,
|
|
51
|
-
AgentStreamClosedError
|
|
52
|
-
} from "./chunk-WN6AVBO4.js";
|
|
53
53
|
|
|
54
54
|
// src/internal/team-runtime/run.ts
|
|
55
55
|
var TeamRun = class {
|
|
@@ -619,4 +619,4 @@ var TeamRun = class {
|
|
|
619
619
|
export {
|
|
620
620
|
TeamRun
|
|
621
621
|
};
|
|
622
|
-
//# sourceMappingURL=chunk-
|
|
622
|
+
//# sourceMappingURL=chunk-MDEDFA5J.js.map
|
|
@@ -4,35 +4,40 @@ import {
|
|
|
4
4
|
pipelineAbortError,
|
|
5
5
|
runNode,
|
|
6
6
|
stageContext
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-4HO6VPC7.js";
|
|
8
8
|
import {
|
|
9
|
+
appendBranches,
|
|
9
10
|
appendComposedGraph,
|
|
10
|
-
appendParallelBranch,
|
|
11
11
|
appendStageNode,
|
|
12
12
|
cloneGraph,
|
|
13
13
|
initialPipelineState,
|
|
14
|
-
withOutputNode
|
|
15
|
-
|
|
16
|
-
} from "./chunk-V3FFZWF3.js";
|
|
14
|
+
withOutputNode
|
|
15
|
+
} from "./chunk-YKGIOXTR.js";
|
|
17
16
|
import {
|
|
18
17
|
snapshotPipelineObservability,
|
|
19
18
|
startPipelineRunObservers
|
|
20
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-EM4F5SRB.js";
|
|
21
20
|
import {
|
|
22
21
|
PipelineAgentSuspensionError
|
|
23
22
|
} from "./chunk-R6722CIU.js";
|
|
24
23
|
import {
|
|
25
24
|
extract
|
|
26
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-VWN6BO6G.js";
|
|
26
|
+
import {
|
|
27
|
+
decide
|
|
28
|
+
} from "./chunk-WGUE44ZD.js";
|
|
29
|
+
import {
|
|
30
|
+
assertQuestion
|
|
31
|
+
} from "./chunk-547CQSO2.js";
|
|
27
32
|
import {
|
|
28
33
|
mapWithConcurrency
|
|
29
34
|
} from "./chunk-4FIVU53H.js";
|
|
30
|
-
import {
|
|
31
|
-
throwIfAborted
|
|
32
|
-
} from "./chunk-USRKPEQN.js";
|
|
33
35
|
import {
|
|
34
36
|
AgentRunBlockedError
|
|
35
37
|
} from "./chunk-WN6AVBO4.js";
|
|
38
|
+
import {
|
|
39
|
+
throwIfAborted
|
|
40
|
+
} from "./chunk-USRKPEQN.js";
|
|
36
41
|
|
|
37
42
|
// src/pipeline/pipeline.ts
|
|
38
43
|
import { z } from "zod";
|
|
@@ -109,23 +114,19 @@ var Pipeline = class {
|
|
|
109
114
|
return this.derive(executor, state);
|
|
110
115
|
}
|
|
111
116
|
parallel(options) {
|
|
112
|
-
const branchEntries =
|
|
117
|
+
const branchEntries = normalizeBranches(options.branches, "parallel");
|
|
113
118
|
if (branchEntries.length === 0) {
|
|
114
119
|
throw new TypeError("Pipeline parallel branches must not be empty.");
|
|
115
120
|
}
|
|
116
121
|
const parallel = appendStageNode(this.state, "parallel", options, {
|
|
117
122
|
defaultLabel: `${branchEntries.length} parallel branches`
|
|
118
123
|
});
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
branchNodes.set(key, appended.node);
|
|
126
|
-
terminalPaths.push(...appended.terminalPaths);
|
|
127
|
-
}
|
|
128
|
-
nextState = withTerminalPaths(nextState, terminalPaths);
|
|
124
|
+
const { state: nextState, nodes: branchNodes } = appendBranches(
|
|
125
|
+
parallel.state,
|
|
126
|
+
parallel.node,
|
|
127
|
+
branchEntries.map(([key, branch]) => [key, branch.graph()]),
|
|
128
|
+
"parallel"
|
|
129
|
+
);
|
|
129
130
|
return this.derive(async (input, context, pathPrefix) => {
|
|
130
131
|
const value = await this.execute(input, context, pathPrefix);
|
|
131
132
|
const parallelPath = [...pathPrefix, parallel.node.id];
|
|
@@ -221,6 +222,75 @@ var Pipeline = class {
|
|
|
221
222
|
});
|
|
222
223
|
}, next.state);
|
|
223
224
|
}
|
|
225
|
+
/** Answer typed decision questions about the current value. */
|
|
226
|
+
decide(options) {
|
|
227
|
+
const next = appendStageNode(this.state, "decision", options);
|
|
228
|
+
return this.derive(
|
|
229
|
+
async (input, context, pathPrefix) => {
|
|
230
|
+
const value = await this.execute(input, context, pathPrefix);
|
|
231
|
+
const path = [...pathPrefix, next.node.id];
|
|
232
|
+
return runNode(context, next.node, path, value, async () => {
|
|
233
|
+
const state = await options.state(stageContext(value, context));
|
|
234
|
+
return decide({
|
|
235
|
+
model: options.model,
|
|
236
|
+
state,
|
|
237
|
+
questions: options.questions,
|
|
238
|
+
retries: options.retries,
|
|
239
|
+
providerOptions: options.providerOptions,
|
|
240
|
+
abortSignal: context.abortSignal
|
|
241
|
+
});
|
|
242
|
+
});
|
|
243
|
+
},
|
|
244
|
+
next.state
|
|
245
|
+
);
|
|
246
|
+
}
|
|
247
|
+
/** Choose one branch with a choice decision, then run only that branch. */
|
|
248
|
+
route(options) {
|
|
249
|
+
assertQuestion(options.question);
|
|
250
|
+
if (options.question.type !== "choice") {
|
|
251
|
+
throw new TypeError("Pipeline route question must be a choice question.");
|
|
252
|
+
}
|
|
253
|
+
const branchEntries = normalizeBranches(
|
|
254
|
+
options.branches,
|
|
255
|
+
"route"
|
|
256
|
+
);
|
|
257
|
+
assertRouteBranchesMatchOptions(options.id, branchEntries, options.question.options);
|
|
258
|
+
const route = appendStageNode(this.state, "route", options);
|
|
259
|
+
const { state: nextState, nodes: branchNodes } = appendBranches(
|
|
260
|
+
route.state,
|
|
261
|
+
route.node,
|
|
262
|
+
branchEntries.map(([key, branch]) => [key, branch.graph()]),
|
|
263
|
+
"route"
|
|
264
|
+
);
|
|
265
|
+
const branchPipelines = new Map(branchEntries);
|
|
266
|
+
return this.derive(async (input, context, pathPrefix) => {
|
|
267
|
+
const value = await this.execute(input, context, pathPrefix);
|
|
268
|
+
const routePath = [...pathPrefix, route.node.id];
|
|
269
|
+
return runNode(context, route.node, routePath, value, async () => {
|
|
270
|
+
const state = await options.state(stageContext(value, context));
|
|
271
|
+
const result = await decide({
|
|
272
|
+
model: options.model,
|
|
273
|
+
state,
|
|
274
|
+
questions: { route: options.question },
|
|
275
|
+
retries: options.retries,
|
|
276
|
+
providerOptions: options.providerOptions,
|
|
277
|
+
abortSignal: context.abortSignal
|
|
278
|
+
});
|
|
279
|
+
const answer = result.answers.route;
|
|
280
|
+
const node = branchNodes.get(answer.choice);
|
|
281
|
+
const branch = branchPipelines.get(answer.choice);
|
|
282
|
+
const path = [...routePath, node.id];
|
|
283
|
+
const output = await runNode(
|
|
284
|
+
context,
|
|
285
|
+
node,
|
|
286
|
+
path,
|
|
287
|
+
value,
|
|
288
|
+
() => branch.execute(value, context, path)
|
|
289
|
+
);
|
|
290
|
+
return result.usage === void 0 ? { branch: answer.choice, answer, output } : { branch: answer.choice, answer, usage: result.usage, output };
|
|
291
|
+
});
|
|
292
|
+
}, nextState);
|
|
293
|
+
}
|
|
224
294
|
async run(options) {
|
|
225
295
|
const runId = normalizeRunId(options.runId ?? globalThis.crypto.randomUUID());
|
|
226
296
|
const startedAt = Date.now();
|
|
@@ -348,28 +418,43 @@ function normalizeRunId(runId) {
|
|
|
348
418
|
}
|
|
349
419
|
return normalized;
|
|
350
420
|
}
|
|
351
|
-
function
|
|
421
|
+
function normalizeBranches(branches, kind) {
|
|
352
422
|
const entries = [];
|
|
353
423
|
const ids = /* @__PURE__ */ new Set();
|
|
354
424
|
for (const key of Object.keys(branches)) {
|
|
355
425
|
const pipeline = branches[key];
|
|
356
426
|
const id = key.trim();
|
|
357
427
|
if (id.length === 0) {
|
|
358
|
-
throw new TypeError(
|
|
428
|
+
throw new TypeError(`Pipeline ${kind} branch id must be a non-empty string.`);
|
|
359
429
|
}
|
|
360
430
|
if (ids.has(id)) {
|
|
361
|
-
throw new TypeError(`Pipeline
|
|
431
|
+
throw new TypeError(`Pipeline ${kind} branch id "${id}" is already registered.`);
|
|
362
432
|
}
|
|
363
433
|
ids.add(id);
|
|
364
434
|
if (id !== key) {
|
|
365
|
-
throw new TypeError(
|
|
435
|
+
throw new TypeError(`Pipeline ${kind} branch ids must not contain surrounding whitespace.`);
|
|
366
436
|
}
|
|
367
437
|
entries.push([id, pipeline]);
|
|
368
438
|
}
|
|
369
439
|
return entries;
|
|
370
440
|
}
|
|
441
|
+
function assertRouteBranchesMatchOptions(routeId, branchEntries, options) {
|
|
442
|
+
const branchKeys = new Set(branchEntries.map(([key]) => key));
|
|
443
|
+
for (const label of Object.keys(options)) {
|
|
444
|
+
if (!branchKeys.has(label)) {
|
|
445
|
+
throw new TypeError(`Pipeline route "${routeId}" is missing a branch for option "${label}".`);
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
for (const key of branchKeys) {
|
|
449
|
+
if (!Object.hasOwn(options, key)) {
|
|
450
|
+
throw new TypeError(
|
|
451
|
+
`Pipeline route "${routeId}" branch "${key}" is not an option of its question.`
|
|
452
|
+
);
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
}
|
|
371
456
|
|
|
372
457
|
export {
|
|
373
458
|
Pipeline
|
|
374
459
|
};
|
|
375
|
-
//# sourceMappingURL=chunk-
|
|
460
|
+
//# sourceMappingURL=chunk-MK7YLH6A.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/pipeline/pipeline.ts"],"sourcesContent":["import { z } from \"zod\";\nimport type { Agent } from \"../agent/agent\";\nimport { AgentRunBlockedError } from \"../agent/errors\";\nimport type { AgentInput, AgentRunOptions, AgentRunSettings } from \"../agent/run-types\";\nimport type {\n CompletionModel,\n CompletionModelControlsOf,\n JsonObject,\n JsonValue,\n} from \"../completion\";\nimport { decide as decideQuestions } from \"../decision/decide\";\nimport type {\n ChoiceQuestion,\n DecideOptions,\n DecisionModel,\n DecisionOptions,\n DecisionQuestions,\n DecisionRawResponseOf,\n DecisionResult,\n} from \"../decision/types\";\nimport { assertQuestion } from \"../decision/validation\";\nimport { type ExtractOptions, extract as extractData } from \"../extractor\";\nimport { throwIfAborted } from \"../internal/abort\";\nimport { mapWithConcurrency } from \"../internal/concurrency\";\nimport type { AgentTraceOptions } from \"../observability\";\nimport type { RetrySetting } from \"../retry\";\nimport { PipelineAgentSuspensionError } from \"./errors\";\nimport {\n appendBranches,\n appendComposedGraph,\n appendStageNode,\n cloneGraph,\n initialPipelineState,\n withOutputNode,\n} from \"./graph\";\nimport { snapshotPipelineObservability, startPipelineRunObservers } from \"./observability\";\nimport {\n childContext,\n combineAbortSignals,\n pipelineAbortError,\n runNode,\n stageContext,\n} from \"./runtime\";\nimport type {\n ParallelOutput,\n PipelineBatchItem,\n PipelineBatchOptions,\n PipelineExecutor,\n PipelineGraph,\n PipelineGraphNode,\n PipelineNodePath,\n PipelineOptions,\n PipelineRunContext,\n PipelineRunOptions,\n PipelineRunResult,\n PipelineStageContext,\n PipelineStageMetadata,\n PipelineState,\n PipelineTraceInfo,\n RouteOutput,\n} from \"./types\";\n\nconst internalPipelineOptions = Symbol(\"internal-pipeline-options\");\n\ntype RawResponseOf<Model> =\n Model extends CompletionModel<infer RawResponse> ? RawResponse : unknown;\n\ntype PipelineAgentRequest<Output, Model extends CompletionModel> = AgentInput &\n Omit<\n AgentRunSettings<Output, RawResponseOf<Model>, CompletionModelControlsOf<Model>>,\n \"abortSignal\"\n >;\n\nexport type PipelineStepOptions<Input, Output> = PipelineStageMetadata & {\n run(context: PipelineStageContext<Input>): Output | Promise<Output>;\n};\n\nexport type PipelineComposeOptions<Input, Output> = PipelineStageMetadata & {\n pipeline: Pipeline<Input, Output>;\n};\n\nexport type PipelineParallelOptions<\n Input,\n Branches extends Record<string, Pipeline<Input, unknown>>,\n> = PipelineStageMetadata & {\n branches: Branches;\n};\n\nexport type PipelineAgentOptions<\n Input,\n AgentOutput,\n Model extends CompletionModel,\n> = PipelineStageMetadata & {\n agent: Agent<AgentOutput, Model>;\n request(\n context: PipelineStageContext<Input>,\n ): PipelineAgentRequest<AgentOutput, Model> | Promise<PipelineAgentRequest<AgentOutput, Model>>;\n suspension: \"reject\";\n};\n\nexport type PipelineExtractOptions<\n Input,\n Extracted,\n Model extends CompletionModel,\n> = PipelineStageMetadata &\n Omit<ExtractOptions<Extracted, Model>, \"text\" | \"abortSignal\"> & {\n text(context: PipelineStageContext<Input>): string | Promise<string>;\n };\n\nexport type PipelineDecideOptions<\n Input,\n Questions extends DecisionQuestions,\n Model extends DecisionModel,\n> = PipelineStageMetadata &\n Omit<DecideOptions<Questions, Model>, \"state\" | \"abortSignal\"> & {\n state(context: PipelineStageContext<Input>): JsonValue | Promise<JsonValue>;\n };\n\n/** One Pipeline per option of the route question, keyed by option label. */\nexport type PipelineRouteBranches<Input, Options extends DecisionOptions> = {\n readonly [Label in Extract<keyof Options, string>]: Pipeline<Input, unknown>;\n};\n\nexport type PipelineRouteOptions<\n Input,\n Options extends DecisionOptions,\n Model extends DecisionModel,\n Branches extends PipelineRouteBranches<Input, Options>,\n> = PipelineStageMetadata & {\n model: Model;\n question: ChoiceQuestion<Options>;\n state(context: PipelineStageContext<Input>): JsonValue | Promise<JsonValue>;\n branches: Branches & { readonly [Extra in Exclude<keyof Branches, keyof Options>]: never };\n retries?: RetrySetting | undefined;\n providerOptions?: JsonObject | undefined;\n};\n\ntype InternalPipelineOptions<Input, Output> = {\n [internalPipelineOptions]: {\n executor: PipelineExecutor<Input, Output>;\n state: PipelineState;\n observability: PipelineOptions<Input>[\"observability\"];\n };\n};\n\n/** Immutable, typed Pipeline with explicit stage and execution boundaries. */\nexport class Pipeline<Input, Output = Input> {\n readonly id: string;\n readonly name: string | undefined;\n readonly description: string | undefined;\n readonly metadata: JsonObject | undefined;\n readonly observability: PipelineOptions<Input>[\"observability\"];\n\n private readonly executor: PipelineExecutor<Input, Output>;\n private readonly state: PipelineState;\n\n constructor(options: PipelineOptions<Input, Output>);\n constructor(options: PipelineOptions<Input, Output> | InternalPipelineOptions<Input, Output>) {\n if (isInternalPipelineOptions(options)) {\n this.executor = options[internalPipelineOptions].executor;\n this.state = options[internalPipelineOptions].state;\n this.observability = options[internalPipelineOptions].observability;\n } else {\n const id = normalizePipelineId(options.id);\n if (!isZodSchema(options.inputSchema)) {\n throw new TypeError(\"Pipeline inputSchema must be a Zod schema.\");\n }\n const inputSchema = options.inputSchema;\n this.executor = (async (input, context) => {\n throwIfAborted(context.abortSignal);\n return inputSchema.parseAsync(input) as Promise<Output>;\n }) as PipelineExecutor<Input, Output>;\n this.state = initialPipelineState({\n id,\n name: options.name,\n description: options.description,\n metadata: options.metadata,\n });\n this.observability = snapshotPipelineObservability(options.observability);\n }\n\n const graph = this.state.graph;\n this.id = graph.id;\n this.name = graph.name;\n this.description = graph.description;\n this.metadata = graph.metadata;\n }\n\n step<Next>(options: PipelineStepOptions<Awaited<Output>, Next>): Pipeline<Input, Awaited<Next>> {\n const next = appendStageNode(this.state, \"step\", options);\n const executor = (async (input, context, pathPrefix) => {\n const value = await this.execute(input, context, pathPrefix);\n const path = [...pathPrefix, next.node.id];\n return (await runNode(context, next.node, path, value, () =>\n options.run(stageContext(value, context)),\n )) as Awaited<Next>;\n }) as PipelineExecutor<Input, Awaited<Next>>;\n return this.derive(executor, next.state);\n }\n\n compose<Next>(\n options: PipelineComposeOptions<Awaited<Output>, Next>,\n ): Pipeline<Input, Awaited<Next>> {\n const boundary = appendStageNode(this.state, \"pipeline\", options, {\n defaultLabel: options.pipeline.name ?? options.pipeline.id,\n pipelineId: options.pipeline.id,\n });\n const state = appendComposedGraph(boundary.state, boundary.node, options.pipeline.graph());\n const executor = (async (input, context, pathPrefix) => {\n const value = await this.execute(input, context, pathPrefix);\n const path = [...pathPrefix, boundary.node.id];\n return (await runNode(context, boundary.node, path, value, () =>\n options.pipeline.execute(value, context, path),\n )) as Awaited<Next>;\n }) as PipelineExecutor<Input, Awaited<Next>>;\n return this.derive(executor, state);\n }\n\n parallel<Branches extends Record<string, Pipeline<Awaited<Output>, unknown>>>(\n options: PipelineParallelOptions<Awaited<Output>, Branches>,\n ): Pipeline<Input, ParallelOutput<Branches>> {\n const branchEntries = normalizeBranches(options.branches, \"parallel\");\n if (branchEntries.length === 0) {\n throw new TypeError(\"Pipeline parallel branches must not be empty.\");\n }\n const parallel = appendStageNode(this.state, \"parallel\", options, {\n defaultLabel: `${branchEntries.length} parallel branches`,\n });\n const { state: nextState, nodes: branchNodes } = appendBranches(\n parallel.state,\n parallel.node,\n branchEntries.map(([key, branch]) => [key, branch.graph()] as const),\n \"parallel\",\n );\n\n return this.derive<ParallelOutput<Branches>>(async (input, context, pathPrefix) => {\n const value = await this.execute(input, context, pathPrefix);\n const parallelPath = [...pathPrefix, parallel.node.id];\n return runNode(context, parallel.node, parallelPath, value, async () => {\n const controller = new AbortController();\n const combined = combineAbortSignals(context.abortSignal, controller.signal);\n const branchContext = childContext(context, combined.signal);\n let firstError: unknown;\n const promises = branchEntries.map(async ([key, branch]) => {\n const node = branchNodes.get(key) as PipelineGraphNode;\n const path = [...parallelPath, node.id];\n try {\n const output = await runNode(branchContext, node, path, value, () =>\n branch.execute(value, branchContext, path),\n );\n return [key, output] as const;\n } catch (error) {\n if (firstError === undefined) firstError = error;\n if (!controller.signal.aborted) controller.abort(error);\n throw error;\n }\n });\n\n const settled = await Promise.allSettled(promises);\n combined.dispose();\n if (context.abortSignal?.aborted === true) {\n throw pipelineAbortError(context.abortSignal);\n }\n if (firstError !== undefined) throw firstError;\n return Object.fromEntries(\n settled.map(\n (result) => (result as PromiseFulfilledResult<readonly [string, unknown]>).value,\n ),\n ) as ParallelOutput<Branches>;\n });\n }, nextState);\n }\n\n agent<AgentOutput, Model extends CompletionModel>(\n options: PipelineAgentOptions<Awaited<Output>, AgentOutput, Model>,\n ): Pipeline<Input, AgentOutput> {\n if (options.suspension !== \"reject\") {\n throw new TypeError('Pipeline Agent stages require suspension: \"reject\".');\n }\n const next = appendStageNode(this.state, \"agent\", options, {\n defaultLabel: options.agent.name ?? options.agent.id,\n agentId: options.agent.id,\n agentName: options.agent.name,\n });\n return this.derive<AgentOutput>(async (input, context, pathPrefix) => {\n const value = await this.execute(input, context, pathPrefix);\n const path = [...pathPrefix, next.node.id];\n return runNode(context, next.node, path, value, async (stageTrace) => {\n const request = await options.request(stageContext(value, context));\n const response = await options.agent.generate({\n ...request,\n trace: withPipelineParentTrace(\n request.trace,\n stageTrace,\n options.agent.observability?.primaryTrace,\n ),\n abortSignal: context.abortSignal,\n } as AgentRunOptions<AgentOutput, RawResponseOf<Model>, CompletionModelControlsOf<Model>>);\n if (response.type === \"interaction\") {\n throw new PipelineAgentSuspensionError(response);\n }\n if (response.type === \"blocked\") {\n throw new AgentRunBlockedError(response);\n }\n return response.output;\n });\n }, next.state);\n }\n\n extract<Extracted, Model extends CompletionModel>(\n options: PipelineExtractOptions<Awaited<Output>, Extracted, Model>,\n ): Pipeline<Input, Extracted> {\n const next = appendStageNode(this.state, \"extractor\", options);\n return this.derive<Extracted>(async (input, context, pathPrefix) => {\n const value = await this.execute(input, context, pathPrefix);\n const path = [...pathPrefix, next.node.id];\n return runNode(context, next.node, path, value, async () => {\n const text = await options.text(stageContext(value, context));\n const result = await extractData({\n model: options.model,\n text,\n outputSchema: options.outputSchema,\n instructions: options.instructions,\n retries: options.retries,\n temperature: options.temperature,\n maxTokens: options.maxTokens,\n providerOptions: options.providerOptions,\n abortSignal: context.abortSignal,\n });\n return result.output;\n });\n }, next.state);\n }\n\n /** Answer typed decision questions about the current value. */\n decide<const Questions extends DecisionQuestions, Model extends DecisionModel>(\n options: PipelineDecideOptions<Awaited<Output>, Questions, Model>,\n ): Pipeline<Input, DecisionResult<Questions, DecisionRawResponseOf<Model>>> {\n const next = appendStageNode(this.state, \"decision\", options);\n return this.derive<DecisionResult<Questions, DecisionRawResponseOf<Model>>>(\n async (input, context, pathPrefix) => {\n const value = await this.execute(input, context, pathPrefix);\n const path = [...pathPrefix, next.node.id];\n return runNode(context, next.node, path, value, async () => {\n const state = await options.state(stageContext(value, context));\n return decideQuestions({\n model: options.model,\n state,\n questions: options.questions,\n retries: options.retries,\n providerOptions: options.providerOptions,\n abortSignal: context.abortSignal,\n });\n });\n },\n next.state,\n );\n }\n\n /** Choose one branch with a choice decision, then run only that branch. */\n route<\n const Options extends DecisionOptions,\n Model extends DecisionModel,\n Branches extends PipelineRouteBranches<Awaited<Output>, Options>,\n >(\n options: PipelineRouteOptions<Awaited<Output>, Options, Model, Branches>,\n ): Pipeline<Input, RouteOutput<Branches>> {\n assertQuestion(options.question);\n if (options.question.type !== \"choice\") {\n throw new TypeError(\"Pipeline route question must be a choice question.\");\n }\n const branchEntries = normalizeBranches(\n options.branches as Readonly<Record<string, Pipeline<Awaited<Output>, unknown>>>,\n \"route\",\n );\n assertRouteBranchesMatchOptions(options.id, branchEntries, options.question.options);\n const route = appendStageNode(this.state, \"route\", options);\n const { state: nextState, nodes: branchNodes } = appendBranches(\n route.state,\n route.node,\n branchEntries.map(([key, branch]) => [key, branch.graph()] as const),\n \"route\",\n );\n const branchPipelines = new Map(branchEntries);\n\n return this.derive<RouteOutput<Branches>>(async (input, context, pathPrefix) => {\n const value = await this.execute(input, context, pathPrefix);\n const routePath = [...pathPrefix, route.node.id];\n return runNode(context, route.node, routePath, value, async () => {\n const state = await options.state(stageContext(value, context));\n const result = await decideQuestions({\n model: options.model,\n state,\n questions: { route: options.question },\n retries: options.retries,\n providerOptions: options.providerOptions,\n abortSignal: context.abortSignal,\n });\n const answer = result.answers.route;\n // decide() validates the choice against the question options, which match the branches.\n const node = branchNodes.get(answer.choice) as PipelineGraphNode;\n const branch = branchPipelines.get(answer.choice) as Pipeline<Awaited<Output>, unknown>;\n const path = [...routePath, node.id];\n const output = await runNode(context, node, path, value, () =>\n branch.execute(value, context, path),\n );\n return (\n result.usage === undefined\n ? { branch: answer.choice, answer, output }\n : { branch: answer.choice, answer, usage: result.usage, output }\n ) as RouteOutput<Branches>;\n });\n }, nextState);\n }\n\n async run(options: PipelineRunOptions<Input>): Promise<PipelineRunResult<Output>> {\n const runId = normalizeRunId(options.runId ?? globalThis.crypto.randomUUID());\n const startedAt = Date.now();\n const observability = await startPipelineRunObservers(\n this.observability?.observers ?? {},\n {\n runId,\n pipelineId: this.id,\n pipelineName: this.name,\n pipelineDescription: this.description,\n pipelineMetadata: this.metadata,\n runMetadata: options.metadata,\n trace: options.trace,\n input: options.input,\n },\n {\n primaryTrace: this.observability?.primaryTrace,\n errorPolicy: this.observability?.errorPolicy ?? \"ignore\",\n },\n );\n const context: PipelineRunContext = {\n runId,\n pipelineId: this.id,\n runMetadata: options.metadata,\n abortSignal: options.abortSignal,\n observer: options.observer,\n failOnObserverError: options.failOnObserverError === true,\n observability,\n };\n try {\n throwIfAborted(context.abortSignal);\n const output = await this.execute(options.input, context, []);\n throwIfAborted(context.abortSignal);\n await observability.end({\n runId,\n pipelineId: this.id,\n output,\n durationMs: Date.now() - startedAt,\n });\n return observability.trace === undefined\n ? { runId, output }\n : { runId, output, trace: observability.trace };\n } catch (error) {\n await observability.error({\n runId,\n pipelineId: this.id,\n status: context.abortSignal?.aborted === true ? \"cancelled\" : \"failed\",\n error,\n durationMs: Date.now() - startedAt,\n });\n throw error;\n }\n }\n\n async runBatch(options: PipelineBatchOptions<Input>): Promise<Array<PipelineBatchItem<Output>>> {\n throwIfAborted(options.abortSignal);\n return mapWithConcurrency([...options.inputs], options.concurrency, async (input) => {\n const runId = globalThis.crypto.randomUUID();\n try {\n const result = await this.run({\n input,\n runId,\n metadata: options.metadata,\n trace: options.trace,\n abortSignal: options.abortSignal,\n observer: options.observer,\n failOnObserverError: options.failOnObserverError,\n });\n return { status: \"completed\", ...result } as const;\n } catch (error) {\n if (options.abortSignal?.aborted === true) {\n throw pipelineAbortError(options.abortSignal);\n }\n return { status: \"failed\", runId, error } as const;\n }\n });\n }\n\n graph(): PipelineGraph {\n return cloneGraph(withOutputNode(this.state));\n }\n\n private derive<DerivedOutput>(\n executor: PipelineExecutor<Input, DerivedOutput>,\n state: PipelineState,\n ): Pipeline<Input, DerivedOutput> {\n return createDerivedPipeline(executor, state, this.observability);\n }\n\n private async execute(\n input: Input,\n context: PipelineRunContext,\n pathPrefix: PipelineNodePath,\n ): Promise<Awaited<Output>> {\n throwIfAborted(context.abortSignal);\n return (await this.executor(input, context, pathPrefix)) as Awaited<Output>;\n }\n}\n\nfunction createDerivedPipeline<Input, Output>(\n executor: PipelineExecutor<Input, Output>,\n state: PipelineState,\n observability: PipelineOptions<Input>[\"observability\"],\n): Pipeline<Input, Output> {\n const options: InternalPipelineOptions<Input, Output> = {\n [internalPipelineOptions]: { executor, state, observability },\n };\n return new Pipeline<Input, Output>(options as unknown as PipelineOptions<Input, Output>);\n}\n\nfunction withPipelineParentTrace(\n trace: AgentTraceOptions | undefined,\n parent: PipelineTraceInfo | undefined,\n agentPrimaryTrace: string | undefined,\n): AgentTraceOptions | undefined {\n if (parent?.traceId === undefined) return trace;\n if (parent.observer !== agentPrimaryTrace) return trace;\n if (trace?.traceId !== undefined && trace.traceId !== parent.traceId) return trace;\n const resolved = { ...trace, traceId: parent.traceId };\n if (trace?.parentObservationId === undefined && parent.observationId !== undefined) {\n resolved.parentObservationId = parent.observationId;\n }\n return resolved;\n}\n\nfunction isInternalPipelineOptions<Input, Output>(\n options: PipelineOptions<Input, Output> | InternalPipelineOptions<Input, Output>,\n): options is InternalPipelineOptions<Input, Output> {\n return internalPipelineOptions in options;\n}\n\nfunction isZodSchema(value: unknown): value is z.ZodType {\n return value instanceof z.ZodType;\n}\n\nfunction normalizePipelineId(id: string): string {\n if (typeof id !== \"string\") {\n throw new TypeError(\"Pipeline id must be a string.\");\n }\n const normalized = id.trim();\n if (normalized.length === 0) {\n throw new TypeError(\"Pipeline id must be a non-empty string.\");\n }\n return normalized;\n}\n\nfunction normalizeRunId(runId: string): string {\n if (typeof runId !== \"string\") {\n throw new TypeError(\"Pipeline runId must be a string.\");\n }\n const normalized = runId.trim();\n if (normalized.length === 0) {\n throw new TypeError(\"Pipeline runId must be a non-empty string.\");\n }\n return normalized;\n}\n\nfunction normalizeBranches<Branch>(\n branches: Readonly<Record<string, Branch>>,\n kind: \"parallel\" | \"route\",\n): Array<readonly [string, Branch]> {\n const entries: Array<readonly [string, Branch]> = [];\n const ids = new Set<string>();\n for (const key of Object.keys(branches)) {\n const pipeline = branches[key] as Branch;\n const id = key.trim();\n if (id.length === 0) {\n throw new TypeError(`Pipeline ${kind} branch id must be a non-empty string.`);\n }\n if (ids.has(id)) {\n throw new TypeError(`Pipeline ${kind} branch id \"${id}\" is already registered.`);\n }\n ids.add(id);\n if (id !== key) {\n throw new TypeError(`Pipeline ${kind} branch ids must not contain surrounding whitespace.`);\n }\n entries.push([id, pipeline]);\n }\n return entries;\n}\n\nfunction assertRouteBranchesMatchOptions(\n routeId: string,\n branchEntries: ReadonlyArray<readonly [string, unknown]>,\n options: DecisionOptions,\n): void {\n const branchKeys = new Set(branchEntries.map(([key]) => key));\n for (const label of Object.keys(options)) {\n if (!branchKeys.has(label)) {\n throw new TypeError(`Pipeline route \"${routeId}\" is missing a branch for option \"${label}\".`);\n }\n }\n for (const key of branchKeys) {\n if (!Object.hasOwn(options, key)) {\n throw new TypeError(\n `Pipeline route \"${routeId}\" branch \"${key}\" is not an option of its question.`,\n );\n }\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
isToolIndex
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-ZQC5V2AM.js";
|
|
4
4
|
import {
|
|
5
5
|
isMcpTool
|
|
6
6
|
} from "./chunk-PLDJCCVL.js";
|
|
@@ -165,4 +165,4 @@ function snapshotToolIndex(index) {
|
|
|
165
165
|
export {
|
|
166
166
|
prepareAgentTools
|
|
167
167
|
};
|
|
168
|
-
//# sourceMappingURL=chunk-
|
|
168
|
+
//# sourceMappingURL=chunk-QNNDKCZG.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
runEvalSuite
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-4IOC4SP6.js";
|
|
4
4
|
|
|
5
5
|
// src/evals/cli.ts
|
|
6
6
|
var EvalAssertionError = class extends Error {
|
|
@@ -321,20 +321,23 @@ function redactJsonResult(result, options) {
|
|
|
321
321
|
};
|
|
322
322
|
}
|
|
323
323
|
function redactOutcome(outcome, options, caseId, metricName) {
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
}
|
|
336
|
-
|
|
337
|
-
|
|
324
|
+
const redacted = { ...outcome };
|
|
325
|
+
if (outcome.score !== void 0) {
|
|
326
|
+
redacted.score = redact(outcome.score, options, { kind: "score", caseId, metricName });
|
|
327
|
+
}
|
|
328
|
+
if (outcome.comment !== void 0) {
|
|
329
|
+
redacted.comment = redact(outcome.comment, options, { kind: "comment", caseId, metricName });
|
|
330
|
+
}
|
|
331
|
+
if ("reason" in outcome && outcome.reason !== void 0) {
|
|
332
|
+
redacted.reason = redact(outcome.reason, options, { kind: "comment", caseId, metricName });
|
|
333
|
+
}
|
|
334
|
+
if (outcome.metadata !== void 0) {
|
|
335
|
+
redacted.metadata = redact(outcome.metadata, options, { kind: "metadata", caseId, metricName });
|
|
336
|
+
}
|
|
337
|
+
if ("error" in outcome && outcome.error !== void 0) {
|
|
338
|
+
redacted.error = redact(outcome.error, options, { kind: "error", caseId, metricName });
|
|
339
|
+
}
|
|
340
|
+
return redacted;
|
|
338
341
|
}
|
|
339
342
|
function validatePrintOptions(options) {
|
|
340
343
|
if (options.maxValueLength !== void 0 && (!Number.isSafeInteger(options.maxValueLength) || options.maxValueLength < 1)) {
|
|
@@ -352,4 +355,4 @@ export {
|
|
|
352
355
|
assertEvalOutcomes,
|
|
353
356
|
runEvalCli
|
|
354
357
|
};
|
|
355
|
-
//# sourceMappingURL=chunk-
|
|
358
|
+
//# sourceMappingURL=chunk-RJILUEGK.js.map
|