@anvia/core 1.5.1 → 1.6.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 +112 -1
- package/dist/agent/agent-tool.js +7 -7
- package/dist/agent/agent.js +25 -25
- package/dist/agent/index.js +29 -29
- package/dist/agent/resolve-options.js +10 -10
- package/dist/agent/resolved-agent.js +26 -26
- package/dist/agent/team/agent-team.js +29 -29
- package/dist/agent/team/index.js +29 -29
- package/dist/agent/tool-catalog.js +9 -9
- 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-Y365ABZY.js → chunk-4WSICA6D.js} +2 -2
- package/dist/{chunk-YOLOFTAY.js → chunk-57AUTEQ6.js} +57 -5
- package/dist/chunk-57AUTEQ6.js.map +1 -0
- package/dist/{chunk-647TQE3E.js → chunk-5BO4OTTK.js} +5 -5
- package/dist/{chunk-ZQC6M22O.js → chunk-7LBUXGJI.js} +2 -2
- package/dist/{chunk-NDAGW32C.js → chunk-7OHHMYRO.js} +2 -2
- package/dist/{chunk-DXW37JLZ.js → chunk-AMPQJMDG.js} +5 -5
- package/dist/{chunk-HAAGSIZH.js → chunk-CB2L2NIQ.js} +2 -2
- package/dist/{chunk-3SUEXGRA.js → chunk-D6FK5ZQR.js} +5 -5
- package/dist/{chunk-B57NNDEF.js → chunk-FTK6YRLN.js} +5 -5
- package/dist/{chunk-T3ZOZEAB.js → chunk-GB4SRUT7.js} +2 -2
- package/dist/{chunk-KX2TRKO2.js → chunk-GNBPXJC6.js} +2 -2
- package/dist/{chunk-PZ7ATNR6.js → chunk-GRI4EFNG.js} +15 -15
- package/dist/chunk-GRI4EFNG.js.map +1 -0
- package/dist/{chunk-CJKGTEN4.js → chunk-HDL5TXF7.js} +2 -2
- package/dist/{chunk-YMTBHHLQ.js → chunk-HG6ASDNI.js} +3 -3
- package/dist/{chunk-XAVSWLX5.js → chunk-IMSM4HHI.js} +3 -3
- package/dist/{chunk-TK2VXQVZ.js → chunk-KGVDUYZV.js} +3 -3
- package/dist/{chunk-PPMK7CG4.js → chunk-LW6F3IGP.js} +2 -2
- package/dist/{chunk-PWWKX2HA.js → chunk-MJAM7HZB.js} +8 -8
- 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-JMNIWUFV.js → chunk-NKSXYOUM.js} +3 -3
- package/dist/{chunk-4VDDYI6P.js → chunk-OBTD3GPY.js} +2 -2
- package/dist/{chunk-GDY2Z2SZ.js → chunk-PFJN5OIQ.js} +2 -2
- package/dist/chunk-PZC5UHIN.js +190 -0
- package/dist/chunk-PZC5UHIN.js.map +1 -0
- package/dist/{chunk-UYODZ7OE.js → chunk-STEAW4JD.js} +2 -2
- package/dist/{chunk-LJGQ6VQB.js → chunk-TD2VYYUT.js} +90 -31
- package/dist/chunk-TD2VYYUT.js.map +1 -0
- package/dist/{chunk-AJC6YRVB.js → chunk-TOJSC4GI.js} +3 -3
- 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-F4BOW76L.js → chunk-XQTTPQWA.js} +4 -4
- 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/{chunk-6E6ABRJ6.js → chunk-ZJ4T7CEX.js} +2 -2
- 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/guardrails/index.js +4 -4
- package/dist/index.js +34 -34
- package/dist/internal/agent-runtime/agent-run.js +21 -21
- 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/prepared-tool-call.js +2 -2
- package/dist/internal/agent-runtime/retrieval.js +8 -8
- package/dist/internal/agent-runtime/tool-execution.js +15 -15
- package/dist/internal/agent.js +26 -26
- package/dist/internal/team-runtime/member.js +3 -3
- package/dist/internal/team-runtime/run.js +28 -28
- package/dist/internal/team-runtime/tools.js +4 -4
- 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 +13 -13
- package/dist/skills/load.js +13 -13
- package/dist/skills/tools.js +12 -12
- 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/create-tool.js +3 -3
- package/dist/tool/dynamic-tools.js +8 -8
- package/dist/tool/index.js +14 -14
- package/dist/tool/question-tool.js +4 -4
- package/dist/tool/think-tool.js +4 -4
- package/dist/vector-store/index.js +7 -7
- 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-Y365ABZY.js.map → chunk-4WSICA6D.js.map} +0 -0
- /package/dist/{chunk-647TQE3E.js.map → chunk-5BO4OTTK.js.map} +0 -0
- /package/dist/{chunk-ZQC6M22O.js.map → chunk-7LBUXGJI.js.map} +0 -0
- /package/dist/{chunk-NDAGW32C.js.map → chunk-7OHHMYRO.js.map} +0 -0
- /package/dist/{chunk-DXW37JLZ.js.map → chunk-AMPQJMDG.js.map} +0 -0
- /package/dist/{chunk-HAAGSIZH.js.map → chunk-CB2L2NIQ.js.map} +0 -0
- /package/dist/{chunk-3SUEXGRA.js.map → chunk-D6FK5ZQR.js.map} +0 -0
- /package/dist/{chunk-B57NNDEF.js.map → chunk-FTK6YRLN.js.map} +0 -0
- /package/dist/{chunk-T3ZOZEAB.js.map → chunk-GB4SRUT7.js.map} +0 -0
- /package/dist/{chunk-KX2TRKO2.js.map → chunk-GNBPXJC6.js.map} +0 -0
- /package/dist/{chunk-CJKGTEN4.js.map → chunk-HDL5TXF7.js.map} +0 -0
- /package/dist/{chunk-YMTBHHLQ.js.map → chunk-HG6ASDNI.js.map} +0 -0
- /package/dist/{chunk-XAVSWLX5.js.map → chunk-IMSM4HHI.js.map} +0 -0
- /package/dist/{chunk-TK2VXQVZ.js.map → chunk-KGVDUYZV.js.map} +0 -0
- /package/dist/{chunk-PPMK7CG4.js.map → chunk-LW6F3IGP.js.map} +0 -0
- /package/dist/{chunk-PWWKX2HA.js.map → chunk-MJAM7HZB.js.map} +0 -0
- /package/dist/{chunk-JMNIWUFV.js.map → chunk-NKSXYOUM.js.map} +0 -0
- /package/dist/{chunk-4VDDYI6P.js.map → chunk-OBTD3GPY.js.map} +0 -0
- /package/dist/{chunk-GDY2Z2SZ.js.map → chunk-PFJN5OIQ.js.map} +0 -0
- /package/dist/{chunk-UYODZ7OE.js.map → chunk-STEAW4JD.js.map} +0 -0
- /package/dist/{chunk-AJC6YRVB.js.map → chunk-TOJSC4GI.js.map} +0 -0
- /package/dist/{chunk-F4BOW76L.js.map → chunk-XQTTPQWA.js.map} +0 -0
- /package/dist/{chunk-7TUAAGVR.js.map → chunk-YKWUFYXT.js.map} +0 -0
- /package/dist/{chunk-6E6ABRJ6.js.map → chunk-ZJ4T7CEX.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/completion/stream-accumulator.ts"],"sourcesContent":["import { isJsonValue } from \"./json\";\nimport { CompletionProviderOutputError } from \"./provider-output-error\";\nimport type {\n AssistantContentPart,\n CompletionModelStreamEvent,\n CompletionResponse,\n CompletionSource,\n CompletionStreamPart,\n JsonValue,\n ProviderToolCall,\n ReasoningDetail,\n ToolCallPart,\n} from \"./types\";\nimport { Usage } from \"./types\";\n\ntype AccumulatedStreamEvent = Exclude<\n CompletionStreamPart,\n { type: \"tool_call_delta\" } | { type: \"message_id\" }\n>;\n\ntype ReasoningState = {\n id?: string;\n text: string;\n details?: ReasoningDetail[];\n};\n\ntype PartialToolCall = {\n id: string;\n callId?: string;\n name: string;\n argumentsText: string;\n argumentsSnapshotSeen: boolean;\n signature?: string;\n fullCallSeen: boolean;\n};\n\ntype OrderedPartRef =\n | { type: \"text\"; key: string }\n | { type: \"reasoning\"; key: string }\n | { type: \"tool_call\"; key: string };\n\nexport class CompletionStreamAccumulator<RawResponse = unknown> {\n private orderedParts: OrderedPartRef[] = [];\n private textParts = new Map<string, string>();\n private reasoningByKey = new Map<string, ReasoningState>();\n private reasoningKeyById = new Map<string, string>();\n private toolCalls = new Map<string, PartialToolCall>();\n private sources = new Map<string, CompletionSource>();\n private providerToolCalls = new Map<string, ProviderToolCall>();\n private finalResponse: CompletionResponse<RawResponse> | undefined;\n private messageId: string | undefined;\n private nextTextKey = 0;\n private nextReasoningKey = 0;\n\n accept(event: CompletionModelStreamEvent<RawResponse>): AccumulatedStreamEvent | undefined {\n if (event.type === \"text_delta\") {\n if (typeof event.delta !== \"string\") {\n throw new CompletionProviderOutputError({ kind: \"invalid-stream-event\" });\n }\n this.appendText(event.delta);\n return { type: \"text_delta\", delta: event.delta };\n }\n\n if (event.type === \"reasoning_delta\") {\n if (\n typeof event.delta !== \"string\" ||\n (event.id !== undefined && !isNonblankString(event.id)) ||\n (event.signature !== undefined && !isNonblankString(event.signature)) ||\n (event.contentType !== undefined && !isReasoningContentType(event.contentType))\n ) {\n throw new CompletionProviderOutputError({ kind: \"invalid-stream-event\" });\n }\n const reasoning = this.reasoningStateForEvent(event);\n this.appendReasoning(reasoning, event);\n return reasoningDeltaEvent(event);\n }\n\n if (event.type === \"tool_call_delta\") {\n if (!isNonblankString(event.id)) {\n throw new CompletionProviderOutputError({ kind: \"invalid-tool-call\" });\n }\n const toolCall = this.toolCallStateForId(event.id);\n if (toolCall.fullCallSeen) {\n throw new CompletionProviderOutputError({\n kind: \"invalid-tool-call\",\n toolCallId: toolCall.id,\n });\n }\n if (event.callId !== undefined) {\n if (!isNonblankString(event.callId)) {\n throw new CompletionProviderOutputError({\n kind: \"invalid-tool-call\",\n toolCallId: toolCall.id,\n });\n }\n if (toolCall.callId !== undefined && toolCall.callId !== event.callId) {\n throw new CompletionProviderOutputError({\n kind: \"invalid-tool-call\",\n toolCallId: toolCall.id,\n });\n }\n toolCall.callId = event.callId;\n }\n if (event.name !== undefined) {\n if (!isNonblankString(event.name)) {\n throw new CompletionProviderOutputError({\n kind: \"invalid-tool-call\",\n toolCallId: toolCall.id,\n });\n }\n if (toolCall.name.length > 0 && toolCall.name !== event.name) {\n throw new CompletionProviderOutputError({\n kind: \"invalid-tool-call\",\n toolCallId: toolCall.id,\n });\n }\n toolCall.name = event.name;\n }\n if (event.signature !== undefined) {\n if (\n !isNonblankString(event.signature) ||\n (toolCall.signature !== undefined && toolCall.signature !== event.signature)\n ) {\n throw new CompletionProviderOutputError({\n kind: \"invalid-tool-call\",\n toolCallId: toolCall.id,\n });\n }\n toolCall.signature = event.signature;\n }\n if (\n event.argumentsMode !== undefined &&\n event.argumentsMode !== \"append\" &&\n event.argumentsMode !== \"replace\"\n ) {\n throw new CompletionProviderOutputError({\n kind: \"invalid-stream-event\",\n toolCallId: toolCall.id,\n });\n }\n if (event.argumentsMode !== undefined && event.argumentsDelta === undefined) {\n throw new CompletionProviderOutputError({\n kind: \"invalid-stream-event\",\n toolCallId: toolCall.id,\n });\n }\n if (event.argumentsDelta !== undefined) {\n if (typeof event.argumentsDelta !== \"string\") {\n throw new CompletionProviderOutputError({\n kind: \"invalid-tool-arguments\",\n toolCallId: toolCall.id,\n });\n }\n if (event.argumentsMode === \"replace\") {\n if (\n toolCall.argumentsText.length > 0 &&\n toolCall.argumentsText !== event.argumentsDelta &&\n (toolCall.argumentsSnapshotSeen ||\n !event.argumentsDelta.startsWith(toolCall.argumentsText))\n ) {\n throw new CompletionProviderOutputError({\n kind: \"invalid-tool-call\",\n toolCallId: toolCall.id,\n });\n }\n toolCall.argumentsText = event.argumentsDelta;\n toolCall.argumentsSnapshotSeen = true;\n } else {\n if (toolCall.argumentsSnapshotSeen) {\n throw new CompletionProviderOutputError({\n kind: \"invalid-tool-call\",\n toolCallId: toolCall.id,\n });\n }\n toolCall.argumentsText += event.argumentsDelta;\n }\n }\n return undefined;\n }\n\n if (event.type === \"tool_call\") {\n this.upsertToolCall(event.toolCall);\n return { type: \"tool_call\", toolCall: event.toolCall };\n }\n\n if (event.type === \"source\") {\n this.sources.set(sourceKey(event.source), event.source);\n return { type: \"source\", source: event.source };\n }\n\n if (event.type === \"provider_tool_call\") {\n this.providerToolCalls.set(event.toolCall.id, event.toolCall);\n return { type: \"provider_tool_call\", toolCall: event.toolCall };\n }\n\n if (event.type === \"message_id\") {\n if (!isNonblankString(event.id)) {\n throw new CompletionProviderOutputError({ kind: \"invalid-stream-event\" });\n }\n this.messageId = event.id;\n return undefined;\n }\n\n if (event.type === \"final\") {\n this.finalResponse = event.response;\n return undefined;\n }\n\n return undefined;\n }\n\n response(): CompletionResponse<RawResponse> {\n this.assertAccumulatedFinishReason();\n let accumulatedResponse: CompletionResponse<RawResponse>;\n try {\n accumulatedResponse = this.buildAccumulatedResponse();\n } catch (error) {\n if (error instanceof CompletionProviderOutputError && this.finalResponse !== undefined) {\n throw providerOutputErrorWithUsage(error, this.finalResponse.usage);\n }\n throw error;\n }\n if (this.finalResponse !== undefined) {\n if (accumulatedResponse.choice.length === 0) {\n return this.withAccumulatedArtifacts(this.finalResponse, accumulatedResponse);\n }\n return this.mergeFinalResponse(accumulatedResponse, this.finalResponse);\n }\n\n return accumulatedResponse;\n }\n\n private assertAccumulatedFinishReason(): void {\n if (this.finalResponse === undefined) {\n if (this.toolCalls.size === 0) {\n throw new CompletionProviderOutputError({ kind: \"incomplete-stream\" });\n }\n const toolCallId = this.toolCalls.size === 1 ? this.toolCalls.keys().next().value : undefined;\n throw new CompletionProviderOutputError({\n kind: \"incomplete-tool-call\",\n toolCallId,\n });\n }\n if (this.toolCalls.size === 0) return;\n const finishReason = this.finalResponse.finishReason;\n if (finishReason === \"length\") {\n throw new CompletionProviderOutputError({\n kind: \"truncated-tool-call\",\n finishReason,\n usage: this.finalResponse.usage,\n });\n }\n if (finishReason === \"content-filter\") {\n throw new CompletionProviderOutputError({\n kind: \"filtered-tool-call\",\n finishReason,\n usage: this.finalResponse.usage,\n });\n }\n if (finishReason !== undefined && finishReason !== \"stop\" && finishReason !== \"tool-calls\") {\n throw new CompletionProviderOutputError({\n kind: \"invalid-tool-call\",\n usage: this.finalResponse.usage,\n });\n }\n }\n\n private buildAccumulatedResponse(): CompletionResponse<RawResponse> {\n const choice: AssistantContentPart[] = [];\n\n for (const part of this.orderedParts) {\n if (part.type === \"text\") {\n const text = this.textParts.get(part.key) ?? \"\";\n if (text.length > 0) {\n choice.push({ type: \"text\", text });\n }\n continue;\n }\n\n if (part.type === \"reasoning\") {\n const reasoning = this.reasoningByKey.get(part.key);\n if (reasoning !== undefined) {\n choice.push(reasoningContent(reasoning));\n }\n continue;\n }\n\n const toolCall = this.toolCalls.get(part.key);\n if (toolCall !== undefined) {\n choice.push(toolCallContent(toolCall));\n }\n }\n\n const response: CompletionResponse<RawResponse> = {\n choice,\n usage: Usage.empty(),\n rawResponse: undefined as RawResponse,\n };\n if (this.messageId !== undefined) {\n response.messageId = this.messageId;\n }\n const sources = [...this.sources.values()];\n if (sources.length > 0) {\n response.sources = sources;\n }\n const providerToolCalls = [...this.providerToolCalls.values()];\n if (providerToolCalls.length > 0) {\n response.providerToolCalls = providerToolCalls;\n }\n return response;\n }\n\n private upsertToolCall(toolCall: ToolCallPart): void {\n if (\n !isNonblankString(toolCall.toolCallId) ||\n !isNonblankString(toolCall.toolName) ||\n (toolCall.callId !== undefined && !isNonblankString(toolCall.callId)) ||\n (toolCall.signature !== undefined && !isNonblankString(toolCall.signature))\n ) {\n throw new CompletionProviderOutputError({\n kind: \"invalid-tool-call\",\n toolCallId: isNonblankString(toolCall.toolCallId) ? toolCall.toolCallId : undefined,\n });\n }\n if (!isJsonValue(toolCall.input)) {\n throw new CompletionProviderOutputError({\n kind: \"invalid-tool-arguments\",\n toolCallId: toolCall.toolCallId,\n });\n }\n const existing = this.toolCalls.get(toolCall.toolCallId);\n if (existing !== undefined) {\n if (existing.fullCallSeen) {\n throw new CompletionProviderOutputError({\n kind: \"invalid-tool-call\",\n toolCallId: toolCall.toolCallId,\n });\n }\n if (\n (existing.name.length > 0 && existing.name !== toolCall.toolName) ||\n (existing.callId !== undefined && existing.callId !== toolCall.callId) ||\n (existing.signature !== undefined &&\n toolCall.signature !== undefined &&\n existing.signature !== toolCall.signature)\n ) {\n throw new CompletionProviderOutputError({\n kind: \"invalid-tool-call\",\n toolCallId: toolCall.toolCallId,\n });\n }\n if (existing.argumentsText.length > 0) {\n const accumulatedInput = parseToolArguments(existing.id, existing.argumentsText);\n if (!jsonValuesEqual(accumulatedInput, toolCall.input)) {\n throw new CompletionProviderOutputError({\n kind: \"invalid-tool-call\",\n toolCallId: toolCall.toolCallId,\n });\n }\n }\n }\n if (!this.toolCalls.has(toolCall.toolCallId)) {\n this.orderedParts.push({ type: \"tool_call\", key: toolCall.toolCallId });\n }\n const partial: PartialToolCall = {\n id: toolCall.toolCallId,\n name: toolCall.toolName,\n argumentsText: JSON.stringify(toolCall.input),\n argumentsSnapshotSeen: true,\n fullCallSeen: true,\n };\n if (toolCall.callId !== undefined) {\n partial.callId = toolCall.callId;\n }\n const signature = toolCall.signature ?? existing?.signature;\n if (signature !== undefined) {\n partial.signature = signature;\n }\n this.toolCalls.set(toolCall.toolCallId, partial);\n }\n\n private mergeFinalResponse(\n accumulatedResponse: CompletionResponse<RawResponse>,\n finalResponse: CompletionResponse<RawResponse>,\n ): CompletionResponse<RawResponse> {\n if (finalResponse.choice.length === 0) {\n const mergedResponse: CompletionResponse<RawResponse> = {\n ...finalResponse,\n choice: accumulatedResponse.choice,\n };\n return this.withAccumulatedArtifacts(mergedResponse, accumulatedResponse);\n }\n\n const accumulatedNonTool = accumulatedResponse.choice.filter(\n (content) => content.type !== \"tool-call\",\n );\n const finalNonTool = finalResponse.choice.filter((content) => content.type !== \"tool-call\");\n if (accumulatedNonTool.length > 0 && !nonToolPartsEqual(accumulatedNonTool, finalNonTool)) {\n throw new CompletionProviderOutputError({\n kind: \"invalid-stream-event\",\n usage: finalResponse.usage,\n });\n }\n\n const accumulatedById = new Map<string, ToolCallPart>();\n const accumulatedByCallId = new Map<string, ToolCallPart>();\n for (const content of accumulatedResponse.choice) {\n if (content.type !== \"tool-call\") continue;\n accumulatedById.set(content.toolCallId, content);\n if (content.callId !== undefined) accumulatedByCallId.set(content.callId, content);\n }\n\n const matchedAccumulatedToolCalls = new Set<ToolCallPart>();\n const choice = finalResponse.choice.map((content) => {\n if (content.type !== \"tool-call\") return content;\n const accumulated = accumulatedById.get(content.toolCallId);\n if (accumulated === undefined) {\n const changedIdentity =\n content.callId === undefined ? undefined : accumulatedByCallId.get(content.callId);\n if (changedIdentity !== undefined) {\n throw new CompletionProviderOutputError({\n kind: \"invalid-tool-call\",\n toolCallId: changedIdentity.toolCallId,\n usage: finalResponse.usage,\n });\n }\n return content;\n }\n matchedAccumulatedToolCalls.add(accumulated);\n return mergeFinalToolCall(accumulated, content, finalResponse.usage);\n });\n\n for (const accumulated of accumulatedById.values()) {\n if (!matchedAccumulatedToolCalls.has(accumulated)) {\n throw new CompletionProviderOutputError({\n kind: \"invalid-tool-call\",\n toolCallId: accumulated.toolCallId,\n usage: finalResponse.usage,\n });\n }\n }\n\n return this.withAccumulatedArtifacts({ ...finalResponse, choice }, accumulatedResponse);\n }\n\n private appendText(delta: string): void {\n const lastPart = this.orderedParts.at(-1);\n const key = lastPart?.type === \"text\" ? lastPart.key : this.createTextKey();\n if (lastPart?.type !== \"text\") {\n this.orderedParts.push({ type: \"text\", key });\n }\n this.textParts.set(key, `${this.textParts.get(key) ?? \"\"}${delta}`);\n }\n\n private reasoningStateForEvent(\n event: Extract<CompletionModelStreamEvent<RawResponse>, { type: \"reasoning_delta\" }>,\n ): ReasoningState {\n if (event.id !== undefined) {\n const existingKey = this.reasoningKeyById.get(event.id);\n if (existingKey !== undefined) {\n const existing = this.reasoningByKey.get(existingKey);\n if (existing !== undefined) {\n return existing;\n }\n }\n\n const key = this.createReasoningKey();\n const reasoning: ReasoningState = { id: event.id, text: \"\" };\n this.reasoningKeyById.set(event.id, key);\n this.reasoningByKey.set(key, reasoning);\n this.orderedParts.push({ type: \"reasoning\", key });\n return reasoning;\n }\n\n const lastPart = this.orderedParts.at(-1);\n if (lastPart?.type === \"reasoning\") {\n const lastReasoning = this.reasoningByKey.get(lastPart.key);\n if (lastReasoning !== undefined && lastReasoning.id === undefined) {\n return lastReasoning;\n }\n }\n\n const key = this.createReasoningKey();\n const reasoning: ReasoningState = { text: \"\" };\n this.reasoningByKey.set(key, reasoning);\n this.orderedParts.push({ type: \"reasoning\", key });\n return reasoning;\n }\n\n private toolCallStateForId(id: string): PartialToolCall {\n const existing = this.toolCalls.get(id);\n if (existing !== undefined) {\n return existing;\n }\n\n const toolCall: PartialToolCall = {\n id,\n name: \"\",\n argumentsText: \"\",\n argumentsSnapshotSeen: false,\n fullCallSeen: false,\n };\n this.toolCalls.set(id, toolCall);\n this.orderedParts.push({ type: \"tool_call\", key: id });\n return toolCall;\n }\n\n private withMessageIdFallback(\n response: CompletionResponse<RawResponse>,\n accumulatedResponse: CompletionResponse<RawResponse>,\n ): CompletionResponse<RawResponse> {\n if (response.messageId !== undefined || accumulatedResponse.messageId === undefined) {\n return response;\n }\n return { ...response, messageId: accumulatedResponse.messageId };\n }\n\n private withAccumulatedArtifacts(\n response: CompletionResponse<RawResponse>,\n accumulatedResponse: CompletionResponse<RawResponse>,\n ): CompletionResponse<RawResponse> {\n const withMessageId = this.withMessageIdFallback(response, accumulatedResponse);\n const sources = mergeSources(accumulatedResponse.sources, response.sources);\n const providerToolCalls = mergeProviderToolCalls(\n accumulatedResponse.providerToolCalls,\n response.providerToolCalls,\n );\n let accumulated: CompletionResponse<RawResponse> = { ...withMessageId };\n if (sources.length > 0) accumulated = { ...accumulated, sources };\n if (providerToolCalls.length > 0) {\n accumulated = { ...accumulated, providerToolCalls };\n }\n return accumulated;\n }\n\n private createTextKey(): string {\n this.nextTextKey += 1;\n return `text_${this.nextTextKey.toString()}`;\n }\n\n private createReasoningKey(): string {\n this.nextReasoningKey += 1;\n return `reasoning_${this.nextReasoningKey.toString()}`;\n }\n\n private appendReasoning(\n reasoning: ReasoningState,\n event: Extract<CompletionModelStreamEvent<RawResponse>, { type: \"reasoning_delta\" }>,\n ): void {\n const contentType = event.contentType ?? \"text\";\n if (contentType === \"text\" || contentType === \"summary\") {\n reasoning.text += event.delta;\n }\n\n if (event.contentType === undefined && event.signature === undefined) {\n return;\n }\n\n reasoning.details ??= [];\n const last = reasoning.details.at(-1);\n if (contentType === \"text\") {\n if (last?.type === \"text\") {\n let detail: ReasoningDetail = {\n ...last,\n text: `${last.text}${event.delta}`,\n };\n if (event.signature !== undefined) detail = { ...detail, signature: event.signature };\n reasoning.details[reasoning.details.length - 1] = detail;\n } else {\n reasoning.details.push(\n event.signature === undefined\n ? { type: \"text\", text: event.delta }\n : { type: \"text\", text: event.delta, signature: event.signature },\n );\n }\n return;\n }\n\n if (contentType === \"summary\") {\n if (last?.type === \"summary\") {\n reasoning.details[reasoning.details.length - 1] = {\n ...last,\n text: `${last.text}${event.delta}`,\n };\n } else {\n reasoning.details.push({ type: \"summary\", text: event.delta });\n }\n return;\n }\n\n if (contentType === \"encrypted\") {\n reasoning.details.push({ type: \"encrypted\", data: event.delta });\n return;\n }\n\n reasoning.details.push({ type: \"redacted\", data: event.delta });\n }\n}\n\nfunction sourceKey(source: CompletionSource): string {\n return `${source.url}\\u0000${source.startIndex ?? \"\"}\\u0000${source.endIndex ?? \"\"}`;\n}\n\nfunction mergeSources(\n accumulated: CompletionSource[] | undefined,\n final: CompletionSource[] | undefined,\n): CompletionSource[] {\n const sources = new Map<string, CompletionSource>();\n for (const source of [...(accumulated ?? []), ...(final ?? [])]) {\n sources.set(sourceKey(source), source);\n }\n return [...sources.values()];\n}\n\nfunction mergeProviderToolCalls(\n accumulated: ProviderToolCall[] | undefined,\n final: ProviderToolCall[] | undefined,\n): ProviderToolCall[] {\n const toolCalls = new Map<string, ProviderToolCall>();\n for (const toolCall of [...(accumulated ?? []), ...(final ?? [])]) {\n toolCalls.set(toolCall.id, toolCall);\n }\n return [...toolCalls.values()];\n}\n\nfunction reasoningContent(reasoning: ReasoningState): AssistantContentPart {\n const content =\n reasoning.details === undefined\n ? { type: \"reasoning\" as const, text: reasoning.text }\n : { type: \"reasoning\" as const, text: reasoning.text, details: reasoning.details };\n return reasoning.id === undefined ? content : { ...content, id: reasoning.id };\n}\n\nfunction toolCallContent(toolCall: PartialToolCall): ToolCallPart {\n const argumentsValue = parseToolArguments(toolCall.id, toolCall.argumentsText);\n let content: ToolCallPart = {\n type: \"tool-call\",\n toolCallId: toolCall.id,\n toolName: toolCall.name,\n input: argumentsValue,\n };\n if (toolCall.callId !== undefined) content = { ...content, callId: toolCall.callId };\n if (toolCall.signature !== undefined) content = { ...content, signature: toolCall.signature };\n return content;\n}\n\nfunction mergeFinalToolCall(\n accumulated: ToolCallPart,\n finalToolCall: ToolCallPart,\n usage: CompletionResponse[\"usage\"],\n): ToolCallPart {\n if (\n finalToolCall.toolCallId !== accumulated.toolCallId ||\n finalToolCall.toolName !== accumulated.toolName ||\n (accumulated.callId !== undefined && finalToolCall.callId !== accumulated.callId) ||\n (accumulated.signature !== undefined &&\n finalToolCall.signature !== undefined &&\n finalToolCall.signature !== accumulated.signature)\n ) {\n throw new CompletionProviderOutputError({\n kind: \"invalid-tool-call\",\n toolCallId: accumulated.toolCallId,\n usage,\n });\n }\n if (!isJsonValue(finalToolCall.input)) {\n throw new CompletionProviderOutputError({\n kind: \"invalid-tool-arguments\",\n toolCallId: accumulated.toolCallId,\n usage,\n });\n }\n if (!jsonValuesEqual(accumulated.input, finalToolCall.input)) {\n throw new CompletionProviderOutputError({\n kind: \"invalid-tool-call\",\n toolCallId: accumulated.toolCallId,\n usage,\n });\n }\n let merged: ToolCallPart = {\n type: \"tool-call\",\n toolCallId: finalToolCall.toolCallId,\n toolName: finalToolCall.toolName,\n input: accumulated.input,\n };\n const callId = finalToolCall.callId ?? accumulated.callId;\n if (callId !== undefined) merged = { ...merged, callId };\n const signature = finalToolCall.signature ?? accumulated.signature;\n if (signature !== undefined) merged = { ...merged, signature };\n return merged;\n}\n\nfunction reasoningDeltaEvent(\n event: Extract<CompletionModelStreamEvent, { type: \"reasoning_delta\" }>,\n): AccumulatedStreamEvent {\n const mapped: AccumulatedStreamEvent = { type: \"reasoning_delta\", delta: event.delta };\n if (event.id !== undefined) mapped.id = event.id;\n if (event.contentType !== undefined) mapped.contentType = event.contentType;\n if (event.signature !== undefined) mapped.signature = event.signature;\n return mapped;\n}\n\nfunction parseToolArguments(toolCallId: string, text: string): JsonValue {\n let value: unknown;\n try {\n value = JSON.parse(text);\n } catch {\n throw new CompletionProviderOutputError({\n kind: \"malformed-tool-arguments\",\n toolCallId,\n });\n }\n if (!isJsonValue(value)) {\n throw new CompletionProviderOutputError({\n kind: \"invalid-tool-arguments\",\n toolCallId,\n });\n }\n return value;\n}\n\nfunction jsonValuesEqual(left: JsonValue, right: JsonValue): boolean {\n if (left === right) {\n return true;\n }\n if (left === null || right === null || typeof left !== \"object\" || typeof right !== \"object\") {\n return false;\n }\n if (isJsonArray(left) || isJsonArray(right)) {\n if (!isJsonArray(left) || !isJsonArray(right) || left.length !== right.length) {\n return false;\n }\n return left.every((value, index) => {\n const rightValue = right[index];\n return rightValue !== undefined && jsonValuesEqual(value, rightValue);\n });\n }\n\n const leftKeys = Object.keys(left);\n const rightKeys = Object.keys(right);\n if (leftKeys.length !== rightKeys.length) {\n return false;\n }\n for (const key of leftKeys) {\n if (!Object.hasOwn(right, key)) {\n return false;\n }\n const leftValue = left[key];\n const rightValue = right[key];\n if (\n leftValue === undefined ||\n rightValue === undefined ||\n !jsonValuesEqual(leftValue, rightValue)\n ) {\n return false;\n }\n }\n return true;\n}\n\nfunction nonToolPartsEqual(\n accumulated: readonly AssistantContentPart[],\n final: readonly AssistantContentPart[],\n): boolean {\n if (accumulated.length !== final.length) return false;\n if (!isJsonValue(accumulated) || !isJsonValue(final)) return false;\n const unmatched = [...final];\n for (const part of accumulated) {\n const index = unmatched.findIndex((candidate) => jsonValuesEqual(part, candidate));\n if (index < 0) return false;\n unmatched.splice(index, 1);\n }\n return true;\n}\n\nfunction isJsonArray(value: JsonValue): value is readonly JsonValue[] {\n return Array.isArray(value);\n}\n\nfunction providerOutputErrorWithUsage(\n error: CompletionProviderOutputError,\n usage: CompletionResponse[\"usage\"],\n): CompletionProviderOutputError {\n const shared: { toolCallId?: string; usage: CompletionResponse[\"usage\"] } = { usage };\n if (error.toolCallId !== undefined) shared.toolCallId = error.toolCallId;\n if (error.kind === \"truncated-tool-call\") {\n return new CompletionProviderOutputError({\n ...shared,\n kind: error.kind,\n finishReason: \"length\",\n });\n }\n if (error.kind === \"filtered-tool-call\") {\n return new CompletionProviderOutputError({\n ...shared,\n kind: error.kind,\n finishReason: \"content-filter\",\n });\n }\n if (error.finishReason === \"length\" || error.finishReason === \"content-filter\") {\n throw error;\n }\n return new CompletionProviderOutputError({\n ...shared,\n kind: error.kind,\n finishReason: error.finishReason,\n });\n}\n\nfunction isNonblankString(value: unknown): value is string {\n return typeof value === \"string\" && value.trim().length > 0;\n}\n\nfunction isReasoningContentType(value: unknown): boolean {\n return value === \"text\" || value === \"summary\" || value === \"encrypted\" || value === \"redacted\";\n}\n"],"mappings":"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","names":["key","reasoning"]}
|
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
} from "./chunk-ZPXOBQDS.js";
|
|
7
7
|
import {
|
|
8
8
|
extract
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-YKWUFYXT.js";
|
|
10
10
|
import {
|
|
11
11
|
evalValuesEqual,
|
|
12
12
|
formatValue
|
|
@@ -19,7 +19,10 @@ import {
|
|
|
19
19
|
} from "./chunk-7F53DOML.js";
|
|
20
20
|
import {
|
|
21
21
|
embedText
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-YCTXTOOQ.js";
|
|
23
|
+
import {
|
|
24
|
+
throwIfAborted
|
|
25
|
+
} from "./chunk-USRKPEQN.js";
|
|
23
26
|
|
|
24
27
|
// src/evals/metrics.ts
|
|
25
28
|
import { z } from "zod";
|
|
@@ -205,7 +208,9 @@ function semanticSimilarity(options) {
|
|
|
205
208
|
direction: "higher_is_better",
|
|
206
209
|
threshold,
|
|
207
210
|
async evaluate(args) {
|
|
211
|
+
throwIfAborted(args.signal);
|
|
208
212
|
const actual = await resolveActualText(options.actual, args);
|
|
213
|
+
throwIfAborted(args.signal);
|
|
209
214
|
const expected = await resolveExpected(options.expected, args);
|
|
210
215
|
if (expected === void 0) {
|
|
211
216
|
return EvalOutcome.invalid("No expected value provided for semantic similarity.");
|
|
@@ -213,10 +218,12 @@ function semanticSimilarity(options) {
|
|
|
213
218
|
if (typeof expected !== "string") {
|
|
214
219
|
return EvalOutcome.invalid("Semantic similarity expected value must be a string.");
|
|
215
220
|
}
|
|
221
|
+
throwIfAborted(args.signal);
|
|
216
222
|
const [{ embedding: actualEmbedding }, { embedding: expectedEmbedding }] = await Promise.all([
|
|
217
|
-
embedText({ model: options.model, text: actual }),
|
|
218
|
-
embedText({ model: options.model, text: expected })
|
|
223
|
+
embedText({ model: options.model, text: actual, abortSignal: args.signal }),
|
|
224
|
+
embedText({ model: options.model, text: expected, abortSignal: args.signal })
|
|
219
225
|
]);
|
|
226
|
+
throwIfAborted(args.signal);
|
|
220
227
|
const score = cosineSimilarity(actualEmbedding.vector, expectedEmbedding.vector);
|
|
221
228
|
return score >= threshold ? EvalOutcome.pass(score) : EvalOutcome.fail(score, { comment: `Similarity below threshold ${threshold}.` });
|
|
222
229
|
}
|
|
@@ -229,13 +236,16 @@ function llmJudge(options) {
|
|
|
229
236
|
required: options.required ?? true,
|
|
230
237
|
async evaluate(args) {
|
|
231
238
|
try {
|
|
239
|
+
throwIfAborted(args.signal);
|
|
232
240
|
const result = await extract({
|
|
233
241
|
model: options.model,
|
|
234
242
|
outputSchema: options.schema,
|
|
243
|
+
abortSignal: args.signal,
|
|
235
244
|
instructions: options.instructions ?? "Judge the eval case by the requested schema. Submit the judgment using the schema.",
|
|
236
245
|
text: await resolveJudgePrompt(options.prompt, args),
|
|
237
246
|
retries
|
|
238
247
|
});
|
|
248
|
+
throwIfAborted(args.signal);
|
|
239
249
|
return options.passes(result.output) ? EvalOutcome.pass(result.output, { usage: result.usage }) : EvalOutcome.fail(result.output, { usage: result.usage });
|
|
240
250
|
} catch (error) {
|
|
241
251
|
return EvalOutcome.fromError(error);
|
|
@@ -257,12 +267,14 @@ function llmScore(options) {
|
|
|
257
267
|
threshold,
|
|
258
268
|
async evaluate(args) {
|
|
259
269
|
try {
|
|
270
|
+
throwIfAborted(args.signal);
|
|
260
271
|
const result = await extract({
|
|
261
272
|
model: options.model,
|
|
262
273
|
outputSchema: z.object({
|
|
263
274
|
score: z.number(),
|
|
264
275
|
feedback: z.string()
|
|
265
276
|
}),
|
|
277
|
+
abortSignal: args.signal,
|
|
266
278
|
instructions: options.instructions ?? `Score the eval case against these criteria:
|
|
267
279
|
${criteria}
|
|
268
280
|
|
|
@@ -270,6 +282,7 @@ Return a score between 0 and 1 and brief feedback.`,
|
|
|
270
282
|
text: await resolveJudgePrompt(options.prompt, args),
|
|
271
283
|
retries
|
|
272
284
|
});
|
|
285
|
+
throwIfAborted(args.signal);
|
|
273
286
|
const score = result.output;
|
|
274
287
|
if (score.score < 0 || score.score > 1) {
|
|
275
288
|
return EvalOutcome.invalid(`Score ${score.score} outside valid range [0, 1].`, {
|
|
@@ -315,4 +328,4 @@ export {
|
|
|
315
328
|
llmJudge,
|
|
316
329
|
llmScore
|
|
317
330
|
};
|
|
318
|
-
//# sourceMappingURL=chunk-
|
|
331
|
+
//# sourceMappingURL=chunk-MWG2PMTE.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/evals/metrics.ts"],"sourcesContent":["import { z } from \"zod\";\nimport type { CompletionModel } from \"../completion\";\nimport { cosineSimilarity, type EmbeddingModel, embedText } from \"../embeddings\";\nimport { extract } from \"../extractor\";\nimport { throwIfAborted } from \"../internal/abort\";\nimport type { ZodSchema } from \"../schema\";\nimport { evalValuesEqual, formatValue } from \"./format\";\nimport { EvalOutcome } from \"./outcome\";\nimport { resolveActual, resolveActualText, resolveExpected, resolveJudgePrompt } from \"./selectors\";\nimport type { EvalCaseRequirements, EvalMetric, SelectorOrValue, ValueSelector } from \"./types\";\n\nexport type ExactMatchOptions<Input, Output, Expected = unknown> = {\n name?: string | undefined;\n required?: boolean | undefined;\n actual?: ValueSelector<Input, Output, Expected, unknown> | undefined;\n expected?: SelectorOrValue<Input, Output, Expected, unknown> | undefined;\n};\n\nexport function exactMatch<Input, Output, Expected = unknown, const Name extends string = string>(\n options: ExactMatchOptions<Input, Output, Expected> & {\n expected: Exclude<ExactMatchOptions<Input, Output, Expected>[\"expected\"], undefined>;\n name?: Name | undefined;\n },\n): EvalMetric<Input, Output, boolean, Expected, Name>;\nexport function exactMatch<Input, Output, Expected = unknown, const Name extends string = string>(\n options?: Omit<ExactMatchOptions<Input, Output, Expected>, \"expected\"> & {\n expected?: undefined;\n name?: Name | undefined;\n },\n): EvalMetric<Input, Output, boolean, Expected, Name, { expected: unknown }>;\nexport function exactMatch<Input, Output, Expected = unknown, const Name extends string = string>(\n options: ExactMatchOptions<Input, Output, Expected> & { name?: Name | undefined } = {},\n): EvalMetric<Input, Output, boolean, Expected, Name, EvalCaseRequirements> {\n return {\n name: (options.name ?? \"exact_match\") as Name,\n required: options.required ?? true,\n dataType: \"BOOLEAN\",\n direction: \"higher_is_better\",\n threshold: 1,\n async evaluate(args) {\n const actual = await resolveActual(options.actual, args);\n const expected = await resolveExpected(options.expected, args);\n if (expected === undefined) {\n return EvalOutcome.invalid(\"No expected value provided for exact match.\");\n }\n const passed = evalValuesEqual(actual, expected);\n return passed\n ? EvalOutcome.pass(true)\n : EvalOutcome.fail(false, { comment: `Expected ${formatValue(expected)}.` });\n },\n };\n}\n\nexport type ContainsOptions<Input, Output, Expected = unknown> = {\n name?: string | undefined;\n required?: boolean | undefined;\n actual?: ValueSelector<Input, Output, Expected, string> | undefined;\n expected?: SelectorOrValue<Input, Output, Expected, string | RegExp> | undefined;\n};\n\nexport function contains<Input, Output, Expected = unknown, const Name extends string = string>(\n options: ContainsOptions<Input, Output, Expected> & {\n expected: Exclude<ContainsOptions<Input, Output, Expected>[\"expected\"], undefined>;\n name?: Name | undefined;\n },\n): EvalMetric<Input, Output, boolean, Expected, Name>;\nexport function contains<Input, Output, Expected = unknown, const Name extends string = string>(\n options?: Omit<ContainsOptions<Input, Output, Expected>, \"expected\"> & {\n expected?: undefined;\n name?: Name | undefined;\n },\n): EvalMetric<Input, Output, boolean, Expected, Name, { expected: string | RegExp }>;\nexport function contains<Input, Output, Expected = unknown, const Name extends string = string>(\n options: ContainsOptions<Input, Output, Expected> & { name?: Name | undefined } = {},\n): EvalMetric<Input, Output, boolean, Expected, Name, EvalCaseRequirements> {\n return {\n name: (options.name ?? \"contains\") as Name,\n required: options.required ?? true,\n dataType: \"BOOLEAN\",\n direction: \"higher_is_better\",\n threshold: 1,\n async evaluate(args) {\n const actual = await resolveActualText(options.actual, args);\n const expected = await resolveExpected(options.expected, args);\n if (expected === undefined) {\n return EvalOutcome.invalid(\"No expected value provided for contains.\");\n }\n if (typeof expected !== \"string\" && !(expected instanceof RegExp)) {\n return EvalOutcome.invalid(\"Contains expected value must be a string or RegExp.\");\n }\n const passed =\n expected instanceof RegExp ? regexMatches(expected, actual) : actual.includes(expected);\n return passed\n ? EvalOutcome.pass(true)\n : EvalOutcome.fail(false, { comment: `Output did not contain ${String(expected)}.` });\n },\n };\n}\n\nexport type NotContainsOptions<Input, Output, Expected = unknown> = ContainsOptions<\n Input,\n Output,\n Expected\n>;\n\nexport function notContains<Input, Output, Expected = unknown, const Name extends string = string>(\n options: NotContainsOptions<Input, Output, Expected> & {\n expected: Exclude<NotContainsOptions<Input, Output, Expected>[\"expected\"], undefined>;\n name?: Name | undefined;\n },\n): EvalMetric<Input, Output, boolean, Expected, Name>;\nexport function notContains<Input, Output, Expected = unknown, const Name extends string = string>(\n options?: Omit<NotContainsOptions<Input, Output, Expected>, \"expected\"> & {\n expected?: undefined;\n name?: Name | undefined;\n },\n): EvalMetric<Input, Output, boolean, Expected, Name, { expected: string | RegExp }>;\nexport function notContains<Input, Output, Expected = unknown, const Name extends string = string>(\n options: NotContainsOptions<Input, Output, Expected> & { name?: Name | undefined } = {},\n): EvalMetric<Input, Output, boolean, Expected, Name, EvalCaseRequirements> {\n return {\n name: (options.name ?? \"not_contains\") as Name,\n required: options.required ?? true,\n dataType: \"BOOLEAN\",\n direction: \"higher_is_better\",\n threshold: 1,\n async evaluate(args) {\n const actual = await resolveActualText(options.actual, args);\n const expected = await resolveExpected(options.expected, args);\n if (expected === undefined) {\n return EvalOutcome.invalid(\"No expected value provided for notContains.\");\n }\n if (typeof expected !== \"string\" && !(expected instanceof RegExp)) {\n return EvalOutcome.invalid(\"notContains expected value must be a string or RegExp.\");\n }\n const found = textExpectationMatches(expected, actual);\n return found\n ? EvalOutcome.fail(false, {\n comment: `Output contained forbidden value ${String(expected)}.`,\n })\n : EvalOutcome.pass(true);\n },\n };\n}\n\nexport type ContainsListOptions<Input, Output, Expected = unknown> = {\n name?: string | undefined;\n required?: boolean | undefined;\n actual?: ValueSelector<Input, Output, Expected, string> | undefined;\n expected?: SelectorOrValue<Input, Output, Expected, ReadonlyArray<string | RegExp>> | undefined;\n};\n\nexport type ContainsAllOptions<Input, Output, Expected = unknown> = ContainsListOptions<\n Input,\n Output,\n Expected\n>;\n\nexport function containsAll<Input, Output, Expected = unknown, const Name extends string = string>(\n options: ContainsAllOptions<Input, Output, Expected> & {\n expected: Exclude<ContainsAllOptions<Input, Output, Expected>[\"expected\"], undefined>;\n name?: Name | undefined;\n },\n): EvalMetric<Input, Output, boolean, Expected, Name>;\nexport function containsAll<Input, Output, Expected = unknown, const Name extends string = string>(\n options: Omit<ContainsAllOptions<Input, Output, Expected>, \"expected\"> & {\n expected?: undefined;\n name?: Name | undefined;\n },\n): EvalMetric<Input, Output, boolean, Expected, Name, { expected: ReadonlyArray<string | RegExp> }>;\nexport function containsAll<Input, Output, Expected = unknown, const Name extends string = string>(\n options: ContainsAllOptions<Input, Output, Expected> & { name?: Name | undefined },\n): EvalMetric<Input, Output, boolean, Expected, Name, EvalCaseRequirements> {\n return containsListMetric(\"contains_all\", \"all\", options);\n}\n\nexport type ContainsAnyOptions<Input, Output, Expected = unknown> = ContainsListOptions<\n Input,\n Output,\n Expected\n>;\n\nexport function containsAny<Input, Output, Expected = unknown, const Name extends string = string>(\n options: ContainsAnyOptions<Input, Output, Expected> & {\n expected: Exclude<ContainsAnyOptions<Input, Output, Expected>[\"expected\"], undefined>;\n name?: Name | undefined;\n },\n): EvalMetric<Input, Output, boolean, Expected, Name>;\nexport function containsAny<Input, Output, Expected = unknown, const Name extends string = string>(\n options: Omit<ContainsAnyOptions<Input, Output, Expected>, \"expected\"> & {\n expected?: undefined;\n name?: Name | undefined;\n },\n): EvalMetric<Input, Output, boolean, Expected, Name, { expected: ReadonlyArray<string | RegExp> }>;\nexport function containsAny<Input, Output, Expected = unknown, const Name extends string = string>(\n options: ContainsAnyOptions<Input, Output, Expected> & { name?: Name | undefined },\n): EvalMetric<Input, Output, boolean, Expected, Name, EvalCaseRequirements> {\n return containsListMetric(\"contains_any\", \"any\", options);\n}\n\nfunction containsListMetric<Input, Output, Expected, const Name extends string>(\n defaultName: string,\n mode: \"all\" | \"any\",\n options: ContainsListOptions<Input, Output, Expected> & { name?: Name | undefined },\n): EvalMetric<Input, Output, boolean, Expected, Name> {\n return {\n name: (options.name ?? defaultName) as Name,\n required: options.required ?? true,\n dataType: \"BOOLEAN\",\n direction: \"higher_is_better\",\n threshold: 1,\n async evaluate(args) {\n const actual = await resolveActualText(options.actual, args);\n const expected = await resolveExpected(options.expected, args);\n if (!Array.isArray(expected) || expected.length === 0) {\n return EvalOutcome.invalid(`${defaultName} expected value must be a non-empty array.`);\n }\n if (expected.some((value) => typeof value !== \"string\" && !(value instanceof RegExp))) {\n return EvalOutcome.invalid(`${defaultName} expected values must be strings or RegExp.`);\n }\n const matches = expected.map((value) => textExpectationMatches(value, actual));\n const passed = mode === \"all\" ? matches.every(Boolean) : matches.some(Boolean);\n if (passed) return EvalOutcome.pass(true);\n const missing = expected.filter((_, index) => !matches[index]).map(String);\n const comment =\n mode === \"all\"\n ? `Output was missing: ${missing.join(\", \")}.`\n : `Output matched none of: ${expected.map(String).join(\", \")}.`;\n return EvalOutcome.fail(false, { comment });\n },\n };\n}\n\nexport type MatchesOptions<Input, Output, Expected = unknown> = {\n name?: string | undefined;\n required?: boolean | undefined;\n actual?: ValueSelector<Input, Output, Expected, string> | undefined;\n expected?: SelectorOrValue<Input, Output, Expected, RegExp> | undefined;\n};\n\nexport function matches<Input, Output, Expected = unknown, const Name extends string = string>(\n options: MatchesOptions<Input, Output, Expected> & {\n expected: Exclude<MatchesOptions<Input, Output, Expected>[\"expected\"], undefined>;\n name?: Name | undefined;\n },\n): EvalMetric<Input, Output, boolean, Expected, Name>;\nexport function matches<Input, Output, Expected = unknown, const Name extends string = string>(\n options: Omit<MatchesOptions<Input, Output, Expected>, \"expected\"> & {\n expected?: undefined;\n name?: Name | undefined;\n },\n): EvalMetric<Input, Output, boolean, Expected, Name, { expected: RegExp }>;\nexport function matches<Input, Output, Expected = unknown, const Name extends string = string>(\n options: MatchesOptions<Input, Output, Expected> & { name?: Name | undefined },\n): EvalMetric<Input, Output, boolean, Expected, Name, EvalCaseRequirements> {\n return regexMetric(\"matches\", false, options);\n}\n\nexport type DoesNotMatchOptions<Input, Output, Expected = unknown> = MatchesOptions<\n Input,\n Output,\n Expected\n>;\n\nexport function doesNotMatch<Input, Output, Expected = unknown, const Name extends string = string>(\n options: DoesNotMatchOptions<Input, Output, Expected> & {\n expected: Exclude<DoesNotMatchOptions<Input, Output, Expected>[\"expected\"], undefined>;\n name?: Name | undefined;\n },\n): EvalMetric<Input, Output, boolean, Expected, Name>;\nexport function doesNotMatch<Input, Output, Expected = unknown, const Name extends string = string>(\n options: Omit<DoesNotMatchOptions<Input, Output, Expected>, \"expected\"> & {\n expected?: undefined;\n name?: Name | undefined;\n },\n): EvalMetric<Input, Output, boolean, Expected, Name, { expected: RegExp }>;\nexport function doesNotMatch<Input, Output, Expected = unknown, const Name extends string = string>(\n options: DoesNotMatchOptions<Input, Output, Expected> & { name?: Name | undefined },\n): EvalMetric<Input, Output, boolean, Expected, Name, EvalCaseRequirements> {\n return regexMetric(\"does_not_match\", true, options);\n}\n\nfunction regexMetric<Input, Output, Expected, const Name extends string>(\n defaultName: string,\n negate: boolean,\n options: MatchesOptions<Input, Output, Expected> & { name?: Name | undefined },\n): EvalMetric<Input, Output, boolean, Expected, Name> {\n return {\n name: (options.name ?? defaultName) as Name,\n required: options.required ?? true,\n dataType: \"BOOLEAN\",\n direction: \"higher_is_better\",\n threshold: 1,\n async evaluate(args) {\n const actual = await resolveActualText(options.actual, args);\n const expected = await resolveExpected(options.expected, args);\n if (!(expected instanceof RegExp)) {\n return EvalOutcome.invalid(`${defaultName} expected value must be a RegExp.`);\n }\n const matched = regexMatches(expected, actual);\n const passed = negate ? !matched : matched;\n return passed\n ? EvalOutcome.pass(true)\n : EvalOutcome.fail(false, {\n comment: negate\n ? `Output matched forbidden pattern ${String(expected)}.`\n : `Output did not match ${String(expected)}.`,\n });\n },\n };\n}\n\nexport type MaxLengthOptions<Input, Output, Expected = unknown> = {\n name?: string | undefined;\n required?: boolean | undefined;\n actual?: ValueSelector<Input, Output, Expected, string> | undefined;\n max: SelectorOrValue<Input, Output, Expected, number>;\n};\n\nexport function maxLength<Input, Output, Expected = unknown, const Name extends string = string>(\n options: MaxLengthOptions<Input, Output, Expected> & { name?: Name | undefined },\n): EvalMetric<Input, Output, boolean, Expected, Name> {\n return {\n name: (options.name ?? \"max_length\") as Name,\n required: options.required ?? true,\n dataType: \"BOOLEAN\",\n direction: \"higher_is_better\",\n threshold: 1,\n async evaluate(args) {\n const actual = await resolveActualText(options.actual, args);\n const max = await resolveOption(options.max, args);\n if (!Number.isInteger(max) || max < 0) {\n return EvalOutcome.invalid(\"maxLength max must be a non-negative integer.\");\n }\n const length = Array.from(actual).length;\n return length <= max\n ? EvalOutcome.pass(true)\n : EvalOutcome.fail(false, { comment: `Output length ${length} exceeded maximum ${max}.` });\n },\n };\n}\n\nexport type RequiredFieldsOptions<Input, Output, Expected = unknown> = {\n name?: string | undefined;\n required?: boolean | undefined;\n actual?: ValueSelector<Input, Output, Expected, unknown> | undefined;\n expected: SelectorOrValue<Input, Output, Expected, readonly string[]>;\n};\n\nexport function requiredFields<\n Input,\n Output,\n Expected = unknown,\n const Name extends string = string,\n>(\n options: RequiredFieldsOptions<Input, Output, Expected> & { name?: Name | undefined },\n): EvalMetric<Input, Output, boolean, Expected, Name> {\n return {\n name: (options.name ?? \"required_fields\") as Name,\n required: options.required ?? true,\n dataType: \"BOOLEAN\",\n direction: \"higher_is_better\",\n threshold: 1,\n async evaluate(args) {\n const actual = await resolveActual(options.actual, args);\n const expected = await resolveOption(options.expected, args);\n if (\n !Array.isArray(expected) ||\n expected.length === 0 ||\n expected.some((field) => typeof field !== \"string\" || field.length === 0)\n ) {\n return EvalOutcome.invalid(\n \"requiredFields expected value must be a non-empty string array.\",\n );\n }\n if (typeof actual !== \"object\" || actual === null || Array.isArray(actual)) {\n return EvalOutcome.invalid(\"requiredFields actual value must be an object.\");\n }\n const missing = expected.filter((field) => !Object.hasOwn(actual, field));\n return missing.length === 0\n ? EvalOutcome.pass(true)\n : EvalOutcome.fail(false, { comment: `Missing required fields: ${missing.join(\", \")}.` });\n },\n };\n}\n\nfunction regexMatches(pattern: RegExp, text: string): boolean {\n pattern.lastIndex = 0;\n const matched = pattern.test(text);\n pattern.lastIndex = 0;\n return matched;\n}\n\nfunction textExpectationMatches(expected: string | RegExp, actual: string): boolean {\n return expected instanceof RegExp ? regexMatches(expected, actual) : actual.includes(expected);\n}\n\nasync function resolveOption<Input, Output, Expected, Value>(\n value: SelectorOrValue<Input, Output, Expected, Value>,\n args: Parameters<ValueSelector<Input, Output, Expected, Value>>[0],\n): Promise<Value> {\n return typeof value === \"function\"\n ? (value as ValueSelector<Input, Output, Expected, Value>)(args)\n : value;\n}\n\nexport type SemanticSimilarityOptions<Input, Output, Expected = unknown> = {\n name?: string | undefined;\n required?: boolean | undefined;\n model: EmbeddingModel;\n threshold: number;\n actual?: ValueSelector<Input, Output, Expected, string> | undefined;\n expected?: SelectorOrValue<Input, Output, Expected, string> | undefined;\n};\n\nexport function semanticSimilarity<\n Input,\n Output,\n Expected = unknown,\n const Name extends string = string,\n>(\n options: SemanticSimilarityOptions<Input, Output, Expected> & {\n expected: Exclude<SemanticSimilarityOptions<Input, Output, Expected>[\"expected\"], undefined>;\n name?: Name | undefined;\n },\n): EvalMetric<Input, Output, number, Expected, Name>;\nexport function semanticSimilarity<\n Input,\n Output,\n Expected = unknown,\n const Name extends string = string,\n>(\n options: Omit<SemanticSimilarityOptions<Input, Output, Expected>, \"expected\"> & {\n expected?: undefined;\n name?: Name | undefined;\n },\n): EvalMetric<Input, Output, number, Expected, Name, { expected: string }>;\nexport function semanticSimilarity<\n Input,\n Output,\n Expected = unknown,\n const Name extends string = string,\n>(\n options: SemanticSimilarityOptions<Input, Output, Expected> & { name?: Name | undefined },\n): EvalMetric<Input, Output, number, Expected, Name, EvalCaseRequirements> {\n const threshold = unitInterval(options.threshold, \"semanticSimilarity threshold\");\n return {\n name: (options.name ?? \"semantic_similarity\") as Name,\n required: options.required ?? true,\n dataType: \"NUMERIC\",\n direction: \"higher_is_better\",\n threshold,\n async evaluate(args) {\n throwIfAborted(args.signal);\n const actual = await resolveActualText(options.actual, args);\n throwIfAborted(args.signal);\n const expected = await resolveExpected(options.expected, args);\n if (expected === undefined) {\n return EvalOutcome.invalid(\"No expected value provided for semantic similarity.\");\n }\n if (typeof expected !== \"string\") {\n return EvalOutcome.invalid(\"Semantic similarity expected value must be a string.\");\n }\n throwIfAborted(args.signal);\n const [{ embedding: actualEmbedding }, { embedding: expectedEmbedding }] = await Promise.all([\n embedText({ model: options.model, text: actual, abortSignal: args.signal }),\n embedText({ model: options.model, text: expected, abortSignal: args.signal }),\n ]);\n throwIfAborted(args.signal);\n const score = cosineSimilarity(actualEmbedding.vector, expectedEmbedding.vector);\n return score >= threshold\n ? EvalOutcome.pass(score)\n : EvalOutcome.fail(score, { comment: `Similarity below threshold ${threshold}.` });\n },\n };\n}\n\nexport type LlmJudgeOptions<Input, Output, SchemaOutput, Expected = unknown> = {\n name?: string | undefined;\n required?: boolean | undefined;\n model: CompletionModel;\n schema: ZodSchema<SchemaOutput>;\n passes(value: SchemaOutput): boolean;\n instructions?: string | undefined;\n retries?: number | undefined;\n prompt?: ValueSelector<Input, Output, Expected, string> | undefined;\n};\n\nexport function llmJudge<\n Input,\n Output,\n SchemaOutput,\n Expected = unknown,\n const Name extends string = string,\n>(\n options: LlmJudgeOptions<Input, Output, SchemaOutput, Expected> & { name?: Name | undefined },\n): EvalMetric<Input, Output, SchemaOutput, Expected, Name> {\n const retries = extractionRetries(options.retries);\n return {\n name: (options.name ?? \"llm_judge\") as Name,\n required: options.required ?? true,\n async evaluate(args) {\n try {\n throwIfAborted(args.signal);\n const result = await extract({\n model: options.model,\n outputSchema: options.schema,\n abortSignal: args.signal,\n instructions:\n options.instructions ??\n \"Judge the eval case by the requested schema. Submit the judgment using the schema.\",\n text: await resolveJudgePrompt(options.prompt, args),\n retries,\n });\n throwIfAborted(args.signal);\n return options.passes(result.output)\n ? EvalOutcome.pass(result.output, { usage: result.usage })\n : EvalOutcome.fail(result.output, { usage: result.usage });\n } catch (error) {\n return EvalOutcome.fromError(error);\n }\n },\n };\n}\n\nexport type LlmScoreMetricScore = {\n score: number;\n feedback: string;\n};\n\nexport type LlmScoreOptions<Input, Output, Expected = unknown> = {\n name?: string | undefined;\n required?: boolean | undefined;\n model: CompletionModel;\n threshold: number;\n criteria: string | string[];\n instructions?: string | undefined;\n retries?: number | undefined;\n prompt?: ValueSelector<Input, Output, Expected, string> | undefined;\n};\n\nexport function llmScore<Input, Output, Expected = unknown, const Name extends string = string>(\n options: LlmScoreOptions<Input, Output, Expected> & { name?: Name | undefined },\n): EvalMetric<Input, Output, LlmScoreMetricScore, Expected, Name> {\n const criteria = Array.isArray(options.criteria) ? options.criteria.join(\"\\n\") : options.criteria;\n if (criteria.trim().length === 0) throw new TypeError(\"llmScore criteria must not be empty.\");\n const threshold = unitInterval(options.threshold, \"llmScore threshold\");\n const retries = extractionRetries(options.retries);\n return {\n name: (options.name ?? \"llm_score\") as Name,\n required: options.required ?? true,\n dataType: \"NUMERIC\",\n projectScore: (score) => score.score,\n direction: \"higher_is_better\",\n threshold,\n async evaluate(args) {\n try {\n throwIfAborted(args.signal);\n const result = await extract({\n model: options.model,\n outputSchema: z.object({\n score: z.number(),\n feedback: z.string(),\n }),\n abortSignal: args.signal,\n instructions:\n options.instructions ??\n `Score the eval case against these criteria:\\n${criteria}\\n\\nReturn a score between 0 and 1 and brief feedback.`,\n text: await resolveJudgePrompt(options.prompt, args),\n retries,\n });\n throwIfAborted(args.signal);\n const score = result.output;\n if (score.score < 0 || score.score > 1) {\n return EvalOutcome.invalid(`Score ${score.score} outside valid range [0, 1].`, {\n score,\n usage: result.usage,\n });\n }\n return score.score >= threshold\n ? EvalOutcome.pass(score, { comment: score.feedback, usage: result.usage })\n : EvalOutcome.fail(score, { comment: score.feedback, usage: result.usage });\n } catch (error) {\n return EvalOutcome.fromError(error);\n }\n },\n };\n}\n\nfunction extractionRetries(retries: number | undefined): { maxAttempts: number } | undefined {\n const retryCount = retries ?? 0;\n if (!Number.isInteger(retryCount) || retryCount < 0) {\n throw new RangeError(\"Eval metric retries must be a non-negative integer.\");\n }\n if (retryCount === 0) {\n return undefined;\n }\n return { maxAttempts: retryCount + 1 };\n}\n\nfunction unitInterval(value: number, label: string): number {\n if (!Number.isFinite(value) || value < 0 || value > 1) {\n throw new RangeError(`${label} must be between 0 and 1.`);\n }\n return value;\n}\n"],"mappings":"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","names":["matches"]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
isStreamingCompletionModel
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-HG6ASDNI.js";
|
|
4
4
|
import {
|
|
5
5
|
createTool
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-4WSICA6D.js";
|
|
7
7
|
import {
|
|
8
8
|
AgentRunBlockedError,
|
|
9
9
|
AgentToolSuspensionError
|
|
@@ -78,4 +78,4 @@ function createAgentTool(agent, options) {
|
|
|
78
78
|
export {
|
|
79
79
|
createAgentTool
|
|
80
80
|
};
|
|
81
|
-
//# sourceMappingURL=chunk-
|
|
81
|
+
//# sourceMappingURL=chunk-NKSXYOUM.js.map
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
} from "./chunk-JBQNCUXA.js";
|
|
4
4
|
import {
|
|
5
5
|
createSkillTools
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-TD2VYYUT.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-OBTD3GPY.js.map
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
} from "./chunk-A7BXVZXZ.js";
|
|
4
4
|
import {
|
|
5
5
|
retrieveDocuments
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-CB2L2NIQ.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-PFJN5OIQ.js.map
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import {
|
|
2
|
+
COMPLETION_PROVIDER_OUTPUT_ERROR_CODE
|
|
3
|
+
} from "./chunk-XQV3XNVT.js";
|
|
4
|
+
import {
|
|
5
|
+
isJsonValue
|
|
6
|
+
} from "./chunk-4C7AXYOM.js";
|
|
7
|
+
|
|
8
|
+
// src/streaming/readable-stream.ts
|
|
9
|
+
function toReadableStream(events, options = {}) {
|
|
10
|
+
const encoder = new TextEncoder();
|
|
11
|
+
const iterator = events[Symbol.asyncIterator]();
|
|
12
|
+
let state = "open";
|
|
13
|
+
let cleanup;
|
|
14
|
+
function finishIterator() {
|
|
15
|
+
cleanup ??= Promise.resolve().then(async () => {
|
|
16
|
+
await iterator.return?.();
|
|
17
|
+
});
|
|
18
|
+
return cleanup;
|
|
19
|
+
}
|
|
20
|
+
return new ReadableStream({
|
|
21
|
+
async pull(controller) {
|
|
22
|
+
if (state !== "open") return;
|
|
23
|
+
try {
|
|
24
|
+
const next = await iterator.next();
|
|
25
|
+
if (state !== "open") return;
|
|
26
|
+
if (next.done === true) {
|
|
27
|
+
state = "terminal";
|
|
28
|
+
controller.close();
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
const terminal = options.errorSerialization === "anvia" && readDataProperty(next.value, "type") === "error";
|
|
32
|
+
const value = terminal ? anviaErrorEnvelope(
|
|
33
|
+
readDataProperty(next.value, "error"),
|
|
34
|
+
readDataProperty(next.value, "usage")
|
|
35
|
+
) : next.value;
|
|
36
|
+
controller.enqueue(encoder.encode(`${JSON.stringify(value)}
|
|
37
|
+
`));
|
|
38
|
+
if (terminal) {
|
|
39
|
+
state = "terminal";
|
|
40
|
+
controller.close();
|
|
41
|
+
await finishIterator().catch(() => {
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
} catch (error) {
|
|
45
|
+
if (state !== "open") return;
|
|
46
|
+
const value = options.errorSerialization === "anvia" ? anviaErrorEnvelope(error) : { type: "error", error: serializeError(error) };
|
|
47
|
+
controller.enqueue(encoder.encode(`${JSON.stringify(value)}
|
|
48
|
+
`));
|
|
49
|
+
state = "terminal";
|
|
50
|
+
controller.close();
|
|
51
|
+
await finishIterator().catch(() => {
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
async cancel() {
|
|
56
|
+
state = "cancelled";
|
|
57
|
+
await finishIterator();
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
function anviaErrorEnvelope(error, usage) {
|
|
62
|
+
const envelope = /* @__PURE__ */ Object.create(null);
|
|
63
|
+
envelope.type = "error";
|
|
64
|
+
envelope.error = normalizeAnviaError(error);
|
|
65
|
+
const safeUsage = projectUsage(usage);
|
|
66
|
+
if (safeUsage !== void 0) envelope.usage = safeUsage;
|
|
67
|
+
return envelope;
|
|
68
|
+
}
|
|
69
|
+
function normalizeAnviaError(error) {
|
|
70
|
+
if (isSafeScalar(error)) return error;
|
|
71
|
+
if (typeof error === "bigint") return { message: String(error) };
|
|
72
|
+
const diagnostic = /* @__PURE__ */ Object.create(null);
|
|
73
|
+
for (const key of ["name", "message"]) {
|
|
74
|
+
const value = readDataProperty(error, key);
|
|
75
|
+
if (typeof value === "string") diagnostic[key] = value;
|
|
76
|
+
}
|
|
77
|
+
const code = readDataProperty(error, "code");
|
|
78
|
+
if (isSafeScalar(code)) diagnostic.code = code;
|
|
79
|
+
if (code === COMPLETION_PROVIDER_OUTPUT_ERROR_CODE) {
|
|
80
|
+
const kind = readDataProperty(error, "kind");
|
|
81
|
+
if (typeof kind === "string" && providerOutputKinds.has(kind)) {
|
|
82
|
+
diagnostic.kind = kind;
|
|
83
|
+
const toolCallId = readDataProperty(error, "toolCallId");
|
|
84
|
+
if (typeof toolCallId === "string" && toolCallId.length > 0) {
|
|
85
|
+
diagnostic.toolCallId = toolCallId;
|
|
86
|
+
}
|
|
87
|
+
const finishReason = readDataProperty(error, "finishReason");
|
|
88
|
+
if (typeof finishReason === "string" && finishReasons.has(finishReason)) {
|
|
89
|
+
diagnostic.finishReason = finishReason;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return Object.keys(diagnostic).length > 0 ? diagnostic : { message: "Unknown error" };
|
|
94
|
+
}
|
|
95
|
+
var providerOutputKinds = /* @__PURE__ */ new Set([
|
|
96
|
+
"malformed-tool-arguments",
|
|
97
|
+
"invalid-tool-arguments",
|
|
98
|
+
"invalid-stream-event",
|
|
99
|
+
"invalid-response",
|
|
100
|
+
"incomplete-stream",
|
|
101
|
+
"incomplete-tool-call",
|
|
102
|
+
"invalid-tool-call",
|
|
103
|
+
"truncated-tool-call",
|
|
104
|
+
"filtered-tool-call"
|
|
105
|
+
]);
|
|
106
|
+
var finishReasons = /* @__PURE__ */ new Set(["stop", "length", "content-filter", "tool-calls", "other"]);
|
|
107
|
+
function isSafeScalar(value) {
|
|
108
|
+
return value === null || typeof value === "string" || typeof value === "boolean" || typeof value === "number" && Number.isFinite(value);
|
|
109
|
+
}
|
|
110
|
+
function readDataProperty(value, key) {
|
|
111
|
+
if ((typeof value !== "object" || value === null) && typeof value !== "function") {
|
|
112
|
+
return void 0;
|
|
113
|
+
}
|
|
114
|
+
try {
|
|
115
|
+
let object = value;
|
|
116
|
+
for (let depth = 0; object !== null && depth < 32; depth++) {
|
|
117
|
+
const descriptor = Object.getOwnPropertyDescriptor(object, key);
|
|
118
|
+
if (descriptor !== void 0) return "value" in descriptor ? descriptor.value : void 0;
|
|
119
|
+
object = Object.getPrototypeOf(object);
|
|
120
|
+
}
|
|
121
|
+
} catch {
|
|
122
|
+
return void 0;
|
|
123
|
+
}
|
|
124
|
+
return void 0;
|
|
125
|
+
}
|
|
126
|
+
function projectUsage(value) {
|
|
127
|
+
if (typeof value !== "object" || value === null) return void 0;
|
|
128
|
+
const usage = /* @__PURE__ */ Object.create(null);
|
|
129
|
+
for (const key of [
|
|
130
|
+
"inputTokens",
|
|
131
|
+
"outputTokens",
|
|
132
|
+
"totalTokens",
|
|
133
|
+
"cachedInputTokens",
|
|
134
|
+
"cacheCreationInputTokens"
|
|
135
|
+
]) {
|
|
136
|
+
const count = readDataProperty(value, key);
|
|
137
|
+
if (typeof count !== "number" || !Number.isFinite(count) || count < 0) return void 0;
|
|
138
|
+
usage[key] = count;
|
|
139
|
+
}
|
|
140
|
+
try {
|
|
141
|
+
const descriptor = Object.getOwnPropertyDescriptor(value, "details");
|
|
142
|
+
if (descriptor !== void 0) {
|
|
143
|
+
if (!("value" in descriptor)) return void 0;
|
|
144
|
+
const details = descriptor.value;
|
|
145
|
+
if (details !== void 0) {
|
|
146
|
+
if (typeof details !== "object" || details === null || Array.isArray(details)) {
|
|
147
|
+
return void 0;
|
|
148
|
+
}
|
|
149
|
+
const counts = /* @__PURE__ */ Object.create(null);
|
|
150
|
+
for (const key of Object.keys(details)) {
|
|
151
|
+
const field = Object.getOwnPropertyDescriptor(details, key);
|
|
152
|
+
if (field === void 0 || !("value" in field) || typeof field.value !== "number" || !Number.isFinite(field.value) || field.value < 0) {
|
|
153
|
+
return void 0;
|
|
154
|
+
}
|
|
155
|
+
counts[key] = field.value;
|
|
156
|
+
}
|
|
157
|
+
usage.details = counts;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
} catch {
|
|
161
|
+
return void 0;
|
|
162
|
+
}
|
|
163
|
+
return usage;
|
|
164
|
+
}
|
|
165
|
+
function serializeError(error) {
|
|
166
|
+
if (error instanceof Error) {
|
|
167
|
+
const serialized = {
|
|
168
|
+
name: error.name,
|
|
169
|
+
message: error.message
|
|
170
|
+
};
|
|
171
|
+
const code = error.code;
|
|
172
|
+
if (code !== void 0) {
|
|
173
|
+
serialized.code = code;
|
|
174
|
+
}
|
|
175
|
+
const details = error.details;
|
|
176
|
+
if (details !== void 0) {
|
|
177
|
+
serialized.details = details;
|
|
178
|
+
}
|
|
179
|
+
return serialized;
|
|
180
|
+
}
|
|
181
|
+
if (isJsonValue(error)) {
|
|
182
|
+
return error;
|
|
183
|
+
}
|
|
184
|
+
return { message: String(error) };
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
export {
|
|
188
|
+
toReadableStream
|
|
189
|
+
};
|
|
190
|
+
//# sourceMappingURL=chunk-PZC5UHIN.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/streaming/readable-stream.ts"],"sourcesContent":["import { isJsonValue } from \"../completion/json\";\nimport { COMPLETION_PROVIDER_OUTPUT_ERROR_CODE } from \"../completion/provider-output-error\";\nimport type { Usage } from \"../completion/types\";\n\nexport type ReadableStreamOptions = {\n format?: \"jsonl\";\n errorSerialization?: \"anvia\";\n};\n\nexport function toReadableStream<T>(\n events: AsyncIterable<T>,\n options: ReadableStreamOptions = {},\n): ReadableStream<Uint8Array> {\n const encoder = new TextEncoder();\n const iterator = events[Symbol.asyncIterator]();\n let state: \"open\" | \"terminal\" | \"cancelled\" = \"open\";\n let cleanup: Promise<void> | undefined;\n\n function finishIterator(): Promise<void> {\n cleanup ??= Promise.resolve().then(async () => {\n await iterator.return?.();\n });\n return cleanup;\n }\n\n return new ReadableStream<Uint8Array>({\n async pull(controller) {\n if (state !== \"open\") return;\n try {\n const next = await iterator.next();\n if (state !== \"open\") return;\n if (next.done === true) {\n state = \"terminal\";\n controller.close();\n return;\n }\n\n const terminal =\n options.errorSerialization === \"anvia\" &&\n readDataProperty(next.value, \"type\") === \"error\";\n const value = terminal\n ? anviaErrorEnvelope(\n readDataProperty(next.value, \"error\"),\n readDataProperty(next.value, \"usage\"),\n )\n : next.value;\n controller.enqueue(encoder.encode(`${JSON.stringify(value)}\\n`));\n if (terminal) {\n state = \"terminal\";\n controller.close();\n await finishIterator().catch(() => {});\n }\n } catch (error) {\n if (state !== \"open\") return;\n const value =\n options.errorSerialization === \"anvia\"\n ? anviaErrorEnvelope(error)\n : { type: \"error\", error: serializeError(error) };\n controller.enqueue(encoder.encode(`${JSON.stringify(value)}\\n`));\n state = \"terminal\";\n controller.close();\n await finishIterator().catch(() => {});\n }\n },\n async cancel() {\n state = \"cancelled\";\n await finishIterator();\n },\n });\n}\n\ntype SafeScalar = string | number | boolean | null;\ntype SafeError = SafeScalar | Record<string, SafeScalar>;\ntype TerminalErrorWire = { type: \"error\"; error: SafeError; usage?: Usage };\n\nfunction anviaErrorEnvelope(error: unknown, usage?: unknown): TerminalErrorWire {\n const envelope: TerminalErrorWire = Object.create(null);\n envelope.type = \"error\";\n envelope.error = normalizeAnviaError(error);\n const safeUsage = projectUsage(usage);\n if (safeUsage !== undefined) envelope.usage = safeUsage;\n return envelope;\n}\n\nfunction normalizeAnviaError(error: unknown): SafeError {\n if (isSafeScalar(error)) return error;\n if (typeof error === \"bigint\") return { message: String(error) };\n\n const diagnostic: Record<string, SafeScalar> = Object.create(null);\n for (const key of [\"name\", \"message\"]) {\n const value = readDataProperty(error, key);\n if (typeof value === \"string\") diagnostic[key] = value;\n }\n const code = readDataProperty(error, \"code\");\n if (isSafeScalar(code)) diagnostic.code = code;\n\n if (code === COMPLETION_PROVIDER_OUTPUT_ERROR_CODE) {\n const kind = readDataProperty(error, \"kind\");\n if (typeof kind === \"string\" && providerOutputKinds.has(kind)) {\n diagnostic.kind = kind;\n const toolCallId = readDataProperty(error, \"toolCallId\");\n if (typeof toolCallId === \"string\" && toolCallId.length > 0) {\n diagnostic.toolCallId = toolCallId;\n }\n const finishReason = readDataProperty(error, \"finishReason\");\n if (typeof finishReason === \"string\" && finishReasons.has(finishReason)) {\n diagnostic.finishReason = finishReason;\n }\n }\n }\n\n return Object.keys(diagnostic).length > 0 ? diagnostic : { message: \"Unknown error\" };\n}\n\nconst providerOutputKinds = new Set([\n \"malformed-tool-arguments\",\n \"invalid-tool-arguments\",\n \"invalid-stream-event\",\n \"invalid-response\",\n \"incomplete-stream\",\n \"incomplete-tool-call\",\n \"invalid-tool-call\",\n \"truncated-tool-call\",\n \"filtered-tool-call\",\n]);\nconst finishReasons = new Set([\"stop\", \"length\", \"content-filter\", \"tool-calls\", \"other\"]);\n\nfunction isSafeScalar(value: unknown): value is SafeScalar {\n return (\n value === null ||\n typeof value === \"string\" ||\n typeof value === \"boolean\" ||\n (typeof value === \"number\" && Number.isFinite(value))\n );\n}\n\nfunction readDataProperty(value: unknown, key: string): unknown {\n if ((typeof value !== \"object\" || value === null) && typeof value !== \"function\") {\n return undefined;\n }\n try {\n let object: object | null = value;\n for (let depth = 0; object !== null && depth < 32; depth++) {\n const descriptor = Object.getOwnPropertyDescriptor(object, key);\n if (descriptor !== undefined) return \"value\" in descriptor ? descriptor.value : undefined;\n object = Object.getPrototypeOf(object);\n }\n } catch {\n return undefined;\n }\n return undefined;\n}\n\nfunction projectUsage(value: unknown): Usage | undefined {\n if (typeof value !== \"object\" || value === null) return undefined;\n const usage: Usage = Object.create(null);\n for (const key of [\n \"inputTokens\",\n \"outputTokens\",\n \"totalTokens\",\n \"cachedInputTokens\",\n \"cacheCreationInputTokens\",\n ] as const) {\n const count = readDataProperty(value, key);\n if (typeof count !== \"number\" || !Number.isFinite(count) || count < 0) return undefined;\n usage[key] = count;\n }\n try {\n const descriptor = Object.getOwnPropertyDescriptor(value, \"details\");\n if (descriptor !== undefined) {\n if (!(\"value\" in descriptor)) return undefined;\n const details: unknown = descriptor.value;\n if (details !== undefined) {\n if (typeof details !== \"object\" || details === null || Array.isArray(details)) {\n return undefined;\n }\n const counts: Record<string, number> = Object.create(null);\n for (const key of Object.keys(details)) {\n const field = Object.getOwnPropertyDescriptor(details, key);\n if (\n field === undefined ||\n !(\"value\" in field) ||\n typeof field.value !== \"number\" ||\n !Number.isFinite(field.value) ||\n field.value < 0\n ) {\n return undefined;\n }\n counts[key] = field.value;\n }\n usage.details = counts;\n }\n }\n } catch {\n return undefined;\n }\n return usage;\n}\n\nfunction serializeError(error: unknown): unknown {\n if (error instanceof Error) {\n const serialized: { name: string; message: string; code?: unknown; details?: unknown } = {\n name: error.name,\n message: error.message,\n };\n // Runtime-specific Error subclasses (for example bun:sqlite's SqliteError)\n // can keep diagnostic fields such as `code` on the prototype, where\n // JSON.stringify drops them. Copy well-known diagnostic fields explicitly.\n const code = (error as { code?: unknown }).code;\n if (code !== undefined) {\n serialized.code = code;\n }\n const details = (error as { details?: unknown }).details;\n if (details !== undefined) {\n serialized.details = details;\n }\n return serialized;\n }\n\n if (isJsonValue(error)) {\n return error;\n }\n\n // A thrown non-Error that is not JSON-safe would serialize as `{}` or lose\n // its diagnostics entirely; degrade to a string payload instead.\n return { message: String(error) };\n}\n"],"mappings":"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","names":[]}
|
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
} from "./chunk-6BTJC3ES.js";
|
|
7
7
|
import {
|
|
8
8
|
isToolIndex
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-XQTTPQWA.js";
|
|
10
10
|
import {
|
|
11
11
|
isMcpTool
|
|
12
12
|
} from "./chunk-PLDJCCVL.js";
|
|
@@ -109,4 +109,4 @@ export {
|
|
|
109
109
|
resolveAgentOptions,
|
|
110
110
|
markResolvedAgentOptions
|
|
111
111
|
};
|
|
112
|
-
//# sourceMappingURL=chunk-
|
|
112
|
+
//# sourceMappingURL=chunk-STEAW4JD.js.map
|