@anvia/core 1.5.1 → 1.6.1
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 +32 -1073
- package/dist/agent/agent-tool.js +4 -4
- package/dist/agent/agent.js +17 -17
- package/dist/agent/index.js +20 -20
- package/dist/agent/resolve-options.js +6 -6
- package/dist/agent/resolved-agent.js +18 -18
- package/dist/agent/team/agent-team.js +20 -20
- package/dist/agent/team/index.js +20 -20
- package/dist/agent/tool-catalog.js +6 -6
- package/dist/{chunk-QHGYCYV6.js → chunk-3FIX7GLM.js} +2 -2
- package/dist/{chunk-SIXS4CCU.js → chunk-4IOC4SP6.js} +4 -4
- package/dist/chunk-4IOC4SP6.js.map +1 -0
- package/dist/{chunk-JMMZICU7.js → chunk-4OSA3MMA.js} +39 -5
- package/dist/chunk-4OSA3MMA.js.map +1 -0
- package/dist/{chunk-YOLOFTAY.js → chunk-57AUTEQ6.js} +57 -5
- package/dist/chunk-57AUTEQ6.js.map +1 -0
- package/dist/{chunk-4VDDYI6P.js → chunk-5CQRCTIN.js} +2 -2
- package/dist/{chunk-F4BOW76L.js → chunk-5TGVDMGM.js} +4 -4
- package/dist/{chunk-TK2VXQVZ.js → chunk-7G3YQQVE.js} +3 -3
- package/dist/{chunk-NDAGW32C.js → chunk-7OHHMYRO.js} +2 -2
- package/dist/{chunk-3SUEXGRA.js → chunk-7V3DKQTI.js} +4 -4
- package/dist/{chunk-DXW37JLZ.js → chunk-AMPQJMDG.js} +5 -5
- package/dist/{chunk-ZQC6M22O.js → chunk-AQ47TF5K.js} +2 -2
- package/dist/{chunk-PZ7ATNR6.js → chunk-BI3T62GL.js} +9 -9
- package/dist/chunk-BI3T62GL.js.map +1 -0
- package/dist/{chunk-HAAGSIZH.js → chunk-CB2L2NIQ.js} +2 -2
- package/dist/{chunk-KX2TRKO2.js → chunk-GNBPXJC6.js} +2 -2
- package/dist/{chunk-YMTBHHLQ.js → chunk-HG6ASDNI.js} +3 -3
- package/dist/{chunk-JMNIWUFV.js → chunk-HILMAFZK.js} +2 -2
- package/dist/{chunk-PWWKX2HA.js → chunk-LGMH6PCB.js} +7 -7
- package/dist/{chunk-PPMK7CG4.js → chunk-LW6F3IGP.js} +2 -2
- package/dist/{chunk-UYODZ7OE.js → chunk-LWF6AHDG.js} +2 -2
- package/dist/{chunk-2JZV4LUS.js → chunk-MKY7KTZY.js} +3 -13
- package/dist/chunk-MKY7KTZY.js.map +1 -0
- package/dist/{chunk-RFFOL6ON.js → chunk-MWG2PMTE.js} +18 -5
- package/dist/chunk-MWG2PMTE.js.map +1 -0
- package/dist/{chunk-AJC6YRVB.js → chunk-O7NN7PF4.js} +3 -3
- package/dist/{chunk-GDY2Z2SZ.js → chunk-PFJN5OIQ.js} +2 -2
- package/dist/{chunk-XAVSWLX5.js → chunk-PV6KJWYO.js} +2 -2
- package/dist/chunk-PZC5UHIN.js +190 -0
- package/dist/chunk-PZC5UHIN.js.map +1 -0
- package/dist/{chunk-V5DWNXVH.js → chunk-W2XPREWL.js} +135 -26
- package/dist/chunk-W2XPREWL.js.map +1 -0
- package/dist/chunk-W6V63YPY.js +96 -0
- package/dist/chunk-W6V63YPY.js.map +1 -0
- package/dist/{chunk-LJGQ6VQB.js → chunk-XJ5X3NI4.js} +89 -30
- package/dist/chunk-XJ5X3NI4.js.map +1 -0
- package/dist/{chunk-HHMLE3TZ.js → chunk-YCTXTOOQ.js} +7 -16
- package/dist/chunk-YCTXTOOQ.js.map +1 -0
- package/dist/{chunk-7TUAAGVR.js → chunk-YKWUFYXT.js} +2 -2
- package/dist/{chunk-5SJBSCG2.js → chunk-YSR6KLCS.js} +8 -2
- package/dist/chunk-YSR6KLCS.js.map +1 -0
- package/dist/completion/generate-completion.js +3 -3
- package/dist/completion/index.js +3 -3
- package/dist/completion/stream-accumulator.js +1 -1
- package/dist/embeddings/embed.js +1 -1
- package/dist/embeddings/index.js +1 -1
- package/dist/evals/advanced-metrics.js +6 -6
- package/dist/evals/agent-target.js +2 -1
- package/dist/evals/cli.js +6 -6
- package/dist/evals/execution.js +3 -1
- package/dist/evals/index.js +12 -12
- package/dist/evals/judge.js +5 -5
- package/dist/evals/metrics.js +6 -6
- package/dist/evals/runner.js +5 -5
- package/dist/extractor/extractor.js +4 -4
- package/dist/extractor/index.js +4 -4
- package/dist/index.js +23 -23
- package/dist/internal/agent-runtime/agent-run.js +13 -13
- package/dist/internal/agent-runtime/continuation-state.js +3 -3
- package/dist/internal/agent-runtime/interaction-suspension.js +3 -3
- package/dist/internal/agent-runtime/memory.js +5 -5
- package/dist/internal/agent-runtime/retrieval.js +5 -5
- package/dist/internal/agent-runtime/tool-execution.js +8 -8
- package/dist/internal/agent.js +18 -18
- package/dist/internal/team-runtime/member.js +3 -3
- package/dist/internal/team-runtime/run.js +19 -19
- package/dist/memory/compaction.js +4 -4
- package/dist/memory/index.js +4 -4
- package/dist/observability/group.js +3 -3
- package/dist/observability/index.js +3 -3
- package/dist/pipeline/index.js +6 -6
- package/dist/pipeline/pipeline.js +6 -6
- package/dist/schema/standard-json-schema.js +1 -1
- package/dist/skills/index.js +7 -7
- package/dist/skills/load.js +7 -7
- package/dist/skills/tools.js +6 -6
- package/dist/streaming/index.d.ts +2 -1
- package/dist/streaming/index.js +2 -1
- package/dist/streaming/readable-stream.js +2 -1
- package/dist/tool/dynamic-tools.js +5 -5
- package/dist/tool/index.js +5 -5
- package/dist/vector-store/index.js +4 -4
- package/dist/vector-store/ingest.js +2 -2
- package/dist/vector-store/retrieve.js +2 -2
- package/package.json +1 -1
- package/dist/chunk-2JZV4LUS.js.map +0 -1
- package/dist/chunk-54ZZJRP2.js +0 -57
- package/dist/chunk-54ZZJRP2.js.map +0 -1
- package/dist/chunk-5SJBSCG2.js.map +0 -1
- package/dist/chunk-HHMLE3TZ.js.map +0 -1
- package/dist/chunk-JMMZICU7.js.map +0 -1
- package/dist/chunk-LJGQ6VQB.js.map +0 -1
- package/dist/chunk-NNEKBZSM.js +0 -66
- package/dist/chunk-NNEKBZSM.js.map +0 -1
- package/dist/chunk-PZ7ATNR6.js.map +0 -1
- package/dist/chunk-RFFOL6ON.js.map +0 -1
- package/dist/chunk-SIXS4CCU.js.map +0 -1
- package/dist/chunk-V5DWNXVH.js.map +0 -1
- package/dist/chunk-YOLOFTAY.js.map +0 -1
- /package/dist/{chunk-QHGYCYV6.js.map → chunk-3FIX7GLM.js.map} +0 -0
- /package/dist/{chunk-4VDDYI6P.js.map → chunk-5CQRCTIN.js.map} +0 -0
- /package/dist/{chunk-F4BOW76L.js.map → chunk-5TGVDMGM.js.map} +0 -0
- /package/dist/{chunk-TK2VXQVZ.js.map → chunk-7G3YQQVE.js.map} +0 -0
- /package/dist/{chunk-NDAGW32C.js.map → chunk-7OHHMYRO.js.map} +0 -0
- /package/dist/{chunk-3SUEXGRA.js.map → chunk-7V3DKQTI.js.map} +0 -0
- /package/dist/{chunk-DXW37JLZ.js.map → chunk-AMPQJMDG.js.map} +0 -0
- /package/dist/{chunk-ZQC6M22O.js.map → chunk-AQ47TF5K.js.map} +0 -0
- /package/dist/{chunk-HAAGSIZH.js.map → chunk-CB2L2NIQ.js.map} +0 -0
- /package/dist/{chunk-KX2TRKO2.js.map → chunk-GNBPXJC6.js.map} +0 -0
- /package/dist/{chunk-YMTBHHLQ.js.map → chunk-HG6ASDNI.js.map} +0 -0
- /package/dist/{chunk-JMNIWUFV.js.map → chunk-HILMAFZK.js.map} +0 -0
- /package/dist/{chunk-PWWKX2HA.js.map → chunk-LGMH6PCB.js.map} +0 -0
- /package/dist/{chunk-PPMK7CG4.js.map → chunk-LW6F3IGP.js.map} +0 -0
- /package/dist/{chunk-UYODZ7OE.js.map → chunk-LWF6AHDG.js.map} +0 -0
- /package/dist/{chunk-AJC6YRVB.js.map → chunk-O7NN7PF4.js.map} +0 -0
- /package/dist/{chunk-GDY2Z2SZ.js.map → chunk-PFJN5OIQ.js.map} +0 -0
- /package/dist/{chunk-XAVSWLX5.js.map → chunk-PV6KJWYO.js.map} +0 -0
- /package/dist/{chunk-7TUAAGVR.js.map → chunk-YKWUFYXT.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/evals/runner.ts"],"sourcesContent":["import { type Usage, Usage as UsageValue } from \"../completion\";\nimport {\n abortable,\n type ConcurrencyLimiter,\n createConcurrencyLimiter,\n createEvalCaseSignal,\n EvalAbortError,\n EvalTimeoutError,\n} from \"./execution\";\nimport { errorMessage } from \"./format\";\nimport { EvalOutcome, type EvalOutcome as EvalOutcomeType } from \"./outcome\";\nimport { defaultEvalTraceSelector } from \"./reporting\";\nimport type {\n EvalCase,\n EvalCaseResult,\n EvalCostSummary,\n EvalMetric,\n EvalMetricResult,\n EvalReporter,\n EvalRunContext,\n EvalRunEndArgs,\n EvalRunStartArgs,\n EvalSuiteResult,\n EvalTotals,\n EvalTraceRef,\n EvalProgressEvent,\n RunEvalSuiteOptions,\n} from \"./types\";\n\nexport class EvalReporterDispatchError extends AggregateError {\n readonly phase: string;\n\n constructor(phase: string, errors: readonly unknown[]) {\n super(errors, `Evaluation reporter ${phase} failed ${errors.length} time(s).`);\n this.name = \"EvalReporterDispatchError\";\n this.phase = phase;\n }\n}\n\nexport class EvalFailFastError extends Error {\n constructor(\n readonly caseId: string,\n readonly outcome: \"fail\" | \"invalid\",\n ) {\n super(`Evaluation stopped after case ${caseId} produced a required ${outcome} outcome.`);\n this.name = \"EvalFailFastError\";\n }\n}\n\nexport async function runEvalSuite<\n Input,\n Output,\n Expected = unknown,\n const Metrics extends readonly EvalMetric<\n NoInfer<Input>,\n NoInfer<Output>,\n unknown,\n NoInfer<Expected>,\n string\n >[] = readonly EvalMetric<NoInfer<Input>, NoInfer<Output>, unknown, NoInfer<Expected>, string>[],\n>(\n options: RunEvalSuiteOptions<Input, Output, Expected, Metrics>,\n): Promise<EvalSuiteResult<Input, Output, Expected, Metrics>>;\nexport async function runEvalSuite<\n Input,\n Output,\n Expected,\n Metrics extends readonly EvalMetric<Input, Output, unknown, Expected, string>[],\n>(\n options: RunEvalSuiteOptions<Input, Output, Expected, Metrics>,\n): Promise<EvalSuiteResult<Input, Output, Expected, Metrics>> {\n validateSuiteOptions(options);\n const selectedCases = selectCases(options);\n const selectedOptions = {\n ...options,\n cases: selectedCases,\n } as unknown as RunEvalSuiteOptions<Input, Output, Expected, Metrics>;\n const startedAtMs = Date.now();\n const run = resolveRun(selectedOptions, startedAtMs);\n const reporters = options.reporters ?? [];\n const lifecycle = {\n run,\n suiteName: options.name,\n caseCount: selectedCases.length,\n metricNames: options.metrics.map((metric) => metric.name),\n } satisfies EvalRunStartArgs;\n let reporterErrors: unknown[];\n try {\n reporterErrors = await notifyRunStart(\n reporters,\n lifecycle,\n options.reporterErrorPolicy ?? \"collect\",\n );\n } catch (error) {\n await notifyRunEnd(reporters, {\n ...lifecycle,\n status: \"failed\",\n completedAt: new Date().toISOString(),\n durationMs: Date.now() - startedAtMs,\n error,\n });\n throw error;\n }\n let results: Array<EvalCaseResult<Input, Output, Expected, Metrics>>;\n let aggregates: Awaited<ReturnType<typeof aggregateResult>>;\n try {\n results = await runEvalCases(selectedOptions, run);\n aggregates = await aggregateResult(selectedOptions, results);\n } catch (error) {\n await notifyRunEnd(reporters, {\n ...lifecycle,\n status: \"failed\",\n completedAt: new Date().toISOString(),\n durationMs: Date.now() - startedAtMs,\n error,\n });\n throw error;\n }\n const completedAt = new Date().toISOString();\n const result: EvalSuiteResult<Input, Output, Expected, Metrics> = {\n name: options.name,\n run: { ...run, completedAt },\n results,\n metrics: aggregates.metrics,\n cases: aggregates.cases,\n usage: aggregates.usage,\n durationMs: Date.now() - startedAtMs,\n reporterErrors,\n };\n result.reporterErrors.push(\n ...results.flatMap((caseResult) =>\n caseResult.metrics.flatMap((metricResult) => metricResult.reporterErrors),\n ),\n );\n if (aggregates.cost !== undefined) {\n result.cost = aggregates.cost;\n }\n const runEndArgs: EvalRunEndArgs = {\n ...lifecycle,\n status: \"completed\",\n completedAt,\n durationMs: result.durationMs,\n metrics: result.metrics,\n cases: result.cases,\n usage: result.usage,\n };\n if (result.cost !== undefined) {\n runEndArgs.cost = result.cost;\n }\n result.reporterErrors.push(\n ...(await notifyRunEnd(reporters, runEndArgs, options.reporterErrorPolicy ?? \"collect\")),\n );\n return result;\n}\n\nasync function runEvalCases<\n Input,\n Output,\n Expected,\n Metrics extends readonly EvalMetric<Input, Output, unknown, Expected, string>[],\n>(\n options: RunEvalSuiteOptions<Input, Output, Expected, Metrics>,\n run: EvalRunContext,\n): Promise<Array<EvalCaseResult<Input, Output, Expected, Metrics>>> {\n const targetConcurrency = options.targetConcurrency ?? options.concurrency ?? 1;\n const metricConcurrency = options.metricConcurrency ?? options.concurrency ?? 1;\n const workerConcurrency = Math.max(targetConcurrency, metricConcurrency);\n const targetLimit = createConcurrencyLimiter(targetConcurrency);\n const metricLimit = createConcurrencyLimiter(metricConcurrency);\n const results = Array<EvalCaseResult<Input, Output, Expected, Metrics>>(options.cases.length);\n let nextIndex = 0;\n let completedCases = 0;\n let failure: { error: unknown } | undefined;\n\n async function worker(): Promise<void> {\n while (failure === undefined && nextIndex < options.cases.length) {\n if (isAborted(options.signal)) {\n failure ??= { error: suiteAbortReason(options.signal) };\n break;\n }\n const index = nextIndex;\n nextIndex += 1;\n try {\n results[index] = await runEvalCase(\n options,\n options.cases[index] as EvalCase<Input, Expected>,\n run,\n targetLimit,\n metricLimit,\n () => completedCases,\n );\n completedCases += 1;\n if (isAborted(options.signal)) {\n failure ??= { error: suiteAbortReason(options.signal) };\n }\n if (options.failFast === true && results[index]?.outcome !== \"pass\") {\n const result = results[index];\n if (result !== undefined && result.outcome !== \"pass\") {\n failure ??= { error: new EvalFailFastError(result.case.id, result.outcome) };\n }\n }\n } catch (error) {\n failure ??= { error };\n }\n }\n }\n\n await Promise.all(\n Array.from({ length: Math.min(workerConcurrency, options.cases.length) }, () => worker()),\n );\n if (failure !== undefined) throw failure.error;\n return results;\n}\n\nasync function runEvalCase<\n Input,\n Output,\n Expected,\n Metrics extends readonly EvalMetric<Input, Output, unknown, Expected, string>[],\n>(\n options: RunEvalSuiteOptions<Input, Output, Expected, Metrics>,\n testCase: EvalCase<Input, Expected>,\n run: EvalRunContext,\n targetLimit: ConcurrencyLimiter,\n metricLimit: ConcurrencyLimiter,\n completedCases: () => number,\n): Promise<EvalCaseResult<Input, Output, Expected, Metrics>> {\n const caseStartedAt = performance.now();\n const caseSignal = createEvalCaseSignal(options.signal, options.caseTimeoutMs);\n try {\n const progress = (event: EvalProgressEvent<Input, Output, Expected>) =>\n notifyProgress(options, event);\n await progress({\n type: \"case-start\",\n suiteName: options.name,\n case: testCase,\n completedCases: completedCases(),\n totalCases: options.cases.length,\n });\n let output: Output | undefined;\n let targetError: unknown;\n let targetStatus: \"succeeded\" | \"failed\" = \"succeeded\";\n let targetDurationMs = 0;\n try {\n output = await targetLimit(async () => {\n const targetStartedAt = performance.now();\n try {\n return await (caseSignal.signal.aborted\n ? Promise.reject(caseSignal.signal.reason)\n : abortable(\n caseSignal.signal,\n Promise.resolve(\n options.target(testCase.input, testCase, { signal: caseSignal.signal }),\n ),\n ));\n } finally {\n targetDurationMs = performance.now() - targetStartedAt;\n }\n });\n } catch (error) {\n if (options.signal?.aborted === true) {\n throw suiteAbortReason(options.signal);\n }\n targetStatus = \"failed\";\n targetError = error;\n }\n await progress({\n type: \"target-complete\",\n suiteName: options.name,\n case: testCase,\n targetStatus,\n output,\n error: targetError,\n durationMs: targetDurationMs,\n completedCases: completedCases(),\n totalCases: options.cases.length,\n });\n const traceResult = await resolveTrace(options, testCase, output, targetError, targetStatus);\n\n const metrics = await Promise.all(\n options.metrics.map((metric) =>\n metricLimit(async () => {\n const metricStartedAt = performance.now();\n const outcome =\n targetStatus === \"succeeded\"\n ? await safeEvaluate(\n options.name,\n testCase,\n output as Output,\n metric,\n caseSignal.signal,\n )\n : EvalOutcome.invalid(`Target failed: ${errorMessage(targetError)}`, {\n kind: targetError instanceof EvalTimeoutError ? \"timeout\" : \"target\",\n error: targetError,\n });\n const durationMs = performance.now() - metricStartedAt;\n const reporterErrors = await reportOutcome({\n run,\n suiteName: options.name,\n testCase,\n output,\n targetError,\n targetStatus,\n metric,\n outcome,\n trace: traceResult.trace,\n traceError: traceResult.error,\n reporters: options.reporters ?? [],\n reporterErrorPolicy: options.reporterErrorPolicy ?? \"collect\",\n });\n await progress({\n type: \"metric-complete\",\n suiteName: options.name,\n case: testCase,\n metricName: metric.name,\n outcome,\n durationMs,\n completedCases: completedCases(),\n totalCases: options.cases.length,\n });\n const metricResult: EvalMetricResult = {\n metricName: metric.name,\n required: metric.required ?? true,\n outcome,\n durationMs,\n reporterErrors,\n };\n if (metric.direction !== undefined) metricResult.direction = metric.direction;\n if (metric.threshold !== undefined) metricResult.threshold = metric.threshold;\n return metricResult;\n }),\n ),\n );\n\n const scores = Object.fromEntries(\n metrics.map((metric) => [metric.metricName, metric.outcome]),\n ) as EvalCaseResult<Input, Output, Expected, Metrics>[\"scores\"];\n const result: EvalCaseResult<Input, Output, Expected, Metrics> = {\n case: testCase,\n outcome: caseOutcome(targetStatus, metrics),\n targetStatus,\n targetDurationMs,\n durationMs: performance.now() - caseStartedAt,\n metrics: metrics as EvalCaseResult<Input, Output, Expected, Metrics>[\"metrics\"],\n scores,\n usage: emptyUsageSummary(),\n };\n if (targetStatus === \"succeeded\") {\n result.output = output;\n }\n if (targetStatus === \"failed\") {\n result.targetError = targetError;\n }\n await progress({\n type: \"case-complete\",\n suiteName: options.name,\n result,\n completedCases: completedCases() + 1,\n totalCases: options.cases.length,\n });\n return result;\n } finally {\n caseSignal.dispose();\n }\n}\n\nasync function resolveTrace<Input, Output, Expected>(\n options: RunEvalSuiteOptions<Input, Output, Expected>,\n testCase: EvalCase<Input, Expected>,\n output: Output | undefined,\n targetError: unknown,\n targetStatus: \"succeeded\" | \"failed\",\n): Promise<{ trace?: EvalTraceRef | undefined; error?: unknown }> {\n try {\n const selector = options.trace ?? defaultEvalTraceSelector;\n const trace = await selector({\n suiteName: options.name,\n case: testCase,\n output,\n targetError,\n targetStatus,\n });\n return trace === undefined ? {} : { trace };\n } catch (error) {\n return { error };\n }\n}\n\nasync function safeEvaluate<Input, Output, Expected>(\n suiteName: string,\n testCase: EvalCase<Input, Expected>,\n output: Output,\n metric: EvalMetric<Input, Output, unknown, Expected>,\n signal: AbortSignal,\n): Promise<EvalOutcomeType> {\n if (signal.aborted) {\n return EvalOutcome.fromError(\n signal.reason,\n signal.reason instanceof EvalTimeoutError ? \"timeout\" : \"metric\",\n );\n }\n try {\n return await abortable(\n signal,\n Promise.resolve(metric.evaluate({ suiteName, case: testCase, output, signal })),\n );\n } catch (error) {\n return EvalOutcome.fromError(error, error instanceof EvalTimeoutError ? \"timeout\" : \"metric\");\n }\n}\n\nasync function reportOutcome<Input, Output, Expected>(args: {\n run: EvalRunContext;\n suiteName: string;\n testCase: EvalCase<Input, Expected>;\n output: Output | undefined;\n targetError: unknown;\n targetStatus: \"succeeded\" | \"failed\";\n metric: EvalMetric<Input, Output, unknown, Expected>;\n outcome: EvalOutcomeType;\n trace: EvalTraceRef | undefined;\n traceError: unknown;\n reporters: readonly EvalReporter<Input, Output, Expected>[];\n reporterErrorPolicy: \"collect\" | \"throw\";\n}): Promise<unknown[]> {\n const errors: unknown[] = [];\n if (args.traceError !== undefined) {\n errors.push(args.traceError);\n }\n for (const reporter of args.reporters) {\n try {\n await reporter.report({\n run: args.run,\n suiteName: args.suiteName,\n case: args.testCase,\n output: args.output,\n targetError: args.targetError,\n targetStatus: args.targetStatus,\n trace: args.trace,\n metric: args.metric,\n outcome: args.outcome,\n });\n } catch (error) {\n errors.push(error);\n }\n }\n throwReporterErrors(\"report\", errors, args.reporterErrorPolicy);\n return errors;\n}\n\nfunction resolveRun<Input, Output, Expected>(\n options: RunEvalSuiteOptions<Input, Output, Expected>,\n startedAtMs: number,\n): EvalRunContext {\n const id = options.run?.id ?? globalThis.crypto.randomUUID();\n if (id.trim().length === 0 || id.length > 128) {\n throw new TypeError(\"Evaluation run id must contain 1 to 128 characters\");\n }\n for (const [label, value] of [\n [\"dataset name\", options.run?.datasetName],\n [\"dataset version\", options.run?.datasetVersion],\n ] as const) {\n if (value !== undefined && (value.trim().length === 0 || value.length > 256)) {\n throw new TypeError(`Evaluation run ${label} must contain 1 to 256 characters`);\n }\n }\n const run: EvalRunContext = {\n id,\n startedAt: new Date(startedAtMs).toISOString(),\n };\n if (options.run?.datasetName !== undefined) run.datasetName = options.run.datasetName;\n if (options.run?.datasetVersion !== undefined) run.datasetVersion = options.run.datasetVersion;\n if (options.run?.promptRef !== undefined) run.promptRef = options.run.promptRef;\n if (options.run?.metadata !== undefined) run.metadata = options.run.metadata;\n return run;\n}\n\nasync function notifyRunStart<Input, Output, Expected>(\n reporters: readonly EvalReporter<Input, Output, Expected>[],\n args: EvalRunStartArgs,\n errorPolicy: \"collect\" | \"throw\",\n): Promise<unknown[]> {\n const errors: unknown[] = [];\n for (const reporter of reporters) {\n if (reporter.onRunStart === undefined) continue;\n try {\n await reporter.onRunStart(args);\n } catch (error) {\n errors.push(error);\n }\n }\n throwReporterErrors(\"onRunStart\", errors, errorPolicy);\n return errors;\n}\n\nasync function notifyRunEnd<Input, Output, Expected>(\n reporters: readonly EvalReporter<Input, Output, Expected>[],\n args: EvalRunEndArgs,\n errorPolicy: \"collect\" | \"throw\" = \"collect\",\n): Promise<unknown[]> {\n const errors: unknown[] = [];\n for (const reporter of reporters) {\n if (reporter.onRunEnd === undefined) continue;\n try {\n await reporter.onRunEnd(args);\n } catch (error) {\n errors.push(error);\n }\n }\n throwReporterErrors(\"onRunEnd\", errors, errorPolicy);\n return errors;\n}\n\nfunction throwReporterErrors(\n phase: string,\n errors: readonly unknown[],\n errorPolicy: \"collect\" | \"throw\",\n): void {\n if (errorPolicy === \"throw\" && errors.length > 0) {\n throw new EvalReporterDispatchError(phase, errors);\n }\n}\n\nfunction countMetricOutcomes(\n results: Array<EvalCaseResult<unknown, unknown, unknown>>,\n): EvalTotals {\n const totals = emptyTotals();\n for (const result of results) {\n for (const metric of result.metrics) {\n totals.total += 1;\n totals[statusKey(metric.outcome.outcome)] += 1;\n }\n }\n return totals;\n}\n\nfunction countCaseOutcomes(results: Array<EvalCaseResult<unknown, unknown, unknown>>): EvalTotals {\n const totals = emptyTotals();\n for (const result of results) {\n totals.total += 1;\n totals[statusKey(result.outcome)] += 1;\n }\n return totals;\n}\n\nfunction emptyTotals(): EvalTotals {\n return { total: 0, passed: 0, failed: 0, invalid: 0 };\n}\n\nfunction emptyUsageSummary() {\n return {\n target: UsageValue.empty(),\n evaluation: UsageValue.empty(),\n total: UsageValue.empty(),\n };\n}\n\nfunction statusKey(status: \"pass\" | \"fail\" | \"invalid\"): \"passed\" | \"failed\" | \"invalid\" {\n if (status === \"pass\") return \"passed\";\n if (status === \"fail\") return \"failed\";\n return \"invalid\";\n}\n\nfunction caseOutcome(\n targetStatus: \"succeeded\" | \"failed\",\n metrics: EvalMetricResult[],\n): \"pass\" | \"fail\" | \"invalid\" {\n if (targetStatus === \"failed\") return \"invalid\";\n const required = metrics.filter((metric) => metric.required);\n if (required.some((metric) => metric.outcome.outcome === \"invalid\")) return \"invalid\";\n if (required.some((metric) => metric.outcome.outcome === \"fail\")) return \"fail\";\n return \"pass\";\n}\n\nasync function aggregateResult<\n Input,\n Output,\n Expected,\n Metrics extends readonly EvalMetric<Input, Output, unknown, Expected, string>[],\n>(\n options: RunEvalSuiteOptions<Input, Output, Expected, Metrics>,\n results: Array<EvalCaseResult<Input, Output, Expected, Metrics>>,\n): Promise<{\n metrics: EvalTotals;\n cases: EvalTotals;\n usage: { target: Usage; evaluation: Usage; total: Usage };\n cost?: EvalCostSummary | undefined;\n}> {\n let targetUsage = UsageValue.empty();\n let evaluationUsage = UsageValue.empty();\n let targetCost = 0;\n let evaluationCost = 0;\n\n for (const result of results) {\n let caseTargetUsage = UsageValue.empty();\n let caseEvaluationUsage = UsageValue.empty();\n let caseTargetCost = 0;\n let caseEvaluationCost = 0;\n if (result.targetStatus === \"succeeded\") {\n const usage = await resolveTargetUsage(options, result.case, result.output as Output);\n if (usage !== undefined) {\n caseTargetUsage = usage;\n targetUsage = UsageValue.add(targetUsage, usage);\n if (options.cost !== undefined) {\n caseTargetCost = await calculateCost(\n options.cost.calculate({\n kind: \"target\",\n suiteName: options.name,\n case: result.case,\n output: result.output as Output,\n usage,\n }),\n );\n targetCost += caseTargetCost;\n }\n }\n }\n for (const metricResult of result.metrics) {\n const usage = metricResult.outcome.usage;\n if (usage === undefined) continue;\n assertUsage(usage, `Evaluation usage for metric ${metricResult.metricName}`);\n caseEvaluationUsage = UsageValue.add(caseEvaluationUsage, usage);\n evaluationUsage = UsageValue.add(evaluationUsage, usage);\n if (options.cost !== undefined && result.targetStatus === \"succeeded\") {\n const metric = options.metrics.find(\n (candidate) => candidate.name === metricResult.metricName,\n );\n if (metric !== undefined) {\n const metricCost = await calculateCost(\n options.cost.calculate({\n kind: \"evaluation\",\n suiteName: options.name,\n case: result.case,\n output: result.output as Output,\n metric,\n usage,\n }),\n );\n metricResult.cost = metricCost;\n caseEvaluationCost += metricCost;\n evaluationCost += metricCost;\n }\n }\n }\n result.usage = {\n target: caseTargetUsage,\n evaluation: caseEvaluationUsage,\n total: UsageValue.add(caseTargetUsage, caseEvaluationUsage),\n };\n if (options.cost !== undefined) {\n result.cost = {\n currency: options.cost.currency,\n target: caseTargetCost,\n evaluation: caseEvaluationCost,\n total: caseTargetCost + caseEvaluationCost,\n };\n }\n }\n\n const usage = {\n target: targetUsage,\n evaluation: evaluationUsage,\n total: UsageValue.add(targetUsage, evaluationUsage),\n };\n const aggregates: {\n metrics: EvalTotals;\n cases: EvalTotals;\n usage: typeof usage;\n cost?: EvalCostSummary | undefined;\n } = {\n metrics: countMetricOutcomes(results),\n cases: countCaseOutcomes(results),\n usage,\n };\n if (options.cost !== undefined) {\n aggregates.cost = {\n currency: options.cost.currency,\n target: targetCost,\n evaluation: evaluationCost,\n total: targetCost + evaluationCost,\n };\n }\n return aggregates;\n}\n\nasync function resolveTargetUsage<Input, Output, Expected>(\n options: RunEvalSuiteOptions<Input, Output, Expected>,\n testCase: EvalCase<Input, Expected>,\n output: Output,\n): Promise<Usage | undefined> {\n const usage =\n options.targetUsage === undefined\n ? usageFromOutput(output)\n : await options.targetUsage({\n suiteName: options.name,\n case: testCase,\n output,\n signal: new AbortController().signal,\n });\n if (usage !== undefined) assertUsage(usage, `Target usage for case ${testCase.id}`);\n return usage;\n}\n\nfunction usageFromOutput(output: unknown): Usage | undefined {\n if (typeof output !== \"object\" || output === null || !(\"usage\" in output)) return undefined;\n return (output as { usage?: Usage | undefined }).usage;\n}\n\nfunction assertUsage(usage: Usage, label: string): void {\n for (const [key, value] of Object.entries(usage)) {\n if (key === \"details\") continue;\n if (typeof value !== \"number\" || !Number.isFinite(value) || value < 0) {\n throw new TypeError(`${label} must contain finite, non-negative token counts`);\n }\n }\n}\n\nasync function calculateCost(value: number | Promise<number>): Promise<number> {\n const cost = await value;\n if (!Number.isFinite(cost) || cost < 0) {\n throw new TypeError(\"Evaluation cost calculator must return a finite, non-negative number\");\n }\n return cost;\n}\n\nfunction validateSuiteOptions<Input, Output, Expected>(\n options: RunEvalSuiteOptions<Input, Output, Expected>,\n): void {\n if (options.name.trim().length === 0) {\n throw new TypeError(\"Evaluation suite name must not be empty\");\n }\n if (options.cases.length === 0) {\n throw new TypeError(\"Evaluation suite must contain at least one case\");\n }\n if (options.metrics.length === 0) {\n throw new TypeError(\"Evaluation suite must contain at least one metric\");\n }\n for (const testCase of options.cases) {\n if (testCase.id.trim().length === 0) {\n throw new TypeError(\"Evaluation case id must not be empty\");\n }\n }\n for (const metric of options.metrics) {\n if (metric.name.trim().length === 0) {\n throw new TypeError(\"Evaluation metric name must not be empty\");\n }\n }\n assertUnique(\n options.cases.map((testCase) => testCase.id),\n \"Evaluation case id\",\n );\n assertUnique(\n options.metrics.map((metric) => metric.name),\n \"Evaluation metric name\",\n );\n if (options.cost !== undefined && options.cost.currency.trim().length === 0) {\n throw new TypeError(\"Evaluation cost currency must not be empty\");\n }\n for (const [label, value] of [\n [\"concurrency\", options.concurrency],\n [\"targetConcurrency\", options.targetConcurrency],\n [\"metricConcurrency\", options.metricConcurrency],\n ] as const) {\n if (value !== undefined && (!Number.isSafeInteger(value) || value < 1)) {\n throw new RangeError(`Evaluation ${label} must be a positive integer`);\n }\n }\n if (\n options.caseTimeoutMs !== undefined &&\n (!Number.isSafeInteger(options.caseTimeoutMs) || options.caseTimeoutMs < 1)\n ) {\n throw new RangeError(\"Evaluation caseTimeoutMs must be a positive integer\");\n }\n if (options.shard !== undefined) {\n if (!Number.isSafeInteger(options.shard.count) || options.shard.count < 1) {\n throw new RangeError(\"Evaluation shard count must be a positive integer\");\n }\n if (\n !Number.isSafeInteger(options.shard.index) ||\n options.shard.index < 0 ||\n options.shard.index >= options.shard.count\n ) {\n throw new RangeError(\"Evaluation shard index must be between 0 and count - 1\");\n }\n }\n}\n\nfunction assertUnique(values: string[], label: string): void {\n const seen = new Set<string>();\n for (const value of values) {\n if (seen.has(value)) throw new TypeError(`${label} must be unique: ${value}`);\n seen.add(value);\n }\n}\n\nfunction selectCases<Input, Output, Expected>(\n options: RunEvalSuiteOptions<Input, Output, Expected>,\n): readonly EvalCase<Input, Expected>[] {\n const requested = options.caseIds === undefined ? undefined : new Set(options.caseIds);\n if (requested !== undefined) {\n assertUnique([...options.caseIds!], \"Evaluation selected case id\");\n const available = new Set(options.cases.map((testCase) => testCase.id));\n for (const id of requested) {\n if (!available.has(id))\n throw new TypeError(`Evaluation selected case id was not found: ${id}`);\n }\n }\n const filtered = options.cases.filter(\n (testCase, index) =>\n (requested === undefined || requested.has(testCase.id)) &&\n (options.caseFilter === undefined || options.caseFilter(testCase, index)),\n );\n if (options.shard === undefined) return filtered;\n return filtered.filter((_, index) => index % options.shard!.count === options.shard!.index);\n}\n\nasync function notifyProgress<Input, Output, Expected>(\n options: RunEvalSuiteOptions<Input, Output, Expected>,\n event: EvalProgressEvent<Input, Output, Expected>,\n): Promise<void> {\n await options.onProgress?.(event);\n}\n\nfunction isAborted(signal: AbortSignal | undefined): boolean {\n return signal?.aborted === true;\n}\n\nfunction suiteAbortReason(signal: AbortSignal | undefined): unknown {\n return signal?.reason === undefined ? new EvalAbortError() : signal.reason;\n}\n"],"mappings":"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","names":["usage"]}
|
|
@@ -15,7 +15,7 @@ var EvalAbortError = class extends Error {
|
|
|
15
15
|
};
|
|
16
16
|
function createEvalCaseSignal(parent, timeoutMs) {
|
|
17
17
|
const controller = new AbortController();
|
|
18
|
-
const abortFromParent = () => controller.abort(parent
|
|
18
|
+
const abortFromParent = () => controller.abort(parent === void 0 ? new EvalAbortError() : abortReason(parent));
|
|
19
19
|
if (parent?.aborted === true) abortFromParent();
|
|
20
20
|
else parent?.addEventListener("abort", abortFromParent, { once: true });
|
|
21
21
|
const timeout = timeoutMs === void 0 ? void 0 : setTimeout(() => controller.abort(new EvalTimeoutError(timeoutMs)), timeoutMs);
|
|
@@ -27,10 +27,43 @@ function createEvalCaseSignal(parent, timeoutMs) {
|
|
|
27
27
|
}
|
|
28
28
|
};
|
|
29
29
|
}
|
|
30
|
+
function composeEvalSignals(caseSignal, requestSignal) {
|
|
31
|
+
const signals = [.../* @__PURE__ */ new Set([caseSignal, requestSignal])].filter(
|
|
32
|
+
(signal) => signal !== void 0
|
|
33
|
+
);
|
|
34
|
+
if (signals.length < 2) return { signal: signals[0], dispose() {
|
|
35
|
+
} };
|
|
36
|
+
const aborted = signals.find((signal) => signal.aborted);
|
|
37
|
+
if (aborted !== void 0) return { signal: aborted, dispose() {
|
|
38
|
+
} };
|
|
39
|
+
const controller = new AbortController();
|
|
40
|
+
const links = /* @__PURE__ */ new Map();
|
|
41
|
+
const dispose = () => {
|
|
42
|
+
for (const [signal, listener] of links) signal.removeEventListener("abort", listener);
|
|
43
|
+
links.clear();
|
|
44
|
+
};
|
|
45
|
+
for (const signal of signals) {
|
|
46
|
+
const listener = () => {
|
|
47
|
+
controller.abort(abortReason(signal));
|
|
48
|
+
dispose();
|
|
49
|
+
};
|
|
50
|
+
links.set(signal, listener);
|
|
51
|
+
signal.addEventListener("abort", listener, { once: true });
|
|
52
|
+
}
|
|
53
|
+
return { signal: controller.signal, dispose };
|
|
54
|
+
}
|
|
30
55
|
function abortable(signal, operation) {
|
|
31
|
-
if (signal
|
|
56
|
+
if (signal === void 0) return operation;
|
|
57
|
+
if (signal.aborted) {
|
|
58
|
+
void operation.catch(() => {
|
|
59
|
+
});
|
|
60
|
+
return Promise.reject(abortReason(signal));
|
|
61
|
+
}
|
|
32
62
|
return new Promise((resolve, reject) => {
|
|
33
|
-
const onAbort = () =>
|
|
63
|
+
const onAbort = () => {
|
|
64
|
+
signal.removeEventListener("abort", onAbort);
|
|
65
|
+
reject(abortReason(signal));
|
|
66
|
+
};
|
|
34
67
|
signal.addEventListener("abort", onAbort, { once: true });
|
|
35
68
|
operation.then(
|
|
36
69
|
(value) => {
|
|
@@ -61,14 +94,15 @@ function createConcurrencyLimiter(concurrency) {
|
|
|
61
94
|
};
|
|
62
95
|
}
|
|
63
96
|
function abortReason(signal) {
|
|
64
|
-
return signal.reason
|
|
97
|
+
return signal.reason === void 0 ? new EvalAbortError() : signal.reason;
|
|
65
98
|
}
|
|
66
99
|
|
|
67
100
|
export {
|
|
68
101
|
EvalTimeoutError,
|
|
69
102
|
EvalAbortError,
|
|
70
103
|
createEvalCaseSignal,
|
|
104
|
+
composeEvalSignals,
|
|
71
105
|
abortable,
|
|
72
106
|
createConcurrencyLimiter
|
|
73
107
|
};
|
|
74
|
-
//# sourceMappingURL=chunk-
|
|
108
|
+
//# sourceMappingURL=chunk-4OSA3MMA.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/evals/execution.ts"],"sourcesContent":["export class EvalTimeoutError extends Error {\n constructor(readonly timeoutMs: number) {\n super(`Evaluation case exceeded its timeout of ${timeoutMs}ms.`);\n this.name = \"EvalTimeoutError\";\n }\n}\n\nexport class EvalAbortError extends Error {\n constructor(message = \"Evaluation run was aborted.\") {\n super(message);\n this.name = \"EvalAbortError\";\n }\n}\n\nexport type EvalCaseSignal = {\n signal: AbortSignal;\n dispose(): void;\n};\n\nexport function createEvalCaseSignal(\n parent: AbortSignal | undefined,\n timeoutMs: number | undefined,\n): EvalCaseSignal {\n const controller = new AbortController();\n const abortFromParent = () =>\n controller.abort(parent === undefined ? new EvalAbortError() : abortReason(parent));\n if (parent?.aborted === true) abortFromParent();\n else parent?.addEventListener(\"abort\", abortFromParent, { once: true });\n const timeout =\n timeoutMs === undefined\n ? undefined\n : setTimeout(() => controller.abort(new EvalTimeoutError(timeoutMs)), timeoutMs);\n return {\n signal: controller.signal,\n dispose() {\n if (timeout !== undefined) clearTimeout(timeout);\n parent?.removeEventListener(\"abort\", abortFromParent);\n },\n };\n}\n\nexport type EvalInvocationSignal = {\n signal: AbortSignal | undefined;\n dispose(): void;\n};\n\nexport function composeEvalSignals(\n caseSignal: AbortSignal | undefined,\n requestSignal: AbortSignal | undefined,\n): EvalInvocationSignal {\n const signals = [...new Set([caseSignal, requestSignal])].filter(\n (signal): signal is AbortSignal => signal !== undefined,\n );\n if (signals.length < 2) return { signal: signals[0], dispose() {} };\n const aborted = signals.find((signal) => signal.aborted);\n if (aborted !== undefined) return { signal: aborted, dispose() {} };\n\n const controller = new AbortController();\n const links = new Map<AbortSignal, () => void>();\n const dispose = () => {\n for (const [signal, listener] of links) signal.removeEventListener(\"abort\", listener);\n links.clear();\n };\n for (const signal of signals) {\n const listener = () => {\n controller.abort(abortReason(signal));\n dispose();\n };\n links.set(signal, listener);\n signal.addEventListener(\"abort\", listener, { once: true });\n }\n return { signal: controller.signal, dispose };\n}\n\nexport function abortable<T>(signal: AbortSignal | undefined, operation: Promise<T>): Promise<T> {\n if (signal === undefined) return operation;\n if (signal.aborted) {\n void operation.catch(() => {});\n return Promise.reject(abortReason(signal));\n }\n return new Promise<T>((resolve, reject) => {\n const onAbort = () => {\n signal.removeEventListener(\"abort\", onAbort);\n reject(abortReason(signal));\n };\n signal.addEventListener(\"abort\", onAbort, { once: true });\n operation.then(\n (value) => {\n signal.removeEventListener(\"abort\", onAbort);\n resolve(value);\n },\n (error: unknown) => {\n signal.removeEventListener(\"abort\", onAbort);\n reject(error);\n },\n );\n });\n}\n\nexport type ConcurrencyLimiter = <T>(operation: () => Promise<T>) => Promise<T>;\n\nexport function createConcurrencyLimiter(concurrency: number): ConcurrencyLimiter {\n let active = 0;\n const waiting: Array<() => void> = [];\n return async <T>(operation: () => Promise<T>): Promise<T> => {\n if (active >= concurrency) {\n await new Promise<void>((resolve) => waiting.push(resolve));\n }\n active += 1;\n try {\n return await operation();\n } finally {\n active -= 1;\n waiting.shift()?.();\n }\n };\n}\n\nfunction abortReason(signal: AbortSignal): unknown {\n return signal.reason === undefined ? new EvalAbortError() : signal.reason;\n}\n"],"mappings":"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","names":[]}
|
|
@@ -7,9 +7,9 @@ var JSON_SCHEMA_TARGET = "draft-2020-12";
|
|
|
7
7
|
function tryToProviderJsonSchemaFromStandardSchema(schema) {
|
|
8
8
|
const props = schema["~standard"];
|
|
9
9
|
if (props.vendor === "zod") {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
return {
|
|
11
|
+
jsonSchema: toProviderJsonSchemaShape(toProviderZodJsonSchema(schema))
|
|
12
|
+
};
|
|
13
13
|
}
|
|
14
14
|
const jsonSchema = props.jsonSchema;
|
|
15
15
|
if (typeof jsonSchema === "object" && jsonSchema !== null) {
|
|
@@ -85,10 +85,62 @@ async function valibotToProviderJsonSchema(schema) {
|
|
|
85
85
|
return toProviderJsonSchemaShape(jsonSchema);
|
|
86
86
|
}
|
|
87
87
|
function toProviderJsonSchemaShape(jsonSchema) {
|
|
88
|
-
const
|
|
88
|
+
const providerSchema = copyProviderSchema(jsonSchema);
|
|
89
89
|
completeStrictObjectRefinements(providerSchema);
|
|
90
90
|
return providerSchema;
|
|
91
91
|
}
|
|
92
|
+
function copyProviderSchema(source) {
|
|
93
|
+
if (typeof source !== "object" || source === null || Array.isArray(source)) {
|
|
94
|
+
throw new TypeError("Provider JSON schema must be a plain or null-prototype record.");
|
|
95
|
+
}
|
|
96
|
+
return copyJsonData(source, /* @__PURE__ */ new WeakSet(), true);
|
|
97
|
+
}
|
|
98
|
+
function copyJsonData(value, ancestors, omitRootSchema = false) {
|
|
99
|
+
if (value === null || typeof value === "string" || typeof value === "boolean" || typeof value === "number" && Number.isFinite(value)) {
|
|
100
|
+
return value;
|
|
101
|
+
}
|
|
102
|
+
if (typeof value !== "object") {
|
|
103
|
+
throw new TypeError("Provider JSON schema must contain only finite JSON data.");
|
|
104
|
+
}
|
|
105
|
+
if (ancestors.has(value)) {
|
|
106
|
+
throw new TypeError("Provider JSON schema must not contain cycles.");
|
|
107
|
+
}
|
|
108
|
+
ancestors.add(value);
|
|
109
|
+
if (Array.isArray(value)) {
|
|
110
|
+
const copy2 = [];
|
|
111
|
+
for (let index = 0; index < value.length; index++) {
|
|
112
|
+
const descriptor = Object.getOwnPropertyDescriptor(value, String(index));
|
|
113
|
+
if (descriptor === void 0 || !("value" in descriptor)) {
|
|
114
|
+
throw new TypeError(
|
|
115
|
+
"Provider JSON schema arrays must be dense data arrays without accessors."
|
|
116
|
+
);
|
|
117
|
+
}
|
|
118
|
+
copy2.push(copyJsonData(descriptor.value, ancestors));
|
|
119
|
+
}
|
|
120
|
+
ancestors.delete(value);
|
|
121
|
+
return copy2;
|
|
122
|
+
}
|
|
123
|
+
const prototype = Object.getPrototypeOf(value);
|
|
124
|
+
if (prototype !== Object.prototype && prototype !== null) {
|
|
125
|
+
throw new TypeError("Provider JSON schema must contain only plain or null-prototype records.");
|
|
126
|
+
}
|
|
127
|
+
const copy = {};
|
|
128
|
+
for (const key of Object.keys(value)) {
|
|
129
|
+
if (omitRootSchema && key === "$schema") continue;
|
|
130
|
+
const descriptor = Object.getOwnPropertyDescriptor(value, key);
|
|
131
|
+
if (descriptor === void 0 || !("value" in descriptor)) {
|
|
132
|
+
throw new TypeError("Provider JSON schema records must not contain enumerable accessors.");
|
|
133
|
+
}
|
|
134
|
+
Object.defineProperty(copy, key, {
|
|
135
|
+
value: copyJsonData(descriptor.value, ancestors),
|
|
136
|
+
enumerable: true,
|
|
137
|
+
configurable: true,
|
|
138
|
+
writable: true
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
ancestors.delete(value);
|
|
142
|
+
return copy;
|
|
143
|
+
}
|
|
92
144
|
function completeStrictObjectRefinements(jsonSchema) {
|
|
93
145
|
completeSchemaNode(jsonSchema);
|
|
94
146
|
}
|
|
@@ -141,4 +193,4 @@ export {
|
|
|
141
193
|
tryToProviderJsonSchemaFromStandardSchema,
|
|
142
194
|
toProviderJsonSchemaFromStandardSchema
|
|
143
195
|
};
|
|
144
|
-
//# sourceMappingURL=chunk-
|
|
196
|
+
//# sourceMappingURL=chunk-57AUTEQ6.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/schema/standard-json-schema.ts"],"sourcesContent":["import type { z } from \"zod\";\nimport type { JsonObject, JsonValue } from \"../completion/index\";\nimport type { StandardJSONSchemaV1, StandardSchemaV1 } from \"./standard-schema\";\nimport { toProviderJsonSchema } from \"./zod-schema\";\n\nconst JSON_SCHEMA_TARGET = \"draft-2020-12\";\n\n/** The outcome of converting a Standard Schema to a provider JSON Schema. */\nexport type StandardSchemaJsonSchemaConversion =\n | { readonly jsonSchema: JsonObject; readonly pendingSchema?: undefined }\n | { readonly jsonSchema?: undefined; readonly pendingSchema: StandardSchemaV1 };\n\n/**\n * Converts a Standard Schema to the JSON Schema sent to providers when the\n * conversion can happen synchronously; otherwise returns the schema as pending\n * so callers can resolve it asynchronously with\n * {@link toProviderJsonSchemaFromStandardSchema}.\n *\n * Providers receive the schema's input representation: the raw provider\n * response is what `~standard.validate` receives as its validation input,\n * while the validated (possibly transformed) value becomes the completion\n * output. Object nodes are completed with `additionalProperties: false` so\n * payloads remain eligible for provider strict modes such as OpenAI\n * structured outputs.\n */\nexport function tryToProviderJsonSchemaFromStandardSchema(\n schema: StandardSchemaV1,\n): StandardSchemaJsonSchemaConversion {\n const props = schema[\"~standard\"];\n // Zod keeps its native converter. Prefer the output representation: it\n // validates identically for schemas without input/output differences and\n // carries zod's strict-object refinements (additionalProperties: false)\n // that provider strict modes such as OpenAI structured outputs require.\n if (props.vendor === \"zod\") {\n return {\n jsonSchema: toProviderJsonSchemaShape(toProviderZodJsonSchema(schema as z.ZodType)),\n };\n }\n // Generic support for any library implementing the Standard JSON Schema spec.\n const jsonSchema = (\n props as {\n jsonSchema?: StandardJSONSchemaV1[\"~standard\"][\"jsonSchema\"] | undefined;\n }\n ).jsonSchema;\n if (typeof jsonSchema === \"object\" && jsonSchema !== null) {\n return {\n jsonSchema: toProviderJsonSchemaShape(jsonSchema.input({ target: JSON_SCHEMA_TARGET })),\n };\n }\n // Vendor-specific converters may need to be loaded asynchronously.\n return { pendingSchema: schema };\n}\n\nfunction toProviderZodJsonSchema(schema: z.ZodType): JsonObject {\n let outputJsonSchema: JsonObject;\n try {\n outputJsonSchema = toProviderJsonSchema(schema, { io: \"output\" });\n } catch {\n // Transformed schemas are unrepresentable on the output side. Describe the\n // validation input instead so the provider emits values the schema\n // accepts, and the transformed output becomes the completion result.\n return toProviderJsonSchema(schema, { io: \"input\" });\n }\n let inputJsonSchema: JsonObject;\n try {\n inputJsonSchema = toProviderJsonSchema(schema, { io: \"input\" });\n } catch {\n // The input side is not representable while the output side is; the\n // output side remains the best available description.\n return outputJsonSchema;\n }\n // The provider response is fed to `~standard.validate` as its input, so the\n // output representation may only be used when it describes the same accepted\n // values as the input side. Ignoring additionalProperties keeps zod's\n // strict-object refinements (which provider strict modes such as OpenAI\n // structured outputs require) while still detecting schemas whose input and\n // output values genuinely differ, like `z.string().pipe(z.coerce.number())`.\n return jsonSchemaMatchesInputShape(inputJsonSchema, outputJsonSchema)\n ? outputJsonSchema\n : inputJsonSchema;\n}\n\n/** Checks whether the output-side schema shape equals the input-side shape, ignoring strictness. */\nfunction jsonSchemaMatchesInputShape(input: JsonValue, output: JsonValue): boolean {\n if (Array.isArray(input) || Array.isArray(output)) {\n return (\n Array.isArray(input) &&\n Array.isArray(output) &&\n input.length === output.length &&\n input.every((item, index) => jsonSchemaMatchesInputShape(item, output[index]))\n );\n }\n if (\n typeof input === \"object\" &&\n input !== null &&\n typeof output === \"object\" &&\n output !== null\n ) {\n const inputKeys = Object.keys(input).sort();\n const outputKeys = Object.keys(output)\n .filter((key) => key !== \"additionalProperties\")\n .sort();\n return (\n inputKeys.length === outputKeys.length &&\n inputKeys.every((key, index) => {\n const outputKey = outputKeys[index];\n if (outputKey === undefined || key !== outputKey) return false;\n // Keys come from Object.keys, so the indexed values exist by construction.\n const inputValue = (input as Record<string, JsonValue>)[key] as JsonValue;\n const outputValue = (output as Record<string, JsonValue>)[outputKey] as JsonValue;\n return jsonSchemaMatchesInputShape(inputValue, outputValue);\n })\n );\n }\n return input === output;\n}\n\n/**\n * Converts any supported Standard Schema to the JSON Schema sent to providers.\n * Synchronously convertible schemas resolve immediately; Valibot schemas load\n * the optional `@valibot/to-json-schema` converter on first use.\n */\nexport async function toProviderJsonSchemaFromStandardSchema(\n schema: StandardSchemaV1,\n): Promise<JsonObject> {\n const converted = tryToProviderJsonSchemaFromStandardSchema(schema);\n if (converted.jsonSchema !== undefined) return converted.jsonSchema;\n const pending = converted.pendingSchema;\n const vendor = pending[\"~standard\"].vendor;\n if (vendor === \"valibot\") {\n return valibotToProviderJsonSchema(pending);\n }\n throw new Error(\n `Structured output schemas from vendor \"${vendor}\" cannot be converted to a provider JSON schema. ` +\n `Use a Zod or Valibot schema, or make the schema implement the Standard JSON Schema interface (\"~standard.jsonSchema\").`,\n );\n}\n\ntype ValibotToJsonSchemaModule = {\n toJsonSchema: (\n schema: StandardSchemaV1,\n config?: {\n readonly target?: \"draft-07\" | \"draft-2020-12\" | \"openapi-3.0\" | undefined;\n readonly typeMode?: \"ignore\" | \"input\" | \"output\" | undefined;\n },\n ) => Record<string, unknown>;\n};\n\nlet valibotToJsonSchemaModule: Promise<ValibotToJsonSchemaModule> | undefined;\n\nasync function loadValibotToJsonSchema(): Promise<ValibotToJsonSchemaModule> {\n valibotToJsonSchemaModule ??=\n import(\"@valibot/to-json-schema\") as unknown as Promise<ValibotToJsonSchemaModule>;\n try {\n return await valibotToJsonSchemaModule;\n } catch (error) {\n valibotToJsonSchemaModule = undefined;\n throw new Error(\n 'The structured output schema is a Valibot schema, but \"@valibot/to-json-schema\" is not installed. ' +\n \"Install it to use Valibot schemas for structured output.\",\n { cause: error },\n );\n }\n}\n\nasync function valibotToProviderJsonSchema(schema: StandardSchemaV1): Promise<JsonObject> {\n const { toJsonSchema } = await loadValibotToJsonSchema();\n const jsonSchema = toJsonSchema(schema, {\n target: JSON_SCHEMA_TARGET,\n typeMode: \"input\",\n });\n return toProviderJsonSchemaShape(jsonSchema);\n}\n\nfunction toProviderJsonSchemaShape(jsonSchema: Record<string, unknown>): JsonObject {\n const providerSchema = copyProviderSchema(jsonSchema);\n completeStrictObjectRefinements(providerSchema);\n return providerSchema;\n}\n\nfunction copyProviderSchema(source: unknown): JsonObject {\n if (typeof source !== \"object\" || source === null || Array.isArray(source)) {\n throw new TypeError(\"Provider JSON schema must be a plain or null-prototype record.\");\n }\n return copyJsonData(source, new WeakSet(), true) as JsonObject;\n}\n\nfunction copyJsonData(\n value: unknown,\n ancestors: WeakSet<object>,\n omitRootSchema = false,\n): JsonValue {\n if (\n value === null ||\n typeof value === \"string\" ||\n typeof value === \"boolean\" ||\n (typeof value === \"number\" && Number.isFinite(value))\n ) {\n return value;\n }\n if (typeof value !== \"object\") {\n throw new TypeError(\"Provider JSON schema must contain only finite JSON data.\");\n }\n if (ancestors.has(value)) {\n throw new TypeError(\"Provider JSON schema must not contain cycles.\");\n }\n ancestors.add(value);\n if (Array.isArray(value)) {\n const copy: JsonValue[] = [];\n for (let index = 0; index < value.length; index++) {\n const descriptor = Object.getOwnPropertyDescriptor(value, String(index));\n if (descriptor === undefined || !(\"value\" in descriptor)) {\n throw new TypeError(\n \"Provider JSON schema arrays must be dense data arrays without accessors.\",\n );\n }\n copy.push(copyJsonData(descriptor.value, ancestors));\n }\n ancestors.delete(value);\n return copy;\n }\n const prototype = Object.getPrototypeOf(value);\n if (prototype !== Object.prototype && prototype !== null) {\n throw new TypeError(\"Provider JSON schema must contain only plain or null-prototype records.\");\n }\n const copy: JsonObject = {};\n for (const key of Object.keys(value)) {\n if (omitRootSchema && key === \"$schema\") continue;\n const descriptor = Object.getOwnPropertyDescriptor(value, key);\n if (descriptor === undefined || !(\"value\" in descriptor)) {\n throw new TypeError(\"Provider JSON schema records must not contain enumerable accessors.\");\n }\n // Define own data properties so __proto__ cannot change the copy's prototype.\n Object.defineProperty(copy, key, {\n value: copyJsonData(descriptor.value, ancestors),\n enumerable: true,\n configurable: true,\n writable: true,\n });\n }\n ancestors.delete(value);\n return copy;\n}\n\n/**\n * Adds `additionalProperties: false` to object schema nodes that do not declare\n * it. Restricting the provider to declared properties is validation-safe\n * because schema libraries strip or accept unknown input keys, and provider\n * strict modes such as OpenAI structured outputs require the refinement.\n * Explicit values (for example permissive objects) are left untouched.\n *\n * Recursion follows schema-bearing keywords only, so literal values under\n * `const`, `enum`, `default`, `examples`, or extension keywords — which may\n * legitimately be objects with a `type` field — are never rewritten.\n */\nfunction completeStrictObjectRefinements(jsonSchema: unknown): void {\n completeSchemaNode(jsonSchema);\n}\n\n// Schema-bearing keywords of the drafts the converters are requested to\n// produce (draft-07, draft-2020-12), so literal values under const, enum,\n// annotations, and extension keywords are never rewritten.\nconst SCHEMA_POSITIONS: ReadonlySet<string> = new Set([\n \"additionalItems\",\n \"additionalProperties\",\n \"allOf\",\n \"anyOf\",\n \"contains\",\n \"contentSchema\",\n \"else\",\n \"if\",\n \"items\",\n \"not\",\n \"oneOf\",\n \"prefixItems\",\n \"propertyNames\",\n \"then\",\n \"unevaluatedItems\",\n \"unevaluatedProperties\",\n]);\n\nconst SCHEMA_MAP_POSITIONS: ReadonlySet<string> = new Set([\n \"$defs\",\n \"definitions\",\n \"dependencies\",\n \"dependentSchemas\",\n \"patternProperties\",\n \"properties\",\n]);\n\nfunction completeSchemaNode(node: unknown): void {\n if (Array.isArray(node)) {\n // Lists of schemas, like prefixItems and draft-07 items.\n for (const item of node) completeSchemaNode(item);\n return;\n }\n if (typeof node !== \"object\" || node === null) return;\n const schema = node as Record<string, unknown>;\n if (schema.type === \"object\" && schema.additionalProperties === undefined) {\n schema.additionalProperties = false;\n }\n for (const [key, value] of Object.entries(schema)) {\n if (SCHEMA_POSITIONS.has(key)) {\n completeSchemaNode(value);\n } else if (\n SCHEMA_MAP_POSITIONS.has(key) &&\n typeof value === \"object\" &&\n value !== null &&\n !Array.isArray(value)\n ) {\n for (const child of Object.values(value)) completeSchemaNode(child);\n }\n }\n}\n"],"mappings":"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","names":["copy"]}
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
} from "./chunk-JBQNCUXA.js";
|
|
4
4
|
import {
|
|
5
5
|
createSkillTools
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-XJ5X3NI4.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-5CQRCTIN.js.map
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
InMemoryVectorStore
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-PV6KJWYO.js";
|
|
4
4
|
import {
|
|
5
5
|
retrieveDocuments
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-CB2L2NIQ.js";
|
|
7
7
|
import {
|
|
8
8
|
embedDocuments
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-YCTXTOOQ.js";
|
|
10
10
|
import {
|
|
11
11
|
assertFiniteMinScore,
|
|
12
12
|
assertPositiveSearchLimit
|
|
@@ -108,4 +108,4 @@ export {
|
|
|
108
108
|
createToolIndex,
|
|
109
109
|
isToolIndex
|
|
110
110
|
};
|
|
111
|
-
//# sourceMappingURL=chunk-
|
|
111
|
+
//# sourceMappingURL=chunk-5TGVDMGM.js.map
|
|
@@ -3,13 +3,13 @@ import {
|
|
|
3
3
|
} from "./chunk-X6WS3XWL.js";
|
|
4
4
|
import {
|
|
5
5
|
TeamRun
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-7V3DKQTI.js";
|
|
7
7
|
import {
|
|
8
8
|
TeamStream
|
|
9
9
|
} from "./chunk-3TAQXJBC.js";
|
|
10
10
|
import {
|
|
11
11
|
Agent
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-LGMH6PCB.js";
|
|
13
13
|
import {
|
|
14
14
|
assertPositiveSafeInteger
|
|
15
15
|
} from "./chunk-NPJ2T3L5.js";
|
|
@@ -104,4 +104,4 @@ var AgentTeam = class {
|
|
|
104
104
|
export {
|
|
105
105
|
AgentTeam
|
|
106
106
|
};
|
|
107
|
-
//# sourceMappingURL=chunk-
|
|
107
|
+
//# sourceMappingURL=chunk-7G3YQQVE.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createMemoryCompactionSummary,
|
|
3
3
|
cumulativeCompactedMessageCount
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-LW6F3IGP.js";
|
|
5
5
|
import {
|
|
6
6
|
MemoryCompactionConflictError,
|
|
7
7
|
MemoryCompactionError
|
|
@@ -349,4 +349,4 @@ function isEmptyUsage(usage) {
|
|
|
349
349
|
export {
|
|
350
350
|
AgentRunMemory
|
|
351
351
|
};
|
|
352
|
-
//# sourceMappingURL=chunk-
|
|
352
|
+
//# sourceMappingURL=chunk-7OHHMYRO.js.map
|
|
@@ -19,10 +19,10 @@ import {
|
|
|
19
19
|
import {
|
|
20
20
|
createResolvedAgent,
|
|
21
21
|
getResolvedAgentOptions
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-O7NN7PF4.js";
|
|
23
23
|
import {
|
|
24
24
|
AgentRun
|
|
25
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-BI3T62GL.js";
|
|
26
26
|
import {
|
|
27
27
|
withInternalAgentRunOptions
|
|
28
28
|
} from "./chunk-KITX3HDN.js";
|
|
@@ -36,7 +36,7 @@ import {
|
|
|
36
36
|
} from "./chunk-KFAVEL5F.js";
|
|
37
37
|
import {
|
|
38
38
|
isStreamingCompletionModel
|
|
39
|
-
} from "./chunk-
|
|
39
|
+
} from "./chunk-HG6ASDNI.js";
|
|
40
40
|
import {
|
|
41
41
|
Usage
|
|
42
42
|
} from "./chunk-HJ6KTQTZ.js";
|
|
@@ -619,4 +619,4 @@ var TeamRun = class {
|
|
|
619
619
|
export {
|
|
620
620
|
TeamRun
|
|
621
621
|
};
|
|
622
|
-
//# sourceMappingURL=chunk-
|
|
622
|
+
//# sourceMappingURL=chunk-7V3DKQTI.js.map
|
|
@@ -2,9 +2,6 @@ import {
|
|
|
2
2
|
snapshotPipelineObservability,
|
|
3
3
|
startPipelineRunObservers
|
|
4
4
|
} from "./chunk-ETYB5JO6.js";
|
|
5
|
-
import {
|
|
6
|
-
PipelineAgentSuspensionError
|
|
7
|
-
} from "./chunk-R6722CIU.js";
|
|
8
5
|
import {
|
|
9
6
|
childContext,
|
|
10
7
|
combineAbortSignals,
|
|
@@ -12,6 +9,9 @@ import {
|
|
|
12
9
|
runNode,
|
|
13
10
|
stageContext
|
|
14
11
|
} from "./chunk-EKZRAWBP.js";
|
|
12
|
+
import {
|
|
13
|
+
PipelineAgentSuspensionError
|
|
14
|
+
} from "./chunk-R6722CIU.js";
|
|
15
15
|
import {
|
|
16
16
|
appendComposedGraph,
|
|
17
17
|
appendParallelBranch,
|
|
@@ -23,7 +23,7 @@ import {
|
|
|
23
23
|
} from "./chunk-V3FFZWF3.js";
|
|
24
24
|
import {
|
|
25
25
|
extract
|
|
26
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-YKWUFYXT.js";
|
|
27
27
|
import {
|
|
28
28
|
mapWithConcurrency
|
|
29
29
|
} from "./chunk-4FIVU53H.js";
|
|
@@ -372,4 +372,4 @@ function normalizeParallelBranches(branches) {
|
|
|
372
372
|
export {
|
|
373
373
|
Pipeline
|
|
374
374
|
};
|
|
375
|
-
//# sourceMappingURL=chunk-
|
|
375
|
+
//# sourceMappingURL=chunk-AMPQJMDG.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
isToolIndex
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-5TGVDMGM.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-AQ47TF5K.js.map
|
|
@@ -6,11 +6,11 @@ import {
|
|
|
6
6
|
} from "./chunk-LAIATEUB.js";
|
|
7
7
|
import {
|
|
8
8
|
AgentRunMemory
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-7OHHMYRO.js";
|
|
10
10
|
import {
|
|
11
11
|
fetchContextDocuments,
|
|
12
12
|
fetchToolDefinitions
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-PFJN5OIQ.js";
|
|
14
14
|
import {
|
|
15
15
|
getInternalAgentRunOptions
|
|
16
16
|
} from "./chunk-KITX3HDN.js";
|
|
@@ -45,12 +45,12 @@ import {
|
|
|
45
45
|
import {
|
|
46
46
|
startAgentRunObservers
|
|
47
47
|
} from "./chunk-YNA3UR42.js";
|
|
48
|
-
import {
|
|
49
|
-
extractRagText
|
|
50
|
-
} from "./chunk-MJCMKZFP.js";
|
|
51
48
|
import {
|
|
52
49
|
MemoryCompactionError
|
|
53
50
|
} from "./chunk-LQJ4KHMY.js";
|
|
51
|
+
import {
|
|
52
|
+
extractRagText
|
|
53
|
+
} from "./chunk-MJCMKZFP.js";
|
|
54
54
|
import {
|
|
55
55
|
createAsyncQueue
|
|
56
56
|
} from "./chunk-EZR5AV3J.js";
|
|
@@ -85,7 +85,7 @@ import {
|
|
|
85
85
|
} from "./chunk-6BTJC3ES.js";
|
|
86
86
|
import {
|
|
87
87
|
isStreamingCompletionModel
|
|
88
|
-
} from "./chunk-
|
|
88
|
+
} from "./chunk-HG6ASDNI.js";
|
|
89
89
|
import {
|
|
90
90
|
createCompletionRequest
|
|
91
91
|
} from "./chunk-GSVOMQEE.js";
|
|
@@ -94,7 +94,7 @@ import {
|
|
|
94
94
|
} from "./chunk-4ONUNWGC.js";
|
|
95
95
|
import {
|
|
96
96
|
CompletionStreamAccumulator
|
|
97
|
-
} from "./chunk-
|
|
97
|
+
} from "./chunk-MKY7KTZY.js";
|
|
98
98
|
import {
|
|
99
99
|
assertCompletionResponseIntegrity
|
|
100
100
|
} from "./chunk-XQV3XNVT.js";
|
|
@@ -933,7 +933,7 @@ var AgentRun = class _AgentRun {
|
|
|
933
933
|
} finally {
|
|
934
934
|
if (this.runState === "running" || this.runState === "closing") {
|
|
935
935
|
const cancellation = this.cancellationError ?? new AgentRunCancelledError([...this.chatHistory, ...newMessages], "Agent stream closed.");
|
|
936
|
-
this.
|
|
936
|
+
this.setCancellationError(cancellation);
|
|
937
937
|
await settleFailureCleanup([() => this.closeActiveGeneration(cancellation)]);
|
|
938
938
|
await this.reportRunFailure(cancellation, runId, usage, newMessages, runObservers);
|
|
939
939
|
this.runState = "cancelled";
|
|
@@ -2336,4 +2336,4 @@ function observerRunEnd(outcome) {
|
|
|
2336
2336
|
export {
|
|
2337
2337
|
AgentRun
|
|
2338
2338
|
};
|
|
2339
|
-
//# sourceMappingURL=chunk-
|
|
2339
|
+
//# sourceMappingURL=chunk-BI3T62GL.js.map
|