@librechat/agents 2.4.322 → 3.0.0-rc2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/agents/AgentContext.cjs +218 -0
- package/dist/cjs/agents/AgentContext.cjs.map +1 -0
- package/dist/cjs/common/enum.cjs +14 -5
- package/dist/cjs/common/enum.cjs.map +1 -1
- package/dist/cjs/events.cjs +10 -6
- package/dist/cjs/events.cjs.map +1 -1
- package/dist/cjs/graphs/Graph.cjs +309 -212
- package/dist/cjs/graphs/Graph.cjs.map +1 -1
- package/dist/cjs/graphs/MultiAgentGraph.cjs +422 -0
- package/dist/cjs/graphs/MultiAgentGraph.cjs.map +1 -0
- package/dist/cjs/llm/anthropic/index.cjs +54 -9
- package/dist/cjs/llm/anthropic/index.cjs.map +1 -1
- package/dist/cjs/llm/anthropic/types.cjs.map +1 -1
- package/dist/cjs/llm/anthropic/utils/message_inputs.cjs +52 -6
- package/dist/cjs/llm/anthropic/utils/message_inputs.cjs.map +1 -1
- package/dist/cjs/llm/anthropic/utils/message_outputs.cjs +22 -2
- package/dist/cjs/llm/anthropic/utils/message_outputs.cjs.map +1 -1
- package/dist/cjs/llm/anthropic/utils/tools.cjs +29 -0
- package/dist/cjs/llm/anthropic/utils/tools.cjs.map +1 -0
- package/dist/cjs/llm/google/index.cjs +144 -0
- package/dist/cjs/llm/google/index.cjs.map +1 -0
- package/dist/cjs/llm/google/utils/common.cjs +477 -0
- package/dist/cjs/llm/google/utils/common.cjs.map +1 -0
- package/dist/cjs/llm/ollama/index.cjs +67 -0
- package/dist/cjs/llm/ollama/index.cjs.map +1 -0
- package/dist/cjs/llm/ollama/utils.cjs +158 -0
- package/dist/cjs/llm/ollama/utils.cjs.map +1 -0
- package/dist/cjs/llm/openai/index.cjs +389 -3
- package/dist/cjs/llm/openai/index.cjs.map +1 -1
- package/dist/cjs/llm/openai/utils/index.cjs +672 -0
- package/dist/cjs/llm/openai/utils/index.cjs.map +1 -0
- package/dist/cjs/llm/providers.cjs +15 -15
- package/dist/cjs/llm/providers.cjs.map +1 -1
- package/dist/cjs/llm/text.cjs +14 -3
- package/dist/cjs/llm/text.cjs.map +1 -1
- package/dist/cjs/llm/vertexai/index.cjs +330 -0
- package/dist/cjs/llm/vertexai/index.cjs.map +1 -0
- package/dist/cjs/main.cjs +11 -0
- package/dist/cjs/main.cjs.map +1 -1
- package/dist/cjs/run.cjs +120 -81
- package/dist/cjs/run.cjs.map +1 -1
- package/dist/cjs/stream.cjs +85 -51
- package/dist/cjs/stream.cjs.map +1 -1
- package/dist/cjs/tools/ToolNode.cjs +10 -4
- package/dist/cjs/tools/ToolNode.cjs.map +1 -1
- package/dist/cjs/tools/handlers.cjs +119 -13
- package/dist/cjs/tools/handlers.cjs.map +1 -1
- package/dist/cjs/tools/search/anthropic.cjs +40 -0
- package/dist/cjs/tools/search/anthropic.cjs.map +1 -0
- package/dist/cjs/tools/search/firecrawl.cjs +55 -9
- package/dist/cjs/tools/search/firecrawl.cjs.map +1 -1
- package/dist/cjs/tools/search/format.cjs +6 -6
- package/dist/cjs/tools/search/format.cjs.map +1 -1
- package/dist/cjs/tools/search/rerankers.cjs +7 -29
- package/dist/cjs/tools/search/rerankers.cjs.map +1 -1
- package/dist/cjs/tools/search/search.cjs +86 -16
- package/dist/cjs/tools/search/search.cjs.map +1 -1
- package/dist/cjs/tools/search/tool.cjs +4 -2
- package/dist/cjs/tools/search/tool.cjs.map +1 -1
- package/dist/cjs/tools/search/utils.cjs +1 -1
- package/dist/cjs/tools/search/utils.cjs.map +1 -1
- package/dist/cjs/utils/events.cjs +31 -0
- package/dist/cjs/utils/events.cjs.map +1 -0
- package/dist/cjs/utils/title.cjs +57 -21
- package/dist/cjs/utils/title.cjs.map +1 -1
- package/dist/cjs/utils/tokens.cjs +54 -7
- package/dist/cjs/utils/tokens.cjs.map +1 -1
- package/dist/esm/agents/AgentContext.mjs +216 -0
- package/dist/esm/agents/AgentContext.mjs.map +1 -0
- package/dist/esm/common/enum.mjs +15 -6
- package/dist/esm/common/enum.mjs.map +1 -1
- package/dist/esm/events.mjs +10 -6
- package/dist/esm/events.mjs.map +1 -1
- package/dist/esm/graphs/Graph.mjs +311 -214
- package/dist/esm/graphs/Graph.mjs.map +1 -1
- package/dist/esm/graphs/MultiAgentGraph.mjs +420 -0
- package/dist/esm/graphs/MultiAgentGraph.mjs.map +1 -0
- package/dist/esm/llm/anthropic/index.mjs +54 -9
- package/dist/esm/llm/anthropic/index.mjs.map +1 -1
- package/dist/esm/llm/anthropic/types.mjs.map +1 -1
- package/dist/esm/llm/anthropic/utils/message_inputs.mjs +52 -6
- package/dist/esm/llm/anthropic/utils/message_inputs.mjs.map +1 -1
- package/dist/esm/llm/anthropic/utils/message_outputs.mjs +22 -2
- package/dist/esm/llm/anthropic/utils/message_outputs.mjs.map +1 -1
- package/dist/esm/llm/anthropic/utils/tools.mjs +27 -0
- package/dist/esm/llm/anthropic/utils/tools.mjs.map +1 -0
- package/dist/esm/llm/google/index.mjs +142 -0
- package/dist/esm/llm/google/index.mjs.map +1 -0
- package/dist/esm/llm/google/utils/common.mjs +471 -0
- package/dist/esm/llm/google/utils/common.mjs.map +1 -0
- package/dist/esm/llm/ollama/index.mjs +65 -0
- package/dist/esm/llm/ollama/index.mjs.map +1 -0
- package/dist/esm/llm/ollama/utils.mjs +155 -0
- package/dist/esm/llm/ollama/utils.mjs.map +1 -0
- package/dist/esm/llm/openai/index.mjs +388 -4
- package/dist/esm/llm/openai/index.mjs.map +1 -1
- package/dist/esm/llm/openai/utils/index.mjs +666 -0
- package/dist/esm/llm/openai/utils/index.mjs.map +1 -0
- package/dist/esm/llm/providers.mjs +5 -5
- package/dist/esm/llm/providers.mjs.map +1 -1
- package/dist/esm/llm/text.mjs +14 -3
- package/dist/esm/llm/text.mjs.map +1 -1
- package/dist/esm/llm/vertexai/index.mjs +328 -0
- package/dist/esm/llm/vertexai/index.mjs.map +1 -0
- package/dist/esm/main.mjs +6 -5
- package/dist/esm/main.mjs.map +1 -1
- package/dist/esm/run.mjs +121 -83
- package/dist/esm/run.mjs.map +1 -1
- package/dist/esm/stream.mjs +87 -54
- package/dist/esm/stream.mjs.map +1 -1
- package/dist/esm/tools/ToolNode.mjs +10 -4
- package/dist/esm/tools/ToolNode.mjs.map +1 -1
- package/dist/esm/tools/handlers.mjs +119 -15
- package/dist/esm/tools/handlers.mjs.map +1 -1
- package/dist/esm/tools/search/anthropic.mjs +37 -0
- package/dist/esm/tools/search/anthropic.mjs.map +1 -0
- package/dist/esm/tools/search/firecrawl.mjs +55 -9
- package/dist/esm/tools/search/firecrawl.mjs.map +1 -1
- package/dist/esm/tools/search/format.mjs +7 -7
- package/dist/esm/tools/search/format.mjs.map +1 -1
- package/dist/esm/tools/search/rerankers.mjs +7 -29
- package/dist/esm/tools/search/rerankers.mjs.map +1 -1
- package/dist/esm/tools/search/search.mjs +86 -16
- package/dist/esm/tools/search/search.mjs.map +1 -1
- package/dist/esm/tools/search/tool.mjs +4 -2
- package/dist/esm/tools/search/tool.mjs.map +1 -1
- package/dist/esm/tools/search/utils.mjs +1 -1
- package/dist/esm/tools/search/utils.mjs.map +1 -1
- package/dist/esm/utils/events.mjs +29 -0
- package/dist/esm/utils/events.mjs.map +1 -0
- package/dist/esm/utils/title.mjs +57 -22
- package/dist/esm/utils/title.mjs.map +1 -1
- package/dist/esm/utils/tokens.mjs +54 -8
- package/dist/esm/utils/tokens.mjs.map +1 -1
- package/dist/types/agents/AgentContext.d.ts +91 -0
- package/dist/types/common/enum.d.ts +15 -6
- package/dist/types/events.d.ts +5 -4
- package/dist/types/graphs/Graph.d.ts +64 -67
- package/dist/types/graphs/MultiAgentGraph.d.ts +37 -0
- package/dist/types/graphs/index.d.ts +1 -0
- package/dist/types/llm/anthropic/index.d.ts +11 -0
- package/dist/types/llm/anthropic/types.d.ts +9 -3
- package/dist/types/llm/anthropic/utils/message_inputs.d.ts +1 -1
- package/dist/types/llm/anthropic/utils/output_parsers.d.ts +4 -4
- package/dist/types/llm/anthropic/utils/tools.d.ts +3 -0
- package/dist/types/llm/google/index.d.ts +13 -0
- package/dist/types/llm/google/types.d.ts +32 -0
- package/dist/types/llm/google/utils/common.d.ts +19 -0
- package/dist/types/llm/google/utils/tools.d.ts +10 -0
- package/dist/types/llm/google/utils/zod_to_genai_parameters.d.ts +14 -0
- package/dist/types/llm/ollama/index.d.ts +7 -0
- package/dist/types/llm/ollama/utils.d.ts +7 -0
- package/dist/types/llm/openai/index.d.ts +72 -3
- package/dist/types/llm/openai/types.d.ts +10 -0
- package/dist/types/llm/openai/utils/index.d.ts +20 -0
- package/dist/types/llm/text.d.ts +1 -1
- package/dist/types/llm/vertexai/index.d.ts +293 -0
- package/dist/types/messages/reducer.d.ts +9 -0
- package/dist/types/run.d.ts +19 -12
- package/dist/types/scripts/ant_web_search.d.ts +1 -0
- package/dist/types/scripts/args.d.ts +2 -1
- package/dist/types/scripts/handoff-test.d.ts +1 -0
- package/dist/types/scripts/multi-agent-conditional.d.ts +1 -0
- package/dist/types/scripts/multi-agent-parallel.d.ts +1 -0
- package/dist/types/scripts/multi-agent-sequence.d.ts +1 -0
- package/dist/types/scripts/multi-agent-supervisor.d.ts +1 -0
- package/dist/types/scripts/multi-agent-test.d.ts +1 -0
- package/dist/types/scripts/test-custom-prompt-key.d.ts +2 -0
- package/dist/types/scripts/test-handoff-input.d.ts +2 -0
- package/dist/types/scripts/test-multi-agent-list-handoff.d.ts +2 -0
- package/dist/types/stream.d.ts +10 -3
- package/dist/types/tools/CodeExecutor.d.ts +2 -2
- package/dist/types/tools/ToolNode.d.ts +1 -1
- package/dist/types/tools/handlers.d.ts +17 -4
- package/dist/types/tools/search/anthropic.d.ts +16 -0
- package/dist/types/tools/search/firecrawl.d.ts +15 -0
- package/dist/types/tools/search/rerankers.d.ts +0 -1
- package/dist/types/tools/search/types.d.ts +30 -9
- package/dist/types/types/graph.d.ts +129 -15
- package/dist/types/types/llm.d.ts +24 -10
- package/dist/types/types/run.d.ts +46 -8
- package/dist/types/types/stream.d.ts +16 -2
- package/dist/types/types/tools.d.ts +1 -1
- package/dist/types/utils/events.d.ts +6 -0
- package/dist/types/utils/title.d.ts +2 -1
- package/dist/types/utils/tokens.d.ts +24 -0
- package/package.json +37 -17
- package/src/agents/AgentContext.ts +315 -0
- package/src/common/enum.ts +14 -5
- package/src/events.ts +24 -13
- package/src/graphs/Graph.ts +495 -312
- package/src/graphs/MultiAgentGraph.ts +498 -0
- package/src/graphs/index.ts +2 -1
- package/src/llm/anthropic/Jacob_Lee_Resume_2023.pdf +0 -0
- package/src/llm/anthropic/index.ts +78 -13
- package/src/llm/anthropic/llm.spec.ts +491 -115
- package/src/llm/anthropic/types.ts +39 -3
- package/src/llm/anthropic/utils/message_inputs.ts +67 -11
- package/src/llm/anthropic/utils/message_outputs.ts +21 -2
- package/src/llm/anthropic/utils/output_parsers.ts +25 -6
- package/src/llm/anthropic/utils/tools.ts +29 -0
- package/src/llm/google/index.ts +218 -0
- package/src/llm/google/types.ts +43 -0
- package/src/llm/google/utils/common.ts +646 -0
- package/src/llm/google/utils/tools.ts +160 -0
- package/src/llm/google/utils/zod_to_genai_parameters.ts +86 -0
- package/src/llm/ollama/index.ts +89 -0
- package/src/llm/ollama/utils.ts +193 -0
- package/src/llm/openai/index.ts +600 -14
- package/src/llm/openai/types.ts +24 -0
- package/src/llm/openai/utils/index.ts +912 -0
- package/src/llm/openai/utils/isReasoningModel.test.ts +90 -0
- package/src/llm/providers.ts +10 -9
- package/src/llm/text.ts +26 -7
- package/src/llm/vertexai/index.ts +360 -0
- package/src/messages/reducer.ts +80 -0
- package/src/run.ts +181 -112
- package/src/scripts/ant_web_search.ts +158 -0
- package/src/scripts/args.ts +12 -8
- package/src/scripts/cli4.ts +29 -21
- package/src/scripts/cli5.ts +29 -21
- package/src/scripts/code_exec.ts +54 -23
- package/src/scripts/code_exec_files.ts +48 -17
- package/src/scripts/code_exec_simple.ts +46 -27
- package/src/scripts/handoff-test.ts +135 -0
- package/src/scripts/image.ts +52 -20
- package/src/scripts/multi-agent-conditional.ts +220 -0
- package/src/scripts/multi-agent-example-output.md +110 -0
- package/src/scripts/multi-agent-parallel.ts +341 -0
- package/src/scripts/multi-agent-sequence.ts +212 -0
- package/src/scripts/multi-agent-supervisor.ts +361 -0
- package/src/scripts/multi-agent-test.ts +186 -0
- package/src/scripts/search.ts +1 -9
- package/src/scripts/simple.ts +25 -10
- package/src/scripts/test-custom-prompt-key.ts +145 -0
- package/src/scripts/test-handoff-input.ts +110 -0
- package/src/scripts/test-multi-agent-list-handoff.ts +258 -0
- package/src/scripts/tools.ts +48 -18
- package/src/specs/anthropic.simple.test.ts +150 -34
- package/src/specs/azure.simple.test.ts +325 -0
- package/src/specs/openai.simple.test.ts +140 -33
- package/src/specs/openrouter.simple.test.ts +107 -0
- package/src/specs/prune.test.ts +4 -9
- package/src/specs/reasoning.test.ts +80 -44
- package/src/specs/token-memoization.test.ts +39 -0
- package/src/stream.test.ts +94 -0
- package/src/stream.ts +139 -60
- package/src/tools/ToolNode.ts +21 -7
- package/src/tools/handlers.ts +192 -18
- package/src/tools/search/anthropic.ts +51 -0
- package/src/tools/search/firecrawl.ts +69 -20
- package/src/tools/search/format.ts +6 -8
- package/src/tools/search/rerankers.ts +7 -40
- package/src/tools/search/search.ts +97 -16
- package/src/tools/search/tool.ts +5 -2
- package/src/tools/search/types.ts +30 -10
- package/src/tools/search/utils.ts +1 -1
- package/src/types/graph.ts +315 -103
- package/src/types/llm.ts +25 -12
- package/src/types/run.ts +51 -13
- package/src/types/stream.ts +22 -1
- package/src/types/tools.ts +16 -10
- package/src/utils/events.ts +32 -0
- package/src/utils/llmConfig.ts +19 -7
- package/src/utils/title.ts +104 -30
- package/src/utils/tokens.ts +69 -10
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../../../src/llm/openai/utils/index.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/ban-ts-comment */\n/* eslint-disable @typescript-eslint/explicit-function-return-type */\nimport { type OpenAI as OpenAIClient } from 'openai';\nimport type {\n ChatCompletionContentPartText,\n ChatCompletionContentPartImage,\n ChatCompletionContentPartInputAudio,\n ChatCompletionContentPart,\n} from 'openai/resources/chat/completions';\nimport {\n AIMessage,\n AIMessageChunk,\n type BaseMessage,\n ChatMessage,\n ToolMessage,\n isAIMessage,\n type UsageMetadata,\n type BaseMessageFields,\n type MessageContent,\n type InvalidToolCall,\n type MessageContentImageUrl,\n StandardContentBlockConverter,\n parseBase64DataUrl,\n parseMimeType,\n convertToProviderContentBlock,\n isDataContentBlock,\n} from '@langchain/core/messages';\nimport { ChatGenerationChunk } from '@langchain/core/outputs';\nimport {\n convertLangChainToolCallToOpenAI,\n makeInvalidToolCall,\n parseToolCall,\n} from '@langchain/core/output_parsers/openai_tools';\nimport type { ToolCall, ToolCallChunk } from '@langchain/core/messages/tool';\nimport type {\n OpenAICallOptions,\n OpenAIChatInput,\n ChatOpenAIReasoningSummary,\n} from '@langchain/openai';\n\nexport type { OpenAICallOptions, OpenAIChatInput };\n\n// Utility types to get hidden OpenAI response types\ntype ExtractAsyncIterableType<T> = T extends AsyncIterable<infer U> ? U : never;\ntype ExcludeController<T> = T extends { controller: unknown } ? never : T;\ntype ExcludeNonController<T> = T extends { controller: unknown } ? T : never;\n\ntype ResponsesCreate = OpenAIClient.Responses['create'];\ntype ResponsesParse = OpenAIClient.Responses['parse'];\n\ntype ResponsesInputItem = OpenAIClient.Responses.ResponseInputItem;\n\ntype ResponsesCreateInvoke = ExcludeController<\n Awaited<ReturnType<ResponsesCreate>>\n>;\n\ntype ResponsesParseInvoke = ExcludeController<\n Awaited<ReturnType<ResponsesParse>>\n>;\n\ntype ResponsesCreateStream = ExcludeNonController<\n Awaited<ReturnType<ResponsesCreate>>\n>;\n\nexport type ResponseReturnStreamEvents =\n ExtractAsyncIterableType<ResponsesCreateStream>;\n\n// TODO import from SDK when available\ntype OpenAIRoleEnum =\n | 'system'\n | 'developer'\n | 'assistant'\n | 'user'\n | 'function'\n | 'tool';\n\ntype OpenAICompletionParam =\n OpenAIClient.Chat.Completions.ChatCompletionMessageParam;\n\nfunction extractGenericMessageCustomRole(message: ChatMessage) {\n if (\n message.role !== 'system' &&\n message.role !== 'developer' &&\n message.role !== 'assistant' &&\n message.role !== 'user' &&\n message.role !== 'function' &&\n message.role !== 'tool'\n ) {\n console.warn(`Unknown message role: ${message.role}`);\n }\n\n return message.role as OpenAIRoleEnum;\n}\n\nexport function messageToOpenAIRole(message: BaseMessage): OpenAIRoleEnum {\n const type = message._getType();\n switch (type) {\n case 'system':\n return 'system';\n case 'ai':\n return 'assistant';\n case 'human':\n return 'user';\n case 'function':\n return 'function';\n case 'tool':\n return 'tool';\n case 'generic': {\n if (!ChatMessage.isInstance(message))\n throw new Error('Invalid generic chat message');\n return extractGenericMessageCustomRole(message);\n }\n default:\n throw new Error(`Unknown message type: ${type}`);\n }\n}\n\nconst completionsApiContentBlockConverter: StandardContentBlockConverter<{\n text: ChatCompletionContentPartText;\n image: ChatCompletionContentPartImage;\n audio: ChatCompletionContentPartInputAudio;\n file: ChatCompletionContentPart.File;\n}> = {\n providerName: 'ChatOpenAI',\n\n fromStandardTextBlock(block): ChatCompletionContentPartText {\n return { type: 'text', text: block.text };\n },\n\n fromStandardImageBlock(block): ChatCompletionContentPartImage {\n if (block.source_type === 'url') {\n return {\n type: 'image_url',\n image_url: {\n url: block.url,\n ...(block.metadata?.detail\n ? { detail: block.metadata.detail as 'auto' | 'low' | 'high' }\n : {}),\n },\n };\n }\n\n if (block.source_type === 'base64') {\n const url = `data:${block.mime_type ?? ''};base64,${block.data}`;\n return {\n type: 'image_url',\n image_url: {\n url,\n ...(block.metadata?.detail\n ? { detail: block.metadata.detail as 'auto' | 'low' | 'high' }\n : {}),\n },\n };\n }\n\n throw new Error(\n `Image content blocks with source_type ${block.source_type} are not supported for ChatOpenAI`\n );\n },\n\n fromStandardAudioBlock(block): ChatCompletionContentPartInputAudio {\n if (block.source_type === 'url') {\n const data = parseBase64DataUrl({ dataUrl: block.url });\n if (!data) {\n throw new Error(\n `URL audio blocks with source_type ${block.source_type} must be formatted as a data URL for ChatOpenAI`\n );\n }\n\n const rawMimeType = data.mime_type || block.mime_type || '';\n let mimeType: { type: string; subtype: string };\n\n try {\n mimeType = parseMimeType(rawMimeType);\n } catch {\n throw new Error(\n `Audio blocks with source_type ${block.source_type} must have mime type of audio/wav or audio/mp3`\n );\n }\n\n if (\n mimeType.type !== 'audio' ||\n (mimeType.subtype !== 'wav' && mimeType.subtype !== 'mp3')\n ) {\n throw new Error(\n `Audio blocks with source_type ${block.source_type} must have mime type of audio/wav or audio/mp3`\n );\n }\n\n return {\n type: 'input_audio',\n input_audio: {\n format: mimeType.subtype,\n data: data.data,\n },\n };\n }\n\n if (block.source_type === 'base64') {\n let mimeType: { type: string; subtype: string };\n\n try {\n mimeType = parseMimeType(block.mime_type ?? '');\n } catch {\n throw new Error(\n `Audio blocks with source_type ${block.source_type} must have mime type of audio/wav or audio/mp3`\n );\n }\n\n if (\n mimeType.type !== 'audio' ||\n (mimeType.subtype !== 'wav' && mimeType.subtype !== 'mp3')\n ) {\n throw new Error(\n `Audio blocks with source_type ${block.source_type} must have mime type of audio/wav or audio/mp3`\n );\n }\n\n return {\n type: 'input_audio',\n input_audio: {\n format: mimeType.subtype,\n data: block.data,\n },\n };\n }\n\n throw new Error(\n `Audio content blocks with source_type ${block.source_type} are not supported for ChatOpenAI`\n );\n },\n\n fromStandardFileBlock(block): ChatCompletionContentPart.File {\n if (block.source_type === 'url') {\n const data = parseBase64DataUrl({ dataUrl: block.url });\n if (!data) {\n throw new Error(\n `URL file blocks with source_type ${block.source_type} must be formatted as a data URL for ChatOpenAI`\n );\n }\n\n return {\n type: 'file',\n file: {\n file_data: block.url, // formatted as base64 data URL\n ...(block.metadata?.filename || block.metadata?.name\n ? {\n filename: (block.metadata.filename ||\n block.metadata.name) as string,\n }\n : {}),\n },\n };\n }\n\n if (block.source_type === 'base64') {\n return {\n type: 'file',\n file: {\n file_data: `data:${block.mime_type ?? ''};base64,${block.data}`,\n ...(block.metadata?.filename ||\n block.metadata?.name ||\n block.metadata?.title\n ? {\n filename: (block.metadata.filename ||\n block.metadata.name ||\n block.metadata.title) as string,\n }\n : {}),\n },\n };\n }\n\n if (block.source_type === 'id') {\n return {\n type: 'file',\n file: {\n file_id: block.id,\n },\n };\n }\n\n throw new Error(\n `File content blocks with source_type ${block.source_type} are not supported for ChatOpenAI`\n );\n },\n};\n\n// Used in LangSmith, export is important here\nexport function _convertMessagesToOpenAIParams(\n messages: BaseMessage[],\n model?: string\n): OpenAICompletionParam[] {\n // TODO: Function messages do not support array content, fix cast\n return messages.flatMap((message) => {\n let role = messageToOpenAIRole(message);\n if (role === 'system' && isReasoningModel(model)) {\n role = 'developer';\n }\n\n const content =\n typeof message.content === 'string'\n ? message.content\n : message.content.map((m) => {\n if (isDataContentBlock(m)) {\n return convertToProviderContentBlock(\n m,\n completionsApiContentBlockConverter\n );\n }\n return m;\n });\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const completionParam: Record<string, any> = {\n role,\n content,\n };\n if (message.name != null) {\n completionParam.name = message.name;\n }\n if (message.additional_kwargs.function_call != null) {\n completionParam.function_call = message.additional_kwargs.function_call;\n completionParam.content = '';\n }\n if (isAIMessage(message) && !!message.tool_calls?.length) {\n completionParam.tool_calls = message.tool_calls.map(\n convertLangChainToolCallToOpenAI\n );\n completionParam.content = '';\n } else {\n if (message.additional_kwargs.tool_calls != null) {\n completionParam.tool_calls = message.additional_kwargs.tool_calls;\n }\n if ((message as ToolMessage).tool_call_id != null) {\n completionParam.tool_call_id = (message as ToolMessage).tool_call_id;\n }\n }\n\n if (\n message.additional_kwargs.audio &&\n typeof message.additional_kwargs.audio === 'object' &&\n 'id' in message.additional_kwargs.audio\n ) {\n const audioMessage = {\n role: 'assistant',\n audio: {\n id: message.additional_kwargs.audio.id,\n },\n };\n return [completionParam, audioMessage] as OpenAICompletionParam[];\n }\n\n return completionParam as OpenAICompletionParam;\n });\n}\n\nconst _FUNCTION_CALL_IDS_MAP_KEY = '__openai_function_call_ids__';\n\nfunction _convertReasoningSummaryToOpenAIResponsesParams(\n reasoning: ChatOpenAIReasoningSummary\n): OpenAIClient.Responses.ResponseReasoningItem {\n // combine summary parts that have the the same index and then remove the indexes\n const summary = (\n reasoning.summary.length > 1\n ? reasoning.summary.reduce(\n (acc, curr) => {\n const last = acc.at(-1);\n\n if (last!.index === curr.index) {\n last!.text += curr.text;\n } else {\n acc.push(curr);\n }\n return acc;\n },\n [{ ...reasoning.summary[0] }]\n )\n : reasoning.summary\n ).map((s) =>\n Object.fromEntries(Object.entries(s).filter(([k]) => k !== 'index'))\n ) as OpenAIClient.Responses.ResponseReasoningItem.Summary[];\n\n return {\n ...reasoning,\n summary,\n } as OpenAIClient.Responses.ResponseReasoningItem;\n}\n\nexport function _convertMessagesToOpenAIResponsesParams(\n messages: BaseMessage[],\n model?: string,\n zdrEnabled?: boolean\n): ResponsesInputItem[] {\n return messages.flatMap(\n (lcMsg): ResponsesInputItem | ResponsesInputItem[] => {\n const additional_kwargs =\n lcMsg.additional_kwargs as BaseMessageFields['additional_kwargs'] & {\n [_FUNCTION_CALL_IDS_MAP_KEY]?: Record<string, string>;\n reasoning?: OpenAIClient.Responses.ResponseReasoningItem;\n type?: string;\n refusal?: string;\n };\n\n let role = messageToOpenAIRole(lcMsg);\n if (role === 'system' && isReasoningModel(model)) role = 'developer';\n\n if (role === 'function') {\n throw new Error('Function messages are not supported in Responses API');\n }\n\n if (role === 'tool') {\n const toolMessage = lcMsg as ToolMessage;\n\n // Handle computer call output\n if (additional_kwargs.type === 'computer_call_output') {\n const output = (() => {\n if (typeof toolMessage.content === 'string') {\n return {\n type: 'computer_screenshot' as const,\n image_url: toolMessage.content,\n };\n }\n\n if (Array.isArray(toolMessage.content)) {\n const oaiScreenshot = toolMessage.content.find(\n (i) => i.type === 'computer_screenshot'\n ) as { type: 'computer_screenshot'; image_url: string };\n\n if (oaiScreenshot) return oaiScreenshot;\n\n const lcImage = toolMessage.content.find(\n (i) => i.type === 'image_url'\n ) as MessageContentImageUrl;\n\n if (lcImage) {\n return {\n type: 'computer_screenshot' as const,\n image_url:\n typeof lcImage.image_url === 'string'\n ? lcImage.image_url\n : lcImage.image_url.url,\n };\n }\n }\n\n throw new Error('Invalid computer call output');\n })();\n\n return {\n type: 'computer_call_output',\n output,\n call_id: toolMessage.tool_call_id,\n };\n }\n\n return {\n type: 'function_call_output',\n call_id: toolMessage.tool_call_id,\n id: toolMessage.id?.startsWith('fc_') ? toolMessage.id : undefined,\n output:\n typeof toolMessage.content !== 'string'\n ? JSON.stringify(toolMessage.content)\n : toolMessage.content,\n };\n }\n\n if (role === 'assistant') {\n // if we have the original response items, just reuse them\n if (\n !zdrEnabled &&\n lcMsg.response_metadata.output != null &&\n Array.isArray(lcMsg.response_metadata.output) &&\n lcMsg.response_metadata.output.length > 0 &&\n lcMsg.response_metadata.output.every((item) => 'type' in item)\n ) {\n return lcMsg.response_metadata.output;\n }\n\n // otherwise, try to reconstruct the response from what we have\n\n const input: ResponsesInputItem[] = [];\n\n // reasoning items\n if (additional_kwargs.reasoning && !zdrEnabled) {\n const reasoningItem = _convertReasoningSummaryToOpenAIResponsesParams(\n additional_kwargs.reasoning\n );\n input.push(reasoningItem);\n }\n\n // ai content\n let { content } = lcMsg;\n if (additional_kwargs.refusal) {\n if (typeof content === 'string') {\n content = [{ type: 'output_text', text: content, annotations: [] }];\n }\n content = [\n ...content,\n { type: 'refusal', refusal: additional_kwargs.refusal },\n ];\n }\n\n input.push({\n type: 'message',\n role: 'assistant',\n ...(lcMsg.id && !zdrEnabled ? { id: lcMsg.id } : {}),\n content:\n typeof content === 'string'\n ? content\n : content.flatMap((item) => {\n if (item.type === 'text') {\n return {\n type: 'output_text',\n text: item.text,\n // @ts-expect-error TODO: add types for `annotations`\n annotations: item.annotations ?? [],\n };\n }\n\n if (item.type === 'output_text' || item.type === 'refusal') {\n return item;\n }\n\n return [];\n }),\n });\n\n const functionCallIds = additional_kwargs[_FUNCTION_CALL_IDS_MAP_KEY];\n\n if (isAIMessage(lcMsg) && !!lcMsg.tool_calls?.length) {\n input.push(\n ...lcMsg.tool_calls.map(\n (toolCall): ResponsesInputItem => ({\n type: 'function_call',\n name: toolCall.name,\n arguments: JSON.stringify(toolCall.args),\n call_id: toolCall.id!,\n ...(zdrEnabled ? { id: functionCallIds?.[toolCall.id!] } : {}),\n })\n )\n );\n } else if (additional_kwargs.tool_calls) {\n input.push(\n ...additional_kwargs.tool_calls.map(\n (toolCall): ResponsesInputItem => ({\n type: 'function_call',\n name: toolCall.function.name,\n call_id: toolCall.id,\n arguments: toolCall.function.arguments,\n ...(zdrEnabled ? { id: functionCallIds?.[toolCall.id] } : {}),\n })\n )\n );\n }\n\n const toolOutputs =\n ((\n lcMsg.response_metadata.output as\n | Array<ResponsesInputItem>\n | undefined\n )?.length ?? 0) > 0\n ? lcMsg.response_metadata.output\n : additional_kwargs.tool_outputs;\n\n const fallthroughCallTypes: ResponsesInputItem['type'][] = [\n 'computer_call',\n /** @ts-ignore */\n 'mcp_call',\n /** @ts-ignore */\n 'code_interpreter_call',\n /** @ts-ignore */\n 'image_generation_call',\n ];\n\n if (toolOutputs != null) {\n const castToolOutputs = toolOutputs as Array<ResponsesInputItem>;\n const fallthroughCalls = castToolOutputs.filter((item) =>\n fallthroughCallTypes.includes(item.type)\n );\n if (fallthroughCalls.length > 0) input.push(...fallthroughCalls);\n }\n\n return input;\n }\n\n if (role === 'user' || role === 'system' || role === 'developer') {\n if (typeof lcMsg.content === 'string') {\n return { type: 'message', role, content: lcMsg.content };\n }\n\n const messages: ResponsesInputItem[] = [];\n const content = lcMsg.content.flatMap((item) => {\n if (item.type === 'mcp_approval_response') {\n messages.push({\n // @ts-ignore\n type: 'mcp_approval_response',\n approval_request_id: item.approval_request_id,\n approve: item.approve,\n });\n }\n if (isDataContentBlock(item)) {\n return convertToProviderContentBlock(\n item,\n completionsApiContentBlockConverter\n );\n }\n if (item.type === 'text') {\n return {\n type: 'input_text',\n text: item.text,\n };\n }\n if (item.type === 'image_url') {\n return {\n type: 'input_image',\n image_url:\n typeof item.image_url === 'string'\n ? item.image_url\n : item.image_url.url,\n detail:\n typeof item.image_url === 'string'\n ? 'auto'\n : item.image_url.detail,\n };\n }\n if (\n item.type === 'input_text' ||\n item.type === 'input_image' ||\n item.type === 'input_file'\n ) {\n return item;\n }\n return [];\n });\n\n if (content.length > 0) {\n messages.push({ type: 'message', role, content });\n }\n return messages;\n }\n\n console.warn(\n `Unsupported role found when converting to OpenAI Responses API: ${role}`\n );\n return [];\n }\n );\n}\n\nexport function isReasoningModel(model?: string) {\n return model != null && model !== '' && /\\b(o\\d|gpt-[5-9])\\b/i.test(model);\n}\n\nfunction _convertOpenAIResponsesMessageToBaseMessage(\n response: ResponsesCreateInvoke | ResponsesParseInvoke\n): BaseMessage {\n if (response.error) {\n // TODO: add support for `addLangChainErrorFields`\n const error = new Error(response.error.message);\n error.name = response.error.code;\n throw error;\n }\n\n let messageId: string | undefined;\n const content: MessageContent = [];\n const tool_calls: ToolCall[] = [];\n const invalid_tool_calls: InvalidToolCall[] = [];\n const response_metadata: Record<string, unknown> = {\n model: response.model,\n created_at: response.created_at,\n id: response.id,\n incomplete_details: response.incomplete_details,\n metadata: response.metadata,\n object: response.object,\n status: response.status,\n user: response.user,\n service_tier: response.service_tier,\n\n // for compatibility with chat completion calls.\n model_name: response.model,\n };\n\n const additional_kwargs: {\n [key: string]: unknown;\n refusal?: string;\n reasoning?: OpenAIClient.Responses.ResponseReasoningItem;\n tool_outputs?: unknown[];\n parsed?: unknown;\n [_FUNCTION_CALL_IDS_MAP_KEY]?: Record<string, string>;\n } = {};\n\n for (const item of response.output) {\n if (item.type === 'message') {\n messageId = item.id;\n content.push(\n ...item.content.flatMap((part) => {\n if (part.type === 'output_text') {\n if ('parsed' in part && part.parsed != null) {\n additional_kwargs.parsed = part.parsed;\n }\n return {\n type: 'text',\n text: part.text,\n annotations: part.annotations,\n };\n }\n\n if (part.type === 'refusal') {\n additional_kwargs.refusal = part.refusal;\n return [];\n }\n\n return part;\n })\n );\n } else if (item.type === 'function_call') {\n const fnAdapter = {\n function: { name: item.name, arguments: item.arguments },\n id: item.call_id,\n };\n\n try {\n tool_calls.push(parseToolCall(fnAdapter, { returnId: true }));\n } catch (e: unknown) {\n let errMessage: string | undefined;\n if (\n typeof e === 'object' &&\n e != null &&\n 'message' in e &&\n typeof e.message === 'string'\n ) {\n errMessage = e.message;\n }\n invalid_tool_calls.push(makeInvalidToolCall(fnAdapter, errMessage));\n }\n\n additional_kwargs[_FUNCTION_CALL_IDS_MAP_KEY] ??= {};\n if (item.id) {\n additional_kwargs[_FUNCTION_CALL_IDS_MAP_KEY][item.call_id] = item.id;\n }\n } else if (item.type === 'reasoning') {\n additional_kwargs.reasoning = item;\n } else {\n additional_kwargs.tool_outputs ??= [];\n additional_kwargs.tool_outputs.push(item);\n }\n }\n\n return new AIMessage({\n id: messageId,\n content,\n tool_calls,\n invalid_tool_calls,\n usage_metadata: response.usage,\n additional_kwargs,\n response_metadata,\n });\n}\n\nexport function _convertOpenAIResponsesDeltaToBaseMessageChunk(\n chunk: ResponseReturnStreamEvents\n) {\n const content: Record<string, unknown>[] = [];\n let generationInfo: Record<string, unknown> = {};\n let usage_metadata: UsageMetadata | undefined;\n const tool_call_chunks: ToolCallChunk[] = [];\n const response_metadata: Record<string, unknown> = {};\n const additional_kwargs: {\n [key: string]: unknown;\n reasoning?: Partial<ChatOpenAIReasoningSummary>;\n tool_outputs?: unknown[];\n } = {};\n let id: string | undefined;\n if (chunk.type === 'response.output_text.delta') {\n content.push({\n type: 'text',\n text: chunk.delta,\n index: chunk.content_index,\n });\n /** @ts-ignore */\n } else if (chunk.type === 'response.output_text_annotation.added') {\n content.push({\n type: 'text',\n text: '',\n /** @ts-ignore */\n annotations: [chunk.annotation],\n /** @ts-ignore */\n index: chunk.content_index,\n });\n } else if (\n chunk.type === 'response.output_item.added' &&\n chunk.item.type === 'message'\n ) {\n id = chunk.item.id;\n } else if (\n chunk.type === 'response.output_item.added' &&\n chunk.item.type === 'function_call'\n ) {\n tool_call_chunks.push({\n type: 'tool_call_chunk',\n name: chunk.item.name,\n args: chunk.item.arguments,\n id: chunk.item.call_id,\n index: chunk.output_index,\n });\n\n additional_kwargs[_FUNCTION_CALL_IDS_MAP_KEY] = {\n [chunk.item.call_id]: chunk.item.id,\n };\n } else if (\n chunk.type === 'response.output_item.done' &&\n [\n 'web_search_call',\n 'file_search_call',\n 'computer_call',\n 'code_interpreter_call',\n 'mcp_call',\n 'mcp_list_tools',\n 'mcp_approval_request',\n 'image_generation_call',\n ].includes(chunk.item.type)\n ) {\n additional_kwargs.tool_outputs = [chunk.item];\n } else if (chunk.type === 'response.created') {\n response_metadata.id = chunk.response.id;\n response_metadata.model_name = chunk.response.model;\n response_metadata.model = chunk.response.model;\n } else if (chunk.type === 'response.completed') {\n const msg = _convertOpenAIResponsesMessageToBaseMessage(chunk.response);\n\n usage_metadata = chunk.response.usage;\n if (chunk.response.text?.format?.type === 'json_schema') {\n additional_kwargs.parsed ??= JSON.parse(msg.text);\n }\n for (const [key, value] of Object.entries(chunk.response)) {\n if (key !== 'id') response_metadata[key] = value;\n }\n } else if (chunk.type === 'response.function_call_arguments.delta') {\n tool_call_chunks.push({\n type: 'tool_call_chunk',\n args: chunk.delta,\n index: chunk.output_index,\n });\n } else if (\n chunk.type === 'response.web_search_call.completed' ||\n chunk.type === 'response.file_search_call.completed'\n ) {\n generationInfo = {\n tool_outputs: {\n id: chunk.item_id,\n type: chunk.type.replace('response.', '').replace('.completed', ''),\n status: 'completed',\n },\n };\n } else if (chunk.type === 'response.refusal.done') {\n additional_kwargs.refusal = chunk.refusal;\n } else if (\n chunk.type === 'response.output_item.added' &&\n 'item' in chunk &&\n chunk.item.type === 'reasoning'\n ) {\n const summary: ChatOpenAIReasoningSummary['summary'] | undefined = chunk\n .item.summary\n ? chunk.item.summary.map((s, index) => ({\n ...s,\n index,\n }))\n : undefined;\n\n additional_kwargs.reasoning = {\n // We only capture ID in the first chunk or else the concatenated result of all chunks will\n // have an ID field that is repeated once per chunk. There is special handling for the `type`\n // field that prevents this, however.\n id: chunk.item.id,\n type: chunk.item.type,\n ...(summary ? { summary } : {}),\n };\n } else if (chunk.type === 'response.reasoning_summary_part.added') {\n additional_kwargs.reasoning = {\n type: 'reasoning',\n summary: [{ ...chunk.part, index: chunk.summary_index }],\n };\n } else if (chunk.type === 'response.reasoning_summary_text.delta') {\n additional_kwargs.reasoning = {\n type: 'reasoning',\n summary: [\n { text: chunk.delta, type: 'summary_text', index: chunk.summary_index },\n ],\n };\n /** @ts-ignore */\n } else if (chunk.type === 'response.image_generation_call.partial_image') {\n // noop/fixme: retaining partial images in a message chunk means that _all_\n // partial images get kept in history, so we don't do anything here.\n return null;\n } else {\n return null;\n }\n\n return new ChatGenerationChunk({\n // Legacy reasons, `onLLMNewToken` should pulls this out\n text: content.map((part) => part.text).join(''),\n message: new AIMessageChunk({\n id,\n content,\n tool_call_chunks,\n usage_metadata,\n additional_kwargs,\n response_metadata,\n }),\n generationInfo,\n });\n}\n"],"names":["ChatMessage","parseBase64DataUrl","parseMimeType","messages","isDataContentBlock","convertToProviderContentBlock","isAIMessage","convertLangChainToolCallToOpenAI","parseToolCall","makeInvalidToolCall","AIMessage","ChatGenerationChunk","AIMessageChunk"],"mappings":"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"}
|
|
@@ -1,32 +1,32 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var ollama = require('@langchain/ollama');
|
|
4
3
|
var mistralai = require('@langchain/mistralai');
|
|
5
4
|
var aws = require('@langchain/aws');
|
|
6
|
-
var googleVertexai = require('@langchain/google-vertexai');
|
|
7
|
-
var googleGenai = require('@langchain/google-genai');
|
|
8
5
|
var web = require('@langchain/community/chat_models/bedrock/web');
|
|
9
|
-
var index$
|
|
10
|
-
var index = require('./
|
|
11
|
-
var index$2 = require('./
|
|
6
|
+
var index$3 = require('./openai/index.cjs');
|
|
7
|
+
var index = require('./google/index.cjs');
|
|
8
|
+
var index$2 = require('./anthropic/index.cjs');
|
|
9
|
+
var index$1 = require('./openrouter/index.cjs');
|
|
10
|
+
var index$4 = require('./vertexai/index.cjs');
|
|
11
|
+
var index$5 = require('./ollama/index.cjs');
|
|
12
12
|
var _enum = require('../common/enum.cjs');
|
|
13
13
|
|
|
14
14
|
// src/llm/providers.ts
|
|
15
15
|
const llmProviders = {
|
|
16
|
-
[_enum.Providers.XAI]: index$
|
|
17
|
-
[_enum.Providers.OPENAI]: index$
|
|
18
|
-
[_enum.Providers.OLLAMA]:
|
|
19
|
-
[_enum.Providers.AZURE]: index$
|
|
20
|
-
[_enum.Providers.VERTEXAI]:
|
|
21
|
-
[_enum.Providers.DEEPSEEK]: index$
|
|
16
|
+
[_enum.Providers.XAI]: index$3.ChatXAI,
|
|
17
|
+
[_enum.Providers.OPENAI]: index$3.ChatOpenAI,
|
|
18
|
+
[_enum.Providers.OLLAMA]: index$5.ChatOllama,
|
|
19
|
+
[_enum.Providers.AZURE]: index$3.AzureChatOpenAI,
|
|
20
|
+
[_enum.Providers.VERTEXAI]: index$4.ChatVertexAI,
|
|
21
|
+
[_enum.Providers.DEEPSEEK]: index$3.ChatDeepSeek,
|
|
22
22
|
[_enum.Providers.MISTRALAI]: mistralai.ChatMistralAI,
|
|
23
23
|
[_enum.Providers.MISTRAL]: mistralai.ChatMistralAI,
|
|
24
|
-
[_enum.Providers.ANTHROPIC]: index$
|
|
25
|
-
[_enum.Providers.OPENROUTER]: index.ChatOpenRouter,
|
|
24
|
+
[_enum.Providers.ANTHROPIC]: index$2.CustomAnthropic,
|
|
25
|
+
[_enum.Providers.OPENROUTER]: index$1.ChatOpenRouter,
|
|
26
26
|
[_enum.Providers.BEDROCK_LEGACY]: web.BedrockChat,
|
|
27
27
|
[_enum.Providers.BEDROCK]: aws.ChatBedrockConverse,
|
|
28
28
|
// [Providers.ANTHROPIC]: ChatAnthropic,
|
|
29
|
-
[_enum.Providers.GOOGLE]:
|
|
29
|
+
[_enum.Providers.GOOGLE]: index.CustomChatGoogleGenerativeAI,
|
|
30
30
|
};
|
|
31
31
|
const manualToolStreamProviders = new Set([
|
|
32
32
|
_enum.Providers.ANTHROPIC,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"providers.cjs","sources":["../../../src/llm/providers.ts"],"sourcesContent":["// src/llm/providers.ts\nimport {
|
|
1
|
+
{"version":3,"file":"providers.cjs","sources":["../../../src/llm/providers.ts"],"sourcesContent":["// src/llm/providers.ts\nimport { ChatMistralAI } from '@langchain/mistralai';\nimport { ChatBedrockConverse } from '@langchain/aws';\n// import { ChatAnthropic } from '@langchain/anthropic';\n// import { ChatVertexAI } from '@langchain/google-vertexai';\nimport { BedrockChat } from '@langchain/community/chat_models/bedrock/web';\nimport type {\n ChatModelConstructorMap,\n ProviderOptionsMap,\n ChatModelMap,\n} from '@/types';\nimport {\n AzureChatOpenAI,\n ChatDeepSeek,\n ChatOpenAI,\n ChatXAI,\n} from '@/llm/openai';\nimport { CustomChatGoogleGenerativeAI } from '@/llm/google';\nimport { CustomAnthropic } from '@/llm/anthropic';\nimport { ChatOpenRouter } from '@/llm/openrouter';\nimport { ChatVertexAI } from '@/llm/vertexai';\nimport { ChatOllama } from '@/llm/ollama';\nimport { Providers } from '@/common';\n\nexport const llmProviders: Partial<ChatModelConstructorMap> = {\n [Providers.XAI]: ChatXAI,\n [Providers.OPENAI]: ChatOpenAI,\n [Providers.OLLAMA]: ChatOllama,\n [Providers.AZURE]: AzureChatOpenAI,\n [Providers.VERTEXAI]: ChatVertexAI,\n [Providers.DEEPSEEK]: ChatDeepSeek,\n [Providers.MISTRALAI]: ChatMistralAI,\n [Providers.MISTRAL]: ChatMistralAI,\n [Providers.ANTHROPIC]: CustomAnthropic,\n [Providers.OPENROUTER]: ChatOpenRouter,\n [Providers.BEDROCK_LEGACY]: BedrockChat,\n [Providers.BEDROCK]: ChatBedrockConverse,\n // [Providers.ANTHROPIC]: ChatAnthropic,\n [Providers.GOOGLE]: CustomChatGoogleGenerativeAI,\n};\n\nexport const manualToolStreamProviders = new Set<Providers | string>([\n Providers.ANTHROPIC,\n Providers.BEDROCK,\n Providers.OLLAMA,\n]);\n\nexport const getChatModelClass = <P extends Providers>(\n provider: P\n): new (config: ProviderOptionsMap[P]) => ChatModelMap[P] => {\n const ChatModelClass = llmProviders[provider];\n if (!ChatModelClass) {\n throw new Error(`Unsupported LLM provider: ${provider}`);\n }\n\n return ChatModelClass;\n};\n"],"names":["Providers","ChatXAI","ChatOpenAI","ChatOllama","AzureChatOpenAI","ChatVertexAI","ChatDeepSeek","ChatMistralAI","CustomAnthropic","ChatOpenRouter","BedrockChat","ChatBedrockConverse","CustomChatGoogleGenerativeAI"],"mappings":";;;;;;;;;;;;;AAAA;AAwBa,MAAA,YAAY,GAAqC;AAC5D,IAAA,CAACA,eAAS,CAAC,GAAG,GAAGC,eAAO;AACxB,IAAA,CAACD,eAAS,CAAC,MAAM,GAAGE,kBAAU;AAC9B,IAAA,CAACF,eAAS,CAAC,MAAM,GAAGG,kBAAU;AAC9B,IAAA,CAACH,eAAS,CAAC,KAAK,GAAGI,uBAAe;AAClC,IAAA,CAACJ,eAAS,CAAC,QAAQ,GAAGK,oBAAY;AAClC,IAAA,CAACL,eAAS,CAAC,QAAQ,GAAGM,oBAAY;AAClC,IAAA,CAACN,eAAS,CAAC,SAAS,GAAGO,uBAAa;AACpC,IAAA,CAACP,eAAS,CAAC,OAAO,GAAGO,uBAAa;AAClC,IAAA,CAACP,eAAS,CAAC,SAAS,GAAGQ,uBAAe;AACtC,IAAA,CAACR,eAAS,CAAC,UAAU,GAAGS,sBAAc;AACtC,IAAA,CAACT,eAAS,CAAC,cAAc,GAAGU,eAAW;AACvC,IAAA,CAACV,eAAS,CAAC,OAAO,GAAGW,uBAAmB;;AAExC,IAAA,CAACX,eAAS,CAAC,MAAM,GAAGY,kCAA4B;;AAGrC,MAAA,yBAAyB,GAAG,IAAI,GAAG,CAAqB;AACnE,IAAAZ,eAAS,CAAC,SAAS;AACnB,IAAAA,eAAS,CAAC,OAAO;AACjB,IAAAA,eAAS,CAAC,MAAM;AACjB,CAAA;AAEY,MAAA,iBAAiB,GAAG,CAC/B,QAAW,KAC+C;AAC1D,IAAA,MAAM,cAAc,GAAG,YAAY,CAAC,QAAQ,CAAC;IAC7C,IAAI,CAAC,cAAc,EAAE;AACnB,QAAA,MAAM,IAAI,KAAK,CAAC,6BAA6B,QAAQ,CAAA,CAAE,CAAC;;AAG1D,IAAA,OAAO,cAAc;AACvB;;;;;;"}
|
package/dist/cjs/llm/text.cjs
CHANGED
|
@@ -18,7 +18,15 @@ class TextStream {
|
|
|
18
18
|
randomInt(min, max) {
|
|
19
19
|
return Math.floor(Math.random() * (max - min)) + min;
|
|
20
20
|
}
|
|
21
|
-
static BOUNDARIES = new Set([
|
|
21
|
+
static BOUNDARIES = new Set([
|
|
22
|
+
' ',
|
|
23
|
+
'.',
|
|
24
|
+
',',
|
|
25
|
+
'!',
|
|
26
|
+
'?',
|
|
27
|
+
';',
|
|
28
|
+
':',
|
|
29
|
+
]);
|
|
22
30
|
findFirstWordBoundary(text, minSize) {
|
|
23
31
|
if (minSize >= text.length)
|
|
24
32
|
return text.length;
|
|
@@ -33,10 +41,13 @@ class TextStream {
|
|
|
33
41
|
}
|
|
34
42
|
return text.length; // If no boundary found, return entire remaining text
|
|
35
43
|
}
|
|
36
|
-
async *generateText(progressCallback) {
|
|
44
|
+
async *generateText(signal, progressCallback) {
|
|
37
45
|
const { delay, minChunkSize, maxChunkSize } = this;
|
|
38
46
|
while (this.currentIndex < this.text.length) {
|
|
39
|
-
|
|
47
|
+
if (signal?.aborted === true) {
|
|
48
|
+
break;
|
|
49
|
+
}
|
|
50
|
+
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
40
51
|
const remainingText = this.text.slice(this.currentIndex);
|
|
41
52
|
let chunkSize;
|
|
42
53
|
if (this.firstWordChunk) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text.cjs","sources":["../../../src/llm/text.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"text.cjs","sources":["../../../src/llm/text.ts"],"sourcesContent":["export interface TextStreamOptions {\n minChunkSize?: number;\n maxChunkSize?: number;\n delay?: number;\n firstWordChunk?: boolean;\n}\n\nexport type ProgressCallback = (chunk: string) => void;\nexport type PostChunkCallback = (chunk: string) => void;\n\nexport class TextStream {\n private text: string;\n private currentIndex: number;\n private minChunkSize: number;\n private maxChunkSize: number;\n private delay: number;\n private firstWordChunk: boolean;\n\n constructor(text: string, options: TextStreamOptions = {}) {\n this.text = text;\n this.currentIndex = 0;\n this.minChunkSize = options.minChunkSize ?? 4;\n this.maxChunkSize = options.maxChunkSize ?? 8;\n this.delay = options.delay ?? 20;\n this.firstWordChunk = options.firstWordChunk ?? true;\n }\n\n private randomInt(min: number, max: number): number {\n return Math.floor(Math.random() * (max - min)) + min;\n }\n\n private static readonly BOUNDARIES = new Set([\n ' ',\n '.',\n ',',\n '!',\n '?',\n ';',\n ':',\n ]);\n\n private findFirstWordBoundary(text: string, minSize: number): number {\n if (minSize >= text.length) return text.length;\n\n // Ensure we meet the minimum size first\n let pos = minSize;\n\n // Look forward until we find a boundary\n while (pos < text.length) {\n if (TextStream.BOUNDARIES.has(text[pos])) {\n return pos + 1; // Include the boundary character\n }\n pos++;\n }\n\n return text.length; // If no boundary found, return entire remaining text\n }\n\n async *generateText(\n signal?: AbortSignal,\n progressCallback?: ProgressCallback\n ): AsyncGenerator<string, void, unknown> {\n const { delay, minChunkSize, maxChunkSize } = this;\n\n while (this.currentIndex < this.text.length) {\n if (signal?.aborted === true) {\n break;\n }\n await new Promise((resolve) => setTimeout(resolve, delay));\n\n const remainingText = this.text.slice(this.currentIndex);\n let chunkSize: number;\n\n if (this.firstWordChunk) {\n chunkSize = this.findFirstWordBoundary(remainingText, minChunkSize);\n } else {\n const remainingChars = remainingText.length;\n chunkSize = Math.min(\n this.randomInt(minChunkSize, maxChunkSize + 1),\n remainingChars\n );\n }\n\n const chunk = this.text.slice(\n this.currentIndex,\n this.currentIndex + chunkSize\n );\n progressCallback?.(chunk);\n\n yield chunk;\n this.currentIndex += chunkSize;\n }\n }\n}\n"],"names":[],"mappings":";;MAUa,UAAU,CAAA;AACb,IAAA,IAAI;AACJ,IAAA,YAAY;AACZ,IAAA,YAAY;AACZ,IAAA,YAAY;AACZ,IAAA,KAAK;AACL,IAAA,cAAc;IAEtB,WAAY,CAAA,IAAY,EAAE,OAAA,GAA6B,EAAE,EAAA;AACvD,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC;QACrB,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,CAAC;QAC7C,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,CAAC;QAC7C,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE;QAChC,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,IAAI;;IAG9C,SAAS,CAAC,GAAW,EAAE,GAAW,EAAA;AACxC,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG;;AAG9C,IAAA,OAAgB,UAAU,GAAG,IAAI,GAAG,CAAC;QAC3C,GAAG;QACH,GAAG;QACH,GAAG;QACH,GAAG;QACH,GAAG;QACH,GAAG;QACH,GAAG;AACJ,KAAA,CAAC;IAEM,qBAAqB,CAAC,IAAY,EAAE,OAAe,EAAA;AACzD,QAAA,IAAI,OAAO,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC,MAAM;;QAG9C,IAAI,GAAG,GAAG,OAAO;;AAGjB,QAAA,OAAO,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE;AACxB,YAAA,IAAI,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE;AACxC,gBAAA,OAAO,GAAG,GAAG,CAAC,CAAC;;AAEjB,YAAA,GAAG,EAAE;;AAGP,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC;;AAGrB,IAAA,OAAO,YAAY,CACjB,MAAoB,EACpB,gBAAmC,EAAA;QAEnC,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,GAAG,IAAI;QAElD,OAAO,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAC3C,YAAA,IAAI,MAAM,EAAE,OAAO,KAAK,IAAI,EAAE;gBAC5B;;AAEF,YAAA,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAE1D,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC;AACxD,YAAA,IAAI,SAAiB;AAErB,YAAA,IAAI,IAAI,CAAC,cAAc,EAAE;gBACvB,SAAS,GAAG,IAAI,CAAC,qBAAqB,CAAC,aAAa,EAAE,YAAY,CAAC;;iBAC9D;AACL,gBAAA,MAAM,cAAc,GAAG,aAAa,CAAC,MAAM;AAC3C,gBAAA,SAAS,GAAG,IAAI,CAAC,GAAG,CAClB,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,YAAY,GAAG,CAAC,CAAC,EAC9C,cAAc,CACf;;AAGH,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAC3B,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,YAAY,GAAG,SAAS,CAC9B;AACD,YAAA,gBAAgB,GAAG,KAAK,CAAC;AAEzB,YAAA,MAAM,KAAK;AACX,YAAA,IAAI,CAAC,YAAY,IAAI,SAAS;;;;;;;"}
|
|
@@ -0,0 +1,330 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var googleGauth = require('@langchain/google-gauth');
|
|
4
|
+
var googleCommon = require('@langchain/google-common');
|
|
5
|
+
|
|
6
|
+
class CustomChatConnection extends googleCommon.ChatConnection {
|
|
7
|
+
async formatData(input, parameters) {
|
|
8
|
+
const formattedData = (await super.formatData(input, parameters));
|
|
9
|
+
if (formattedData.generationConfig?.thinkingConfig?.thinkingBudget === -1 &&
|
|
10
|
+
formattedData.generationConfig.thinkingConfig.includeThoughts === false) {
|
|
11
|
+
formattedData.generationConfig.thinkingConfig.includeThoughts = true;
|
|
12
|
+
}
|
|
13
|
+
return formattedData;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Integration with Google Vertex AI chat models.
|
|
18
|
+
*
|
|
19
|
+
* Setup:
|
|
20
|
+
* Install `@langchain/google-vertexai` and set your stringified
|
|
21
|
+
* Vertex AI credentials as an environment variable named `GOOGLE_APPLICATION_CREDENTIALS`.
|
|
22
|
+
*
|
|
23
|
+
* ```bash
|
|
24
|
+
* npm install @langchain/google-vertexai
|
|
25
|
+
* export GOOGLE_APPLICATION_CREDENTIALS="path/to/credentials"
|
|
26
|
+
* ```
|
|
27
|
+
*
|
|
28
|
+
* ## [Constructor args](https://api.js.langchain.com/classes/_langchain_google_vertexai.index.ChatVertexAI.html#constructor.new_ChatVertexAI)
|
|
29
|
+
*
|
|
30
|
+
* ## [Runtime args](https://api.js.langchain.com/interfaces/langchain_google_common_types.GoogleAIBaseLanguageModelCallOptions.html)
|
|
31
|
+
*
|
|
32
|
+
* Runtime args can be passed as the second argument to any of the base runnable methods `.invoke`. `.stream`, `.batch`, etc.
|
|
33
|
+
* They can also be passed via `.withConfig`, or the second arg in `.bindTools`, like shown in the examples below:
|
|
34
|
+
*
|
|
35
|
+
* ```typescript
|
|
36
|
+
* // When calling `.withConfig`, call options should be passed via the first argument
|
|
37
|
+
* const llmWithArgsBound = llm.withConfig({
|
|
38
|
+
* stop: ["\n"],
|
|
39
|
+
* tools: [...],
|
|
40
|
+
* });
|
|
41
|
+
*
|
|
42
|
+
* // When calling `.bindTools`, call options should be passed via the second argument
|
|
43
|
+
* const llmWithTools = llm.bindTools(
|
|
44
|
+
* [...],
|
|
45
|
+
* {
|
|
46
|
+
* tool_choice: "auto",
|
|
47
|
+
* }
|
|
48
|
+
* );
|
|
49
|
+
* ```
|
|
50
|
+
*
|
|
51
|
+
* ## Examples
|
|
52
|
+
*
|
|
53
|
+
* <details open>
|
|
54
|
+
* <summary><strong>Instantiate</strong></summary>
|
|
55
|
+
*
|
|
56
|
+
* ```typescript
|
|
57
|
+
* import { ChatVertexAI } from '@langchain/google-vertexai';
|
|
58
|
+
*
|
|
59
|
+
* const llm = new ChatVertexAI({
|
|
60
|
+
* model: "gemini-1.5-pro",
|
|
61
|
+
* temperature: 0,
|
|
62
|
+
* // other params...
|
|
63
|
+
* });
|
|
64
|
+
* ```
|
|
65
|
+
* </details>
|
|
66
|
+
*
|
|
67
|
+
* <br />
|
|
68
|
+
*
|
|
69
|
+
* <details>
|
|
70
|
+
* <summary><strong>Invoking</strong></summary>
|
|
71
|
+
*
|
|
72
|
+
* ```typescript
|
|
73
|
+
* const input = `Translate "I love programming" into French.`;
|
|
74
|
+
*
|
|
75
|
+
* // Models also accept a list of chat messages or a formatted prompt
|
|
76
|
+
* const result = await llm.invoke(input);
|
|
77
|
+
* console.log(result);
|
|
78
|
+
* ```
|
|
79
|
+
*
|
|
80
|
+
* ```txt
|
|
81
|
+
* AIMessageChunk {
|
|
82
|
+
* "content": "\"J'adore programmer\" \n\nHere's why this is the best translation:\n\n* **J'adore** means \"I love\" and conveys a strong passion.\n* **Programmer** is the French verb for \"to program.\"\n\nThis translation is natural and idiomatic in French. \n",
|
|
83
|
+
* "additional_kwargs": {},
|
|
84
|
+
* "response_metadata": {},
|
|
85
|
+
* "tool_calls": [],
|
|
86
|
+
* "tool_call_chunks": [],
|
|
87
|
+
* "invalid_tool_calls": [],
|
|
88
|
+
* "usage_metadata": {
|
|
89
|
+
* "input_tokens": 9,
|
|
90
|
+
* "output_tokens": 63,
|
|
91
|
+
* "total_tokens": 72
|
|
92
|
+
* }
|
|
93
|
+
* }
|
|
94
|
+
* ```
|
|
95
|
+
* </details>
|
|
96
|
+
*
|
|
97
|
+
* <br />
|
|
98
|
+
*
|
|
99
|
+
* <details>
|
|
100
|
+
* <summary><strong>Streaming Chunks</strong></summary>
|
|
101
|
+
*
|
|
102
|
+
* ```typescript
|
|
103
|
+
* for await (const chunk of await llm.stream(input)) {
|
|
104
|
+
* console.log(chunk);
|
|
105
|
+
* }
|
|
106
|
+
* ```
|
|
107
|
+
*
|
|
108
|
+
* ```txt
|
|
109
|
+
* AIMessageChunk {
|
|
110
|
+
* "content": "\"",
|
|
111
|
+
* "additional_kwargs": {},
|
|
112
|
+
* "response_metadata": {},
|
|
113
|
+
* "tool_calls": [],
|
|
114
|
+
* "tool_call_chunks": [],
|
|
115
|
+
* "invalid_tool_calls": []
|
|
116
|
+
* }
|
|
117
|
+
* AIMessageChunk {
|
|
118
|
+
* "content": "J'adore programmer\" \n",
|
|
119
|
+
* "additional_kwargs": {},
|
|
120
|
+
* "response_metadata": {},
|
|
121
|
+
* "tool_calls": [],
|
|
122
|
+
* "tool_call_chunks": [],
|
|
123
|
+
* "invalid_tool_calls": []
|
|
124
|
+
* }
|
|
125
|
+
* AIMessageChunk {
|
|
126
|
+
* "content": "",
|
|
127
|
+
* "additional_kwargs": {},
|
|
128
|
+
* "response_metadata": {},
|
|
129
|
+
* "tool_calls": [],
|
|
130
|
+
* "tool_call_chunks": [],
|
|
131
|
+
* "invalid_tool_calls": []
|
|
132
|
+
* }
|
|
133
|
+
* AIMessageChunk {
|
|
134
|
+
* "content": "",
|
|
135
|
+
* "additional_kwargs": {},
|
|
136
|
+
* "response_metadata": {
|
|
137
|
+
* "finishReason": "stop"
|
|
138
|
+
* },
|
|
139
|
+
* "tool_calls": [],
|
|
140
|
+
* "tool_call_chunks": [],
|
|
141
|
+
* "invalid_tool_calls": [],
|
|
142
|
+
* "usage_metadata": {
|
|
143
|
+
* "input_tokens": 9,
|
|
144
|
+
* "output_tokens": 8,
|
|
145
|
+
* "total_tokens": 17
|
|
146
|
+
* }
|
|
147
|
+
* }
|
|
148
|
+
* ```
|
|
149
|
+
* </details>
|
|
150
|
+
*
|
|
151
|
+
* <br />
|
|
152
|
+
*
|
|
153
|
+
* <details>
|
|
154
|
+
* <summary><strong>Aggregate Streamed Chunks</strong></summary>
|
|
155
|
+
*
|
|
156
|
+
* ```typescript
|
|
157
|
+
* import { AIMessageChunk } from '@langchain/core/messages';
|
|
158
|
+
* import { concat } from '@langchain/core/utils/stream';
|
|
159
|
+
*
|
|
160
|
+
* const stream = await llm.stream(input);
|
|
161
|
+
* let full: AIMessageChunk | undefined;
|
|
162
|
+
* for await (const chunk of stream) {
|
|
163
|
+
* full = !full ? chunk : concat(full, chunk);
|
|
164
|
+
* }
|
|
165
|
+
* console.log(full);
|
|
166
|
+
* ```
|
|
167
|
+
*
|
|
168
|
+
* ```txt
|
|
169
|
+
* AIMessageChunk {
|
|
170
|
+
* "content": "\"J'adore programmer\" \n",
|
|
171
|
+
* "additional_kwargs": {},
|
|
172
|
+
* "response_metadata": {
|
|
173
|
+
* "finishReason": "stop"
|
|
174
|
+
* },
|
|
175
|
+
* "tool_calls": [],
|
|
176
|
+
* "tool_call_chunks": [],
|
|
177
|
+
* "invalid_tool_calls": [],
|
|
178
|
+
* "usage_metadata": {
|
|
179
|
+
* "input_tokens": 9,
|
|
180
|
+
* "output_tokens": 8,
|
|
181
|
+
* "total_tokens": 17
|
|
182
|
+
* }
|
|
183
|
+
* }
|
|
184
|
+
* ```
|
|
185
|
+
* </details>
|
|
186
|
+
*
|
|
187
|
+
* <br />
|
|
188
|
+
*
|
|
189
|
+
* <details>
|
|
190
|
+
* <summary><strong>Bind tools</strong></summary>
|
|
191
|
+
*
|
|
192
|
+
* ```typescript
|
|
193
|
+
* import { z } from 'zod';
|
|
194
|
+
*
|
|
195
|
+
* const GetWeather = {
|
|
196
|
+
* name: "GetWeather",
|
|
197
|
+
* description: "Get the current weather in a given location",
|
|
198
|
+
* schema: z.object({
|
|
199
|
+
* location: z.string().describe("The city and state, e.g. San Francisco, CA")
|
|
200
|
+
* }),
|
|
201
|
+
* }
|
|
202
|
+
*
|
|
203
|
+
* const GetPopulation = {
|
|
204
|
+
* name: "GetPopulation",
|
|
205
|
+
* description: "Get the current population in a given location",
|
|
206
|
+
* schema: z.object({
|
|
207
|
+
* location: z.string().describe("The city and state, e.g. San Francisco, CA")
|
|
208
|
+
* }),
|
|
209
|
+
* }
|
|
210
|
+
*
|
|
211
|
+
* const llmWithTools = llm.bindTools([GetWeather, GetPopulation]);
|
|
212
|
+
* const aiMsg = await llmWithTools.invoke(
|
|
213
|
+
* "Which city is hotter today and which is bigger: LA or NY?"
|
|
214
|
+
* );
|
|
215
|
+
* console.log(aiMsg.tool_calls);
|
|
216
|
+
* ```
|
|
217
|
+
*
|
|
218
|
+
* ```txt
|
|
219
|
+
* [
|
|
220
|
+
* {
|
|
221
|
+
* name: 'GetPopulation',
|
|
222
|
+
* args: { location: 'New York City, NY' },
|
|
223
|
+
* id: '33c1c1f47e2f492799c77d2800a43912',
|
|
224
|
+
* type: 'tool_call'
|
|
225
|
+
* }
|
|
226
|
+
* ]
|
|
227
|
+
* ```
|
|
228
|
+
* </details>
|
|
229
|
+
*
|
|
230
|
+
* <br />
|
|
231
|
+
*
|
|
232
|
+
* <details>
|
|
233
|
+
* <summary><strong>Structured Output</strong></summary>
|
|
234
|
+
*
|
|
235
|
+
* ```typescript
|
|
236
|
+
* import { z } from 'zod';
|
|
237
|
+
*
|
|
238
|
+
* const Joke = z.object({
|
|
239
|
+
* setup: z.string().describe("The setup of the joke"),
|
|
240
|
+
* punchline: z.string().describe("The punchline to the joke"),
|
|
241
|
+
* rating: z.number().optional().describe("How funny the joke is, from 1 to 10")
|
|
242
|
+
* }).describe('Joke to tell user.');
|
|
243
|
+
*
|
|
244
|
+
* const structuredLlm = llm.withStructuredOutput(Joke, { name: "Joke" });
|
|
245
|
+
* const jokeResult = await structuredLlm.invoke("Tell me a joke about cats");
|
|
246
|
+
* console.log(jokeResult);
|
|
247
|
+
* ```
|
|
248
|
+
*
|
|
249
|
+
* ```txt
|
|
250
|
+
* {
|
|
251
|
+
* setup: 'What do you call a cat that loves to bowl?',
|
|
252
|
+
* punchline: 'An alley cat!'
|
|
253
|
+
* }
|
|
254
|
+
* ```
|
|
255
|
+
* </details>
|
|
256
|
+
*
|
|
257
|
+
* <br />
|
|
258
|
+
*
|
|
259
|
+
* <details>
|
|
260
|
+
* <summary><strong>Usage Metadata</strong></summary>
|
|
261
|
+
*
|
|
262
|
+
* ```typescript
|
|
263
|
+
* const aiMsgForMetadata = await llm.invoke(input);
|
|
264
|
+
* console.log(aiMsgForMetadata.usage_metadata);
|
|
265
|
+
* ```
|
|
266
|
+
*
|
|
267
|
+
* ```txt
|
|
268
|
+
* { input_tokens: 9, output_tokens: 8, total_tokens: 17 }
|
|
269
|
+
* ```
|
|
270
|
+
* </details>
|
|
271
|
+
*
|
|
272
|
+
* <br />
|
|
273
|
+
*
|
|
274
|
+
* <details>
|
|
275
|
+
* <summary><strong>Stream Usage Metadata</strong></summary>
|
|
276
|
+
*
|
|
277
|
+
* ```typescript
|
|
278
|
+
* const streamForMetadata = await llm.stream(
|
|
279
|
+
* input,
|
|
280
|
+
* {
|
|
281
|
+
* streamUsage: true
|
|
282
|
+
* }
|
|
283
|
+
* );
|
|
284
|
+
* let fullForMetadata: AIMessageChunk | undefined;
|
|
285
|
+
* for await (const chunk of streamForMetadata) {
|
|
286
|
+
* fullForMetadata = !fullForMetadata ? chunk : concat(fullForMetadata, chunk);
|
|
287
|
+
* }
|
|
288
|
+
* console.log(fullForMetadata?.usage_metadata);
|
|
289
|
+
* ```
|
|
290
|
+
*
|
|
291
|
+
* ```txt
|
|
292
|
+
* { input_tokens: 9, output_tokens: 8, total_tokens: 17 }
|
|
293
|
+
* ```
|
|
294
|
+
* </details>
|
|
295
|
+
*
|
|
296
|
+
* <br />
|
|
297
|
+
*/
|
|
298
|
+
class ChatVertexAI extends googleGauth.ChatGoogle {
|
|
299
|
+
lc_namespace = ['langchain', 'chat_models', 'vertexai'];
|
|
300
|
+
dynamicThinkingBudget = false;
|
|
301
|
+
static lc_name() {
|
|
302
|
+
return 'ChatVertexAI';
|
|
303
|
+
}
|
|
304
|
+
constructor(fields) {
|
|
305
|
+
let dynamicThinkingBudget = false;
|
|
306
|
+
if (fields?.thinkingBudget === -1) {
|
|
307
|
+
dynamicThinkingBudget = true;
|
|
308
|
+
fields.thinkingBudget = 1;
|
|
309
|
+
}
|
|
310
|
+
super({
|
|
311
|
+
...fields,
|
|
312
|
+
platformType: 'gcp',
|
|
313
|
+
});
|
|
314
|
+
this.dynamicThinkingBudget = dynamicThinkingBudget;
|
|
315
|
+
}
|
|
316
|
+
invocationParams(options) {
|
|
317
|
+
const params = super.invocationParams(options);
|
|
318
|
+
if (this.dynamicThinkingBudget) {
|
|
319
|
+
params.maxReasoningTokens = -1;
|
|
320
|
+
}
|
|
321
|
+
return params;
|
|
322
|
+
}
|
|
323
|
+
buildConnection(fields, client) {
|
|
324
|
+
this.connection = new CustomChatConnection({ ...fields, ...this }, this.caller, client, false);
|
|
325
|
+
this.streamedConnection = new CustomChatConnection({ ...fields, ...this }, this.caller, client, true);
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
exports.ChatVertexAI = ChatVertexAI;
|
|
330
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../../src/llm/vertexai/index.ts"],"sourcesContent":["import { ChatGoogle } from '@langchain/google-gauth';\nimport { ChatConnection } from '@langchain/google-common';\nimport type {\n GeminiRequest,\n GoogleAIModelRequestParams,\n GoogleAbstractedClient,\n} from '@langchain/google-common';\nimport type { BaseMessage } from '@langchain/core/messages';\nimport type { VertexAIClientOptions } from '@/types';\n\nclass CustomChatConnection extends ChatConnection<VertexAIClientOptions> {\n async formatData(\n input: BaseMessage[],\n parameters: GoogleAIModelRequestParams\n ): Promise<unknown> {\n const formattedData = (await super.formatData(\n input,\n parameters\n )) as GeminiRequest;\n if (\n formattedData.generationConfig?.thinkingConfig?.thinkingBudget === -1 &&\n formattedData.generationConfig.thinkingConfig.includeThoughts === false\n ) {\n formattedData.generationConfig.thinkingConfig.includeThoughts = true;\n }\n return formattedData;\n }\n}\n\n/**\n * Integration with Google Vertex AI chat models.\n *\n * Setup:\n * Install `@langchain/google-vertexai` and set your stringified\n * Vertex AI credentials as an environment variable named `GOOGLE_APPLICATION_CREDENTIALS`.\n *\n * ```bash\n * npm install @langchain/google-vertexai\n * export GOOGLE_APPLICATION_CREDENTIALS=\"path/to/credentials\"\n * ```\n *\n * ## [Constructor args](https://api.js.langchain.com/classes/_langchain_google_vertexai.index.ChatVertexAI.html#constructor.new_ChatVertexAI)\n *\n * ## [Runtime args](https://api.js.langchain.com/interfaces/langchain_google_common_types.GoogleAIBaseLanguageModelCallOptions.html)\n *\n * Runtime args can be passed as the second argument to any of the base runnable methods `.invoke`. `.stream`, `.batch`, etc.\n * They can also be passed via `.withConfig`, or the second arg in `.bindTools`, like shown in the examples below:\n *\n * ```typescript\n * // When calling `.withConfig`, call options should be passed via the first argument\n * const llmWithArgsBound = llm.withConfig({\n * stop: [\"\\n\"],\n * tools: [...],\n * });\n *\n * // When calling `.bindTools`, call options should be passed via the second argument\n * const llmWithTools = llm.bindTools(\n * [...],\n * {\n * tool_choice: \"auto\",\n * }\n * );\n * ```\n *\n * ## Examples\n *\n * <details open>\n * <summary><strong>Instantiate</strong></summary>\n *\n * ```typescript\n * import { ChatVertexAI } from '@langchain/google-vertexai';\n *\n * const llm = new ChatVertexAI({\n * model: \"gemini-1.5-pro\",\n * temperature: 0,\n * // other params...\n * });\n * ```\n * </details>\n *\n * <br />\n *\n * <details>\n * <summary><strong>Invoking</strong></summary>\n *\n * ```typescript\n * const input = `Translate \"I love programming\" into French.`;\n *\n * // Models also accept a list of chat messages or a formatted prompt\n * const result = await llm.invoke(input);\n * console.log(result);\n * ```\n *\n * ```txt\n * AIMessageChunk {\n * \"content\": \"\\\"J'adore programmer\\\" \\n\\nHere's why this is the best translation:\\n\\n* **J'adore** means \\\"I love\\\" and conveys a strong passion.\\n* **Programmer** is the French verb for \\\"to program.\\\"\\n\\nThis translation is natural and idiomatic in French. \\n\",\n * \"additional_kwargs\": {},\n * \"response_metadata\": {},\n * \"tool_calls\": [],\n * \"tool_call_chunks\": [],\n * \"invalid_tool_calls\": [],\n * \"usage_metadata\": {\n * \"input_tokens\": 9,\n * \"output_tokens\": 63,\n * \"total_tokens\": 72\n * }\n * }\n * ```\n * </details>\n *\n * <br />\n *\n * <details>\n * <summary><strong>Streaming Chunks</strong></summary>\n *\n * ```typescript\n * for await (const chunk of await llm.stream(input)) {\n * console.log(chunk);\n * }\n * ```\n *\n * ```txt\n * AIMessageChunk {\n * \"content\": \"\\\"\",\n * \"additional_kwargs\": {},\n * \"response_metadata\": {},\n * \"tool_calls\": [],\n * \"tool_call_chunks\": [],\n * \"invalid_tool_calls\": []\n * }\n * AIMessageChunk {\n * \"content\": \"J'adore programmer\\\" \\n\",\n * \"additional_kwargs\": {},\n * \"response_metadata\": {},\n * \"tool_calls\": [],\n * \"tool_call_chunks\": [],\n * \"invalid_tool_calls\": []\n * }\n * AIMessageChunk {\n * \"content\": \"\",\n * \"additional_kwargs\": {},\n * \"response_metadata\": {},\n * \"tool_calls\": [],\n * \"tool_call_chunks\": [],\n * \"invalid_tool_calls\": []\n * }\n * AIMessageChunk {\n * \"content\": \"\",\n * \"additional_kwargs\": {},\n * \"response_metadata\": {\n * \"finishReason\": \"stop\"\n * },\n * \"tool_calls\": [],\n * \"tool_call_chunks\": [],\n * \"invalid_tool_calls\": [],\n * \"usage_metadata\": {\n * \"input_tokens\": 9,\n * \"output_tokens\": 8,\n * \"total_tokens\": 17\n * }\n * }\n * ```\n * </details>\n *\n * <br />\n *\n * <details>\n * <summary><strong>Aggregate Streamed Chunks</strong></summary>\n *\n * ```typescript\n * import { AIMessageChunk } from '@langchain/core/messages';\n * import { concat } from '@langchain/core/utils/stream';\n *\n * const stream = await llm.stream(input);\n * let full: AIMessageChunk | undefined;\n * for await (const chunk of stream) {\n * full = !full ? chunk : concat(full, chunk);\n * }\n * console.log(full);\n * ```\n *\n * ```txt\n * AIMessageChunk {\n * \"content\": \"\\\"J'adore programmer\\\" \\n\",\n * \"additional_kwargs\": {},\n * \"response_metadata\": {\n * \"finishReason\": \"stop\"\n * },\n * \"tool_calls\": [],\n * \"tool_call_chunks\": [],\n * \"invalid_tool_calls\": [],\n * \"usage_metadata\": {\n * \"input_tokens\": 9,\n * \"output_tokens\": 8,\n * \"total_tokens\": 17\n * }\n * }\n * ```\n * </details>\n *\n * <br />\n *\n * <details>\n * <summary><strong>Bind tools</strong></summary>\n *\n * ```typescript\n * import { z } from 'zod';\n *\n * const GetWeather = {\n * name: \"GetWeather\",\n * description: \"Get the current weather in a given location\",\n * schema: z.object({\n * location: z.string().describe(\"The city and state, e.g. San Francisco, CA\")\n * }),\n * }\n *\n * const GetPopulation = {\n * name: \"GetPopulation\",\n * description: \"Get the current population in a given location\",\n * schema: z.object({\n * location: z.string().describe(\"The city and state, e.g. San Francisco, CA\")\n * }),\n * }\n *\n * const llmWithTools = llm.bindTools([GetWeather, GetPopulation]);\n * const aiMsg = await llmWithTools.invoke(\n * \"Which city is hotter today and which is bigger: LA or NY?\"\n * );\n * console.log(aiMsg.tool_calls);\n * ```\n *\n * ```txt\n * [\n * {\n * name: 'GetPopulation',\n * args: { location: 'New York City, NY' },\n * id: '33c1c1f47e2f492799c77d2800a43912',\n * type: 'tool_call'\n * }\n * ]\n * ```\n * </details>\n *\n * <br />\n *\n * <details>\n * <summary><strong>Structured Output</strong></summary>\n *\n * ```typescript\n * import { z } from 'zod';\n *\n * const Joke = z.object({\n * setup: z.string().describe(\"The setup of the joke\"),\n * punchline: z.string().describe(\"The punchline to the joke\"),\n * rating: z.number().optional().describe(\"How funny the joke is, from 1 to 10\")\n * }).describe('Joke to tell user.');\n *\n * const structuredLlm = llm.withStructuredOutput(Joke, { name: \"Joke\" });\n * const jokeResult = await structuredLlm.invoke(\"Tell me a joke about cats\");\n * console.log(jokeResult);\n * ```\n *\n * ```txt\n * {\n * setup: 'What do you call a cat that loves to bowl?',\n * punchline: 'An alley cat!'\n * }\n * ```\n * </details>\n *\n * <br />\n *\n * <details>\n * <summary><strong>Usage Metadata</strong></summary>\n *\n * ```typescript\n * const aiMsgForMetadata = await llm.invoke(input);\n * console.log(aiMsgForMetadata.usage_metadata);\n * ```\n *\n * ```txt\n * { input_tokens: 9, output_tokens: 8, total_tokens: 17 }\n * ```\n * </details>\n *\n * <br />\n *\n * <details>\n * <summary><strong>Stream Usage Metadata</strong></summary>\n *\n * ```typescript\n * const streamForMetadata = await llm.stream(\n * input,\n * {\n * streamUsage: true\n * }\n * );\n * let fullForMetadata: AIMessageChunk | undefined;\n * for await (const chunk of streamForMetadata) {\n * fullForMetadata = !fullForMetadata ? chunk : concat(fullForMetadata, chunk);\n * }\n * console.log(fullForMetadata?.usage_metadata);\n * ```\n *\n * ```txt\n * { input_tokens: 9, output_tokens: 8, total_tokens: 17 }\n * ```\n * </details>\n *\n * <br />\n */\nexport class ChatVertexAI extends ChatGoogle {\n lc_namespace = ['langchain', 'chat_models', 'vertexai'];\n dynamicThinkingBudget = false;\n\n static lc_name(): 'ChatVertexAI' {\n return 'ChatVertexAI';\n }\n\n constructor(fields?: VertexAIClientOptions) {\n let dynamicThinkingBudget = false;\n if (fields?.thinkingBudget === -1) {\n dynamicThinkingBudget = true;\n fields.thinkingBudget = 1;\n }\n super({\n ...fields,\n platformType: 'gcp',\n });\n this.dynamicThinkingBudget = dynamicThinkingBudget;\n }\n invocationParams(\n options?: this['ParsedCallOptions'] | undefined\n ): GoogleAIModelRequestParams {\n const params = super.invocationParams(options);\n if (this.dynamicThinkingBudget) {\n params.maxReasoningTokens = -1;\n }\n return params;\n }\n\n buildConnection(\n fields: VertexAIClientOptions,\n client: GoogleAbstractedClient\n ): void {\n this.connection = new CustomChatConnection(\n { ...fields, ...this },\n this.caller,\n client,\n false\n );\n\n this.streamedConnection = new CustomChatConnection(\n { ...fields, ...this },\n this.caller,\n client,\n true\n );\n }\n}\n"],"names":["ChatConnection","ChatGoogle"],"mappings":";;;;;AAUA,MAAM,oBAAqB,SAAQA,2BAAqC,CAAA;AACtE,IAAA,MAAM,UAAU,CACd,KAAoB,EACpB,UAAsC,EAAA;AAEtC,QAAA,MAAM,aAAa,IAAI,MAAM,KAAK,CAAC,UAAU,CAC3C,KAAK,EACL,UAAU,CACX,CAAkB;QACnB,IACE,aAAa,CAAC,gBAAgB,EAAE,cAAc,EAAE,cAAc,KAAK,EAAE;YACrE,aAAa,CAAC,gBAAgB,CAAC,cAAc,CAAC,eAAe,KAAK,KAAK,EACvE;YACA,aAAa,CAAC,gBAAgB,CAAC,cAAc,CAAC,eAAe,GAAG,IAAI;;AAEtE,QAAA,OAAO,aAAa;;AAEvB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyRG;AACG,MAAO,YAAa,SAAQC,sBAAU,CAAA;IAC1C,YAAY,GAAG,CAAC,WAAW,EAAE,aAAa,EAAE,UAAU,CAAC;IACvD,qBAAqB,GAAG,KAAK;AAE7B,IAAA,OAAO,OAAO,GAAA;AACZ,QAAA,OAAO,cAAc;;AAGvB,IAAA,WAAA,CAAY,MAA8B,EAAA;QACxC,IAAI,qBAAqB,GAAG,KAAK;AACjC,QAAA,IAAI,MAAM,EAAE,cAAc,KAAK,EAAE,EAAE;YACjC,qBAAqB,GAAG,IAAI;AAC5B,YAAA,MAAM,CAAC,cAAc,GAAG,CAAC;;AAE3B,QAAA,KAAK,CAAC;AACJ,YAAA,GAAG,MAAM;AACT,YAAA,YAAY,EAAE,KAAK;AACpB,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,qBAAqB,GAAG,qBAAqB;;AAEpD,IAAA,gBAAgB,CACd,OAA+C,EAAA;QAE/C,MAAM,MAAM,GAAG,KAAK,CAAC,gBAAgB,CAAC,OAAO,CAAC;AAC9C,QAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE;AAC9B,YAAA,MAAM,CAAC,kBAAkB,GAAG,EAAE;;AAEhC,QAAA,OAAO,MAAM;;IAGf,eAAe,CACb,MAA6B,EAC7B,MAA8B,EAAA;QAE9B,IAAI,CAAC,UAAU,GAAG,IAAI,oBAAoB,CACxC,EAAE,GAAG,MAAM,EAAE,GAAG,IAAI,EAAE,EACtB,IAAI,CAAC,MAAM,EACX,MAAM,EACN,KAAK,CACN;QAED,IAAI,CAAC,kBAAkB,GAAG,IAAI,oBAAoB,CAChD,EAAE,GAAG,MAAM,EAAE,GAAG,IAAI,EAAE,EACtB,IAAI,CAAC,MAAM,EACX,MAAM,EACN,IAAI,CACL;;AAEJ;;;;"}
|