@librechat/agents 3.4.7 → 3.5.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/dist/cjs/agents/AgentContext.cjs +0 -356
- package/dist/cjs/agents/AgentContext.cjs.map +1 -1
- package/dist/cjs/agents/projection.cjs +0 -9
- package/dist/cjs/agents/projection.cjs.map +1 -1
- package/dist/cjs/common/constants.cjs +0 -26
- package/dist/cjs/common/constants.cjs.map +1 -1
- package/dist/cjs/common/enum.cjs +0 -85
- package/dist/cjs/common/enum.cjs.map +1 -1
- package/dist/cjs/events.cjs +0 -14
- package/dist/cjs/events.cjs.map +1 -1
- package/dist/cjs/graphs/Graph.cjs +1 -909
- package/dist/cjs/graphs/Graph.cjs.map +1 -1
- package/dist/cjs/graphs/MultiAgentGraph.cjs +7 -272
- package/dist/cjs/graphs/MultiAgentGraph.cjs.map +1 -1
- package/dist/cjs/graphs/applyGraphRuntimeConfig.cjs.map +1 -1
- package/dist/cjs/graphs/createGraph.cjs.map +1 -1
- package/dist/cjs/hitl/askUserQuestion.cjs +0 -53
- package/dist/cjs/hitl/askUserQuestion.cjs.map +1 -1
- package/dist/cjs/hitl/askUserQuestions.cjs +0 -20
- package/dist/cjs/hitl/askUserQuestions.cjs.map +1 -1
- package/dist/cjs/hitl/askUserQuestionsInterrupt.cjs +0 -6
- package/dist/cjs/hitl/askUserQuestionsInterrupt.cjs.map +1 -1
- package/dist/cjs/hooks/HookRegistry.cjs +0 -127
- package/dist/cjs/hooks/HookRegistry.cjs.map +1 -1
- package/dist/cjs/hooks/createToolPolicyHook.cjs +0 -38
- package/dist/cjs/hooks/createToolPolicyHook.cjs.map +1 -1
- package/dist/cjs/hooks/createWorkspacePolicyHook.cjs +0 -77
- package/dist/cjs/hooks/createWorkspacePolicyHook.cjs.map +1 -1
- package/dist/cjs/hooks/executeHooks.cjs +0 -79
- package/dist/cjs/hooks/executeHooks.cjs.map +1 -1
- package/dist/cjs/hooks/index.cjs +0 -16
- package/dist/cjs/hooks/index.cjs.map +1 -1
- package/dist/cjs/hooks/matchers.cjs +0 -104
- package/dist/cjs/hooks/matchers.cjs.map +1 -1
- package/dist/cjs/hooks/types.cjs +0 -8
- package/dist/cjs/hooks/types.cjs.map +1 -1
- package/dist/cjs/instrumentation.cjs +0 -14
- package/dist/cjs/instrumentation.cjs.map +1 -1
- package/dist/cjs/langfuse.cjs +0 -75
- package/dist/cjs/langfuse.cjs.map +1 -1
- package/dist/cjs/langfuseConfig.cjs.map +1 -1
- package/dist/cjs/langfuseRuntimeContext.cjs +0 -13
- package/dist/cjs/langfuseRuntimeContext.cjs.map +1 -1
- package/dist/cjs/langfuseRuntimeScope.cjs +0 -4
- package/dist/cjs/langfuseRuntimeScope.cjs.map +1 -1
- package/dist/cjs/langfuseSpanRegistry.cjs +0 -28
- package/dist/cjs/langfuseSpanRegistry.cjs.map +1 -1
- package/dist/cjs/langfuseToolOutputTracing.cjs +0 -3
- package/dist/cjs/langfuseToolOutputTracing.cjs.map +1 -1
- package/dist/cjs/langfuseTraceShaping.cjs +0 -74
- package/dist/cjs/langfuseTraceShaping.cjs.map +1 -1
- package/dist/cjs/llm/anthropic/index.cjs +0 -3
- package/dist/cjs/llm/anthropic/index.cjs.map +1 -1
- package/dist/cjs/llm/anthropic/types.cjs.map +1 -1
- package/dist/cjs/llm/anthropic/utils/message_inputs.cjs +1 -111
- package/dist/cjs/llm/anthropic/utils/message_inputs.cjs.map +1 -1
- package/dist/cjs/llm/anthropic/utils/message_outputs.cjs +0 -1
- package/dist/cjs/llm/anthropic/utils/message_outputs.cjs.map +1 -1
- package/dist/cjs/llm/anthropic/utils/stream_events.cjs +0 -8
- package/dist/cjs/llm/anthropic/utils/stream_events.cjs.map +1 -1
- package/dist/cjs/llm/anthropic/utils/tools.cjs.map +1 -1
- package/dist/cjs/llm/bedrock/cachePoints.cjs.map +1 -1
- package/dist/cjs/llm/bedrock/index.cjs +1 -95
- package/dist/cjs/llm/bedrock/index.cjs.map +1 -1
- package/dist/cjs/llm/bedrock/toolCache.cjs.map +1 -1
- package/dist/cjs/llm/bedrock/utils/message_inputs.cjs +0 -78
- package/dist/cjs/llm/bedrock/utils/message_inputs.cjs.map +1 -1
- package/dist/cjs/llm/bedrock/utils/message_outputs.cjs +0 -24
- package/dist/cjs/llm/bedrock/utils/message_outputs.cjs.map +1 -1
- package/dist/cjs/llm/contextOverflowRecovery.cjs +0 -62
- package/dist/cjs/llm/contextOverflowRecovery.cjs.map +1 -1
- package/dist/cjs/llm/fake.cjs.map +1 -1
- package/dist/cjs/llm/google/index.cjs +2 -21
- package/dist/cjs/llm/google/index.cjs.map +1 -1
- package/dist/cjs/llm/google/utils/common.cjs +0 -35
- package/dist/cjs/llm/google/utils/common.cjs.map +1 -1
- package/dist/cjs/llm/init.cjs +0 -9
- package/dist/cjs/llm/init.cjs.map +1 -1
- package/dist/cjs/llm/invoke.cjs +1 -270
- package/dist/cjs/llm/invoke.cjs.map +1 -1
- package/dist/cjs/llm/mistral/index.cjs.map +1 -1
- package/dist/cjs/llm/openai/index.cjs +0 -99
- package/dist/cjs/llm/openai/index.cjs.map +1 -1
- package/dist/cjs/llm/openai/streamMetadata.cjs +0 -21
- package/dist/cjs/llm/openai/streamMetadata.cjs.map +1 -1
- package/dist/cjs/llm/openai/utils/index.cjs.map +1 -1
- package/dist/cjs/llm/openrouter/index.cjs +0 -1
- package/dist/cjs/llm/openrouter/index.cjs.map +1 -1
- package/dist/cjs/llm/openrouter/toolCache.cjs +0 -6
- package/dist/cjs/llm/openrouter/toolCache.cjs.map +1 -1
- package/dist/cjs/llm/preempt.cjs +0 -75
- package/dist/cjs/llm/preempt.cjs.map +1 -1
- package/dist/cjs/llm/providers.cjs.map +1 -1
- package/dist/cjs/llm/request.cjs +0 -10
- package/dist/cjs/llm/request.cjs.map +1 -1
- package/dist/cjs/llm/stream/chunkAdapters.cjs +0 -62
- package/dist/cjs/llm/stream/chunkAdapters.cjs.map +1 -1
- package/dist/cjs/llm/stream/smoother.cjs +0 -58
- package/dist/cjs/llm/stream/smoother.cjs.map +1 -1
- package/dist/cjs/llm/streamLimits.cjs +4 -293
- package/dist/cjs/llm/streamLimits.cjs.map +1 -1
- package/dist/cjs/llm/truncation.cjs +0 -36
- package/dist/cjs/llm/truncation.cjs.map +1 -1
- package/dist/cjs/llm/vertexai/index.cjs +0 -330
- package/dist/cjs/llm/vertexai/index.cjs.map +1 -1
- package/dist/cjs/messages/alternation.cjs +0 -43
- package/dist/cjs/messages/alternation.cjs.map +1 -1
- package/dist/cjs/messages/anthropicToolCache.cjs +0 -45
- package/dist/cjs/messages/anthropicToolCache.cjs.map +1 -1
- package/dist/cjs/messages/assistantPhase.cjs +0 -12
- package/dist/cjs/messages/assistantPhase.cjs.map +1 -1
- package/dist/cjs/messages/budget.cjs +0 -9
- package/dist/cjs/messages/budget.cjs.map +1 -1
- package/dist/cjs/messages/cache.cjs +0 -172
- package/dist/cjs/messages/cache.cjs.map +1 -1
- package/dist/cjs/messages/content.cjs +0 -9
- package/dist/cjs/messages/content.cjs.map +1 -1
- package/dist/cjs/messages/contextPruning.cjs +0 -15
- package/dist/cjs/messages/contextPruning.cjs.map +1 -1
- package/dist/cjs/messages/contextPruningSettings.cjs +0 -3
- package/dist/cjs/messages/contextPruningSettings.cjs.map +1 -1
- package/dist/cjs/messages/core.cjs +0 -48
- package/dist/cjs/messages/core.cjs.map +1 -1
- package/dist/cjs/messages/format.cjs +1 -345
- package/dist/cjs/messages/format.cjs.map +1 -1
- package/dist/cjs/messages/handoffCue.cjs +0 -36
- package/dist/cjs/messages/handoffCue.cjs.map +1 -1
- package/dist/cjs/messages/ids.cjs.map +1 -1
- package/dist/cjs/messages/injected.cjs +0 -33
- package/dist/cjs/messages/injected.cjs.map +1 -1
- package/dist/cjs/messages/langchain.cjs +0 -14
- package/dist/cjs/messages/langchain.cjs.map +1 -1
- package/dist/cjs/messages/prune.cjs +1 -184
- package/dist/cjs/messages/prune.cjs.map +1 -1
- package/dist/cjs/messages/recency.cjs +0 -32
- package/dist/cjs/messages/recency.cjs.map +1 -1
- package/dist/cjs/messages/reducer.cjs +0 -30
- package/dist/cjs/messages/reducer.cjs.map +1 -1
- package/dist/cjs/messages/tools.cjs +0 -14
- package/dist/cjs/messages/tools.cjs.map +1 -1
- package/dist/cjs/openai/index.cjs.map +1 -1
- package/dist/cjs/prompts/activityLabel.cjs +9 -79
- package/dist/cjs/prompts/activityLabel.cjs.map +1 -1
- package/dist/cjs/responses/index.cjs.map +1 -1
- package/dist/cjs/run.cjs +2 -538
- package/dist/cjs/run.cjs.map +1 -1
- package/dist/cjs/session/AgentSession.cjs +1 -17
- package/dist/cjs/session/AgentSession.cjs.map +1 -1
- package/dist/cjs/session/JsonlSessionStore.cjs.map +1 -1
- package/dist/cjs/session/handlers.cjs +0 -7
- package/dist/cjs/session/handlers.cjs.map +1 -1
- package/dist/cjs/session/ids.cjs.map +1 -1
- package/dist/cjs/session/messageSerialization.cjs +0 -4
- package/dist/cjs/session/messageSerialization.cjs.map +1 -1
- package/dist/cjs/stream.cjs +1 -93
- package/dist/cjs/stream.cjs.map +1 -1
- package/dist/cjs/summarization/index.cjs +0 -27
- package/dist/cjs/summarization/index.cjs.map +1 -1
- package/dist/cjs/summarization/node.cjs +0 -273
- package/dist/cjs/summarization/node.cjs.map +1 -1
- package/dist/cjs/tools/BashExecutor.cjs +0 -35
- package/dist/cjs/tools/BashExecutor.cjs.map +1 -1
- package/dist/cjs/tools/BashProgrammaticToolCalling.cjs +0 -24
- package/dist/cjs/tools/BashProgrammaticToolCalling.cjs.map +1 -1
- package/dist/cjs/tools/Calculator.cjs.map +1 -1
- package/dist/cjs/tools/CodeExecutor.cjs +0 -13
- package/dist/cjs/tools/CodeExecutor.cjs.map +1 -1
- package/dist/cjs/tools/CodeSessionFileSummary.cjs.map +1 -1
- package/dist/cjs/tools/ProgrammaticToolCalling.cjs +0 -101
- package/dist/cjs/tools/ProgrammaticToolCalling.cjs.map +1 -1
- package/dist/cjs/tools/ReadFile.cjs.map +1 -1
- package/dist/cjs/tools/SkillTool.cjs +0 -5
- package/dist/cjs/tools/SkillTool.cjs.map +1 -1
- package/dist/cjs/tools/SubagentTool.cjs +0 -10
- package/dist/cjs/tools/SubagentTool.cjs.map +1 -1
- package/dist/cjs/tools/ToolNode.cjs +6 -1038
- package/dist/cjs/tools/ToolNode.cjs.map +1 -1
- package/dist/cjs/tools/ToolSearch.cjs +0 -179
- package/dist/cjs/tools/ToolSearch.cjs.map +1 -1
- package/dist/cjs/tools/cloudflare/CloudflareBridgeRuntime.cjs.map +1 -1
- package/dist/cjs/tools/cloudflare/CloudflareProgrammaticToolCalling.cjs.map +1 -1
- package/dist/cjs/tools/cloudflare/CloudflareSandboxExecutionEngine.cjs +0 -39
- package/dist/cjs/tools/cloudflare/CloudflareSandboxExecutionEngine.cjs.map +1 -1
- package/dist/cjs/tools/cloudflare/CloudflareSandboxTools.cjs.map +1 -1
- package/dist/cjs/tools/eagerEventExecution.cjs +0 -6
- package/dist/cjs/tools/eagerEventExecution.cjs.map +1 -1
- package/dist/cjs/tools/handlers.cjs +1 -41
- package/dist/cjs/tools/handlers.cjs.map +1 -1
- package/dist/cjs/tools/intentArg.cjs +1 -132
- package/dist/cjs/tools/intentArg.cjs.map +1 -1
- package/dist/cjs/tools/local/CompileCheckTool.cjs +0 -25
- package/dist/cjs/tools/local/CompileCheckTool.cjs.map +1 -1
- package/dist/cjs/tools/local/FileCheckpointer.cjs +0 -23
- package/dist/cjs/tools/local/FileCheckpointer.cjs.map +1 -1
- package/dist/cjs/tools/local/LocalCodingTools.cjs +0 -80
- package/dist/cjs/tools/local/LocalCodingTools.cjs.map +1 -1
- package/dist/cjs/tools/local/LocalExecutionEngine.cjs +0 -126
- package/dist/cjs/tools/local/LocalExecutionEngine.cjs.map +1 -1
- package/dist/cjs/tools/local/LocalExecutionTools.cjs.map +1 -1
- package/dist/cjs/tools/local/LocalProgrammaticToolCalling.cjs +0 -12
- package/dist/cjs/tools/local/LocalProgrammaticToolCalling.cjs.map +1 -1
- package/dist/cjs/tools/local/attachments.cjs +0 -44
- package/dist/cjs/tools/local/attachments.cjs.map +1 -1
- package/dist/cjs/tools/local/bashAst.cjs +0 -16
- package/dist/cjs/tools/local/bashAst.cjs.map +1 -1
- package/dist/cjs/tools/local/editStrategies.cjs +0 -14
- package/dist/cjs/tools/local/editStrategies.cjs.map +1 -1
- package/dist/cjs/tools/local/resolveLocalExecutionTools.cjs.map +1 -1
- package/dist/cjs/tools/local/syntaxCheck.cjs +0 -31
- package/dist/cjs/tools/local/syntaxCheck.cjs.map +1 -1
- package/dist/cjs/tools/local/textEncoding.cjs +0 -11
- package/dist/cjs/tools/local/textEncoding.cjs.map +1 -1
- package/dist/cjs/tools/local/workspaceFS.cjs +0 -33
- package/dist/cjs/tools/local/workspaceFS.cjs.map +1 -1
- package/dist/cjs/tools/ptcTimeout.cjs.map +1 -1
- package/dist/cjs/tools/schema.cjs +0 -8
- package/dist/cjs/tools/schema.cjs.map +1 -1
- package/dist/cjs/tools/search/anthropic.cjs +0 -9
- package/dist/cjs/tools/search/anthropic.cjs.map +1 -1
- package/dist/cjs/tools/search/content.cjs.map +1 -1
- package/dist/cjs/tools/search/crw-scraper.cjs +0 -33
- package/dist/cjs/tools/search/crw-scraper.cjs.map +1 -1
- package/dist/cjs/tools/search/crw-search.cjs +0 -2
- package/dist/cjs/tools/search/crw-search.cjs.map +1 -1
- package/dist/cjs/tools/search/firecrawl.cjs +0 -25
- package/dist/cjs/tools/search/firecrawl.cjs.map +1 -1
- package/dist/cjs/tools/search/format.cjs +0 -30
- package/dist/cjs/tools/search/format.cjs.map +1 -1
- package/dist/cjs/tools/search/highlights.cjs +0 -16
- package/dist/cjs/tools/search/highlights.cjs.map +1 -1
- package/dist/cjs/tools/search/keenable-scraper.cjs +0 -8
- package/dist/cjs/tools/search/keenable-scraper.cjs.map +1 -1
- package/dist/cjs/tools/search/keenable-search.cjs +0 -7
- package/dist/cjs/tools/search/keenable-search.cjs.map +1 -1
- package/dist/cjs/tools/search/rerankers.cjs +0 -35
- package/dist/cjs/tools/search/rerankers.cjs.map +1 -1
- package/dist/cjs/tools/search/schema.cjs +0 -1
- package/dist/cjs/tools/search/schema.cjs.map +1 -1
- package/dist/cjs/tools/search/search.cjs +1 -14
- package/dist/cjs/tools/search/search.cjs.map +1 -1
- package/dist/cjs/tools/search/serper-scraper.cjs +0 -46
- package/dist/cjs/tools/search/serper-scraper.cjs.map +1 -1
- package/dist/cjs/tools/search/tavily-scraper.cjs.map +1 -1
- package/dist/cjs/tools/search/tavily-search.cjs.map +1 -1
- package/dist/cjs/tools/search/tool.cjs +0 -25
- package/dist/cjs/tools/search/tool.cjs.map +1 -1
- package/dist/cjs/tools/search/utils.cjs +0 -8
- package/dist/cjs/tools/search/utils.cjs.map +1 -1
- package/dist/cjs/tools/skillCatalog.cjs +0 -6
- package/dist/cjs/tools/skillCatalog.cjs.map +1 -1
- package/dist/cjs/tools/streamedToolCallSeals.cjs +0 -6
- package/dist/cjs/tools/streamedToolCallSeals.cjs.map +1 -1
- package/dist/cjs/tools/subagent/SubagentExecutionRegistry.cjs +0 -2
- package/dist/cjs/tools/subagent/SubagentExecutionRegistry.cjs.map +1 -1
- package/dist/cjs/tools/subagent/SubagentExecutor.cjs +3 -213
- package/dist/cjs/tools/subagent/SubagentExecutor.cjs.map +1 -1
- package/dist/cjs/tools/subagent/SubagentReplay.cjs.map +1 -1
- package/dist/cjs/tools/subagent/childGraphConfig.cjs +0 -4
- package/dist/cjs/tools/subagent/childGraphConfig.cjs.map +1 -1
- package/dist/cjs/tools/subagent/runtimeLimits.cjs.map +1 -1
- package/dist/cjs/tools/toolOutputReferences.cjs +1 -322
- package/dist/cjs/tools/toolOutputReferences.cjs.map +1 -1
- package/dist/cjs/types/hitl.cjs +0 -5
- package/dist/cjs/types/hitl.cjs.map +1 -1
- package/dist/cjs/utils/callbacks.cjs.map +1 -1
- package/dist/cjs/utils/errors.cjs +14 -165
- package/dist/cjs/utils/errors.cjs.map +1 -1
- package/dist/cjs/utils/events.cjs +0 -10
- package/dist/cjs/utils/events.cjs.map +1 -1
- package/dist/cjs/utils/graph.cjs.map +1 -1
- package/dist/cjs/utils/handlers.cjs +0 -3
- package/dist/cjs/utils/handlers.cjs.map +1 -1
- package/dist/cjs/utils/llm.cjs +0 -1
- package/dist/cjs/utils/llm.cjs.map +1 -1
- package/dist/cjs/utils/misc.cjs +0 -16
- package/dist/cjs/utils/misc.cjs.map +1 -1
- package/dist/cjs/utils/proxy.cjs +0 -26
- package/dist/cjs/utils/proxy.cjs.map +1 -1
- package/dist/cjs/utils/run.cjs +0 -6
- package/dist/cjs/utils/run.cjs.map +1 -1
- package/dist/cjs/utils/schema.cjs +0 -5
- package/dist/cjs/utils/schema.cjs.map +1 -1
- package/dist/cjs/utils/title.cjs +0 -6
- package/dist/cjs/utils/title.cjs.map +1 -1
- package/dist/cjs/utils/tokens.cjs +0 -113
- package/dist/cjs/utils/tokens.cjs.map +1 -1
- package/dist/cjs/utils/toolContent.cjs +0 -41
- package/dist/cjs/utils/toolContent.cjs.map +1 -1
- package/dist/cjs/utils/truncation.cjs +0 -61
- package/dist/cjs/utils/truncation.cjs.map +1 -1
- package/dist/esm/agents/AgentContext.mjs +0 -356
- package/dist/esm/agents/AgentContext.mjs.map +1 -1
- package/dist/esm/agents/projection.mjs +0 -9
- package/dist/esm/agents/projection.mjs.map +1 -1
- package/dist/esm/common/constants.mjs +0 -26
- package/dist/esm/common/constants.mjs.map +1 -1
- package/dist/esm/common/enum.mjs +0 -85
- package/dist/esm/common/enum.mjs.map +1 -1
- package/dist/esm/events.mjs +0 -14
- package/dist/esm/events.mjs.map +1 -1
- package/dist/esm/graphs/Graph.mjs +1 -909
- package/dist/esm/graphs/Graph.mjs.map +1 -1
- package/dist/esm/graphs/MultiAgentGraph.mjs +7 -272
- package/dist/esm/graphs/MultiAgentGraph.mjs.map +1 -1
- package/dist/esm/graphs/applyGraphRuntimeConfig.mjs.map +1 -1
- package/dist/esm/graphs/createGraph.mjs.map +1 -1
- package/dist/esm/hitl/askUserQuestion.mjs +0 -53
- package/dist/esm/hitl/askUserQuestion.mjs.map +1 -1
- package/dist/esm/hitl/askUserQuestions.mjs +0 -20
- package/dist/esm/hitl/askUserQuestions.mjs.map +1 -1
- package/dist/esm/hitl/askUserQuestionsInterrupt.mjs +0 -6
- package/dist/esm/hitl/askUserQuestionsInterrupt.mjs.map +1 -1
- package/dist/esm/hooks/HookRegistry.mjs +0 -127
- package/dist/esm/hooks/HookRegistry.mjs.map +1 -1
- package/dist/esm/hooks/createToolPolicyHook.mjs +0 -38
- package/dist/esm/hooks/createToolPolicyHook.mjs.map +1 -1
- package/dist/esm/hooks/createWorkspacePolicyHook.mjs +0 -77
- package/dist/esm/hooks/createWorkspacePolicyHook.mjs.map +1 -1
- package/dist/esm/hooks/executeHooks.mjs +0 -79
- package/dist/esm/hooks/executeHooks.mjs.map +1 -1
- package/dist/esm/hooks/index.mjs +0 -16
- package/dist/esm/hooks/index.mjs.map +1 -1
- package/dist/esm/hooks/matchers.mjs +0 -104
- package/dist/esm/hooks/matchers.mjs.map +1 -1
- package/dist/esm/hooks/types.mjs +0 -8
- package/dist/esm/hooks/types.mjs.map +1 -1
- package/dist/esm/instrumentation.mjs +0 -14
- package/dist/esm/instrumentation.mjs.map +1 -1
- package/dist/esm/langfuse.mjs +0 -75
- package/dist/esm/langfuse.mjs.map +1 -1
- package/dist/esm/langfuseConfig.mjs.map +1 -1
- package/dist/esm/langfuseRuntimeContext.mjs +0 -13
- package/dist/esm/langfuseRuntimeContext.mjs.map +1 -1
- package/dist/esm/langfuseRuntimeScope.mjs +0 -4
- package/dist/esm/langfuseRuntimeScope.mjs.map +1 -1
- package/dist/esm/langfuseSpanRegistry.mjs +0 -28
- package/dist/esm/langfuseSpanRegistry.mjs.map +1 -1
- package/dist/esm/langfuseToolOutputTracing.mjs +0 -3
- package/dist/esm/langfuseToolOutputTracing.mjs.map +1 -1
- package/dist/esm/langfuseTraceShaping.mjs +0 -74
- package/dist/esm/langfuseTraceShaping.mjs.map +1 -1
- package/dist/esm/llm/anthropic/index.mjs +0 -3
- package/dist/esm/llm/anthropic/index.mjs.map +1 -1
- package/dist/esm/llm/anthropic/types.mjs.map +1 -1
- package/dist/esm/llm/anthropic/utils/message_inputs.mjs +1 -111
- package/dist/esm/llm/anthropic/utils/message_inputs.mjs.map +1 -1
- package/dist/esm/llm/anthropic/utils/message_outputs.mjs +0 -1
- package/dist/esm/llm/anthropic/utils/message_outputs.mjs.map +1 -1
- package/dist/esm/llm/anthropic/utils/stream_events.mjs +0 -8
- package/dist/esm/llm/anthropic/utils/stream_events.mjs.map +1 -1
- package/dist/esm/llm/anthropic/utils/tools.mjs.map +1 -1
- package/dist/esm/llm/bedrock/cachePoints.mjs.map +1 -1
- package/dist/esm/llm/bedrock/index.mjs +1 -95
- package/dist/esm/llm/bedrock/index.mjs.map +1 -1
- package/dist/esm/llm/bedrock/toolCache.mjs.map +1 -1
- package/dist/esm/llm/bedrock/utils/message_inputs.mjs +0 -78
- package/dist/esm/llm/bedrock/utils/message_inputs.mjs.map +1 -1
- package/dist/esm/llm/bedrock/utils/message_outputs.mjs +0 -24
- package/dist/esm/llm/bedrock/utils/message_outputs.mjs.map +1 -1
- package/dist/esm/llm/contextOverflowRecovery.mjs +0 -62
- package/dist/esm/llm/contextOverflowRecovery.mjs.map +1 -1
- package/dist/esm/llm/fake.mjs.map +1 -1
- package/dist/esm/llm/google/index.mjs +2 -21
- package/dist/esm/llm/google/index.mjs.map +1 -1
- package/dist/esm/llm/google/utils/common.mjs +0 -35
- package/dist/esm/llm/google/utils/common.mjs.map +1 -1
- package/dist/esm/llm/init.mjs +0 -9
- package/dist/esm/llm/init.mjs.map +1 -1
- package/dist/esm/llm/invoke.mjs +1 -270
- package/dist/esm/llm/invoke.mjs.map +1 -1
- package/dist/esm/llm/mistral/index.mjs.map +1 -1
- package/dist/esm/llm/openai/index.mjs +0 -99
- package/dist/esm/llm/openai/index.mjs.map +1 -1
- package/dist/esm/llm/openai/streamMetadata.mjs +0 -21
- package/dist/esm/llm/openai/streamMetadata.mjs.map +1 -1
- package/dist/esm/llm/openai/utils/index.mjs.map +1 -1
- package/dist/esm/llm/openrouter/index.mjs +0 -1
- package/dist/esm/llm/openrouter/index.mjs.map +1 -1
- package/dist/esm/llm/openrouter/toolCache.mjs +0 -6
- package/dist/esm/llm/openrouter/toolCache.mjs.map +1 -1
- package/dist/esm/llm/preempt.mjs +0 -75
- package/dist/esm/llm/preempt.mjs.map +1 -1
- package/dist/esm/llm/providers.mjs.map +1 -1
- package/dist/esm/llm/request.mjs +0 -10
- package/dist/esm/llm/request.mjs.map +1 -1
- package/dist/esm/llm/stream/chunkAdapters.mjs +0 -62
- package/dist/esm/llm/stream/chunkAdapters.mjs.map +1 -1
- package/dist/esm/llm/stream/smoother.mjs +0 -58
- package/dist/esm/llm/stream/smoother.mjs.map +1 -1
- package/dist/esm/llm/streamLimits.mjs +4 -293
- package/dist/esm/llm/streamLimits.mjs.map +1 -1
- package/dist/esm/llm/truncation.mjs +0 -36
- package/dist/esm/llm/truncation.mjs.map +1 -1
- package/dist/esm/llm/vertexai/index.mjs +0 -330
- package/dist/esm/llm/vertexai/index.mjs.map +1 -1
- package/dist/esm/messages/alternation.mjs +0 -43
- package/dist/esm/messages/alternation.mjs.map +1 -1
- package/dist/esm/messages/anthropicToolCache.mjs +0 -45
- package/dist/esm/messages/anthropicToolCache.mjs.map +1 -1
- package/dist/esm/messages/assistantPhase.mjs +0 -12
- package/dist/esm/messages/assistantPhase.mjs.map +1 -1
- package/dist/esm/messages/budget.mjs +0 -9
- package/dist/esm/messages/budget.mjs.map +1 -1
- package/dist/esm/messages/cache.mjs +0 -172
- package/dist/esm/messages/cache.mjs.map +1 -1
- package/dist/esm/messages/content.mjs +0 -9
- package/dist/esm/messages/content.mjs.map +1 -1
- package/dist/esm/messages/contextPruning.mjs +0 -15
- package/dist/esm/messages/contextPruning.mjs.map +1 -1
- package/dist/esm/messages/contextPruningSettings.mjs +0 -3
- package/dist/esm/messages/contextPruningSettings.mjs.map +1 -1
- package/dist/esm/messages/core.mjs +0 -48
- package/dist/esm/messages/core.mjs.map +1 -1
- package/dist/esm/messages/format.mjs +1 -345
- package/dist/esm/messages/format.mjs.map +1 -1
- package/dist/esm/messages/handoffCue.mjs +0 -36
- package/dist/esm/messages/handoffCue.mjs.map +1 -1
- package/dist/esm/messages/ids.mjs.map +1 -1
- package/dist/esm/messages/injected.mjs +0 -33
- package/dist/esm/messages/injected.mjs.map +1 -1
- package/dist/esm/messages/langchain.mjs +0 -14
- package/dist/esm/messages/langchain.mjs.map +1 -1
- package/dist/esm/messages/prune.mjs +1 -184
- package/dist/esm/messages/prune.mjs.map +1 -1
- package/dist/esm/messages/recency.mjs +0 -32
- package/dist/esm/messages/recency.mjs.map +1 -1
- package/dist/esm/messages/reducer.mjs +0 -30
- package/dist/esm/messages/reducer.mjs.map +1 -1
- package/dist/esm/messages/tools.mjs +0 -14
- package/dist/esm/messages/tools.mjs.map +1 -1
- package/dist/esm/openai/index.mjs.map +1 -1
- package/dist/esm/prompts/activityLabel.mjs +9 -79
- package/dist/esm/prompts/activityLabel.mjs.map +1 -1
- package/dist/esm/responses/index.mjs.map +1 -1
- package/dist/esm/run.mjs +2 -538
- package/dist/esm/run.mjs.map +1 -1
- package/dist/esm/session/AgentSession.mjs +1 -17
- package/dist/esm/session/AgentSession.mjs.map +1 -1
- package/dist/esm/session/JsonlSessionStore.mjs.map +1 -1
- package/dist/esm/session/handlers.mjs +0 -7
- package/dist/esm/session/handlers.mjs.map +1 -1
- package/dist/esm/session/ids.mjs.map +1 -1
- package/dist/esm/session/messageSerialization.mjs +0 -4
- package/dist/esm/session/messageSerialization.mjs.map +1 -1
- package/dist/esm/stream.mjs +1 -93
- package/dist/esm/stream.mjs.map +1 -1
- package/dist/esm/summarization/index.mjs +0 -27
- package/dist/esm/summarization/index.mjs.map +1 -1
- package/dist/esm/summarization/node.mjs +0 -273
- package/dist/esm/summarization/node.mjs.map +1 -1
- package/dist/esm/tools/BashExecutor.mjs +0 -35
- package/dist/esm/tools/BashExecutor.mjs.map +1 -1
- package/dist/esm/tools/BashProgrammaticToolCalling.mjs +0 -24
- package/dist/esm/tools/BashProgrammaticToolCalling.mjs.map +1 -1
- package/dist/esm/tools/Calculator.mjs.map +1 -1
- package/dist/esm/tools/CodeExecutor.mjs +0 -13
- package/dist/esm/tools/CodeExecutor.mjs.map +1 -1
- package/dist/esm/tools/CodeSessionFileSummary.mjs.map +1 -1
- package/dist/esm/tools/ProgrammaticToolCalling.mjs +0 -101
- package/dist/esm/tools/ProgrammaticToolCalling.mjs.map +1 -1
- package/dist/esm/tools/ReadFile.mjs.map +1 -1
- package/dist/esm/tools/SkillTool.mjs +0 -5
- package/dist/esm/tools/SkillTool.mjs.map +1 -1
- package/dist/esm/tools/SubagentTool.mjs +0 -10
- package/dist/esm/tools/SubagentTool.mjs.map +1 -1
- package/dist/esm/tools/ToolNode.mjs +6 -1038
- package/dist/esm/tools/ToolNode.mjs.map +1 -1
- package/dist/esm/tools/ToolSearch.mjs +0 -179
- package/dist/esm/tools/ToolSearch.mjs.map +1 -1
- package/dist/esm/tools/cloudflare/CloudflareBridgeRuntime.mjs.map +1 -1
- package/dist/esm/tools/cloudflare/CloudflareProgrammaticToolCalling.mjs.map +1 -1
- package/dist/esm/tools/cloudflare/CloudflareSandboxExecutionEngine.mjs +0 -39
- package/dist/esm/tools/cloudflare/CloudflareSandboxExecutionEngine.mjs.map +1 -1
- package/dist/esm/tools/cloudflare/CloudflareSandboxTools.mjs.map +1 -1
- package/dist/esm/tools/eagerEventExecution.mjs +0 -6
- package/dist/esm/tools/eagerEventExecution.mjs.map +1 -1
- package/dist/esm/tools/handlers.mjs +1 -41
- package/dist/esm/tools/handlers.mjs.map +1 -1
- package/dist/esm/tools/intentArg.mjs +1 -132
- package/dist/esm/tools/intentArg.mjs.map +1 -1
- package/dist/esm/tools/local/CompileCheckTool.mjs +0 -25
- package/dist/esm/tools/local/CompileCheckTool.mjs.map +1 -1
- package/dist/esm/tools/local/FileCheckpointer.mjs +0 -23
- package/dist/esm/tools/local/FileCheckpointer.mjs.map +1 -1
- package/dist/esm/tools/local/LocalCodingTools.mjs +0 -80
- package/dist/esm/tools/local/LocalCodingTools.mjs.map +1 -1
- package/dist/esm/tools/local/LocalExecutionEngine.mjs +0 -126
- package/dist/esm/tools/local/LocalExecutionEngine.mjs.map +1 -1
- package/dist/esm/tools/local/LocalExecutionTools.mjs.map +1 -1
- package/dist/esm/tools/local/LocalProgrammaticToolCalling.mjs +0 -12
- package/dist/esm/tools/local/LocalProgrammaticToolCalling.mjs.map +1 -1
- package/dist/esm/tools/local/attachments.mjs +0 -44
- package/dist/esm/tools/local/attachments.mjs.map +1 -1
- package/dist/esm/tools/local/bashAst.mjs +0 -16
- package/dist/esm/tools/local/bashAst.mjs.map +1 -1
- package/dist/esm/tools/local/editStrategies.mjs +0 -14
- package/dist/esm/tools/local/editStrategies.mjs.map +1 -1
- package/dist/esm/tools/local/resolveLocalExecutionTools.mjs.map +1 -1
- package/dist/esm/tools/local/syntaxCheck.mjs +0 -31
- package/dist/esm/tools/local/syntaxCheck.mjs.map +1 -1
- package/dist/esm/tools/local/textEncoding.mjs +0 -11
- package/dist/esm/tools/local/textEncoding.mjs.map +1 -1
- package/dist/esm/tools/local/workspaceFS.mjs +0 -33
- package/dist/esm/tools/local/workspaceFS.mjs.map +1 -1
- package/dist/esm/tools/ptcTimeout.mjs.map +1 -1
- package/dist/esm/tools/schema.mjs +0 -8
- package/dist/esm/tools/schema.mjs.map +1 -1
- package/dist/esm/tools/search/anthropic.mjs +0 -9
- package/dist/esm/tools/search/anthropic.mjs.map +1 -1
- package/dist/esm/tools/search/content.mjs.map +1 -1
- package/dist/esm/tools/search/crw-scraper.mjs +0 -33
- package/dist/esm/tools/search/crw-scraper.mjs.map +1 -1
- package/dist/esm/tools/search/crw-search.mjs +0 -2
- package/dist/esm/tools/search/crw-search.mjs.map +1 -1
- package/dist/esm/tools/search/firecrawl.mjs +0 -25
- package/dist/esm/tools/search/firecrawl.mjs.map +1 -1
- package/dist/esm/tools/search/format.mjs +0 -30
- package/dist/esm/tools/search/format.mjs.map +1 -1
- package/dist/esm/tools/search/highlights.mjs +0 -16
- package/dist/esm/tools/search/highlights.mjs.map +1 -1
- package/dist/esm/tools/search/keenable-scraper.mjs +0 -8
- package/dist/esm/tools/search/keenable-scraper.mjs.map +1 -1
- package/dist/esm/tools/search/keenable-search.mjs +0 -7
- package/dist/esm/tools/search/keenable-search.mjs.map +1 -1
- package/dist/esm/tools/search/rerankers.mjs +0 -35
- package/dist/esm/tools/search/rerankers.mjs.map +1 -1
- package/dist/esm/tools/search/schema.mjs +0 -1
- package/dist/esm/tools/search/schema.mjs.map +1 -1
- package/dist/esm/tools/search/search.mjs +1 -14
- package/dist/esm/tools/search/search.mjs.map +1 -1
- package/dist/esm/tools/search/serper-scraper.mjs +0 -46
- package/dist/esm/tools/search/serper-scraper.mjs.map +1 -1
- package/dist/esm/tools/search/tavily-scraper.mjs.map +1 -1
- package/dist/esm/tools/search/tavily-search.mjs.map +1 -1
- package/dist/esm/tools/search/tool.mjs +0 -25
- package/dist/esm/tools/search/tool.mjs.map +1 -1
- package/dist/esm/tools/search/utils.mjs +0 -8
- package/dist/esm/tools/search/utils.mjs.map +1 -1
- package/dist/esm/tools/skillCatalog.mjs +0 -6
- package/dist/esm/tools/skillCatalog.mjs.map +1 -1
- package/dist/esm/tools/streamedToolCallSeals.mjs +0 -6
- package/dist/esm/tools/streamedToolCallSeals.mjs.map +1 -1
- package/dist/esm/tools/subagent/SubagentExecutionRegistry.mjs +0 -2
- package/dist/esm/tools/subagent/SubagentExecutionRegistry.mjs.map +1 -1
- package/dist/esm/tools/subagent/SubagentExecutor.mjs +3 -213
- package/dist/esm/tools/subagent/SubagentExecutor.mjs.map +1 -1
- package/dist/esm/tools/subagent/SubagentReplay.mjs.map +1 -1
- package/dist/esm/tools/subagent/childGraphConfig.mjs +0 -4
- package/dist/esm/tools/subagent/childGraphConfig.mjs.map +1 -1
- package/dist/esm/tools/subagent/runtimeLimits.mjs.map +1 -1
- package/dist/esm/tools/toolOutputReferences.mjs +1 -322
- package/dist/esm/tools/toolOutputReferences.mjs.map +1 -1
- package/dist/esm/types/hitl.mjs +0 -5
- package/dist/esm/types/hitl.mjs.map +1 -1
- package/dist/esm/utils/callbacks.mjs.map +1 -1
- package/dist/esm/utils/errors.mjs +14 -165
- package/dist/esm/utils/errors.mjs.map +1 -1
- package/dist/esm/utils/events.mjs +0 -10
- package/dist/esm/utils/events.mjs.map +1 -1
- package/dist/esm/utils/graph.mjs.map +1 -1
- package/dist/esm/utils/handlers.mjs +0 -3
- package/dist/esm/utils/handlers.mjs.map +1 -1
- package/dist/esm/utils/llm.mjs +0 -1
- package/dist/esm/utils/llm.mjs.map +1 -1
- package/dist/esm/utils/misc.mjs +0 -16
- package/dist/esm/utils/misc.mjs.map +1 -1
- package/dist/esm/utils/proxy.mjs +0 -26
- package/dist/esm/utils/proxy.mjs.map +1 -1
- package/dist/esm/utils/run.mjs +0 -6
- package/dist/esm/utils/run.mjs.map +1 -1
- package/dist/esm/utils/schema.mjs +0 -5
- package/dist/esm/utils/schema.mjs.map +1 -1
- package/dist/esm/utils/title.mjs +0 -6
- package/dist/esm/utils/title.mjs.map +1 -1
- package/dist/esm/utils/tokens.mjs +0 -113
- package/dist/esm/utils/tokens.mjs.map +1 -1
- package/dist/esm/utils/toolContent.mjs +0 -41
- package/dist/esm/utils/toolContent.mjs.map +1 -1
- package/dist/esm/utils/truncation.mjs +0 -61
- package/dist/esm/utils/truncation.mjs.map +1 -1
- package/dist/types/agents/AgentContext.d.ts +3 -3
- package/dist/types/agents/__tests__/promptCacheLiveHelpers.d.ts +3 -3
- package/dist/types/agents/projection.d.ts +1 -1
- package/dist/types/events.d.ts +2 -2
- package/dist/types/graphs/Graph.d.ts +11 -11
- package/dist/types/graphs/MultiAgentGraph.d.ts +2 -2
- package/dist/types/graphs/createGraph.d.ts +4 -4
- package/dist/types/graphs/graphFactory.d.ts +1 -1
- package/dist/types/hitl/askUserQuestion.d.ts +1 -1
- package/dist/types/hitl/askUserQuestions.d.ts +1 -1
- package/dist/types/hitl/askUserQuestionsInterrupt.d.ts +1 -1
- package/dist/types/hooks/types.d.ts +1 -1
- package/dist/types/instrumentation.d.ts +1 -1
- package/dist/types/langfuse.d.ts +3 -3
- package/dist/types/langfuseConfig.d.ts +2 -2
- package/dist/types/langfuseRuntimeContext.d.ts +1 -1
- package/dist/types/langfuseRuntimeScope.d.ts +2 -2
- package/dist/types/langfuseSpanRegistry.d.ts +1 -1
- package/dist/types/langfuseToolOutputTracing.d.ts +3 -3
- package/dist/types/llm/anthropic/index.d.ts +1 -1
- package/dist/types/llm/bedrock/index.d.ts +1 -1
- package/dist/types/llm/bedrock/toolCache.d.ts +2 -2
- package/dist/types/llm/contextOverflowRecovery.d.ts +2 -2
- package/dist/types/llm/google/index.d.ts +1 -1
- package/dist/types/llm/init.d.ts +2 -2
- package/dist/types/llm/invoke.d.ts +6 -6
- package/dist/types/llm/mistral/index.d.ts +1 -1
- package/dist/types/llm/openai/index.d.ts +2 -2
- package/dist/types/llm/openrouter/index.d.ts +2 -2
- package/dist/types/llm/openrouter/toolCache.d.ts +2 -2
- package/dist/types/llm/providers.d.ts +2 -2
- package/dist/types/llm/request.d.ts +2 -2
- package/dist/types/llm/stream/chunkAdapters.d.ts +1 -1
- package/dist/types/llm/streamLimits.d.ts +1 -1
- package/dist/types/llm/truncation.d.ts +1 -1
- package/dist/types/llm/vertexai/index.d.ts +1 -1
- package/dist/types/messages/alternation.d.ts +1 -1
- package/dist/types/messages/anthropicToolCache.d.ts +2 -2
- package/dist/types/messages/assistantPhase.d.ts +3 -3
- package/dist/types/messages/budget.d.ts +1 -1
- package/dist/types/messages/cache.d.ts +1 -1
- package/dist/types/messages/contextPruning.d.ts +2 -2
- package/dist/types/messages/core.d.ts +2 -2
- package/dist/types/messages/format.d.ts +2 -2
- package/dist/types/messages/ids.d.ts +2 -2
- package/dist/types/messages/injected.d.ts +1 -1
- package/dist/types/messages/langchain.d.ts +1 -1
- package/dist/types/messages/prune.d.ts +3 -3
- package/dist/types/openai/index.d.ts +1 -1
- package/dist/types/prompts/activityLabel.d.ts +2 -2
- package/dist/types/responses/index.d.ts +1 -1
- package/dist/types/run.d.ts +3 -3
- package/dist/types/session/handlers.d.ts +1 -1
- package/dist/types/session/types.d.ts +1 -1
- package/dist/types/stream.d.ts +4 -4
- package/dist/types/summarization/index.d.ts +1 -1
- package/dist/types/summarization/node.d.ts +6 -6
- package/dist/types/test/mockTools.d.ts +1 -1
- package/dist/types/tools/BashExecutor.d.ts +2 -2
- package/dist/types/tools/BashProgrammaticToolCalling.d.ts +2 -2
- package/dist/types/tools/CodeExecutor.d.ts +3 -3
- package/dist/types/tools/CodeSessionFileSummary.d.ts +1 -1
- package/dist/types/tools/ProgrammaticToolCalling.d.ts +2 -2
- package/dist/types/tools/ReadFile.d.ts +1 -1
- package/dist/types/tools/SkillTool.d.ts +1 -1
- package/dist/types/tools/SubagentTool.d.ts +3 -3
- package/dist/types/tools/ToolNode.d.ts +5 -5
- package/dist/types/tools/ToolSearch.d.ts +2 -2
- package/dist/types/tools/cloudflare/CloudflareBridgeRuntime.d.ts +1 -1
- package/dist/types/tools/cloudflare/CloudflareProgrammaticToolCalling.d.ts +1 -1
- package/dist/types/tools/cloudflare/CloudflareSandboxExecutionEngine.d.ts +2 -2
- package/dist/types/tools/cloudflare/CloudflareSandboxTools.d.ts +1 -1
- package/dist/types/tools/eagerEventExecution.d.ts +1 -1
- package/dist/types/tools/handlers.d.ts +3 -3
- package/dist/types/tools/intentArg.d.ts +1 -1
- package/dist/types/tools/local/CompileCheckTool.d.ts +2 -2
- package/dist/types/tools/local/FileCheckpointer.d.ts +1 -1
- package/dist/types/tools/local/LocalCodingTools.d.ts +2 -2
- package/dist/types/tools/local/LocalExecutionEngine.d.ts +1 -1
- package/dist/types/tools/local/LocalExecutionTools.d.ts +1 -1
- package/dist/types/tools/local/LocalProgrammaticToolCalling.d.ts +1 -1
- package/dist/types/tools/local/bashAst.d.ts +1 -1
- package/dist/types/tools/local/resolveLocalExecutionTools.d.ts +1 -1
- package/dist/types/tools/local/syntaxCheck.d.ts +1 -1
- package/dist/types/tools/ptcTimeout.d.ts +1 -1
- package/dist/types/tools/schema.d.ts +1 -1
- package/dist/types/tools/search/anthropic.d.ts +1 -1
- package/dist/types/tools/skillCatalog.d.ts +1 -1
- package/dist/types/tools/subagent/SubagentExecutor.d.ts +5 -5
- package/dist/types/tools/subagent/SubagentReplay.d.ts +3 -3
- package/dist/types/tools/subagent/childGraphConfig.d.ts +2 -2
- package/dist/types/types/activityLabel.d.ts +3 -3
- package/dist/types/types/graph.d.ts +7 -7
- package/dist/types/types/llm.d.ts +9 -9
- package/dist/types/types/run.d.ts +7 -7
- package/dist/types/types/stream.d.ts +5 -5
- package/dist/types/types/summarize.d.ts +2 -2
- package/dist/types/types/tools.d.ts +5 -5
- package/dist/types/utils/__tests__/fixtures/contextOverflowSignatures.d.ts +1 -1
- package/dist/types/utils/errors.d.ts +1 -1
- package/dist/types/utils/events.d.ts +1 -1
- package/dist/types/utils/handlers.d.ts +3 -3
- package/dist/types/utils/llm.d.ts +1 -1
- package/dist/types/utils/llmConfig.d.ts +1 -1
- package/dist/types/utils/title.d.ts +1 -1
- package/package.json +10 -3
- package/src/__tests__/stream.eagerArgsDivergence.test.ts +0 -911
- package/src/__tests__/stream.eagerEventExecution.test.ts +0 -5046
- package/src/__tests__/stream.streamLimits.test.ts +0 -1982
- package/src/agents/__tests__/AgentContext.anthropic.live.test.ts +0 -448
- package/src/agents/__tests__/AgentContext.bedrock.live.test.ts +0 -655
- package/src/agents/__tests__/AgentContext.openrouter.live.test.ts +0 -128
- package/src/agents/__tests__/AgentContext.overflow.test.ts +0 -205
- package/src/agents/__tests__/AgentContext.test.ts +0 -2425
- package/src/agents/__tests__/projection.test.ts +0 -73
- package/src/agents/__tests__/promptCacheLiveHelpers.ts +0 -175
- package/src/aggregator.test.ts +0 -1214
- package/src/graphs/__tests__/Graph.breakerLifecycle.test.ts +0 -273
- package/src/graphs/__tests__/Graph.closeRunStep.test.ts +0 -385
- package/src/graphs/__tests__/Graph.contextOverflow.test.ts +0 -1766
- package/src/graphs/__tests__/Graph.preemptSignal.test.ts +0 -126
- package/src/graphs/__tests__/Graph.reasoning.test.ts +0 -1717
- package/src/graphs/__tests__/Graph.subagentResumeState.test.ts +0 -80
- package/src/graphs/__tests__/MultiAgentGraph.test.ts +0 -177
- package/src/graphs/__tests__/composition.smoke.test.ts +0 -509
- package/src/graphs/__tests__/createGraph.test.ts +0 -206
- package/src/hooks/__tests__/HookRegistry.test.ts +0 -334
- package/src/hooks/__tests__/compactHooks.test.ts +0 -250
- package/src/hooks/__tests__/createToolPolicyHook.test.ts +0 -268
- package/src/hooks/__tests__/createWorkspacePolicyHook.test.ts +0 -405
- package/src/hooks/__tests__/executeHooks.test.ts +0 -1294
- package/src/hooks/__tests__/integration.test.ts +0 -337
- package/src/hooks/__tests__/matchers.test.ts +0 -238
- package/src/hooks/__tests__/preemptBoundary.test.ts +0 -152
- package/src/hooks/__tests__/toolHooks.test.ts +0 -669
- package/src/llm/__tests__/contextOverflowRecovery.test.ts +0 -401
- package/src/llm/__tests__/fallbackOverflow.test.ts +0 -287
- package/src/llm/anthropic/Jacob_Lee_Resume_2023.pdf +0 -0
- package/src/llm/anthropic/inherited-content-utils.spec.ts +0 -249
- package/src/llm/anthropic/inherited-stream-events.spec.ts +0 -1259
- package/src/llm/anthropic/inherited-strict.spec.ts +0 -302
- package/src/llm/anthropic/llm.spec.ts +0 -3394
- package/src/llm/anthropic/utils/cross-provider-reasoning.test.ts +0 -383
- package/src/llm/anthropic/utils/cross-provider-server-tools.test.ts +0 -110
- package/src/llm/anthropic/utils/server-tool-inputs.test.ts +0 -508
- package/src/llm/anthropic/utils/streaming-tool-input.test.ts +0 -361
- package/src/llm/anthropic/utils/stripPrefillCache.test.ts +0 -111
- package/src/llm/anthropic/utils/tool-id-normalization.test.ts +0 -287
- package/src/llm/bedrock/inherited-cache.spec.ts +0 -144
- package/src/llm/bedrock/inherited.spec.ts +0 -724
- package/src/llm/bedrock/llm.spec.ts +0 -1533
- package/src/llm/bedrock/streamSealDispatch.test.ts +0 -331
- package/src/llm/bedrock/toolCache.test.ts +0 -194
- package/src/llm/bedrock/utils/cross-provider-reasoning.test.ts +0 -131
- package/src/llm/bedrock/utils/cross-provider-server-tools.test.ts +0 -122
- package/src/llm/bedrock/utils/message_inputs.test.ts +0 -650
- package/src/llm/bedrock/utils/message_outputs.test.ts +0 -85
- package/src/llm/bedrock/utils/toolResultCachePoint.test.ts +0 -118
- package/src/llm/custom-chat-models.smoke.test.ts +0 -1966
- package/src/llm/google/data/gettysburg10.wav +0 -0
- package/src/llm/google/data/hotdog.jpg +0 -0
- package/src/llm/google/inherited-stream-events.spec.ts +0 -350
- package/src/llm/google/llm.spec.ts +0 -1388
- package/src/llm/google/streamSmoothing.test.ts +0 -121
- package/src/llm/google/utils/common.test.ts +0 -196
- package/src/llm/invoke.alternation.test.ts +0 -87
- package/src/llm/invoke.handoffCue.test.ts +0 -112
- package/src/llm/invoke.streamLimits.test.ts +0 -142
- package/src/llm/invoke.test.ts +0 -1198
- package/src/llm/mistral/streamSmoothing.test.ts +0 -97
- package/src/llm/openai/cacheWriteTokens.test.ts +0 -112
- package/src/llm/openai/contentBlocks.test.ts +0 -381
- package/src/llm/openai/deepseek.test.ts +0 -747
- package/src/llm/openai/inherited-deepseek.spec.ts +0 -347
- package/src/llm/openai/inherited-xai.spec.ts +0 -416
- package/src/llm/openai/llm.spec.ts +0 -1774
- package/src/llm/openai/managedRequests.test.ts +0 -182
- package/src/llm/openai/sequentialToolCallSeals.test.ts +0 -199
- package/src/llm/openai/streamMetadata.spec.ts +0 -86
- package/src/llm/openai/streamMetadataDedup.spec.ts +0 -166
- package/src/llm/openai/utils/isReasoningModel.test.ts +0 -90
- package/src/llm/openai/utils/messages.test.ts +0 -488
- package/src/llm/openrouter/reasoning.test.ts +0 -561
- package/src/llm/openrouter/toolCache.test.ts +0 -134
- package/src/llm/preempt.test.ts +0 -323
- package/src/llm/stream/chunkAdapters.test.ts +0 -202
- package/src/llm/stream/reassembly.test.ts +0 -241
- package/src/llm/stream/smoother.bench.test.ts +0 -155
- package/src/llm/stream/smoother.test.ts +0 -519
- package/src/llm/streamLimits.test.ts +0 -450
- package/src/llm/truncation.test.ts +0 -242
- package/src/llm/vertexai/fixThoughtSignatures.test.ts +0 -154
- package/src/llm/vertexai/inherited-stream-events.spec.ts +0 -271
- package/src/llm/vertexai/llm.spec.ts +0 -159
- package/src/llm/vertexai/repairUsageMetadata.test.ts +0 -54
- package/src/llm/vertexai/sealStreamedToolCalls.test.ts +0 -88
- package/src/llm/vertexai/streamSealDispatch.test.ts +0 -148
- package/src/llm/vertexai/streamSmoothing.test.ts +0 -109
- package/src/messages/__tests__/anthropicToolCache.test.ts +0 -339
- package/src/messages/__tests__/observationMasking.test.ts +0 -312
- package/src/messages/__tests__/recency.test.ts +0 -267
- package/src/messages/__tests__/tools.test.ts +0 -473
- package/src/messages/alternation.test.ts +0 -212
- package/src/messages/assistantPhase.test.ts +0 -75
- package/src/messages/cache.tail.test.ts +0 -533
- package/src/messages/cache.test.ts +0 -2166
- package/src/messages/content.test.ts +0 -362
- package/src/messages/contextPruning.test.ts +0 -184
- package/src/messages/ensureThinkingBlock.test.ts +0 -1427
- package/src/messages/foldToollessToolBlocks.test.ts +0 -596
- package/src/messages/formatAgentMessages.reducer.test.ts +0 -162
- package/src/messages/formatAgentMessages.skills.test.ts +0 -513
- package/src/messages/formatAgentMessages.steer.test.ts +0 -598
- package/src/messages/formatAgentMessages.test.ts +0 -8111
- package/src/messages/formatAgentMessages.tools.test.ts +0 -522
- package/src/messages/formatMessage.test.ts +0 -693
- package/src/messages/handoffCue.test.ts +0 -96
- package/src/messages/injected.test.ts +0 -107
- package/src/messages/labelContentByAgent.test.ts +0 -962
- package/src/messages/reducer.spec.ts +0 -32
- package/src/messages/shiftIndexTokenCountMap.test.ts +0 -81
- package/src/messages/tailCacheConversion.test.ts +0 -161
- package/src/openai/__tests__/openai.test.ts +0 -337
- package/src/responses/__tests__/responses.test.ts +0 -652
- package/src/scripts/abort.ts +0 -157
- package/src/scripts/activity-labels/captured.json +0 -56
- package/src/scripts/activity-labels/checks.cjs +0 -205
- package/src/scripts/activity-labels/corpus.cjs +0 -473
- package/src/scripts/activity-labels/report.cjs +0 -203
- package/src/scripts/activity-labels/rescore.cjs +0 -102
- package/src/scripts/activity-labels/run.ts +0 -705
- package/src/scripts/activity-labels/variants.ts +0 -71
- package/src/scripts/ant_web_search.ts +0 -159
- package/src/scripts/ant_web_search_edge_case.ts +0 -163
- package/src/scripts/ant_web_search_error_edge_case.ts +0 -149
- package/src/scripts/args.ts +0 -48
- package/src/scripts/bedrock-cache-debug.ts +0 -250
- package/src/scripts/bedrock-content-aggregation-test.ts +0 -266
- package/src/scripts/bedrock-merge-test.ts +0 -107
- package/src/scripts/bedrock-parallel-tools-test.ts +0 -204
- package/src/scripts/bench-prompt-cache.ts +0 -479
- package/src/scripts/caching.ts +0 -132
- package/src/scripts/cli.ts +0 -172
- package/src/scripts/cli2.ts +0 -133
- package/src/scripts/cli3.ts +0 -184
- package/src/scripts/cli4.ts +0 -191
- package/src/scripts/cli5.ts +0 -191
- package/src/scripts/code_exec.ts +0 -214
- package/src/scripts/code_exec_files.ts +0 -237
- package/src/scripts/code_exec_multi_session.ts +0 -237
- package/src/scripts/code_exec_ptc.ts +0 -335
- package/src/scripts/code_exec_session.ts +0 -283
- package/src/scripts/code_exec_simple.ts +0 -148
- package/src/scripts/compare_pi_vs_ours.ts +0 -1259
- package/src/scripts/content.ts +0 -139
- package/src/scripts/context-overflow-probe.ts +0 -997
- package/src/scripts/empty_input.ts +0 -137
- package/src/scripts/handoff-test.ts +0 -134
- package/src/scripts/local_engine.ts +0 -166
- package/src/scripts/local_engine_checkpointer.ts +0 -205
- package/src/scripts/local_engine_compile.ts +0 -263
- package/src/scripts/local_engine_hooks.ts +0 -226
- package/src/scripts/local_engine_image.ts +0 -201
- package/src/scripts/local_engine_ptc.ts +0 -151
- package/src/scripts/local_engine_workspace.ts +0 -258
- package/src/scripts/memory.ts +0 -107
- package/src/scripts/multi-agent-chain.ts +0 -332
- package/src/scripts/multi-agent-conditional.ts +0 -222
- package/src/scripts/multi-agent-document-review-chain.ts +0 -198
- package/src/scripts/multi-agent-hybrid-flow.ts +0 -311
- package/src/scripts/multi-agent-parallel-start.ts +0 -265
- package/src/scripts/multi-agent-parallel.ts +0 -395
- package/src/scripts/multi-agent-sequence.ts +0 -217
- package/src/scripts/multi-agent-subagent.ts +0 -246
- package/src/scripts/multi-agent-supervisor.ts +0 -366
- package/src/scripts/multi-agent-test.ts +0 -187
- package/src/scripts/openrouter_prompt_cache_live.ts +0 -310
- package/src/scripts/parallel-asymmetric-tools-test.ts +0 -275
- package/src/scripts/parallel-full-metadata-test.ts +0 -241
- package/src/scripts/parallel-tools-test.ts +0 -341
- package/src/scripts/preempt-probe.ts +0 -330
- package/src/scripts/preempt-scenarios.ts +0 -388
- package/src/scripts/programmatic_exec.ts +0 -387
- package/src/scripts/programmatic_exec_agent.ts +0 -232
- package/src/scripts/search.ts +0 -147
- package/src/scripts/sequential-full-metadata-test.ts +0 -198
- package/src/scripts/session_live.ts +0 -548
- package/src/scripts/simple.ts +0 -226
- package/src/scripts/single-agent-metadata-test.ts +0 -196
- package/src/scripts/stream.ts +0 -141
- package/src/scripts/subagent-configurable-inheritance.ts +0 -252
- package/src/scripts/subagent-event-driven-debug.ts +0 -190
- package/src/scripts/subagent-tools-debug.ts +0 -160
- package/src/scripts/subagent-usage-sink.ts +0 -176
- package/src/scripts/summarization-recency.ts +0 -462
- package/src/scripts/test-custom-prompt-key.ts +0 -145
- package/src/scripts/test-handoff-input.ts +0 -170
- package/src/scripts/test-handoff-preamble.ts +0 -278
- package/src/scripts/test-handoff-steering.ts +0 -430
- package/src/scripts/test-multi-agent-list-handoff.ts +0 -418
- package/src/scripts/test-parallel-agent-labeling.ts +0 -327
- package/src/scripts/test-parallel-handoffs.ts +0 -292
- package/src/scripts/test-thinking-handoff-bedrock.ts +0 -154
- package/src/scripts/test-thinking-handoff.ts +0 -156
- package/src/scripts/test-thinking-to-thinking-handoff-bedrock.ts +0 -166
- package/src/scripts/test-tool-before-handoff-role-order.ts +0 -276
- package/src/scripts/test-tools-before-handoff.ts +0 -222
- package/src/scripts/test_code_api.ts +0 -354
- package/src/scripts/thinking-bedrock.ts +0 -160
- package/src/scripts/thinking-vertexai.ts +0 -168
- package/src/scripts/thinking.ts +0 -172
- package/src/scripts/tool_search.ts +0 -153
- package/src/scripts/tools.ts +0 -163
- package/src/session/__tests__/JsonlSessionStore.test.ts +0 -1463
- package/src/session/__tests__/handlers.test.ts +0 -161
- package/src/specs/activity-label-observability.live.test.ts +0 -262
- package/src/specs/activity-label-observability.test.ts +0 -167
- package/src/specs/activity-label-prompt.test.ts +0 -359
- package/src/specs/activity-label-trace-seed.test.ts +0 -47
- package/src/specs/activity-phase-label.test.ts +0 -306
- package/src/specs/agent-handoffs.live.test.ts +0 -140
- package/src/specs/agent-handoffs.test.ts +0 -2465
- package/src/specs/anthropic.simple.test.ts +0 -453
- package/src/specs/ask-user-question-batch.test.ts +0 -289
- package/src/specs/ask-user-questions.live.test.ts +0 -185
- package/src/specs/ask-user-questions.test.ts +0 -293
- package/src/specs/azure.simple.test.ts +0 -502
- package/src/specs/bedrock-toolless.live.test.ts +0 -123
- package/src/specs/bedrock-truncation.live.test.ts +0 -191
- package/src/specs/cache.simple.test.ts +0 -416
- package/src/specs/context-accuracy.live.test.ts +0 -409
- package/src/specs/context-overflow-recovery.live.test.ts +0 -213
- package/src/specs/context-usage-event.test.ts +0 -117
- package/src/specs/context-usage.live.test.ts +0 -297
- package/src/specs/custom-event-await.test.ts +0 -304
- package/src/specs/deepseek.simple.test.ts +0 -290
- package/src/specs/deterministic-trace-id.test.ts +0 -43
- package/src/specs/discovered-tools.test.ts +0 -217
- package/src/specs/durability-checkpoint.integration.test.ts +0 -243
- package/src/specs/graph-subagent.live.test.ts +0 -242
- package/src/specs/graph-subagent.test.ts +0 -322
- package/src/specs/handoffCue.test.ts +0 -165
- package/src/specs/langfuse-callbacks.test.ts +0 -1578
- package/src/specs/langfuse-config.test.ts +0 -247
- package/src/specs/langfuse-instrumentation.test.ts +0 -393
- package/src/specs/langfuse-metadata.test.ts +0 -245
- package/src/specs/langfuse-routing.integration.test.ts +0 -844
- package/src/specs/langfuse-runtime-context.test.ts +0 -92
- package/src/specs/langfuse-span-registry.test.ts +0 -87
- package/src/specs/langfuse-tool-output-tracing.test.ts +0 -1858
- package/src/specs/langfuse-trace-shaping.test.ts +0 -591
- package/src/specs/moonshot.simple.test.ts +0 -367
- package/src/specs/multi-agent-summarization.test.ts +0 -396
- package/src/specs/openai.simple.test.ts +0 -315
- package/src/specs/openrouter.simple.test.ts +0 -275
- package/src/specs/preemptSeal.test.ts +0 -678
- package/src/specs/prune.test.ts +0 -3741
- package/src/specs/reasoning.test.ts +0 -201
- package/src/specs/run-step-timestamps.test.ts +0 -414
- package/src/specs/spec.utils.ts +0 -15
- package/src/specs/subagent.test.ts +0 -864
- package/src/specs/summarization-unit.test.ts +0 -973
- package/src/specs/summarization.test.ts +0 -3823
- package/src/specs/summarize-prune.test.ts +0 -376
- package/src/specs/thinking-handoff.test.ts +0 -621
- package/src/specs/thinking-prune.test.ts +0 -827
- package/src/specs/token-accounting-e2e.test.ts +0 -1034
- package/src/specs/token-accounting-pipeline.test.ts +0 -1008
- package/src/specs/token-distribution-edge-case.test.ts +0 -315
- package/src/specs/token-memoization.test.ts +0 -40
- package/src/specs/tokens.test.ts +0 -1000
- package/src/specs/tool-error-resume.test.ts +0 -194
- package/src/specs/tool-error.test.ts +0 -198
- package/src/specs/vllm-reasoning-toolcalls.test.ts +0 -340
- package/src/stream.dispatch.test.ts +0 -63
- package/src/stream.test.ts +0 -144
- package/src/summarization/__tests__/aggregator.test.ts +0 -236
- package/src/summarization/__tests__/node.test.ts +0 -1996
- package/src/summarization/__tests__/trigger.test.ts +0 -149
- package/src/summarization/chunkHandler.test.ts +0 -196
- package/src/test/mockTools.ts +0 -386
- package/src/tools/Calculator.test.ts +0 -278
- package/src/tools/__tests__/BashExecutor.test.ts +0 -108
- package/src/tools/__tests__/CloudflareSandboxExecution.test.ts +0 -939
- package/src/tools/__tests__/CodeApiAuthHeaders.test.ts +0 -858
- package/src/tools/__tests__/CodeExecutor.stateful.test.ts +0 -124
- package/src/tools/__tests__/LocalExecutionRoots.test.ts +0 -8
- package/src/tools/__tests__/LocalExecutionTools.test.ts +0 -2733
- package/src/tools/__tests__/ProgrammaticToolCalling.integration.test.ts +0 -318
- package/src/tools/__tests__/ProgrammaticToolCalling.test.ts +0 -1557
- package/src/tools/__tests__/ReadFile.test.ts +0 -44
- package/src/tools/__tests__/SkillTool.test.ts +0 -442
- package/src/tools/__tests__/SubagentExecutor.test.ts +0 -3728
- package/src/tools/__tests__/SubagentReplay.test.ts +0 -329
- package/src/tools/__tests__/SubagentTool.test.ts +0 -149
- package/src/tools/__tests__/ToolNode.breakerSignal.test.ts +0 -595
- package/src/tools/__tests__/ToolNode.eagerEventExecution.test.ts +0 -1191
- package/src/tools/__tests__/ToolNode.invalidToolCalls.test.ts +0 -757
- package/src/tools/__tests__/ToolNode.langfuse.test.ts +0 -57
- package/src/tools/__tests__/ToolNode.onResultCompletion.test.ts +0 -736
- package/src/tools/__tests__/ToolNode.outputReferences.test.ts +0 -1710
- package/src/tools/__tests__/ToolNode.runtimeState.test.ts +0 -120
- package/src/tools/__tests__/ToolNode.session.test.ts +0 -1352
- package/src/tools/__tests__/ToolNode.streamLimits.test.ts +0 -69
- package/src/tools/__tests__/ToolSearch.integration.test.ts +0 -161
- package/src/tools/__tests__/ToolSearch.test.ts +0 -1227
- package/src/tools/__tests__/annotateMessagesForLLM.test.ts +0 -561
- package/src/tools/__tests__/directToolHITLResumeScope.test.ts +0 -980
- package/src/tools/__tests__/directToolHooks.test.ts +0 -700
- package/src/tools/__tests__/eagerEventExecution.session.test.ts +0 -92
- package/src/tools/__tests__/handlers.test.ts +0 -997
- package/src/tools/__tests__/hitl.test.ts +0 -4663
- package/src/tools/__tests__/intentArg.test.ts +0 -357
- package/src/tools/__tests__/intentCoverage.test.ts +0 -139
- package/src/tools/__tests__/localToolNames.test.ts +0 -75
- package/src/tools/__tests__/skillCatalog.test.ts +0 -161
- package/src/tools/__tests__/subagentHooks.test.ts +0 -1651
- package/src/tools/__tests__/toolOutputReferences.test.ts +0 -515
- package/src/tools/__tests__/workspaceSeam.test.ts +0 -147
- package/src/tools/local/__tests__/FileCheckpointer.test.ts +0 -162
- package/src/tools/local/__tests__/editStrategies.test.ts +0 -134
- package/src/tools/search/content.test.ts +0 -173
- package/src/tools/search/crw.test.ts +0 -836
- package/src/tools/search/format.test.ts +0 -242
- package/src/tools/search/http-agent.test.ts +0 -133
- package/src/tools/search/jina-reranker.test.ts +0 -306
- package/src/tools/search/keenable-scraper.test.ts +0 -153
- package/src/tools/search/keenable.test.ts +0 -183
- package/src/tools/search/outcome.test.ts +0 -90
- package/src/tools/search/output.md +0 -2775
- package/src/tools/search/rag-api-reranker.test.ts +0 -891
- package/src/tools/search/source-processing.test.ts +0 -516
- package/src/tools/search/tavily.test.ts +0 -965
- package/src/tools/search/test.html +0 -884
- package/src/tools/search/test.md +0 -643
- package/src/tools/subagent/__tests__/SubagentExecutionRegistry.test.ts +0 -637
- package/src/tools/subagent/__tests__/SubagentExecutor.lazy.test.ts +0 -3054
- package/src/tools/subagent/__tests__/childGraphConfig.test.ts +0 -521
- package/src/utils/__tests__/apportion.test.ts +0 -32
- package/src/utils/__tests__/errors.test.ts +0 -270
- package/src/utils/__tests__/fixtures/contextOverflowSignatures.ts +0 -336
- package/src/utils/__tests__/redactSecrets.test.ts +0 -56
- package/src/utils/__tests__/truncation.test.ts +0 -66
- package/src/utils/llm.test.ts +0 -18
- package/src/utils/proxy.test.ts +0 -176
- package/src/utils/toolContent.test.ts +0 -1432
|
@@ -1,13 +1,4 @@
|
|
|
1
1
|
//#region src/llm/openai/streamMetadata.ts
|
|
2
|
-
/**
|
|
3
|
-
* `@langchain/openai` stamps these scalar fields together onto every chunk
|
|
4
|
-
* whose `choice.finish_reason` is set. Providers that emit `finish_reason` on
|
|
5
|
-
* more than one streamed chunk (e.g. OpenRouter) otherwise make core's
|
|
6
|
-
* `_mergeDicts` concatenate them into `stopstop` / duplicated model names — in
|
|
7
|
-
* both the aggregated graph message and the Langfuse trace. Core keeps
|
|
8
|
-
* `id`/`name`/`model_provider` last but not these, so keep the first occurrence
|
|
9
|
-
* and drop later repeats at the source, before either aggregation runs.
|
|
10
|
-
*/
|
|
11
2
|
const REPEATED_SCALAR_METADATA_FIELDS = [
|
|
12
3
|
"model_name",
|
|
13
4
|
"finish_reason",
|
|
@@ -18,18 +9,6 @@ function completionIndex(generationInfo) {
|
|
|
18
9
|
const completion = generationInfo?.completion;
|
|
19
10
|
return typeof completion === "number" ? completion : 0;
|
|
20
11
|
}
|
|
21
|
-
/**
|
|
22
|
-
* Strip scalar `response_metadata`/`generationInfo` fields that have already
|
|
23
|
-
* appeared on an earlier chunk of the same completion (tracked in `seen`),
|
|
24
|
-
* keeping the first occurrence so the aggregated message still carries the
|
|
25
|
-
* value once. Scoped per completion index so multi-choice (`n > 1`) responses,
|
|
26
|
-
* which `_generate` aggregates separately, keep each choice's own metadata.
|
|
27
|
-
*
|
|
28
|
-
* Deletes from a shallow clone rather than in place: providers such as
|
|
29
|
-
* `ChatDeepSeek` split one raw chunk into several synthetic pieces that share
|
|
30
|
-
* the same `response_metadata`/`generationInfo` objects, so mutating in place
|
|
31
|
-
* would strip fields from sibling chunks that were already emitted.
|
|
32
|
-
*/
|
|
33
12
|
function dropRepeatedScalarMetadata(chunk, seen) {
|
|
34
13
|
const generationInfo = chunk.generationInfo;
|
|
35
14
|
const responseMetadata = chunk.message.response_metadata;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"streamMetadata.mjs","names":[],"sources":["../../../../src/llm/openai/streamMetadata.ts"],"
|
|
1
|
+
{"version":3,"file":"streamMetadata.mjs","names":[],"sources":["../../../../src/llm/openai/streamMetadata.ts"],"mappings":";AAWA,MAAM,kCAAkC;CACtC;CACA;CACA;CACA;AACF;AAKA,SAAS,gBACP,gBACQ;CACR,MAAM,aAAa,gBAAgB;CACnC,OAAO,OAAO,eAAe,WAAW,aAAa;AACvD;AAcA,SAAgB,2BACd,OACA,MACM;CACN,MAAM,iBAAiB,MAAM;CAG7B,MAAM,mBAAmB,MAAM,QAAQ;CAKvC,MAAM,QAAQ,gBAAgB,cAAc;CAC5C,IAAI,aAAa,KAAK,IAAI,KAAK;CAC/B,IAAI,cAAc,MAAM;EACtB,6BAAa,IAAI,IAAY;EAC7B,KAAK,IAAI,OAAO,UAAU;CAC5B;CAEA,MAAM,yBAAmC,CAAC;CAC1C,MAAM,2BAAqC,CAAC;CAC5C,KAAK,MAAM,SAAS,iCAAiC;EACnD,MAAM,mBACJ,kBAAkB,QAAQ,eAAe,UAAU;EACrD,MAAM,qBAAqB,iBAAiB,UAAU;EACtD,IAAI,CAAC,oBAAoB,CAAC,oBACxB;EAEF,IAAI,CAAC,WAAW,IAAI,KAAK,GAAG;GAC1B,WAAW,IAAI,KAAK;GACpB;EACF;EACA,IAAI,kBACF,uBAAuB,KAAK,KAAK;EAEnC,IAAI,oBACF,yBAAyB,KAAK,KAAK;CAEvC;CAEA,IAAI,uBAAuB,SAAS,KAAK,kBAAkB,MAAM;EAC/D,MAAM,SAAS,EAAE,GAAG,eAAe;EACnC,KAAK,MAAM,SAAS,wBAClB,OAAO,OAAO;EAEhB,MAAM,iBAAiB;CACzB;CACA,IAAI,yBAAyB,SAAS,GAAG;EACvC,MAAM,SAAS,EAAE,GAAG,iBAAiB;EACrC,KAAK,MAAM,SAAS,0BAClB,OAAO,OAAO;EAEhB,MAAM,QAAQ,oBAAoB;CACpC;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[],"sources":["../../../../../src/llm/openai/utils/index.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/ban-ts-comment */\n/* eslint-disable @typescript-eslint/explicit-function-return-type */\nimport { type OpenAI as OpenAIClient } from 'openai';\nimport { ChatGenerationChunk } from '@langchain/core/outputs';\nimport {\n makeInvalidToolCall,\n parseToolCall,\n} from '@langchain/core/output_parsers/openai_tools';\nimport {\n AIMessage,\n AIMessageChunk,\n type BaseMessage,\n ChatMessage,\n ToolMessage,\n isAIMessage,\n type UsageMetadata,\n type BaseMessageFields,\n type MessageContentComplex,\n type InvalidToolCall,\n type MessageContentImageUrl,\n StandardContentBlockConverter,\n parseBase64DataUrl,\n parseMimeType,\n convertToProviderContentBlock,\n isDataContentBlock,\n} from '@langchain/core/messages';\nimport type {\n ChatCompletionContentPartText,\n ChatCompletionContentPartImage,\n ChatCompletionContentPartInputAudio,\n ChatCompletionContentPart,\n} from 'openai/resources/chat/completions';\nimport type {\n OpenAICallOptions,\n OpenAIChatInput,\n ChatOpenAIReasoningSummary,\n} from '@langchain/openai';\nimport type { ToolCall, ToolCallChunk } from '@langchain/core/messages/tool';\nimport {\n getBoundedCacheControlledTextToolContent,\n getComputerCallOutputScreenshot,\n isComputerCallOutputMessage,\n serializeStructuredValueBounded,\n} from '@/utils/toolContent';\nimport {\n STREAMED_TOOL_CALL_SEAL_METADATA_KEY,\n STREAMED_TOOL_CALL_ADAPTER_METADATA_KEY,\n OPENAI_RESPONSES_STREAMED_TOOL_CALL_ADAPTER,\n} from '@/tools/streamedToolCallSeals';\nimport {\n calculateMaxToolCallInputChars,\n projectToolCallInputs,\n serializeToolCallInput,\n} from '@/messages/prune';\nimport { HARD_MAX_TOOL_RESULT_CHARS } from '@/utils/truncation';\nimport { toLangChainContent } from '@/messages/langchain';\n\nexport type { OpenAICallOptions, OpenAIChatInput };\n\n// Utility types to get hidden OpenAI response types\ntype ExtractAsyncIterableType<T> = T extends AsyncIterable<infer U> ? U : never;\ntype ExcludeController<T> = T extends { controller: unknown } ? never : T;\ntype ExcludeNonController<T> = T extends { controller: unknown } ? T : never;\n\ntype ResponsesCreate = OpenAIClient.Responses['create'];\ntype ResponsesParse = OpenAIClient.Responses['parse'];\n\ntype ResponsesInputItem = OpenAIClient.Responses.ResponseInputItem;\n\ntype ResponsesCreateInvoke = ExcludeController<\n Awaited<ReturnType<ResponsesCreate>>\n>;\n\ntype ResponsesParseInvoke = ExcludeController<\n Awaited<ReturnType<ResponsesParse>>\n>;\n\ntype ResponsesCreateStream = ExcludeNonController<\n Awaited<ReturnType<ResponsesCreate>>\n>;\n\nexport type ResponseReturnStreamEvents =\n ExtractAsyncIterableType<ResponsesCreateStream>;\n\n// TODO import from SDK when available\ntype OpenAIRoleEnum =\n | 'system'\n | 'developer'\n | 'assistant'\n | 'user'\n | 'function'\n | 'tool';\n\ntype OpenAICompletionParam =\n OpenAIClient.Chat.Completions.ChatCompletionMessageParam;\n\nconst MAX_PROVIDER_TOOL_CALL_INPUT_CHARS = calculateMaxToolCallInputChars();\n\nfunction convertLangChainToolCallToBoundedOpenAI(toolCall: ToolCall): {\n id: string;\n type: 'function';\n function: {\n name: string;\n arguments: string;\n };\n} {\n if (toolCall.id == null) {\n throw new Error('All OpenAI tool calls must have an \"id\" field.');\n }\n return {\n id: toolCall.id,\n type: 'function',\n function: {\n name: toolCall.name,\n arguments: serializeToolCallInput(\n toolCall.args,\n MAX_PROVIDER_TOOL_CALL_INPUT_CHARS\n ),\n },\n };\n}\n\nfunction extractGenericMessageCustomRole(message: ChatMessage) {\n if (\n message.role !== 'system' &&\n message.role !== 'developer' &&\n message.role !== 'assistant' &&\n message.role !== 'user' &&\n message.role !== 'function' &&\n message.role !== 'tool'\n ) {\n console.warn(`Unknown message role: ${message.role}`);\n }\n\n return message.role as OpenAIRoleEnum;\n}\n\nexport function messageToOpenAIRole(message: BaseMessage): OpenAIRoleEnum {\n const type = message._getType();\n switch (type) {\n case 'system':\n return 'system';\n case 'ai':\n return 'assistant';\n case 'human':\n return 'user';\n case 'function':\n return 'function';\n case 'tool':\n return 'tool';\n case 'generic': {\n if (!ChatMessage.isInstance(message))\n throw new Error('Invalid generic chat message');\n return extractGenericMessageCustomRole(message);\n }\n default:\n throw new Error(`Unknown message type: ${type}`);\n }\n}\n\nconst completionsApiContentBlockConverter: StandardContentBlockConverter<{\n text: ChatCompletionContentPartText;\n image: ChatCompletionContentPartImage;\n audio: ChatCompletionContentPartInputAudio;\n file: ChatCompletionContentPart.File;\n}> = {\n providerName: 'ChatOpenAI',\n\n fromStandardTextBlock(block): ChatCompletionContentPartText {\n return { type: 'text', text: block.text };\n },\n\n fromStandardImageBlock(block): ChatCompletionContentPartImage {\n if (block.source_type === 'url') {\n return {\n type: 'image_url',\n image_url: {\n url: block.url,\n ...(block.metadata?.detail\n ? { detail: block.metadata.detail as 'auto' | 'low' | 'high' }\n : {}),\n },\n };\n }\n\n if (block.source_type === 'base64') {\n const url = `data:${block.mime_type ?? ''};base64,${block.data}`;\n return {\n type: 'image_url',\n image_url: {\n url,\n ...(block.metadata?.detail\n ? { detail: block.metadata.detail as 'auto' | 'low' | 'high' }\n : {}),\n },\n };\n }\n\n throw new Error(\n `Image content blocks with source_type ${block.source_type} are not supported for ChatOpenAI`\n );\n },\n\n fromStandardAudioBlock(block): ChatCompletionContentPartInputAudio {\n if (block.source_type === 'url') {\n const data = parseBase64DataUrl({ dataUrl: block.url });\n if (!data) {\n throw new Error(\n `URL audio blocks with source_type ${block.source_type} must be formatted as a data URL for ChatOpenAI`\n );\n }\n\n const rawMimeType = data.mime_type || block.mime_type || '';\n let mimeType: { type: string; subtype: string };\n\n try {\n mimeType = parseMimeType(rawMimeType);\n } catch {\n throw new Error(\n `Audio blocks with source_type ${block.source_type} must have mime type of audio/wav or audio/mp3`\n );\n }\n\n if (\n mimeType.type !== 'audio' ||\n (mimeType.subtype !== 'wav' && mimeType.subtype !== 'mp3')\n ) {\n throw new Error(\n `Audio blocks with source_type ${block.source_type} must have mime type of audio/wav or audio/mp3`\n );\n }\n\n return {\n type: 'input_audio',\n input_audio: {\n format: mimeType.subtype,\n data: data.data,\n },\n };\n }\n\n if (block.source_type === 'base64') {\n let mimeType: { type: string; subtype: string };\n\n try {\n mimeType = parseMimeType(block.mime_type ?? '');\n } catch {\n throw new Error(\n `Audio blocks with source_type ${block.source_type} must have mime type of audio/wav or audio/mp3`\n );\n }\n\n if (\n mimeType.type !== 'audio' ||\n (mimeType.subtype !== 'wav' && mimeType.subtype !== 'mp3')\n ) {\n throw new Error(\n `Audio blocks with source_type ${block.source_type} must have mime type of audio/wav or audio/mp3`\n );\n }\n\n return {\n type: 'input_audio',\n input_audio: {\n format: mimeType.subtype,\n data: block.data,\n },\n };\n }\n\n throw new Error(\n `Audio content blocks with source_type ${block.source_type} are not supported for ChatOpenAI`\n );\n },\n\n fromStandardFileBlock(block): ChatCompletionContentPart.File {\n if (block.source_type === 'url') {\n const data = parseBase64DataUrl({ dataUrl: block.url });\n if (!data) {\n throw new Error(\n `URL file blocks with source_type ${block.source_type} must be formatted as a data URL for ChatOpenAI`\n );\n }\n\n return {\n type: 'file',\n file: {\n file_data: block.url, // formatted as base64 data URL\n ...(block.metadata?.filename || block.metadata?.name\n ? {\n filename: (block.metadata.filename ||\n block.metadata.name) as string,\n }\n : {}),\n },\n };\n }\n\n if (block.source_type === 'base64') {\n return {\n type: 'file',\n file: {\n file_data: `data:${block.mime_type ?? ''};base64,${block.data}`,\n ...(block.metadata?.filename ||\n block.metadata?.name ||\n block.metadata?.title\n ? {\n filename: (block.metadata.filename ||\n block.metadata.name ||\n block.metadata.title) as string,\n }\n : {}),\n },\n };\n }\n\n if (block.source_type === 'id') {\n return {\n type: 'file',\n file: {\n file_id: block.id,\n },\n };\n }\n\n throw new Error(\n `File content blocks with source_type ${block.source_type} are not supported for ChatOpenAI`\n );\n },\n};\n\n/** Options for converting messages to OpenAI params */\nexport interface ConvertMessagesOptions {\n /** Include reasoning_content field for DeepSeek thinking mode with tool calls */\n includeReasoningContent?: boolean;\n /** Include reasoning_details field for OpenRouter/Gemini thinking mode with tool calls */\n includeReasoningDetails?: boolean;\n /** Convert reasoning_details to content blocks for Claude (requires content array format) */\n convertReasoningDetailsToContent?: boolean;\n /** Preserve OpenRouter's canonical cache-decorated tool text block. */\n preserveToolCacheControl?: boolean;\n}\n\n// Used in LangSmith, export is important here\nexport function _convertMessagesToOpenAIParams(\n messages: BaseMessage[],\n model?: string,\n options?: ConvertMessagesOptions\n): OpenAICompletionParam[] {\n const projectedMessages = projectToolCallInputs(\n messages,\n MAX_PROVIDER_TOOL_CALL_INPUT_CHARS\n );\n let hasReasoningToolCallContext = false;\n // TODO: Function messages do not support array content, fix cast\n return projectedMessages.flatMap((message) => {\n let role = messageToOpenAIRole(message);\n if (role === 'system' && isReasoningModel(model)) {\n role = 'developer';\n }\n\n let hasAnthropicThinkingBlock: boolean = false;\n\n let content: unknown;\n if (\n role === 'tool' &&\n typeof message.content !== 'string' &&\n !isComputerCallOutputMessage(message)\n ) {\n content =\n options?.preserveToolCacheControl === true\n ? getBoundedCacheControlledTextToolContent(\n message.content,\n HARD_MAX_TOOL_RESULT_CHARS\n )\n : undefined;\n content ??= serializeStructuredValueBounded(\n message.content,\n HARD_MAX_TOOL_RESULT_CHARS\n ).content;\n } else if (typeof message.content === 'string') {\n content = message.content;\n } else {\n content = message.content.map((m) => {\n if ('type' in m && m.type === 'thinking') {\n hasAnthropicThinkingBlock = true;\n return m;\n }\n if (isDataContentBlock(m)) {\n return convertToProviderContentBlock(\n m,\n completionsApiContentBlockConverter\n );\n }\n return m;\n });\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const completionParam: Record<string, any> = {\n role,\n content,\n };\n let messageHasToolCalls = false;\n let messageIsToolResult = false;\n if (message.name != null) {\n completionParam.name = message.name;\n }\n if (message.additional_kwargs.function_call != null) {\n completionParam.function_call = message.additional_kwargs.function_call;\n completionParam.content = '';\n }\n if (isAIMessage(message) && !!message.tool_calls?.length) {\n messageHasToolCalls = true;\n completionParam.tool_calls = message.tool_calls.map(\n convertLangChainToolCallToBoundedOpenAI\n );\n completionParam.content = hasAnthropicThinkingBlock ? content : '';\n if (\n options?.includeReasoningDetails === true &&\n message.additional_kwargs.reasoning_details != null\n ) {\n // For Claude via OpenRouter, convert reasoning_details to content blocks\n const isClaudeModel =\n model?.includes('claude') === true ||\n model?.includes('anthropic') === true;\n if (\n options.convertReasoningDetailsToContent === true &&\n isClaudeModel\n ) {\n const reasoningDetails = message.additional_kwargs\n .reasoning_details as Record<string, unknown>[];\n const contentBlocks = [];\n\n // Add thinking blocks from reasoning_details\n for (const detail of reasoningDetails) {\n if (detail.type === 'reasoning.text' && detail.text != null) {\n contentBlocks.push({\n type: 'thinking',\n thinking: detail.text,\n });\n } else if (\n detail.type === 'reasoning.encrypted' &&\n detail.data != null\n ) {\n contentBlocks.push({\n type: 'redacted_thinking',\n data: detail.data,\n id: detail.id,\n });\n }\n }\n\n // Set content to array with thinking blocks\n if (contentBlocks.length > 0) {\n completionParam.content = contentBlocks;\n }\n } else {\n // For non-Claude models, pass as separate field\n completionParam.reasoning_details =\n message.additional_kwargs.reasoning_details;\n }\n }\n } else {\n if (message.additional_kwargs.tool_calls != null) {\n messageHasToolCalls =\n !Array.isArray(message.additional_kwargs.tool_calls) ||\n message.additional_kwargs.tool_calls.length > 0;\n completionParam.tool_calls = message.additional_kwargs.tool_calls;\n if (\n options?.includeReasoningDetails === true &&\n message.additional_kwargs.reasoning_details != null\n ) {\n // For Claude via OpenRouter, convert reasoning_details to content blocks\n const isClaudeModel =\n model?.includes('claude') === true ||\n model?.includes('anthropic') === true;\n if (\n options.convertReasoningDetailsToContent === true &&\n isClaudeModel\n ) {\n const reasoningDetails = message.additional_kwargs\n .reasoning_details as Record<string, unknown>[];\n const contentBlocks = [];\n\n // Add thinking blocks from reasoning_details\n for (const detail of reasoningDetails) {\n if (detail.type === 'reasoning.text' && detail.text != null) {\n contentBlocks.push({\n type: 'thinking',\n thinking: detail.text,\n });\n } else if (\n detail.type === 'reasoning.encrypted' &&\n detail.data != null\n ) {\n contentBlocks.push({\n type: 'redacted_thinking',\n data: detail.data,\n id: detail.id,\n });\n }\n }\n\n // Set content to array with thinking blocks\n if (contentBlocks.length > 0) {\n completionParam.content = contentBlocks;\n }\n } else {\n // For non-Claude models, pass as separate field\n completionParam.reasoning_details =\n message.additional_kwargs.reasoning_details;\n }\n }\n }\n if ((message as ToolMessage).tool_call_id != null) {\n messageIsToolResult = true;\n completionParam.tool_call_id = (message as ToolMessage).tool_call_id;\n }\n }\n\n if (\n options?.includeReasoningContent === true &&\n isAIMessage(message) &&\n (hasReasoningToolCallContext || messageHasToolCalls) &&\n typeof message.additional_kwargs.reasoning_content === 'string' &&\n message.additional_kwargs.reasoning_content !== ''\n ) {\n completionParam.reasoning_content =\n message.additional_kwargs.reasoning_content;\n }\n\n if (messageHasToolCalls || messageIsToolResult) {\n hasReasoningToolCallContext = true;\n }\n\n if (\n message.additional_kwargs.audio &&\n typeof message.additional_kwargs.audio === 'object' &&\n 'id' in message.additional_kwargs.audio\n ) {\n const audioMessage = {\n role: 'assistant',\n audio: {\n id: message.additional_kwargs.audio.id,\n },\n };\n return [completionParam, audioMessage] as OpenAICompletionParam[];\n }\n\n return completionParam as OpenAICompletionParam;\n });\n}\n\nconst _FUNCTION_CALL_IDS_MAP_KEY = '__openai_function_call_ids__';\n\nfunction _convertReasoningSummaryToOpenAIResponsesParams(\n reasoning: ChatOpenAIReasoningSummary\n): OpenAIClient.Responses.ResponseReasoningItem {\n // combine summary parts that have the the same index and then remove the indexes\n const summary = (\n reasoning.summary.length > 1\n ? reasoning.summary.reduce(\n (acc, curr) => {\n const last = acc.at(-1);\n\n if (last!.index === curr.index) {\n last!.text += curr.text;\n } else {\n acc.push(curr);\n }\n return acc;\n },\n [{ ...reasoning.summary[0] }]\n )\n : reasoning.summary\n ).map((s) =>\n Object.fromEntries(Object.entries(s).filter(([k]) => k !== 'index'))\n ) as OpenAIClient.Responses.ResponseReasoningItem.Summary[];\n\n return {\n ...reasoning,\n summary,\n } as OpenAIClient.Responses.ResponseReasoningItem;\n}\n\nexport function _convertMessagesToOpenAIResponsesParams(\n messages: BaseMessage[],\n model?: string,\n zdrEnabled?: boolean\n): ResponsesInputItem[] {\n const projectedMessages = projectToolCallInputs(\n messages,\n MAX_PROVIDER_TOOL_CALL_INPUT_CHARS\n );\n return projectedMessages.flatMap(\n (lcMsg): ResponsesInputItem | ResponsesInputItem[] => {\n const additional_kwargs =\n lcMsg.additional_kwargs as BaseMessageFields['additional_kwargs'] & {\n [_FUNCTION_CALL_IDS_MAP_KEY]?: Record<string, string>;\n reasoning?: OpenAIClient.Responses.ResponseReasoningItem;\n type?: string;\n refusal?: string;\n };\n const responseMetadata = lcMsg.response_metadata as {\n output?: ResponsesInputItem[];\n };\n\n let role = messageToOpenAIRole(lcMsg);\n if (role === 'system' && isReasoningModel(model)) role = 'developer';\n\n if (role === 'function') {\n throw new Error('Function messages are not supported in Responses API');\n }\n\n if (role === 'tool') {\n const toolMessage = lcMsg as ToolMessage;\n\n // Handle computer call output\n if (additional_kwargs.type === 'computer_call_output') {\n const screenshot = getComputerCallOutputScreenshot(\n toolMessage.content\n );\n if (screenshot == null) {\n throw new Error('Invalid computer call output');\n }\n\n const output: OpenAIClient.Responses.ResponseComputerToolCallOutputScreenshot =\n 'image_url' in screenshot\n ? {\n type: 'computer_screenshot',\n image_url: screenshot.image_url,\n }\n : {\n type: 'computer_screenshot',\n file_id: screenshot.file_id,\n };\n const computerCallOutput: ResponsesInputItem = {\n type: 'computer_call_output',\n output,\n call_id: toolMessage.tool_call_id,\n };\n return computerCallOutput;\n }\n\n return {\n type: 'function_call_output',\n call_id: toolMessage.tool_call_id,\n id: toolMessage.id?.startsWith('fc_') ? toolMessage.id : undefined,\n output:\n typeof toolMessage.content !== 'string'\n ? serializeStructuredValueBounded(\n toolMessage.content,\n HARD_MAX_TOOL_RESULT_CHARS\n ).content\n : toolMessage.content,\n };\n }\n\n if (role === 'assistant') {\n // if we have the original response items, just reuse them\n if (\n !zdrEnabled &&\n responseMetadata.output != null &&\n Array.isArray(responseMetadata.output) &&\n responseMetadata.output.length > 0 &&\n responseMetadata.output.every((item) => 'type' in item)\n ) {\n return responseMetadata.output;\n }\n\n // otherwise, try to reconstruct the response from what we have\n\n const input: ResponsesInputItem[] = [];\n\n // reasoning items\n if (additional_kwargs.reasoning && !zdrEnabled) {\n const reasoningItem = _convertReasoningSummaryToOpenAIResponsesParams(\n additional_kwargs.reasoning\n );\n input.push(reasoningItem);\n }\n\n // ai content\n let content = lcMsg.content as\n | string\n | Array<\n | MessageContentComplex\n | OpenAIClient.Responses.ResponseOutputText\n | OpenAIClient.Responses.ResponseOutputRefusal\n >;\n if (additional_kwargs.refusal) {\n if (typeof content === 'string') {\n content = [{ type: 'output_text', text: content, annotations: [] }];\n }\n content = [\n ...content,\n { type: 'refusal', refusal: additional_kwargs.refusal },\n ];\n }\n\n input.push({\n type: 'message',\n role: 'assistant',\n ...(lcMsg.id && !zdrEnabled && lcMsg.id.startsWith('msg_')\n ? { id: lcMsg.id }\n : {}),\n content:\n typeof content === 'string'\n ? content\n : content.flatMap((item) => {\n if (item.type === 'text') {\n const textItem = item as MessageContentComplex & {\n annotations?: unknown[];\n };\n return {\n type: 'output_text',\n text: item.text,\n annotations: textItem.annotations ?? [],\n };\n }\n\n if (item.type === 'output_text' || item.type === 'refusal') {\n return item;\n }\n\n return [];\n }),\n } as ResponsesInputItem);\n\n const functionCallIds = additional_kwargs[_FUNCTION_CALL_IDS_MAP_KEY];\n\n if (isAIMessage(lcMsg) && !!lcMsg.tool_calls?.length) {\n input.push(\n ...lcMsg.tool_calls.map(\n (toolCall): ResponsesInputItem => ({\n type: 'function_call',\n name: toolCall.name,\n arguments: serializeToolCallInput(\n toolCall.args,\n MAX_PROVIDER_TOOL_CALL_INPUT_CHARS\n ),\n call_id: toolCall.id!,\n ...(zdrEnabled ? { id: functionCallIds?.[toolCall.id!] } : {}),\n })\n )\n );\n } else if (additional_kwargs.tool_calls) {\n input.push(\n ...additional_kwargs.tool_calls.map(\n (toolCall): ResponsesInputItem => ({\n type: 'function_call',\n name: toolCall.function.name,\n call_id: toolCall.id,\n arguments: toolCall.function.arguments,\n ...(zdrEnabled ? { id: functionCallIds?.[toolCall.id] } : {}),\n })\n )\n );\n }\n\n const toolOutputs =\n ((responseMetadata.output as Array<ResponsesInputItem> | undefined)\n ?.length ?? 0) > 0\n ? responseMetadata.output\n : additional_kwargs.tool_outputs;\n\n const fallthroughCallTypes: ResponsesInputItem['type'][] = [\n 'computer_call',\n /** @ts-ignore */\n 'mcp_call',\n /** @ts-ignore */\n 'code_interpreter_call',\n /** @ts-ignore */\n 'image_generation_call',\n ];\n\n if (toolOutputs != null) {\n const castToolOutputs = toolOutputs as Array<ResponsesInputItem>;\n const fallthroughCalls = castToolOutputs.filter((item) =>\n fallthroughCallTypes.includes(item.type)\n );\n if (fallthroughCalls.length > 0) input.push(...fallthroughCalls);\n }\n\n return input;\n }\n\n if (role === 'user' || role === 'system' || role === 'developer') {\n if (typeof lcMsg.content === 'string') {\n return { type: 'message', role, content: lcMsg.content };\n }\n\n const messages: ResponsesInputItem[] = [];\n const content = (lcMsg.content as MessageContentComplex[]).flatMap(\n (item) => {\n if (item.type === 'mcp_approval_response') {\n const approvalResponse = item as MessageContentComplex & {\n approval_request_id: string;\n approve: boolean;\n };\n messages.push({\n // @ts-ignore\n type: 'mcp_approval_response',\n approval_request_id: approvalResponse.approval_request_id,\n approve: approvalResponse.approve,\n });\n }\n if (isDataContentBlock(item)) {\n return convertToProviderContentBlock(\n item,\n completionsApiContentBlockConverter\n );\n }\n if (item.type === 'text') {\n return {\n type: 'input_text',\n text: item.text,\n };\n }\n if (item.type === 'image_url') {\n const imageItem = item as MessageContentImageUrl;\n return {\n type: 'input_image',\n image_url:\n typeof imageItem.image_url === 'string'\n ? imageItem.image_url\n : imageItem.image_url.url,\n detail:\n typeof imageItem.image_url === 'string'\n ? 'auto'\n : imageItem.image_url.detail,\n };\n }\n if (\n item.type === 'input_text' ||\n item.type === 'input_image' ||\n item.type === 'input_file'\n ) {\n return item;\n }\n return [];\n }\n );\n\n if (content.length > 0) {\n messages.push({\n type: 'message',\n role,\n content,\n } as ResponsesInputItem);\n }\n return messages;\n }\n\n console.warn(\n `Unsupported role found when converting to OpenAI Responses API: ${role}`\n );\n return [];\n }\n );\n}\n\nexport function isReasoningModel(model?: string) {\n return model != null && model !== '' && /\\b(o\\d|gpt-[5-9])\\b/i.test(model);\n}\n\nfunction _convertOpenAIResponsesMessageToBaseMessage(\n response: ResponsesCreateInvoke | ResponsesParseInvoke\n): BaseMessage {\n if (response.error) {\n // TODO: add support for `addLangChainErrorFields`\n const error = new Error(response.error.message);\n error.name = response.error.code;\n throw error;\n }\n\n let messageId: string | undefined;\n const content: MessageContentComplex[] = [];\n const tool_calls: ToolCall[] = [];\n const invalid_tool_calls: InvalidToolCall[] = [];\n const response_metadata: Record<string, unknown> = {\n model: response.model,\n created_at: response.created_at,\n id: response.id,\n incomplete_details: response.incomplete_details,\n metadata: response.metadata,\n object: response.object,\n status: response.status,\n user: response.user,\n service_tier: response.service_tier,\n\n // for compatibility with chat completion calls.\n model_name: response.model,\n };\n\n const additional_kwargs: {\n [key: string]: unknown;\n refusal?: string;\n reasoning?: OpenAIClient.Responses.ResponseReasoningItem;\n tool_outputs?: unknown[];\n parsed?: unknown;\n [_FUNCTION_CALL_IDS_MAP_KEY]?: Record<string, string>;\n } = {};\n\n for (const item of response.output) {\n if (item.type === 'message') {\n messageId = item.id;\n content.push(\n ...item.content.flatMap((part) => {\n if (part.type === 'output_text') {\n if ('parsed' in part && part.parsed != null) {\n additional_kwargs.parsed = part.parsed;\n }\n return {\n type: 'text',\n text: part.text,\n annotations: part.annotations,\n };\n }\n\n if (part.type === 'refusal') {\n additional_kwargs.refusal = part.refusal;\n return [];\n }\n\n return part;\n })\n );\n } else if (item.type === 'function_call') {\n const fnAdapter = {\n function: { name: item.name, arguments: item.arguments },\n id: item.call_id,\n };\n\n try {\n tool_calls.push(parseToolCall(fnAdapter, { returnId: true }));\n } catch (e: unknown) {\n let errMessage: string | undefined;\n if (\n typeof e === 'object' &&\n e != null &&\n 'message' in e &&\n typeof e.message === 'string'\n ) {\n errMessage = e.message;\n }\n invalid_tool_calls.push(makeInvalidToolCall(fnAdapter, errMessage));\n }\n\n additional_kwargs[_FUNCTION_CALL_IDS_MAP_KEY] ??= {};\n if (item.id) {\n additional_kwargs[_FUNCTION_CALL_IDS_MAP_KEY][item.call_id] = item.id;\n }\n } else if (item.type === 'reasoning') {\n additional_kwargs.reasoning = item;\n } else {\n additional_kwargs.tool_outputs ??= [];\n additional_kwargs.tool_outputs.push(item);\n }\n }\n\n return new AIMessage({\n id: messageId,\n content: toLangChainContent(content),\n tool_calls,\n invalid_tool_calls,\n usage_metadata: response.usage,\n additional_kwargs,\n response_metadata,\n });\n}\n\nexport function _convertOpenAIResponsesDeltaToBaseMessageChunk(\n chunk: ResponseReturnStreamEvents\n) {\n const content: MessageContentComplex[] = [];\n let generationInfo: Record<string, unknown> = {};\n let usage_metadata: UsageMetadata | undefined;\n const tool_call_chunks: ToolCallChunk[] = [];\n const response_metadata: Record<string, unknown> = {};\n const additional_kwargs: {\n [key: string]: unknown;\n reasoning?: Partial<ChatOpenAIReasoningSummary>;\n tool_outputs?: unknown[];\n } = {};\n let id: string | undefined;\n if (chunk.type === 'response.output_text.delta') {\n content.push({\n type: 'text',\n text: chunk.delta,\n index: chunk.content_index,\n });\n /** @ts-ignore */\n } else if (chunk.type === 'response.output_text_annotation.added') {\n content.push({\n type: 'text',\n text: '',\n /** @ts-ignore */\n annotations: [chunk.annotation],\n /** @ts-ignore */\n index: chunk.content_index,\n });\n } else if (\n chunk.type === 'response.output_item.added' &&\n chunk.item.type === 'message'\n ) {\n id = chunk.item.id;\n } else if (\n chunk.type === 'response.output_item.added' &&\n chunk.item.type === 'function_call'\n ) {\n response_metadata[STREAMED_TOOL_CALL_ADAPTER_METADATA_KEY] =\n OPENAI_RESPONSES_STREAMED_TOOL_CALL_ADAPTER;\n tool_call_chunks.push({\n type: 'tool_call_chunk',\n name: chunk.item.name,\n args: chunk.item.arguments,\n id: chunk.item.call_id,\n index: chunk.output_index,\n });\n\n additional_kwargs[_FUNCTION_CALL_IDS_MAP_KEY] = {\n [chunk.item.call_id]: chunk.item.id,\n };\n } else if (\n chunk.type === 'response.output_item.done' &&\n [\n 'web_search_call',\n 'file_search_call',\n 'computer_call',\n 'code_interpreter_call',\n 'mcp_call',\n 'mcp_list_tools',\n 'mcp_approval_request',\n 'image_generation_call',\n ].includes(chunk.item.type)\n ) {\n additional_kwargs.tool_outputs = [chunk.item];\n } else if (chunk.type === 'response.created') {\n response_metadata.id = chunk.response.id;\n response_metadata.model_name = chunk.response.model;\n response_metadata.model = chunk.response.model;\n } else if (chunk.type === 'response.completed') {\n const msg = _convertOpenAIResponsesMessageToBaseMessage(chunk.response);\n\n usage_metadata = chunk.response.usage;\n if (chunk.response.text?.format?.type === 'json_schema') {\n additional_kwargs.parsed ??= JSON.parse(msg.text);\n }\n for (const [key, value] of Object.entries(chunk.response)) {\n if (key !== 'id') response_metadata[key] = value;\n }\n } else if (chunk.type === 'response.function_call_arguments.delta') {\n response_metadata[STREAMED_TOOL_CALL_ADAPTER_METADATA_KEY] =\n OPENAI_RESPONSES_STREAMED_TOOL_CALL_ADAPTER;\n tool_call_chunks.push({\n type: 'tool_call_chunk',\n args: chunk.delta,\n index: chunk.output_index,\n });\n } else if (chunk.type === 'response.function_call_arguments.done') {\n response_metadata[STREAMED_TOOL_CALL_ADAPTER_METADATA_KEY] =\n OPENAI_RESPONSES_STREAMED_TOOL_CALL_ADAPTER;\n response_metadata[STREAMED_TOOL_CALL_SEAL_METADATA_KEY] = {\n kind: 'single',\n index: chunk.output_index,\n };\n tool_call_chunks.push({\n type: 'tool_call_chunk',\n name: chunk.name,\n args: chunk.arguments,\n index: chunk.output_index,\n });\n } else if (\n chunk.type === 'response.web_search_call.completed' ||\n chunk.type === 'response.file_search_call.completed'\n ) {\n generationInfo = {\n tool_outputs: {\n id: chunk.item_id,\n type: chunk.type.replace('response.', '').replace('.completed', ''),\n status: 'completed',\n },\n };\n } else if (chunk.type === 'response.refusal.done') {\n additional_kwargs.refusal = chunk.refusal;\n } else if (\n chunk.type === 'response.output_item.added' &&\n 'item' in chunk &&\n chunk.item.type === 'reasoning'\n ) {\n const summary: ChatOpenAIReasoningSummary['summary'] | undefined = chunk\n .item.summary\n ? chunk.item.summary.map((s, index) => ({\n ...s,\n index,\n }))\n : undefined;\n\n additional_kwargs.reasoning = {\n // We only capture ID in the first chunk or else the concatenated result of all chunks will\n // have an ID field that is repeated once per chunk. There is special handling for the `type`\n // field that prevents this, however.\n id: chunk.item.id,\n type: chunk.item.type,\n ...(summary ? { summary } : {}),\n };\n } else if (chunk.type === 'response.reasoning_summary_part.added') {\n additional_kwargs.reasoning = {\n type: 'reasoning',\n summary: [{ ...chunk.part, index: chunk.summary_index }],\n };\n } else if (chunk.type === 'response.reasoning_summary_text.delta') {\n additional_kwargs.reasoning = {\n type: 'reasoning',\n summary: [\n { text: chunk.delta, type: 'summary_text', index: chunk.summary_index },\n ],\n };\n /** @ts-ignore */\n } else if (chunk.type === 'response.image_generation_call.partial_image') {\n // noop/fixme: retaining partial images in a message chunk means that _all_\n // partial images get kept in history, so we don't do anything here.\n return null;\n } else {\n return null;\n }\n\n return new ChatGenerationChunk({\n // Legacy reasons, `onLLMNewToken` should pulls this out\n text: content.map((part) => ('text' in part ? part.text : '')).join(''),\n message: new AIMessageChunk({\n id,\n content: toLangChainContent(content),\n tool_call_chunks,\n usage_metadata,\n additional_kwargs,\n response_metadata,\n }),\n generationInfo,\n });\n}\n"],"mappings":";;;;;;;AAgGA,MAAM,qCAAqC,+BAA+B;AAE1E,SAAS,wCAAwC,UAO/C;CACA,IAAI,SAAS,MAAM,MACjB,MAAM,IAAI,MAAM,kDAAgD;CAElE,OAAO;EACL,IAAI,SAAS;EACb,MAAM;EACN,UAAU;GACR,MAAM,SAAS;GACf,WAAW,uBACT,SAAS,MACT,kCACF;EACF;CACF;AACF;AAEA,SAAS,gCAAgC,SAAsB;CAC7D,IACE,QAAQ,SAAS,YACjB,QAAQ,SAAS,eACjB,QAAQ,SAAS,eACjB,QAAQ,SAAS,UACjB,QAAQ,SAAS,cACjB,QAAQ,SAAS,QAEjB,QAAQ,KAAK,yBAAyB,QAAQ,MAAM;CAGtD,OAAO,QAAQ;AACjB;AAEA,SAAgB,oBAAoB,SAAsC;CACxE,MAAM,OAAO,QAAQ,SAAS;CAC9B,QAAQ,MAAR;EACA,KAAK,UACH,OAAO;EACT,KAAK,MACH,OAAO;EACT,KAAK,SACH,OAAO;EACT,KAAK,YACH,OAAO;EACT,KAAK,QACH,OAAO;EACT,KAAK;GACH,IAAI,CAAC,YAAY,WAAW,OAAO,GACjC,MAAM,IAAI,MAAM,8BAA8B;GAChD,OAAO,gCAAgC,OAAO;EAEhD,SACE,MAAM,IAAI,MAAM,yBAAyB,MAAM;CACjD;AACF;AAEA,MAAM,sCAKD;CACH,cAAc;CAEd,sBAAsB,OAAsC;EAC1D,OAAO;GAAE,MAAM;GAAQ,MAAM,MAAM;EAAK;CAC1C;CAEA,uBAAuB,OAAuC;EAC5D,IAAI,MAAM,gBAAgB,OACxB,OAAO;GACL,MAAM;GACN,WAAW;IACT,KAAK,MAAM;IACX,GAAI,MAAM,UAAU,SAChB,EAAE,QAAQ,MAAM,SAAS,OAAkC,IAC3D,CAAC;GACP;EACF;EAGF,IAAI,MAAM,gBAAgB,UAExB,OAAO;GACL,MAAM;GACN,WAAW;IACT,KAAA,QAJgB,MAAM,aAAa,GAAG,UAAU,MAAM;IAKtD,GAAI,MAAM,UAAU,SAChB,EAAE,QAAQ,MAAM,SAAS,OAAkC,IAC3D,CAAC;GACP;EACF;EAGF,MAAM,IAAI,MACR,yCAAyC,MAAM,YAAY,kCAC7D;CACF;CAEA,uBAAuB,OAA4C;EACjE,IAAI,MAAM,gBAAgB,OAAO;GAC/B,MAAM,OAAO,mBAAmB,EAAE,SAAS,MAAM,IAAI,CAAC;GACtD,IAAI,CAAC,MACH,MAAM,IAAI,MACR,qCAAqC,MAAM,YAAY,gDACzD;GAGF,MAAM,cAAc,KAAK,aAAa,MAAM,aAAa;GACzD,IAAI;GAEJ,IAAI;IACF,WAAW,cAAc,WAAW;GACtC,QAAQ;IACN,MAAM,IAAI,MACR,iCAAiC,MAAM,YAAY,+CACrD;GACF;GAEA,IACE,SAAS,SAAS,WACjB,SAAS,YAAY,SAAS,SAAS,YAAY,OAEpD,MAAM,IAAI,MACR,iCAAiC,MAAM,YAAY,+CACrD;GAGF,OAAO;IACL,MAAM;IACN,aAAa;KACX,QAAQ,SAAS;KACjB,MAAM,KAAK;IACb;GACF;EACF;EAEA,IAAI,MAAM,gBAAgB,UAAU;GAClC,IAAI;GAEJ,IAAI;IACF,WAAW,cAAc,MAAM,aAAa,EAAE;GAChD,QAAQ;IACN,MAAM,IAAI,MACR,iCAAiC,MAAM,YAAY,+CACrD;GACF;GAEA,IACE,SAAS,SAAS,WACjB,SAAS,YAAY,SAAS,SAAS,YAAY,OAEpD,MAAM,IAAI,MACR,iCAAiC,MAAM,YAAY,+CACrD;GAGF,OAAO;IACL,MAAM;IACN,aAAa;KACX,QAAQ,SAAS;KACjB,MAAM,MAAM;IACd;GACF;EACF;EAEA,MAAM,IAAI,MACR,yCAAyC,MAAM,YAAY,kCAC7D;CACF;CAEA,sBAAsB,OAAuC;EAC3D,IAAI,MAAM,gBAAgB,OAAO;GAE/B,IAAI,CADS,mBAAmB,EAAE,SAAS,MAAM,IAAI,CAC7C,GACN,MAAM,IAAI,MACR,oCAAoC,MAAM,YAAY,gDACxD;GAGF,OAAO;IACL,MAAM;IACN,MAAM;KACJ,WAAW,MAAM;KACjB,GAAI,MAAM,UAAU,YAAY,MAAM,UAAU,OAC5C,EACA,UAAW,MAAM,SAAS,YACtB,MAAM,SAAS,KACrB,IACE,CAAC;IACP;GACF;EACF;EAEA,IAAI,MAAM,gBAAgB,UACxB,OAAO;GACL,MAAM;GACN,MAAM;IACJ,WAAW,QAAQ,MAAM,aAAa,GAAG,UAAU,MAAM;IACzD,GAAI,MAAM,UAAU,YACpB,MAAM,UAAU,QAChB,MAAM,UAAU,QACZ,EACA,UAAW,MAAM,SAAS,YACtB,MAAM,SAAS,QACf,MAAM,SAAS,MACrB,IACE,CAAC;GACP;EACF;EAGF,IAAI,MAAM,gBAAgB,MACxB,OAAO;GACL,MAAM;GACN,MAAM,EACJ,SAAS,MAAM,GACjB;EACF;EAGF,MAAM,IAAI,MACR,wCAAwC,MAAM,YAAY,kCAC5D;CACF;AACF;AAeA,SAAgB,+BACd,UACA,OACA,SACyB;CACzB,MAAM,oBAAoB,sBACxB,UACA,kCACF;CACA,IAAI,8BAA8B;CAElC,OAAO,kBAAkB,SAAS,YAAY;EAC5C,IAAI,OAAO,oBAAoB,OAAO;EACtC,IAAI,SAAS,YAAY,iBAAiB,KAAK,GAC7C,OAAO;EAGT,IAAI,4BAAqC;EAEzC,IAAI;EACJ,IACE,SAAS,UACT,OAAO,QAAQ,YAAY,YAC3B,CAAC,4BAA4B,OAAO,GACpC;GACA,UACE,SAAS,6BAA6B,OAClC,yCACA,QAAQ,SACR,0BACF,IACE,KAAA;GACN,YAAY,gCACV,QAAQ,SACR,0BACF,CAAC,CAAC;EACJ,OAAO,IAAI,OAAO,QAAQ,YAAY,UACpC,UAAU,QAAQ;OAElB,UAAU,QAAQ,QAAQ,KAAK,MAAM;GACnC,IAAI,UAAU,KAAK,EAAE,SAAS,YAAY;IACxC,4BAA4B;IAC5B,OAAO;GACT;GACA,IAAI,mBAAmB,CAAC,GACtB,OAAO,8BACL,GACA,mCACF;GAEF,OAAO;EACT,CAAC;EAGH,MAAM,kBAAuC;GAC3C;GACA;EACF;EACA,IAAI,sBAAsB;EAC1B,IAAI,sBAAsB;EAC1B,IAAI,QAAQ,QAAQ,MAClB,gBAAgB,OAAO,QAAQ;EAEjC,IAAI,QAAQ,kBAAkB,iBAAiB,MAAM;GACnD,gBAAgB,gBAAgB,QAAQ,kBAAkB;GAC1D,gBAAgB,UAAU;EAC5B;EACA,IAAI,YAAY,OAAO,KAAK,CAAC,CAAC,QAAQ,YAAY,QAAQ;GACxD,sBAAsB;GACtB,gBAAgB,aAAa,QAAQ,WAAW,IAC9C,uCACF;GACA,gBAAgB,UAAU,4BAA4B,UAAU;GAChE,IACE,SAAS,4BAA4B,QACrC,QAAQ,kBAAkB,qBAAqB,MAC/C;IAEA,MAAM,gBACJ,OAAO,SAAS,QAAQ,MAAM,QAC9B,OAAO,SAAS,WAAW,MAAM;IACnC,IACE,QAAQ,qCAAqC,QAC7C,eACA;KACA,MAAM,mBAAmB,QAAQ,kBAC9B;KACH,MAAM,gBAAgB,CAAC;KAGvB,KAAK,MAAM,UAAU,kBACnB,IAAI,OAAO,SAAS,oBAAoB,OAAO,QAAQ,MACrD,cAAc,KAAK;MACjB,MAAM;MACN,UAAU,OAAO;KACnB,CAAC;UACI,IACL,OAAO,SAAS,yBAChB,OAAO,QAAQ,MAEf,cAAc,KAAK;MACjB,MAAM;MACN,MAAM,OAAO;MACb,IAAI,OAAO;KACb,CAAC;KAKL,IAAI,cAAc,SAAS,GACzB,gBAAgB,UAAU;IAE9B,OAEE,gBAAgB,oBACd,QAAQ,kBAAkB;GAEhC;EACF,OAAO;GACL,IAAI,QAAQ,kBAAkB,cAAc,MAAM;IAChD,sBACE,CAAC,MAAM,QAAQ,QAAQ,kBAAkB,UAAU,KACnD,QAAQ,kBAAkB,WAAW,SAAS;IAChD,gBAAgB,aAAa,QAAQ,kBAAkB;IACvD,IACE,SAAS,4BAA4B,QACrC,QAAQ,kBAAkB,qBAAqB,MAC/C;KAEA,MAAM,gBACJ,OAAO,SAAS,QAAQ,MAAM,QAC9B,OAAO,SAAS,WAAW,MAAM;KACnC,IACE,QAAQ,qCAAqC,QAC7C,eACA;MACA,MAAM,mBAAmB,QAAQ,kBAC9B;MACH,MAAM,gBAAgB,CAAC;MAGvB,KAAK,MAAM,UAAU,kBACnB,IAAI,OAAO,SAAS,oBAAoB,OAAO,QAAQ,MACrD,cAAc,KAAK;OACjB,MAAM;OACN,UAAU,OAAO;MACnB,CAAC;WACI,IACL,OAAO,SAAS,yBAChB,OAAO,QAAQ,MAEf,cAAc,KAAK;OACjB,MAAM;OACN,MAAM,OAAO;OACb,IAAI,OAAO;MACb,CAAC;MAKL,IAAI,cAAc,SAAS,GACzB,gBAAgB,UAAU;KAE9B,OAEE,gBAAgB,oBACd,QAAQ,kBAAkB;IAEhC;GACF;GACA,IAAK,QAAwB,gBAAgB,MAAM;IACjD,sBAAsB;IACtB,gBAAgB,eAAgB,QAAwB;GAC1D;EACF;EAEA,IACE,SAAS,4BAA4B,QACrC,YAAY,OAAO,MAClB,+BAA+B,wBAChC,OAAO,QAAQ,kBAAkB,sBAAsB,YACvD,QAAQ,kBAAkB,sBAAsB,IAEhD,gBAAgB,oBACd,QAAQ,kBAAkB;EAG9B,IAAI,uBAAuB,qBACzB,8BAA8B;EAGhC,IACE,QAAQ,kBAAkB,SAC1B,OAAO,QAAQ,kBAAkB,UAAU,YAC3C,QAAQ,QAAQ,kBAAkB,OAQlC,OAAO,CAAC,iBAAiB;GALvB,MAAM;GACN,OAAO,EACL,IAAI,QAAQ,kBAAkB,MAAM,GACtC;EAEkC,CAAC;EAGvC,OAAO;CACT,CAAC;AACH;AAuTA,SAAgB,iBAAiB,OAAgB;CAC/C,OAAO,SAAS,QAAQ,UAAU,MAAM,uBAAuB,KAAK,KAAK;AAC3E"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../../../../src/llm/openai/utils/index.ts"],"mappings":"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"}
|
|
@@ -13,7 +13,6 @@ function getReasoningDetails(value) {
|
|
|
13
13
|
}
|
|
14
14
|
var ChatOpenRouter = class extends ChatOpenAI {
|
|
15
15
|
openRouterReasoning;
|
|
16
|
-
/** @deprecated Use `reasoning` object instead */
|
|
17
16
|
includeReasoning;
|
|
18
17
|
constructor(_fields) {
|
|
19
18
|
const fieldsWithoutPromptCache = { ..._fields };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/llm/openrouter/index.ts"],"sourcesContent":["import type {\n ChatOpenAICallOptions,\n OpenAIChatInput,\n OpenAIClient,\n} from '@langchain/openai';\nimport type { CallbackManagerForLLMRun } from '@langchain/core/callbacks/manager';\nimport type { ChatGenerationChunk } from '@langchain/core/outputs';\nimport type { BaseMessage } from '@langchain/core/messages';\nimport type { SeenScalarMetadata } from '@/llm/openai/streamMetadata';\nimport type { PromptCacheTtl } from '@/messages/cache';\nimport { dropRepeatedScalarMetadata } from '@/llm/openai/streamMetadata';\nimport { ChatOpenAI, emitStreamChunkCallback } from '@/llm/openai';\n\nexport type OpenRouterReasoningEffort =\n | 'xhigh'\n | 'high'\n | 'medium'\n | 'low'\n | 'minimal'\n | 'none';\n\nexport interface OpenRouterReasoning {\n effort?: OpenRouterReasoningEffort;\n max_tokens?: number;\n exclude?: boolean;\n enabled?: boolean;\n}\n\nexport interface ChatOpenRouterCallOptions\n extends Omit<ChatOpenAICallOptions, 'reasoning'> {\n /** @deprecated Use `reasoning` object instead */\n include_reasoning?: boolean;\n reasoning?: OpenRouterReasoning;\n modelKwargs?: OpenAIChatInput['modelKwargs'];\n useResponsesApi?: boolean;\n promptCache?: boolean;\n /**\n * Prompt-cache breakpoint TTL. Defaults to `'1h'` (extended cache) when\n * `promptCache` is enabled; set `'5m'` for the legacy 5-minute behavior.\n * OpenRouter forwards this to Claude upstreams (Anthropic / Bedrock / Vertex),\n * which downgrade to 5m where the extended TTL isn't supported.\n */\n promptCacheTtl?: PromptCacheTtl;\n}\n\nexport type ChatOpenRouterInput = Partial<\n ChatOpenRouterCallOptions & OpenAIChatInput\n> & {\n /** Minimum delay in ms between visible streamed deltas (default 25; 0 disables). */\n _lc_stream_delay?: number;\n};\n\n/** invocationParams return type extended with OpenRouter reasoning */\nexport type OpenRouterInvocationParams = Omit<\n OpenAIClient.Chat.ChatCompletionCreateParams,\n 'messages'\n> & {\n reasoning?: OpenRouterReasoning;\n cache_control?: { type: 'ephemeral'; ttl?: '1h' };\n};\n\ntype InvocationParamsExtra = {\n streaming?: boolean;\n};\n\ninterface OpenRouterReasoningTextDetail {\n type: 'reasoning.text';\n text?: string;\n format?: string;\n index?: number;\n}\n\ninterface OpenRouterReasoningEncryptedDetail {\n type: 'reasoning.encrypted';\n id?: string;\n data?: string;\n format?: string;\n index?: number;\n}\n\ntype OpenRouterReasoningDetail =\n | OpenRouterReasoningTextDetail\n | OpenRouterReasoningEncryptedDetail;\n\nfunction isReasoningTextDetail(\n value: unknown\n): value is OpenRouterReasoningTextDetail {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'type' in value &&\n value.type === 'reasoning.text'\n );\n}\n\nfunction isReasoningEncryptedDetail(\n value: unknown\n): value is OpenRouterReasoningEncryptedDetail {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'type' in value &&\n value.type === 'reasoning.encrypted'\n );\n}\n\nfunction getReasoningDetails(value: unknown): OpenRouterReasoningDetail[] {\n if (!Array.isArray(value)) {\n return [];\n }\n return value.filter(\n (detail): detail is OpenRouterReasoningDetail =>\n isReasoningTextDetail(detail) || isReasoningEncryptedDetail(detail)\n );\n}\n\nexport class ChatOpenRouter extends ChatOpenAI {\n private openRouterReasoning?: OpenRouterReasoning;\n /** @deprecated Use `reasoning` object instead */\n private includeReasoning?: boolean;\n\n constructor(_fields: ChatOpenRouterInput) {\n const fieldsWithoutPromptCache: ChatOpenRouterInput = { ..._fields };\n delete fieldsWithoutPromptCache.promptCache;\n delete fieldsWithoutPromptCache.promptCacheTtl;\n\n const {\n include_reasoning,\n reasoning: openRouterReasoning,\n modelKwargs = {},\n ...fields\n } = fieldsWithoutPromptCache;\n\n // Extract reasoning from modelKwargs if provided there (e.g., from LLMConfig)\n const { reasoning: mkReasoning, ...restModelKwargs } = modelKwargs as {\n reasoning?: OpenRouterReasoning;\n } & Record<string, unknown>;\n const mergedReasoning =\n mkReasoning != null || openRouterReasoning != null\n ? {\n ...mkReasoning,\n ...openRouterReasoning,\n }\n : undefined;\n const runtimeReasoning =\n mergedReasoning ??\n (include_reasoning === true ? { enabled: true } : undefined);\n const parentModelKwargs =\n runtimeReasoning == null\n ? restModelKwargs\n : { ...restModelKwargs, reasoning: runtimeReasoning };\n\n super({\n ...fields,\n modelKwargs: parentModelKwargs,\n includeReasoningDetails: true,\n convertReasoningDetailsToContent: true,\n preserveToolCacheControl: true,\n responsesPromptCache: _fields.promptCache,\n responsesPromptCacheTtl: _fields.promptCacheTtl,\n });\n\n // Merge reasoning config: modelKwargs.reasoning < constructor reasoning\n if (mergedReasoning != null) {\n this.openRouterReasoning = mergedReasoning;\n }\n\n this.includeReasoning = include_reasoning;\n }\n static lc_name(): 'LibreChatOpenRouter' {\n return 'LibreChatOpenRouter';\n }\n\n // OpenRouter widens OpenAI reasoning with extra effort levels ('xhigh' | 'none' | 'minimal').\n override invocationParams(\n options?: this['ParsedCallOptions'],\n extra?: InvocationParamsExtra\n ): OpenRouterInvocationParams {\n type MutableParams = Omit<\n OpenAIClient.Chat.ChatCompletionCreateParams,\n 'messages'\n > & {\n reasoning_effort?: string;\n reasoning?: OpenRouterReasoning;\n cache_control?: { type: 'ephemeral'; ttl?: '1h' };\n };\n\n const optionsWithDefaults = this._combineCallOptions(options);\n const useResponsesApi = this._useResponsesApi(options);\n const params = (\n useResponsesApi\n ? this.responses.invocationParams(optionsWithDefaults)\n : this.completions.invocationParams(optionsWithDefaults, extra)\n ) as MutableParams;\n\n // Remove the OpenAI-native reasoning_effort that the parent sets;\n // OpenRouter uses a `reasoning` object instead\n delete params.reasoning_effort;\n\n // Build the OpenRouter reasoning config\n const reasoning = this.buildOpenRouterReasoning(optionsWithDefaults);\n if (reasoning != null) {\n params.reasoning = reasoning;\n } else {\n delete params.reasoning;\n }\n\n return params;\n }\n\n private buildOpenRouterReasoning(\n options?: this['ParsedCallOptions']\n ): OpenRouterReasoning | undefined {\n let reasoning: OpenRouterReasoning | undefined;\n\n // 1. Instance-level reasoning config (from constructor)\n if (this.openRouterReasoning != null) {\n reasoning = { ...this.openRouterReasoning };\n }\n\n // 2. LangChain-style reasoning params (from parent's `this.reasoning`)\n const lcReasoning = this.getReasoningParams(options);\n if (lcReasoning?.effort != null) {\n reasoning = {\n ...reasoning,\n effort: lcReasoning.effort as OpenRouterReasoningEffort,\n };\n }\n\n // 3. Call-level reasoning override\n const callReasoning = (options as ChatOpenRouterCallOptions | undefined)\n ?.reasoning;\n if (callReasoning != null) {\n reasoning = { ...reasoning, ...callReasoning };\n }\n\n // 4. Legacy include_reasoning backward compatibility\n if (reasoning == null && this.includeReasoning === true) {\n reasoning = { enabled: true };\n }\n\n return reasoning;\n }\n\n override async *_streamResponseChunks(\n messages: BaseMessage[],\n options: this['ParsedCallOptions'],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatGenerationChunk> {\n const reasoningTextByIndex = new Map<\n number,\n OpenRouterReasoningTextDetail\n >();\n const reasoningEncryptedById = new Map<\n string,\n OpenRouterReasoningEncryptedDetail\n >();\n // Consume the raw (un-deduped) stream so `finish_reason` survives as the\n // reasoning-flush signal below; de-duplicate after that, before emitting.\n const seenScalarMetadata: SeenScalarMetadata = new Map();\n\n for await (const generationChunk of super._streamRawResponseChunks(\n messages,\n options,\n undefined\n )) {\n let currentReasoningText = '';\n const reasoningDetails = getReasoningDetails(\n generationChunk.message.additional_kwargs.reasoning_details\n );\n\n for (const detail of reasoningDetails) {\n if (detail.type === 'reasoning.text') {\n currentReasoningText += detail.text ?? '';\n const index = detail.index ?? 0;\n const existing = reasoningTextByIndex.get(index);\n if (existing != null) {\n existing.text = `${existing.text ?? ''}${detail.text ?? ''}`;\n continue;\n }\n reasoningTextByIndex.set(index, {\n ...detail,\n text: detail.text ?? '',\n });\n continue;\n }\n if (detail.id != null) {\n reasoningEncryptedById.set(detail.id, { ...detail });\n }\n }\n\n if (\n currentReasoningText.length > 0 &&\n generationChunk.message.additional_kwargs.reasoning == null\n ) {\n generationChunk.message.additional_kwargs.reasoning =\n currentReasoningText;\n }\n\n if (generationChunk.generationInfo?.finish_reason != null) {\n const finalReasoningDetails = [\n ...reasoningTextByIndex.values(),\n ...reasoningEncryptedById.values(),\n ];\n if (finalReasoningDetails.length > 0) {\n generationChunk.message.additional_kwargs.reasoning_details =\n finalReasoningDetails;\n } else {\n delete generationChunk.message.additional_kwargs.reasoning_details;\n }\n } else {\n delete generationChunk.message.additional_kwargs.reasoning_details;\n }\n\n dropRepeatedScalarMetadata(generationChunk, seenScalarMetadata);\n await emitStreamChunkCallback(generationChunk, runManager);\n yield generationChunk;\n }\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/llm/openrouter/index.ts"],"mappings":"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"}
|
|
@@ -23,12 +23,6 @@ function markCacheControl(tool, ttl) {
|
|
|
23
23
|
cache_control: buildAnthropicCacheControl(ttl)
|
|
24
24
|
};
|
|
25
25
|
}
|
|
26
|
-
/**
|
|
27
|
-
* Drop any existing `cache_control` from a tool. Reused/caller-supplied tools
|
|
28
|
-
* can carry a stale marker (e.g. from a prior `promptCacheTtl: '5m'` run); since
|
|
29
|
-
* all tools serialize before system/messages, a leftover 5-minute marker ahead
|
|
30
|
-
* of the resolved breakpoint would violate the longer-TTL-first ordering.
|
|
31
|
-
*/
|
|
32
26
|
function stripCacheControl(tool) {
|
|
33
27
|
if (tool.cache_control == null) return tool;
|
|
34
28
|
const { cache_control: _omit, ...rest } = tool;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolCache.mjs","names":[],"sources":["../../../../src/llm/openrouter/toolCache.ts"],"
|
|
1
|
+
{"version":3,"file":"toolCache.mjs","names":[],"sources":["../../../../src/llm/openrouter/toolCache.ts"],"mappings":";;;AAwBA,SAAS,YAAY,MAAmC;CACtD,MAAM,YAAY;CAClB,IAAI,OAAO,UAAU,SAAS,UAC5B,OAAO,UAAU;CAEnB,IAAI,OAAO,UAAU,UAAU,SAAS,UACtC,OAAO,UAAU,SAAS;AAG9B;AAEA,SAAS,kBAAkB,MAAwB;CACjD,OAAQ,KAA2B,kBAAkB;AACvD;AAEA,SAAS,iBAAiB,MAA+C;CACvE,MAAM,YAAY,qBAChB,IACF;CAEA,IAAI,kBAAkB,IAAI,GACxB,OAAO;EAAE,GAAG;EAAW,eAAe;CAAK;CAG7C,OAAO;AACT;AAEA,SAAS,iBACP,MACA,KACgC;CAChC,OAAO;EACL,GAAG;EACH,eAAe,2BAA2B,GAAG;CAC/C;AACF;AAQA,SAAS,kBACP,MACgC;CAChC,IAAI,KAAK,iBAAiB,MACxB,OAAO;CAET,MAAM,EAAE,eAAe,OAAO,GAAG,SAAS;CAC1C,OAAO;AACT;AAEA,SAAgB,oCACd,OACA,YACA,KACwB;CACxB,IAAI,SAAS,QAAQ,MAAM,WAAW,GACpC,OAAO;CAGT,MAAM,cAAgD,CAAC;CACvD,MAAM,gBAAkD,CAAC;CAEzD,KAAK,MAAM,QAAQ,OAA6B;EAC9C,MAAM,YAAY,iBAAiB,IAAI;EACvC,MAAM,OAAO,YAAY,SAAS,KAAK,YAAY,IAAI;EAEvD,IAAI,QAAQ,QAAQ,WAAW,IAAI,GAAG;GACpC,cAAc,KAAK,SAAS;GAC5B;EACF;EAEA,YAAY,KAAK,SAAS;CAC5B;CAIA,KAAK,IAAI,IAAI,GAAG,IAAI,cAAc,QAAQ,KACxC,cAAc,KAAK,kBAAkB,cAAc,EAAE;CAGvD,IAAI,YAAY,WAAW,GACzB,OAAO,CAAC,GAAG,aAAa;CAK1B,KAAK,IAAI,IAAI,GAAG,IAAI,YAAY,SAAS,GAAG,KAC1C,YAAY,KAAK,kBAAkB,YAAY,EAAE;CAEnD,YAAY,YAAY,SAAS,KAAK,iBACpC,YAAY,YAAY,SAAS,IACjC,GACF;CAEA,OAAO,CAAC,GAAG,aAAa,GAAG,aAAa;AAC1C"}
|
package/dist/esm/llm/preempt.mjs
CHANGED
|
@@ -2,29 +2,11 @@ import "../common/constants.mjs";
|
|
|
2
2
|
import "../common/enum.mjs";
|
|
3
3
|
import "../common/index.mjs";
|
|
4
4
|
//#region src/llm/preempt.ts
|
|
5
|
-
/**
|
|
6
|
-
* Normalizes a host-supplied seal budget.
|
|
7
|
-
*
|
|
8
|
-
* Read in two places that interpret it differently — a numeric comparison in
|
|
9
|
-
* the seal gate and an addition into the recursion limit — so a value like
|
|
10
|
-
* `1.5` would permit two seals while reserving fractional headroom, `NaN`
|
|
11
|
-
* would poison the recursion limit outright, and `Infinity` would remove both
|
|
12
|
-
* bounds at once. Normalizing once keeps the two readings in agreement.
|
|
13
|
-
*
|
|
14
|
-
* `0` is honored as a deliberate "never seal"; anything not finite falls back
|
|
15
|
-
* to the default rather than silently disabling the feature.
|
|
16
|
-
*/
|
|
17
5
|
function resolveMaxSeals(maxSeals) {
|
|
18
6
|
if (maxSeals == null || !Number.isFinite(maxSeals)) return 8;
|
|
19
7
|
const whole = Math.floor(maxSeals);
|
|
20
8
|
return whole > 0 ? whole : 0;
|
|
21
9
|
}
|
|
22
|
-
/**
|
|
23
|
-
* True when the accumulated content carries at least one non-whitespace text
|
|
24
|
-
* block. `thinking` / `reasoning` blocks deliberately do not count: they are
|
|
25
|
-
* stripped or signed on several providers and cannot stand in for the visible
|
|
26
|
-
* assistant turn a sealed sequence needs.
|
|
27
|
-
*/
|
|
28
10
|
function hasNonEmptyTextContent(content) {
|
|
29
11
|
if (typeof content === "string") return content.trim() !== "";
|
|
30
12
|
for (const block of content) {
|
|
@@ -34,19 +16,6 @@ function hasNonEmptyTextContent(content) {
|
|
|
34
16
|
}
|
|
35
17
|
return false;
|
|
36
18
|
}
|
|
37
|
-
/**
|
|
38
|
-
* True while a Gemini server-side tool call is still awaiting its response.
|
|
39
|
-
*
|
|
40
|
-
* Google's server-side tools (Search, URL context) never populate
|
|
41
|
-
* `tool_calls` or `tool_call_chunks` — those are derived from `functionCall`
|
|
42
|
-
* parts only, while a server-side invocation arrives as a `toolCall` CONTENT
|
|
43
|
-
* block and its result as a later `toolResponse` block. The tool-call gates
|
|
44
|
-
* cannot see it, so sealing between the two would replay a model turn holding
|
|
45
|
-
* an unanswered server-side call.
|
|
46
|
-
*
|
|
47
|
-
* Counted rather than id-matched: Google answers calls in order, and counting
|
|
48
|
-
* stays correct when a part omits its id.
|
|
49
|
-
*/
|
|
50
19
|
function hasOpenGoogleServerToolCall(content) {
|
|
51
20
|
if (typeof content === "string") return false;
|
|
52
21
|
let calls = 0;
|
|
@@ -55,11 +24,6 @@ function hasOpenGoogleServerToolCall(content) {
|
|
|
55
24
|
else if (block.type === "toolResponse") responses += 1;
|
|
56
25
|
return calls > responses;
|
|
57
26
|
}
|
|
58
|
-
/**
|
|
59
|
-
* Ids of Anthropic server-side tool calls whose paired result block is already
|
|
60
|
-
* on the accumulated content. Those calls are answered and cannot be orphaned
|
|
61
|
-
* by a seal.
|
|
62
|
-
*/
|
|
63
27
|
function settledServerToolCallIds(content) {
|
|
64
28
|
const settled = /* @__PURE__ */ new Set();
|
|
65
29
|
if (typeof content === "string") return settled;
|
|
@@ -70,7 +34,6 @@ function settledServerToolCallIds(content) {
|
|
|
70
34
|
}
|
|
71
35
|
return settled;
|
|
72
36
|
}
|
|
73
|
-
/** Tool calls still awaiting an answer, ignoring ones already settled. */
|
|
74
37
|
function countOpenToolCalls(calls, settled) {
|
|
75
38
|
if (calls == null || calls.length === 0) return 0;
|
|
76
39
|
if (settled.size === 0) return calls.length;
|
|
@@ -78,46 +41,8 @@ function countOpenToolCalls(calls, settled) {
|
|
|
78
41
|
for (const call of calls) if (call.id == null || !settled.has(call.id)) open += 1;
|
|
79
42
|
return open;
|
|
80
43
|
}
|
|
81
|
-
/**
|
|
82
|
-
* Cooperative mid-generation seal gate. Returns true ONLY when sealing here
|
|
83
|
-
* yields a message sequence valid on EVERY supported provider:
|
|
84
|
-
* - non-whitespace TEXT content, so the FIRST injected user turn is preceded
|
|
85
|
-
* by a non-empty assistant turn — no empty-content 400s. Note this says
|
|
86
|
-
* nothing about adjacency AMONG several injected turns: a boundary that
|
|
87
|
-
* drains two steers emits two consecutive user messages, which strict
|
|
88
|
-
* providers reject. That is normalized at the provider-facing hop by
|
|
89
|
-
* `coalesceAdjacentUserTurns`, not here;
|
|
90
|
-
* - no tool call in flight, so no `tool_use` can be orphaned AND no eagerly
|
|
91
|
-
* prestarted execution can be stripped out from under the model.
|
|
92
|
-
*
|
|
93
|
-
* Anthropic's server-side tools need no check of their own. Every
|
|
94
|
-
* `server_tool_use` content block also emits a `tool_call_chunk`
|
|
95
|
-
* (`_makeMessageChunkFromAnthropicEvent`), and `concat` keeps that chunk on
|
|
96
|
-
* the accumulated message for the remainder of the turn, so the tool-call
|
|
97
|
-
* gates below already cover it. The practical consequence is worth stating
|
|
98
|
-
* plainly: once a turn starts a web search it is no longer preemptible, and
|
|
99
|
-
* a queued message waits for the ordinary tool boundary instead.
|
|
100
|
-
*
|
|
101
|
-
* Nothing is stripped and nothing is repaired: when the accumulated shape is
|
|
102
|
-
* not already safe the stream simply runs on, and whatever the host queued
|
|
103
|
-
* lands at the next tool boundary instead. Chunks accumulate monotonically
|
|
104
|
-
* through `concat`, so an unsafe shape can never be observed at a seal point.
|
|
105
|
-
*/
|
|
106
44
|
function canSealPreempt(chunk) {
|
|
107
45
|
if (chunk == null) return false;
|
|
108
|
-
/**
|
|
109
|
-
* Anthropic's server-side tools run inside the provider, so unlike a client
|
|
110
|
-
* tool they never reach `ToolNode` and never produce a `PostToolBatch`
|
|
111
|
-
* boundary. `concat` also keeps their `server_tool_use` chunk on the
|
|
112
|
-
* accumulated message for the rest of the turn. Together that means a naive
|
|
113
|
-
* tool-call gate makes a turn permanently unsealable the moment a web
|
|
114
|
-
* search starts, with no later boundary to drain into — the queued message
|
|
115
|
-
* waits for the whole turn to finish rather than for the next tool step.
|
|
116
|
-
*
|
|
117
|
-
* So calls whose paired result block has already landed are treated as
|
|
118
|
-
* settled: they cannot be orphaned, because the provider has already
|
|
119
|
-
* answered them.
|
|
120
|
-
*/
|
|
121
46
|
const settled = settledServerToolCallIds(chunk.content);
|
|
122
47
|
if (countOpenToolCalls(chunk.tool_calls, settled) > 0) return false;
|
|
123
48
|
if (countOpenToolCalls(chunk.tool_call_chunks, settled) > 0) return false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preempt.mjs","names":[],"sources":["../../../src/llm/preempt.ts"],"
|
|
1
|
+
{"version":3,"file":"preempt.mjs","names":[],"sources":["../../../src/llm/preempt.ts"],"mappings":";;;;AAgBA,SAAgB,gBAAgB,UAAsC;CACpE,IAAI,YAAY,QAAQ,CAAC,OAAO,SAAS,QAAQ,GAC/C,OAAA;CAEF,MAAM,QAAQ,KAAK,MAAM,QAAQ;CACjC,OAAO,QAAQ,IAAI,QAAQ;AAC7B;AAQA,SAAS,uBAAuB,SAA6C;CAC3E,IAAI,OAAO,YAAY,UACrB,OAAO,QAAQ,KAAK,MAAM;CAE5B,KAAK,MAAM,SAAS,SAAS;EAC3B,IAAI,MAAM,SAAA,QACR;EAEF,MAAM,OAAO,MAAA;EACb,IAAI,OAAO,SAAS,YAAY,KAAK,KAAK,MAAM,IAC9C,OAAO;CAEX;CACA,OAAO;AACT;AAeA,SAAS,4BACP,SACS;CACT,IAAI,OAAO,YAAY,UACrB,OAAO;CAET,IAAI,QAAQ;CACZ,IAAI,YAAY;CAChB,KAAK,MAAM,SAAS,SAClB,IAAI,MAAM,SAAS,YACjB,SAAS;MACJ,IAAI,MAAM,SAAS,gBACxB,aAAa;CAGjB,OAAO,QAAQ;AACjB;AAOA,SAAS,yBACP,SACa;CACb,MAAM,0BAAU,IAAI,IAAY;CAChC,IAAI,OAAO,YAAY,UACrB,OAAO;CAET,KAAK,MAAM,SAAS,SAAS;EAC3B,IAAI,MAAM,SAAS,0BACjB;EAEF,MAAM,KAAK,MAAM;EACjB,IAAI,OAAO,OAAO,UAChB,QAAQ,IAAI,EAAE;CAElB;CACA,OAAO;AACT;AAGA,SAAS,mBACP,OACA,SACQ;CACR,IAAI,SAAS,QAAQ,MAAM,WAAW,GACpC,OAAO;CAET,IAAI,QAAQ,SAAS,GACnB,OAAO,MAAM;CAEf,IAAI,OAAO;CACX,KAAK,MAAM,QAAQ,OACjB,IAAI,KAAK,MAAM,QAAQ,CAAC,QAAQ,IAAI,KAAK,EAAE,GACzC,QAAQ;CAGZ,OAAO;AACT;AA2BA,SAAgB,eAAe,OAA4C;CACzE,IAAI,SAAS,MACX,OAAO;CAeT,MAAM,UAAU,yBAAyB,MAAM,OAAO;CACtD,IAAI,mBAAmB,MAAM,YAAY,OAAO,IAAI,GAClD,OAAO;CAET,IAAI,mBAAmB,MAAM,kBAAkB,OAAO,IAAI,GACxD,OAAO;CAET,KAAK,MAAM,oBAAoB,UAAU,KAAK,GAC5C,OAAO;CAET,IAAI,4BAA4B,MAAM,OAAO,GAC3C,OAAO;CAET,OAAO,uBAAuB,MAAM,OAAO;AAC7C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"providers.mjs","names":[],"sources":["../../../src/llm/providers.ts"],"
|
|
1
|
+
{"version":3,"file":"providers.mjs","names":[],"sources":["../../../src/llm/providers.ts"],"mappings":";;;;;;;;;;AAqBA,MAAa,eAAiD;UAC3C;aACG;kBACD;eACG;eACA;gBACC;cACF;gBACE;iBACC;cACH;aAED;eACE;AACxB;AAEA,MAAa,4BAA4B,IAAI,IAAwB,CAAA,aAAA,SAGrE,CAAC;AAED,MAAa,qBACX,aAC2D;CAC3D,MAAM,iBAAiB,aAAa;CACpC,IAAI,CAAC,gBACH,MAAM,IAAI,MAAM,6BAA6B,UAAU;CAGzD,OAAO;AACT"}
|
package/dist/esm/llm/request.mjs
CHANGED
|
@@ -1,11 +1,6 @@
|
|
|
1
1
|
import "../common/enum.mjs";
|
|
2
2
|
import "../common/index.mjs";
|
|
3
3
|
//#region src/llm/request.ts
|
|
4
|
-
/**
|
|
5
|
-
* Returns true when the provider + clientOptions indicate extended thinking
|
|
6
|
-
* is enabled. Works across Anthropic (direct), Bedrock (additionalModelRequestFields),
|
|
7
|
-
* and OpenAI-compat (modelKwargs.thinking).
|
|
8
|
-
*/
|
|
9
4
|
function isThinkingEnabled(provider, clientOptions) {
|
|
10
5
|
if (!clientOptions) return false;
|
|
11
6
|
if (provider === "anthropic" && clientOptions.thinking != null) return true;
|
|
@@ -13,11 +8,6 @@ function isThinkingEnabled(provider, clientOptions) {
|
|
|
13
8
|
if (provider === "openAI" && (clientOptions.modelKwargs?.thinking)?.type === "enabled") return true;
|
|
14
9
|
return false;
|
|
15
10
|
}
|
|
16
|
-
/**
|
|
17
|
-
* Returns the correct key for setting max output tokens on the model
|
|
18
|
-
* constructor options. Google/Vertex use `maxOutputTokens`, all others
|
|
19
|
-
* use `maxTokens`.
|
|
20
|
-
*/
|
|
21
11
|
function getMaxOutputTokensKey(provider) {
|
|
22
12
|
return provider === "google" || provider === "vertexai" ? "maxOutputTokens" : "maxTokens";
|
|
23
13
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request.mjs","names":[],"sources":["../../../src/llm/request.ts"],"
|
|
1
|
+
{"version":3,"file":"request.mjs","names":[],"sources":["../../../src/llm/request.ts"],"mappings":";;;AAQA,SAAgB,kBACd,UACA,eACS;CACT,IAAI,CAAC,eAAe,OAAO;CAE3B,IACE,aAAA,eACC,cAA2C,YAAY,MAExD,OAAO;CAGT,IACE,aAAA,aACC,cAA0C,+BACzC,eACG,MAEL,OAAO;CAGT,IACE,aAAA,aAEG,cAAwC,aACrC,SAAA,EACH,SAAS,WAEZ,OAAO;CAGT,OAAO;AACT;AAOA,SAAgB,sBACd,UACiC;CACjC,OAAO,aAAA,YAAiC,aAAA,aACpC,oBACA;AACN"}
|
|
@@ -2,14 +2,6 @@ import { smoothStream } from "./smoother.mjs";
|
|
|
2
2
|
import { AIMessageChunk } from "@langchain/core/messages";
|
|
3
3
|
import { ChatGenerationChunk } from "@langchain/core/outputs";
|
|
4
4
|
//#region src/llm/stream/chunkAdapters.ts
|
|
5
|
-
/**
|
|
6
|
-
* Rebuilds a generation chunk carrying one piece of a split plain-text chunk.
|
|
7
|
-
* Unsplit pieces return the original chunk untouched, so disabled smoothing is
|
|
8
|
-
* byte-identical to no smoothing. Usage metadata, additional kwargs and
|
|
9
|
-
* response metadata survive only on the first piece: the aggregator merges
|
|
10
|
-
* dicts by concatenating string fields, so replicating them across pieces
|
|
11
|
-
* would duplicate reasoning text and scalar metadata once per piece.
|
|
12
|
-
*/
|
|
13
5
|
function cloneGenerationChunkPiece(chunk, piece) {
|
|
14
6
|
if (piece.isFirst && piece.isLast) return chunk;
|
|
15
7
|
const message = chunk.message;
|
|
@@ -29,15 +21,6 @@ const SPLITTABLE_TEXT_PART_KEYS = new Set([
|
|
|
29
21
|
"text",
|
|
30
22
|
"index"
|
|
31
23
|
]);
|
|
32
|
-
/**
|
|
33
|
-
* Returns the sole plain text part of a single-element complex content array
|
|
34
|
-
* (the shape google-common emits for text deltas), or null when the part
|
|
35
|
-
* carries anything beyond `type`/`text`/`index` (thought signatures, media,
|
|
36
|
-
* function calls) and must not be sliced. The part must carry a numeric
|
|
37
|
-
* `index`: it is the aggregator's list-merge key, and without it each split
|
|
38
|
-
* piece would append as a separate content part instead of merging back
|
|
39
|
-
* into one — index-less parts pace whole instead.
|
|
40
|
-
*/
|
|
41
24
|
function getSplittableTextPart(message, chunkText) {
|
|
42
25
|
const content = message.content;
|
|
43
26
|
if (!Array.isArray(content) || content.length !== 1) return null;
|
|
@@ -64,25 +47,6 @@ function clonePartGenerationChunkPiece(chunk, part, piece) {
|
|
|
64
47
|
}))
|
|
65
48
|
});
|
|
66
49
|
}
|
|
67
|
-
/**
|
|
68
|
-
* Provider-agnostic classification of a `ChatGenerationChunk` for the
|
|
69
|
-
* smoothing engine:
|
|
70
|
-
* - splittable: plain visible text — string content equal to `chunk.text`, or
|
|
71
|
-
* a single plain text part (google-common's delta shape) — with no
|
|
72
|
-
* logprobs / finish_reason; sliced adaptively at the pacing cadence.
|
|
73
|
-
* - atomic: any other text-bearing chunk (complex content arrays, logprobs,
|
|
74
|
-
* finish_reason, provider-specific reasoning payloads surfaced via
|
|
75
|
-
* `getAtomicText`) — paced as one piece, never split.
|
|
76
|
-
* - passthrough: tool-call deltas, usage-only and metadata chunks — strict
|
|
77
|
-
* FIFO, zero delay.
|
|
78
|
-
*/
|
|
79
|
-
/**
|
|
80
|
-
* google-common stamps `logprobs: { content: [] }` on every chunk, so only
|
|
81
|
-
* logprobs that actually carry data may block splitting here. This is looser
|
|
82
|
-
* than the OpenAI-family adapter in `llm/openai/index.ts`, which treats ANY
|
|
83
|
-
* logprobs as atomic (its providers only attach logprobs when requested, and
|
|
84
|
-
* the DeepSeek suite pins that contract) — do not unify the two predicates.
|
|
85
|
-
*/
|
|
86
50
|
function hasMeaningfulLogprobs(generationInfo) {
|
|
87
51
|
const logprobs = generationInfo?.logprobs;
|
|
88
52
|
if (logprobs == null) return false;
|
|
@@ -90,23 +54,9 @@ function hasMeaningfulLogprobs(generationInfo) {
|
|
|
90
54
|
if (Array.isArray(content)) return content.length > 0;
|
|
91
55
|
return true;
|
|
92
56
|
}
|
|
93
|
-
/** google-common reports the terminal reason camelCase (`finishReason`). */
|
|
94
57
|
function hasFinishReason(generationInfo) {
|
|
95
58
|
return generationInfo?.finish_reason != null || generationInfo?.finishReason != null;
|
|
96
59
|
}
|
|
97
|
-
/**
|
|
98
|
-
* Chunks that pair visible text with reasoning payloads in
|
|
99
|
-
* `additional_kwargs` (Gemini thought summaries, reasoning_content deltas,
|
|
100
|
-
* OpenRouter reasoning_details) must pace whole: split pieces would each
|
|
101
|
-
* carry the same kwargs and downstream merging — the aggregator's dict merge
|
|
102
|
-
* or OpenRouter's reasoning_details accumulation — duplicates them once per
|
|
103
|
-
* piece.
|
|
104
|
-
*/
|
|
105
|
-
/**
|
|
106
|
-
* Mixed text/tool-call deltas must never split: cloned pieces would each
|
|
107
|
-
* carry the same tool_call_chunks and downstream accumulation would corrupt
|
|
108
|
-
* the assembled tool arguments.
|
|
109
|
-
*/
|
|
110
60
|
function hasToolCallChunks(message) {
|
|
111
61
|
return (message.tool_call_chunks?.length ?? 0) > 0;
|
|
112
62
|
}
|
|
@@ -116,12 +66,6 @@ function hasReasoningKwargs(message) {
|
|
|
116
66
|
if (Array.isArray(kwargs.reasoning_details) && kwargs.reasoning_details.length > 0) return true;
|
|
117
67
|
return kwargs.reasoning != null;
|
|
118
68
|
}
|
|
119
|
-
/**
|
|
120
|
-
* Extracts the visible reasoning text a kwargs-borne delta contributes, so
|
|
121
|
-
* reasoning-only chunks (Gemini thoughts, DeepSeek reasoning_content,
|
|
122
|
-
* OpenAI reasoning summaries, OpenRouter reasoning_details) pace atomically
|
|
123
|
-
* at the cadence instead of passing through unsmoothed.
|
|
124
|
-
*/
|
|
125
69
|
function getReasoningKwargsText(message) {
|
|
126
70
|
const kwargs = message.additional_kwargs;
|
|
127
71
|
if (typeof kwargs.reasoning_content === "string" && kwargs.reasoning_content !== "") return kwargs.reasoning_content;
|
|
@@ -170,12 +114,6 @@ function toGenerationSmoothItem(chunk, getAtomicText) {
|
|
|
170
114
|
emit: () => chunk
|
|
171
115
|
};
|
|
172
116
|
}
|
|
173
|
-
/**
|
|
174
|
-
* Wraps a provider's raw chunk stream with adaptive smoothing and per-piece
|
|
175
|
-
* `handleLLMNewToken` dispatch. The raw stream must NOT dispatch runManager
|
|
176
|
-
* callbacks itself — callback-echo consumers would otherwise observe the
|
|
177
|
-
* unsmoothed deltas.
|
|
178
|
-
*/
|
|
179
117
|
async function* smoothGenerationChunks({ chunks, delayMs, signal, runManager }) {
|
|
180
118
|
const source = (async function* () {
|
|
181
119
|
for await (const chunk of chunks) yield toGenerationSmoothItem(chunk, getReasoningKwargsText);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chunkAdapters.mjs","names":[],"sources":["../../../../src/llm/stream/chunkAdapters.ts"],"sourcesContent":["import { AIMessageChunk } from '@langchain/core/messages';\nimport { ChatGenerationChunk } from '@langchain/core/outputs';\nimport type { CallbackManagerForLLMRun } from '@langchain/core/callbacks/manager';\nimport type { SmoothItem, SmoothPiece } from '@/llm/stream/smoother';\nimport { smoothStream } from '@/llm/stream/smoother';\n\n/**\n * Rebuilds a generation chunk carrying one piece of a split plain-text chunk.\n * Unsplit pieces return the original chunk untouched, so disabled smoothing is\n * byte-identical to no smoothing. Usage metadata, additional kwargs and\n * response metadata survive only on the first piece: the aggregator merges\n * dicts by concatenating string fields, so replicating them across pieces\n * would duplicate reasoning text and scalar metadata once per piece.\n */\nexport function cloneGenerationChunkPiece(\n chunk: ChatGenerationChunk,\n piece: SmoothPiece\n): ChatGenerationChunk {\n if (piece.isFirst && piece.isLast) {\n return chunk;\n }\n const message = chunk.message as AIMessageChunk;\n return new ChatGenerationChunk({\n text: piece.text,\n generationInfo: piece.isFirst ? chunk.generationInfo : undefined,\n message: new AIMessageChunk(\n Object.assign({}, message, {\n content: piece.text,\n usage_metadata: piece.isFirst ? message.usage_metadata : undefined,\n additional_kwargs: piece.isFirst ? message.additional_kwargs : {},\n response_metadata: piece.isFirst ? message.response_metadata : {},\n })\n ),\n });\n}\n\nconst SPLITTABLE_TEXT_PART_KEYS: ReadonlySet<string> = new Set([\n 'type',\n 'text',\n 'index',\n]);\n\n/**\n * Returns the sole plain text part of a single-element complex content array\n * (the shape google-common emits for text deltas), or null when the part\n * carries anything beyond `type`/`text`/`index` (thought signatures, media,\n * function calls) and must not be sliced. The part must carry a numeric\n * `index`: it is the aggregator's list-merge key, and without it each split\n * piece would append as a separate content part instead of merging back\n * into one — index-less parts pace whole instead.\n */\nfunction getSplittableTextPart(\n message: AIMessageChunk,\n chunkText: string\n): Record<string, unknown> | null {\n const content = message.content;\n if (!Array.isArray(content) || content.length !== 1) {\n return null;\n }\n const part: unknown = content[0];\n if (part == null || typeof part !== 'object') {\n return null;\n }\n const record = part as Record<string, unknown>;\n if (typeof record.text !== 'string' || record.text !== chunkText) {\n return null;\n }\n if (record.type != null && record.type !== 'text') {\n return null;\n }\n if (typeof record.index !== 'number') {\n return null;\n }\n if (!Object.keys(record).every((key) => SPLITTABLE_TEXT_PART_KEYS.has(key))) {\n return null;\n }\n return record;\n}\n\nfunction clonePartGenerationChunkPiece(\n chunk: ChatGenerationChunk,\n part: Record<string, unknown>,\n piece: SmoothPiece\n): ChatGenerationChunk {\n if (piece.isFirst && piece.isLast) {\n return chunk;\n }\n const message = chunk.message as AIMessageChunk;\n return new ChatGenerationChunk({\n text: piece.text,\n generationInfo: piece.isFirst ? chunk.generationInfo : undefined,\n message: new AIMessageChunk(\n Object.assign({}, message, {\n content: [Object.assign({}, part, { text: piece.text })],\n usage_metadata: piece.isFirst ? message.usage_metadata : undefined,\n additional_kwargs: piece.isFirst ? message.additional_kwargs : {},\n response_metadata: piece.isFirst ? message.response_metadata : {},\n })\n ),\n });\n}\n\n/**\n * Provider-agnostic classification of a `ChatGenerationChunk` for the\n * smoothing engine:\n * - splittable: plain visible text — string content equal to `chunk.text`, or\n * a single plain text part (google-common's delta shape) — with no\n * logprobs / finish_reason; sliced adaptively at the pacing cadence.\n * - atomic: any other text-bearing chunk (complex content arrays, logprobs,\n * finish_reason, provider-specific reasoning payloads surfaced via\n * `getAtomicText`) — paced as one piece, never split.\n * - passthrough: tool-call deltas, usage-only and metadata chunks — strict\n * FIFO, zero delay.\n */\n/**\n * google-common stamps `logprobs: { content: [] }` on every chunk, so only\n * logprobs that actually carry data may block splitting here. This is looser\n * than the OpenAI-family adapter in `llm/openai/index.ts`, which treats ANY\n * logprobs as atomic (its providers only attach logprobs when requested, and\n * the DeepSeek suite pins that contract) — do not unify the two predicates.\n */\nfunction hasMeaningfulLogprobs(\n generationInfo: ChatGenerationChunk['generationInfo']\n): boolean {\n const logprobs = generationInfo?.logprobs;\n if (logprobs == null) {\n return false;\n }\n const content = (logprobs as { content?: unknown }).content;\n if (Array.isArray(content)) {\n return content.length > 0;\n }\n return true;\n}\n\n/** google-common reports the terminal reason camelCase (`finishReason`). */\nfunction hasFinishReason(\n generationInfo: ChatGenerationChunk['generationInfo']\n): boolean {\n return (\n generationInfo?.finish_reason != null || generationInfo?.finishReason != null\n );\n}\n\n/**\n * Chunks that pair visible text with reasoning payloads in\n * `additional_kwargs` (Gemini thought summaries, reasoning_content deltas,\n * OpenRouter reasoning_details) must pace whole: split pieces would each\n * carry the same kwargs and downstream merging — the aggregator's dict merge\n * or OpenRouter's reasoning_details accumulation — duplicates them once per\n * piece.\n */\n/**\n * Mixed text/tool-call deltas must never split: cloned pieces would each\n * carry the same tool_call_chunks and downstream accumulation would corrupt\n * the assembled tool arguments.\n */\nexport function hasToolCallChunks(message: AIMessageChunk): boolean {\n return (message.tool_call_chunks?.length ?? 0) > 0;\n}\n\nexport function hasReasoningKwargs(message: AIMessageChunk): boolean {\n const kwargs = message.additional_kwargs;\n if (\n typeof kwargs.reasoning_content === 'string' &&\n kwargs.reasoning_content !== ''\n ) {\n return true;\n }\n if (\n Array.isArray(kwargs.reasoning_details) &&\n kwargs.reasoning_details.length > 0\n ) {\n return true;\n }\n return kwargs.reasoning != null;\n}\n\n/**\n * Extracts the visible reasoning text a kwargs-borne delta contributes, so\n * reasoning-only chunks (Gemini thoughts, DeepSeek reasoning_content,\n * OpenAI reasoning summaries, OpenRouter reasoning_details) pace atomically\n * at the cadence instead of passing through unsmoothed.\n */\nexport function getReasoningKwargsText(message: AIMessageChunk): string {\n const kwargs = message.additional_kwargs;\n if (\n typeof kwargs.reasoning_content === 'string' &&\n kwargs.reasoning_content !== ''\n ) {\n return kwargs.reasoning_content;\n }\n const reasoning = kwargs.reasoning;\n if (typeof reasoning === 'string' && reasoning !== '') {\n return reasoning;\n }\n if (reasoning != null && typeof reasoning === 'object') {\n const summaryText = (\n reasoning as { summary?: { text?: unknown }[] }\n ).summary?.[0]?.text;\n if (typeof summaryText === 'string' && summaryText !== '') {\n return summaryText;\n }\n }\n const details = kwargs.reasoning_details;\n if (Array.isArray(details)) {\n let text = '';\n for (const detail of details) {\n if (detail != null && typeof detail === 'object') {\n const detailText = (detail as { text?: unknown }).text;\n if (typeof detailText === 'string') {\n text += detailText;\n }\n }\n }\n if (text !== '') {\n return text;\n }\n }\n return '';\n}\n\nexport function toGenerationSmoothItem(\n chunk: ChatGenerationChunk,\n getAtomicText?: (message: AIMessageChunk) => string\n): SmoothItem<ChatGenerationChunk> {\n const { message } = chunk;\n const isMessageChunk = message instanceof AIMessageChunk;\n const cleanGenerationInfo =\n !hasMeaningfulLogprobs(chunk.generationInfo) &&\n !hasFinishReason(chunk.generationInfo);\n const splittable =\n Boolean(chunk.text) &&\n isMessageChunk &&\n typeof message.content === 'string' &&\n message.content === chunk.text &&\n cleanGenerationInfo &&\n !hasReasoningKwargs(message) &&\n !hasToolCallChunks(message);\n\n if (splittable) {\n return {\n text: chunk.text,\n smooth: true,\n emit: (piece) => cloneGenerationChunkPiece(chunk, piece),\n };\n }\n\n const splittablePart =\n Boolean(chunk.text) &&\n isMessageChunk &&\n cleanGenerationInfo &&\n !hasReasoningKwargs(message) &&\n !hasToolCallChunks(message)\n ? getSplittableTextPart(message, chunk.text)\n : null;\n if (splittablePart != null) {\n return {\n text: chunk.text,\n smooth: true,\n emit: (piece) =>\n clonePartGenerationChunkPiece(chunk, splittablePart, piece),\n };\n }\n\n const pacedText =\n chunk.text ||\n (isMessageChunk && getAtomicText != null ? getAtomicText(message) : '');\n if (pacedText !== '') {\n return {\n text: pacedText,\n smooth: true,\n atomic: true,\n emit: () => chunk,\n };\n }\n\n return { text: '', smooth: false, emit: () => chunk };\n}\n\n/**\n * Wraps a provider's raw chunk stream with adaptive smoothing and per-piece\n * `handleLLMNewToken` dispatch. The raw stream must NOT dispatch runManager\n * callbacks itself — callback-echo consumers would otherwise observe the\n * unsmoothed deltas.\n */\nexport async function* smoothGenerationChunks({\n chunks,\n delayMs,\n signal,\n runManager,\n}: {\n chunks: AsyncGenerator<ChatGenerationChunk>;\n delayMs: number;\n signal?: AbortSignal;\n runManager?: CallbackManagerForLLMRun;\n}): AsyncGenerator<ChatGenerationChunk> {\n const source = (async function* (): AsyncGenerator<\n SmoothItem<ChatGenerationChunk>\n > {\n for await (const chunk of chunks) {\n yield toGenerationSmoothItem(chunk, getReasoningKwargsText);\n }\n })();\n\n for await (const outputChunk of smoothStream({ source, delayMs, signal })) {\n yield outputChunk;\n await runManager?.handleLLMNewToken(\n outputChunk.text || '',\n undefined,\n undefined,\n undefined,\n undefined,\n { chunk: outputChunk }\n );\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"chunkAdapters.mjs","names":[],"sources":["../../../../src/llm/stream/chunkAdapters.ts"],"mappings":";;;;AAcA,SAAgB,0BACd,OACA,OACqB;CACrB,IAAI,MAAM,WAAW,MAAM,QACzB,OAAO;CAET,MAAM,UAAU,MAAM;CACtB,OAAO,IAAI,oBAAoB;EAC7B,MAAM,MAAM;EACZ,gBAAgB,MAAM,UAAU,MAAM,iBAAiB,KAAA;EACvD,SAAS,IAAI,eACX,OAAO,OAAO,CAAC,GAAG,SAAS;GACzB,SAAS,MAAM;GACf,gBAAgB,MAAM,UAAU,QAAQ,iBAAiB,KAAA;GACzD,mBAAmB,MAAM,UAAU,QAAQ,oBAAoB,CAAC;GAChE,mBAAmB,MAAM,UAAU,QAAQ,oBAAoB,CAAC;EAClE,CAAC,CACH;CACF,CAAC;AACH;AAEA,MAAM,4BAAiD,IAAI,IAAI;CAC7D;CACA;CACA;AACF,CAAC;AAWD,SAAS,sBACP,SACA,WACgC;CAChC,MAAM,UAAU,QAAQ;CACxB,IAAI,CAAC,MAAM,QAAQ,OAAO,KAAK,QAAQ,WAAW,GAChD,OAAO;CAET,MAAM,OAAgB,QAAQ;CAC9B,IAAI,QAAQ,QAAQ,OAAO,SAAS,UAClC,OAAO;CAET,MAAM,SAAS;CACf,IAAI,OAAO,OAAO,SAAS,YAAY,OAAO,SAAS,WACrD,OAAO;CAET,IAAI,OAAO,QAAQ,QAAQ,OAAO,SAAS,QACzC,OAAO;CAET,IAAI,OAAO,OAAO,UAAU,UAC1B,OAAO;CAET,IAAI,CAAC,OAAO,KAAK,MAAM,CAAC,CAAC,OAAO,QAAQ,0BAA0B,IAAI,GAAG,CAAC,GACxE,OAAO;CAET,OAAO;AACT;AAEA,SAAS,8BACP,OACA,MACA,OACqB;CACrB,IAAI,MAAM,WAAW,MAAM,QACzB,OAAO;CAET,MAAM,UAAU,MAAM;CACtB,OAAO,IAAI,oBAAoB;EAC7B,MAAM,MAAM;EACZ,gBAAgB,MAAM,UAAU,MAAM,iBAAiB,KAAA;EACvD,SAAS,IAAI,eACX,OAAO,OAAO,CAAC,GAAG,SAAS;GACzB,SAAS,CAAC,OAAO,OAAO,CAAC,GAAG,MAAM,EAAE,MAAM,MAAM,KAAK,CAAC,CAAC;GACvD,gBAAgB,MAAM,UAAU,QAAQ,iBAAiB,KAAA;GACzD,mBAAmB,MAAM,UAAU,QAAQ,oBAAoB,CAAC;GAChE,mBAAmB,MAAM,UAAU,QAAQ,oBAAoB,CAAC;EAClE,CAAC,CACH;CACF,CAAC;AACH;AAqBA,SAAS,sBACP,gBACS;CACT,MAAM,WAAW,gBAAgB;CACjC,IAAI,YAAY,MACd,OAAO;CAET,MAAM,UAAW,SAAmC;CACpD,IAAI,MAAM,QAAQ,OAAO,GACvB,OAAO,QAAQ,SAAS;CAE1B,OAAO;AACT;AAGA,SAAS,gBACP,gBACS;CACT,OACE,gBAAgB,iBAAiB,QAAQ,gBAAgB,gBAAgB;AAE7E;AAeA,SAAgB,kBAAkB,SAAkC;CAClE,QAAQ,QAAQ,kBAAkB,UAAU,KAAK;AACnD;AAEA,SAAgB,mBAAmB,SAAkC;CACnE,MAAM,SAAS,QAAQ;CACvB,IACE,OAAO,OAAO,sBAAsB,YACpC,OAAO,sBAAsB,IAE7B,OAAO;CAET,IACE,MAAM,QAAQ,OAAO,iBAAiB,KACtC,OAAO,kBAAkB,SAAS,GAElC,OAAO;CAET,OAAO,OAAO,aAAa;AAC7B;AAQA,SAAgB,uBAAuB,SAAiC;CACtE,MAAM,SAAS,QAAQ;CACvB,IACE,OAAO,OAAO,sBAAsB,YACpC,OAAO,sBAAsB,IAE7B,OAAO,OAAO;CAEhB,MAAM,YAAY,OAAO;CACzB,IAAI,OAAO,cAAc,YAAY,cAAc,IACjD,OAAO;CAET,IAAI,aAAa,QAAQ,OAAO,cAAc,UAAU;EACtD,MAAM,cACJ,UACA,UAAU,EAAE,EAAE;EAChB,IAAI,OAAO,gBAAgB,YAAY,gBAAgB,IACrD,OAAO;CAEX;CACA,MAAM,UAAU,OAAO;CACvB,IAAI,MAAM,QAAQ,OAAO,GAAG;EAC1B,IAAI,OAAO;EACX,KAAK,MAAM,UAAU,SACnB,IAAI,UAAU,QAAQ,OAAO,WAAW,UAAU;GAChD,MAAM,aAAc,OAA8B;GAClD,IAAI,OAAO,eAAe,UACxB,QAAQ;EAEZ;EAEF,IAAI,SAAS,IACX,OAAO;CAEX;CACA,OAAO;AACT;AAEA,SAAgB,uBACd,OACA,eACiC;CACjC,MAAM,EAAE,YAAY;CACpB,MAAM,iBAAiB,mBAAmB;CAC1C,MAAM,sBACJ,CAAC,sBAAsB,MAAM,cAAc,KAC3C,CAAC,gBAAgB,MAAM,cAAc;CAUvC,IARE,QAAQ,MAAM,IAAI,KAClB,kBACA,OAAO,QAAQ,YAAY,YAC3B,QAAQ,YAAY,MAAM,QAC1B,uBACA,CAAC,mBAAmB,OAAO,KAC3B,CAAC,kBAAkB,OAAO,GAG1B,OAAO;EACL,MAAM,MAAM;EACZ,QAAQ;EACR,OAAO,UAAU,0BAA0B,OAAO,KAAK;CACzD;CAGF,MAAM,iBACJ,QAAQ,MAAM,IAAI,KAClB,kBACA,uBACA,CAAC,mBAAmB,OAAO,KAC3B,CAAC,kBAAkB,OAAO,IACtB,sBAAsB,SAAS,MAAM,IAAI,IACzC;CACN,IAAI,kBAAkB,MACpB,OAAO;EACL,MAAM,MAAM;EACZ,QAAQ;EACR,OAAO,UACL,8BAA8B,OAAO,gBAAgB,KAAK;CAC9D;CAGF,MAAM,YACJ,MAAM,SACL,kBAAkB,iBAAiB,OAAO,cAAc,OAAO,IAAI;CACtE,IAAI,cAAc,IAChB,OAAO;EACL,MAAM;EACN,QAAQ;EACR,QAAQ;EACR,YAAY;CACd;CAGF,OAAO;EAAE,MAAM;EAAI,QAAQ;EAAO,YAAY;CAAM;AACtD;AAQA,gBAAuB,uBAAuB,EAC5C,QACA,SACA,QACA,cAMsC;CACtC,MAAM,UAAU,mBAEZ;EACF,WAAW,MAAM,SAAS,QACxB,MAAM,uBAAuB,OAAO,sBAAsB;CAE9D,EAAA,CAAG;CAEH,WAAW,MAAM,eAAe,aAAa;EAAE;EAAQ;EAAS;CAAO,CAAC,GAAG;EACzE,MAAM;EACN,MAAM,YAAY,kBAChB,YAAY,QAAQ,IACpB,KAAA,GACA,KAAA,GACA,KAAA,GACA,KAAA,GACA,EAAE,OAAO,YAAY,CACvB;CACF;AACF"}
|