@librechat/agents 3.2.2 → 3.2.31
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 +3 -2
- package/dist/cjs/agents/AgentContext.cjs.map +1 -1
- package/dist/cjs/events.cjs.map +1 -1
- package/dist/cjs/graphs/Graph.cjs +200 -54
- package/dist/cjs/graphs/Graph.cjs.map +1 -1
- package/dist/cjs/graphs/MultiAgentGraph.cjs.map +1 -1
- package/dist/cjs/hooks/createWorkspacePolicyHook.cjs +13 -7
- package/dist/cjs/hooks/createWorkspacePolicyHook.cjs.map +1 -1
- package/dist/cjs/hooks/executeHooks.cjs.map +1 -1
- package/dist/cjs/hooks/types.cjs.map +1 -1
- package/dist/cjs/instrumentation.cjs +33 -0
- package/dist/cjs/instrumentation.cjs.map +1 -1
- package/dist/cjs/langfuse.cjs +17 -1
- package/dist/cjs/langfuse.cjs.map +1 -1
- package/dist/cjs/langfuseToolOutputTracing.cjs +2 -2
- package/dist/cjs/langfuseToolOutputTracing.cjs.map +1 -1
- package/dist/cjs/llm/anthropic/index.cjs +1 -1
- package/dist/cjs/llm/anthropic/index.cjs.map +1 -1
- package/dist/cjs/llm/anthropic/utils/message_inputs.cjs.map +1 -1
- package/dist/cjs/llm/anthropic/utils/message_outputs.cjs +1 -1
- package/dist/cjs/llm/anthropic/utils/message_outputs.cjs.map +1 -1
- package/dist/cjs/llm/bedrock/index.cjs +2 -2
- package/dist/cjs/llm/bedrock/index.cjs.map +1 -1
- package/dist/cjs/llm/bedrock/toolCache.cjs +8 -5
- package/dist/cjs/llm/bedrock/toolCache.cjs.map +1 -1
- package/dist/cjs/llm/fake.cjs +16 -14
- package/dist/cjs/llm/fake.cjs.map +1 -1
- package/dist/cjs/llm/google/index.cjs +22 -0
- package/dist/cjs/llm/google/index.cjs.map +1 -1
- package/dist/cjs/llm/google/utils/common.cjs +88 -27
- package/dist/cjs/llm/google/utils/common.cjs.map +1 -1
- package/dist/cjs/llm/init.cjs +2 -2
- package/dist/cjs/llm/invoke.cjs +108 -11
- package/dist/cjs/llm/invoke.cjs.map +1 -1
- package/dist/cjs/llm/openai/index.cjs +1 -1
- package/dist/cjs/llm/openai/index.cjs.map +1 -1
- package/dist/cjs/llm/openai/utils/index.cjs +1 -1
- package/dist/cjs/llm/openai/utils/index.cjs.map +1 -1
- package/dist/cjs/llm/openrouter/index.cjs.map +1 -1
- package/dist/cjs/llm/vertexai/index.cjs.map +1 -1
- package/dist/cjs/main.cjs +1 -0
- package/dist/cjs/main.cjs.map +1 -1
- package/dist/cjs/messages/cache.cjs +8 -7
- package/dist/cjs/messages/cache.cjs.map +1 -1
- package/dist/cjs/messages/content.cjs.map +1 -1
- package/dist/cjs/messages/contextPruning.cjs.map +1 -1
- package/dist/cjs/messages/format.cjs +124 -17
- package/dist/cjs/messages/format.cjs.map +1 -1
- package/dist/cjs/messages/prune.cjs.map +1 -1
- package/dist/cjs/messages/reducer.cjs +1 -1
- package/dist/cjs/messages/reducer.cjs.map +1 -1
- package/dist/cjs/messages/tools.cjs +1 -1
- package/dist/cjs/messages/tools.cjs.map +1 -1
- package/dist/cjs/openai/index.cjs.map +1 -1
- package/dist/cjs/responses/index.cjs.map +1 -1
- package/dist/cjs/run.cjs +47 -21
- package/dist/cjs/run.cjs.map +1 -1
- package/dist/cjs/session/AgentSession.cjs +4 -4
- package/dist/cjs/session/AgentSession.cjs.map +1 -1
- package/dist/cjs/session/JsonlSessionStore.cjs +2 -2
- package/dist/cjs/session/JsonlSessionStore.cjs.map +1 -1
- package/dist/cjs/session/handlers.cjs +2 -2
- package/dist/cjs/session/handlers.cjs.map +1 -1
- package/dist/cjs/stream.cjs +248 -25
- package/dist/cjs/stream.cjs.map +1 -1
- package/dist/cjs/summarization/node.cjs.map +1 -1
- package/dist/cjs/tools/BashProgrammaticToolCalling.cjs +1 -1
- package/dist/cjs/tools/BashProgrammaticToolCalling.cjs.map +1 -1
- package/dist/cjs/tools/Calculator.cjs +1 -1
- package/dist/cjs/tools/Calculator.cjs.map +1 -1
- package/dist/cjs/tools/CodeExecutor.cjs +1 -1
- package/dist/cjs/tools/CodeExecutor.cjs.map +1 -1
- package/dist/cjs/tools/SubagentTool.cjs.map +1 -1
- package/dist/cjs/tools/ToolNode.cjs +37 -18
- package/dist/cjs/tools/ToolNode.cjs.map +1 -1
- package/dist/cjs/tools/ToolSearch.cjs +1 -1
- package/dist/cjs/tools/ToolSearch.cjs.map +1 -1
- package/dist/cjs/tools/cloudflare/CloudflareSandboxExecutionEngine.cjs +7 -4
- package/dist/cjs/tools/cloudflare/CloudflareSandboxExecutionEngine.cjs.map +1 -1
- package/dist/cjs/tools/cloudflare/CloudflareSandboxTools.cjs +4 -4
- package/dist/cjs/tools/cloudflare/CloudflareSandboxTools.cjs.map +1 -1
- package/dist/cjs/tools/handlers.cjs +2 -1
- package/dist/cjs/tools/handlers.cjs.map +1 -1
- package/dist/cjs/tools/local/CompileCheckTool.cjs.map +1 -1
- package/dist/cjs/tools/local/FileCheckpointer.cjs +2 -1
- package/dist/cjs/tools/local/FileCheckpointer.cjs.map +1 -1
- package/dist/cjs/tools/local/LocalCodingTools.cjs +45 -19
- package/dist/cjs/tools/local/LocalCodingTools.cjs.map +1 -1
- package/dist/cjs/tools/local/LocalExecutionEngine.cjs +3 -3
- package/dist/cjs/tools/local/LocalExecutionEngine.cjs.map +1 -1
- package/dist/cjs/tools/local/LocalExecutionTools.cjs +2 -2
- package/dist/cjs/tools/local/LocalExecutionTools.cjs.map +1 -1
- package/dist/cjs/tools/local/LocalProgrammaticToolCalling.cjs +4 -3
- package/dist/cjs/tools/local/LocalProgrammaticToolCalling.cjs.map +1 -1
- package/dist/cjs/tools/local/attachments.cjs +0 -5
- package/dist/cjs/tools/local/attachments.cjs.map +1 -1
- package/dist/cjs/tools/local/resolveLocalExecutionTools.cjs +4 -4
- package/dist/cjs/tools/local/resolveLocalExecutionTools.cjs.map +1 -1
- package/dist/cjs/tools/search/firecrawl.cjs +1 -1
- package/dist/cjs/tools/search/firecrawl.cjs.map +1 -1
- package/dist/cjs/tools/search/rerankers.cjs +7 -3
- package/dist/cjs/tools/search/rerankers.cjs.map +1 -1
- package/dist/cjs/tools/search/tavily-search.cjs +1 -1
- package/dist/cjs/tools/search/tavily-search.cjs.map +1 -1
- package/dist/cjs/tools/search/utils.cjs +76 -8
- package/dist/cjs/tools/search/utils.cjs.map +1 -1
- package/dist/cjs/tools/subagent/SubagentExecutor.cjs +1 -1
- package/dist/cjs/tools/subagent/SubagentExecutor.cjs.map +1 -1
- package/dist/cjs/utils/handlers.cjs +1 -1
- package/dist/cjs/utils/handlers.cjs.map +1 -1
- package/dist/cjs/utils/run.cjs +1 -1
- package/dist/cjs/utils/run.cjs.map +1 -1
- package/dist/esm/agents/AgentContext.mjs +3 -2
- package/dist/esm/agents/AgentContext.mjs.map +1 -1
- package/dist/esm/events.mjs.map +1 -1
- package/dist/esm/graphs/Graph.mjs +200 -54
- package/dist/esm/graphs/Graph.mjs.map +1 -1
- package/dist/esm/graphs/MultiAgentGraph.mjs.map +1 -1
- package/dist/esm/hooks/createWorkspacePolicyHook.mjs +13 -7
- package/dist/esm/hooks/createWorkspacePolicyHook.mjs.map +1 -1
- package/dist/esm/hooks/executeHooks.mjs.map +1 -1
- package/dist/esm/hooks/types.mjs.map +1 -1
- package/dist/esm/instrumentation.mjs +33 -1
- package/dist/esm/instrumentation.mjs.map +1 -1
- package/dist/esm/langfuse.mjs +17 -2
- package/dist/esm/langfuse.mjs.map +1 -1
- package/dist/esm/langfuseToolOutputTracing.mjs +2 -2
- package/dist/esm/langfuseToolOutputTracing.mjs.map +1 -1
- package/dist/esm/llm/anthropic/index.mjs +1 -1
- package/dist/esm/llm/anthropic/index.mjs.map +1 -1
- package/dist/esm/llm/anthropic/utils/message_inputs.mjs.map +1 -1
- package/dist/esm/llm/anthropic/utils/message_outputs.mjs +1 -1
- package/dist/esm/llm/anthropic/utils/message_outputs.mjs.map +1 -1
- package/dist/esm/llm/bedrock/index.mjs +2 -2
- package/dist/esm/llm/bedrock/index.mjs.map +1 -1
- package/dist/esm/llm/bedrock/toolCache.mjs +8 -5
- package/dist/esm/llm/bedrock/toolCache.mjs.map +1 -1
- package/dist/esm/llm/fake.mjs +16 -14
- package/dist/esm/llm/fake.mjs.map +1 -1
- package/dist/esm/llm/google/index.mjs +23 -1
- package/dist/esm/llm/google/index.mjs.map +1 -1
- package/dist/esm/llm/google/utils/common.mjs +88 -27
- package/dist/esm/llm/google/utils/common.mjs.map +1 -1
- package/dist/esm/llm/init.mjs +2 -2
- package/dist/esm/llm/invoke.mjs +104 -7
- package/dist/esm/llm/invoke.mjs.map +1 -1
- package/dist/esm/llm/openai/index.mjs +1 -1
- package/dist/esm/llm/openai/index.mjs.map +1 -1
- package/dist/esm/llm/openai/utils/index.mjs +1 -1
- package/dist/esm/llm/openai/utils/index.mjs.map +1 -1
- package/dist/esm/llm/openrouter/index.mjs.map +1 -1
- package/dist/esm/llm/vertexai/index.mjs.map +1 -1
- package/dist/esm/main.mjs +1 -1
- package/dist/esm/messages/cache.mjs +8 -7
- package/dist/esm/messages/cache.mjs.map +1 -1
- package/dist/esm/messages/content.mjs.map +1 -1
- package/dist/esm/messages/contextPruning.mjs.map +1 -1
- package/dist/esm/messages/format.mjs +124 -18
- package/dist/esm/messages/format.mjs.map +1 -1
- package/dist/esm/messages/prune.mjs.map +1 -1
- package/dist/esm/messages/reducer.mjs +1 -1
- package/dist/esm/messages/reducer.mjs.map +1 -1
- package/dist/esm/messages/tools.mjs +1 -1
- package/dist/esm/messages/tools.mjs.map +1 -1
- package/dist/esm/openai/index.mjs.map +1 -1
- package/dist/esm/responses/index.mjs.map +1 -1
- package/dist/esm/run.mjs +47 -21
- package/dist/esm/run.mjs.map +1 -1
- package/dist/esm/session/AgentSession.mjs +4 -4
- package/dist/esm/session/AgentSession.mjs.map +1 -1
- package/dist/esm/session/JsonlSessionStore.mjs +2 -2
- package/dist/esm/session/JsonlSessionStore.mjs.map +1 -1
- package/dist/esm/session/handlers.mjs +2 -2
- package/dist/esm/session/handlers.mjs.map +1 -1
- package/dist/esm/stream.mjs +248 -25
- package/dist/esm/stream.mjs.map +1 -1
- package/dist/esm/summarization/node.mjs.map +1 -1
- package/dist/esm/tools/BashProgrammaticToolCalling.mjs +1 -1
- package/dist/esm/tools/BashProgrammaticToolCalling.mjs.map +1 -1
- package/dist/esm/tools/Calculator.mjs +1 -1
- package/dist/esm/tools/Calculator.mjs.map +1 -1
- package/dist/esm/tools/CodeExecutor.mjs +1 -1
- package/dist/esm/tools/CodeExecutor.mjs.map +1 -1
- package/dist/esm/tools/SubagentTool.mjs.map +1 -1
- package/dist/esm/tools/ToolNode.mjs +37 -18
- package/dist/esm/tools/ToolNode.mjs.map +1 -1
- package/dist/esm/tools/ToolSearch.mjs +1 -1
- package/dist/esm/tools/ToolSearch.mjs.map +1 -1
- package/dist/esm/tools/cloudflare/CloudflareSandboxExecutionEngine.mjs +7 -4
- package/dist/esm/tools/cloudflare/CloudflareSandboxExecutionEngine.mjs.map +1 -1
- package/dist/esm/tools/cloudflare/CloudflareSandboxTools.mjs +4 -4
- package/dist/esm/tools/cloudflare/CloudflareSandboxTools.mjs.map +1 -1
- package/dist/esm/tools/handlers.mjs +2 -1
- package/dist/esm/tools/handlers.mjs.map +1 -1
- package/dist/esm/tools/local/CompileCheckTool.mjs.map +1 -1
- package/dist/esm/tools/local/FileCheckpointer.mjs +2 -1
- package/dist/esm/tools/local/FileCheckpointer.mjs.map +1 -1
- package/dist/esm/tools/local/LocalCodingTools.mjs +45 -19
- package/dist/esm/tools/local/LocalCodingTools.mjs.map +1 -1
- package/dist/esm/tools/local/LocalExecutionEngine.mjs +3 -3
- package/dist/esm/tools/local/LocalExecutionEngine.mjs.map +1 -1
- package/dist/esm/tools/local/LocalExecutionTools.mjs +2 -2
- package/dist/esm/tools/local/LocalExecutionTools.mjs.map +1 -1
- package/dist/esm/tools/local/LocalProgrammaticToolCalling.mjs +4 -3
- package/dist/esm/tools/local/LocalProgrammaticToolCalling.mjs.map +1 -1
- package/dist/esm/tools/local/attachments.mjs +0 -5
- package/dist/esm/tools/local/attachments.mjs.map +1 -1
- package/dist/esm/tools/local/resolveLocalExecutionTools.mjs +4 -4
- package/dist/esm/tools/local/resolveLocalExecutionTools.mjs.map +1 -1
- package/dist/esm/tools/search/firecrawl.mjs +1 -1
- package/dist/esm/tools/search/firecrawl.mjs.map +1 -1
- package/dist/esm/tools/search/rerankers.mjs +8 -4
- package/dist/esm/tools/search/rerankers.mjs.map +1 -1
- package/dist/esm/tools/search/tavily-search.mjs +1 -1
- package/dist/esm/tools/search/tavily-search.mjs.map +1 -1
- package/dist/esm/tools/search/utils.mjs +76 -9
- package/dist/esm/tools/search/utils.mjs.map +1 -1
- package/dist/esm/tools/subagent/SubagentExecutor.mjs +1 -1
- package/dist/esm/tools/subagent/SubagentExecutor.mjs.map +1 -1
- package/dist/esm/utils/handlers.mjs +1 -1
- package/dist/esm/utils/handlers.mjs.map +1 -1
- package/dist/esm/utils/run.mjs +1 -1
- package/dist/esm/utils/run.mjs.map +1 -1
- package/dist/types/agents/__tests__/promptCacheLiveHelpers.d.ts +1 -1
- package/dist/types/events.d.ts +1 -1
- package/dist/types/graphs/Graph.d.ts +7 -1
- package/dist/types/hooks/executeHooks.d.ts +1 -1
- package/dist/types/hooks/types.d.ts +5 -0
- package/dist/types/instrumentation.d.ts +1 -0
- package/dist/types/langfuse.d.ts +4 -0
- package/dist/types/llm/anthropic/utils/message_inputs.d.ts +1 -1
- package/dist/types/llm/anthropic/utils/message_outputs.d.ts +1 -1
- package/dist/types/llm/anthropic/utils/output_parsers.d.ts +2 -2
- package/dist/types/llm/bedrock/index.d.ts +2 -2
- package/dist/types/llm/fake.d.ts +3 -3
- package/dist/types/llm/google/index.d.ts +1 -0
- package/dist/types/llm/google/types.d.ts +1 -1
- package/dist/types/llm/google/utils/common.d.ts +2 -2
- package/dist/types/llm/google/utils/tools.d.ts +1 -1
- package/dist/types/llm/google/utils/zod_to_genai_parameters.d.ts +1 -1
- package/dist/types/llm/openai/index.d.ts +2 -2
- package/dist/types/llm/openai/utils/index.d.ts +1 -1
- package/dist/types/llm/openrouter/index.d.ts +4 -4
- package/dist/types/messages/contextPruning.d.ts +1 -1
- package/dist/types/messages/format.d.ts +9 -4
- package/dist/types/messages/prune.d.ts +1 -1
- package/dist/types/session/JsonlSessionStore.d.ts +1 -1
- package/dist/types/session/handlers.d.ts +1 -1
- package/dist/types/session/types.d.ts +1 -1
- package/dist/types/summarization/node.d.ts +1 -1
- package/dist/types/tools/SubagentTool.d.ts +2 -2
- package/dist/types/tools/ToolNode.d.ts +9 -2
- package/dist/types/tools/cloudflare/CloudflareSandboxExecutionEngine.d.ts +1 -1
- package/dist/types/tools/search/types.d.ts +1 -1
- package/dist/types/tools/search/utils.d.ts +11 -0
- package/dist/types/types/graph.d.ts +12 -4
- package/dist/types/types/llm.d.ts +4 -3
- package/dist/types/types/messages.d.ts +1 -1
- package/dist/types/types/run.d.ts +6 -6
- package/dist/types/types/stream.d.ts +2 -2
- package/dist/types/types/tools.d.ts +5 -1
- package/dist/types/utils/handlers.d.ts +2 -2
- package/dist/types/utils/run.d.ts +1 -1
- package/package.json +6 -3
- package/src/__tests__/stream.eagerEventExecution.test.ts +543 -6
- package/src/agents/AgentContext.ts +2 -2
- package/src/agents/__tests__/AgentContext.test.ts +3 -3
- package/src/agents/__tests__/promptCacheLiveHelpers.ts +1 -1
- package/src/events.ts +1 -1
- package/src/graphs/Graph.ts +329 -72
- package/src/graphs/MultiAgentGraph.ts +1 -1
- package/src/graphs/__tests__/Graph.reasoning.test.ts +919 -6
- package/src/graphs/__tests__/MultiAgentGraph.test.ts +1 -1
- package/src/graphs/__tests__/composition.smoke.test.ts +1 -1
- package/src/hooks/__tests__/HookRegistry.test.ts +1 -1
- package/src/hooks/__tests__/compactHooks.test.ts +8 -8
- package/src/hooks/__tests__/createWorkspacePolicyHook.test.ts +34 -22
- package/src/hooks/__tests__/executeHooks.test.ts +3 -3
- package/src/hooks/__tests__/integration.test.ts +3 -3
- package/src/hooks/__tests__/toolHooks.test.ts +10 -10
- package/src/hooks/createWorkspacePolicyHook.ts +17 -14
- package/src/hooks/executeHooks.ts +1 -1
- package/src/hooks/types.ts +5 -0
- package/src/instrumentation.ts +49 -8
- package/src/langfuse.ts +35 -1
- package/src/langfuseToolOutputTracing.ts +2 -2
- package/src/llm/anthropic/index.ts +1 -1
- package/src/llm/anthropic/utils/message_inputs.ts +1 -1
- package/src/llm/anthropic/utils/message_outputs.ts +3 -5
- package/src/llm/anthropic/utils/output_parsers.ts +5 -5
- package/src/llm/bedrock/index.ts +4 -4
- package/src/llm/bedrock/toolCache.test.ts +48 -9
- package/src/llm/bedrock/toolCache.ts +11 -6
- package/src/llm/custom-chat-models.smoke.test.ts +114 -0
- package/src/llm/fake.ts +30 -25
- package/src/llm/google/index.ts +43 -1
- package/src/llm/google/llm.spec.ts +173 -1
- package/src/llm/google/types.ts +1 -1
- package/src/llm/google/utils/common.ts +154 -45
- package/src/llm/google/utils/tools.ts +8 -8
- package/src/llm/google/utils/zod_to_genai_parameters.ts +4 -4
- package/src/llm/invoke.test.ts +3 -3
- package/src/llm/invoke.ts +170 -10
- package/src/llm/openai/index.ts +4 -4
- package/src/llm/openai/utils/index.ts +14 -14
- package/src/llm/openrouter/index.ts +4 -4
- package/src/llm/openrouter/reasoning.test.ts +2 -2
- package/src/llm/vertexai/fixThoughtSignatures.test.ts +1 -1
- package/src/llm/vertexai/index.ts +1 -1
- package/src/messages/cache.test.ts +22 -0
- package/src/messages/cache.ts +25 -12
- package/src/messages/content.ts +1 -1
- package/src/messages/contextPruning.ts +1 -1
- package/src/messages/format.ts +227 -43
- package/src/messages/formatAgentMessages.skills.test.ts +105 -26
- package/src/messages/formatAgentMessages.test.ts +841 -10
- package/src/messages/labelContentByAgent.test.ts +2 -2
- package/src/messages/prune.ts +1 -1
- package/src/messages/reducer.ts +1 -1
- package/src/messages/tools.ts +1 -1
- package/src/openai/__tests__/openai.test.ts +2 -2
- package/src/openai/index.ts +1 -1
- package/src/responses/__tests__/responses.test.ts +2 -2
- package/src/responses/index.ts +1 -1
- package/src/run.ts +82 -47
- package/src/session/AgentSession.ts +6 -6
- package/src/session/JsonlSessionStore.ts +3 -3
- package/src/session/__tests__/JsonlSessionStore.test.ts +5 -5
- package/src/session/__tests__/handlers.test.ts +2 -2
- package/src/session/handlers.ts +5 -5
- package/src/session/types.ts +1 -1
- package/src/specs/agent-handoffs.test.ts +1 -1
- package/src/specs/deterministic-trace-id.test.ts +50 -0
- package/src/specs/langfuse-callbacks.test.ts +2 -2
- package/src/specs/langfuse-metadata.test.ts +39 -0
- package/src/specs/langfuse-tool-output-tracing.test.ts +1 -1
- package/src/specs/multi-agent-summarization.test.ts +4 -4
- package/src/specs/subagent.test.ts +3 -3
- package/src/specs/summarization-unit.test.ts +1 -1
- package/src/specs/thinking-handoff.test.ts +1 -1
- package/src/splitStream.test.ts +48 -0
- package/src/stream.test.ts +53 -3
- package/src/stream.ts +450 -39
- package/src/summarization/__tests__/aggregator.test.ts +2 -2
- package/src/summarization/__tests__/node.test.ts +2 -2
- package/src/summarization/node.ts +1 -1
- package/src/tools/BashProgrammaticToolCalling.ts +5 -5
- package/src/tools/Calculator.ts +1 -1
- package/src/tools/CodeExecutor.ts +2 -4
- package/src/tools/SubagentTool.ts +2 -2
- package/src/tools/ToolNode.ts +37 -16
- package/src/tools/ToolSearch.ts +1 -1
- package/src/tools/__tests__/CloudflareSandboxExecution.test.ts +4 -4
- package/src/tools/__tests__/CodeApiAuthHeaders.test.ts +12 -12
- package/src/tools/__tests__/LocalExecutionTools.test.ts +125 -93
- package/src/tools/__tests__/ProgrammaticToolCalling.test.ts +29 -5
- package/src/tools/__tests__/ReadFile.test.ts +1 -1
- package/src/tools/__tests__/SkillTool.test.ts +4 -4
- package/src/tools/__tests__/SubagentExecutor.test.ts +17 -13
- package/src/tools/__tests__/SubagentTool.test.ts +2 -2
- package/src/tools/__tests__/ToolNode.eagerEventExecution.test.ts +1 -1
- package/src/tools/__tests__/ToolNode.outputReferences.test.ts +2 -5
- package/src/tools/__tests__/ToolNode.session.test.ts +1 -1
- package/src/tools/__tests__/ToolSearch.test.ts +1 -1
- package/src/tools/__tests__/annotateMessagesForLLM.test.ts +1 -1
- package/src/tools/__tests__/directToolHITLResumeScope.test.ts +35 -32
- package/src/tools/__tests__/directToolHooks.test.ts +41 -0
- package/src/tools/__tests__/handlers.test.ts +2 -2
- package/src/tools/__tests__/hitl.test.ts +11 -11
- package/src/tools/__tests__/localToolNames.test.ts +8 -6
- package/src/tools/__tests__/skillCatalog.test.ts +1 -1
- package/src/tools/__tests__/subagentHooks.test.ts +20 -10
- package/src/tools/__tests__/workspaceSeam.test.ts +20 -7
- package/src/tools/cloudflare/CloudflareSandboxExecutionEngine.ts +9 -6
- package/src/tools/cloudflare/CloudflareSandboxTools.ts +19 -19
- package/src/tools/handlers.ts +5 -5
- package/src/tools/local/CompileCheckTool.ts +4 -7
- package/src/tools/local/FileCheckpointer.ts +6 -5
- package/src/tools/local/LocalCodingTools.ts +100 -45
- package/src/tools/local/LocalExecutionEngine.ts +5 -5
- package/src/tools/local/LocalExecutionTools.ts +9 -9
- package/src/tools/local/LocalProgrammaticToolCalling.ts +5 -4
- package/src/tools/local/attachments.ts +0 -6
- package/src/tools/local/resolveLocalExecutionTools.ts +15 -15
- package/src/tools/search/firecrawl.ts +1 -1
- package/src/tools/search/jina-reranker.test.ts +148 -37
- package/src/tools/search/rerankers.ts +14 -4
- package/src/tools/search/tavily-search.ts +2 -2
- package/src/tools/search/types.ts +1 -1
- package/src/tools/search/utils.ts +99 -9
- package/src/tools/subagent/SubagentExecutor.ts +12 -6
- package/src/types/graph.ts +20 -12
- package/src/types/llm.ts +7 -6
- package/src/types/messages.ts +1 -1
- package/src/types/run.ts +7 -7
- package/src/types/stream.ts +2 -2
- package/src/types/tools.ts +5 -1
- package/src/utils/handlers.ts +2 -2
- package/src/utils/llmConfig.ts +1 -1
- package/src/utils/logging.ts +20 -10
- package/src/utils/run.ts +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reducer.cjs","sources":["../../../src/messages/reducer.ts"],"sourcesContent":["import {\n BaseMessage,\n RemoveMessage,\n BaseMessageLike,\n coerceMessageLikeToMessage,\n} from '@langchain/core/messages';\
|
|
1
|
+
{"version":3,"file":"reducer.cjs","sources":["../../../src/messages/reducer.ts"],"sourcesContent":["import { v4 } from 'uuid';\nimport {\n BaseMessage,\n RemoveMessage,\n BaseMessageLike,\n coerceMessageLikeToMessage,\n} from '@langchain/core/messages';\n\nexport const REMOVE_ALL_MESSAGES = '__remove_all__';\n\n/**\n * Creates a message that instructs messagesStateReducer to remove ALL\n * existing messages from state. Messages appearing after this one in\n * the array become the new state.\n *\n * Usage (in a node return value):\n * ```ts\n * return { messages: [createRemoveAllMessage(), ...survivingMessages] };\n * ```\n *\n * This works because the reducer checks for `getType() === 'remove'`\n * with `id === REMOVE_ALL_MESSAGES` and discards everything before it.\n *\n * NOTE: Uses RemoveMessage from @langchain/core with a sentinel id so\n * the reducer can distinguish a \"remove-all\" marker from a single-message\n * removal.\n */\nexport function createRemoveAllMessage(): BaseMessage {\n return new RemoveMessage({ id: REMOVE_ALL_MESSAGES });\n}\n\nexport type Messages =\n | Array<BaseMessage | BaseMessageLike>\n | BaseMessage\n | BaseMessageLike;\n\n/**\n * Prebuilt reducer that combines returned messages.\n * Can handle standard messages and special modifiers like {@link RemoveMessage}\n * instances.\n */\nexport function messagesStateReducer(\n left: Messages,\n right: Messages\n): BaseMessage[] {\n const leftArray = Array.isArray(left) ? left : [left];\n const rightArray = Array.isArray(right) ? right : [right];\n // coerce to message\n const leftMessages = (leftArray as BaseMessageLike[]).map(\n coerceMessageLikeToMessage\n );\n const rightMessages = (rightArray as BaseMessageLike[]).map(\n coerceMessageLikeToMessage\n );\n // assign missing ids\n for (const m of leftMessages) {\n if (m.id === null || m.id === undefined) {\n m.id = v4();\n m.lc_kwargs.id = m.id;\n }\n }\n\n let removeAllIdx: number | undefined;\n for (let i = 0; i < rightMessages.length; i += 1) {\n const m = rightMessages[i];\n if (m.id === null || m.id === undefined) {\n m.id = v4();\n m.lc_kwargs.id = m.id;\n }\n\n if (m.getType() === 'remove' && m.id === REMOVE_ALL_MESSAGES) {\n removeAllIdx = i;\n }\n }\n\n if (removeAllIdx != null) return rightMessages.slice(removeAllIdx + 1);\n\n // merge\n const merged = [...leftMessages];\n const mergedById = new Map(merged.map((m, i) => [m.id, i]));\n const idsToRemove = new Set();\n for (const m of rightMessages) {\n const existingIdx = mergedById.get(m.id);\n if (existingIdx !== undefined) {\n if (m.getType() === 'remove') {\n idsToRemove.add(m.id);\n } else {\n idsToRemove.delete(m.id);\n merged[existingIdx] = m;\n }\n } else {\n if (m.getType() === 'remove') {\n throw new Error(\n `Attempting to delete a message with an ID that doesn't exist ('${m.id}')`\n );\n }\n mergedById.set(m.id, merged.length);\n merged.push(m);\n }\n }\n return merged.filter((m) => !idsToRemove.has(m.id));\n}\n"],"names":["RemoveMessage","coerceMessageLikeToMessage","v4"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.cjs","sources":["../../../src/messages/tools.ts"],"sourcesContent":["// src/messages/toolDiscovery.ts\nimport { AIMessageChunk, ToolMessage } from '@langchain/core/messages';\nimport type { BaseMessage } from '@langchain/core/messages';\nimport {
|
|
1
|
+
{"version":3,"file":"tools.cjs","sources":["../../../src/messages/tools.ts"],"sourcesContent":["// src/messages/toolDiscovery.ts\nimport { AIMessageChunk, ToolMessage } from '@langchain/core/messages';\nimport type { BaseMessage } from '@langchain/core/messages';\nimport { findLastIndex } from './core';\nimport { Constants } from '@/common';\n\ntype ToolSearchArtifact = {\n tool_references?: Array<{ tool_name: string }>;\n};\n\n/**\n * Extracts discovered tool names from tool search results in the current turn.\n * Only processes tool search messages after the latest AI message with tool calls.\n *\n * Similar pattern to formatArtifactPayload - finds relevant messages efficiently\n * by identifying the latest AI parent and only processing subsequent tool messages.\n *\n * @param messages - All messages in the conversation\n * @returns Array of discovered tool names (empty if no new discoveries)\n */\nexport function extractToolDiscoveries(messages: BaseMessage[]): string[] {\n const lastMessage = messages[messages.length - 1];\n if (!(lastMessage instanceof ToolMessage)) return [];\n\n // Find the latest AIMessage with tool_calls that this tool message belongs to\n const latestAIParentIndex = findLastIndex(\n messages,\n (msg) =>\n (msg instanceof AIMessageChunk &&\n (msg.tool_calls?.length ?? 0) > 0 &&\n msg.tool_calls?.some((tc) => tc.id === lastMessage.tool_call_id)) ??\n false\n );\n\n if (latestAIParentIndex === -1) return [];\n\n // Collect tool_call_ids from the AI message\n const aiMessage = messages[latestAIParentIndex] as AIMessageChunk;\n const toolCallIds = new Set(aiMessage.tool_calls?.map((tc) => tc.id) ?? []);\n\n // Only process tool search results after the AI message that belong to this turn\n const discoveredNames: string[] = [];\n for (let i = latestAIParentIndex + 1; i < messages.length; i++) {\n const msg = messages[i];\n if (!(msg instanceof ToolMessage)) continue;\n if (msg.name !== Constants.TOOL_SEARCH) continue;\n if (!toolCallIds.has(msg.tool_call_id)) continue;\n\n // This is a tool search result from the current turn\n if (typeof msg.artifact === 'object' && msg.artifact != null) {\n const artifact = msg.artifact as ToolSearchArtifact;\n if (artifact.tool_references && artifact.tool_references.length > 0) {\n for (const ref of artifact.tool_references) {\n discoveredNames.push(ref.tool_name);\n }\n }\n }\n }\n\n return discoveredNames;\n}\n\n/**\n * Checks if the current turn has any tool search results.\n * Quick check to avoid full extraction when not needed.\n */\nexport function hasToolSearchInCurrentTurn(messages: BaseMessage[]): boolean {\n const lastMessage = messages[messages.length - 1];\n if (!(lastMessage instanceof ToolMessage)) return false;\n\n // Find the latest AIMessage with tool_calls\n const latestAIParentIndex = findLastIndex(\n messages,\n (msg) =>\n (msg instanceof AIMessageChunk &&\n (msg.tool_calls?.length ?? 0) > 0 &&\n msg.tool_calls?.some((tc) => tc.id === lastMessage.tool_call_id)) ??\n false\n );\n\n if (latestAIParentIndex === -1) return false;\n\n const aiMessage = messages[latestAIParentIndex] as AIMessageChunk;\n const toolCallIds = new Set(aiMessage.tool_calls?.map((tc) => tc.id) ?? []);\n\n // Check if any tool search results exist after the AI message\n for (let i = latestAIParentIndex + 1; i < messages.length; i++) {\n const msg = messages[i];\n if (\n msg instanceof ToolMessage &&\n msg.name === Constants.TOOL_SEARCH &&\n toolCallIds.has(msg.tool_call_id)\n ) {\n return true;\n }\n }\n\n return false;\n}\n"],"names":["messages","ToolMessage","findLastIndex","AIMessageChunk","Constants"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../../src/openai/index.ts"],"sourcesContent":["import { GraphEvents } from '@/common';\nimport type { UsageMetadata } from '@langchain/core/messages';\nimport type * as t from '@/types';\n\nexport interface OpenAICompatibleWriter {\n write(data: string): void | Promise<void>;\n}\n\nexport interface OpenAIResponseContext {\n requestId: string;\n model: string;\n created: number;\n}\n\nexport interface OpenAICompletionUsage {\n prompt_tokens: number;\n completion_tokens: number;\n total_tokens: number;\n completion_tokens_details?: {\n reasoning_tokens?: number;\n };\n}\n\nexport interface OpenAIToolCall {\n id: string;\n type: 'function';\n function: {\n name: string;\n arguments: string;\n };\n}\n\nexport interface OpenAIChatCompletionChunkChoice {\n index: number;\n delta: {\n role?: 'assistant';\n content?: string | null;\n reasoning?: string | null;\n tool_calls?: Array<{\n index: number;\n id?: string;\n type?: 'function';\n function?: {\n name?: string;\n arguments?: string;\n };\n }>;\n };\n finish_reason: 'stop' | 'length' | 'tool_calls' | 'content_filter' | null;\n}\n\nexport interface OpenAIChatCompletionChunk {\n id: string;\n object: 'chat.completion.chunk';\n created: number;\n model: string;\n choices: OpenAIChatCompletionChunkChoice[];\n usage?: OpenAICompletionUsage;\n}\n\nexport interface OpenAIStreamTracker {\n hasRole: boolean;\n hasText: boolean;\n hasReasoning: boolean;\n lastChunkKind?: 'text' | 'reasoning' | 'tool_call';\n toolCalls: Map<number, OpenAIToolCall>;\n toolCallsByStep?: Map<string, Map<number, OpenAIToolCall>>;\n usage: {\n promptTokens: number;\n completionTokens: number;\n reasoningTokens: number;\n };\n}\n\nexport interface OpenAIHandlerConfig {\n writer: OpenAICompatibleWriter;\n context: OpenAIResponseContext;\n tracker: OpenAIStreamTracker;\n}\n\ninterface OpenAIToolCallFragment {\n index?: number;\n id?: string;\n name?: string;\n args?: string | object;\n function?: {\n name?: string;\n arguments?: string | object;\n };\n}\n\nexport function createOpenAIStreamTracker(): OpenAIStreamTracker {\n return {\n hasRole: false,\n hasText: false,\n hasReasoning: false,\n toolCalls: new Map(),\n toolCallsByStep: new Map(),\n usage: {\n promptTokens: 0,\n completionTokens: 0,\n reasoningTokens: 0,\n },\n };\n}\n\nfunction getTokenCount(value: number | null | undefined): number {\n return typeof value === 'number' && Number.isFinite(value) ? value : 0;\n}\n\nfunction getReasoningTokenCount(usage: Partial<UsageMetadata>): number {\n return getTokenCount(usage.output_token_details?.reasoning);\n}\n\nfunction getToolCallIndex(\n toolCall: OpenAIToolCallFragment,\n fallbackIndex: number\n): number {\n return typeof toolCall.index === 'number' ? toolCall.index : fallbackIndex;\n}\n\nfunction getToolCallName(toolCall: OpenAIToolCallFragment): string {\n return toolCall.name ?? toolCall.function?.name ?? '';\n}\n\nfunction getToolCallArguments(toolCall: OpenAIToolCallFragment): string {\n const args = toolCall.args ?? toolCall.function?.arguments;\n if (args == null) {\n return '';\n }\n if (typeof args === 'string') {\n return args;\n }\n return JSON.stringify(args);\n}\n\nfunction getStepToolCalls(\n tracker: OpenAIStreamTracker,\n stepId: string\n): Map<number, OpenAIToolCall> {\n const toolCallsByStep = tracker.toolCallsByStep ?? new Map();\n tracker.toolCallsByStep = toolCallsByStep;\n const existing = toolCallsByStep.get(stepId);\n if (existing != null) {\n return existing;\n }\n const stepToolCalls = new Map<number, OpenAIToolCall>();\n toolCallsByStep.set(stepId, stepToolCalls);\n return stepToolCalls;\n}\n\nexport function createChatCompletionChunk(\n context: OpenAIResponseContext,\n delta: OpenAIChatCompletionChunkChoice['delta'],\n finishReason: OpenAIChatCompletionChunkChoice['finish_reason'] = null,\n usage?: OpenAICompletionUsage\n): OpenAIChatCompletionChunk {\n return {\n id: context.requestId,\n object: 'chat.completion.chunk',\n created: context.created,\n model: context.model,\n choices: [{ index: 0, delta, finish_reason: finishReason }],\n ...(usage ? { usage } : {}),\n };\n}\n\nexport function createChatCompletionUsageChunk(\n context: OpenAIResponseContext,\n usage: OpenAICompletionUsage\n): OpenAIChatCompletionChunk {\n return {\n id: context.requestId,\n object: 'chat.completion.chunk',\n created: context.created,\n model: context.model,\n choices: [],\n usage,\n };\n}\n\nexport async function writeOpenAISSE(\n writer: OpenAICompatibleWriter,\n data: OpenAIChatCompletionChunk | '[DONE]'\n): Promise<void> {\n await writer.write(\n `data: ${data === '[DONE]' ? data : JSON.stringify(data)}\\n\\n`\n );\n}\n\nfunction getTextParts(\n data: t.MessageDeltaEvent | t.ReasoningDeltaEvent\n): string[] {\n const parts = data.delta.content ?? [];\n const text: string[] = [];\n for (const part of parts) {\n if ('text' in part && typeof part.text === 'string') {\n text.push(part.text);\n continue;\n }\n if ('think' in part && typeof part.think === 'string') {\n text.push(part.think);\n }\n }\n return text;\n}\n\nasync function emitAssistantRoleChunk(\n config: OpenAIHandlerConfig\n): Promise<void> {\n if (config.tracker.hasRole) {\n return;\n }\n config.tracker.hasRole = true;\n await writeOpenAISSE(\n config.writer,\n createChatCompletionChunk(config.context, { role: 'assistant' })\n );\n}\n\nasync function emitToolCallChunk(params: {\n config: OpenAIHandlerConfig;\n stepId: string;\n toolCall: OpenAIToolCallFragment;\n fallbackIndex: number;\n completed: boolean;\n}): Promise<void> {\n const { config, stepId, toolCall, fallbackIndex, completed } = params;\n const index = getToolCallIndex(toolCall, fallbackIndex);\n const stepToolCalls = getStepToolCalls(config.tracker, stepId);\n const existing = stepToolCalls.get(index);\n const current = existing ?? {\n id: toolCall.id ?? '',\n type: 'function' as const,\n function: { name: '', arguments: '' },\n };\n const name = getToolCallName(toolCall);\n const args = getToolCallArguments(toolCall);\n const idChanged =\n toolCall.id != null && toolCall.id !== '' && current.id !== toolCall.id;\n const nameChanged = name !== '' && current.function.name !== name;\n let argumentDelta = '';\n if (completed) {\n if (args !== '' && args !== current.function.arguments) {\n argumentDelta = args.startsWith(current.function.arguments)\n ? args.slice(current.function.arguments.length)\n : args;\n current.function.arguments = args;\n }\n } else if (args !== '') {\n argumentDelta = args;\n current.function.arguments += args;\n }\n if (toolCall.id != null && toolCall.id !== '') {\n current.id = toolCall.id;\n }\n if (name !== '') {\n current.function.name = name;\n }\n stepToolCalls.set(index, current);\n config.tracker.toolCalls.set(index, current);\n if (!idChanged && !nameChanged && argumentDelta === '' && existing) {\n return;\n }\n config.tracker.lastChunkKind = 'tool_call';\n const functionDelta: { name?: string; arguments?: string } = {};\n if (nameChanged || (!existing && current.function.name !== '')) {\n functionDelta.name = current.function.name;\n }\n if (argumentDelta !== '') {\n functionDelta.arguments = argumentDelta;\n }\n await emitAssistantRoleChunk(config);\n await writeOpenAISSE(\n config.writer,\n createChatCompletionChunk(config.context, {\n tool_calls: [\n {\n index,\n ...(current.id !== '' ? { id: current.id } : {}),\n type: 'function',\n ...(functionDelta.name != null || functionDelta.arguments != null\n ? { function: functionDelta }\n : {}),\n },\n ],\n })\n );\n}\n\nexport function createOpenAIHandlers(\n config: OpenAIHandlerConfig\n): Record<string, t.EventHandler> {\n return {\n [GraphEvents.ON_MESSAGE_DELTA]: {\n handle: async (_event, data): Promise<void> => {\n for (const text of getTextParts(data as t.MessageDeltaEvent)) {\n config.tracker.hasText = true;\n config.tracker.lastChunkKind = 'text';\n await emitAssistantRoleChunk(config);\n await writeOpenAISSE(\n config.writer,\n createChatCompletionChunk(config.context, { content: text })\n );\n }\n },\n },\n [GraphEvents.ON_REASONING_DELTA]: {\n handle: async (_event, data): Promise<void> => {\n for (const text of getTextParts(data as t.ReasoningDeltaEvent)) {\n config.tracker.hasReasoning = true;\n config.tracker.lastChunkKind = 'reasoning';\n await emitAssistantRoleChunk(config);\n await writeOpenAISSE(\n config.writer,\n createChatCompletionChunk(config.context, { reasoning: text })\n );\n }\n },\n },\n [GraphEvents.ON_RUN_STEP_DELTA]: {\n handle: async (_event, data): Promise<void> => {\n const runStepDelta = data as t.RunStepDeltaEvent;\n const delta = runStepDelta.delta;\n if (delta.type !== 'tool_calls') {\n return;\n }\n const toolCalls = delta.tool_calls ?? [];\n for (let index = 0; index < toolCalls.length; index++) {\n await emitToolCallChunk({\n config,\n stepId: runStepDelta.id,\n toolCall: toolCalls[index],\n fallbackIndex: index,\n completed: false,\n });\n }\n },\n },\n [GraphEvents.ON_RUN_STEP]: {\n handle: async (_event, data): Promise<void> => {\n const runStep = data as t.RunStep;\n if (runStep.stepDetails.type !== 'tool_calls') {\n return;\n }\n const toolCalls = runStep.stepDetails.tool_calls ?? [];\n for (let index = 0; index < toolCalls.length; index++) {\n await emitToolCallChunk({\n config,\n stepId: runStep.id,\n toolCall: toolCalls[index],\n fallbackIndex: index,\n completed: true,\n });\n }\n },\n },\n [GraphEvents.CHAT_MODEL_END]: {\n handle: (_event, data): void => {\n const usage = (data as t.ModelEndData)?.output?.usage_metadata as\n | Partial<UsageMetadata>\n | undefined;\n if (!usage) {\n return;\n }\n config.tracker.usage.promptTokens += getTokenCount(usage.input_tokens);\n config.tracker.usage.completionTokens += getTokenCount(\n usage.output_tokens\n );\n config.tracker.usage.reasoningTokens += getReasoningTokenCount(usage);\n },\n },\n };\n}\n\nexport async function sendOpenAIFinalChunk(\n config: OpenAIHandlerConfig,\n finishReason?: OpenAIChatCompletionChunkChoice['finish_reason']\n): Promise<void> {\n const resolvedFinishReason =\n finishReason ??\n (config.tracker.lastChunkKind === 'tool_call' ? 'tool_calls' : 'stop');\n const usage: OpenAICompletionUsage = {\n prompt_tokens: config.tracker.usage.promptTokens,\n completion_tokens: config.tracker.usage.completionTokens,\n total_tokens:\n config.tracker.usage.promptTokens + config.tracker.usage.completionTokens,\n };\n if (config.tracker.usage.reasoningTokens > 0) {\n usage.completion_tokens_details = {\n reasoning_tokens: config.tracker.usage.reasoningTokens,\n };\n }\n await emitAssistantRoleChunk(config);\n await writeOpenAISSE(\n config.writer,\n createChatCompletionChunk(config.context, {}, resolvedFinishReason)\n );\n await writeOpenAISSE(\n config.writer,\n createChatCompletionUsageChunk(config.context, usage)\n );\n await writeOpenAISSE(config.writer, '[DONE]');\n}\n"],"names":["GraphEvents"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../src/openai/index.ts"],"sourcesContent":["import type { UsageMetadata } from '@langchain/core/messages';\nimport type * as t from '@/types';\nimport { GraphEvents } from '@/common';\n\nexport interface OpenAICompatibleWriter {\n write(data: string): void | Promise<void>;\n}\n\nexport interface OpenAIResponseContext {\n requestId: string;\n model: string;\n created: number;\n}\n\nexport interface OpenAICompletionUsage {\n prompt_tokens: number;\n completion_tokens: number;\n total_tokens: number;\n completion_tokens_details?: {\n reasoning_tokens?: number;\n };\n}\n\nexport interface OpenAIToolCall {\n id: string;\n type: 'function';\n function: {\n name: string;\n arguments: string;\n };\n}\n\nexport interface OpenAIChatCompletionChunkChoice {\n index: number;\n delta: {\n role?: 'assistant';\n content?: string | null;\n reasoning?: string | null;\n tool_calls?: Array<{\n index: number;\n id?: string;\n type?: 'function';\n function?: {\n name?: string;\n arguments?: string;\n };\n }>;\n };\n finish_reason: 'stop' | 'length' | 'tool_calls' | 'content_filter' | null;\n}\n\nexport interface OpenAIChatCompletionChunk {\n id: string;\n object: 'chat.completion.chunk';\n created: number;\n model: string;\n choices: OpenAIChatCompletionChunkChoice[];\n usage?: OpenAICompletionUsage;\n}\n\nexport interface OpenAIStreamTracker {\n hasRole: boolean;\n hasText: boolean;\n hasReasoning: boolean;\n lastChunkKind?: 'text' | 'reasoning' | 'tool_call';\n toolCalls: Map<number, OpenAIToolCall>;\n toolCallsByStep?: Map<string, Map<number, OpenAIToolCall>>;\n usage: {\n promptTokens: number;\n completionTokens: number;\n reasoningTokens: number;\n };\n}\n\nexport interface OpenAIHandlerConfig {\n writer: OpenAICompatibleWriter;\n context: OpenAIResponseContext;\n tracker: OpenAIStreamTracker;\n}\n\ninterface OpenAIToolCallFragment {\n index?: number;\n id?: string;\n name?: string;\n args?: string | object;\n function?: {\n name?: string;\n arguments?: string | object;\n };\n}\n\nexport function createOpenAIStreamTracker(): OpenAIStreamTracker {\n return {\n hasRole: false,\n hasText: false,\n hasReasoning: false,\n toolCalls: new Map(),\n toolCallsByStep: new Map(),\n usage: {\n promptTokens: 0,\n completionTokens: 0,\n reasoningTokens: 0,\n },\n };\n}\n\nfunction getTokenCount(value: number | null | undefined): number {\n return typeof value === 'number' && Number.isFinite(value) ? value : 0;\n}\n\nfunction getReasoningTokenCount(usage: Partial<UsageMetadata>): number {\n return getTokenCount(usage.output_token_details?.reasoning);\n}\n\nfunction getToolCallIndex(\n toolCall: OpenAIToolCallFragment,\n fallbackIndex: number\n): number {\n return typeof toolCall.index === 'number' ? toolCall.index : fallbackIndex;\n}\n\nfunction getToolCallName(toolCall: OpenAIToolCallFragment): string {\n return toolCall.name ?? toolCall.function?.name ?? '';\n}\n\nfunction getToolCallArguments(toolCall: OpenAIToolCallFragment): string {\n const args = toolCall.args ?? toolCall.function?.arguments;\n if (args == null) {\n return '';\n }\n if (typeof args === 'string') {\n return args;\n }\n return JSON.stringify(args);\n}\n\nfunction getStepToolCalls(\n tracker: OpenAIStreamTracker,\n stepId: string\n): Map<number, OpenAIToolCall> {\n const toolCallsByStep = tracker.toolCallsByStep ?? new Map();\n tracker.toolCallsByStep = toolCallsByStep;\n const existing = toolCallsByStep.get(stepId);\n if (existing != null) {\n return existing;\n }\n const stepToolCalls = new Map<number, OpenAIToolCall>();\n toolCallsByStep.set(stepId, stepToolCalls);\n return stepToolCalls;\n}\n\nexport function createChatCompletionChunk(\n context: OpenAIResponseContext,\n delta: OpenAIChatCompletionChunkChoice['delta'],\n finishReason: OpenAIChatCompletionChunkChoice['finish_reason'] = null,\n usage?: OpenAICompletionUsage\n): OpenAIChatCompletionChunk {\n return {\n id: context.requestId,\n object: 'chat.completion.chunk',\n created: context.created,\n model: context.model,\n choices: [{ index: 0, delta, finish_reason: finishReason }],\n ...(usage ? { usage } : {}),\n };\n}\n\nexport function createChatCompletionUsageChunk(\n context: OpenAIResponseContext,\n usage: OpenAICompletionUsage\n): OpenAIChatCompletionChunk {\n return {\n id: context.requestId,\n object: 'chat.completion.chunk',\n created: context.created,\n model: context.model,\n choices: [],\n usage,\n };\n}\n\nexport async function writeOpenAISSE(\n writer: OpenAICompatibleWriter,\n data: OpenAIChatCompletionChunk | '[DONE]'\n): Promise<void> {\n await writer.write(\n `data: ${data === '[DONE]' ? data : JSON.stringify(data)}\\n\\n`\n );\n}\n\nfunction getTextParts(\n data: t.MessageDeltaEvent | t.ReasoningDeltaEvent\n): string[] {\n const parts = data.delta.content ?? [];\n const text: string[] = [];\n for (const part of parts) {\n if ('text' in part && typeof part.text === 'string') {\n text.push(part.text);\n continue;\n }\n if ('think' in part && typeof part.think === 'string') {\n text.push(part.think);\n }\n }\n return text;\n}\n\nasync function emitAssistantRoleChunk(\n config: OpenAIHandlerConfig\n): Promise<void> {\n if (config.tracker.hasRole) {\n return;\n }\n config.tracker.hasRole = true;\n await writeOpenAISSE(\n config.writer,\n createChatCompletionChunk(config.context, { role: 'assistant' })\n );\n}\n\nasync function emitToolCallChunk(params: {\n config: OpenAIHandlerConfig;\n stepId: string;\n toolCall: OpenAIToolCallFragment;\n fallbackIndex: number;\n completed: boolean;\n}): Promise<void> {\n const { config, stepId, toolCall, fallbackIndex, completed } = params;\n const index = getToolCallIndex(toolCall, fallbackIndex);\n const stepToolCalls = getStepToolCalls(config.tracker, stepId);\n const existing = stepToolCalls.get(index);\n const current = existing ?? {\n id: toolCall.id ?? '',\n type: 'function' as const,\n function: { name: '', arguments: '' },\n };\n const name = getToolCallName(toolCall);\n const args = getToolCallArguments(toolCall);\n const idChanged =\n toolCall.id != null && toolCall.id !== '' && current.id !== toolCall.id;\n const nameChanged = name !== '' && current.function.name !== name;\n let argumentDelta = '';\n if (completed) {\n if (args !== '' && args !== current.function.arguments) {\n argumentDelta = args.startsWith(current.function.arguments)\n ? args.slice(current.function.arguments.length)\n : args;\n current.function.arguments = args;\n }\n } else if (args !== '') {\n argumentDelta = args;\n current.function.arguments += args;\n }\n if (toolCall.id != null && toolCall.id !== '') {\n current.id = toolCall.id;\n }\n if (name !== '') {\n current.function.name = name;\n }\n stepToolCalls.set(index, current);\n config.tracker.toolCalls.set(index, current);\n if (!idChanged && !nameChanged && argumentDelta === '' && existing) {\n return;\n }\n config.tracker.lastChunkKind = 'tool_call';\n const functionDelta: { name?: string; arguments?: string } = {};\n if (nameChanged || (!existing && current.function.name !== '')) {\n functionDelta.name = current.function.name;\n }\n if (argumentDelta !== '') {\n functionDelta.arguments = argumentDelta;\n }\n await emitAssistantRoleChunk(config);\n await writeOpenAISSE(\n config.writer,\n createChatCompletionChunk(config.context, {\n tool_calls: [\n {\n index,\n ...(current.id !== '' ? { id: current.id } : {}),\n type: 'function',\n ...(functionDelta.name != null || functionDelta.arguments != null\n ? { function: functionDelta }\n : {}),\n },\n ],\n })\n );\n}\n\nexport function createOpenAIHandlers(\n config: OpenAIHandlerConfig\n): Record<string, t.EventHandler> {\n return {\n [GraphEvents.ON_MESSAGE_DELTA]: {\n handle: async (_event, data): Promise<void> => {\n for (const text of getTextParts(data as t.MessageDeltaEvent)) {\n config.tracker.hasText = true;\n config.tracker.lastChunkKind = 'text';\n await emitAssistantRoleChunk(config);\n await writeOpenAISSE(\n config.writer,\n createChatCompletionChunk(config.context, { content: text })\n );\n }\n },\n },\n [GraphEvents.ON_REASONING_DELTA]: {\n handle: async (_event, data): Promise<void> => {\n for (const text of getTextParts(data as t.ReasoningDeltaEvent)) {\n config.tracker.hasReasoning = true;\n config.tracker.lastChunkKind = 'reasoning';\n await emitAssistantRoleChunk(config);\n await writeOpenAISSE(\n config.writer,\n createChatCompletionChunk(config.context, { reasoning: text })\n );\n }\n },\n },\n [GraphEvents.ON_RUN_STEP_DELTA]: {\n handle: async (_event, data): Promise<void> => {\n const runStepDelta = data as t.RunStepDeltaEvent;\n const delta = runStepDelta.delta;\n if (delta.type !== 'tool_calls') {\n return;\n }\n const toolCalls = delta.tool_calls ?? [];\n for (let index = 0; index < toolCalls.length; index++) {\n await emitToolCallChunk({\n config,\n stepId: runStepDelta.id,\n toolCall: toolCalls[index],\n fallbackIndex: index,\n completed: false,\n });\n }\n },\n },\n [GraphEvents.ON_RUN_STEP]: {\n handle: async (_event, data): Promise<void> => {\n const runStep = data as t.RunStep;\n if (runStep.stepDetails.type !== 'tool_calls') {\n return;\n }\n const toolCalls = runStep.stepDetails.tool_calls ?? [];\n for (let index = 0; index < toolCalls.length; index++) {\n await emitToolCallChunk({\n config,\n stepId: runStep.id,\n toolCall: toolCalls[index],\n fallbackIndex: index,\n completed: true,\n });\n }\n },\n },\n [GraphEvents.CHAT_MODEL_END]: {\n handle: (_event, data): void => {\n const usage = (data as t.ModelEndData)?.output?.usage_metadata as\n | Partial<UsageMetadata>\n | undefined;\n if (!usage) {\n return;\n }\n config.tracker.usage.promptTokens += getTokenCount(usage.input_tokens);\n config.tracker.usage.completionTokens += getTokenCount(\n usage.output_tokens\n );\n config.tracker.usage.reasoningTokens += getReasoningTokenCount(usage);\n },\n },\n };\n}\n\nexport async function sendOpenAIFinalChunk(\n config: OpenAIHandlerConfig,\n finishReason?: OpenAIChatCompletionChunkChoice['finish_reason']\n): Promise<void> {\n const resolvedFinishReason =\n finishReason ??\n (config.tracker.lastChunkKind === 'tool_call' ? 'tool_calls' : 'stop');\n const usage: OpenAICompletionUsage = {\n prompt_tokens: config.tracker.usage.promptTokens,\n completion_tokens: config.tracker.usage.completionTokens,\n total_tokens:\n config.tracker.usage.promptTokens + config.tracker.usage.completionTokens,\n };\n if (config.tracker.usage.reasoningTokens > 0) {\n usage.completion_tokens_details = {\n reasoning_tokens: config.tracker.usage.reasoningTokens,\n };\n }\n await emitAssistantRoleChunk(config);\n await writeOpenAISSE(\n config.writer,\n createChatCompletionChunk(config.context, {}, resolvedFinishReason)\n );\n await writeOpenAISSE(\n config.writer,\n createChatCompletionUsageChunk(config.context, usage)\n );\n await writeOpenAISSE(config.writer, '[DONE]');\n}\n"],"names":["GraphEvents"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../../src/responses/index.ts"],"sourcesContent":["import { GraphEvents } from '@/common';\nimport type { UsageMetadata } from '@langchain/core/messages';\nimport type * as t from '@/types';\n\nexport interface ResponsesCompatibleWriter {\n write(data: string): void | Promise<void>;\n}\n\nexport type ResponseStatus =\n | 'in_progress'\n | 'completed'\n | 'failed'\n | 'incomplete';\nexport type ItemStatus = 'in_progress' | 'incomplete' | 'completed';\n\nexport interface ResponseContext {\n responseId: string;\n model: string;\n createdAt: number;\n previousResponseId?: string;\n instructions?: string;\n}\n\nexport interface ResponseOutputTextContent {\n type: 'output_text';\n text: string;\n annotations: [];\n logprobs: [];\n}\n\nexport interface ResponseMessageItem {\n type: 'message';\n id: string;\n role: 'assistant';\n status: ItemStatus;\n content: ResponseOutputTextContent[];\n}\n\nexport interface ResponseFunctionCallItem {\n type: 'function_call';\n id: string;\n call_id: string;\n name: string;\n arguments: string;\n status: ItemStatus;\n}\n\nexport interface ResponseReasoningItem {\n type: 'reasoning';\n id: string;\n status: ItemStatus;\n content: Array<{ type: 'reasoning_text'; text: string }>;\n summary: [];\n}\n\nexport type ResponseOutputItem =\n | ResponseMessageItem\n | ResponseFunctionCallItem\n | ResponseReasoningItem;\n\nexport interface ResponseObject {\n id: string;\n object: 'response';\n created_at: number;\n completed_at: number | null;\n status: ResponseStatus;\n model: string;\n previous_response_id: string | null;\n instructions: string | null;\n output: ResponseOutputItem[];\n error: { type: string; message: string; code?: string } | null;\n usage: {\n input_tokens: number;\n output_tokens: number;\n total_tokens: number;\n } | null;\n}\n\nexport interface ResponseEvent {\n type: string;\n sequence_number: number;\n [key: string]: unknown;\n}\n\nexport interface ResponseTracker {\n sequenceNumber: number;\n items: ResponseOutputItem[];\n message: ResponseMessageItem | undefined;\n reasoning: ResponseReasoningItem | undefined;\n functionCalls: Map<string, ResponseFunctionCallItem>;\n functionCallsByStep: Map<string, Array<ResponseFunctionCallItem | undefined>>;\n responseCreated: boolean;\n usage: {\n inputTokens: number;\n outputTokens: number;\n };\n nextSequence(): number;\n}\n\nexport interface ResponsesHandlerConfig {\n writer: ResponsesCompatibleWriter;\n context: ResponseContext;\n tracker: ResponseTracker;\n}\n\nlet responseItemId = 0;\n\nfunction createItemId(prefix: string): string {\n return `${prefix}_${Date.now().toString(36)}${(responseItemId++).toString(36)}`;\n}\n\nexport function createResponseTracker(): ResponseTracker {\n const tracker: ResponseTracker = {\n sequenceNumber: 0,\n items: [],\n message: undefined,\n reasoning: undefined,\n functionCalls: new Map(),\n functionCallsByStep: new Map(),\n responseCreated: false,\n usage: {\n inputTokens: 0,\n outputTokens: 0,\n },\n nextSequence: () => tracker.sequenceNumber++,\n };\n return tracker;\n}\n\nfunction getTokenCount(value: number | null | undefined): number {\n return typeof value === 'number' && Number.isFinite(value) ? value : 0;\n}\n\ninterface ResponseToolCallFragment {\n index?: number;\n id?: string;\n name?: string;\n args?: string | object;\n function?: {\n name?: string;\n arguments?: string | object;\n };\n}\n\nfunction getToolCallIndex(\n toolCall: ResponseToolCallFragment,\n fallbackIndex: number\n): number {\n return typeof toolCall.index === 'number' ? toolCall.index : fallbackIndex;\n}\n\nfunction getToolCallPositionKey(\n stepId: string,\n toolCall: ResponseToolCallFragment,\n fallbackIndex: number\n): string {\n const index = getToolCallIndex(toolCall, fallbackIndex);\n if (stepId !== '') {\n return `${stepId}:${index}`;\n }\n return `tool:${index}`;\n}\n\nfunction getToolCallIdKey(\n toolCall: ResponseToolCallFragment\n): string | undefined {\n return toolCall.id != null && toolCall.id !== '' ? toolCall.id : undefined;\n}\n\nfunction getExistingFunctionCall(\n config: ResponsesHandlerConfig,\n idKey: string | undefined,\n positionKey: string | undefined,\n stepId: string,\n toolCall: ResponseToolCallFragment\n): ResponseFunctionCallItem | undefined {\n const keyed =\n idKey == null\n ? undefined\n : (config.tracker.functionCalls.get(idKey) ??\n (positionKey == null\n ? undefined\n : config.tracker.functionCalls.get(positionKey)));\n if (keyed != null) {\n return keyed;\n }\n const positioned =\n positionKey == null\n ? undefined\n : config.tracker.functionCalls.get(positionKey);\n if (positioned != null) {\n return positioned;\n }\n if (stepId === '') {\n return undefined;\n }\n return findFunctionCallByStep(config, stepId, toolCall);\n}\n\nfunction findFunctionCallByStep(\n config: ResponsesHandlerConfig,\n stepId: string,\n toolCall: ResponseToolCallFragment\n): ResponseFunctionCallItem | undefined {\n const items = config.tracker.functionCallsByStep.get(stepId);\n if (items == null) {\n return undefined;\n }\n const index = typeof toolCall.index === 'number' ? toolCall.index : undefined;\n if (index != null) {\n return items[index];\n }\n const name = getToolCallName(toolCall);\n let fallback: ResponseFunctionCallItem | undefined;\n for (const item of items) {\n if (item == null || item.status === 'completed') {\n continue;\n }\n if (name !== '' && item.name !== name) {\n continue;\n }\n if (fallback != null) {\n return undefined;\n }\n fallback = item;\n }\n return fallback;\n}\n\nfunction trackFunctionCallKeys(\n config: ResponsesHandlerConfig,\n item: ResponseFunctionCallItem,\n idKey: string | undefined,\n positionKey: string\n): void {\n config.tracker.functionCalls.set(positionKey, item);\n if (idKey != null) {\n config.tracker.functionCalls.set(idKey, item);\n }\n}\n\nfunction trackFunctionCallStep(\n config: ResponsesHandlerConfig,\n stepId: string,\n item: ResponseFunctionCallItem,\n fallbackIndex: number\n): void {\n if (stepId === '') {\n return;\n }\n const items = config.tracker.functionCallsByStep.get(stepId) ?? [];\n items[fallbackIndex] = item;\n config.tracker.functionCallsByStep.set(stepId, items);\n}\n\nfunction getToolCallName(toolCall: ResponseToolCallFragment): string {\n return toolCall.name ?? toolCall.function?.name ?? '';\n}\n\nfunction getToolCallArguments(toolCall: ResponseToolCallFragment): string {\n const args = toolCall.args ?? toolCall.function?.arguments;\n if (args == null) {\n return '';\n }\n if (typeof args === 'string') {\n return args;\n }\n return JSON.stringify(args);\n}\n\nasync function ensureFunctionCall(\n config: ResponsesHandlerConfig,\n stepId: string,\n toolCall: ResponseToolCallFragment,\n fallbackIndex: number\n): Promise<ResponseFunctionCallItem> {\n await ensureResponseCreated(config);\n const positionKey = getToolCallPositionKey(stepId, toolCall, fallbackIndex);\n const idKey = getToolCallIdKey(toolCall);\n const existing = getExistingFunctionCall(\n config,\n idKey,\n positionKey,\n stepId,\n toolCall\n );\n const toolCallIndex = getToolCallIndex(toolCall, fallbackIndex);\n const name = getToolCallName(toolCall);\n if (existing) {\n trackFunctionCallKeys(config, existing, idKey, positionKey);\n trackFunctionCallStep(config, stepId, existing, toolCallIndex);\n if (idKey != null) {\n existing.call_id = idKey;\n }\n if (name !== '') {\n existing.name = name;\n }\n return existing;\n }\n const item: ResponseFunctionCallItem = {\n type: 'function_call',\n id: createItemId('fc'),\n call_id: idKey ?? positionKey,\n name,\n arguments: '',\n status: 'in_progress',\n };\n trackFunctionCallKeys(config, item, idKey, positionKey);\n trackFunctionCallStep(config, stepId, item, toolCallIndex);\n config.tracker.items.push(item);\n await writeResponseEvent(config.writer, {\n type: 'response.output_item.added',\n sequence_number: config.tracker.nextSequence(),\n output_index: config.tracker.items.length - 1,\n item,\n });\n return item;\n}\n\nasync function emitFunctionCallArgumentsDelta(params: {\n config: ResponsesHandlerConfig;\n item: ResponseFunctionCallItem;\n delta: string;\n}): Promise<void> {\n if (params.delta === '') {\n return;\n }\n params.item.arguments += params.delta;\n await writeResponseEvent(params.config.writer, {\n type: 'response.function_call_arguments.delta',\n sequence_number: params.config.tracker.nextSequence(),\n item_id: params.item.id,\n output_index: params.config.tracker.items.indexOf(params.item),\n call_id: params.item.call_id,\n delta: params.delta,\n });\n}\n\nasync function emitFunctionCallArgumentsDone(\n config: ResponsesHandlerConfig,\n item: ResponseFunctionCallItem\n): Promise<void> {\n await writeResponseEvent(config.writer, {\n type: 'response.function_call_arguments.done',\n sequence_number: config.tracker.nextSequence(),\n item_id: item.id,\n output_index: config.tracker.items.indexOf(item),\n call_id: item.call_id,\n name: item.name,\n arguments: item.arguments,\n });\n}\n\nasync function completeFunctionCall(\n config: ResponsesHandlerConfig,\n stepId: string,\n toolCall: ResponseToolCallFragment\n): Promise<void> {\n const fallbackIndex =\n typeof toolCall.index === 'number' ? toolCall.index : undefined;\n const positionKey =\n fallbackIndex == null\n ? undefined\n : getToolCallPositionKey(stepId, toolCall, fallbackIndex);\n const item =\n getExistingFunctionCall(\n config,\n getToolCallIdKey(toolCall),\n positionKey,\n stepId,\n toolCall\n ) ??\n (await ensureFunctionCall(config, stepId, toolCall, fallbackIndex ?? 0));\n if (item.status === 'completed') {\n return;\n }\n const finalArguments = getToolCallArguments(toolCall);\n if (\n finalArguments !== '' &&\n finalArguments !== item.arguments &&\n finalArguments.startsWith(item.arguments)\n ) {\n await emitFunctionCallArgumentsDelta({\n config,\n item,\n delta: finalArguments.slice(item.arguments.length),\n });\n } else if (finalArguments !== '') {\n item.arguments = finalArguments;\n }\n await emitFunctionCallArgumentsDone(config, item);\n item.status = 'completed';\n await writeResponseEvent(config.writer, {\n type: 'response.output_item.done',\n sequence_number: config.tracker.nextSequence(),\n output_index: config.tracker.items.indexOf(item),\n item,\n });\n}\n\nexport function buildResponse(\n context: ResponseContext,\n tracker: ResponseTracker,\n status: ResponseStatus = 'in_progress'\n): ResponseObject {\n const completed = status === 'completed';\n return {\n id: context.responseId,\n object: 'response',\n created_at: context.createdAt,\n completed_at: completed ? Math.floor(Date.now() / 1000) : null,\n status,\n model: context.model,\n previous_response_id: context.previousResponseId ?? null,\n instructions: context.instructions ?? null,\n output: tracker.items,\n error: null,\n usage: completed\n ? {\n input_tokens: tracker.usage.inputTokens,\n output_tokens: tracker.usage.outputTokens,\n total_tokens: tracker.usage.inputTokens + tracker.usage.outputTokens,\n }\n : null,\n };\n}\n\nexport async function writeResponseEvent(\n writer: ResponsesCompatibleWriter,\n event: ResponseEvent\n): Promise<void> {\n await writer.write(`event: ${event.type}\\n`);\n await writer.write(`data: ${JSON.stringify(event)}\\n\\n`);\n}\n\nexport async function writeResponsesDone(\n writer: ResponsesCompatibleWriter\n): Promise<void> {\n await writer.write('data: [DONE]\\n\\n');\n}\n\nexport async function ensureResponseCreated(\n config: ResponsesHandlerConfig\n): Promise<void> {\n if (config.tracker.responseCreated) {\n return;\n }\n config.tracker.responseCreated = true;\n await writeResponseEvent(config.writer, {\n type: 'response.created',\n sequence_number: config.tracker.nextSequence(),\n response: buildResponse(config.context, config.tracker),\n });\n}\n\nasync function emitOutputContentDone(\n config: ResponsesHandlerConfig,\n item: ResponseMessageItem | ResponseReasoningItem\n): Promise<void> {\n const outputIndex = config.tracker.items.indexOf(item);\n if (item.type === 'message') {\n await writeResponseEvent(config.writer, {\n type: 'response.output_text.done',\n sequence_number: config.tracker.nextSequence(),\n item_id: item.id,\n output_index: outputIndex,\n content_index: 0,\n text: item.content[0].text,\n });\n return;\n }\n await writeResponseEvent(config.writer, {\n type: 'response.reasoning_text.done',\n sequence_number: config.tracker.nextSequence(),\n item_id: item.id,\n output_index: outputIndex,\n content_index: 0,\n text: item.content[0].text,\n });\n}\n\nasync function ensureMessage(\n config: ResponsesHandlerConfig\n): Promise<ResponseMessageItem> {\n await ensureResponseCreated(config);\n if (config.tracker.message) {\n return config.tracker.message;\n }\n const item: ResponseMessageItem = {\n type: 'message',\n id: createItemId('msg'),\n role: 'assistant',\n status: 'in_progress',\n content: [{ type: 'output_text', text: '', annotations: [], logprobs: [] }],\n };\n config.tracker.message = item;\n config.tracker.items.push(item);\n await writeResponseEvent(config.writer, {\n type: 'response.output_item.added',\n sequence_number: config.tracker.nextSequence(),\n output_index: config.tracker.items.length - 1,\n item,\n });\n return item;\n}\n\nasync function ensureReasoning(\n config: ResponsesHandlerConfig\n): Promise<ResponseReasoningItem> {\n await ensureResponseCreated(config);\n if (config.tracker.reasoning) {\n return config.tracker.reasoning;\n }\n const item: ResponseReasoningItem = {\n type: 'reasoning',\n id: createItemId('reason'),\n status: 'in_progress',\n content: [{ type: 'reasoning_text', text: '' }],\n summary: [],\n };\n config.tracker.reasoning = item;\n config.tracker.items.push(item);\n await writeResponseEvent(config.writer, {\n type: 'response.output_item.added',\n sequence_number: config.tracker.nextSequence(),\n output_index: config.tracker.items.length - 1,\n item,\n });\n return item;\n}\n\nexport function createResponsesEventHandlers(\n config: ResponsesHandlerConfig\n): Record<string, t.EventHandler> {\n return {\n [GraphEvents.ON_MESSAGE_DELTA]: {\n handle: async (_event, data): Promise<void> => {\n const item = await ensureMessage(config);\n for (const part of (data as t.MessageDeltaEvent).delta.content ?? []) {\n if (!('text' in part) || typeof part.text !== 'string') {\n continue;\n }\n item.content[0].text += part.text;\n await writeResponseEvent(config.writer, {\n type: 'response.output_text.delta',\n sequence_number: config.tracker.nextSequence(),\n item_id: item.id,\n output_index: config.tracker.items.indexOf(item),\n content_index: 0,\n delta: part.text,\n });\n }\n },\n },\n [GraphEvents.ON_REASONING_DELTA]: {\n handle: async (_event, data): Promise<void> => {\n const item = await ensureReasoning(config);\n for (const part of (data as t.ReasoningDeltaEvent).delta.content ??\n []) {\n let text: string | undefined;\n if ('think' in part && typeof part.think === 'string') {\n text = part.think;\n } else if ('text' in part && typeof part.text === 'string') {\n text = part.text;\n }\n if (typeof text !== 'string') {\n continue;\n }\n item.content[0].text += text;\n await writeResponseEvent(config.writer, {\n type: 'response.reasoning_text.delta',\n sequence_number: config.tracker.nextSequence(),\n item_id: item.id,\n output_index: config.tracker.items.indexOf(item),\n content_index: 0,\n delta: text,\n });\n }\n },\n },\n [GraphEvents.ON_RUN_STEP]: {\n handle: async (_event, data): Promise<void> => {\n const runStep = data as t.RunStep;\n if (runStep.stepDetails.type !== 'tool_calls') {\n return;\n }\n const toolCalls = runStep.stepDetails.tool_calls ?? [];\n for (let index = 0; index < toolCalls.length; index++) {\n await ensureFunctionCall(config, runStep.id, toolCalls[index], index);\n }\n },\n },\n [GraphEvents.ON_RUN_STEP_DELTA]: {\n handle: async (_event, data): Promise<void> => {\n const runStepDelta = data as t.RunStepDeltaEvent;\n if (runStepDelta.delta.type !== 'tool_calls') {\n return;\n }\n const toolCalls = runStepDelta.delta.tool_calls ?? [];\n for (let index = 0; index < toolCalls.length; index++) {\n const item = await ensureFunctionCall(\n config,\n runStepDelta.id,\n toolCalls[index],\n index\n );\n await emitFunctionCallArgumentsDelta({\n config,\n item,\n delta: getToolCallArguments(toolCalls[index]),\n });\n }\n },\n },\n [GraphEvents.ON_RUN_STEP_COMPLETED]: {\n handle: async (_event, data): Promise<void> => {\n const completed = data as {\n result?: {\n id?: string;\n index?: number;\n type?: string;\n tool_call?: ResponseToolCallFragment;\n };\n };\n if (!completed.result?.tool_call) {\n return;\n }\n await completeFunctionCall(\n config,\n completed.result.id ?? '',\n completed.result.tool_call\n );\n },\n },\n [GraphEvents.CHAT_MODEL_END]: {\n handle: (_event, data): void => {\n const usage = (data as t.ModelEndData)?.output?.usage_metadata as\n | Partial<UsageMetadata>\n | undefined;\n if (!usage) {\n return;\n }\n config.tracker.usage.inputTokens += getTokenCount(usage.input_tokens);\n config.tracker.usage.outputTokens += getTokenCount(usage.output_tokens);\n },\n },\n };\n}\n\nexport async function emitResponseCompleted(\n config: ResponsesHandlerConfig\n): Promise<void> {\n await ensureResponseCreated(config);\n for (const item of config.tracker.items) {\n if (item.status === 'completed') {\n continue;\n }\n if (item.type === 'message' || item.type === 'reasoning') {\n await emitOutputContentDone(config, item);\n } else {\n await emitFunctionCallArgumentsDone(config, item);\n }\n item.status = 'completed';\n await writeResponseEvent(config.writer, {\n type: 'response.output_item.done',\n sequence_number: config.tracker.nextSequence(),\n output_index: config.tracker.items.indexOf(item),\n item,\n });\n }\n await writeResponseEvent(config.writer, {\n type: 'response.completed',\n sequence_number: config.tracker.nextSequence(),\n response: buildResponse(config.context, config.tracker, 'completed'),\n });\n await writeResponsesDone(config.writer);\n}\n"],"names":["GraphEvents"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../src/responses/index.ts"],"sourcesContent":["import type { UsageMetadata } from '@langchain/core/messages';\nimport type * as t from '@/types';\nimport { GraphEvents } from '@/common';\n\nexport interface ResponsesCompatibleWriter {\n write(data: string): void | Promise<void>;\n}\n\nexport type ResponseStatus =\n | 'in_progress'\n | 'completed'\n | 'failed'\n | 'incomplete';\nexport type ItemStatus = 'in_progress' | 'incomplete' | 'completed';\n\nexport interface ResponseContext {\n responseId: string;\n model: string;\n createdAt: number;\n previousResponseId?: string;\n instructions?: string;\n}\n\nexport interface ResponseOutputTextContent {\n type: 'output_text';\n text: string;\n annotations: [];\n logprobs: [];\n}\n\nexport interface ResponseMessageItem {\n type: 'message';\n id: string;\n role: 'assistant';\n status: ItemStatus;\n content: ResponseOutputTextContent[];\n}\n\nexport interface ResponseFunctionCallItem {\n type: 'function_call';\n id: string;\n call_id: string;\n name: string;\n arguments: string;\n status: ItemStatus;\n}\n\nexport interface ResponseReasoningItem {\n type: 'reasoning';\n id: string;\n status: ItemStatus;\n content: Array<{ type: 'reasoning_text'; text: string }>;\n summary: [];\n}\n\nexport type ResponseOutputItem =\n | ResponseMessageItem\n | ResponseFunctionCallItem\n | ResponseReasoningItem;\n\nexport interface ResponseObject {\n id: string;\n object: 'response';\n created_at: number;\n completed_at: number | null;\n status: ResponseStatus;\n model: string;\n previous_response_id: string | null;\n instructions: string | null;\n output: ResponseOutputItem[];\n error: { type: string; message: string; code?: string } | null;\n usage: {\n input_tokens: number;\n output_tokens: number;\n total_tokens: number;\n } | null;\n}\n\nexport interface ResponseEvent {\n type: string;\n sequence_number: number;\n [key: string]: unknown;\n}\n\nexport interface ResponseTracker {\n sequenceNumber: number;\n items: ResponseOutputItem[];\n message: ResponseMessageItem | undefined;\n reasoning: ResponseReasoningItem | undefined;\n functionCalls: Map<string, ResponseFunctionCallItem>;\n functionCallsByStep: Map<string, Array<ResponseFunctionCallItem | undefined>>;\n responseCreated: boolean;\n usage: {\n inputTokens: number;\n outputTokens: number;\n };\n nextSequence(): number;\n}\n\nexport interface ResponsesHandlerConfig {\n writer: ResponsesCompatibleWriter;\n context: ResponseContext;\n tracker: ResponseTracker;\n}\n\nlet responseItemId = 0;\n\nfunction createItemId(prefix: string): string {\n return `${prefix}_${Date.now().toString(36)}${(responseItemId++).toString(36)}`;\n}\n\nexport function createResponseTracker(): ResponseTracker {\n const tracker: ResponseTracker = {\n sequenceNumber: 0,\n items: [],\n message: undefined,\n reasoning: undefined,\n functionCalls: new Map(),\n functionCallsByStep: new Map(),\n responseCreated: false,\n usage: {\n inputTokens: 0,\n outputTokens: 0,\n },\n nextSequence: () => tracker.sequenceNumber++,\n };\n return tracker;\n}\n\nfunction getTokenCount(value: number | null | undefined): number {\n return typeof value === 'number' && Number.isFinite(value) ? value : 0;\n}\n\ninterface ResponseToolCallFragment {\n index?: number;\n id?: string;\n name?: string;\n args?: string | object;\n function?: {\n name?: string;\n arguments?: string | object;\n };\n}\n\nfunction getToolCallIndex(\n toolCall: ResponseToolCallFragment,\n fallbackIndex: number\n): number {\n return typeof toolCall.index === 'number' ? toolCall.index : fallbackIndex;\n}\n\nfunction getToolCallPositionKey(\n stepId: string,\n toolCall: ResponseToolCallFragment,\n fallbackIndex: number\n): string {\n const index = getToolCallIndex(toolCall, fallbackIndex);\n if (stepId !== '') {\n return `${stepId}:${index}`;\n }\n return `tool:${index}`;\n}\n\nfunction getToolCallIdKey(\n toolCall: ResponseToolCallFragment\n): string | undefined {\n return toolCall.id != null && toolCall.id !== '' ? toolCall.id : undefined;\n}\n\nfunction getExistingFunctionCall(\n config: ResponsesHandlerConfig,\n idKey: string | undefined,\n positionKey: string | undefined,\n stepId: string,\n toolCall: ResponseToolCallFragment\n): ResponseFunctionCallItem | undefined {\n const keyed =\n idKey == null\n ? undefined\n : (config.tracker.functionCalls.get(idKey) ??\n (positionKey == null\n ? undefined\n : config.tracker.functionCalls.get(positionKey)));\n if (keyed != null) {\n return keyed;\n }\n const positioned =\n positionKey == null\n ? undefined\n : config.tracker.functionCalls.get(positionKey);\n if (positioned != null) {\n return positioned;\n }\n if (stepId === '') {\n return undefined;\n }\n return findFunctionCallByStep(config, stepId, toolCall);\n}\n\nfunction findFunctionCallByStep(\n config: ResponsesHandlerConfig,\n stepId: string,\n toolCall: ResponseToolCallFragment\n): ResponseFunctionCallItem | undefined {\n const items = config.tracker.functionCallsByStep.get(stepId);\n if (items == null) {\n return undefined;\n }\n const index = typeof toolCall.index === 'number' ? toolCall.index : undefined;\n if (index != null) {\n return items[index];\n }\n const name = getToolCallName(toolCall);\n let fallback: ResponseFunctionCallItem | undefined;\n for (const item of items) {\n if (item == null || item.status === 'completed') {\n continue;\n }\n if (name !== '' && item.name !== name) {\n continue;\n }\n if (fallback != null) {\n return undefined;\n }\n fallback = item;\n }\n return fallback;\n}\n\nfunction trackFunctionCallKeys(\n config: ResponsesHandlerConfig,\n item: ResponseFunctionCallItem,\n idKey: string | undefined,\n positionKey: string\n): void {\n config.tracker.functionCalls.set(positionKey, item);\n if (idKey != null) {\n config.tracker.functionCalls.set(idKey, item);\n }\n}\n\nfunction trackFunctionCallStep(\n config: ResponsesHandlerConfig,\n stepId: string,\n item: ResponseFunctionCallItem,\n fallbackIndex: number\n): void {\n if (stepId === '') {\n return;\n }\n const items = config.tracker.functionCallsByStep.get(stepId) ?? [];\n items[fallbackIndex] = item;\n config.tracker.functionCallsByStep.set(stepId, items);\n}\n\nfunction getToolCallName(toolCall: ResponseToolCallFragment): string {\n return toolCall.name ?? toolCall.function?.name ?? '';\n}\n\nfunction getToolCallArguments(toolCall: ResponseToolCallFragment): string {\n const args = toolCall.args ?? toolCall.function?.arguments;\n if (args == null) {\n return '';\n }\n if (typeof args === 'string') {\n return args;\n }\n return JSON.stringify(args);\n}\n\nasync function ensureFunctionCall(\n config: ResponsesHandlerConfig,\n stepId: string,\n toolCall: ResponseToolCallFragment,\n fallbackIndex: number\n): Promise<ResponseFunctionCallItem> {\n await ensureResponseCreated(config);\n const positionKey = getToolCallPositionKey(stepId, toolCall, fallbackIndex);\n const idKey = getToolCallIdKey(toolCall);\n const existing = getExistingFunctionCall(\n config,\n idKey,\n positionKey,\n stepId,\n toolCall\n );\n const toolCallIndex = getToolCallIndex(toolCall, fallbackIndex);\n const name = getToolCallName(toolCall);\n if (existing) {\n trackFunctionCallKeys(config, existing, idKey, positionKey);\n trackFunctionCallStep(config, stepId, existing, toolCallIndex);\n if (idKey != null) {\n existing.call_id = idKey;\n }\n if (name !== '') {\n existing.name = name;\n }\n return existing;\n }\n const item: ResponseFunctionCallItem = {\n type: 'function_call',\n id: createItemId('fc'),\n call_id: idKey ?? positionKey,\n name,\n arguments: '',\n status: 'in_progress',\n };\n trackFunctionCallKeys(config, item, idKey, positionKey);\n trackFunctionCallStep(config, stepId, item, toolCallIndex);\n config.tracker.items.push(item);\n await writeResponseEvent(config.writer, {\n type: 'response.output_item.added',\n sequence_number: config.tracker.nextSequence(),\n output_index: config.tracker.items.length - 1,\n item,\n });\n return item;\n}\n\nasync function emitFunctionCallArgumentsDelta(params: {\n config: ResponsesHandlerConfig;\n item: ResponseFunctionCallItem;\n delta: string;\n}): Promise<void> {\n if (params.delta === '') {\n return;\n }\n params.item.arguments += params.delta;\n await writeResponseEvent(params.config.writer, {\n type: 'response.function_call_arguments.delta',\n sequence_number: params.config.tracker.nextSequence(),\n item_id: params.item.id,\n output_index: params.config.tracker.items.indexOf(params.item),\n call_id: params.item.call_id,\n delta: params.delta,\n });\n}\n\nasync function emitFunctionCallArgumentsDone(\n config: ResponsesHandlerConfig,\n item: ResponseFunctionCallItem\n): Promise<void> {\n await writeResponseEvent(config.writer, {\n type: 'response.function_call_arguments.done',\n sequence_number: config.tracker.nextSequence(),\n item_id: item.id,\n output_index: config.tracker.items.indexOf(item),\n call_id: item.call_id,\n name: item.name,\n arguments: item.arguments,\n });\n}\n\nasync function completeFunctionCall(\n config: ResponsesHandlerConfig,\n stepId: string,\n toolCall: ResponseToolCallFragment\n): Promise<void> {\n const fallbackIndex =\n typeof toolCall.index === 'number' ? toolCall.index : undefined;\n const positionKey =\n fallbackIndex == null\n ? undefined\n : getToolCallPositionKey(stepId, toolCall, fallbackIndex);\n const item =\n getExistingFunctionCall(\n config,\n getToolCallIdKey(toolCall),\n positionKey,\n stepId,\n toolCall\n ) ??\n (await ensureFunctionCall(config, stepId, toolCall, fallbackIndex ?? 0));\n if (item.status === 'completed') {\n return;\n }\n const finalArguments = getToolCallArguments(toolCall);\n if (\n finalArguments !== '' &&\n finalArguments !== item.arguments &&\n finalArguments.startsWith(item.arguments)\n ) {\n await emitFunctionCallArgumentsDelta({\n config,\n item,\n delta: finalArguments.slice(item.arguments.length),\n });\n } else if (finalArguments !== '') {\n item.arguments = finalArguments;\n }\n await emitFunctionCallArgumentsDone(config, item);\n item.status = 'completed';\n await writeResponseEvent(config.writer, {\n type: 'response.output_item.done',\n sequence_number: config.tracker.nextSequence(),\n output_index: config.tracker.items.indexOf(item),\n item,\n });\n}\n\nexport function buildResponse(\n context: ResponseContext,\n tracker: ResponseTracker,\n status: ResponseStatus = 'in_progress'\n): ResponseObject {\n const completed = status === 'completed';\n return {\n id: context.responseId,\n object: 'response',\n created_at: context.createdAt,\n completed_at: completed ? Math.floor(Date.now() / 1000) : null,\n status,\n model: context.model,\n previous_response_id: context.previousResponseId ?? null,\n instructions: context.instructions ?? null,\n output: tracker.items,\n error: null,\n usage: completed\n ? {\n input_tokens: tracker.usage.inputTokens,\n output_tokens: tracker.usage.outputTokens,\n total_tokens: tracker.usage.inputTokens + tracker.usage.outputTokens,\n }\n : null,\n };\n}\n\nexport async function writeResponseEvent(\n writer: ResponsesCompatibleWriter,\n event: ResponseEvent\n): Promise<void> {\n await writer.write(`event: ${event.type}\\n`);\n await writer.write(`data: ${JSON.stringify(event)}\\n\\n`);\n}\n\nexport async function writeResponsesDone(\n writer: ResponsesCompatibleWriter\n): Promise<void> {\n await writer.write('data: [DONE]\\n\\n');\n}\n\nexport async function ensureResponseCreated(\n config: ResponsesHandlerConfig\n): Promise<void> {\n if (config.tracker.responseCreated) {\n return;\n }\n config.tracker.responseCreated = true;\n await writeResponseEvent(config.writer, {\n type: 'response.created',\n sequence_number: config.tracker.nextSequence(),\n response: buildResponse(config.context, config.tracker),\n });\n}\n\nasync function emitOutputContentDone(\n config: ResponsesHandlerConfig,\n item: ResponseMessageItem | ResponseReasoningItem\n): Promise<void> {\n const outputIndex = config.tracker.items.indexOf(item);\n if (item.type === 'message') {\n await writeResponseEvent(config.writer, {\n type: 'response.output_text.done',\n sequence_number: config.tracker.nextSequence(),\n item_id: item.id,\n output_index: outputIndex,\n content_index: 0,\n text: item.content[0].text,\n });\n return;\n }\n await writeResponseEvent(config.writer, {\n type: 'response.reasoning_text.done',\n sequence_number: config.tracker.nextSequence(),\n item_id: item.id,\n output_index: outputIndex,\n content_index: 0,\n text: item.content[0].text,\n });\n}\n\nasync function ensureMessage(\n config: ResponsesHandlerConfig\n): Promise<ResponseMessageItem> {\n await ensureResponseCreated(config);\n if (config.tracker.message) {\n return config.tracker.message;\n }\n const item: ResponseMessageItem = {\n type: 'message',\n id: createItemId('msg'),\n role: 'assistant',\n status: 'in_progress',\n content: [{ type: 'output_text', text: '', annotations: [], logprobs: [] }],\n };\n config.tracker.message = item;\n config.tracker.items.push(item);\n await writeResponseEvent(config.writer, {\n type: 'response.output_item.added',\n sequence_number: config.tracker.nextSequence(),\n output_index: config.tracker.items.length - 1,\n item,\n });\n return item;\n}\n\nasync function ensureReasoning(\n config: ResponsesHandlerConfig\n): Promise<ResponseReasoningItem> {\n await ensureResponseCreated(config);\n if (config.tracker.reasoning) {\n return config.tracker.reasoning;\n }\n const item: ResponseReasoningItem = {\n type: 'reasoning',\n id: createItemId('reason'),\n status: 'in_progress',\n content: [{ type: 'reasoning_text', text: '' }],\n summary: [],\n };\n config.tracker.reasoning = item;\n config.tracker.items.push(item);\n await writeResponseEvent(config.writer, {\n type: 'response.output_item.added',\n sequence_number: config.tracker.nextSequence(),\n output_index: config.tracker.items.length - 1,\n item,\n });\n return item;\n}\n\nexport function createResponsesEventHandlers(\n config: ResponsesHandlerConfig\n): Record<string, t.EventHandler> {\n return {\n [GraphEvents.ON_MESSAGE_DELTA]: {\n handle: async (_event, data): Promise<void> => {\n const item = await ensureMessage(config);\n for (const part of (data as t.MessageDeltaEvent).delta.content ?? []) {\n if (!('text' in part) || typeof part.text !== 'string') {\n continue;\n }\n item.content[0].text += part.text;\n await writeResponseEvent(config.writer, {\n type: 'response.output_text.delta',\n sequence_number: config.tracker.nextSequence(),\n item_id: item.id,\n output_index: config.tracker.items.indexOf(item),\n content_index: 0,\n delta: part.text,\n });\n }\n },\n },\n [GraphEvents.ON_REASONING_DELTA]: {\n handle: async (_event, data): Promise<void> => {\n const item = await ensureReasoning(config);\n for (const part of (data as t.ReasoningDeltaEvent).delta.content ??\n []) {\n let text: string | undefined;\n if ('think' in part && typeof part.think === 'string') {\n text = part.think;\n } else if ('text' in part && typeof part.text === 'string') {\n text = part.text;\n }\n if (typeof text !== 'string') {\n continue;\n }\n item.content[0].text += text;\n await writeResponseEvent(config.writer, {\n type: 'response.reasoning_text.delta',\n sequence_number: config.tracker.nextSequence(),\n item_id: item.id,\n output_index: config.tracker.items.indexOf(item),\n content_index: 0,\n delta: text,\n });\n }\n },\n },\n [GraphEvents.ON_RUN_STEP]: {\n handle: async (_event, data): Promise<void> => {\n const runStep = data as t.RunStep;\n if (runStep.stepDetails.type !== 'tool_calls') {\n return;\n }\n const toolCalls = runStep.stepDetails.tool_calls ?? [];\n for (let index = 0; index < toolCalls.length; index++) {\n await ensureFunctionCall(config, runStep.id, toolCalls[index], index);\n }\n },\n },\n [GraphEvents.ON_RUN_STEP_DELTA]: {\n handle: async (_event, data): Promise<void> => {\n const runStepDelta = data as t.RunStepDeltaEvent;\n if (runStepDelta.delta.type !== 'tool_calls') {\n return;\n }\n const toolCalls = runStepDelta.delta.tool_calls ?? [];\n for (let index = 0; index < toolCalls.length; index++) {\n const item = await ensureFunctionCall(\n config,\n runStepDelta.id,\n toolCalls[index],\n index\n );\n await emitFunctionCallArgumentsDelta({\n config,\n item,\n delta: getToolCallArguments(toolCalls[index]),\n });\n }\n },\n },\n [GraphEvents.ON_RUN_STEP_COMPLETED]: {\n handle: async (_event, data): Promise<void> => {\n const completed = data as {\n result?: {\n id?: string;\n index?: number;\n type?: string;\n tool_call?: ResponseToolCallFragment;\n };\n };\n if (!completed.result?.tool_call) {\n return;\n }\n await completeFunctionCall(\n config,\n completed.result.id ?? '',\n completed.result.tool_call\n );\n },\n },\n [GraphEvents.CHAT_MODEL_END]: {\n handle: (_event, data): void => {\n const usage = (data as t.ModelEndData)?.output?.usage_metadata as\n | Partial<UsageMetadata>\n | undefined;\n if (!usage) {\n return;\n }\n config.tracker.usage.inputTokens += getTokenCount(usage.input_tokens);\n config.tracker.usage.outputTokens += getTokenCount(usage.output_tokens);\n },\n },\n };\n}\n\nexport async function emitResponseCompleted(\n config: ResponsesHandlerConfig\n): Promise<void> {\n await ensureResponseCreated(config);\n for (const item of config.tracker.items) {\n if (item.status === 'completed') {\n continue;\n }\n if (item.type === 'message' || item.type === 'reasoning') {\n await emitOutputContentDone(config, item);\n } else {\n await emitFunctionCallArgumentsDone(config, item);\n }\n item.status = 'completed';\n await writeResponseEvent(config.writer, {\n type: 'response.output_item.done',\n sequence_number: config.tracker.nextSequence(),\n output_index: config.tracker.items.indexOf(item),\n item,\n });\n }\n await writeResponseEvent(config.writer, {\n type: 'response.completed',\n sequence_number: config.tracker.nextSequence(),\n response: buildResponse(config.context, config.tracker, 'completed'),\n });\n await writeResponsesDone(config.writer);\n}\n"],"names":["GraphEvents"],"mappings":"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"}
|
package/dist/cjs/run.cjs
CHANGED
|
@@ -1,25 +1,25 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var messages = require('@langchain/core/messages');
|
|
4
4
|
var prompts = require('@langchain/core/prompts');
|
|
5
5
|
var runnables = require('@langchain/core/runnables');
|
|
6
6
|
var openai = require('@langchain/openai');
|
|
7
|
-
var langgraph = require('@langchain/langgraph');
|
|
8
|
-
var messages = require('@langchain/core/messages');
|
|
9
7
|
var base = require('@langchain/core/callbacks/base');
|
|
8
|
+
var langgraph = require('@langchain/langgraph');
|
|
9
|
+
var langfuse = require('./langfuse.cjs');
|
|
10
|
+
var langfuseToolOutputTracing = require('./langfuseToolOutputTracing.cjs');
|
|
11
|
+
var callbacks = require('./utils/callbacks.cjs');
|
|
10
12
|
var title = require('./utils/title.cjs');
|
|
13
|
+
var instrumentation = require('./instrumentation.cjs');
|
|
11
14
|
var tokens = require('./utils/tokens.cjs');
|
|
12
15
|
var _enum = require('./common/enum.cjs');
|
|
13
16
|
var MultiAgentGraph = require('./graphs/MultiAgentGraph.cjs');
|
|
14
17
|
var Graph = require('./graphs/Graph.cjs');
|
|
15
18
|
var init = require('./llm/init.cjs');
|
|
16
19
|
var events = require('./events.cjs');
|
|
20
|
+
var llm = require('./utils/llm.cjs');
|
|
17
21
|
var executeHooks = require('./hooks/executeHooks.cjs');
|
|
18
22
|
require('./hooks/createWorkspacePolicyHook.cjs');
|
|
19
|
-
var llm = require('./utils/llm.cjs');
|
|
20
|
-
var callbacks = require('./utils/callbacks.cjs');
|
|
21
|
-
var langfuse = require('./langfuse.cjs');
|
|
22
|
-
var langfuseToolOutputTracing = require('./langfuseToolOutputTracing.cjs');
|
|
23
23
|
|
|
24
24
|
// src/run.ts
|
|
25
25
|
const defaultOmitOptions = new Set([
|
|
@@ -429,7 +429,7 @@ class Run {
|
|
|
429
429
|
};
|
|
430
430
|
}
|
|
431
431
|
shouldClearHookSession(streamThrew) {
|
|
432
|
-
return
|
|
432
|
+
return this._interrupt == null || this._haltedReason != null || streamThrew;
|
|
433
433
|
}
|
|
434
434
|
isAwaitingResume(streamThrew) {
|
|
435
435
|
return (this._interrupt != null && this._haltedReason == null && !streamThrew);
|
|
@@ -562,6 +562,7 @@ class Run {
|
|
|
562
562
|
agentId: graph.defaultAgentId,
|
|
563
563
|
agentName: primaryContext?.name,
|
|
564
564
|
});
|
|
565
|
+
const traceName = config.runName ?? langfuse.getLangfuseTraceName(traceMetadata);
|
|
565
566
|
const streamLangfuseConfig = this.getStreamLangfuseConfig(graph);
|
|
566
567
|
instrumentation.initializeLangfuseTracing(streamLangfuseConfig);
|
|
567
568
|
const langfuseHandler = langfuse.createLangfuseHandler({
|
|
@@ -572,7 +573,7 @@ class Run {
|
|
|
572
573
|
tags: ['librechat', 'agent'],
|
|
573
574
|
});
|
|
574
575
|
if (langfuseHandler != null) {
|
|
575
|
-
config.runName =
|
|
576
|
+
config.runName = traceName;
|
|
576
577
|
config.callbacks = callbacks.appendCallbacks(config.callbacks, [langfuseHandler]);
|
|
577
578
|
}
|
|
578
579
|
if (!this.id) {
|
|
@@ -713,7 +714,19 @@ class Run {
|
|
|
713
714
|
}
|
|
714
715
|
};
|
|
715
716
|
try {
|
|
716
|
-
|
|
717
|
+
// When opted in, seed the root trace id from this run's id so feedback /
|
|
718
|
+
// other external signals can be attached to the trace later without a
|
|
719
|
+
// lookup (see SeededTraceIdGenerator in ./instrumentation).
|
|
720
|
+
await instrumentation.runWithTraceIdSeed(streamLangfuseConfig?.deterministicTraceId === true
|
|
721
|
+
? this.id
|
|
722
|
+
: undefined, () => langfuseToolOutputTracing.withLangfuseToolOutputTracingConfig(streamLangfuseConfig, () => langfuse.withLangfuseAttributes({
|
|
723
|
+
langfuse: streamLangfuseConfig,
|
|
724
|
+
userId,
|
|
725
|
+
sessionId,
|
|
726
|
+
traceName,
|
|
727
|
+
traceMetadata,
|
|
728
|
+
tags: ['librechat', 'agent'],
|
|
729
|
+
}, consumeStream), this.getStreamToolOutputTracingLangfuseConfig(graph)));
|
|
717
730
|
}
|
|
718
731
|
catch (err) {
|
|
719
732
|
streamThrew = true;
|
|
@@ -975,6 +988,9 @@ class Run {
|
|
|
975
988
|
}
|
|
976
989
|
async generateTitle({ provider, inputText, contentParts, titlePrompt, clientOptions, chainOptions, skipLanguage, titleMethod = _enum.TitleMethod.COMPLETION, titlePromptTemplate, }) {
|
|
977
990
|
let titleLangfuseHandler;
|
|
991
|
+
let titleLangfuseConfig;
|
|
992
|
+
let titleUserId;
|
|
993
|
+
let titleSessionId;
|
|
978
994
|
const titleContext = this.Graph == null
|
|
979
995
|
? undefined
|
|
980
996
|
: this.Graph.agentContexts.get(this.Graph.defaultAgentId);
|
|
@@ -984,18 +1000,20 @@ class Run {
|
|
|
984
1000
|
});
|
|
985
1001
|
const titleRunName = langfuse.getLangfuseTraceName(traceMetadata, 'LibreChat Title');
|
|
986
1002
|
if (chainOptions != null) {
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
1003
|
+
titleUserId =
|
|
1004
|
+
typeof chainOptions.configurable?.user_id === 'string'
|
|
1005
|
+
? chainOptions.configurable.user_id
|
|
1006
|
+
: undefined;
|
|
1007
|
+
titleSessionId =
|
|
1008
|
+
typeof chainOptions.configurable?.thread_id === 'string'
|
|
1009
|
+
? chainOptions.configurable.thread_id
|
|
1010
|
+
: undefined;
|
|
1011
|
+
titleLangfuseConfig = langfuseToolOutputTracing.resolveLangfuseConfig(this.langfuse, titleContext?.langfuse);
|
|
994
1012
|
instrumentation.initializeLangfuseTracing(titleLangfuseConfig);
|
|
995
1013
|
titleLangfuseHandler = langfuse.createLangfuseHandler({
|
|
996
1014
|
langfuse: titleLangfuseConfig,
|
|
997
|
-
userId,
|
|
998
|
-
sessionId,
|
|
1015
|
+
userId: titleUserId,
|
|
1016
|
+
sessionId: titleSessionId,
|
|
999
1017
|
traceMetadata,
|
|
1000
1018
|
tags: ['librechat', 'title'],
|
|
1001
1019
|
});
|
|
@@ -1049,9 +1067,17 @@ class Run {
|
|
|
1049
1067
|
runId: this.id,
|
|
1050
1068
|
runName: chainOptions?.runName ?? titleRunName,
|
|
1051
1069
|
});
|
|
1070
|
+
const invokeTitleChain = (runtimeConfig) => langfuse.withLangfuseAttributes({
|
|
1071
|
+
langfuse: titleLangfuseConfig,
|
|
1072
|
+
userId: titleUserId,
|
|
1073
|
+
sessionId: titleSessionId,
|
|
1074
|
+
traceName: runtimeConfig.runName ?? titleRunName,
|
|
1075
|
+
traceMetadata,
|
|
1076
|
+
tags: ['librechat', 'title'],
|
|
1077
|
+
}, () => fullChain.invoke({ input: inputText, output: response }, runtimeConfig));
|
|
1052
1078
|
try {
|
|
1053
1079
|
try {
|
|
1054
|
-
return await langfuseToolOutputTracing.withLangfuseToolOutputTracingConfig(this.langfuse, () =>
|
|
1080
|
+
return await langfuseToolOutputTracing.withLangfuseToolOutputTracingConfig(this.langfuse, () => invokeTitleChain(invokeConfig), titleContext?.langfuse);
|
|
1055
1081
|
}
|
|
1056
1082
|
catch (_e) {
|
|
1057
1083
|
// Fallback: strip callbacks to avoid EventStream tracer errors in certain environments
|
|
@@ -1061,7 +1087,7 @@ class Run {
|
|
|
1061
1087
|
const safeConfig = Object.assign({}, rest, {
|
|
1062
1088
|
callbacks: langfuseHandler ? [langfuseHandler] : [],
|
|
1063
1089
|
});
|
|
1064
|
-
return await langfuseToolOutputTracing.withLangfuseToolOutputTracingConfig(this.langfuse, () =>
|
|
1090
|
+
return await langfuseToolOutputTracing.withLangfuseToolOutputTracingConfig(this.langfuse, () => invokeTitleChain(safeConfig), titleContext?.langfuse);
|
|
1065
1091
|
}
|
|
1066
1092
|
}
|
|
1067
1093
|
finally {
|