@librechat/agents 3.2.32 → 3.2.33
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/_virtual/_rolldown/runtime.cjs +23 -0
- package/dist/cjs/agents/AgentContext.cjs +844 -1046
- package/dist/cjs/agents/AgentContext.cjs.map +1 -1
- package/dist/cjs/common/constants.cjs +13 -13
- package/dist/cjs/common/constants.cjs.map +1 -1
- package/dist/cjs/common/enum.cjs +233 -240
- package/dist/cjs/common/enum.cjs.map +1 -1
- package/dist/cjs/common/index.cjs +2 -0
- package/dist/cjs/events.cjs +121 -169
- package/dist/cjs/events.cjs.map +1 -1
- package/dist/cjs/graphs/Graph.cjs +1389 -1807
- package/dist/cjs/graphs/Graph.cjs.map +1 -1
- package/dist/cjs/graphs/MultiAgentGraph.cjs +713 -945
- package/dist/cjs/graphs/MultiAgentGraph.cjs.map +1 -1
- package/dist/cjs/graphs/index.cjs +2 -0
- package/dist/cjs/hitl/askUserQuestion.cjs +60 -62
- package/dist/cjs/hitl/askUserQuestion.cjs.map +1 -1
- package/dist/cjs/hitl/index.cjs +1 -0
- package/dist/cjs/hooks/HookRegistry.cjs +176 -202
- package/dist/cjs/hooks/HookRegistry.cjs.map +1 -1
- package/dist/cjs/hooks/createToolPolicyHook.cjs +71 -101
- package/dist/cjs/hooks/createToolPolicyHook.cjs.map +1 -1
- package/dist/cjs/hooks/createWorkspacePolicyHook.cjs +170 -273
- package/dist/cjs/hooks/createWorkspacePolicyHook.cjs.map +1 -1
- package/dist/cjs/hooks/executeHooks.cjs +227 -282
- package/dist/cjs/hooks/executeHooks.cjs.map +1 -1
- package/dist/cjs/hooks/index.cjs +6 -0
- package/dist/cjs/hooks/matchers.cjs +196 -230
- package/dist/cjs/hooks/matchers.cjs.map +1 -1
- package/dist/cjs/hooks/types.cjs +24 -24
- package/dist/cjs/hooks/types.cjs.map +1 -1
- package/dist/cjs/instrumentation.cjs +110 -137
- package/dist/cjs/instrumentation.cjs.map +1 -1
- package/dist/cjs/langchain/google-common.cjs +0 -3
- package/dist/cjs/langchain/index.cjs +80 -43
- package/dist/cjs/langchain/language_models/chat_models.cjs +0 -3
- package/dist/cjs/langchain/messages/tool.cjs +0 -3
- package/dist/cjs/langchain/messages.cjs +35 -18
- package/dist/cjs/langchain/openai.cjs +0 -3
- package/dist/cjs/langchain/prompts.cjs +5 -8
- package/dist/cjs/langchain/runnables.cjs +11 -10
- package/dist/cjs/langchain/tools.cjs +14 -11
- package/dist/cjs/langchain/utils/env.cjs +5 -8
- package/dist/cjs/langfuse.cjs +60 -79
- package/dist/cjs/langfuse.cjs.map +1 -1
- package/dist/cjs/langfuseToolOutputTracing.cjs +267 -399
- package/dist/cjs/langfuseToolOutputTracing.cjs.map +1 -1
- package/dist/cjs/llm/anthropic/index.cjs +432 -562
- package/dist/cjs/llm/anthropic/index.cjs.map +1 -1
- package/dist/cjs/llm/anthropic/types.cjs +23 -47
- package/dist/cjs/llm/anthropic/types.cjs.map +1 -1
- package/dist/cjs/llm/anthropic/utils/message_inputs.cjs +441 -731
- package/dist/cjs/llm/anthropic/utils/message_inputs.cjs.map +1 -1
- package/dist/cjs/llm/anthropic/utils/message_outputs.cjs +171 -256
- package/dist/cjs/llm/anthropic/utils/message_outputs.cjs.map +1 -1
- package/dist/cjs/llm/anthropic/utils/output_parsers.cjs +2 -0
- package/dist/cjs/llm/anthropic/utils/tools.cjs +12 -26
- package/dist/cjs/llm/anthropic/utils/tools.cjs.map +1 -1
- package/dist/cjs/llm/bedrock/index.cjs +195 -240
- package/dist/cjs/llm/bedrock/index.cjs.map +1 -1
- package/dist/cjs/llm/bedrock/toolCache.cjs +84 -106
- package/dist/cjs/llm/bedrock/toolCache.cjs.map +1 -1
- package/dist/cjs/llm/bedrock/utils/index.cjs +2 -0
- package/dist/cjs/llm/bedrock/utils/message_inputs.cjs +357 -620
- package/dist/cjs/llm/bedrock/utils/message_inputs.cjs.map +1 -1
- package/dist/cjs/llm/bedrock/utils/message_outputs.cjs +105 -149
- package/dist/cjs/llm/bedrock/utils/message_outputs.cjs.map +1 -1
- package/dist/cjs/llm/fake.cjs +86 -96
- package/dist/cjs/llm/fake.cjs.map +1 -1
- package/dist/cjs/llm/google/index.cjs +183 -237
- package/dist/cjs/llm/google/index.cjs.map +1 -1
- package/dist/cjs/llm/google/utils/common.cjs +398 -674
- package/dist/cjs/llm/google/utils/common.cjs.map +1 -1
- package/dist/cjs/llm/google/utils/zod_to_genai_parameters.cjs +2 -0
- package/dist/cjs/llm/init.cjs +44 -53
- package/dist/cjs/llm/init.cjs.map +1 -1
- package/dist/cjs/llm/invoke.cjs +142 -182
- package/dist/cjs/llm/invoke.cjs.map +1 -1
- package/dist/cjs/llm/openai/index.cjs +991 -1276
- package/dist/cjs/llm/openai/index.cjs.map +1 -1
- package/dist/cjs/llm/openai/utils/index.cjs +189 -316
- package/dist/cjs/llm/openai/utils/index.cjs.map +1 -1
- package/dist/cjs/llm/openrouter/index.cjs +102 -153
- package/dist/cjs/llm/openrouter/index.cjs.map +1 -1
- package/dist/cjs/llm/openrouter/toolCache.cjs +35 -44
- package/dist/cjs/llm/openrouter/toolCache.cjs.map +1 -1
- package/dist/cjs/llm/providers.cjs +29 -37
- package/dist/cjs/llm/providers.cjs.map +1 -1
- package/dist/cjs/llm/request.cjs +20 -33
- package/dist/cjs/llm/request.cjs.map +1 -1
- package/dist/cjs/llm/vertexai/index.cjs +427 -453
- package/dist/cjs/llm/vertexai/index.cjs.map +1 -1
- package/dist/cjs/main.cjs +547 -528
- package/dist/cjs/messages/anthropicToolCache.cjs +68 -119
- package/dist/cjs/messages/anthropicToolCache.cjs.map +1 -1
- package/dist/cjs/messages/cache.cjs +305 -418
- package/dist/cjs/messages/cache.cjs.map +1 -1
- package/dist/cjs/messages/content.cjs +36 -49
- package/dist/cjs/messages/content.cjs.map +1 -1
- package/dist/cjs/messages/contextPruning.cjs +112 -145
- package/dist/cjs/messages/contextPruning.cjs.map +1 -1
- package/dist/cjs/messages/contextPruningSettings.cjs +36 -46
- package/dist/cjs/messages/contextPruningSettings.cjs.map +1 -1
- package/dist/cjs/messages/core.cjs +256 -397
- package/dist/cjs/messages/core.cjs.map +1 -1
- package/dist/cjs/messages/format.cjs +904 -1387
- package/dist/cjs/messages/format.cjs.map +1 -1
- package/dist/cjs/messages/ids.cjs +16 -20
- package/dist/cjs/messages/ids.cjs.map +1 -1
- package/dist/cjs/messages/index.cjs +12 -0
- package/dist/cjs/messages/langchain.cjs +18 -18
- package/dist/cjs/messages/langchain.cjs.map +1 -1
- package/dist/cjs/messages/prune.cjs +1054 -1517
- package/dist/cjs/messages/prune.cjs.map +1 -1
- package/dist/cjs/messages/recency.cjs +77 -95
- package/dist/cjs/messages/recency.cjs.map +1 -1
- package/dist/cjs/messages/reducer.cjs +63 -78
- package/dist/cjs/messages/reducer.cjs.map +1 -1
- package/dist/cjs/messages/tools.cjs +51 -79
- package/dist/cjs/messages/tools.cjs.map +1 -1
- package/dist/cjs/openai/index.cjs +171 -217
- package/dist/cjs/openai/index.cjs.map +1 -1
- package/dist/cjs/responses/index.cjs +302 -391
- package/dist/cjs/responses/index.cjs.map +1 -1
- package/dist/cjs/run.cjs +903 -1113
- package/dist/cjs/run.cjs.map +1 -1
- package/dist/cjs/session/AgentSession.cjs +805 -986
- package/dist/cjs/session/AgentSession.cjs.map +1 -1
- package/dist/cjs/session/JsonlSessionStore.cjs +327 -410
- package/dist/cjs/session/JsonlSessionStore.cjs.map +1 -1
- package/dist/cjs/session/handlers.cjs +192 -208
- package/dist/cjs/session/handlers.cjs.map +1 -1
- package/dist/cjs/session/ids.cjs +9 -10
- package/dist/cjs/session/ids.cjs.map +1 -1
- package/dist/cjs/session/index.cjs +4 -0
- package/dist/cjs/session/messageSerialization.cjs +94 -156
- package/dist/cjs/session/messageSerialization.cjs.map +1 -1
- package/dist/cjs/splitStream.cjs +147 -206
- package/dist/cjs/splitStream.cjs.map +1 -1
- package/dist/cjs/stream.cjs +856 -1344
- package/dist/cjs/stream.cjs.map +1 -1
- package/dist/cjs/summarization/index.cjs +57 -101
- package/dist/cjs/summarization/index.cjs.map +1 -1
- package/dist/cjs/summarization/node.cjs +643 -796
- package/dist/cjs/summarization/node.cjs.map +1 -1
- package/dist/cjs/tools/BashExecutor.cjs +110 -136
- package/dist/cjs/tools/BashExecutor.cjs.map +1 -1
- package/dist/cjs/tools/BashProgrammaticToolCalling.cjs +165 -245
- package/dist/cjs/tools/BashProgrammaticToolCalling.cjs.map +1 -1
- package/dist/cjs/tools/Calculator.cjs +36 -57
- package/dist/cjs/tools/Calculator.cjs.map +1 -1
- package/dist/cjs/tools/CodeExecutor.cjs +126 -168
- package/dist/cjs/tools/CodeExecutor.cjs.map +1 -1
- package/dist/cjs/tools/CodeSessionFileSummary.cjs +36 -46
- package/dist/cjs/tools/CodeSessionFileSummary.cjs.map +1 -1
- package/dist/cjs/tools/ProgrammaticToolCalling.cjs +459 -649
- package/dist/cjs/tools/ProgrammaticToolCalling.cjs.map +1 -1
- package/dist/cjs/tools/ReadFile.cjs +17 -20
- package/dist/cjs/tools/ReadFile.cjs.map +1 -1
- package/dist/cjs/tools/SkillTool.cjs +26 -27
- package/dist/cjs/tools/SkillTool.cjs.map +1 -1
- package/dist/cjs/tools/SubagentTool.cjs +59 -61
- package/dist/cjs/tools/SubagentTool.cjs.map +1 -1
- package/dist/cjs/tools/ToolNode.cjs +2109 -2686
- package/dist/cjs/tools/ToolNode.cjs.map +1 -1
- package/dist/cjs/tools/ToolSearch.cjs +663 -825
- package/dist/cjs/tools/ToolSearch.cjs.map +1 -1
- package/dist/cjs/tools/cloudflare/CloudflareBridgeRuntime.cjs +248 -340
- package/dist/cjs/tools/cloudflare/CloudflareBridgeRuntime.cjs.map +1 -1
- package/dist/cjs/tools/cloudflare/CloudflareProgrammaticToolCalling.cjs +170 -197
- package/dist/cjs/tools/cloudflare/CloudflareProgrammaticToolCalling.cjs.map +1 -1
- package/dist/cjs/tools/cloudflare/CloudflareSandboxExecutionEngine.cjs +425 -520
- package/dist/cjs/tools/cloudflare/CloudflareSandboxExecutionEngine.cjs.map +1 -1
- package/dist/cjs/tools/cloudflare/CloudflareSandboxTools.cjs +91 -124
- package/dist/cjs/tools/cloudflare/CloudflareSandboxTools.cjs.map +1 -1
- package/dist/cjs/tools/cloudflare/index.cjs +4 -0
- package/dist/cjs/tools/eagerEventExecution.cjs +75 -99
- package/dist/cjs/tools/eagerEventExecution.cjs.map +1 -1
- package/dist/cjs/tools/handlers.cjs +200 -262
- package/dist/cjs/tools/handlers.cjs.map +1 -1
- package/dist/cjs/tools/local/CompileCheckTool.cjs +150 -212
- package/dist/cjs/tools/local/CompileCheckTool.cjs.map +1 -1
- package/dist/cjs/tools/local/FileCheckpointer.cjs +77 -85
- package/dist/cjs/tools/local/FileCheckpointer.cjs.map +1 -1
- package/dist/cjs/tools/local/LocalCodingTools.cjs +763 -1022
- package/dist/cjs/tools/local/LocalCodingTools.cjs.map +1 -1
- package/dist/cjs/tools/local/LocalExecutionEngine.cjs +666 -941
- package/dist/cjs/tools/local/LocalExecutionEngine.cjs.map +1 -1
- package/dist/cjs/tools/local/LocalExecutionTools.cjs +49 -92
- package/dist/cjs/tools/local/LocalExecutionTools.cjs.map +1 -1
- package/dist/cjs/tools/local/LocalProgrammaticToolCalling.cjs +286 -354
- package/dist/cjs/tools/local/LocalProgrammaticToolCalling.cjs.map +1 -1
- package/dist/cjs/tools/local/attachments.cjs +108 -165
- package/dist/cjs/tools/local/attachments.cjs.map +1 -1
- package/dist/cjs/tools/local/bashAst.cjs +99 -113
- package/dist/cjs/tools/local/bashAst.cjs.map +1 -1
- package/dist/cjs/tools/local/editStrategies.cjs +126 -169
- package/dist/cjs/tools/local/editStrategies.cjs.map +1 -1
- package/dist/cjs/tools/local/index.cjs +12 -0
- package/dist/cjs/tools/local/resolveLocalExecutionTools.cjs +136 -218
- package/dist/cjs/tools/local/resolveLocalExecutionTools.cjs.map +1 -1
- package/dist/cjs/tools/local/syntaxCheck.cjs +142 -161
- package/dist/cjs/tools/local/syntaxCheck.cjs.map +1 -1
- package/dist/cjs/tools/local/textEncoding.cjs +25 -23
- package/dist/cjs/tools/local/textEncoding.cjs.map +1 -1
- package/dist/cjs/tools/local/workspaceFS.cjs +38 -46
- package/dist/cjs/tools/local/workspaceFS.cjs.map +1 -1
- package/dist/cjs/tools/ptcTimeout.cjs +27 -47
- package/dist/cjs/tools/ptcTimeout.cjs.map +1 -1
- package/dist/cjs/tools/schema.cjs +24 -23
- package/dist/cjs/tools/schema.cjs.map +1 -1
- package/dist/cjs/tools/search/anthropic.cjs +24 -33
- package/dist/cjs/tools/search/anthropic.cjs.map +1 -1
- package/dist/cjs/tools/search/content.cjs +95 -137
- package/dist/cjs/tools/search/content.cjs.map +1 -1
- package/dist/cjs/tools/search/firecrawl.cjs +141 -172
- package/dist/cjs/tools/search/firecrawl.cjs.map +1 -1
- package/dist/cjs/tools/search/format.cjs +128 -196
- package/dist/cjs/tools/search/format.cjs.map +1 -1
- package/dist/cjs/tools/search/highlights.cjs +165 -232
- package/dist/cjs/tools/search/highlights.cjs.map +1 -1
- package/dist/cjs/tools/search/index.cjs +2 -0
- package/dist/cjs/tools/search/rerankers.cjs +151 -174
- package/dist/cjs/tools/search/rerankers.cjs.map +1 -1
- package/dist/cjs/tools/search/schema.cjs +40 -39
- package/dist/cjs/tools/search/schema.cjs.map +1 -1
- package/dist/cjs/tools/search/search.cjs +428 -530
- package/dist/cjs/tools/search/search.cjs.map +1 -1
- package/dist/cjs/tools/search/serper-scraper.cjs +106 -127
- package/dist/cjs/tools/search/serper-scraper.cjs.map +1 -1
- package/dist/cjs/tools/search/tavily-scraper.cjs +129 -181
- package/dist/cjs/tools/search/tavily-scraper.cjs.map +1 -1
- package/dist/cjs/tools/search/tavily-search.cjs +295 -359
- package/dist/cjs/tools/search/tavily-search.cjs.map +1 -1
- package/dist/cjs/tools/search/tool.cjs +260 -299
- package/dist/cjs/tools/search/tool.cjs.map +1 -1
- package/dist/cjs/tools/search/utils.cjs +74 -117
- package/dist/cjs/tools/search/utils.cjs.map +1 -1
- package/dist/cjs/tools/skillCatalog.cjs +54 -72
- package/dist/cjs/tools/skillCatalog.cjs.map +1 -1
- package/dist/cjs/tools/streamedToolCallSeals.cjs +19 -36
- package/dist/cjs/tools/streamedToolCallSeals.cjs.map +1 -1
- package/dist/cjs/tools/subagent/SubagentExecutor.cjs +612 -771
- package/dist/cjs/tools/subagent/SubagentExecutor.cjs.map +1 -1
- package/dist/cjs/tools/subagent/index.cjs +1 -0
- package/dist/cjs/tools/toolOutputReferences.cjs +523 -630
- package/dist/cjs/tools/toolOutputReferences.cjs.map +1 -1
- package/dist/cjs/utils/callbacks.cjs +11 -21
- package/dist/cjs/utils/callbacks.cjs.map +1 -1
- package/dist/cjs/utils/errors.cjs +70 -95
- package/dist/cjs/utils/errors.cjs.map +1 -1
- package/dist/cjs/utils/events.cjs +32 -42
- package/dist/cjs/utils/events.cjs.map +1 -1
- package/dist/cjs/utils/graph.cjs +8 -12
- package/dist/cjs/utils/graph.cjs.map +1 -1
- package/dist/cjs/utils/handlers.cjs +60 -82
- package/dist/cjs/utils/handlers.cjs.map +1 -1
- package/dist/cjs/utils/index.cjs +9 -0
- package/dist/cjs/utils/llm.cjs +19 -27
- package/dist/cjs/utils/llm.cjs.map +1 -1
- package/dist/cjs/utils/misc.cjs +30 -46
- package/dist/cjs/utils/misc.cjs.map +1 -1
- package/dist/cjs/utils/run.cjs +50 -66
- package/dist/cjs/utils/run.cjs.map +1 -1
- package/dist/cjs/utils/schema.cjs +11 -19
- package/dist/cjs/utils/schema.cjs.map +1 -1
- package/dist/cjs/utils/title.cjs +71 -106
- package/dist/cjs/utils/title.cjs.map +1 -1
- package/dist/cjs/utils/tokens.cjs +186 -283
- package/dist/cjs/utils/tokens.cjs.map +1 -1
- package/dist/cjs/utils/truncation.cjs +95 -114
- package/dist/cjs/utils/truncation.cjs.map +1 -1
- package/dist/esm/agents/AgentContext.mjs +844 -1044
- package/dist/esm/agents/AgentContext.mjs.map +1 -1
- package/dist/esm/common/constants.mjs +13 -11
- package/dist/esm/common/constants.mjs.map +1 -1
- package/dist/esm/common/enum.mjs +221 -238
- package/dist/esm/common/enum.mjs.map +1 -1
- package/dist/esm/common/index.mjs +3 -0
- package/dist/esm/events.mjs +121 -167
- package/dist/esm/events.mjs.map +1 -1
- package/dist/esm/graphs/Graph.mjs +1388 -1804
- package/dist/esm/graphs/Graph.mjs.map +1 -1
- package/dist/esm/graphs/MultiAgentGraph.mjs +713 -943
- package/dist/esm/graphs/MultiAgentGraph.mjs.map +1 -1
- package/dist/esm/graphs/index.mjs +3 -0
- package/dist/esm/hitl/askUserQuestion.mjs +60 -60
- package/dist/esm/hitl/askUserQuestion.mjs.map +1 -1
- package/dist/esm/hitl/index.mjs +2 -0
- package/dist/esm/hooks/HookRegistry.mjs +176 -200
- package/dist/esm/hooks/HookRegistry.mjs.map +1 -1
- package/dist/esm/hooks/createToolPolicyHook.mjs +71 -99
- package/dist/esm/hooks/createToolPolicyHook.mjs.map +1 -1
- package/dist/esm/hooks/createWorkspacePolicyHook.mjs +170 -271
- package/dist/esm/hooks/createWorkspacePolicyHook.mjs.map +1 -1
- package/dist/esm/hooks/executeHooks.mjs +227 -280
- package/dist/esm/hooks/executeHooks.mjs.map +1 -1
- package/dist/esm/hooks/index.mjs +7 -0
- package/dist/esm/hooks/matchers.mjs +196 -228
- package/dist/esm/hooks/matchers.mjs.map +1 -1
- package/dist/esm/hooks/types.mjs +24 -22
- package/dist/esm/hooks/types.mjs.map +1 -1
- package/dist/esm/instrumentation.mjs +109 -132
- package/dist/esm/instrumentation.mjs.map +1 -1
- package/dist/esm/langchain/google-common.mjs +1 -2
- package/dist/esm/langchain/index.mjs +5 -5
- package/dist/esm/langchain/language_models/chat_models.mjs +1 -2
- package/dist/esm/langchain/messages/tool.mjs +1 -2
- package/dist/esm/langchain/messages.mjs +2 -2
- package/dist/esm/langchain/openai.mjs +1 -2
- package/dist/esm/langchain/prompts.mjs +2 -2
- package/dist/esm/langchain/runnables.mjs +2 -2
- package/dist/esm/langchain/tools.mjs +2 -2
- package/dist/esm/langchain/utils/env.mjs +2 -2
- package/dist/esm/langfuse.mjs +60 -76
- package/dist/esm/langfuse.mjs.map +1 -1
- package/dist/esm/langfuseToolOutputTracing.mjs +267 -395
- package/dist/esm/langfuseToolOutputTracing.mjs.map +1 -1
- package/dist/esm/llm/anthropic/index.mjs +432 -559
- package/dist/esm/llm/anthropic/index.mjs.map +1 -1
- package/dist/esm/llm/anthropic/types.mjs +23 -45
- package/dist/esm/llm/anthropic/types.mjs.map +1 -1
- package/dist/esm/llm/anthropic/utils/message_inputs.mjs +439 -725
- package/dist/esm/llm/anthropic/utils/message_inputs.mjs.map +1 -1
- package/dist/esm/llm/anthropic/utils/message_outputs.mjs +171 -253
- package/dist/esm/llm/anthropic/utils/message_outputs.mjs.map +1 -1
- package/dist/esm/llm/anthropic/utils/output_parsers.mjs +3 -0
- package/dist/esm/llm/anthropic/utils/tools.mjs +12 -24
- package/dist/esm/llm/anthropic/utils/tools.mjs.map +1 -1
- package/dist/esm/llm/bedrock/index.mjs +195 -238
- package/dist/esm/llm/bedrock/index.mjs.map +1 -1
- package/dist/esm/llm/bedrock/toolCache.mjs +84 -104
- package/dist/esm/llm/bedrock/toolCache.mjs.map +1 -1
- package/dist/esm/llm/bedrock/utils/index.mjs +3 -0
- package/dist/esm/llm/bedrock/utils/message_inputs.mjs +357 -618
- package/dist/esm/llm/bedrock/utils/message_inputs.mjs.map +1 -1
- package/dist/esm/llm/bedrock/utils/message_outputs.mjs +105 -147
- package/dist/esm/llm/bedrock/utils/message_outputs.mjs.map +1 -1
- package/dist/esm/llm/fake.mjs +86 -94
- package/dist/esm/llm/fake.mjs.map +1 -1
- package/dist/esm/llm/google/index.mjs +183 -235
- package/dist/esm/llm/google/index.mjs.map +1 -1
- package/dist/esm/llm/google/utils/common.mjs +397 -666
- package/dist/esm/llm/google/utils/common.mjs.map +1 -1
- package/dist/esm/llm/google/utils/zod_to_genai_parameters.mjs +3 -0
- package/dist/esm/llm/init.mjs +44 -51
- package/dist/esm/llm/init.mjs.map +1 -1
- package/dist/esm/llm/invoke.mjs +142 -180
- package/dist/esm/llm/invoke.mjs.map +1 -1
- package/dist/esm/llm/openai/index.mjs +991 -1271
- package/dist/esm/llm/openai/index.mjs.map +1 -1
- package/dist/esm/llm/openai/utils/index.mjs +188 -312
- package/dist/esm/llm/openai/utils/index.mjs.map +1 -1
- package/dist/esm/llm/openrouter/index.mjs +102 -151
- package/dist/esm/llm/openrouter/index.mjs.map +1 -1
- package/dist/esm/llm/openrouter/toolCache.mjs +35 -42
- package/dist/esm/llm/openrouter/toolCache.mjs.map +1 -1
- package/dist/esm/llm/providers.mjs +29 -34
- package/dist/esm/llm/providers.mjs.map +1 -1
- package/dist/esm/llm/request.mjs +20 -31
- package/dist/esm/llm/request.mjs.map +1 -1
- package/dist/esm/llm/vertexai/index.mjs +427 -449
- package/dist/esm/llm/vertexai/index.mjs.map +1 -1
- package/dist/esm/main.mjs +99 -87
- package/dist/esm/messages/anthropicToolCache.mjs +68 -117
- package/dist/esm/messages/anthropicToolCache.mjs.map +1 -1
- package/dist/esm/messages/cache.mjs +305 -416
- package/dist/esm/messages/cache.mjs.map +1 -1
- package/dist/esm/messages/content.mjs +36 -47
- package/dist/esm/messages/content.mjs.map +1 -1
- package/dist/esm/messages/contextPruning.mjs +112 -143
- package/dist/esm/messages/contextPruning.mjs.map +1 -1
- package/dist/esm/messages/contextPruningSettings.mjs +36 -44
- package/dist/esm/messages/contextPruningSettings.mjs.map +1 -1
- package/dist/esm/messages/core.mjs +254 -393
- package/dist/esm/messages/core.mjs.map +1 -1
- package/dist/esm/messages/format.mjs +902 -1383
- package/dist/esm/messages/format.mjs.map +1 -1
- package/dist/esm/messages/ids.mjs +16 -18
- package/dist/esm/messages/ids.mjs.map +1 -1
- package/dist/esm/messages/index.mjs +13 -0
- package/dist/esm/messages/langchain.mjs +18 -16
- package/dist/esm/messages/langchain.mjs.map +1 -1
- package/dist/esm/messages/prune.mjs +1053 -1514
- package/dist/esm/messages/prune.mjs.map +1 -1
- package/dist/esm/messages/recency.mjs +77 -93
- package/dist/esm/messages/recency.mjs.map +1 -1
- package/dist/esm/messages/reducer.mjs +63 -76
- package/dist/esm/messages/reducer.mjs.map +1 -1
- package/dist/esm/messages/tools.mjs +49 -75
- package/dist/esm/messages/tools.mjs.map +1 -1
- package/dist/esm/openai/index.mjs +170 -215
- package/dist/esm/openai/index.mjs.map +1 -1
- package/dist/esm/responses/index.mjs +301 -389
- package/dist/esm/responses/index.mjs.map +1 -1
- package/dist/esm/run.mjs +903 -1111
- package/dist/esm/run.mjs.map +1 -1
- package/dist/esm/session/AgentSession.mjs +806 -985
- package/dist/esm/session/AgentSession.mjs.map +1 -1
- package/dist/esm/session/JsonlSessionStore.mjs +326 -407
- package/dist/esm/session/JsonlSessionStore.mjs.map +1 -1
- package/dist/esm/session/handlers.mjs +192 -206
- package/dist/esm/session/handlers.mjs.map +1 -1
- package/dist/esm/session/ids.mjs +9 -8
- package/dist/esm/session/ids.mjs.map +1 -1
- package/dist/esm/session/index.mjs +5 -0
- package/dist/esm/session/messageSerialization.mjs +94 -154
- package/dist/esm/session/messageSerialization.mjs.map +1 -1
- package/dist/esm/splitStream.mjs +147 -204
- package/dist/esm/splitStream.mjs.map +1 -1
- package/dist/esm/stream.mjs +854 -1341
- package/dist/esm/stream.mjs.map +1 -1
- package/dist/esm/summarization/index.mjs +57 -99
- package/dist/esm/summarization/index.mjs.map +1 -1
- package/dist/esm/summarization/node.mjs +640 -790
- package/dist/esm/summarization/node.mjs.map +1 -1
- package/dist/esm/tools/BashExecutor.mjs +103 -129
- package/dist/esm/tools/BashExecutor.mjs.map +1 -1
- package/dist/esm/tools/BashProgrammaticToolCalling.mjs +162 -239
- package/dist/esm/tools/BashProgrammaticToolCalling.mjs.map +1 -1
- package/dist/esm/tools/Calculator.mjs +34 -36
- package/dist/esm/tools/Calculator.mjs.map +1 -1
- package/dist/esm/tools/CodeExecutor.mjs +123 -164
- package/dist/esm/tools/CodeExecutor.mjs.map +1 -1
- package/dist/esm/tools/CodeSessionFileSummary.mjs +36 -44
- package/dist/esm/tools/CodeSessionFileSummary.mjs.map +1 -1
- package/dist/esm/tools/ProgrammaticToolCalling.mjs +454 -644
- package/dist/esm/tools/ProgrammaticToolCalling.mjs.map +1 -1
- package/dist/esm/tools/ReadFile.mjs +17 -18
- package/dist/esm/tools/ReadFile.mjs.map +1 -1
- package/dist/esm/tools/SkillTool.mjs +26 -25
- package/dist/esm/tools/SkillTool.mjs.map +1 -1
- package/dist/esm/tools/SubagentTool.mjs +59 -59
- package/dist/esm/tools/SubagentTool.mjs.map +1 -1
- package/dist/esm/tools/ToolNode.mjs +2107 -2684
- package/dist/esm/tools/ToolNode.mjs.map +1 -1
- package/dist/esm/tools/ToolSearch.mjs +659 -804
- package/dist/esm/tools/ToolSearch.mjs.map +1 -1
- package/dist/esm/tools/cloudflare/CloudflareBridgeRuntime.mjs +248 -338
- package/dist/esm/tools/cloudflare/CloudflareBridgeRuntime.mjs.map +1 -1
- package/dist/esm/tools/cloudflare/CloudflareProgrammaticToolCalling.mjs +170 -195
- package/dist/esm/tools/cloudflare/CloudflareProgrammaticToolCalling.mjs.map +1 -1
- package/dist/esm/tools/cloudflare/CloudflareSandboxExecutionEngine.mjs +424 -517
- package/dist/esm/tools/cloudflare/CloudflareSandboxExecutionEngine.mjs.map +1 -1
- package/dist/esm/tools/cloudflare/CloudflareSandboxTools.mjs +91 -122
- package/dist/esm/tools/cloudflare/CloudflareSandboxTools.mjs.map +1 -1
- package/dist/esm/tools/cloudflare/index.mjs +5 -0
- package/dist/esm/tools/eagerEventExecution.mjs +75 -96
- package/dist/esm/tools/eagerEventExecution.mjs.map +1 -1
- package/dist/esm/tools/handlers.mjs +200 -260
- package/dist/esm/tools/handlers.mjs.map +1 -1
- package/dist/esm/tools/local/CompileCheckTool.mjs +150 -210
- package/dist/esm/tools/local/CompileCheckTool.mjs.map +1 -1
- package/dist/esm/tools/local/FileCheckpointer.mjs +77 -83
- package/dist/esm/tools/local/FileCheckpointer.mjs.map +1 -1
- package/dist/esm/tools/local/LocalCodingTools.mjs +760 -1017
- package/dist/esm/tools/local/LocalCodingTools.mjs.map +1 -1
- package/dist/esm/tools/local/LocalExecutionEngine.mjs +663 -936
- package/dist/esm/tools/local/LocalExecutionEngine.mjs.map +1 -1
- package/dist/esm/tools/local/LocalExecutionTools.mjs +49 -90
- package/dist/esm/tools/local/LocalExecutionTools.mjs.map +1 -1
- package/dist/esm/tools/local/LocalProgrammaticToolCalling.mjs +283 -349
- package/dist/esm/tools/local/LocalProgrammaticToolCalling.mjs.map +1 -1
- package/dist/esm/tools/local/attachments.mjs +108 -163
- package/dist/esm/tools/local/attachments.mjs.map +1 -1
- package/dist/esm/tools/local/bashAst.mjs +99 -111
- package/dist/esm/tools/local/bashAst.mjs.map +1 -1
- package/dist/esm/tools/local/editStrategies.mjs +126 -167
- package/dist/esm/tools/local/editStrategies.mjs.map +1 -1
- package/dist/esm/tools/local/index.mjs +13 -0
- package/dist/esm/tools/local/resolveLocalExecutionTools.mjs +136 -216
- package/dist/esm/tools/local/resolveLocalExecutionTools.mjs.map +1 -1
- package/dist/esm/tools/local/syntaxCheck.mjs +138 -155
- package/dist/esm/tools/local/syntaxCheck.mjs.map +1 -1
- package/dist/esm/tools/local/textEncoding.mjs +25 -21
- package/dist/esm/tools/local/textEncoding.mjs.map +1 -1
- package/dist/esm/tools/local/workspaceFS.mjs +38 -44
- package/dist/esm/tools/local/workspaceFS.mjs.map +1 -1
- package/dist/esm/tools/ptcTimeout.mjs +27 -42
- package/dist/esm/tools/ptcTimeout.mjs.map +1 -1
- package/dist/esm/tools/schema.mjs +24 -21
- package/dist/esm/tools/schema.mjs.map +1 -1
- package/dist/esm/tools/search/anthropic.mjs +24 -31
- package/dist/esm/tools/search/anthropic.mjs.map +1 -1
- package/dist/esm/tools/search/content.mjs +93 -116
- package/dist/esm/tools/search/content.mjs.map +1 -1
- package/dist/esm/tools/search/firecrawl.mjs +139 -169
- package/dist/esm/tools/search/firecrawl.mjs.map +1 -1
- package/dist/esm/tools/search/format.mjs +128 -194
- package/dist/esm/tools/search/format.mjs.map +1 -1
- package/dist/esm/tools/search/highlights.mjs +165 -230
- package/dist/esm/tools/search/highlights.mjs.map +1 -1
- package/dist/esm/tools/search/index.mjs +3 -0
- package/dist/esm/tools/search/rerankers.mjs +149 -168
- package/dist/esm/tools/search/rerankers.mjs.map +1 -1
- package/dist/esm/tools/search/schema.mjs +39 -37
- package/dist/esm/tools/search/schema.mjs.map +1 -1
- package/dist/esm/tools/search/search.mjs +426 -528
- package/dist/esm/tools/search/search.mjs.map +1 -1
- package/dist/esm/tools/search/serper-scraper.mjs +104 -124
- package/dist/esm/tools/search/serper-scraper.mjs.map +1 -1
- package/dist/esm/tools/search/tavily-scraper.mjs +127 -178
- package/dist/esm/tools/search/tavily-scraper.mjs.map +1 -1
- package/dist/esm/tools/search/tavily-search.mjs +293 -357
- package/dist/esm/tools/search/tavily-search.mjs.map +1 -1
- package/dist/esm/tools/search/tool.mjs +259 -297
- package/dist/esm/tools/search/tool.mjs.map +1 -1
- package/dist/esm/tools/search/utils.mjs +74 -115
- package/dist/esm/tools/search/utils.mjs.map +1 -1
- package/dist/esm/tools/skillCatalog.mjs +54 -70
- package/dist/esm/tools/skillCatalog.mjs.map +1 -1
- package/dist/esm/tools/streamedToolCallSeals.mjs +19 -31
- package/dist/esm/tools/streamedToolCallSeals.mjs.map +1 -1
- package/dist/esm/tools/subagent/SubagentExecutor.mjs +612 -768
- package/dist/esm/tools/subagent/SubagentExecutor.mjs.map +1 -1
- package/dist/esm/tools/subagent/index.mjs +2 -0
- package/dist/esm/tools/toolOutputReferences.mjs +523 -624
- package/dist/esm/tools/toolOutputReferences.mjs.map +1 -1
- package/dist/esm/utils/callbacks.mjs +11 -19
- package/dist/esm/utils/callbacks.mjs.map +1 -1
- package/dist/esm/utils/errors.mjs +70 -93
- package/dist/esm/utils/errors.mjs.map +1 -1
- package/dist/esm/utils/events.mjs +32 -40
- package/dist/esm/utils/events.mjs.map +1 -1
- package/dist/esm/utils/graph.mjs +8 -10
- package/dist/esm/utils/graph.mjs.map +1 -1
- package/dist/esm/utils/handlers.mjs +60 -80
- package/dist/esm/utils/handlers.mjs.map +1 -1
- package/dist/esm/utils/index.mjs +10 -0
- package/dist/esm/utils/llm.mjs +19 -25
- package/dist/esm/utils/llm.mjs.map +1 -1
- package/dist/esm/utils/misc.mjs +30 -44
- package/dist/esm/utils/misc.mjs.map +1 -1
- package/dist/esm/utils/run.mjs +50 -64
- package/dist/esm/utils/run.mjs.map +1 -1
- package/dist/esm/utils/schema.mjs +11 -17
- package/dist/esm/utils/schema.mjs.map +1 -1
- package/dist/esm/utils/title.mjs +71 -104
- package/dist/esm/utils/title.mjs.map +1 -1
- package/dist/esm/utils/tokens.mjs +186 -281
- package/dist/esm/utils/tokens.mjs.map +1 -1
- package/dist/esm/utils/truncation.mjs +95 -112
- package/dist/esm/utils/truncation.mjs.map +1 -1
- package/dist/types/tools/search/tool.d.ts +17 -0
- package/dist/types/tools/search/types.d.ts +4 -0
- package/package.json +4 -10
- package/src/tools/search/highlights.ts +9 -1
- package/src/tools/search/search.ts +41 -3
- package/src/tools/search/source-processing.test.ts +373 -0
- package/src/tools/search/tool.ts +22 -2
- package/src/tools/search/types.ts +4 -0
- package/dist/cjs/langchain/google-common.cjs.map +0 -1
- package/dist/cjs/langchain/index.cjs.map +0 -1
- package/dist/cjs/langchain/language_models/chat_models.cjs.map +0 -1
- package/dist/cjs/langchain/messages/tool.cjs.map +0 -1
- package/dist/cjs/langchain/messages.cjs.map +0 -1
- package/dist/cjs/langchain/openai.cjs.map +0 -1
- package/dist/cjs/langchain/prompts.cjs.map +0 -1
- package/dist/cjs/langchain/runnables.cjs.map +0 -1
- package/dist/cjs/langchain/tools.cjs.map +0 -1
- package/dist/cjs/langchain/utils/env.cjs.map +0 -1
- package/dist/cjs/main.cjs.map +0 -1
- package/dist/esm/langchain/google-common.mjs.map +0 -1
- package/dist/esm/langchain/index.mjs.map +0 -1
- package/dist/esm/langchain/language_models/chat_models.mjs.map +0 -1
- package/dist/esm/langchain/messages/tool.mjs.map +0 -1
- package/dist/esm/langchain/messages.mjs.map +0 -1
- package/dist/esm/langchain/openai.mjs.map +0 -1
- package/dist/esm/langchain/prompts.mjs.map +0 -1
- package/dist/esm/langchain/runnables.mjs.map +0 -1
- package/dist/esm/langchain/tools.mjs.map +0 -1
- package/dist/esm/langchain/utils/env.mjs.map +0 -1
- package/dist/esm/main.mjs.map +0 -1
|
@@ -1,1335 +1,1050 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
var index = require('./utils/index.cjs');
|
|
11
|
-
|
|
12
|
-
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
|
|
1
|
+
const require_index = require("./utils/index.cjs");
|
|
2
|
+
let _langchain_core_messages = require("@langchain/core/messages");
|
|
3
|
+
let _langchain_openai = require("@langchain/openai");
|
|
4
|
+
let openai = require("openai");
|
|
5
|
+
let _langchain_xai = require("@langchain/xai");
|
|
6
|
+
let _langchain_core_outputs = require("@langchain/core/outputs");
|
|
7
|
+
let _langchain_deepseek = require("@langchain/deepseek");
|
|
8
|
+
let _langchain_core_utils_function_calling = require("@langchain/core/utils/function_calling");
|
|
9
|
+
//#region src/llm/openai/index.ts
|
|
13
10
|
const iife = (fn) => fn();
|
|
14
11
|
const STREAM_CHUNK_MIN_SIZE = 4;
|
|
15
|
-
const STREAM_BOUNDARIES = new Set([
|
|
12
|
+
const STREAM_BOUNDARIES = new Set([
|
|
13
|
+
" ",
|
|
14
|
+
".",
|
|
15
|
+
",",
|
|
16
|
+
"!",
|
|
17
|
+
"?",
|
|
18
|
+
";",
|
|
19
|
+
":"
|
|
20
|
+
]);
|
|
16
21
|
function isHeaders(headers) {
|
|
17
|
-
|
|
18
|
-
headers !== null &&
|
|
19
|
-
typeof headers === 'object' &&
|
|
20
|
-
Object.prototype.toString.call(headers) === '[object Headers]');
|
|
22
|
+
return typeof Headers !== "undefined" && headers !== null && typeof headers === "object" && Object.prototype.toString.call(headers) === "[object Headers]";
|
|
21
23
|
}
|
|
22
24
|
function normalizeHeaders(headers) {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
headers !== null &&
|
|
35
|
-
'values' in headers &&
|
|
36
|
-
isHeaders(headers.values)) {
|
|
37
|
-
return headers.values;
|
|
38
|
-
}
|
|
39
|
-
// If headers is a plain object
|
|
40
|
-
else if (typeof headers === 'object' && headers !== null) {
|
|
41
|
-
const entries = Object.entries(headers)
|
|
42
|
-
.filter(([, v]) => typeof v === 'string')
|
|
43
|
-
.map(([k, v]) => [k, v]);
|
|
44
|
-
return new Headers(entries);
|
|
45
|
-
}
|
|
46
|
-
return new Headers();
|
|
47
|
-
});
|
|
48
|
-
return Object.fromEntries(output.entries());
|
|
25
|
+
const output = iife(() => {
|
|
26
|
+
if (isHeaders(headers)) return headers;
|
|
27
|
+
else if (Array.isArray(headers)) return new Headers(headers);
|
|
28
|
+
else if (typeof headers === "object" && headers !== null && "values" in headers && isHeaders(headers.values)) return headers.values;
|
|
29
|
+
else if (typeof headers === "object" && headers !== null) {
|
|
30
|
+
const entries = Object.entries(headers).filter(([, v]) => typeof v === "string").map(([k, v]) => [k, v]);
|
|
31
|
+
return new Headers(entries);
|
|
32
|
+
}
|
|
33
|
+
return new Headers();
|
|
34
|
+
});
|
|
35
|
+
return Object.fromEntries(output.entries());
|
|
49
36
|
}
|
|
50
37
|
function createUsageMetadata(usage) {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
usageMetadata.input_token_details = inputTokenDetails;
|
|
91
|
-
}
|
|
92
|
-
if (hasOutputTokenDetails) {
|
|
93
|
-
usageMetadata.output_token_details = outputTokenDetails;
|
|
94
|
-
}
|
|
95
|
-
return usageMetadata;
|
|
38
|
+
const usageMetadata = {
|
|
39
|
+
input_tokens: usage?.prompt_tokens ?? 0,
|
|
40
|
+
output_tokens: usage?.completion_tokens ?? 0,
|
|
41
|
+
total_tokens: usage?.total_tokens ?? 0
|
|
42
|
+
};
|
|
43
|
+
if (usage == null) return usageMetadata;
|
|
44
|
+
const inputTokenDetails = {};
|
|
45
|
+
const outputTokenDetails = {};
|
|
46
|
+
let hasInputTokenDetails = false;
|
|
47
|
+
let hasOutputTokenDetails = false;
|
|
48
|
+
const promptTokenDetails = usage.prompt_tokens_details;
|
|
49
|
+
const audioInputTokens = promptTokenDetails?.audio_tokens;
|
|
50
|
+
const cachedInputTokens = promptTokenDetails?.cached_tokens;
|
|
51
|
+
const cacheWriteInputTokens = promptTokenDetails?.cache_write_tokens;
|
|
52
|
+
const audioOutputTokens = usage.completion_tokens_details?.audio_tokens;
|
|
53
|
+
const reasoningOutputTokens = usage.completion_tokens_details?.reasoning_tokens;
|
|
54
|
+
if (audioInputTokens != null) {
|
|
55
|
+
inputTokenDetails.audio = audioInputTokens;
|
|
56
|
+
hasInputTokenDetails = true;
|
|
57
|
+
}
|
|
58
|
+
if (cachedInputTokens != null) {
|
|
59
|
+
inputTokenDetails.cache_read = cachedInputTokens;
|
|
60
|
+
hasInputTokenDetails = true;
|
|
61
|
+
}
|
|
62
|
+
if (cacheWriteInputTokens != null) {
|
|
63
|
+
inputTokenDetails.cache_creation = cacheWriteInputTokens;
|
|
64
|
+
hasInputTokenDetails = true;
|
|
65
|
+
}
|
|
66
|
+
if (audioOutputTokens != null) {
|
|
67
|
+
outputTokenDetails.audio = audioOutputTokens;
|
|
68
|
+
hasOutputTokenDetails = true;
|
|
69
|
+
}
|
|
70
|
+
if (reasoningOutputTokens != null) {
|
|
71
|
+
outputTokenDetails.reasoning = reasoningOutputTokens;
|
|
72
|
+
hasOutputTokenDetails = true;
|
|
73
|
+
}
|
|
74
|
+
if (hasInputTokenDetails) usageMetadata.input_token_details = inputTokenDetails;
|
|
75
|
+
if (hasOutputTokenDetails) usageMetadata.output_token_details = outputTokenDetails;
|
|
76
|
+
return usageMetadata;
|
|
96
77
|
}
|
|
97
78
|
function getExposedOpenAIClient(completions, responses, preferResponses) {
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
}
|
|
106
|
-
const delegate = preferResponses ? responses : completions;
|
|
107
|
-
delegate._getClientOptions(undefined);
|
|
108
|
-
return delegate.client;
|
|
79
|
+
const responsesClient = responses.client;
|
|
80
|
+
if (responsesClient?.abortHandler != null) return responsesClient;
|
|
81
|
+
const completionsClient = completions.client;
|
|
82
|
+
if (completionsClient?.abortHandler != null) return completionsClient;
|
|
83
|
+
const delegate = preferResponses ? responses : completions;
|
|
84
|
+
delegate._getClientOptions(void 0);
|
|
85
|
+
return delegate.client;
|
|
109
86
|
}
|
|
110
87
|
function getReasoningParams(baseReasoning, options) {
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
reasoning?.effort === undefined) {
|
|
126
|
-
reasoning = {
|
|
127
|
-
...reasoning,
|
|
128
|
-
effort: options.reasoningEffort,
|
|
129
|
-
};
|
|
130
|
-
}
|
|
131
|
-
return reasoning;
|
|
88
|
+
let reasoning;
|
|
89
|
+
if (baseReasoning !== void 0) reasoning = {
|
|
90
|
+
...reasoning,
|
|
91
|
+
...baseReasoning
|
|
92
|
+
};
|
|
93
|
+
if (options?.reasoning !== void 0) reasoning = {
|
|
94
|
+
...reasoning,
|
|
95
|
+
...options.reasoning
|
|
96
|
+
};
|
|
97
|
+
if (options?.reasoningEffort !== void 0 && reasoning?.effort === void 0) reasoning = {
|
|
98
|
+
...reasoning,
|
|
99
|
+
effort: options.reasoningEffort
|
|
100
|
+
};
|
|
101
|
+
return reasoning;
|
|
132
102
|
}
|
|
133
103
|
function getGatedReasoningParams(model, baseReasoning, options) {
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
}
|
|
137
|
-
return getReasoningParams(baseReasoning, options);
|
|
104
|
+
if (!require_index.isReasoningModel(model)) return;
|
|
105
|
+
return getReasoningParams(baseReasoning, options);
|
|
138
106
|
}
|
|
139
107
|
function isObject(value) {
|
|
140
|
-
|
|
108
|
+
return typeof value === "object" && value !== null;
|
|
141
109
|
}
|
|
142
110
|
function isOpenAIChatCompletionChunk(value) {
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
// Intentionally loose: downstream handlers already tolerate empty choices.
|
|
147
|
-
const { choices } = value;
|
|
148
|
-
return Array.isArray(choices);
|
|
111
|
+
if (!isObject(value)) return false;
|
|
112
|
+
const { choices } = value;
|
|
113
|
+
return Array.isArray(choices);
|
|
149
114
|
}
|
|
150
115
|
function getOpenAIChatCompletionChunk(value) {
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
const { data } = value;
|
|
155
|
-
if (isOpenAIChatCompletionChunk(data)) {
|
|
156
|
-
return data;
|
|
157
|
-
}
|
|
158
|
-
return undefined;
|
|
116
|
+
if (isOpenAIChatCompletionChunk(value)) return value;
|
|
117
|
+
const { data } = value;
|
|
118
|
+
if (isOpenAIChatCompletionChunk(data)) return data;
|
|
159
119
|
}
|
|
160
120
|
async function* filterOpenAIChatCompletionStream(stream) {
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
yield chunk;
|
|
167
|
-
}
|
|
121
|
+
for await (const item of stream) {
|
|
122
|
+
const chunk = getOpenAIChatCompletionChunk(item);
|
|
123
|
+
if (chunk == null) continue;
|
|
124
|
+
yield chunk;
|
|
125
|
+
}
|
|
168
126
|
}
|
|
169
127
|
async function completionWithFilteredOpenAIStream(request, requestOptions, completionWithRetry) {
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
}
|
|
173
|
-
const stream = await completionWithRetry(request, requestOptions);
|
|
174
|
-
return filterOpenAIChatCompletionStream(stream);
|
|
128
|
+
if (request.stream !== true) return await completionWithRetry(request, requestOptions);
|
|
129
|
+
return filterOpenAIChatCompletionStream(await completionWithRetry(request, requestOptions));
|
|
175
130
|
}
|
|
176
131
|
function attachLibreChatDeltaFields(chunk, delta) {
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
chunk.additional_kwargs.reasoning_content = libreChatDelta.reasoning;
|
|
184
|
-
}
|
|
185
|
-
if (libreChatDelta.reasoning_details != null) {
|
|
186
|
-
chunk.additional_kwargs.reasoning_details =
|
|
187
|
-
libreChatDelta.reasoning_details;
|
|
188
|
-
}
|
|
189
|
-
if (libreChatDelta.provider_specific_fields != null) {
|
|
190
|
-
chunk.additional_kwargs.provider_specific_fields =
|
|
191
|
-
libreChatDelta.provider_specific_fields;
|
|
192
|
-
}
|
|
193
|
-
return chunk;
|
|
132
|
+
if (!_langchain_core_messages.AIMessageChunk.isInstance(chunk)) return chunk;
|
|
133
|
+
const libreChatDelta = delta;
|
|
134
|
+
if (libreChatDelta.reasoning != null && chunk.additional_kwargs.reasoning_content == null) chunk.additional_kwargs.reasoning_content = libreChatDelta.reasoning;
|
|
135
|
+
if (libreChatDelta.reasoning_details != null) chunk.additional_kwargs.reasoning_details = libreChatDelta.reasoning_details;
|
|
136
|
+
if (libreChatDelta.provider_specific_fields != null) chunk.additional_kwargs.provider_specific_fields = libreChatDelta.provider_specific_fields;
|
|
137
|
+
return chunk;
|
|
194
138
|
}
|
|
195
139
|
function attachLibreChatMessageFields(message, rawMessage) {
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
message.additional_kwargs.reasoning_content = rawMessage.reasoning;
|
|
202
|
-
}
|
|
203
|
-
if (rawMessage.reasoning_details != null) {
|
|
204
|
-
message.additional_kwargs.reasoning_details = rawMessage.reasoning_details;
|
|
205
|
-
}
|
|
206
|
-
if (rawMessage.provider_specific_fields != null) {
|
|
207
|
-
message.additional_kwargs.provider_specific_fields =
|
|
208
|
-
rawMessage.provider_specific_fields;
|
|
209
|
-
}
|
|
210
|
-
return message;
|
|
140
|
+
if (!(0, _langchain_core_messages.isAIMessage)(message)) return message;
|
|
141
|
+
if (rawMessage.reasoning != null && message.additional_kwargs.reasoning_content == null) message.additional_kwargs.reasoning_content = rawMessage.reasoning;
|
|
142
|
+
if (rawMessage.reasoning_details != null) message.additional_kwargs.reasoning_details = rawMessage.reasoning_details;
|
|
143
|
+
if (rawMessage.provider_specific_fields != null) message.additional_kwargs.provider_specific_fields = rawMessage.provider_specific_fields;
|
|
144
|
+
return message;
|
|
211
145
|
}
|
|
212
146
|
function getCustomOpenAIClientOptions(owner, options) {
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
}
|
|
230
|
-
const requestOptions = {
|
|
231
|
-
...owner.clientConfig,
|
|
232
|
-
...options,
|
|
233
|
-
};
|
|
234
|
-
return requestOptions;
|
|
147
|
+
if (!owner.client) {
|
|
148
|
+
const endpoint = (0, _langchain_openai.getEndpoint)({ baseURL: owner.clientConfig.baseURL });
|
|
149
|
+
const params = {
|
|
150
|
+
...owner.clientConfig,
|
|
151
|
+
baseURL: endpoint,
|
|
152
|
+
timeout: owner.timeout,
|
|
153
|
+
maxRetries: 0
|
|
154
|
+
};
|
|
155
|
+
if (params.baseURL == null) delete params.baseURL;
|
|
156
|
+
params.defaultHeaders = (0, _langchain_openai.getHeadersWithUserAgent)(params.defaultHeaders);
|
|
157
|
+
owner.client = new CustomOpenAIClient(params);
|
|
158
|
+
}
|
|
159
|
+
return {
|
|
160
|
+
...owner.clientConfig,
|
|
161
|
+
...options
|
|
162
|
+
};
|
|
235
163
|
}
|
|
236
164
|
function findStreamChunkBoundary(text, minSize) {
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
for (let position = minSize; position < text.length; position++) {
|
|
241
|
-
if (STREAM_BOUNDARIES.has(text[position])) {
|
|
242
|
-
return position + 1;
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
return text.length;
|
|
165
|
+
if (minSize >= text.length) return text.length;
|
|
166
|
+
for (let position = minSize; position < text.length; position++) if (STREAM_BOUNDARIES.has(text[position])) return position + 1;
|
|
167
|
+
return text.length;
|
|
246
168
|
}
|
|
247
169
|
function splitStreamToken(text) {
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
return chunks;
|
|
170
|
+
const chunks = [];
|
|
171
|
+
let currentIndex = 0;
|
|
172
|
+
while (currentIndex < text.length) {
|
|
173
|
+
const chunkSize = findStreamChunkBoundary(text.slice(currentIndex), STREAM_CHUNK_MIN_SIZE);
|
|
174
|
+
chunks.push(text.slice(currentIndex, currentIndex + chunkSize));
|
|
175
|
+
currentIndex += chunkSize;
|
|
176
|
+
}
|
|
177
|
+
return chunks;
|
|
257
178
|
}
|
|
258
179
|
function splitTextGenerationChunk(chunk) {
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
: message.usage_metadata;
|
|
277
|
-
if (message.usage_metadata != null && !emittedUsage) {
|
|
278
|
-
emittedUsage = true;
|
|
279
|
-
}
|
|
280
|
-
return new outputs.ChatGenerationChunk({
|
|
281
|
-
text: token,
|
|
282
|
-
generationInfo: chunk.generationInfo,
|
|
283
|
-
message: new messages.AIMessageChunk(Object.assign({}, message, {
|
|
284
|
-
content: token,
|
|
285
|
-
usage_metadata: usageMetadata,
|
|
286
|
-
})),
|
|
287
|
-
});
|
|
288
|
-
});
|
|
180
|
+
const { message } = chunk;
|
|
181
|
+
if (!chunk.text || !(message instanceof _langchain_core_messages.AIMessageChunk) || typeof message.content !== "string" || message.content !== chunk.text || chunk.generationInfo?.logprobs != null || chunk.generationInfo?.finish_reason != null) return [chunk];
|
|
182
|
+
const tokenChunks = splitStreamToken(chunk.text);
|
|
183
|
+
if (tokenChunks.length <= 1) return [chunk];
|
|
184
|
+
let emittedUsage = false;
|
|
185
|
+
return tokenChunks.map((token) => {
|
|
186
|
+
const usageMetadata = emittedUsage && message.usage_metadata != null ? void 0 : message.usage_metadata;
|
|
187
|
+
if (message.usage_metadata != null && !emittedUsage) emittedUsage = true;
|
|
188
|
+
return new _langchain_core_outputs.ChatGenerationChunk({
|
|
189
|
+
text: token,
|
|
190
|
+
generationInfo: chunk.generationInfo,
|
|
191
|
+
message: new _langchain_core_messages.AIMessageChunk(Object.assign({}, message, {
|
|
192
|
+
content: token,
|
|
193
|
+
usage_metadata: usageMetadata
|
|
194
|
+
}))
|
|
195
|
+
});
|
|
196
|
+
});
|
|
289
197
|
}
|
|
290
198
|
async function emitStreamChunkCallback(chunk, runManager) {
|
|
291
|
-
|
|
199
|
+
await runManager?.handleLLMNewToken(chunk.text, getStreamChunkTokenIndices(chunk), void 0, void 0, void 0, { chunk });
|
|
292
200
|
}
|
|
293
201
|
function getStreamChunkTokenIndices(chunk) {
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
202
|
+
const prompt = chunk.generationInfo?.prompt;
|
|
203
|
+
const completion = chunk.generationInfo?.completion;
|
|
204
|
+
if (typeof prompt === "number" && typeof completion === "number") return {
|
|
205
|
+
prompt,
|
|
206
|
+
completion
|
|
207
|
+
};
|
|
300
208
|
}
|
|
301
209
|
async function* delayStreamChunks(chunks, delay, signal, runManager) {
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
}
|
|
320
|
-
}
|
|
210
|
+
let lastYieldedAt;
|
|
211
|
+
for await (const chunk of chunks) {
|
|
212
|
+
const outputChunks = delay != null && delay > 0 ? splitTextGenerationChunk(chunk) : [chunk];
|
|
213
|
+
for (const outputChunk of outputChunks) {
|
|
214
|
+
signal?.throwIfAborted();
|
|
215
|
+
if (delay != null && delay > 0 && lastYieldedAt != null) {
|
|
216
|
+
const timeSinceLastYield = Date.now() - lastYieldedAt;
|
|
217
|
+
const timeToWait = Math.max(0, delay - timeSinceLastYield);
|
|
218
|
+
if (timeToWait > 0) await sleepWithAbort(timeToWait, signal);
|
|
219
|
+
}
|
|
220
|
+
signal?.throwIfAborted();
|
|
221
|
+
lastYieldedAt = Date.now();
|
|
222
|
+
await emitStreamChunkCallback(outputChunk, runManager);
|
|
223
|
+
signal?.throwIfAborted();
|
|
224
|
+
yield outputChunk;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
321
227
|
}
|
|
322
228
|
async function sleepWithAbort(delay, signal) {
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
if (signal?.aborted === true) {
|
|
339
|
-
onAbort();
|
|
340
|
-
}
|
|
341
|
-
});
|
|
229
|
+
if (delay <= 0) return;
|
|
230
|
+
signal?.throwIfAborted();
|
|
231
|
+
await new Promise((resolve, reject) => {
|
|
232
|
+
const timeout = setTimeout(() => {
|
|
233
|
+
signal?.removeEventListener("abort", onAbort);
|
|
234
|
+
resolve();
|
|
235
|
+
}, delay);
|
|
236
|
+
const onAbort = () => {
|
|
237
|
+
clearTimeout(timeout);
|
|
238
|
+
signal?.removeEventListener("abort", onAbort);
|
|
239
|
+
reject(signal?.reason ?? /* @__PURE__ */ new Error("AbortError: User aborted request."));
|
|
240
|
+
};
|
|
241
|
+
signal?.addEventListener("abort", onAbort, { once: true });
|
|
242
|
+
if (signal?.aborted === true) onAbort();
|
|
243
|
+
});
|
|
342
244
|
}
|
|
343
245
|
function createAbortHandler(controller) {
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
246
|
+
return function() {
|
|
247
|
+
controller.abort();
|
|
248
|
+
};
|
|
347
249
|
}
|
|
348
250
|
/**
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
251
|
+
* Formats a tool in either OpenAI format, or LangChain structured tool format
|
|
252
|
+
* into an OpenAI tool format. If the tool is already in OpenAI format, return without
|
|
253
|
+
* any changes. If it is in LangChain structured tool format, convert it to OpenAI tool format
|
|
254
|
+
* using OpenAI's `zodFunction` util, falling back to `convertToOpenAIFunction` if the parameters
|
|
255
|
+
* returned from the `zodFunction` util are not defined.
|
|
256
|
+
*
|
|
257
|
+
* @param {BindToolsInput} tool The tool to convert to an OpenAI tool.
|
|
258
|
+
* @param {Object} [fields] Additional fields to add to the OpenAI tool.
|
|
259
|
+
* @returns {ToolDefinition} The inputted tool in OpenAI tool format.
|
|
260
|
+
*/
|
|
359
261
|
function _convertToOpenAITool(tool, fields) {
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
toolDef = tool;
|
|
366
|
-
}
|
|
367
|
-
return toolDef;
|
|
368
|
-
}
|
|
369
|
-
class CustomOpenAIClient extends openai.OpenAIClient {
|
|
370
|
-
abortHandler;
|
|
371
|
-
async fetchWithTimeout(url, init, ms, controller) {
|
|
372
|
-
const { signal, ...options } = init || {};
|
|
373
|
-
const handler = createAbortHandler(controller);
|
|
374
|
-
this.abortHandler = handler;
|
|
375
|
-
if (signal)
|
|
376
|
-
signal.addEventListener('abort', handler, { once: true });
|
|
377
|
-
const timeout = setTimeout(handler, ms);
|
|
378
|
-
const fetchOptions = {
|
|
379
|
-
signal: controller.signal,
|
|
380
|
-
...options,
|
|
381
|
-
};
|
|
382
|
-
if (fetchOptions.method != null) {
|
|
383
|
-
// Custom methods like 'patch' need to be uppercased
|
|
384
|
-
// See https://github.com/nodejs/undici/issues/2294
|
|
385
|
-
fetchOptions.method = fetchOptions.method.toUpperCase();
|
|
386
|
-
}
|
|
387
|
-
return (
|
|
388
|
-
// use undefined this binding; fetch errors if bound to something else in browser/cloudflare
|
|
389
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
390
|
-
/** @ts-ignore */
|
|
391
|
-
this.fetch.call(undefined, url, fetchOptions).finally(() => {
|
|
392
|
-
clearTimeout(timeout);
|
|
393
|
-
}));
|
|
394
|
-
}
|
|
395
|
-
}
|
|
396
|
-
class CustomAzureOpenAIClient extends openai$1.AzureOpenAI {
|
|
397
|
-
abortHandler;
|
|
398
|
-
async fetchWithTimeout(url, init, ms, controller) {
|
|
399
|
-
const { signal, ...options } = init || {};
|
|
400
|
-
const handler = createAbortHandler(controller);
|
|
401
|
-
this.abortHandler = handler;
|
|
402
|
-
if (signal)
|
|
403
|
-
signal.addEventListener('abort', handler, { once: true });
|
|
404
|
-
const timeout = setTimeout(handler, ms);
|
|
405
|
-
const fetchOptions = {
|
|
406
|
-
signal: controller.signal,
|
|
407
|
-
...options,
|
|
408
|
-
};
|
|
409
|
-
if (fetchOptions.method != null) {
|
|
410
|
-
// Custom methods like 'patch' need to be uppercased
|
|
411
|
-
// See https://github.com/nodejs/undici/issues/2294
|
|
412
|
-
fetchOptions.method = fetchOptions.method.toUpperCase();
|
|
413
|
-
}
|
|
414
|
-
return (
|
|
415
|
-
// use undefined this binding; fetch errors if bound to something else in browser/cloudflare
|
|
416
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
417
|
-
/** @ts-ignore */
|
|
418
|
-
this.fetch.call(undefined, url, fetchOptions).finally(() => {
|
|
419
|
-
clearTimeout(timeout);
|
|
420
|
-
}));
|
|
421
|
-
}
|
|
422
|
-
}
|
|
423
|
-
class LibreChatOpenAICompletions extends openai.ChatOpenAICompletions {
|
|
424
|
-
includeReasoningContent;
|
|
425
|
-
includeReasoningDetails;
|
|
426
|
-
convertReasoningDetailsToContent;
|
|
427
|
-
constructor(fields) {
|
|
428
|
-
super(fields);
|
|
429
|
-
this.includeReasoningContent = fields?.includeReasoningContent;
|
|
430
|
-
this.includeReasoningDetails = fields?.includeReasoningDetails;
|
|
431
|
-
this.convertReasoningDetailsToContent =
|
|
432
|
-
fields?.convertReasoningDetailsToContent;
|
|
433
|
-
}
|
|
434
|
-
_getReasoningParams(options) {
|
|
435
|
-
return getReasoningParams(this.reasoning, options);
|
|
436
|
-
}
|
|
437
|
-
_getClientOptions(options) {
|
|
438
|
-
return getCustomOpenAIClientOptions(this, options);
|
|
439
|
-
}
|
|
440
|
-
async completionWithRetry(request, requestOptions) {
|
|
441
|
-
return completionWithFilteredOpenAIStream(request, requestOptions, super.completionWithRetry.bind(this));
|
|
442
|
-
}
|
|
443
|
-
_convertCompletionsDeltaToBaseMessageChunk(delta, rawResponse, defaultRole) {
|
|
444
|
-
return attachLibreChatDeltaFields(super._convertCompletionsDeltaToBaseMessageChunk(delta, rawResponse, defaultRole), delta);
|
|
445
|
-
}
|
|
446
|
-
_convertCompletionsMessageToBaseMessage(message, rawResponse) {
|
|
447
|
-
return attachLibreChatMessageFields(super._convertCompletionsMessageToBaseMessage(message, rawResponse), message);
|
|
448
|
-
}
|
|
449
|
-
async _generate(messages$1, options, runManager) {
|
|
450
|
-
if (this.includeReasoningContent !== true &&
|
|
451
|
-
this.includeReasoningDetails !== true) {
|
|
452
|
-
return super._generate(messages$1, options, runManager);
|
|
453
|
-
}
|
|
454
|
-
options.signal?.throwIfAborted();
|
|
455
|
-
const usageMetadata = {};
|
|
456
|
-
const params = this.invocationParams(options);
|
|
457
|
-
const messagesMapped = index._convertMessagesToOpenAIParams(messages$1, this.model, {
|
|
458
|
-
includeReasoningContent: this.includeReasoningContent,
|
|
459
|
-
includeReasoningDetails: this.includeReasoningDetails,
|
|
460
|
-
convertReasoningDetailsToContent: this.convertReasoningDetailsToContent,
|
|
461
|
-
});
|
|
462
|
-
if (params.stream === true) {
|
|
463
|
-
const stream = this._streamResponseChunks(messages$1, options, runManager);
|
|
464
|
-
const finalChunks = new Map();
|
|
465
|
-
for await (const chunk of stream) {
|
|
466
|
-
chunk.message.response_metadata = {
|
|
467
|
-
...chunk.generationInfo,
|
|
468
|
-
...chunk.message.response_metadata,
|
|
469
|
-
};
|
|
470
|
-
const index = typeof chunk.generationInfo?.completion === 'number'
|
|
471
|
-
? chunk.generationInfo.completion
|
|
472
|
-
: 0;
|
|
473
|
-
const existingChunk = finalChunks.get(index);
|
|
474
|
-
if (existingChunk == null) {
|
|
475
|
-
finalChunks.set(index, chunk);
|
|
476
|
-
}
|
|
477
|
-
else {
|
|
478
|
-
finalChunks.set(index, existingChunk.concat(chunk));
|
|
479
|
-
}
|
|
480
|
-
}
|
|
481
|
-
const generations = Array.from(finalChunks.entries())
|
|
482
|
-
.sort(([aKey], [bKey]) => aKey - bKey)
|
|
483
|
-
.map(([, value]) => value);
|
|
484
|
-
const { functions, function_call } = this.invocationParams(options);
|
|
485
|
-
const promptTokenUsage = await this._getEstimatedTokenCountFromPrompt(messages$1, functions, function_call);
|
|
486
|
-
const completionTokenUsage = await this._getNumTokensFromGenerations(generations);
|
|
487
|
-
usageMetadata.input_tokens = promptTokenUsage;
|
|
488
|
-
usageMetadata.output_tokens = completionTokenUsage;
|
|
489
|
-
usageMetadata.total_tokens = promptTokenUsage + completionTokenUsage;
|
|
490
|
-
return {
|
|
491
|
-
generations,
|
|
492
|
-
llmOutput: {
|
|
493
|
-
estimatedTokenUsage: {
|
|
494
|
-
promptTokens: usageMetadata.input_tokens,
|
|
495
|
-
completionTokens: usageMetadata.output_tokens,
|
|
496
|
-
totalTokens: usageMetadata.total_tokens,
|
|
497
|
-
},
|
|
498
|
-
},
|
|
499
|
-
};
|
|
500
|
-
}
|
|
501
|
-
const data = await this.completionWithRetry({
|
|
502
|
-
...params,
|
|
503
|
-
stream: false,
|
|
504
|
-
messages: messagesMapped,
|
|
505
|
-
}, {
|
|
506
|
-
signal: options.signal,
|
|
507
|
-
...options.options,
|
|
508
|
-
});
|
|
509
|
-
const { completion_tokens: completionTokens, prompt_tokens: promptTokens, total_tokens: totalTokens, prompt_tokens_details: promptTokensDetails, completion_tokens_details: completionTokensDetails, } = data.usage ?? {};
|
|
510
|
-
if (completionTokens != null) {
|
|
511
|
-
usageMetadata.output_tokens =
|
|
512
|
-
(usageMetadata.output_tokens ?? 0) + completionTokens;
|
|
513
|
-
}
|
|
514
|
-
if (promptTokens != null) {
|
|
515
|
-
usageMetadata.input_tokens =
|
|
516
|
-
(usageMetadata.input_tokens ?? 0) + promptTokens;
|
|
517
|
-
}
|
|
518
|
-
if (totalTokens != null) {
|
|
519
|
-
usageMetadata.total_tokens =
|
|
520
|
-
(usageMetadata.total_tokens ?? 0) + totalTokens;
|
|
521
|
-
}
|
|
522
|
-
const promptTokensDetailsWithCacheWrite = promptTokensDetails;
|
|
523
|
-
if (promptTokensDetailsWithCacheWrite?.audio_tokens != null ||
|
|
524
|
-
promptTokensDetailsWithCacheWrite?.cached_tokens != null ||
|
|
525
|
-
promptTokensDetailsWithCacheWrite?.cache_write_tokens != null) {
|
|
526
|
-
usageMetadata.input_token_details = {
|
|
527
|
-
...(promptTokensDetailsWithCacheWrite.audio_tokens != null && {
|
|
528
|
-
audio: promptTokensDetailsWithCacheWrite.audio_tokens,
|
|
529
|
-
}),
|
|
530
|
-
...(promptTokensDetailsWithCacheWrite.cached_tokens != null && {
|
|
531
|
-
cache_read: promptTokensDetailsWithCacheWrite.cached_tokens,
|
|
532
|
-
}),
|
|
533
|
-
...(promptTokensDetailsWithCacheWrite.cache_write_tokens != null && {
|
|
534
|
-
cache_creation: promptTokensDetailsWithCacheWrite.cache_write_tokens,
|
|
535
|
-
}),
|
|
536
|
-
};
|
|
537
|
-
}
|
|
538
|
-
if (completionTokensDetails?.audio_tokens != null ||
|
|
539
|
-
completionTokensDetails?.reasoning_tokens != null) {
|
|
540
|
-
usageMetadata.output_token_details = {
|
|
541
|
-
...(completionTokensDetails.audio_tokens != null && {
|
|
542
|
-
audio: completionTokensDetails.audio_tokens,
|
|
543
|
-
}),
|
|
544
|
-
...(completionTokensDetails.reasoning_tokens != null && {
|
|
545
|
-
reasoning: completionTokensDetails.reasoning_tokens,
|
|
546
|
-
}),
|
|
547
|
-
};
|
|
548
|
-
}
|
|
549
|
-
const generations = [];
|
|
550
|
-
for (const part of data.choices) {
|
|
551
|
-
const generation = {
|
|
552
|
-
text: part.message.content ?? '',
|
|
553
|
-
message: this._convertCompletionsMessageToBaseMessage(part.message, data),
|
|
554
|
-
};
|
|
555
|
-
generation.generationInfo = {
|
|
556
|
-
finish_reason: part.finish_reason,
|
|
557
|
-
...(part.logprobs ? { logprobs: part.logprobs } : {}),
|
|
558
|
-
};
|
|
559
|
-
if (messages.isAIMessage(generation.message)) {
|
|
560
|
-
generation.message.usage_metadata = usageMetadata;
|
|
561
|
-
}
|
|
562
|
-
generation.message = new messages.AIMessage(Object.fromEntries(Object.entries(generation.message).filter(([key]) => !key.startsWith('lc_'))));
|
|
563
|
-
generations.push(generation);
|
|
564
|
-
}
|
|
565
|
-
return {
|
|
566
|
-
generations,
|
|
567
|
-
llmOutput: {
|
|
568
|
-
tokenUsage: {
|
|
569
|
-
promptTokens: usageMetadata.input_tokens,
|
|
570
|
-
completionTokens: usageMetadata.output_tokens,
|
|
571
|
-
totalTokens: usageMetadata.total_tokens,
|
|
572
|
-
},
|
|
573
|
-
},
|
|
574
|
-
};
|
|
575
|
-
}
|
|
576
|
-
async *_streamResponseChunks(messages$1, options, runManager) {
|
|
577
|
-
if (this.includeReasoningContent !== true &&
|
|
578
|
-
this.includeReasoningDetails !== true) {
|
|
579
|
-
yield* super._streamResponseChunks(messages$1, options, runManager);
|
|
580
|
-
return;
|
|
581
|
-
}
|
|
582
|
-
const messagesMapped = index._convertMessagesToOpenAIParams(messages$1, this.model, {
|
|
583
|
-
includeReasoningContent: this.includeReasoningContent,
|
|
584
|
-
includeReasoningDetails: this.includeReasoningDetails,
|
|
585
|
-
convertReasoningDetailsToContent: this.convertReasoningDetailsToContent,
|
|
586
|
-
});
|
|
587
|
-
const params = {
|
|
588
|
-
...this.invocationParams(options, {
|
|
589
|
-
streaming: true,
|
|
590
|
-
}),
|
|
591
|
-
messages: messagesMapped,
|
|
592
|
-
stream: true,
|
|
593
|
-
};
|
|
594
|
-
let defaultRole;
|
|
595
|
-
const streamIterable = await this.completionWithRetry(params, options);
|
|
596
|
-
let usage;
|
|
597
|
-
for await (const data of streamIterable) {
|
|
598
|
-
if (options.signal?.aborted === true) {
|
|
599
|
-
return;
|
|
600
|
-
}
|
|
601
|
-
const choices = data.choices;
|
|
602
|
-
const choice = choices?.[0];
|
|
603
|
-
if (data.usage != null) {
|
|
604
|
-
usage = data.usage;
|
|
605
|
-
}
|
|
606
|
-
if (choice == null) {
|
|
607
|
-
continue;
|
|
608
|
-
}
|
|
609
|
-
const { delta } = choice;
|
|
610
|
-
if (delta == null) {
|
|
611
|
-
continue;
|
|
612
|
-
}
|
|
613
|
-
const chunk = this._convertCompletionsDeltaToBaseMessageChunk(delta, data, defaultRole);
|
|
614
|
-
defaultRole = delta.role ?? defaultRole;
|
|
615
|
-
const newTokenIndices = {
|
|
616
|
-
prompt: options.promptIndex ?? 0,
|
|
617
|
-
completion: choice.index,
|
|
618
|
-
};
|
|
619
|
-
if (typeof chunk.content !== 'string') {
|
|
620
|
-
// eslint-disable-next-line no-console
|
|
621
|
-
console.log('[WARNING]: Received non-string content from OpenAI. This is currently not supported.');
|
|
622
|
-
continue;
|
|
623
|
-
}
|
|
624
|
-
const generationInfo = { ...newTokenIndices };
|
|
625
|
-
if (choice.finish_reason != null) {
|
|
626
|
-
generationInfo.finish_reason = choice.finish_reason;
|
|
627
|
-
generationInfo.system_fingerprint = data.system_fingerprint;
|
|
628
|
-
generationInfo.model_name = data.model;
|
|
629
|
-
generationInfo.service_tier = data.service_tier;
|
|
630
|
-
}
|
|
631
|
-
if (this.logprobs === true) {
|
|
632
|
-
generationInfo.logprobs = choice.logprobs;
|
|
633
|
-
}
|
|
634
|
-
const generationChunk = new outputs.ChatGenerationChunk({
|
|
635
|
-
message: chunk,
|
|
636
|
-
text: chunk.content,
|
|
637
|
-
generationInfo,
|
|
638
|
-
});
|
|
639
|
-
yield generationChunk;
|
|
640
|
-
await runManager?.handleLLMNewToken(generationChunk.text, newTokenIndices, undefined, undefined, undefined, { chunk: generationChunk });
|
|
641
|
-
}
|
|
642
|
-
if (usage) {
|
|
643
|
-
const promptTokenDetails = usage.prompt_tokens_details;
|
|
644
|
-
const inputTokenDetails = {
|
|
645
|
-
...(promptTokenDetails?.audio_tokens != null && {
|
|
646
|
-
audio: promptTokenDetails.audio_tokens,
|
|
647
|
-
}),
|
|
648
|
-
...(promptTokenDetails?.cached_tokens != null && {
|
|
649
|
-
cache_read: promptTokenDetails.cached_tokens,
|
|
650
|
-
}),
|
|
651
|
-
...(promptTokenDetails?.cache_write_tokens != null && {
|
|
652
|
-
cache_creation: promptTokenDetails.cache_write_tokens,
|
|
653
|
-
}),
|
|
654
|
-
};
|
|
655
|
-
const outputTokenDetails = {
|
|
656
|
-
...(usage.completion_tokens_details?.audio_tokens != null && {
|
|
657
|
-
audio: usage.completion_tokens_details.audio_tokens,
|
|
658
|
-
}),
|
|
659
|
-
...(usage.completion_tokens_details?.reasoning_tokens != null && {
|
|
660
|
-
reasoning: usage.completion_tokens_details.reasoning_tokens,
|
|
661
|
-
}),
|
|
662
|
-
};
|
|
663
|
-
const generationChunk = new outputs.ChatGenerationChunk({
|
|
664
|
-
message: new messages.AIMessageChunk({
|
|
665
|
-
content: '',
|
|
666
|
-
response_metadata: { usage: { ...usage } },
|
|
667
|
-
usage_metadata: {
|
|
668
|
-
input_tokens: usage.prompt_tokens,
|
|
669
|
-
output_tokens: usage.completion_tokens,
|
|
670
|
-
total_tokens: usage.total_tokens,
|
|
671
|
-
...(Object.keys(inputTokenDetails).length > 0 && {
|
|
672
|
-
input_token_details: inputTokenDetails,
|
|
673
|
-
}),
|
|
674
|
-
...(Object.keys(outputTokenDetails).length > 0 && {
|
|
675
|
-
output_token_details: outputTokenDetails,
|
|
676
|
-
}),
|
|
677
|
-
},
|
|
678
|
-
}),
|
|
679
|
-
text: '',
|
|
680
|
-
});
|
|
681
|
-
yield generationChunk;
|
|
682
|
-
await runManager?.handleLLMNewToken(generationChunk.text, {
|
|
683
|
-
prompt: 0,
|
|
684
|
-
completion: 0,
|
|
685
|
-
}, undefined, undefined, undefined, { chunk: generationChunk });
|
|
686
|
-
}
|
|
687
|
-
if (options.signal?.aborted === true) {
|
|
688
|
-
throw new Error('AbortError');
|
|
689
|
-
}
|
|
690
|
-
}
|
|
691
|
-
}
|
|
692
|
-
class LibreChatOpenAIResponses extends openai.ChatOpenAIResponses {
|
|
693
|
-
_getReasoningParams(options) {
|
|
694
|
-
return getReasoningParams(this.reasoning, options);
|
|
695
|
-
}
|
|
696
|
-
_getClientOptions(options) {
|
|
697
|
-
return getCustomOpenAIClientOptions(this, options);
|
|
698
|
-
}
|
|
699
|
-
}
|
|
700
|
-
class LibreChatAzureOpenAICompletions extends openai.AzureChatOpenAICompletions {
|
|
701
|
-
_getReasoningParams(options) {
|
|
702
|
-
return getGatedReasoningParams(this.model, this.reasoning, options);
|
|
703
|
-
}
|
|
704
|
-
_getClientOptions(options) {
|
|
705
|
-
if (!this.client) {
|
|
706
|
-
const openAIEndpointConfig = {
|
|
707
|
-
azureOpenAIApiDeploymentName: this.azureOpenAIApiDeploymentName,
|
|
708
|
-
azureOpenAIApiInstanceName: this.azureOpenAIApiInstanceName,
|
|
709
|
-
azureOpenAIApiKey: this.azureOpenAIApiKey,
|
|
710
|
-
azureOpenAIBasePath: this.azureOpenAIBasePath,
|
|
711
|
-
azureADTokenProvider: this.azureADTokenProvider,
|
|
712
|
-
baseURL: this.clientConfig.baseURL,
|
|
713
|
-
};
|
|
714
|
-
const endpoint = openai.getEndpoint(openAIEndpointConfig);
|
|
715
|
-
const params = {
|
|
716
|
-
...this.clientConfig,
|
|
717
|
-
baseURL: endpoint,
|
|
718
|
-
timeout: this.timeout,
|
|
719
|
-
maxRetries: 0,
|
|
720
|
-
};
|
|
721
|
-
if (!this.azureADTokenProvider) {
|
|
722
|
-
params.apiKey = openAIEndpointConfig.azureOpenAIApiKey;
|
|
723
|
-
}
|
|
724
|
-
if (params.baseURL == null) {
|
|
725
|
-
delete params.baseURL;
|
|
726
|
-
}
|
|
727
|
-
const defaultHeaders = normalizeHeaders(params.defaultHeaders);
|
|
728
|
-
params.defaultHeaders = {
|
|
729
|
-
...params.defaultHeaders,
|
|
730
|
-
'User-Agent': defaultHeaders['User-Agent'] != null
|
|
731
|
-
? `${defaultHeaders['User-Agent']}: librechat-azure-openai-v2`
|
|
732
|
-
: 'librechat-azure-openai-v2',
|
|
733
|
-
};
|
|
734
|
-
this.client = new CustomAzureOpenAIClient({
|
|
735
|
-
apiVersion: this.azureOpenAIApiVersion,
|
|
736
|
-
azureADTokenProvider: this.azureADTokenProvider,
|
|
737
|
-
...params,
|
|
738
|
-
});
|
|
739
|
-
}
|
|
740
|
-
const requestOptions = {
|
|
741
|
-
...this.clientConfig,
|
|
742
|
-
...options,
|
|
743
|
-
};
|
|
744
|
-
if (this.azureOpenAIApiKey != null) {
|
|
745
|
-
requestOptions.headers = {
|
|
746
|
-
'api-key': this.azureOpenAIApiKey,
|
|
747
|
-
...requestOptions.headers,
|
|
748
|
-
};
|
|
749
|
-
requestOptions.query = {
|
|
750
|
-
'api-version': this.azureOpenAIApiVersion,
|
|
751
|
-
...requestOptions.query,
|
|
752
|
-
};
|
|
753
|
-
}
|
|
754
|
-
return requestOptions;
|
|
755
|
-
}
|
|
756
|
-
async completionWithRetry(request, requestOptions) {
|
|
757
|
-
return completionWithFilteredOpenAIStream(request, requestOptions, super.completionWithRetry.bind(this));
|
|
758
|
-
}
|
|
759
|
-
}
|
|
760
|
-
class LibreChatAzureOpenAIResponses extends openai.AzureChatOpenAIResponses {
|
|
761
|
-
_getReasoningParams(options) {
|
|
762
|
-
return getGatedReasoningParams(this.model, this.reasoning, options);
|
|
763
|
-
}
|
|
764
|
-
_getClientOptions(options) {
|
|
765
|
-
if (!this.client) {
|
|
766
|
-
const openAIEndpointConfig = {
|
|
767
|
-
azureOpenAIApiDeploymentName: this.azureOpenAIApiDeploymentName,
|
|
768
|
-
azureOpenAIApiInstanceName: this.azureOpenAIApiInstanceName,
|
|
769
|
-
azureOpenAIApiKey: this.azureOpenAIApiKey,
|
|
770
|
-
azureOpenAIBasePath: this.azureOpenAIBasePath,
|
|
771
|
-
azureADTokenProvider: this.azureADTokenProvider,
|
|
772
|
-
baseURL: this.clientConfig.baseURL,
|
|
773
|
-
};
|
|
774
|
-
const endpoint = openai.getEndpoint(openAIEndpointConfig);
|
|
775
|
-
const params = {
|
|
776
|
-
...this.clientConfig,
|
|
777
|
-
baseURL: endpoint,
|
|
778
|
-
timeout: this.timeout,
|
|
779
|
-
maxRetries: 0,
|
|
780
|
-
};
|
|
781
|
-
if (!this.azureADTokenProvider) {
|
|
782
|
-
params.apiKey = openAIEndpointConfig.azureOpenAIApiKey;
|
|
783
|
-
}
|
|
784
|
-
if (params.baseURL == null) {
|
|
785
|
-
delete params.baseURL;
|
|
786
|
-
}
|
|
787
|
-
const defaultHeaders = normalizeHeaders(params.defaultHeaders);
|
|
788
|
-
params.defaultHeaders = {
|
|
789
|
-
...params.defaultHeaders,
|
|
790
|
-
'User-Agent': defaultHeaders['User-Agent'] != null
|
|
791
|
-
? `${defaultHeaders['User-Agent']}: librechat-azure-openai-v2`
|
|
792
|
-
: 'librechat-azure-openai-v2',
|
|
793
|
-
};
|
|
794
|
-
this.client = new CustomAzureOpenAIClient({
|
|
795
|
-
apiVersion: this.azureOpenAIApiVersion,
|
|
796
|
-
azureADTokenProvider: this.azureADTokenProvider,
|
|
797
|
-
...params,
|
|
798
|
-
});
|
|
799
|
-
}
|
|
800
|
-
const requestOptions = {
|
|
801
|
-
...this.clientConfig,
|
|
802
|
-
...options,
|
|
803
|
-
};
|
|
804
|
-
if (this.azureOpenAIApiKey != null) {
|
|
805
|
-
requestOptions.headers = {
|
|
806
|
-
'api-key': this.azureOpenAIApiKey,
|
|
807
|
-
...requestOptions.headers,
|
|
808
|
-
};
|
|
809
|
-
requestOptions.query = {
|
|
810
|
-
'api-version': this.azureOpenAIApiVersion,
|
|
811
|
-
...requestOptions.query,
|
|
812
|
-
};
|
|
813
|
-
}
|
|
814
|
-
return requestOptions;
|
|
815
|
-
}
|
|
262
|
+
let toolDef;
|
|
263
|
+
if ((0, _langchain_core_utils_function_calling.isLangChainTool)(tool)) toolDef = (0, _langchain_core_utils_function_calling.convertToOpenAITool)(tool);
|
|
264
|
+
else toolDef = tool;
|
|
265
|
+
if (fields?.strict !== void 0) toolDef.function.strict = fields.strict;
|
|
266
|
+
return toolDef;
|
|
816
267
|
}
|
|
268
|
+
var CustomOpenAIClient = class extends _langchain_openai.OpenAIClient {
|
|
269
|
+
abortHandler;
|
|
270
|
+
async fetchWithTimeout(url, init, ms, controller) {
|
|
271
|
+
const { signal, ...options } = init || {};
|
|
272
|
+
const handler = createAbortHandler(controller);
|
|
273
|
+
this.abortHandler = handler;
|
|
274
|
+
if (signal) signal.addEventListener("abort", handler, { once: true });
|
|
275
|
+
const timeout = setTimeout(handler, ms);
|
|
276
|
+
const fetchOptions = {
|
|
277
|
+
signal: controller.signal,
|
|
278
|
+
...options
|
|
279
|
+
};
|
|
280
|
+
if (fetchOptions.method != null) fetchOptions.method = fetchOptions.method.toUpperCase();
|
|
281
|
+
return this.fetch.call(void 0, url, fetchOptions).finally(() => {
|
|
282
|
+
clearTimeout(timeout);
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
};
|
|
286
|
+
var CustomAzureOpenAIClient = class extends openai.AzureOpenAI {
|
|
287
|
+
abortHandler;
|
|
288
|
+
async fetchWithTimeout(url, init, ms, controller) {
|
|
289
|
+
const { signal, ...options } = init || {};
|
|
290
|
+
const handler = createAbortHandler(controller);
|
|
291
|
+
this.abortHandler = handler;
|
|
292
|
+
if (signal) signal.addEventListener("abort", handler, { once: true });
|
|
293
|
+
const timeout = setTimeout(handler, ms);
|
|
294
|
+
const fetchOptions = {
|
|
295
|
+
signal: controller.signal,
|
|
296
|
+
...options
|
|
297
|
+
};
|
|
298
|
+
if (fetchOptions.method != null) fetchOptions.method = fetchOptions.method.toUpperCase();
|
|
299
|
+
return this.fetch.call(void 0, url, fetchOptions).finally(() => {
|
|
300
|
+
clearTimeout(timeout);
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
};
|
|
304
|
+
var LibreChatOpenAICompletions = class extends _langchain_openai.ChatOpenAICompletions {
|
|
305
|
+
includeReasoningContent;
|
|
306
|
+
includeReasoningDetails;
|
|
307
|
+
convertReasoningDetailsToContent;
|
|
308
|
+
constructor(fields) {
|
|
309
|
+
super(fields);
|
|
310
|
+
this.includeReasoningContent = fields?.includeReasoningContent;
|
|
311
|
+
this.includeReasoningDetails = fields?.includeReasoningDetails;
|
|
312
|
+
this.convertReasoningDetailsToContent = fields?.convertReasoningDetailsToContent;
|
|
313
|
+
}
|
|
314
|
+
_getReasoningParams(options) {
|
|
315
|
+
return getReasoningParams(this.reasoning, options);
|
|
316
|
+
}
|
|
317
|
+
_getClientOptions(options) {
|
|
318
|
+
return getCustomOpenAIClientOptions(this, options);
|
|
319
|
+
}
|
|
320
|
+
async completionWithRetry(request, requestOptions) {
|
|
321
|
+
return completionWithFilteredOpenAIStream(request, requestOptions, super.completionWithRetry.bind(this));
|
|
322
|
+
}
|
|
323
|
+
_convertCompletionsDeltaToBaseMessageChunk(delta, rawResponse, defaultRole) {
|
|
324
|
+
return attachLibreChatDeltaFields(super._convertCompletionsDeltaToBaseMessageChunk(delta, rawResponse, defaultRole), delta);
|
|
325
|
+
}
|
|
326
|
+
_convertCompletionsMessageToBaseMessage(message, rawResponse) {
|
|
327
|
+
return attachLibreChatMessageFields(super._convertCompletionsMessageToBaseMessage(message, rawResponse), message);
|
|
328
|
+
}
|
|
329
|
+
async _generate(messages, options, runManager) {
|
|
330
|
+
if (this.includeReasoningContent !== true && this.includeReasoningDetails !== true) return super._generate(messages, options, runManager);
|
|
331
|
+
options.signal?.throwIfAborted();
|
|
332
|
+
const usageMetadata = {};
|
|
333
|
+
const params = this.invocationParams(options);
|
|
334
|
+
const messagesMapped = require_index._convertMessagesToOpenAIParams(messages, this.model, {
|
|
335
|
+
includeReasoningContent: this.includeReasoningContent,
|
|
336
|
+
includeReasoningDetails: this.includeReasoningDetails,
|
|
337
|
+
convertReasoningDetailsToContent: this.convertReasoningDetailsToContent
|
|
338
|
+
});
|
|
339
|
+
if (params.stream === true) {
|
|
340
|
+
const stream = this._streamResponseChunks(messages, options, runManager);
|
|
341
|
+
const finalChunks = /* @__PURE__ */ new Map();
|
|
342
|
+
for await (const chunk of stream) {
|
|
343
|
+
chunk.message.response_metadata = {
|
|
344
|
+
...chunk.generationInfo,
|
|
345
|
+
...chunk.message.response_metadata
|
|
346
|
+
};
|
|
347
|
+
const index = typeof chunk.generationInfo?.completion === "number" ? chunk.generationInfo.completion : 0;
|
|
348
|
+
const existingChunk = finalChunks.get(index);
|
|
349
|
+
if (existingChunk == null) finalChunks.set(index, chunk);
|
|
350
|
+
else finalChunks.set(index, existingChunk.concat(chunk));
|
|
351
|
+
}
|
|
352
|
+
const generations = Array.from(finalChunks.entries()).sort(([aKey], [bKey]) => aKey - bKey).map(([, value]) => value);
|
|
353
|
+
const { functions, function_call } = this.invocationParams(options);
|
|
354
|
+
const promptTokenUsage = await this._getEstimatedTokenCountFromPrompt(messages, functions, function_call);
|
|
355
|
+
const completionTokenUsage = await this._getNumTokensFromGenerations(generations);
|
|
356
|
+
usageMetadata.input_tokens = promptTokenUsage;
|
|
357
|
+
usageMetadata.output_tokens = completionTokenUsage;
|
|
358
|
+
usageMetadata.total_tokens = promptTokenUsage + completionTokenUsage;
|
|
359
|
+
return {
|
|
360
|
+
generations,
|
|
361
|
+
llmOutput: { estimatedTokenUsage: {
|
|
362
|
+
promptTokens: usageMetadata.input_tokens,
|
|
363
|
+
completionTokens: usageMetadata.output_tokens,
|
|
364
|
+
totalTokens: usageMetadata.total_tokens
|
|
365
|
+
} }
|
|
366
|
+
};
|
|
367
|
+
}
|
|
368
|
+
const data = await this.completionWithRetry({
|
|
369
|
+
...params,
|
|
370
|
+
stream: false,
|
|
371
|
+
messages: messagesMapped
|
|
372
|
+
}, {
|
|
373
|
+
signal: options.signal,
|
|
374
|
+
...options.options
|
|
375
|
+
});
|
|
376
|
+
const { completion_tokens: completionTokens, prompt_tokens: promptTokens, total_tokens: totalTokens, prompt_tokens_details: promptTokensDetails, completion_tokens_details: completionTokensDetails } = data.usage ?? {};
|
|
377
|
+
if (completionTokens != null) usageMetadata.output_tokens = (usageMetadata.output_tokens ?? 0) + completionTokens;
|
|
378
|
+
if (promptTokens != null) usageMetadata.input_tokens = (usageMetadata.input_tokens ?? 0) + promptTokens;
|
|
379
|
+
if (totalTokens != null) usageMetadata.total_tokens = (usageMetadata.total_tokens ?? 0) + totalTokens;
|
|
380
|
+
const promptTokensDetailsWithCacheWrite = promptTokensDetails;
|
|
381
|
+
if (promptTokensDetailsWithCacheWrite?.audio_tokens != null || promptTokensDetailsWithCacheWrite?.cached_tokens != null || promptTokensDetailsWithCacheWrite?.cache_write_tokens != null) usageMetadata.input_token_details = {
|
|
382
|
+
...promptTokensDetailsWithCacheWrite.audio_tokens != null && { audio: promptTokensDetailsWithCacheWrite.audio_tokens },
|
|
383
|
+
...promptTokensDetailsWithCacheWrite.cached_tokens != null && { cache_read: promptTokensDetailsWithCacheWrite.cached_tokens },
|
|
384
|
+
...promptTokensDetailsWithCacheWrite.cache_write_tokens != null && { cache_creation: promptTokensDetailsWithCacheWrite.cache_write_tokens }
|
|
385
|
+
};
|
|
386
|
+
if (completionTokensDetails?.audio_tokens != null || completionTokensDetails?.reasoning_tokens != null) usageMetadata.output_token_details = {
|
|
387
|
+
...completionTokensDetails.audio_tokens != null && { audio: completionTokensDetails.audio_tokens },
|
|
388
|
+
...completionTokensDetails.reasoning_tokens != null && { reasoning: completionTokensDetails.reasoning_tokens }
|
|
389
|
+
};
|
|
390
|
+
const generations = [];
|
|
391
|
+
for (const part of data.choices) {
|
|
392
|
+
const generation = {
|
|
393
|
+
text: part.message.content ?? "",
|
|
394
|
+
message: this._convertCompletionsMessageToBaseMessage(part.message, data)
|
|
395
|
+
};
|
|
396
|
+
generation.generationInfo = {
|
|
397
|
+
finish_reason: part.finish_reason,
|
|
398
|
+
...part.logprobs ? { logprobs: part.logprobs } : {}
|
|
399
|
+
};
|
|
400
|
+
if ((0, _langchain_core_messages.isAIMessage)(generation.message)) generation.message.usage_metadata = usageMetadata;
|
|
401
|
+
generation.message = new _langchain_core_messages.AIMessage(Object.fromEntries(Object.entries(generation.message).filter(([key]) => !key.startsWith("lc_"))));
|
|
402
|
+
generations.push(generation);
|
|
403
|
+
}
|
|
404
|
+
return {
|
|
405
|
+
generations,
|
|
406
|
+
llmOutput: { tokenUsage: {
|
|
407
|
+
promptTokens: usageMetadata.input_tokens,
|
|
408
|
+
completionTokens: usageMetadata.output_tokens,
|
|
409
|
+
totalTokens: usageMetadata.total_tokens
|
|
410
|
+
} }
|
|
411
|
+
};
|
|
412
|
+
}
|
|
413
|
+
async *_streamResponseChunks(messages, options, runManager) {
|
|
414
|
+
if (this.includeReasoningContent !== true && this.includeReasoningDetails !== true) {
|
|
415
|
+
yield* super._streamResponseChunks(messages, options, runManager);
|
|
416
|
+
return;
|
|
417
|
+
}
|
|
418
|
+
const messagesMapped = require_index._convertMessagesToOpenAIParams(messages, this.model, {
|
|
419
|
+
includeReasoningContent: this.includeReasoningContent,
|
|
420
|
+
includeReasoningDetails: this.includeReasoningDetails,
|
|
421
|
+
convertReasoningDetailsToContent: this.convertReasoningDetailsToContent
|
|
422
|
+
});
|
|
423
|
+
const params = {
|
|
424
|
+
...this.invocationParams(options, { streaming: true }),
|
|
425
|
+
messages: messagesMapped,
|
|
426
|
+
stream: true
|
|
427
|
+
};
|
|
428
|
+
let defaultRole;
|
|
429
|
+
const streamIterable = await this.completionWithRetry(params, options);
|
|
430
|
+
let usage;
|
|
431
|
+
for await (const data of streamIterable) {
|
|
432
|
+
if (options.signal?.aborted === true) return;
|
|
433
|
+
const choice = data.choices?.[0];
|
|
434
|
+
if (data.usage != null) usage = data.usage;
|
|
435
|
+
if (choice == null) continue;
|
|
436
|
+
const { delta } = choice;
|
|
437
|
+
if (delta == null) continue;
|
|
438
|
+
const chunk = this._convertCompletionsDeltaToBaseMessageChunk(delta, data, defaultRole);
|
|
439
|
+
defaultRole = delta.role ?? defaultRole;
|
|
440
|
+
const newTokenIndices = {
|
|
441
|
+
prompt: options.promptIndex ?? 0,
|
|
442
|
+
completion: choice.index
|
|
443
|
+
};
|
|
444
|
+
if (typeof chunk.content !== "string") {
|
|
445
|
+
console.log("[WARNING]: Received non-string content from OpenAI. This is currently not supported.");
|
|
446
|
+
continue;
|
|
447
|
+
}
|
|
448
|
+
const generationInfo = { ...newTokenIndices };
|
|
449
|
+
if (choice.finish_reason != null) {
|
|
450
|
+
generationInfo.finish_reason = choice.finish_reason;
|
|
451
|
+
generationInfo.system_fingerprint = data.system_fingerprint;
|
|
452
|
+
generationInfo.model_name = data.model;
|
|
453
|
+
generationInfo.service_tier = data.service_tier;
|
|
454
|
+
}
|
|
455
|
+
if (this.logprobs === true) generationInfo.logprobs = choice.logprobs;
|
|
456
|
+
const generationChunk = new _langchain_core_outputs.ChatGenerationChunk({
|
|
457
|
+
message: chunk,
|
|
458
|
+
text: chunk.content,
|
|
459
|
+
generationInfo
|
|
460
|
+
});
|
|
461
|
+
yield generationChunk;
|
|
462
|
+
await runManager?.handleLLMNewToken(generationChunk.text, newTokenIndices, void 0, void 0, void 0, { chunk: generationChunk });
|
|
463
|
+
}
|
|
464
|
+
if (usage) {
|
|
465
|
+
const promptTokenDetails = usage.prompt_tokens_details;
|
|
466
|
+
const inputTokenDetails = {
|
|
467
|
+
...promptTokenDetails?.audio_tokens != null && { audio: promptTokenDetails.audio_tokens },
|
|
468
|
+
...promptTokenDetails?.cached_tokens != null && { cache_read: promptTokenDetails.cached_tokens },
|
|
469
|
+
...promptTokenDetails?.cache_write_tokens != null && { cache_creation: promptTokenDetails.cache_write_tokens }
|
|
470
|
+
};
|
|
471
|
+
const outputTokenDetails = {
|
|
472
|
+
...usage.completion_tokens_details?.audio_tokens != null && { audio: usage.completion_tokens_details.audio_tokens },
|
|
473
|
+
...usage.completion_tokens_details?.reasoning_tokens != null && { reasoning: usage.completion_tokens_details.reasoning_tokens }
|
|
474
|
+
};
|
|
475
|
+
const generationChunk = new _langchain_core_outputs.ChatGenerationChunk({
|
|
476
|
+
message: new _langchain_core_messages.AIMessageChunk({
|
|
477
|
+
content: "",
|
|
478
|
+
response_metadata: { usage: { ...usage } },
|
|
479
|
+
usage_metadata: {
|
|
480
|
+
input_tokens: usage.prompt_tokens,
|
|
481
|
+
output_tokens: usage.completion_tokens,
|
|
482
|
+
total_tokens: usage.total_tokens,
|
|
483
|
+
...Object.keys(inputTokenDetails).length > 0 && { input_token_details: inputTokenDetails },
|
|
484
|
+
...Object.keys(outputTokenDetails).length > 0 && { output_token_details: outputTokenDetails }
|
|
485
|
+
}
|
|
486
|
+
}),
|
|
487
|
+
text: ""
|
|
488
|
+
});
|
|
489
|
+
yield generationChunk;
|
|
490
|
+
await runManager?.handleLLMNewToken(generationChunk.text, {
|
|
491
|
+
prompt: 0,
|
|
492
|
+
completion: 0
|
|
493
|
+
}, void 0, void 0, void 0, { chunk: generationChunk });
|
|
494
|
+
}
|
|
495
|
+
if (options.signal?.aborted === true) throw new Error("AbortError");
|
|
496
|
+
}
|
|
497
|
+
};
|
|
498
|
+
var LibreChatOpenAIResponses = class extends _langchain_openai.ChatOpenAIResponses {
|
|
499
|
+
_getReasoningParams(options) {
|
|
500
|
+
return getReasoningParams(this.reasoning, options);
|
|
501
|
+
}
|
|
502
|
+
_getClientOptions(options) {
|
|
503
|
+
return getCustomOpenAIClientOptions(this, options);
|
|
504
|
+
}
|
|
505
|
+
};
|
|
506
|
+
var LibreChatAzureOpenAICompletions = class extends _langchain_openai.AzureChatOpenAICompletions {
|
|
507
|
+
_getReasoningParams(options) {
|
|
508
|
+
return getGatedReasoningParams(this.model, this.reasoning, options);
|
|
509
|
+
}
|
|
510
|
+
_getClientOptions(options) {
|
|
511
|
+
if (!this.client) {
|
|
512
|
+
const openAIEndpointConfig = {
|
|
513
|
+
azureOpenAIApiDeploymentName: this.azureOpenAIApiDeploymentName,
|
|
514
|
+
azureOpenAIApiInstanceName: this.azureOpenAIApiInstanceName,
|
|
515
|
+
azureOpenAIApiKey: this.azureOpenAIApiKey,
|
|
516
|
+
azureOpenAIBasePath: this.azureOpenAIBasePath,
|
|
517
|
+
azureADTokenProvider: this.azureADTokenProvider,
|
|
518
|
+
baseURL: this.clientConfig.baseURL
|
|
519
|
+
};
|
|
520
|
+
const endpoint = (0, _langchain_openai.getEndpoint)(openAIEndpointConfig);
|
|
521
|
+
const params = {
|
|
522
|
+
...this.clientConfig,
|
|
523
|
+
baseURL: endpoint,
|
|
524
|
+
timeout: this.timeout,
|
|
525
|
+
maxRetries: 0
|
|
526
|
+
};
|
|
527
|
+
if (!this.azureADTokenProvider) params.apiKey = openAIEndpointConfig.azureOpenAIApiKey;
|
|
528
|
+
if (params.baseURL == null) delete params.baseURL;
|
|
529
|
+
const defaultHeaders = normalizeHeaders(params.defaultHeaders);
|
|
530
|
+
params.defaultHeaders = {
|
|
531
|
+
...params.defaultHeaders,
|
|
532
|
+
"User-Agent": defaultHeaders["User-Agent"] != null ? `${defaultHeaders["User-Agent"]}: librechat-azure-openai-v2` : "librechat-azure-openai-v2"
|
|
533
|
+
};
|
|
534
|
+
this.client = new CustomAzureOpenAIClient({
|
|
535
|
+
apiVersion: this.azureOpenAIApiVersion,
|
|
536
|
+
azureADTokenProvider: this.azureADTokenProvider,
|
|
537
|
+
...params
|
|
538
|
+
});
|
|
539
|
+
}
|
|
540
|
+
const requestOptions = {
|
|
541
|
+
...this.clientConfig,
|
|
542
|
+
...options
|
|
543
|
+
};
|
|
544
|
+
if (this.azureOpenAIApiKey != null) {
|
|
545
|
+
requestOptions.headers = {
|
|
546
|
+
"api-key": this.azureOpenAIApiKey,
|
|
547
|
+
...requestOptions.headers
|
|
548
|
+
};
|
|
549
|
+
requestOptions.query = {
|
|
550
|
+
"api-version": this.azureOpenAIApiVersion,
|
|
551
|
+
...requestOptions.query
|
|
552
|
+
};
|
|
553
|
+
}
|
|
554
|
+
return requestOptions;
|
|
555
|
+
}
|
|
556
|
+
async completionWithRetry(request, requestOptions) {
|
|
557
|
+
return completionWithFilteredOpenAIStream(request, requestOptions, super.completionWithRetry.bind(this));
|
|
558
|
+
}
|
|
559
|
+
};
|
|
560
|
+
var LibreChatAzureOpenAIResponses = class extends _langchain_openai.AzureChatOpenAIResponses {
|
|
561
|
+
_getReasoningParams(options) {
|
|
562
|
+
return getGatedReasoningParams(this.model, this.reasoning, options);
|
|
563
|
+
}
|
|
564
|
+
_getClientOptions(options) {
|
|
565
|
+
if (!this.client) {
|
|
566
|
+
const openAIEndpointConfig = {
|
|
567
|
+
azureOpenAIApiDeploymentName: this.azureOpenAIApiDeploymentName,
|
|
568
|
+
azureOpenAIApiInstanceName: this.azureOpenAIApiInstanceName,
|
|
569
|
+
azureOpenAIApiKey: this.azureOpenAIApiKey,
|
|
570
|
+
azureOpenAIBasePath: this.azureOpenAIBasePath,
|
|
571
|
+
azureADTokenProvider: this.azureADTokenProvider,
|
|
572
|
+
baseURL: this.clientConfig.baseURL
|
|
573
|
+
};
|
|
574
|
+
const endpoint = (0, _langchain_openai.getEndpoint)(openAIEndpointConfig);
|
|
575
|
+
const params = {
|
|
576
|
+
...this.clientConfig,
|
|
577
|
+
baseURL: endpoint,
|
|
578
|
+
timeout: this.timeout,
|
|
579
|
+
maxRetries: 0
|
|
580
|
+
};
|
|
581
|
+
if (!this.azureADTokenProvider) params.apiKey = openAIEndpointConfig.azureOpenAIApiKey;
|
|
582
|
+
if (params.baseURL == null) delete params.baseURL;
|
|
583
|
+
const defaultHeaders = normalizeHeaders(params.defaultHeaders);
|
|
584
|
+
params.defaultHeaders = {
|
|
585
|
+
...params.defaultHeaders,
|
|
586
|
+
"User-Agent": defaultHeaders["User-Agent"] != null ? `${defaultHeaders["User-Agent"]}: librechat-azure-openai-v2` : "librechat-azure-openai-v2"
|
|
587
|
+
};
|
|
588
|
+
this.client = new CustomAzureOpenAIClient({
|
|
589
|
+
apiVersion: this.azureOpenAIApiVersion,
|
|
590
|
+
azureADTokenProvider: this.azureADTokenProvider,
|
|
591
|
+
...params
|
|
592
|
+
});
|
|
593
|
+
}
|
|
594
|
+
const requestOptions = {
|
|
595
|
+
...this.clientConfig,
|
|
596
|
+
...options
|
|
597
|
+
};
|
|
598
|
+
if (this.azureOpenAIApiKey != null) {
|
|
599
|
+
requestOptions.headers = {
|
|
600
|
+
"api-key": this.azureOpenAIApiKey,
|
|
601
|
+
...requestOptions.headers
|
|
602
|
+
};
|
|
603
|
+
requestOptions.query = {
|
|
604
|
+
"api-version": this.azureOpenAIApiVersion,
|
|
605
|
+
...requestOptions.query
|
|
606
|
+
};
|
|
607
|
+
}
|
|
608
|
+
return requestOptions;
|
|
609
|
+
}
|
|
610
|
+
};
|
|
817
611
|
function withLibreChatOpenAIFields(fields) {
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
612
|
+
const nextFields = fields ?? {};
|
|
613
|
+
return {
|
|
614
|
+
...nextFields,
|
|
615
|
+
completions: nextFields.completions ?? new LibreChatOpenAICompletions(nextFields),
|
|
616
|
+
responses: nextFields.responses ?? new LibreChatOpenAIResponses(nextFields)
|
|
617
|
+
};
|
|
824
618
|
}
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
}
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
|
|
1092
|
-
|
|
1093
|
-
|
|
1094
|
-
|
|
1095
|
-
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
|
|
1101
|
-
|
|
1102
|
-
|
|
1103
|
-
|
|
1104
|
-
|
|
1105
|
-
|
|
1106
|
-
|
|
1107
|
-
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
|
|
1153
|
-
|
|
1154
|
-
|
|
1155
|
-
|
|
1156
|
-
|
|
1157
|
-
|
|
1158
|
-
|
|
1159
|
-
|
|
1160
|
-
|
|
1161
|
-
|
|
1162
|
-
|
|
1163
|
-
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
|
|
1167
|
-
|
|
1168
|
-
|
|
1169
|
-
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
|
|
1182
|
-
|
|
1183
|
-
|
|
1184
|
-
|
|
1185
|
-
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
|
|
1190
|
-
|
|
1191
|
-
|
|
1192
|
-
|
|
1193
|
-
|
|
1194
|
-
|
|
1195
|
-
|
|
1196
|
-
|
|
1197
|
-
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
|
|
1208
|
-
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
1214
|
-
|
|
1215
|
-
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
-
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
|
|
1222
|
-
|
|
1223
|
-
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
|
|
1229
|
-
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
|
-
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
|
|
1247
|
-
async *_yieldDeepSeekStreamChunk(chunk, runManager) {
|
|
1248
|
-
yield chunk;
|
|
1249
|
-
await runManager?.handleLLMNewToken(chunk.text, this._getDeepSeekTokenIndices(chunk), undefined, undefined, undefined, { chunk });
|
|
1250
|
-
}
|
|
1251
|
-
_getDeepSeekTokenIndices(chunk) {
|
|
1252
|
-
return getStreamChunkTokenIndices(chunk);
|
|
1253
|
-
}
|
|
1254
|
-
_getDeepSeekPartialTagSplitIndex(text, tag) {
|
|
1255
|
-
for (let i = tag.length - 1; i >= 1; i--) {
|
|
1256
|
-
if (text.endsWith(tag.substring(0, i))) {
|
|
1257
|
-
return text.length - i;
|
|
1258
|
-
}
|
|
1259
|
-
}
|
|
1260
|
-
return -1;
|
|
1261
|
-
}
|
|
1262
|
-
}
|
|
1263
|
-
class ChatMoonshot extends ChatOpenAI {
|
|
1264
|
-
constructor(fields) {
|
|
1265
|
-
super({
|
|
1266
|
-
...fields,
|
|
1267
|
-
includeReasoningContent: true,
|
|
1268
|
-
});
|
|
1269
|
-
}
|
|
1270
|
-
static lc_name() {
|
|
1271
|
-
return 'LibreChatMoonshot';
|
|
1272
|
-
}
|
|
1273
|
-
}
|
|
1274
|
-
class ChatXAI extends xai.ChatXAI {
|
|
1275
|
-
_lc_stream_delay;
|
|
1276
|
-
constructor(fields) {
|
|
1277
|
-
super(fields);
|
|
1278
|
-
this._lc_stream_delay = fields?._lc_stream_delay;
|
|
1279
|
-
const customBaseURL = fields?.configuration?.baseURL ?? fields?.clientConfig?.baseURL;
|
|
1280
|
-
if (customBaseURL != null && customBaseURL) {
|
|
1281
|
-
this.clientConfig = {
|
|
1282
|
-
...this.clientConfig,
|
|
1283
|
-
baseURL: customBaseURL,
|
|
1284
|
-
};
|
|
1285
|
-
// Reset the client to force recreation with new config
|
|
1286
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
1287
|
-
this.client = undefined;
|
|
1288
|
-
}
|
|
1289
|
-
}
|
|
1290
|
-
static lc_name() {
|
|
1291
|
-
return 'LibreChatXAI';
|
|
1292
|
-
}
|
|
1293
|
-
get exposedClient() {
|
|
1294
|
-
return this.client;
|
|
1295
|
-
}
|
|
1296
|
-
_getClientOptions(options) {
|
|
1297
|
-
if (!this.client) {
|
|
1298
|
-
const openAIEndpointConfig = {
|
|
1299
|
-
baseURL: this.clientConfig.baseURL,
|
|
1300
|
-
};
|
|
1301
|
-
const endpoint = openai.getEndpoint(openAIEndpointConfig);
|
|
1302
|
-
const params = {
|
|
1303
|
-
...this.clientConfig,
|
|
1304
|
-
baseURL: endpoint,
|
|
1305
|
-
timeout: this.timeout,
|
|
1306
|
-
maxRetries: 0,
|
|
1307
|
-
};
|
|
1308
|
-
if (params.baseURL == null) {
|
|
1309
|
-
delete params.baseURL;
|
|
1310
|
-
}
|
|
1311
|
-
this.client = new CustomOpenAIClient(params);
|
|
1312
|
-
}
|
|
1313
|
-
const requestOptions = {
|
|
1314
|
-
...this.clientConfig,
|
|
1315
|
-
...options,
|
|
1316
|
-
};
|
|
1317
|
-
return requestOptions;
|
|
1318
|
-
}
|
|
1319
|
-
async *_streamResponseChunks(messages, options, runManager) {
|
|
1320
|
-
yield* delayStreamChunks(super._streamResponseChunks(messages, options, undefined), this._lc_stream_delay, options.signal, runManager);
|
|
1321
|
-
}
|
|
1322
|
-
}
|
|
1323
|
-
|
|
619
|
+
var ChatOpenAI = class extends _langchain_openai.ChatOpenAI {
|
|
620
|
+
_lc_stream_delay;
|
|
621
|
+
constructor(fields) {
|
|
622
|
+
super(withLibreChatOpenAIFields(fields));
|
|
623
|
+
this._lc_stream_delay = fields?._lc_stream_delay;
|
|
624
|
+
}
|
|
625
|
+
get exposedClient() {
|
|
626
|
+
return getExposedOpenAIClient(this.completions, this.responses, this._useResponsesApi(void 0));
|
|
627
|
+
}
|
|
628
|
+
static lc_name() {
|
|
629
|
+
return "LibreChatOpenAI";
|
|
630
|
+
}
|
|
631
|
+
_getClientOptions(options) {
|
|
632
|
+
if (!this.client) {
|
|
633
|
+
const endpoint = (0, _langchain_openai.getEndpoint)({ baseURL: this.clientConfig.baseURL });
|
|
634
|
+
const params = {
|
|
635
|
+
...this.clientConfig,
|
|
636
|
+
baseURL: endpoint,
|
|
637
|
+
timeout: this.timeout,
|
|
638
|
+
maxRetries: 0
|
|
639
|
+
};
|
|
640
|
+
if (params.baseURL == null) delete params.baseURL;
|
|
641
|
+
this.client = new CustomOpenAIClient(params);
|
|
642
|
+
}
|
|
643
|
+
return {
|
|
644
|
+
...this.clientConfig,
|
|
645
|
+
...options
|
|
646
|
+
};
|
|
647
|
+
}
|
|
648
|
+
/**
|
|
649
|
+
* Returns backwards compatible reasoning parameters from constructor params and call options
|
|
650
|
+
* @internal
|
|
651
|
+
*/
|
|
652
|
+
getReasoningParams(options) {
|
|
653
|
+
return getReasoningParams(this.reasoning, options);
|
|
654
|
+
}
|
|
655
|
+
_getReasoningParams(options) {
|
|
656
|
+
return this.getReasoningParams(options);
|
|
657
|
+
}
|
|
658
|
+
async *_streamResponseChunks(messages, options, runManager) {
|
|
659
|
+
yield* delayStreamChunks(super._streamResponseChunks(messages, options, void 0), this._lc_stream_delay, options.signal, runManager);
|
|
660
|
+
}
|
|
661
|
+
};
|
|
662
|
+
var AzureChatOpenAI = class extends _langchain_openai.AzureChatOpenAI {
|
|
663
|
+
_lc_stream_delay;
|
|
664
|
+
constructor(fields) {
|
|
665
|
+
super(fields);
|
|
666
|
+
this.completions = new LibreChatAzureOpenAICompletions(fields);
|
|
667
|
+
this.responses = new LibreChatAzureOpenAIResponses(fields);
|
|
668
|
+
this._lc_stream_delay = fields?._lc_stream_delay;
|
|
669
|
+
}
|
|
670
|
+
get exposedClient() {
|
|
671
|
+
return getExposedOpenAIClient(this.completions, this.responses, this._useResponsesApi(void 0));
|
|
672
|
+
}
|
|
673
|
+
static lc_name() {
|
|
674
|
+
return "LibreChatAzureOpenAI";
|
|
675
|
+
}
|
|
676
|
+
/**
|
|
677
|
+
* Returns backwards compatible reasoning parameters from constructor params and call options
|
|
678
|
+
* @internal
|
|
679
|
+
*/
|
|
680
|
+
getReasoningParams(options) {
|
|
681
|
+
return getGatedReasoningParams(this.model, this.reasoning, options);
|
|
682
|
+
}
|
|
683
|
+
_getReasoningParams(options) {
|
|
684
|
+
return this.getReasoningParams(options);
|
|
685
|
+
}
|
|
686
|
+
_getClientOptions(options) {
|
|
687
|
+
if (!this.client) {
|
|
688
|
+
const openAIEndpointConfig = {
|
|
689
|
+
azureOpenAIApiDeploymentName: this.azureOpenAIApiDeploymentName,
|
|
690
|
+
azureOpenAIApiInstanceName: this.azureOpenAIApiInstanceName,
|
|
691
|
+
azureOpenAIApiKey: this.azureOpenAIApiKey,
|
|
692
|
+
azureOpenAIBasePath: this.azureOpenAIBasePath,
|
|
693
|
+
azureADTokenProvider: this.azureADTokenProvider,
|
|
694
|
+
baseURL: this.clientConfig.baseURL
|
|
695
|
+
};
|
|
696
|
+
const endpoint = (0, _langchain_openai.getEndpoint)(openAIEndpointConfig);
|
|
697
|
+
const params = {
|
|
698
|
+
...this.clientConfig,
|
|
699
|
+
baseURL: endpoint,
|
|
700
|
+
timeout: this.timeout,
|
|
701
|
+
maxRetries: 0
|
|
702
|
+
};
|
|
703
|
+
if (!this.azureADTokenProvider) params.apiKey = openAIEndpointConfig.azureOpenAIApiKey;
|
|
704
|
+
if (params.baseURL == null) delete params.baseURL;
|
|
705
|
+
const defaultHeaders = normalizeHeaders(params.defaultHeaders);
|
|
706
|
+
params.defaultHeaders = {
|
|
707
|
+
...params.defaultHeaders,
|
|
708
|
+
"User-Agent": defaultHeaders["User-Agent"] != null ? `${defaultHeaders["User-Agent"]}: librechat-azure-openai-v2` : "librechat-azure-openai-v2"
|
|
709
|
+
};
|
|
710
|
+
this.client = new CustomAzureOpenAIClient({
|
|
711
|
+
apiVersion: this.azureOpenAIApiVersion,
|
|
712
|
+
azureADTokenProvider: this.azureADTokenProvider,
|
|
713
|
+
...params
|
|
714
|
+
});
|
|
715
|
+
}
|
|
716
|
+
const requestOptions = {
|
|
717
|
+
...this.clientConfig,
|
|
718
|
+
...options
|
|
719
|
+
};
|
|
720
|
+
if (this.azureOpenAIApiKey != null) {
|
|
721
|
+
requestOptions.headers = {
|
|
722
|
+
"api-key": this.azureOpenAIApiKey,
|
|
723
|
+
...requestOptions.headers
|
|
724
|
+
};
|
|
725
|
+
requestOptions.query = {
|
|
726
|
+
"api-version": this.azureOpenAIApiVersion,
|
|
727
|
+
...requestOptions.query
|
|
728
|
+
};
|
|
729
|
+
}
|
|
730
|
+
return requestOptions;
|
|
731
|
+
}
|
|
732
|
+
async *_streamResponseChunks(messages, options, runManager) {
|
|
733
|
+
yield* delayStreamChunks(super._streamResponseChunks(messages, options, void 0), this._lc_stream_delay, options.signal, runManager);
|
|
734
|
+
}
|
|
735
|
+
};
|
|
736
|
+
var ChatDeepSeek = class extends _langchain_deepseek.ChatDeepSeek {
|
|
737
|
+
_lc_stream_delay;
|
|
738
|
+
constructor(fields) {
|
|
739
|
+
super(fields);
|
|
740
|
+
this._lc_stream_delay = fields?._lc_stream_delay;
|
|
741
|
+
}
|
|
742
|
+
get exposedClient() {
|
|
743
|
+
return this.client;
|
|
744
|
+
}
|
|
745
|
+
static lc_name() {
|
|
746
|
+
return "LibreChatDeepSeek";
|
|
747
|
+
}
|
|
748
|
+
_convertDeepSeekMessages(messages) {
|
|
749
|
+
return require_index._convertMessagesToOpenAIParams(messages, this.model, { includeReasoningContent: true });
|
|
750
|
+
}
|
|
751
|
+
async _generate(messages, options, runManager) {
|
|
752
|
+
options.signal?.throwIfAborted();
|
|
753
|
+
const params = this.invocationParams(options);
|
|
754
|
+
if (params.stream === true) return super._generate(messages, options, runManager);
|
|
755
|
+
const messagesMapped = this._convertDeepSeekMessages(messages);
|
|
756
|
+
const response = await this.completionWithRetry({
|
|
757
|
+
...params,
|
|
758
|
+
stream: false,
|
|
759
|
+
messages: messagesMapped
|
|
760
|
+
}, {
|
|
761
|
+
signal: options.signal,
|
|
762
|
+
...options.options
|
|
763
|
+
});
|
|
764
|
+
const usageMetadata = createUsageMetadata(response.usage);
|
|
765
|
+
return {
|
|
766
|
+
generations: response.choices.map((part) => {
|
|
767
|
+
const generation = {
|
|
768
|
+
text: part.message.content ?? "",
|
|
769
|
+
message: this._convertCompletionsMessageToBaseMessage(part.message, response)
|
|
770
|
+
};
|
|
771
|
+
generation.generationInfo = {
|
|
772
|
+
finish_reason: part.finish_reason,
|
|
773
|
+
...part.logprobs != null ? { logprobs: part.logprobs } : {}
|
|
774
|
+
};
|
|
775
|
+
if ((0, _langchain_core_messages.isAIMessage)(generation.message)) generation.message.usage_metadata = usageMetadata;
|
|
776
|
+
generation.message = new _langchain_core_messages.AIMessage(Object.fromEntries(Object.entries(generation.message).filter(([key]) => !key.startsWith("lc_"))));
|
|
777
|
+
return generation;
|
|
778
|
+
}),
|
|
779
|
+
llmOutput: { tokenUsage: {
|
|
780
|
+
promptTokens: usageMetadata.input_tokens,
|
|
781
|
+
completionTokens: usageMetadata.output_tokens,
|
|
782
|
+
totalTokens: usageMetadata.total_tokens
|
|
783
|
+
} }
|
|
784
|
+
};
|
|
785
|
+
}
|
|
786
|
+
_getClientOptions(options) {
|
|
787
|
+
if (!this.client) {
|
|
788
|
+
const endpoint = (0, _langchain_openai.getEndpoint)({ baseURL: this.clientConfig.baseURL });
|
|
789
|
+
const params = {
|
|
790
|
+
...this.clientConfig,
|
|
791
|
+
baseURL: endpoint,
|
|
792
|
+
timeout: this.timeout,
|
|
793
|
+
maxRetries: 0
|
|
794
|
+
};
|
|
795
|
+
if (params.baseURL == null) delete params.baseURL;
|
|
796
|
+
this.client = new CustomOpenAIClient(params);
|
|
797
|
+
}
|
|
798
|
+
return {
|
|
799
|
+
...this.clientConfig,
|
|
800
|
+
...options
|
|
801
|
+
};
|
|
802
|
+
}
|
|
803
|
+
async *_streamResponseChunks(messages, options, runManager) {
|
|
804
|
+
yield* delayStreamChunks(this._streamResponseChunksWithReasoning(messages, options, void 0), this._lc_stream_delay, options.signal, runManager);
|
|
805
|
+
}
|
|
806
|
+
/** Parses raw `<think>` fallback tags across chunks and emits sanitized DeepSeek stream chunks. */
|
|
807
|
+
async *_streamResponseChunksWithReasoning(messages, options, runManager) {
|
|
808
|
+
const stream = this._streamResponseChunksFromReasoningMessages(messages, options);
|
|
809
|
+
const thinkStartTag = "<think>";
|
|
810
|
+
const thinkEndTag = "</think>";
|
|
811
|
+
let tokensBuffer = "";
|
|
812
|
+
let isThinking = false;
|
|
813
|
+
for await (const chunk of stream) {
|
|
814
|
+
if (options.signal?.aborted === true) throw new Error("AbortError");
|
|
815
|
+
const reasoningContent = chunk.message.additional_kwargs.reasoning_content;
|
|
816
|
+
if (reasoningContent != null && reasoningContent !== "") {
|
|
817
|
+
yield* this._yieldDeepSeekStreamChunk(chunk, runManager);
|
|
818
|
+
continue;
|
|
819
|
+
}
|
|
820
|
+
const text = chunk.text;
|
|
821
|
+
if (text === "") {
|
|
822
|
+
yield* this._yieldDeepSeekStreamChunk(chunk, runManager);
|
|
823
|
+
continue;
|
|
824
|
+
}
|
|
825
|
+
tokensBuffer += text;
|
|
826
|
+
while (tokensBuffer !== "") {
|
|
827
|
+
if (isThinking) {
|
|
828
|
+
const thinkEndIndex = tokensBuffer.indexOf(thinkEndTag);
|
|
829
|
+
if (thinkEndIndex !== -1) {
|
|
830
|
+
const thoughtContent = tokensBuffer.substring(0, thinkEndIndex);
|
|
831
|
+
if (thoughtContent !== "") yield* this._yieldDeepSeekReasoningText(chunk, thoughtContent, runManager);
|
|
832
|
+
tokensBuffer = tokensBuffer.substring(thinkEndIndex + 8);
|
|
833
|
+
isThinking = false;
|
|
834
|
+
continue;
|
|
835
|
+
}
|
|
836
|
+
const splitIndex = this._getDeepSeekPartialTagSplitIndex(tokensBuffer, thinkEndTag);
|
|
837
|
+
if (splitIndex !== -1) {
|
|
838
|
+
const safeToYield = tokensBuffer.substring(0, splitIndex);
|
|
839
|
+
if (safeToYield !== "") yield* this._yieldDeepSeekReasoningText(chunk, safeToYield, runManager);
|
|
840
|
+
tokensBuffer = tokensBuffer.substring(splitIndex);
|
|
841
|
+
break;
|
|
842
|
+
}
|
|
843
|
+
yield* this._yieldDeepSeekReasoningText(chunk, tokensBuffer, runManager);
|
|
844
|
+
tokensBuffer = "";
|
|
845
|
+
break;
|
|
846
|
+
}
|
|
847
|
+
const thinkStartIndex = tokensBuffer.indexOf(thinkStartTag);
|
|
848
|
+
if (thinkStartIndex !== -1) {
|
|
849
|
+
const beforeThink = tokensBuffer.substring(0, thinkStartIndex);
|
|
850
|
+
if (beforeThink !== "") yield* this._yieldDeepSeekStreamChunk(this._createDeepSeekStreamChunk(chunk, beforeThink), runManager);
|
|
851
|
+
tokensBuffer = tokensBuffer.substring(thinkStartIndex + 7);
|
|
852
|
+
isThinking = true;
|
|
853
|
+
continue;
|
|
854
|
+
}
|
|
855
|
+
const splitIndex = this._getDeepSeekPartialTagSplitIndex(tokensBuffer, thinkStartTag);
|
|
856
|
+
if (splitIndex !== -1) {
|
|
857
|
+
const safeToYield = tokensBuffer.substring(0, splitIndex);
|
|
858
|
+
if (safeToYield !== "") yield* this._yieldDeepSeekStreamChunk(this._createDeepSeekStreamChunk(chunk, safeToYield), runManager);
|
|
859
|
+
tokensBuffer = tokensBuffer.substring(splitIndex);
|
|
860
|
+
break;
|
|
861
|
+
}
|
|
862
|
+
yield* this._yieldDeepSeekStreamChunk(this._createDeepSeekStreamChunk(chunk, tokensBuffer), runManager);
|
|
863
|
+
tokensBuffer = "";
|
|
864
|
+
break;
|
|
865
|
+
}
|
|
866
|
+
}
|
|
867
|
+
if (tokensBuffer === "") return;
|
|
868
|
+
if (isThinking) {
|
|
869
|
+
yield* this._yieldDeepSeekStreamChunk(new _langchain_core_outputs.ChatGenerationChunk({
|
|
870
|
+
message: new _langchain_core_messages.AIMessageChunk({
|
|
871
|
+
content: "",
|
|
872
|
+
additional_kwargs: { reasoning_content: tokensBuffer }
|
|
873
|
+
}),
|
|
874
|
+
text: ""
|
|
875
|
+
}), runManager);
|
|
876
|
+
return;
|
|
877
|
+
}
|
|
878
|
+
yield* this._yieldDeepSeekStreamChunk(new _langchain_core_outputs.ChatGenerationChunk({
|
|
879
|
+
message: new _langchain_core_messages.AIMessageChunk({ content: tokensBuffer }),
|
|
880
|
+
text: tokensBuffer
|
|
881
|
+
}), runManager);
|
|
882
|
+
}
|
|
883
|
+
async *_streamResponseChunksFromReasoningMessages(messages, options) {
|
|
884
|
+
const params = {
|
|
885
|
+
...this.invocationParams(options, { streaming: true }),
|
|
886
|
+
stream: true
|
|
887
|
+
};
|
|
888
|
+
const messagesMapped = this._convertDeepSeekMessages(messages);
|
|
889
|
+
const streamIterable = await this.completionWithRetry({
|
|
890
|
+
...params,
|
|
891
|
+
messages: messagesMapped
|
|
892
|
+
}, {
|
|
893
|
+
signal: options.signal,
|
|
894
|
+
...options.options
|
|
895
|
+
});
|
|
896
|
+
let defaultRole;
|
|
897
|
+
let usage;
|
|
898
|
+
for await (const data of streamIterable) {
|
|
899
|
+
if (options.signal?.aborted === true) throw new Error("AbortError");
|
|
900
|
+
if (data.usage != null) usage = data.usage;
|
|
901
|
+
if (data.choices.length === 0) continue;
|
|
902
|
+
const choice = data.choices[0];
|
|
903
|
+
const { delta } = choice;
|
|
904
|
+
const messageChunk = this._convertCompletionsDeltaToBaseMessageChunk(delta, data, defaultRole);
|
|
905
|
+
defaultRole = delta.role ?? defaultRole;
|
|
906
|
+
if (typeof messageChunk.content !== "string") continue;
|
|
907
|
+
const messageText = messageChunk.content;
|
|
908
|
+
const generationInfo = {
|
|
909
|
+
prompt: options.promptIndex ?? 0,
|
|
910
|
+
completion: choice.index
|
|
911
|
+
};
|
|
912
|
+
if (choice.finish_reason != null) Object.assign(generationInfo, {
|
|
913
|
+
finish_reason: choice.finish_reason,
|
|
914
|
+
system_fingerprint: data.system_fingerprint,
|
|
915
|
+
model_name: data.model,
|
|
916
|
+
service_tier: data.service_tier
|
|
917
|
+
});
|
|
918
|
+
if (this.logprobs === true) Object.assign(generationInfo, { logprobs: choice.logprobs });
|
|
919
|
+
yield new _langchain_core_outputs.ChatGenerationChunk({
|
|
920
|
+
message: messageChunk,
|
|
921
|
+
text: messageText,
|
|
922
|
+
generationInfo
|
|
923
|
+
});
|
|
924
|
+
}
|
|
925
|
+
if (usage != null) {
|
|
926
|
+
const usageMetadata = createUsageMetadata(usage);
|
|
927
|
+
yield new _langchain_core_outputs.ChatGenerationChunk({
|
|
928
|
+
message: new _langchain_core_messages.AIMessageChunk({
|
|
929
|
+
content: "",
|
|
930
|
+
response_metadata: { usage: { ...usage } },
|
|
931
|
+
usage_metadata: usageMetadata
|
|
932
|
+
}),
|
|
933
|
+
text: "",
|
|
934
|
+
generationInfo: {
|
|
935
|
+
prompt: 0,
|
|
936
|
+
completion: 0
|
|
937
|
+
}
|
|
938
|
+
});
|
|
939
|
+
}
|
|
940
|
+
if (options.signal?.aborted === true) throw new Error("AbortError");
|
|
941
|
+
}
|
|
942
|
+
_createDeepSeekStreamChunk(chunk, content, additionalKwargs, text = content) {
|
|
943
|
+
if (!(chunk.message instanceof _langchain_core_messages.AIMessageChunk)) return new _langchain_core_outputs.ChatGenerationChunk({
|
|
944
|
+
message: new _langchain_core_messages.AIMessageChunk({
|
|
945
|
+
content,
|
|
946
|
+
additional_kwargs: additionalKwargs ?? chunk.message.additional_kwargs,
|
|
947
|
+
response_metadata: chunk.message.response_metadata,
|
|
948
|
+
id: chunk.message.id
|
|
949
|
+
}),
|
|
950
|
+
text,
|
|
951
|
+
generationInfo: chunk.generationInfo
|
|
952
|
+
});
|
|
953
|
+
const message = chunk.message;
|
|
954
|
+
return new _langchain_core_outputs.ChatGenerationChunk({
|
|
955
|
+
message: new _langchain_core_messages.AIMessageChunk({
|
|
956
|
+
content,
|
|
957
|
+
additional_kwargs: additionalKwargs ?? message.additional_kwargs,
|
|
958
|
+
response_metadata: message.response_metadata,
|
|
959
|
+
tool_calls: message.tool_calls,
|
|
960
|
+
tool_call_chunks: message.tool_call_chunks,
|
|
961
|
+
id: message.id
|
|
962
|
+
}),
|
|
963
|
+
text,
|
|
964
|
+
generationInfo: chunk.generationInfo
|
|
965
|
+
});
|
|
966
|
+
}
|
|
967
|
+
_createDeepSeekReasoningStreamChunk(chunk, reasoningContent) {
|
|
968
|
+
return this._createDeepSeekStreamChunk(chunk, "", {
|
|
969
|
+
...chunk.message.additional_kwargs,
|
|
970
|
+
reasoning_content: reasoningContent
|
|
971
|
+
}, "");
|
|
972
|
+
}
|
|
973
|
+
async *_yieldDeepSeekReasoningText(chunk, reasoningContent, runManager) {
|
|
974
|
+
yield* this._yieldDeepSeekStreamChunk(this._createDeepSeekReasoningStreamChunk(chunk, reasoningContent), runManager);
|
|
975
|
+
}
|
|
976
|
+
async *_yieldDeepSeekStreamChunk(chunk, runManager) {
|
|
977
|
+
yield chunk;
|
|
978
|
+
await runManager?.handleLLMNewToken(chunk.text, this._getDeepSeekTokenIndices(chunk), void 0, void 0, void 0, { chunk });
|
|
979
|
+
}
|
|
980
|
+
_getDeepSeekTokenIndices(chunk) {
|
|
981
|
+
return getStreamChunkTokenIndices(chunk);
|
|
982
|
+
}
|
|
983
|
+
_getDeepSeekPartialTagSplitIndex(text, tag) {
|
|
984
|
+
for (let i = tag.length - 1; i >= 1; i--) if (text.endsWith(tag.substring(0, i))) return text.length - i;
|
|
985
|
+
return -1;
|
|
986
|
+
}
|
|
987
|
+
};
|
|
988
|
+
var ChatMoonshot = class extends ChatOpenAI {
|
|
989
|
+
constructor(fields) {
|
|
990
|
+
super({
|
|
991
|
+
...fields,
|
|
992
|
+
includeReasoningContent: true
|
|
993
|
+
});
|
|
994
|
+
}
|
|
995
|
+
static lc_name() {
|
|
996
|
+
return "LibreChatMoonshot";
|
|
997
|
+
}
|
|
998
|
+
};
|
|
999
|
+
var ChatXAI = class extends _langchain_xai.ChatXAI {
|
|
1000
|
+
_lc_stream_delay;
|
|
1001
|
+
constructor(fields) {
|
|
1002
|
+
super(fields);
|
|
1003
|
+
this._lc_stream_delay = fields?._lc_stream_delay;
|
|
1004
|
+
const customBaseURL = fields?.configuration?.baseURL ?? fields?.clientConfig?.baseURL;
|
|
1005
|
+
if (customBaseURL != null && customBaseURL) {
|
|
1006
|
+
this.clientConfig = {
|
|
1007
|
+
...this.clientConfig,
|
|
1008
|
+
baseURL: customBaseURL
|
|
1009
|
+
};
|
|
1010
|
+
this.client = void 0;
|
|
1011
|
+
}
|
|
1012
|
+
}
|
|
1013
|
+
static lc_name() {
|
|
1014
|
+
return "LibreChatXAI";
|
|
1015
|
+
}
|
|
1016
|
+
get exposedClient() {
|
|
1017
|
+
return this.client;
|
|
1018
|
+
}
|
|
1019
|
+
_getClientOptions(options) {
|
|
1020
|
+
if (!this.client) {
|
|
1021
|
+
const endpoint = (0, _langchain_openai.getEndpoint)({ baseURL: this.clientConfig.baseURL });
|
|
1022
|
+
const params = {
|
|
1023
|
+
...this.clientConfig,
|
|
1024
|
+
baseURL: endpoint,
|
|
1025
|
+
timeout: this.timeout,
|
|
1026
|
+
maxRetries: 0
|
|
1027
|
+
};
|
|
1028
|
+
if (params.baseURL == null) delete params.baseURL;
|
|
1029
|
+
this.client = new CustomOpenAIClient(params);
|
|
1030
|
+
}
|
|
1031
|
+
return {
|
|
1032
|
+
...this.clientConfig,
|
|
1033
|
+
...options
|
|
1034
|
+
};
|
|
1035
|
+
}
|
|
1036
|
+
async *_streamResponseChunks(messages, options, runManager) {
|
|
1037
|
+
yield* delayStreamChunks(super._streamResponseChunks(messages, options, void 0), this._lc_stream_delay, options.signal, runManager);
|
|
1038
|
+
}
|
|
1039
|
+
};
|
|
1040
|
+
//#endregion
|
|
1324
1041
|
exports.AzureChatOpenAI = AzureChatOpenAI;
|
|
1325
1042
|
exports.ChatDeepSeek = ChatDeepSeek;
|
|
1326
1043
|
exports.ChatMoonshot = ChatMoonshot;
|
|
1327
1044
|
exports.ChatOpenAI = ChatOpenAI;
|
|
1328
1045
|
exports.ChatXAI = ChatXAI;
|
|
1329
|
-
exports.CustomAzureOpenAIClient = CustomAzureOpenAIClient;
|
|
1330
1046
|
exports.CustomOpenAIClient = CustomOpenAIClient;
|
|
1331
1047
|
exports._convertToOpenAITool = _convertToOpenAITool;
|
|
1332
1048
|
exports.emitStreamChunkCallback = emitStreamChunkCallback;
|
|
1333
|
-
|
|
1334
|
-
|
|
1335
|
-
//# sourceMappingURL=index.cjs.map
|
|
1049
|
+
|
|
1050
|
+
//# sourceMappingURL=index.cjs.map
|