@langchain/core 1.0.0-alpha.6 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +131 -0
- package/LICENSE +6 -6
- package/README.md +2 -23
- package/dist/agents.d.ts.map +1 -1
- package/dist/caches/base.d.cts.map +1 -1
- package/dist/callbacks/base.d.cts.map +1 -1
- package/dist/callbacks/base.d.ts.map +1 -1
- package/dist/callbacks/manager.cjs +9 -64
- package/dist/callbacks/manager.cjs.map +1 -1
- package/dist/callbacks/manager.d.cts +1 -23
- package/dist/callbacks/manager.d.cts.map +1 -1
- package/dist/callbacks/manager.d.ts +1 -23
- package/dist/callbacks/manager.d.ts.map +1 -1
- package/dist/callbacks/manager.js +10 -63
- package/dist/callbacks/manager.js.map +1 -1
- package/dist/chat_history.cjs +0 -4
- package/dist/chat_history.cjs.map +1 -1
- package/dist/chat_history.d.cts +1 -3
- package/dist/chat_history.d.cts.map +1 -1
- package/dist/chat_history.d.ts +1 -3
- package/dist/chat_history.d.ts.map +1 -1
- package/dist/chat_history.js +0 -4
- package/dist/chat_history.js.map +1 -1
- package/dist/document_loaders/base.cjs +1 -13
- package/dist/document_loaders/base.cjs.map +1 -1
- package/dist/document_loaders/base.d.cts +0 -9
- package/dist/document_loaders/base.d.cts.map +1 -1
- package/dist/document_loaders/base.d.ts +0 -9
- package/dist/document_loaders/base.d.ts.map +1 -1
- package/dist/document_loaders/base.js +1 -13
- package/dist/document_loaders/base.js.map +1 -1
- package/dist/document_loaders/langsmith.d.cts +1 -1
- package/dist/language_models/base.cjs.map +1 -1
- package/dist/language_models/base.d.cts +0 -16
- package/dist/language_models/base.d.cts.map +1 -1
- package/dist/language_models/base.d.ts +0 -16
- package/dist/language_models/base.d.ts.map +1 -1
- package/dist/language_models/base.js.map +1 -1
- package/dist/language_models/chat_models.cjs +10 -83
- package/dist/language_models/chat_models.cjs.map +1 -1
- package/dist/language_models/chat_models.d.cts +21 -55
- package/dist/language_models/chat_models.d.cts.map +1 -1
- package/dist/language_models/chat_models.d.ts +21 -55
- package/dist/language_models/chat_models.d.ts.map +1 -1
- package/dist/language_models/chat_models.js +11 -83
- package/dist/language_models/chat_models.js.map +1 -1
- package/dist/language_models/llms.cjs +0 -56
- package/dist/language_models/llms.cjs.map +1 -1
- package/dist/language_models/llms.d.cts +1 -43
- package/dist/language_models/llms.d.cts.map +1 -1
- package/dist/language_models/llms.d.ts +1 -43
- package/dist/language_models/llms.d.ts.map +1 -1
- package/dist/language_models/llms.js +0 -56
- package/dist/language_models/llms.js.map +1 -1
- package/dist/load/import_map.cjs +1 -7
- package/dist/load/import_map.cjs.map +1 -1
- package/dist/load/import_map.js +1 -7
- package/dist/load/import_map.js.map +1 -1
- package/dist/messages/ai.cjs +4 -0
- package/dist/messages/ai.cjs.map +1 -1
- package/dist/messages/ai.js +4 -0
- package/dist/messages/ai.js.map +1 -1
- package/dist/messages/block_translators/anthropic.cjs +191 -144
- package/dist/messages/block_translators/anthropic.cjs.map +1 -1
- package/dist/messages/block_translators/anthropic.js +191 -144
- package/dist/messages/block_translators/anthropic.js.map +1 -1
- package/dist/messages/block_translators/index.cjs +2 -2
- package/dist/messages/block_translators/index.cjs.map +1 -1
- package/dist/messages/block_translators/index.js +4 -4
- package/dist/messages/block_translators/index.js.map +1 -1
- package/dist/messages/block_translators/openai.cjs +78 -22
- package/dist/messages/block_translators/openai.cjs.map +1 -1
- package/dist/messages/block_translators/openai.js +78 -22
- package/dist/messages/block_translators/openai.js.map +1 -1
- package/dist/messages/content/tools.cjs +1 -5
- package/dist/messages/content/tools.cjs.map +1 -1
- package/dist/messages/content/tools.d.cts +1 -85
- package/dist/messages/content/tools.d.cts.map +1 -1
- package/dist/messages/content/tools.d.ts +1 -85
- package/dist/messages/content/tools.d.ts.map +1 -1
- package/dist/messages/content/tools.js +1 -5
- package/dist/messages/content/tools.js.map +1 -1
- package/dist/messages/metadata.cjs.map +1 -1
- package/dist/messages/metadata.d.cts +3 -0
- package/dist/messages/metadata.d.cts.map +1 -1
- package/dist/messages/metadata.d.ts +3 -0
- package/dist/messages/metadata.d.ts.map +1 -1
- package/dist/messages/metadata.js.map +1 -1
- package/dist/messages/tool.cjs +2 -0
- package/dist/messages/tool.cjs.map +1 -1
- package/dist/messages/tool.d.cts +2 -0
- package/dist/messages/tool.d.cts.map +1 -1
- package/dist/messages/tool.d.ts +2 -0
- package/dist/messages/tool.d.ts.map +1 -1
- package/dist/messages/tool.js +2 -0
- package/dist/messages/tool.js.map +1 -1
- package/dist/output_parsers/json.cjs +5 -0
- package/dist/output_parsers/json.cjs.map +1 -1
- package/dist/output_parsers/json.d.cts +2 -0
- package/dist/output_parsers/json.d.cts.map +1 -1
- package/dist/output_parsers/json.d.ts +2 -0
- package/dist/output_parsers/json.d.ts.map +1 -1
- package/dist/output_parsers/json.js +5 -0
- package/dist/output_parsers/json.js.map +1 -1
- package/dist/prompts/base.cjs +0 -36
- package/dist/prompts/base.cjs.map +1 -1
- package/dist/prompts/base.d.cts +0 -16
- package/dist/prompts/base.d.cts.map +1 -1
- package/dist/prompts/base.d.ts +0 -16
- package/dist/prompts/base.d.ts.map +1 -1
- package/dist/prompts/base.js +0 -36
- package/dist/prompts/base.js.map +1 -1
- package/dist/prompts/chat.cjs +1 -5
- package/dist/prompts/chat.cjs.map +1 -1
- package/dist/prompts/chat.d.cts +1 -4
- package/dist/prompts/chat.d.cts.map +1 -1
- package/dist/prompts/chat.d.ts +1 -4
- package/dist/prompts/chat.d.ts.map +1 -1
- package/dist/prompts/chat.js +1 -5
- package/dist/prompts/chat.js.map +1 -1
- package/dist/prompts/dict.d.cts +1 -1
- package/dist/prompts/dict.d.ts +1 -1
- package/dist/prompts/few_shot.d.cts +2 -2
- package/dist/prompts/few_shot.d.ts +2 -2
- package/dist/prompts/image.d.cts +1 -1
- package/dist/prompts/image.d.ts +1 -1
- package/dist/prompts/index.d.cts +2 -2
- package/dist/prompts/index.d.ts +2 -2
- package/dist/prompts/pipeline.d.cts +1 -1
- package/dist/prompts/pipeline.d.ts +1 -1
- package/dist/prompts/prompt.d.cts +2 -2
- package/dist/prompts/prompt.d.ts +2 -2
- package/dist/retrievers/index.cjs +3 -18
- package/dist/retrievers/index.cjs.map +1 -1
- package/dist/retrievers/index.d.cts +2 -27
- package/dist/retrievers/index.d.cts.map +1 -1
- package/dist/retrievers/index.d.ts +2 -27
- package/dist/retrievers/index.d.ts.map +1 -1
- package/dist/retrievers/index.js +3 -18
- package/dist/retrievers/index.js.map +1 -1
- package/dist/runnables/base.cjs +24 -63
- package/dist/runnables/base.cjs.map +1 -1
- package/dist/runnables/base.d.cts +10 -39
- package/dist/runnables/base.d.cts.map +1 -1
- package/dist/runnables/base.d.ts +10 -39
- package/dist/runnables/base.d.ts.map +1 -1
- package/dist/runnables/base.js +24 -63
- package/dist/runnables/base.js.map +1 -1
- package/dist/runnables/graph.cjs +1 -1
- package/dist/runnables/graph.cjs.map +1 -1
- package/dist/runnables/graph.js +2 -2
- package/dist/runnables/graph.js.map +1 -1
- package/dist/runnables/graph_mermaid.cjs +1 -10
- package/dist/runnables/graph_mermaid.cjs.map +1 -1
- package/dist/runnables/graph_mermaid.js +1 -10
- package/dist/runnables/graph_mermaid.js.map +1 -1
- package/dist/runnables/history.cjs +1 -1
- package/dist/runnables/history.cjs.map +1 -1
- package/dist/runnables/history.d.cts +2 -2
- package/dist/runnables/history.d.cts.map +1 -1
- package/dist/runnables/history.d.ts +2 -2
- package/dist/runnables/history.d.ts.map +1 -1
- package/dist/runnables/history.js +1 -1
- package/dist/runnables/history.js.map +1 -1
- package/dist/stores.cjs.map +1 -1
- package/dist/stores.d.cts +3 -29
- package/dist/stores.d.cts.map +1 -1
- package/dist/stores.d.ts +3 -29
- package/dist/stores.d.ts.map +1 -1
- package/dist/stores.js.map +1 -1
- package/dist/tools/index.cjs +12 -4
- package/dist/tools/index.cjs.map +1 -1
- package/dist/tools/index.js +12 -4
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/types.cjs.map +1 -1
- package/dist/tools/types.d.cts +4 -0
- package/dist/tools/types.d.cts.map +1 -1
- package/dist/tools/types.d.ts +4 -0
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/tools/types.js.map +1 -1
- package/dist/tracers/base.cjs +1 -1
- package/dist/tracers/base.cjs.map +1 -1
- package/dist/tracers/base.d.cts +1 -1
- package/dist/tracers/base.js +2 -2
- package/dist/tracers/base.js.map +1 -1
- package/dist/tracers/log_stream.d.cts +1 -1
- package/dist/tracers/log_stream.d.ts +1 -1
- package/dist/tracers/tracer_langchain.cjs +1 -0
- package/dist/tracers/tracer_langchain.cjs.map +1 -1
- package/dist/tracers/tracer_langchain.d.cts +2 -2
- package/dist/tracers/tracer_langchain.js +1 -0
- package/dist/tracers/tracer_langchain.js.map +1 -1
- package/dist/utils/env.cjs +1 -9
- package/dist/utils/env.cjs.map +1 -1
- package/dist/utils/env.d.cts +2 -6
- package/dist/utils/env.d.cts.map +1 -1
- package/dist/utils/env.d.ts +2 -6
- package/dist/utils/env.d.ts.map +1 -1
- package/dist/utils/env.js +2 -9
- package/dist/utils/env.js.map +1 -1
- package/dist/utils/testing/message_history.cjs +1 -1
- package/dist/utils/testing/message_history.cjs.map +1 -1
- package/dist/utils/testing/message_history.d.cts +1 -1
- package/dist/utils/testing/message_history.d.cts.map +1 -1
- package/dist/utils/testing/message_history.d.ts +1 -1
- package/dist/utils/testing/message_history.d.ts.map +1 -1
- package/dist/utils/testing/message_history.js +1 -1
- package/dist/utils/testing/message_history.js.map +1 -1
- package/dist/utils/types/index.cjs +6 -0
- package/dist/utils/types/index.d.cts +2 -2
- package/dist/utils/types/index.d.ts +2 -2
- package/dist/utils/types/index.js +5 -2
- package/dist/utils/types/zod.cjs +23 -0
- package/dist/utils/types/zod.cjs.map +1 -1
- package/dist/utils/types/zod.d.cts +11 -1
- package/dist/utils/types/zod.d.cts.map +1 -1
- package/dist/utils/types/zod.d.ts +11 -1
- package/dist/utils/types/zod.d.ts.map +1 -1
- package/dist/utils/types/zod.js +21 -1
- package/dist/utils/types/zod.js.map +1 -1
- package/package.json +121 -154
- package/dist/runnables/remote.cjs +0 -399
- package/dist/runnables/remote.cjs.map +0 -1
- package/dist/runnables/remote.d.cts +0 -73
- package/dist/runnables/remote.d.cts.map +0 -1
- package/dist/runnables/remote.d.ts +0 -73
- package/dist/runnables/remote.d.ts.map +0 -1
- package/dist/runnables/remote.js +0 -393
- package/dist/runnables/remote.js.map +0 -1
- package/dist/tracers/initialize.cjs +0 -46
- package/dist/tracers/initialize.cjs.map +0 -1
- package/dist/tracers/initialize.d.cts +0 -26
- package/dist/tracers/initialize.d.cts.map +0 -1
- package/dist/tracers/initialize.d.ts +0 -26
- package/dist/tracers/initialize.d.ts.map +0 -1
- package/dist/tracers/initialize.js +0 -39
- package/dist/tracers/initialize.js.map +0 -1
- package/dist/tracers/tracer_langchain_v1.cjs +0 -168
- package/dist/tracers/tracer_langchain_v1.cjs.map +0 -1
- package/dist/tracers/tracer_langchain_v1.d.cts +0 -64
- package/dist/tracers/tracer_langchain_v1.d.cts.map +0 -1
- package/dist/tracers/tracer_langchain_v1.d.ts +0 -64
- package/dist/tracers/tracer_langchain_v1.d.ts.map +0 -1
- package/dist/tracers/tracer_langchain_v1.js +0 -162
- package/dist/tracers/tracer_langchain_v1.js.map +0 -1
package/dist/messages/ai.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai.js","names":["fields: $InferMessageContent<TStructure, \"ai\"> | AIMessageFields<TStructure>","initParams: AIMessageFields<TStructure>","toolCalls","obj: unknown","x: BaseMessage","x: BaseMessageChunk","fields:\n | $InferMessageContent<TStructure, \"ai\">\n | AIMessageChunkFields<TStructure>","initParams: AIMessageChunkFields<TStructure>","toolCalls: ToolCall[]","invalidToolCalls: InvalidToolCall[]","parsedArgs: Record<string, unknown> | null","chunk: AIMessageChunk<TStructure>","combinedFields: AIMessageChunkFields"],"sources":["../../src/messages/ai.ts"],"sourcesContent":["import { parsePartialJson } from \"../utils/json.js\";\nimport {\n BaseMessage,\n BaseMessageChunk,\n mergeContent,\n _mergeDicts,\n _mergeLists,\n BaseMessageFields,\n} from \"./base.js\";\nimport { getTranslator } from \"./block_translators/index.js\";\nimport { ContentBlock } from \"./content/index.js\";\nimport {\n $InferMessageContent,\n $InferMessageProperty,\n MessageStructure,\n} from \"./message.js\";\nimport { mergeResponseMetadata, mergeUsageMetadata } from \"./metadata.js\";\nimport {\n InvalidToolCall,\n ToolCall,\n ToolCallChunk,\n defaultToolCallParser,\n} from \"./tool.js\";\nimport { Constructor } from \"./utils.js\";\n\nexport interface AIMessageFields<\n TStructure extends MessageStructure = MessageStructure\n> extends BaseMessageFields<TStructure, \"ai\"> {\n tool_calls?: ToolCall[];\n invalid_tool_calls?: InvalidToolCall[];\n usage_metadata?: $InferMessageProperty<TStructure, \"ai\", \"usage_metadata\">;\n}\n\nexport class AIMessage<TStructure extends MessageStructure = MessageStructure>\n extends BaseMessage<TStructure, \"ai\">\n implements AIMessageFields<TStructure>\n{\n readonly type = \"ai\" as const;\n\n tool_calls?: ToolCall[] = [];\n\n invalid_tool_calls?: InvalidToolCall[] = [];\n\n usage_metadata?: AIMessageFields<TStructure>[\"usage_metadata\"];\n\n get lc_aliases(): Record<string, string> {\n // exclude snake case conversion to pascal case\n return {\n ...super.lc_aliases,\n tool_calls: \"tool_calls\",\n invalid_tool_calls: \"invalid_tool_calls\",\n };\n }\n\n constructor(\n fields: $InferMessageContent<TStructure, \"ai\"> | AIMessageFields<TStructure>\n ) {\n let initParams: AIMessageFields<TStructure>;\n if (typeof fields === \"string\" || Array.isArray(fields)) {\n initParams = {\n content: fields,\n tool_calls: [],\n invalid_tool_calls: [],\n additional_kwargs: {},\n };\n } else {\n initParams = fields;\n const rawToolCalls = initParams.additional_kwargs?.tool_calls;\n const toolCalls = initParams.tool_calls;\n if (\n !(rawToolCalls == null) &&\n rawToolCalls.length > 0 &&\n (toolCalls === undefined || toolCalls.length === 0)\n ) {\n console.warn(\n [\n \"New LangChain packages are available that more efficiently handle\",\n \"tool calling.\\n\\nPlease upgrade your packages to versions that set\",\n \"message tool calls. e.g., `pnpm install @langchain/anthropic`,\",\n \"pnpm install @langchain/openai`, etc.\",\n ].join(\" \")\n );\n }\n try {\n if (!(rawToolCalls == null) && toolCalls === undefined) {\n const [toolCalls, invalidToolCalls] =\n defaultToolCallParser(rawToolCalls);\n initParams.tool_calls = toolCalls ?? [];\n initParams.invalid_tool_calls = invalidToolCalls ?? [];\n } else {\n initParams.tool_calls = initParams.tool_calls ?? [];\n initParams.invalid_tool_calls = initParams.invalid_tool_calls ?? [];\n }\n } catch {\n // Do nothing if parsing fails\n initParams.tool_calls = [];\n initParams.invalid_tool_calls = [];\n }\n if (initParams.contentBlocks !== undefined) {\n // Add constructor tool calls as content blocks\n initParams.contentBlocks.push(\n ...initParams.tool_calls.map((toolCall) => ({\n type: \"tool_call\" as const,\n id: toolCall.id,\n name: toolCall.name,\n args: toolCall.args,\n }))\n );\n // Add content block tool calls that aren't in the constructor tool calls\n const missingToolCalls = initParams.contentBlocks\n .filter<ContentBlock.Tools.ToolCall>(\n (block): block is ContentBlock.Tools.ToolCall =>\n block.type === \"tool_call\"\n )\n .filter(\n (block) =>\n !initParams.tool_calls?.some(\n (toolCall) =>\n toolCall.id === block.id && toolCall.name === block.name\n )\n );\n if (missingToolCalls.length > 0) {\n initParams.tool_calls = missingToolCalls.map((block) => ({\n type: \"tool_call\" as const,\n id: block.id!,\n name: block.name,\n args: block.args as Record<string, unknown>,\n }));\n }\n }\n }\n // Sadly, TypeScript only allows super() calls at root if the class has\n // properties with initializers, so we have to check types twice.\n super(initParams);\n if (typeof initParams !== \"string\") {\n this.tool_calls = initParams.tool_calls ?? this.tool_calls;\n this.invalid_tool_calls =\n initParams.invalid_tool_calls ?? this.invalid_tool_calls;\n }\n this.usage_metadata = initParams.usage_metadata;\n }\n\n static lc_name() {\n return \"AIMessage\";\n }\n\n get contentBlocks(): Array<ContentBlock.Standard> {\n if (\n this.response_metadata &&\n \"output_version\" in this.response_metadata &&\n this.response_metadata.output_version === \"v1\"\n ) {\n return this.content as Array<ContentBlock.Standard>;\n }\n\n if (\n this.response_metadata &&\n \"model_provider\" in this.response_metadata &&\n typeof this.response_metadata.model_provider === \"string\"\n ) {\n const translator = getTranslator(this.response_metadata.model_provider);\n if (translator) {\n return translator.translateContent(this);\n }\n }\n\n const blocks = super.contentBlocks;\n\n if (this.tool_calls) {\n const missingToolCalls = this.tool_calls.filter(\n (block) =>\n !blocks.some((b) => b.id === block.id && b.name === block.name)\n );\n blocks.push(\n ...missingToolCalls.map((block) => ({\n ...block,\n type: \"tool_call\" as const,\n id: block.id,\n name: block.name,\n args: block.args,\n }))\n );\n }\n\n return blocks;\n }\n\n override get _printableFields(): Record<string, unknown> {\n return {\n ...super._printableFields,\n tool_calls: this.tool_calls,\n invalid_tool_calls: this.invalid_tool_calls,\n usage_metadata: this.usage_metadata,\n };\n }\n\n static isInstance(obj: unknown): obj is AIMessage {\n return super.isInstance(obj) && obj.type === \"ai\";\n }\n}\n\n/**\n * @deprecated Use {@link AIMessage.isInstance} instead\n */\nexport function isAIMessage<TStructure extends MessageStructure>(\n x: BaseMessage\n): x is AIMessage<TStructure> {\n return x._getType() === \"ai\";\n}\n\n/**\n * @deprecated Use {@link AIMessageChunk.isInstance} instead\n */\nexport function isAIMessageChunk<TStructure extends MessageStructure>(\n x: BaseMessageChunk\n): x is AIMessageChunk<TStructure> {\n return x._getType() === \"ai\";\n}\n\nexport type AIMessageChunkFields<\n TStructure extends MessageStructure = MessageStructure\n> = AIMessageFields<TStructure> & {\n tool_call_chunks?: ToolCallChunk[];\n};\n\n/**\n * Represents a chunk of an AI message, which can be concatenated with\n * other AI message chunks.\n */\nexport class AIMessageChunk<\n TStructure extends MessageStructure = MessageStructure\n >\n extends BaseMessageChunk<TStructure, \"ai\">\n implements AIMessage<TStructure>, AIMessageChunkFields<TStructure>\n{\n readonly type = \"ai\" as const;\n\n tool_calls?: ToolCall[] = [];\n\n invalid_tool_calls?: InvalidToolCall[] = [];\n\n tool_call_chunks?: ToolCallChunk[] = [];\n\n usage_metadata?: AIMessageChunkFields<TStructure>[\"usage_metadata\"];\n\n constructor(\n fields:\n | $InferMessageContent<TStructure, \"ai\">\n | AIMessageChunkFields<TStructure>\n ) {\n let initParams: AIMessageChunkFields<TStructure>;\n if (typeof fields === \"string\" || Array.isArray(fields)) {\n initParams = {\n content: fields,\n tool_calls: [],\n invalid_tool_calls: [],\n tool_call_chunks: [],\n };\n } else if (fields.tool_call_chunks === undefined) {\n initParams = {\n ...fields,\n tool_calls: fields.tool_calls ?? [],\n invalid_tool_calls: [],\n tool_call_chunks: [],\n usage_metadata:\n fields.usage_metadata !== undefined\n ? fields.usage_metadata\n : undefined,\n };\n } else {\n const groupedToolCallChunks = fields.tool_call_chunks.reduce(\n (acc, chunk) => {\n const matchedChunkIndex = acc.findIndex(([match]) => {\n // If chunk has an id and index, match if both are present\n if (\n \"id\" in chunk &&\n chunk.id &&\n \"index\" in chunk &&\n chunk.index !== undefined\n ) {\n return chunk.id === match.id && chunk.index === match.index;\n }\n // If chunk has an id, we match on id\n if (\"id\" in chunk && chunk.id) {\n return chunk.id === match.id;\n }\n // If chunk has an index, we match on index\n if (\"index\" in chunk && chunk.index !== undefined) {\n return chunk.index === match.index;\n }\n return false;\n });\n if (matchedChunkIndex !== -1) {\n acc[matchedChunkIndex].push(chunk);\n } else {\n acc.push([chunk]);\n }\n return acc;\n },\n [] as ToolCallChunk[][]\n );\n\n const toolCalls: ToolCall[] = [];\n const invalidToolCalls: InvalidToolCall[] = [];\n for (const chunks of groupedToolCallChunks) {\n let parsedArgs: Record<string, unknown> | null = null;\n const name = chunks[0]?.name ?? \"\";\n const joinedArgs = chunks.map((c) => c.args || \"\").join(\"\");\n const argsStr = joinedArgs.length ? joinedArgs : \"{}\";\n const id = chunks[0]?.id;\n try {\n parsedArgs = parsePartialJson(argsStr);\n if (\n !id ||\n parsedArgs === null ||\n typeof parsedArgs !== \"object\" ||\n Array.isArray(parsedArgs)\n ) {\n throw new Error(\"Malformed tool call chunk args.\");\n }\n toolCalls.push({\n name,\n args: parsedArgs,\n id,\n type: \"tool_call\",\n });\n } catch {\n invalidToolCalls.push({\n name,\n args: argsStr,\n id,\n error: \"Malformed args.\",\n type: \"invalid_tool_call\",\n });\n }\n }\n initParams = {\n ...fields,\n tool_calls: toolCalls,\n invalid_tool_calls: invalidToolCalls,\n usage_metadata:\n fields.usage_metadata !== undefined\n ? fields.usage_metadata\n : undefined,\n };\n }\n // Sadly, TypeScript only allows super() calls at root if the class has\n // properties with initializers, so we have to check types twice.\n super(initParams);\n this.tool_call_chunks =\n initParams.tool_call_chunks ?? this.tool_call_chunks;\n this.tool_calls = initParams.tool_calls ?? this.tool_calls;\n this.invalid_tool_calls =\n initParams.invalid_tool_calls ?? this.invalid_tool_calls;\n this.usage_metadata = initParams.usage_metadata;\n }\n\n get lc_aliases(): Record<string, string> {\n // exclude snake case conversion to pascal case\n return {\n ...super.lc_aliases,\n tool_calls: \"tool_calls\",\n invalid_tool_calls: \"invalid_tool_calls\",\n tool_call_chunks: \"tool_call_chunks\",\n };\n }\n\n static lc_name() {\n return \"AIMessageChunk\";\n }\n\n get contentBlocks(): Array<ContentBlock.Standard> {\n if (\n this.response_metadata &&\n \"output_version\" in this.response_metadata &&\n this.response_metadata.output_version === \"v1\"\n ) {\n return this.content as Array<ContentBlock.Standard>;\n }\n\n if (\n this.response_metadata &&\n \"model_provider\" in this.response_metadata &&\n typeof this.response_metadata.model_provider === \"string\"\n ) {\n const translator = getTranslator(this.response_metadata.model_provider);\n if (translator) {\n return translator.translateContent(this);\n }\n }\n\n const blocks = super.contentBlocks;\n\n if (this.tool_calls) {\n if (typeof this.content !== \"string\") {\n const contentToolCalls = this.content\n .filter((block) => block.type === \"tool_call\")\n .map((block) => block.id);\n for (const toolCall of this.tool_calls) {\n if (toolCall.id && !contentToolCalls.includes(toolCall.id)) {\n blocks.push({\n ...toolCall,\n type: \"tool_call\",\n id: toolCall.id,\n name: toolCall.name,\n args: toolCall.args,\n });\n }\n }\n }\n }\n\n return blocks;\n }\n\n override get _printableFields(): Record<string, unknown> {\n return {\n ...super._printableFields,\n tool_calls: this.tool_calls,\n tool_call_chunks: this.tool_call_chunks,\n invalid_tool_calls: this.invalid_tool_calls,\n usage_metadata: this.usage_metadata,\n };\n }\n\n concat(chunk: AIMessageChunk<TStructure>) {\n const combinedFields: AIMessageChunkFields = {\n content: mergeContent(this.content, chunk.content),\n additional_kwargs: _mergeDicts(\n this.additional_kwargs,\n chunk.additional_kwargs\n ),\n response_metadata: mergeResponseMetadata(\n this.response_metadata,\n chunk.response_metadata\n ),\n tool_call_chunks: [],\n id: this.id ?? chunk.id,\n };\n if (\n this.tool_call_chunks !== undefined ||\n chunk.tool_call_chunks !== undefined\n ) {\n const rawToolCalls = _mergeLists(\n this.tool_call_chunks as ContentBlock.Tools.ToolCallChunk[],\n chunk.tool_call_chunks as ContentBlock.Tools.ToolCallChunk[]\n );\n if (rawToolCalls !== undefined && rawToolCalls.length > 0) {\n combinedFields.tool_call_chunks = rawToolCalls;\n }\n }\n if (\n this.usage_metadata !== undefined ||\n chunk.usage_metadata !== undefined\n ) {\n combinedFields.usage_metadata = mergeUsageMetadata(\n this.usage_metadata,\n chunk.usage_metadata\n );\n }\n const Cls = this.constructor as Constructor<this>;\n return new Cls(combinedFields);\n }\n\n static isInstance(obj: unknown): obj is AIMessageChunk {\n return super.isInstance(obj) && obj.type === \"ai\";\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ai.js","names":["fields: $InferMessageContent<TStructure, \"ai\"> | AIMessageFields<TStructure>","initParams: AIMessageFields<TStructure>","toolCalls","obj: unknown","x: BaseMessage","x: BaseMessageChunk","fields:\n | $InferMessageContent<TStructure, \"ai\">\n | AIMessageChunkFields<TStructure>","initParams: AIMessageChunkFields<TStructure>","toolCalls: ToolCall[]","invalidToolCalls: InvalidToolCall[]","parsedArgs: Record<string, unknown> | null","chunk: AIMessageChunk<TStructure>","combinedFields: AIMessageChunkFields"],"sources":["../../src/messages/ai.ts"],"sourcesContent":["import { parsePartialJson } from \"../utils/json.js\";\nimport {\n BaseMessage,\n BaseMessageChunk,\n mergeContent,\n _mergeDicts,\n _mergeLists,\n BaseMessageFields,\n} from \"./base.js\";\nimport { getTranslator } from \"./block_translators/index.js\";\nimport { ContentBlock } from \"./content/index.js\";\nimport {\n $InferMessageContent,\n $InferMessageProperty,\n MessageStructure,\n} from \"./message.js\";\nimport { mergeResponseMetadata, mergeUsageMetadata } from \"./metadata.js\";\nimport {\n InvalidToolCall,\n ToolCall,\n ToolCallChunk,\n defaultToolCallParser,\n} from \"./tool.js\";\nimport { Constructor } from \"./utils.js\";\n\nexport interface AIMessageFields<\n TStructure extends MessageStructure = MessageStructure\n> extends BaseMessageFields<TStructure, \"ai\"> {\n tool_calls?: ToolCall[];\n invalid_tool_calls?: InvalidToolCall[];\n usage_metadata?: $InferMessageProperty<TStructure, \"ai\", \"usage_metadata\">;\n}\n\nexport class AIMessage<TStructure extends MessageStructure = MessageStructure>\n extends BaseMessage<TStructure, \"ai\">\n implements AIMessageFields<TStructure>\n{\n readonly type = \"ai\" as const;\n\n tool_calls?: ToolCall[] = [];\n\n invalid_tool_calls?: InvalidToolCall[] = [];\n\n usage_metadata?: AIMessageFields<TStructure>[\"usage_metadata\"];\n\n get lc_aliases(): Record<string, string> {\n // exclude snake case conversion to pascal case\n return {\n ...super.lc_aliases,\n tool_calls: \"tool_calls\",\n invalid_tool_calls: \"invalid_tool_calls\",\n };\n }\n\n constructor(\n fields: $InferMessageContent<TStructure, \"ai\"> | AIMessageFields<TStructure>\n ) {\n let initParams: AIMessageFields<TStructure>;\n if (typeof fields === \"string\" || Array.isArray(fields)) {\n initParams = {\n content: fields,\n tool_calls: [],\n invalid_tool_calls: [],\n additional_kwargs: {},\n };\n } else {\n initParams = fields;\n const rawToolCalls = initParams.additional_kwargs?.tool_calls;\n const toolCalls = initParams.tool_calls;\n if (\n !(rawToolCalls == null) &&\n rawToolCalls.length > 0 &&\n (toolCalls === undefined || toolCalls.length === 0)\n ) {\n console.warn(\n [\n \"New LangChain packages are available that more efficiently handle\",\n \"tool calling.\\n\\nPlease upgrade your packages to versions that set\",\n \"message tool calls. e.g., `pnpm install @langchain/anthropic`,\",\n \"pnpm install @langchain/openai`, etc.\",\n ].join(\" \")\n );\n }\n try {\n if (!(rawToolCalls == null) && toolCalls === undefined) {\n const [toolCalls, invalidToolCalls] =\n defaultToolCallParser(rawToolCalls);\n initParams.tool_calls = toolCalls ?? [];\n initParams.invalid_tool_calls = invalidToolCalls ?? [];\n } else {\n initParams.tool_calls = initParams.tool_calls ?? [];\n initParams.invalid_tool_calls = initParams.invalid_tool_calls ?? [];\n }\n } catch {\n // Do nothing if parsing fails\n initParams.tool_calls = [];\n initParams.invalid_tool_calls = [];\n }\n\n // Convert content to content blocks if output version is v1\n if (\n initParams.response_metadata !== undefined &&\n \"output_version\" in initParams.response_metadata &&\n initParams.response_metadata.output_version === \"v1\"\n ) {\n initParams.contentBlocks =\n initParams.content as Array<ContentBlock.Standard>;\n initParams.content = undefined;\n }\n\n if (initParams.contentBlocks !== undefined) {\n // Add constructor tool calls as content blocks\n initParams.contentBlocks.push(\n ...initParams.tool_calls.map((toolCall) => ({\n type: \"tool_call\" as const,\n id: toolCall.id,\n name: toolCall.name,\n args: toolCall.args,\n }))\n );\n // Add content block tool calls that aren't in the constructor tool calls\n const missingToolCalls = initParams.contentBlocks\n .filter<ContentBlock.Tools.ToolCall>(\n (block): block is ContentBlock.Tools.ToolCall =>\n block.type === \"tool_call\"\n )\n .filter(\n (block) =>\n !initParams.tool_calls?.some(\n (toolCall) =>\n toolCall.id === block.id && toolCall.name === block.name\n )\n );\n if (missingToolCalls.length > 0) {\n initParams.tool_calls = missingToolCalls.map((block) => ({\n type: \"tool_call\" as const,\n id: block.id!,\n name: block.name,\n args: block.args as Record<string, unknown>,\n }));\n }\n }\n }\n // Sadly, TypeScript only allows super() calls at root if the class has\n // properties with initializers, so we have to check types twice.\n super(initParams);\n if (typeof initParams !== \"string\") {\n this.tool_calls = initParams.tool_calls ?? this.tool_calls;\n this.invalid_tool_calls =\n initParams.invalid_tool_calls ?? this.invalid_tool_calls;\n }\n this.usage_metadata = initParams.usage_metadata;\n }\n\n static lc_name() {\n return \"AIMessage\";\n }\n\n get contentBlocks(): Array<ContentBlock.Standard> {\n if (\n this.response_metadata &&\n \"output_version\" in this.response_metadata &&\n this.response_metadata.output_version === \"v1\"\n ) {\n return this.content as Array<ContentBlock.Standard>;\n }\n\n if (\n this.response_metadata &&\n \"model_provider\" in this.response_metadata &&\n typeof this.response_metadata.model_provider === \"string\"\n ) {\n const translator = getTranslator(this.response_metadata.model_provider);\n if (translator) {\n return translator.translateContent(this);\n }\n }\n\n const blocks = super.contentBlocks;\n\n if (this.tool_calls) {\n const missingToolCalls = this.tool_calls.filter(\n (block) =>\n !blocks.some((b) => b.id === block.id && b.name === block.name)\n );\n blocks.push(\n ...missingToolCalls.map((block) => ({\n ...block,\n type: \"tool_call\" as const,\n id: block.id,\n name: block.name,\n args: block.args,\n }))\n );\n }\n\n return blocks;\n }\n\n override get _printableFields(): Record<string, unknown> {\n return {\n ...super._printableFields,\n tool_calls: this.tool_calls,\n invalid_tool_calls: this.invalid_tool_calls,\n usage_metadata: this.usage_metadata,\n };\n }\n\n static isInstance(obj: unknown): obj is AIMessage {\n return super.isInstance(obj) && obj.type === \"ai\";\n }\n}\n\n/**\n * @deprecated Use {@link AIMessage.isInstance} instead\n */\nexport function isAIMessage<TStructure extends MessageStructure>(\n x: BaseMessage\n): x is AIMessage<TStructure> {\n return x._getType() === \"ai\";\n}\n\n/**\n * @deprecated Use {@link AIMessageChunk.isInstance} instead\n */\nexport function isAIMessageChunk<TStructure extends MessageStructure>(\n x: BaseMessageChunk\n): x is AIMessageChunk<TStructure> {\n return x._getType() === \"ai\";\n}\n\nexport type AIMessageChunkFields<\n TStructure extends MessageStructure = MessageStructure\n> = AIMessageFields<TStructure> & {\n tool_call_chunks?: ToolCallChunk[];\n};\n\n/**\n * Represents a chunk of an AI message, which can be concatenated with\n * other AI message chunks.\n */\nexport class AIMessageChunk<\n TStructure extends MessageStructure = MessageStructure\n >\n extends BaseMessageChunk<TStructure, \"ai\">\n implements AIMessage<TStructure>, AIMessageChunkFields<TStructure>\n{\n readonly type = \"ai\" as const;\n\n tool_calls?: ToolCall[] = [];\n\n invalid_tool_calls?: InvalidToolCall[] = [];\n\n tool_call_chunks?: ToolCallChunk[] = [];\n\n usage_metadata?: AIMessageChunkFields<TStructure>[\"usage_metadata\"];\n\n constructor(\n fields:\n | $InferMessageContent<TStructure, \"ai\">\n | AIMessageChunkFields<TStructure>\n ) {\n let initParams: AIMessageChunkFields<TStructure>;\n if (typeof fields === \"string\" || Array.isArray(fields)) {\n initParams = {\n content: fields,\n tool_calls: [],\n invalid_tool_calls: [],\n tool_call_chunks: [],\n };\n } else if (fields.tool_call_chunks === undefined) {\n initParams = {\n ...fields,\n tool_calls: fields.tool_calls ?? [],\n invalid_tool_calls: [],\n tool_call_chunks: [],\n usage_metadata:\n fields.usage_metadata !== undefined\n ? fields.usage_metadata\n : undefined,\n };\n } else {\n const groupedToolCallChunks = fields.tool_call_chunks.reduce(\n (acc, chunk) => {\n const matchedChunkIndex = acc.findIndex(([match]) => {\n // If chunk has an id and index, match if both are present\n if (\n \"id\" in chunk &&\n chunk.id &&\n \"index\" in chunk &&\n chunk.index !== undefined\n ) {\n return chunk.id === match.id && chunk.index === match.index;\n }\n // If chunk has an id, we match on id\n if (\"id\" in chunk && chunk.id) {\n return chunk.id === match.id;\n }\n // If chunk has an index, we match on index\n if (\"index\" in chunk && chunk.index !== undefined) {\n return chunk.index === match.index;\n }\n return false;\n });\n if (matchedChunkIndex !== -1) {\n acc[matchedChunkIndex].push(chunk);\n } else {\n acc.push([chunk]);\n }\n return acc;\n },\n [] as ToolCallChunk[][]\n );\n\n const toolCalls: ToolCall[] = [];\n const invalidToolCalls: InvalidToolCall[] = [];\n for (const chunks of groupedToolCallChunks) {\n let parsedArgs: Record<string, unknown> | null = null;\n const name = chunks[0]?.name ?? \"\";\n const joinedArgs = chunks.map((c) => c.args || \"\").join(\"\");\n const argsStr = joinedArgs.length ? joinedArgs : \"{}\";\n const id = chunks[0]?.id;\n try {\n parsedArgs = parsePartialJson(argsStr);\n if (\n !id ||\n parsedArgs === null ||\n typeof parsedArgs !== \"object\" ||\n Array.isArray(parsedArgs)\n ) {\n throw new Error(\"Malformed tool call chunk args.\");\n }\n toolCalls.push({\n name,\n args: parsedArgs,\n id,\n type: \"tool_call\",\n });\n } catch {\n invalidToolCalls.push({\n name,\n args: argsStr,\n id,\n error: \"Malformed args.\",\n type: \"invalid_tool_call\",\n });\n }\n }\n initParams = {\n ...fields,\n tool_calls: toolCalls,\n invalid_tool_calls: invalidToolCalls,\n usage_metadata:\n fields.usage_metadata !== undefined\n ? fields.usage_metadata\n : undefined,\n };\n }\n // Sadly, TypeScript only allows super() calls at root if the class has\n // properties with initializers, so we have to check types twice.\n super(initParams);\n this.tool_call_chunks =\n initParams.tool_call_chunks ?? this.tool_call_chunks;\n this.tool_calls = initParams.tool_calls ?? this.tool_calls;\n this.invalid_tool_calls =\n initParams.invalid_tool_calls ?? this.invalid_tool_calls;\n this.usage_metadata = initParams.usage_metadata;\n }\n\n get lc_aliases(): Record<string, string> {\n // exclude snake case conversion to pascal case\n return {\n ...super.lc_aliases,\n tool_calls: \"tool_calls\",\n invalid_tool_calls: \"invalid_tool_calls\",\n tool_call_chunks: \"tool_call_chunks\",\n };\n }\n\n static lc_name() {\n return \"AIMessageChunk\";\n }\n\n get contentBlocks(): Array<ContentBlock.Standard> {\n if (\n this.response_metadata &&\n \"output_version\" in this.response_metadata &&\n this.response_metadata.output_version === \"v1\"\n ) {\n return this.content as Array<ContentBlock.Standard>;\n }\n\n if (\n this.response_metadata &&\n \"model_provider\" in this.response_metadata &&\n typeof this.response_metadata.model_provider === \"string\"\n ) {\n const translator = getTranslator(this.response_metadata.model_provider);\n if (translator) {\n return translator.translateContent(this);\n }\n }\n\n const blocks = super.contentBlocks;\n\n if (this.tool_calls) {\n if (typeof this.content !== \"string\") {\n const contentToolCalls = this.content\n .filter((block) => block.type === \"tool_call\")\n .map((block) => block.id);\n for (const toolCall of this.tool_calls) {\n if (toolCall.id && !contentToolCalls.includes(toolCall.id)) {\n blocks.push({\n ...toolCall,\n type: \"tool_call\",\n id: toolCall.id,\n name: toolCall.name,\n args: toolCall.args,\n });\n }\n }\n }\n }\n\n return blocks;\n }\n\n override get _printableFields(): Record<string, unknown> {\n return {\n ...super._printableFields,\n tool_calls: this.tool_calls,\n tool_call_chunks: this.tool_call_chunks,\n invalid_tool_calls: this.invalid_tool_calls,\n usage_metadata: this.usage_metadata,\n };\n }\n\n concat(chunk: AIMessageChunk<TStructure>) {\n const combinedFields: AIMessageChunkFields = {\n content: mergeContent(this.content, chunk.content),\n additional_kwargs: _mergeDicts(\n this.additional_kwargs,\n chunk.additional_kwargs\n ),\n response_metadata: mergeResponseMetadata(\n this.response_metadata,\n chunk.response_metadata\n ),\n tool_call_chunks: [],\n id: this.id ?? chunk.id,\n };\n if (\n this.tool_call_chunks !== undefined ||\n chunk.tool_call_chunks !== undefined\n ) {\n const rawToolCalls = _mergeLists(\n this.tool_call_chunks as ContentBlock.Tools.ToolCallChunk[],\n chunk.tool_call_chunks as ContentBlock.Tools.ToolCallChunk[]\n );\n if (rawToolCalls !== undefined && rawToolCalls.length > 0) {\n combinedFields.tool_call_chunks = rawToolCalls;\n }\n }\n if (\n this.usage_metadata !== undefined ||\n chunk.usage_metadata !== undefined\n ) {\n combinedFields.usage_metadata = mergeUsageMetadata(\n this.usage_metadata,\n chunk.usage_metadata\n );\n }\n const Cls = this.constructor as Constructor<this>;\n return new Cls(combinedFields);\n }\n\n static isInstance(obj: unknown): obj is AIMessageChunk {\n return super.isInstance(obj) && obj.type === \"ai\";\n }\n}\n"],"mappings":";;;;;;;AAiCA,IAAa,YAAb,cACU,YAEV;CACE,AAAS,OAAO;CAEhB,aAA0B,CAAE;CAE5B,qBAAyC,CAAE;CAE3C;CAEA,IAAI,aAAqC;AAEvC,SAAO;GACL,GAAG,MAAM;GACT,YAAY;GACZ,oBAAoB;EACrB;CACF;CAED,YACEA,QACA;EACA,IAAIC;AACJ,MAAI,OAAO,WAAW,YAAY,MAAM,QAAQ,OAAO,EACrD,aAAa;GACX,SAAS;GACT,YAAY,CAAE;GACd,oBAAoB,CAAE;GACtB,mBAAmB,CAAE;EACtB;OACI;GACL,aAAa;GACb,MAAM,eAAe,WAAW,mBAAmB;GACnD,MAAM,YAAY,WAAW;AAC7B,OACE,EAAE,gBAAgB,SAClB,aAAa,SAAS,MACrB,cAAc,UAAa,UAAU,WAAW,IAEjD,QAAQ,KACN;IACE;IACA;IACA;IACA;GACD,EAAC,KAAK,IAAI,CACZ;AAEH,OAAI;AACF,QAAI,EAAE,gBAAgB,SAAS,cAAc,QAAW;KACtD,MAAM,CAACC,aAAW,iBAAiB,GACjC,sBAAsB,aAAa;KACrC,WAAW,aAAaA,eAAa,CAAE;KACvC,WAAW,qBAAqB,oBAAoB,CAAE;IACvD,OAAM;KACL,WAAW,aAAa,WAAW,cAAc,CAAE;KACnD,WAAW,qBAAqB,WAAW,sBAAsB,CAAE;IACpE;GACF,QAAO;IAEN,WAAW,aAAa,CAAE;IAC1B,WAAW,qBAAqB,CAAE;GACnC;AAGD,OACE,WAAW,sBAAsB,UACjC,oBAAoB,WAAW,qBAC/B,WAAW,kBAAkB,mBAAmB,MAChD;IACA,WAAW,gBACT,WAAW;IACb,WAAW,UAAU;GACtB;AAED,OAAI,WAAW,kBAAkB,QAAW;IAE1C,WAAW,cAAc,KACvB,GAAG,WAAW,WAAW,IAAI,CAAC,cAAc;KAC1C,MAAM;KACN,IAAI,SAAS;KACb,MAAM,SAAS;KACf,MAAM,SAAS;IAChB,GAAE,CACJ;IAED,MAAM,mBAAmB,WAAW,cACjC,OACC,CAAC,UACC,MAAM,SAAS,YAClB,CACA,OACC,CAAC,UACC,CAAC,WAAW,YAAY,KACtB,CAAC,aACC,SAAS,OAAO,MAAM,MAAM,SAAS,SAAS,MAAM,KACvD,CACJ;AACH,QAAI,iBAAiB,SAAS,GAC5B,WAAW,aAAa,iBAAiB,IAAI,CAAC,WAAW;KACvD,MAAM;KACN,IAAI,MAAM;KACV,MAAM,MAAM;KACZ,MAAM,MAAM;IACb,GAAE;GAEN;EACF;EAGD,MAAM,WAAW;AACjB,MAAI,OAAO,eAAe,UAAU;GAClC,KAAK,aAAa,WAAW,cAAc,KAAK;GAChD,KAAK,qBACH,WAAW,sBAAsB,KAAK;EACzC;EACD,KAAK,iBAAiB,WAAW;CAClC;CAED,OAAO,UAAU;AACf,SAAO;CACR;CAED,IAAI,gBAA8C;AAChD,MACE,KAAK,qBACL,oBAAoB,KAAK,qBACzB,KAAK,kBAAkB,mBAAmB,KAE1C,QAAO,KAAK;AAGd,MACE,KAAK,qBACL,oBAAoB,KAAK,qBACzB,OAAO,KAAK,kBAAkB,mBAAmB,UACjD;GACA,MAAM,aAAa,cAAc,KAAK,kBAAkB,eAAe;AACvE,OAAI,WACF,QAAO,WAAW,iBAAiB,KAAK;EAE3C;EAED,MAAM,SAAS,MAAM;AAErB,MAAI,KAAK,YAAY;GACnB,MAAM,mBAAmB,KAAK,WAAW,OACvC,CAAC,UACC,CAAC,OAAO,KAAK,CAAC,MAAM,EAAE,OAAO,MAAM,MAAM,EAAE,SAAS,MAAM,KAAK,CAClE;GACD,OAAO,KACL,GAAG,iBAAiB,IAAI,CAAC,WAAW;IAClC,GAAG;IACH,MAAM;IACN,IAAI,MAAM;IACV,MAAM,MAAM;IACZ,MAAM,MAAM;GACb,GAAE,CACJ;EACF;AAED,SAAO;CACR;CAED,IAAa,mBAA4C;AACvD,SAAO;GACL,GAAG,MAAM;GACT,YAAY,KAAK;GACjB,oBAAoB,KAAK;GACzB,gBAAgB,KAAK;EACtB;CACF;CAED,OAAO,WAAWC,KAAgC;AAChD,SAAO,MAAM,WAAW,IAAI,IAAI,IAAI,SAAS;CAC9C;AACF;;;;AAKD,SAAgB,YACdC,GAC4B;AAC5B,QAAO,EAAE,UAAU,KAAK;AACzB;;;;AAKD,SAAgB,iBACdC,GACiC;AACjC,QAAO,EAAE,UAAU,KAAK;AACzB;;;;;AAYD,IAAa,iBAAb,cAGU,iBAEV;CACE,AAAS,OAAO;CAEhB,aAA0B,CAAE;CAE5B,qBAAyC,CAAE;CAE3C,mBAAqC,CAAE;CAEvC;CAEA,YACEC,QAGA;EACA,IAAIC;AACJ,MAAI,OAAO,WAAW,YAAY,MAAM,QAAQ,OAAO,EACrD,aAAa;GACX,SAAS;GACT,YAAY,CAAE;GACd,oBAAoB,CAAE;GACtB,kBAAkB,CAAE;EACrB;WACQ,OAAO,qBAAqB,QACrC,aAAa;GACX,GAAG;GACH,YAAY,OAAO,cAAc,CAAE;GACnC,oBAAoB,CAAE;GACtB,kBAAkB,CAAE;GACpB,gBACE,OAAO,mBAAmB,SACtB,OAAO,iBACP;EACP;OACI;GACL,MAAM,wBAAwB,OAAO,iBAAiB,OACpD,CAAC,KAAK,UAAU;IACd,MAAM,oBAAoB,IAAI,UAAU,CAAC,CAAC,MAAM,KAAK;AAEnD,SACE,QAAQ,SACR,MAAM,MACN,WAAW,SACX,MAAM,UAAU,OAEhB,QAAO,MAAM,OAAO,MAAM,MAAM,MAAM,UAAU,MAAM;AAGxD,SAAI,QAAQ,SAAS,MAAM,GACzB,QAAO,MAAM,OAAO,MAAM;AAG5B,SAAI,WAAW,SAAS,MAAM,UAAU,OACtC,QAAO,MAAM,UAAU,MAAM;AAE/B,YAAO;IACR,EAAC;AACF,QAAI,sBAAsB,IACxB,IAAI,mBAAmB,KAAK,MAAM;SAElC,IAAI,KAAK,CAAC,KAAM,EAAC;AAEnB,WAAO;GACR,GACD,CAAE,EACH;GAED,MAAMC,YAAwB,CAAE;GAChC,MAAMC,mBAAsC,CAAE;AAC9C,QAAK,MAAM,UAAU,uBAAuB;IAC1C,IAAIC,aAA6C;IACjD,MAAM,OAAO,OAAO,IAAI,QAAQ;IAChC,MAAM,aAAa,OAAO,IAAI,CAAC,MAAM,EAAE,QAAQ,GAAG,CAAC,KAAK,GAAG;IAC3D,MAAM,UAAU,WAAW,SAAS,aAAa;IACjD,MAAM,KAAK,OAAO,IAAI;AACtB,QAAI;KACF,aAAa,iBAAiB,QAAQ;AACtC,SACE,CAAC,MACD,eAAe,QACf,OAAO,eAAe,YACtB,MAAM,QAAQ,WAAW,CAEzB,OAAM,IAAI,MAAM;KAElB,UAAU,KAAK;MACb;MACA,MAAM;MACN;MACA,MAAM;KACP,EAAC;IACH,QAAO;KACN,iBAAiB,KAAK;MACpB;MACA,MAAM;MACN;MACA,OAAO;MACP,MAAM;KACP,EAAC;IACH;GACF;GACD,aAAa;IACX,GAAG;IACH,YAAY;IACZ,oBAAoB;IACpB,gBACE,OAAO,mBAAmB,SACtB,OAAO,iBACP;GACP;EACF;EAGD,MAAM,WAAW;EACjB,KAAK,mBACH,WAAW,oBAAoB,KAAK;EACtC,KAAK,aAAa,WAAW,cAAc,KAAK;EAChD,KAAK,qBACH,WAAW,sBAAsB,KAAK;EACxC,KAAK,iBAAiB,WAAW;CAClC;CAED,IAAI,aAAqC;AAEvC,SAAO;GACL,GAAG,MAAM;GACT,YAAY;GACZ,oBAAoB;GACpB,kBAAkB;EACnB;CACF;CAED,OAAO,UAAU;AACf,SAAO;CACR;CAED,IAAI,gBAA8C;AAChD,MACE,KAAK,qBACL,oBAAoB,KAAK,qBACzB,KAAK,kBAAkB,mBAAmB,KAE1C,QAAO,KAAK;AAGd,MACE,KAAK,qBACL,oBAAoB,KAAK,qBACzB,OAAO,KAAK,kBAAkB,mBAAmB,UACjD;GACA,MAAM,aAAa,cAAc,KAAK,kBAAkB,eAAe;AACvE,OAAI,WACF,QAAO,WAAW,iBAAiB,KAAK;EAE3C;EAED,MAAM,SAAS,MAAM;AAErB,MAAI,KAAK,YACP;OAAI,OAAO,KAAK,YAAY,UAAU;IACpC,MAAM,mBAAmB,KAAK,QAC3B,OAAO,CAAC,UAAU,MAAM,SAAS,YAAY,CAC7C,IAAI,CAAC,UAAU,MAAM,GAAG;AAC3B,SAAK,MAAM,YAAY,KAAK,WAC1B,KAAI,SAAS,MAAM,CAAC,iBAAiB,SAAS,SAAS,GAAG,EACxD,OAAO,KAAK;KACV,GAAG;KACH,MAAM;KACN,IAAI,SAAS;KACb,MAAM,SAAS;KACf,MAAM,SAAS;IAChB,EAAC;GAGP;;AAGH,SAAO;CACR;CAED,IAAa,mBAA4C;AACvD,SAAO;GACL,GAAG,MAAM;GACT,YAAY,KAAK;GACjB,kBAAkB,KAAK;GACvB,oBAAoB,KAAK;GACzB,gBAAgB,KAAK;EACtB;CACF;CAED,OAAOC,OAAmC;EACxC,MAAMC,iBAAuC;GAC3C,SAAS,aAAa,KAAK,SAAS,MAAM,QAAQ;GAClD,mBAAmB,YACjB,KAAK,mBACL,MAAM,kBACP;GACD,mBAAmB,sBACjB,KAAK,mBACL,MAAM,kBACP;GACD,kBAAkB,CAAE;GACpB,IAAI,KAAK,MAAM,MAAM;EACtB;AACD,MACE,KAAK,qBAAqB,UAC1B,MAAM,qBAAqB,QAC3B;GACA,MAAM,eAAe,YACnB,KAAK,kBACL,MAAM,iBACP;AACD,OAAI,iBAAiB,UAAa,aAAa,SAAS,GACtD,eAAe,mBAAmB;EAErC;AACD,MACE,KAAK,mBAAmB,UACxB,MAAM,mBAAmB,QAEzB,eAAe,iBAAiB,mBAC9B,KAAK,gBACL,MAAM,eACP;EAEH,MAAM,MAAM,KAAK;AACjB,SAAO,IAAI,IAAI;CAChB;CAED,OAAO,WAAWT,KAAqC;AACrD,SAAO,MAAM,WAAW,IAAI,IAAI,IAAI,SAAS;CAC9C;AACF"}
|
|
@@ -92,39 +92,40 @@ function convertAnthropicAnnotation(citation) {
|
|
|
92
92
|
* ```
|
|
93
93
|
*/
|
|
94
94
|
function convertToV1FromAnthropicContentBlock(block) {
|
|
95
|
-
if (require_utils._isContentBlock(block, "document") && require_utils._isObject(block.source) && "type" in block.source)
|
|
96
|
-
type
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
type
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
type
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
type
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
else if (require_utils._isContentBlock(block, "image") && require_utils._isObject(block.source) && "type" in block.source)
|
|
115
|
-
type
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
type
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
type
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
95
|
+
if (require_utils._isContentBlock(block, "document") && require_utils._isObject(block.source) && "type" in block.source) {
|
|
96
|
+
if (block.source.type === "base64" && require_utils._isString(block.source.media_type) && require_utils._isString(block.source.data)) return {
|
|
97
|
+
type: "file",
|
|
98
|
+
mimeType: block.source.media_type,
|
|
99
|
+
data: block.source.data
|
|
100
|
+
};
|
|
101
|
+
else if (block.source.type === "url" && require_utils._isString(block.source.url)) return {
|
|
102
|
+
type: "file",
|
|
103
|
+
url: block.source.url
|
|
104
|
+
};
|
|
105
|
+
else if (block.source.type === "file" && require_utils._isString(block.source.file_id)) return {
|
|
106
|
+
type: "file",
|
|
107
|
+
fileId: block.source.file_id
|
|
108
|
+
};
|
|
109
|
+
else if (block.source.type === "text" && require_utils._isString(block.source.data)) return {
|
|
110
|
+
type: "file",
|
|
111
|
+
mimeType: String(block.source.media_type ?? "text/plain"),
|
|
112
|
+
data: block.source.data
|
|
113
|
+
};
|
|
114
|
+
} else if (require_utils._isContentBlock(block, "image") && require_utils._isObject(block.source) && "type" in block.source) {
|
|
115
|
+
if (block.source.type === "base64" && require_utils._isString(block.source.media_type) && require_utils._isString(block.source.data)) return {
|
|
116
|
+
type: "image",
|
|
117
|
+
mimeType: block.source.media_type,
|
|
118
|
+
data: block.source.data
|
|
119
|
+
};
|
|
120
|
+
else if (block.source.type === "url" && require_utils._isString(block.source.url)) return {
|
|
121
|
+
type: "image",
|
|
122
|
+
url: block.source.url
|
|
123
|
+
};
|
|
124
|
+
else if (block.source.type === "file" && require_utils._isString(block.source.file_id)) return {
|
|
125
|
+
type: "image",
|
|
126
|
+
fileId: block.source.file_id
|
|
127
|
+
};
|
|
128
|
+
}
|
|
128
129
|
return void 0;
|
|
129
130
|
}
|
|
130
131
|
/**
|
|
@@ -180,133 +181,179 @@ function convertToV1FromAnthropicMessage(message) {
|
|
|
180
181
|
type: "text",
|
|
181
182
|
text: message.content
|
|
182
183
|
}] : message.content;
|
|
183
|
-
for (const block of content)
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
const
|
|
188
|
-
|
|
184
|
+
for (const block of content) {
|
|
185
|
+
if (require_utils._isContentBlock(block, "text") && require_utils._isString(block.text)) {
|
|
186
|
+
const { text, citations,...rest } = block;
|
|
187
|
+
if (require_utils._isArray(citations) && citations.length) {
|
|
188
|
+
const _citations = citations.reduce((acc, item) => {
|
|
189
|
+
const citation = convertAnthropicAnnotation(item);
|
|
190
|
+
if (citation) return [...acc, citation];
|
|
191
|
+
return acc;
|
|
192
|
+
}, []);
|
|
193
|
+
yield {
|
|
194
|
+
...rest,
|
|
195
|
+
type: "text",
|
|
196
|
+
text,
|
|
197
|
+
annotations: _citations
|
|
198
|
+
};
|
|
199
|
+
continue;
|
|
200
|
+
} else {
|
|
201
|
+
yield {
|
|
202
|
+
...rest,
|
|
203
|
+
type: "text",
|
|
204
|
+
text
|
|
205
|
+
};
|
|
206
|
+
continue;
|
|
207
|
+
}
|
|
208
|
+
} else if (require_utils._isContentBlock(block, "thinking") && require_utils._isString(block.thinking)) {
|
|
209
|
+
const { thinking, signature,...rest } = block;
|
|
210
|
+
yield {
|
|
211
|
+
...rest,
|
|
212
|
+
type: "reasoning",
|
|
213
|
+
reasoning: thinking,
|
|
214
|
+
signature
|
|
215
|
+
};
|
|
216
|
+
continue;
|
|
217
|
+
} else if (require_utils._isContentBlock(block, "redacted_thinking")) {
|
|
218
|
+
yield {
|
|
219
|
+
type: "non_standard",
|
|
220
|
+
value: block
|
|
221
|
+
};
|
|
222
|
+
continue;
|
|
223
|
+
} else if (require_utils._isContentBlock(block, "tool_use") && require_utils._isString(block.name) && require_utils._isString(block.id)) {
|
|
224
|
+
yield {
|
|
225
|
+
type: "tool_call",
|
|
226
|
+
id: block.id,
|
|
227
|
+
name: block.name,
|
|
228
|
+
args: block.input
|
|
229
|
+
};
|
|
230
|
+
continue;
|
|
231
|
+
} else if (require_utils._isContentBlock(block, "input_json_delta")) {
|
|
232
|
+
if (_isAIMessageChunk(message) && message.tool_call_chunks?.length) {
|
|
233
|
+
const tool_call_chunk = message.tool_call_chunks[0];
|
|
234
|
+
yield {
|
|
235
|
+
type: "tool_call_chunk",
|
|
236
|
+
id: tool_call_chunk.id,
|
|
237
|
+
name: tool_call_chunk.name,
|
|
238
|
+
args: tool_call_chunk.args,
|
|
239
|
+
index: tool_call_chunk.index
|
|
240
|
+
};
|
|
241
|
+
continue;
|
|
242
|
+
}
|
|
243
|
+
} else if (require_utils._isContentBlock(block, "server_tool_use") && require_utils._isString(block.name) && require_utils._isString(block.id)) {
|
|
244
|
+
const { name, id } = block;
|
|
245
|
+
if (name === "web_search") {
|
|
246
|
+
const query = require_utils.iife(() => {
|
|
247
|
+
if (typeof block.input === "string") return block.input;
|
|
248
|
+
else if (require_utils._isObject(block.input) && require_utils._isString(block.input.query)) return block.input.query;
|
|
249
|
+
else if (require_utils._isString(block.partial_json)) {
|
|
250
|
+
const json = require_utils.safeParseJson(block.partial_json);
|
|
251
|
+
if (json?.query) return json.query;
|
|
252
|
+
}
|
|
253
|
+
return "";
|
|
254
|
+
});
|
|
255
|
+
yield {
|
|
256
|
+
id,
|
|
257
|
+
type: "server_tool_call",
|
|
258
|
+
name: "web_search",
|
|
259
|
+
args: { query }
|
|
260
|
+
};
|
|
261
|
+
continue;
|
|
262
|
+
} else if (block.name === "code_execution") {
|
|
263
|
+
const code = require_utils.iife(() => {
|
|
264
|
+
if (typeof block.input === "string") return block.input;
|
|
265
|
+
else if (require_utils._isObject(block.input) && require_utils._isString(block.input.code)) return block.input.code;
|
|
266
|
+
else if (require_utils._isString(block.partial_json)) {
|
|
267
|
+
const json = require_utils.safeParseJson(block.partial_json);
|
|
268
|
+
if (json?.code) return json.code;
|
|
269
|
+
}
|
|
270
|
+
return "";
|
|
271
|
+
});
|
|
272
|
+
yield {
|
|
273
|
+
id,
|
|
274
|
+
type: "server_tool_call",
|
|
275
|
+
name: "code_execution",
|
|
276
|
+
args: { code }
|
|
277
|
+
};
|
|
278
|
+
continue;
|
|
279
|
+
}
|
|
280
|
+
} else if (require_utils._isContentBlock(block, "web_search_tool_result") && require_utils._isString(block.tool_use_id) && require_utils._isArray(block.content)) {
|
|
281
|
+
const { content: content$1, tool_use_id } = block;
|
|
282
|
+
const urls = content$1.reduce((acc, content$2) => {
|
|
283
|
+
if (require_utils._isContentBlock(content$2, "web_search_result")) return [...acc, content$2.url];
|
|
189
284
|
return acc;
|
|
190
285
|
}, []);
|
|
191
286
|
yield {
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
287
|
+
type: "server_tool_call_result",
|
|
288
|
+
name: "web_search",
|
|
289
|
+
toolCallId: tool_use_id,
|
|
290
|
+
status: "success",
|
|
291
|
+
output: { urls }
|
|
196
292
|
};
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
type: "text",
|
|
200
|
-
text
|
|
201
|
-
};
|
|
202
|
-
} else if (require_utils._isContentBlock(block, "thinking") && require_utils._isString(block.thinking)) {
|
|
203
|
-
const { thinking, signature,...rest } = block;
|
|
204
|
-
yield {
|
|
205
|
-
...rest,
|
|
206
|
-
type: "reasoning",
|
|
207
|
-
reasoning: thinking,
|
|
208
|
-
signature
|
|
209
|
-
};
|
|
210
|
-
} else if (require_utils._isContentBlock(block, "redacted_thinking")) continue;
|
|
211
|
-
else if (require_utils._isContentBlock(block, "tool_use") && require_utils._isString(block.name) && require_utils._isString(block.id)) yield {
|
|
212
|
-
type: "tool_call",
|
|
213
|
-
id: block.id,
|
|
214
|
-
name: block.name,
|
|
215
|
-
args: block.input
|
|
216
|
-
};
|
|
217
|
-
else if (require_utils._isContentBlock(block, "input_json_delta")) {
|
|
218
|
-
if (_isAIMessageChunk(message) && message.tool_call_chunks?.length) {
|
|
219
|
-
const tool_call_chunk = message.tool_call_chunks[0];
|
|
293
|
+
continue;
|
|
294
|
+
} else if (require_utils._isContentBlock(block, "code_execution_tool_result") && require_utils._isString(block.tool_use_id) && require_utils._isObject(block.content)) {
|
|
220
295
|
yield {
|
|
221
|
-
type: "
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
296
|
+
type: "server_tool_call_result",
|
|
297
|
+
name: "code_execution",
|
|
298
|
+
toolCallId: block.tool_use_id,
|
|
299
|
+
status: "success",
|
|
300
|
+
output: block.content
|
|
226
301
|
};
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
const { name, id } = block;
|
|
230
|
-
if (name === "web_search") {
|
|
231
|
-
const query = require_utils.iife(() => {
|
|
232
|
-
if (typeof block.input === "string") return block.input;
|
|
233
|
-
else if (require_utils._isObject(block.input) && require_utils._isString(block.input.query)) return block.input.query;
|
|
234
|
-
else if (require_utils._isString(block.partial_json)) {
|
|
235
|
-
const json = require_utils.safeParseJson(block.partial_json);
|
|
236
|
-
if (json?.query) return json.query;
|
|
237
|
-
}
|
|
238
|
-
return "";
|
|
239
|
-
});
|
|
302
|
+
continue;
|
|
303
|
+
} else if (require_utils._isContentBlock(block, "mcp_tool_use")) {
|
|
240
304
|
yield {
|
|
241
|
-
id,
|
|
242
|
-
type: "
|
|
243
|
-
|
|
305
|
+
id: block.id,
|
|
306
|
+
type: "server_tool_call",
|
|
307
|
+
name: "mcp_tool_use",
|
|
308
|
+
args: block.input
|
|
244
309
|
};
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
if (typeof block.input === "string") return block.input;
|
|
248
|
-
else if (require_utils._isObject(block.input) && require_utils._isString(block.input.code)) return block.input.code;
|
|
249
|
-
else if (require_utils._isString(block.partial_json)) {
|
|
250
|
-
const json = require_utils.safeParseJson(block.partial_json);
|
|
251
|
-
if (json?.code) return json.code;
|
|
252
|
-
}
|
|
253
|
-
return "";
|
|
254
|
-
});
|
|
310
|
+
continue;
|
|
311
|
+
} else if (require_utils._isContentBlock(block, "mcp_tool_result") && require_utils._isString(block.tool_use_id) && require_utils._isObject(block.content)) {
|
|
255
312
|
yield {
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
313
|
+
type: "server_tool_call_result",
|
|
314
|
+
name: "mcp_tool_use",
|
|
315
|
+
toolCallId: block.tool_use_id,
|
|
316
|
+
status: "success",
|
|
317
|
+
output: block.content
|
|
259
318
|
};
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
fileIds
|
|
288
|
-
}];
|
|
319
|
+
continue;
|
|
320
|
+
} else if (require_utils._isContentBlock(block, "container_upload")) {
|
|
321
|
+
yield {
|
|
322
|
+
type: "server_tool_call",
|
|
323
|
+
name: "container_upload",
|
|
324
|
+
args: block.input
|
|
325
|
+
};
|
|
326
|
+
continue;
|
|
327
|
+
} else if (require_utils._isContentBlock(block, "search_result")) {
|
|
328
|
+
yield {
|
|
329
|
+
id: block.id,
|
|
330
|
+
type: "non_standard",
|
|
331
|
+
value: block
|
|
332
|
+
};
|
|
333
|
+
continue;
|
|
334
|
+
} else if (require_utils._isContentBlock(block, "tool_result")) {
|
|
335
|
+
yield {
|
|
336
|
+
id: block.id,
|
|
337
|
+
type: "non_standard",
|
|
338
|
+
value: block
|
|
339
|
+
};
|
|
340
|
+
continue;
|
|
341
|
+
} else {
|
|
342
|
+
const stdBlock = convertToV1FromAnthropicContentBlock(block);
|
|
343
|
+
if (stdBlock) {
|
|
344
|
+
yield stdBlock;
|
|
345
|
+
continue;
|
|
289
346
|
}
|
|
290
|
-
|
|
291
|
-
});
|
|
347
|
+
}
|
|
292
348
|
yield {
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
output
|
|
349
|
+
type: "non_standard",
|
|
350
|
+
value: block
|
|
296
351
|
};
|
|
297
|
-
} else if (block.type === "mcp_tool_use") continue;
|
|
298
|
-
else if (block.type === "mcp_tool_result") continue;
|
|
299
|
-
else if (block.type === "container_upload") continue;
|
|
300
|
-
else if (block.type === "search_result") continue;
|
|
301
|
-
else if (block.type === "tool_result") continue;
|
|
302
|
-
else {
|
|
303
|
-
const stdBlock = convertToV1FromAnthropicContentBlock(block);
|
|
304
|
-
if (stdBlock) yield stdBlock;
|
|
305
352
|
}
|
|
306
353
|
}
|
|
307
354
|
return Array.from(iterateContent());
|
|
308
355
|
}
|
|
309
|
-
const
|
|
356
|
+
const ChatAnthropicTranslator = {
|
|
310
357
|
translateContent: convertToV1FromAnthropicMessage,
|
|
311
358
|
translateContentChunk: convertToV1FromAnthropicMessage
|
|
312
359
|
};
|
|
@@ -315,6 +362,6 @@ function _isAIMessageChunk(message) {
|
|
|
315
362
|
}
|
|
316
363
|
|
|
317
364
|
//#endregion
|
|
318
|
-
exports.
|
|
365
|
+
exports.ChatAnthropicTranslator = ChatAnthropicTranslator;
|
|
319
366
|
exports.convertToV1FromAnthropicInput = convertToV1FromAnthropicInput;
|
|
320
367
|
//# sourceMappingURL=anthropic.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anthropic.cjs","names":["citation: ContentBlock","_isString","_isNumber","block: ContentBlock","_isContentBlock","_isObject","content: Array<ContentBlock>","message: AIMessage","_isArray","iife","safeParseJson","content","anthropicTranslator: StandardContentBlockTranslator","message: unknown"],"sources":["../../../src/messages/block_translators/anthropic.ts"],"sourcesContent":["import type { StandardContentBlockTranslator } from \"./index.js\";\nimport type { ContentBlock } from \"../content/index.js\";\nimport type { AIMessageChunk, AIMessage } from \"../ai.js\";\nimport type { BaseMessage, BaseMessageChunk } from \"../base.js\";\nimport {\n _isArray,\n _isContentBlock,\n _isNumber,\n _isObject,\n _isString,\n safeParseJson,\n iife,\n} from \"./utils.js\";\n\nfunction convertAnthropicAnnotation(\n citation: ContentBlock\n): ContentBlock.Citation | undefined {\n if (\n citation.type === \"char_location\" &&\n _isString(citation.document_title) &&\n _isNumber(citation.start_char_index) &&\n _isNumber(citation.end_char_index) &&\n _isString(citation.cited_text)\n ) {\n const {\n document_title,\n start_char_index,\n end_char_index,\n cited_text,\n ...rest\n } = citation;\n return {\n ...rest,\n type: \"citation\",\n source: \"char\",\n title: document_title ?? undefined,\n startIndex: start_char_index,\n endIndex: end_char_index,\n citedText: cited_text,\n };\n }\n if (\n citation.type === \"page_location\" &&\n _isString(citation.document_title) &&\n _isNumber(citation.start_page_number) &&\n _isNumber(citation.end_page_number) &&\n _isString(citation.cited_text)\n ) {\n const {\n document_title,\n start_page_number,\n end_page_number,\n cited_text,\n ...rest\n } = citation;\n return {\n ...rest,\n type: \"citation\",\n source: \"page\",\n title: document_title ?? undefined,\n startIndex: start_page_number,\n endIndex: end_page_number,\n citedText: cited_text,\n };\n }\n if (\n citation.type === \"content_block_location\" &&\n _isString(citation.document_title) &&\n _isNumber(citation.start_block_index) &&\n _isNumber(citation.end_block_index) &&\n _isString(citation.cited_text)\n ) {\n const {\n document_title,\n start_block_index,\n end_block_index,\n cited_text,\n ...rest\n } = citation;\n return {\n ...rest,\n type: \"citation\",\n source: \"block\",\n title: document_title ?? undefined,\n startIndex: start_block_index,\n endIndex: end_block_index,\n citedText: cited_text,\n };\n }\n if (\n citation.type === \"web_search_result_location\" &&\n _isString(citation.url) &&\n _isString(citation.title) &&\n _isString(citation.encrypted_index) &&\n _isString(citation.cited_text)\n ) {\n const { url, title, encrypted_index, cited_text, ...rest } = citation;\n return {\n ...rest,\n type: \"citation\",\n source: \"url\",\n url,\n title,\n startIndex: Number(encrypted_index),\n endIndex: Number(encrypted_index),\n citedText: cited_text,\n };\n }\n if (\n citation.type === \"search_result_location\" &&\n _isString(citation.source) &&\n _isString(citation.title) &&\n _isNumber(citation.start_block_index) &&\n _isNumber(citation.end_block_index) &&\n _isString(citation.cited_text)\n ) {\n const {\n source,\n title,\n start_block_index,\n end_block_index,\n cited_text,\n ...rest\n } = citation;\n return {\n ...rest,\n type: \"citation\",\n source: \"search\",\n url: source,\n title: title ?? undefined,\n startIndex: start_block_index,\n endIndex: end_block_index,\n citedText: cited_text,\n };\n }\n return undefined;\n}\n\n/**\n * Converts an Anthropic content block to a standard V1 content block.\n *\n * This function handles the conversion of Anthropic-specific content blocks\n * (document and image blocks) to the standardized V1 format. It supports\n * various source types including base64 data, URLs, file IDs, and text data.\n *\n * @param block - The Anthropic content block to convert\n * @returns A standard V1 content block if conversion is successful, undefined otherwise\n *\n * @example\n * ```typescript\n * const anthropicBlock = {\n * type: \"image\",\n * source: {\n * type: \"base64\",\n * media_type: \"image/png\",\n * data: \"iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8/5+hHgAHggJ/PchI7wAAAABJRU5ErkJggg==\"\n * }\n * };\n *\n * const standardBlock = convertToV1FromAnthropicContentBlock(anthropicBlock);\n * // Returns: { type: \"image\", mimeType: \"image/png\", data: \"...\" }\n * ```\n */\nexport function convertToV1FromAnthropicContentBlock(\n block: ContentBlock\n): ContentBlock.Standard | undefined {\n if (\n _isContentBlock(block, \"document\") &&\n _isObject(block.source) &&\n \"type\" in block.source\n ) {\n if (\n block.source.type === \"base64\" &&\n _isString(block.source.media_type) &&\n _isString(block.source.data)\n ) {\n return {\n type: \"file\",\n mimeType: block.source.media_type,\n data: block.source.data,\n };\n } else if (block.source.type === \"url\" && _isString(block.source.url)) {\n return {\n type: \"file\",\n url: block.source.url,\n };\n } else if (\n block.source.type === \"file\" &&\n _isString(block.source.file_id)\n ) {\n return {\n type: \"file\",\n fileId: block.source.file_id,\n };\n } else if (block.source.type === \"text\" && _isString(block.source.data)) {\n return {\n type: \"file\",\n mimeType: String(block.source.media_type ?? \"text/plain\"),\n data: block.source.data,\n };\n } else {\n return block as ContentBlock.Standard;\n }\n } else if (\n _isContentBlock(block, \"image\") &&\n _isObject(block.source) &&\n \"type\" in block.source\n ) {\n if (\n block.source.type === \"base64\" &&\n _isString(block.source.media_type) &&\n _isString(block.source.data)\n ) {\n return {\n type: \"image\",\n mimeType: block.source.media_type,\n data: block.source.data,\n };\n } else if (block.source.type === \"url\" && _isString(block.source.url)) {\n return {\n type: \"image\",\n url: block.source.url,\n };\n } else if (\n block.source.type === \"file\" &&\n _isString(block.source.file_id)\n ) {\n return {\n type: \"image\",\n fileId: block.source.file_id,\n };\n } else {\n return block as ContentBlock.Standard;\n }\n }\n return undefined;\n}\n\n/**\n * Converts an array of content blocks from Anthropic format to v1 standard format.\n *\n * This function processes each content block in the input array, attempting to convert\n * Anthropic-specific block formats (like image blocks with source objects, document blocks, etc.)\n * to the standardized v1 content block format. If a block cannot be converted, it is\n * passed through as-is with a type assertion to ContentBlock.Standard.\n *\n * @param content - Array of content blocks in Anthropic format to be converted\n * @returns Array of content blocks in v1 standard format\n */\nexport function convertToV1FromAnthropicInput(\n content: Array<ContentBlock>\n): Array<ContentBlock.Standard> {\n function* iterateContent(): Iterable<ContentBlock.Standard> {\n for (const block of content) {\n const stdBlock = convertToV1FromAnthropicContentBlock(block);\n if (stdBlock) {\n yield stdBlock;\n } else {\n yield block as ContentBlock.Standard;\n }\n }\n }\n return Array.from(iterateContent());\n}\n\ntype AnthropicCodeExecutionToolResult = {\n type: \"code_execution_tool_result\";\n tool_use_id: string;\n content:\n | {\n // BetaCodeExecutionToolResultError\n type: \"code_execution_tool_result_error\";\n error_code: string;\n }\n | {\n // BetaCodeExecutionResultBlock\n type: \"code_execution_result\";\n stderr: string;\n stdout: string;\n return_code: number;\n content: {\n // BetaCodeExecutionOutputBlock\n type: \"code_execution_output\";\n file_id: string;\n }[];\n };\n};\n\n/**\n * Converts an Anthropic AI message to an array of v1 standard content blocks.\n *\n * This function processes an AI message containing Anthropic-specific content blocks\n * and converts them to the standardized v1 content block format.\n *\n * @param message - The AI message containing Anthropic-formatted content blocks\n * @returns Array of content blocks in v1 standard format\n *\n * @example\n * ```typescript\n * const message = new AIMessage([\n * { type: \"text\", text: \"Hello world\" },\n * { type: \"thinking\", text: \"Let me think about this...\" },\n * { type: \"tool_use\", id: \"123\", name: \"calculator\", input: { a: 1, b: 2 } }\n * ]);\n *\n * const standardBlocks = convertToV1FromAnthropicMessage(message);\n * // Returns:\n * // [\n * // { type: \"text\", text: \"Hello world\" },\n * // { type: \"reasoning\", reasoning: \"Let me think about this...\" },\n * // { type: \"tool_call\", id: \"123\", name: \"calculator\", args: { a: 1, b: 2 } }\n * // ]\n * ```\n */\nexport function convertToV1FromAnthropicMessage(\n message: AIMessage\n): Array<ContentBlock.Standard> {\n function* iterateContent(): Iterable<ContentBlock.Standard> {\n const content =\n typeof message.content === \"string\"\n ? [{ type: \"text\", text: message.content }]\n : message.content;\n for (const block of content) {\n // TextBlock\n if (_isContentBlock(block, \"text\") && _isString(block.text)) {\n const { text, citations, ...rest } = block;\n if (_isArray(citations) && citations.length) {\n const _citations = citations.reduce<ContentBlock.Citation[]>(\n (acc, item) => {\n const citation = convertAnthropicAnnotation(item as ContentBlock);\n if (citation) {\n return [...acc, citation];\n }\n return acc;\n },\n []\n );\n yield {\n ...rest,\n type: \"text\",\n text,\n annotations: _citations,\n };\n } else {\n yield {\n ...rest,\n type: \"text\",\n text,\n };\n }\n }\n // ThinkingBlock\n else if (\n _isContentBlock(block, \"thinking\") &&\n _isString(block.thinking)\n ) {\n const { thinking, signature, ...rest } = block;\n yield {\n ...rest,\n type: \"reasoning\",\n reasoning: thinking,\n signature,\n };\n }\n // RedactedThinkingBlock\n else if (_isContentBlock(block, \"redacted_thinking\")) {\n continue;\n }\n // ToolUseBlock\n else if (\n _isContentBlock(block, \"tool_use\") &&\n _isString(block.name) &&\n _isString(block.id)\n ) {\n yield {\n type: \"tool_call\",\n id: block.id,\n name: block.name,\n args: block.input,\n };\n }\n // message chunks can have input_json_delta contents\n else if (_isContentBlock(block, \"input_json_delta\")) {\n if (_isAIMessageChunk(message) && message.tool_call_chunks?.length) {\n const tool_call_chunk = message.tool_call_chunks[0];\n yield {\n type: \"tool_call_chunk\",\n id: tool_call_chunk.id,\n name: tool_call_chunk.name,\n args: tool_call_chunk.args,\n index: tool_call_chunk.index,\n };\n }\n // TODO: implement\n }\n // ServerToolUseBlock\n else if (\n _isContentBlock(block, \"server_tool_use\") &&\n _isString(block.name) &&\n _isString(block.id)\n ) {\n const { name, id } = block;\n if (name === \"web_search\") {\n const query = iife(() => {\n if (typeof block.input === \"string\") {\n return block.input;\n } else if (_isObject(block.input) && _isString(block.input.query)) {\n return block.input.query;\n } else if (_isString(block.partial_json)) {\n const json = safeParseJson<{ query?: string }>(\n block.partial_json\n );\n if (json?.query) {\n return json.query;\n }\n }\n return \"\";\n });\n yield {\n id,\n type: \"web_search_call\",\n query,\n };\n } else if (block.name === \"code_execution\") {\n const code = iife(() => {\n if (typeof block.input === \"string\") {\n return block.input;\n } else if (_isObject(block.input) && _isString(block.input.code)) {\n return block.input.code;\n } else if (_isString(block.partial_json)) {\n const json = safeParseJson<{ code?: string }>(block.partial_json);\n if (json?.code) {\n return json.code;\n }\n }\n return \"\";\n });\n yield {\n id,\n type: \"code_interpreter_call\",\n code,\n };\n }\n }\n // WebSearchToolResultBlock\n else if (\n _isContentBlock(block, \"web_search_tool_result\") &&\n _isString(block.tool_use_id) &&\n _isArray(block.content)\n ) {\n const { content, tool_use_id } = block;\n const urls = content.reduce<string[]>((acc, content) => {\n if (_isContentBlock(content, \"web_search_result\")) {\n return [...acc, content.url as string];\n }\n return acc;\n }, []);\n yield {\n id: tool_use_id,\n type: \"web_search_result\",\n urls,\n };\n }\n // CodeExecutionToolResultBlock\n else if (\n _isContentBlock(block, \"code_execution_tool_result\") &&\n _isString(block.tool_use_id)\n ) {\n // We just make a type assertion here instead of deep checking every property\n // since `code_execution_tool_result` is an anthropic only block\n const { content, tool_use_id } =\n block as AnthropicCodeExecutionToolResult;\n const output = iife(() => {\n if (content.type === \"code_execution_tool_result_error\") {\n return [\n {\n type: \"code_interpreter_output\" as const,\n returnCode: 1,\n stderr: content.error_code,\n },\n ];\n }\n if (content.type === \"code_execution_result\") {\n const fileIds = Array.isArray(content.content)\n ? content.content\n .filter((content) => content.type === \"code_execution_output\")\n .map((content) => content.file_id)\n : [];\n return [\n {\n type: \"code_interpreter_output\" as const,\n returnCode: content.return_code ?? 0,\n stderr: content.stderr,\n stdout: content.stdout,\n fileIds,\n },\n ];\n }\n return [];\n });\n yield {\n id: tool_use_id,\n type: \"code_interpreter_result\",\n output,\n };\n }\n // MCPToolUseBlock\n else if (block.type === \"mcp_tool_use\") {\n continue;\n }\n // MCPToolResultBlock\n else if (block.type === \"mcp_tool_result\") {\n continue;\n }\n // ContainerUploadBlock\n else if (block.type === \"container_upload\") {\n continue;\n }\n // SearchResultBlockParam\n else if (block.type === \"search_result\") {\n continue;\n }\n // ToolResultBlockParam\n else if (block.type === \"tool_result\") {\n // TODO: Implement\n continue;\n } else {\n // For all other blocks, we try to convert them to a standard block\n const stdBlock = convertToV1FromAnthropicContentBlock(block);\n if (stdBlock) {\n yield stdBlock;\n } else {\n // TODO: non standard?\n }\n }\n }\n }\n return Array.from(iterateContent());\n}\n\nexport const anthropicTranslator: StandardContentBlockTranslator = {\n translateContent: convertToV1FromAnthropicMessage,\n translateContentChunk: convertToV1FromAnthropicMessage,\n};\n\nfunction _isAIMessageChunk(message: unknown): message is AIMessageChunk {\n return (\n typeof (message as BaseMessage)?._getType === \"function\" &&\n typeof (message as BaseMessageChunk).concat === \"function\" &&\n (message as BaseMessageChunk)._getType() === \"ai\"\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"anthropic.cjs","names":["citation: ContentBlock","_isString","_isNumber","block: ContentBlock","_isContentBlock","_isObject","content: Array<ContentBlock>","message: AIMessage","_isArray","iife","safeParseJson","content","ChatAnthropicTranslator: StandardContentBlockTranslator","message: unknown"],"sources":["../../../src/messages/block_translators/anthropic.ts"],"sourcesContent":["import type { StandardContentBlockTranslator } from \"./index.js\";\nimport type { ContentBlock } from \"../content/index.js\";\nimport type { AIMessageChunk, AIMessage } from \"../ai.js\";\nimport type { BaseMessage, BaseMessageChunk } from \"../base.js\";\nimport {\n _isArray,\n _isContentBlock,\n _isNumber,\n _isObject,\n _isString,\n safeParseJson,\n iife,\n} from \"./utils.js\";\n\nfunction convertAnthropicAnnotation(\n citation: ContentBlock\n): ContentBlock.Citation | undefined {\n if (\n citation.type === \"char_location\" &&\n _isString(citation.document_title) &&\n _isNumber(citation.start_char_index) &&\n _isNumber(citation.end_char_index) &&\n _isString(citation.cited_text)\n ) {\n const {\n document_title,\n start_char_index,\n end_char_index,\n cited_text,\n ...rest\n } = citation;\n return {\n ...rest,\n type: \"citation\",\n source: \"char\",\n title: document_title ?? undefined,\n startIndex: start_char_index,\n endIndex: end_char_index,\n citedText: cited_text,\n };\n }\n if (\n citation.type === \"page_location\" &&\n _isString(citation.document_title) &&\n _isNumber(citation.start_page_number) &&\n _isNumber(citation.end_page_number) &&\n _isString(citation.cited_text)\n ) {\n const {\n document_title,\n start_page_number,\n end_page_number,\n cited_text,\n ...rest\n } = citation;\n return {\n ...rest,\n type: \"citation\",\n source: \"page\",\n title: document_title ?? undefined,\n startIndex: start_page_number,\n endIndex: end_page_number,\n citedText: cited_text,\n };\n }\n if (\n citation.type === \"content_block_location\" &&\n _isString(citation.document_title) &&\n _isNumber(citation.start_block_index) &&\n _isNumber(citation.end_block_index) &&\n _isString(citation.cited_text)\n ) {\n const {\n document_title,\n start_block_index,\n end_block_index,\n cited_text,\n ...rest\n } = citation;\n return {\n ...rest,\n type: \"citation\",\n source: \"block\",\n title: document_title ?? undefined,\n startIndex: start_block_index,\n endIndex: end_block_index,\n citedText: cited_text,\n };\n }\n if (\n citation.type === \"web_search_result_location\" &&\n _isString(citation.url) &&\n _isString(citation.title) &&\n _isString(citation.encrypted_index) &&\n _isString(citation.cited_text)\n ) {\n const { url, title, encrypted_index, cited_text, ...rest } = citation;\n return {\n ...rest,\n type: \"citation\",\n source: \"url\",\n url,\n title,\n startIndex: Number(encrypted_index),\n endIndex: Number(encrypted_index),\n citedText: cited_text,\n };\n }\n if (\n citation.type === \"search_result_location\" &&\n _isString(citation.source) &&\n _isString(citation.title) &&\n _isNumber(citation.start_block_index) &&\n _isNumber(citation.end_block_index) &&\n _isString(citation.cited_text)\n ) {\n const {\n source,\n title,\n start_block_index,\n end_block_index,\n cited_text,\n ...rest\n } = citation;\n return {\n ...rest,\n type: \"citation\",\n source: \"search\",\n url: source,\n title: title ?? undefined,\n startIndex: start_block_index,\n endIndex: end_block_index,\n citedText: cited_text,\n };\n }\n return undefined;\n}\n\n/**\n * Converts an Anthropic content block to a standard V1 content block.\n *\n * This function handles the conversion of Anthropic-specific content blocks\n * (document and image blocks) to the standardized V1 format. It supports\n * various source types including base64 data, URLs, file IDs, and text data.\n *\n * @param block - The Anthropic content block to convert\n * @returns A standard V1 content block if conversion is successful, undefined otherwise\n *\n * @example\n * ```typescript\n * const anthropicBlock = {\n * type: \"image\",\n * source: {\n * type: \"base64\",\n * media_type: \"image/png\",\n * data: \"iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8/5+hHgAHggJ/PchI7wAAAABJRU5ErkJggg==\"\n * }\n * };\n *\n * const standardBlock = convertToV1FromAnthropicContentBlock(anthropicBlock);\n * // Returns: { type: \"image\", mimeType: \"image/png\", data: \"...\" }\n * ```\n */\nexport function convertToV1FromAnthropicContentBlock(\n block: ContentBlock\n): ContentBlock.Standard | undefined {\n if (\n _isContentBlock(block, \"document\") &&\n _isObject(block.source) &&\n \"type\" in block.source\n ) {\n if (\n block.source.type === \"base64\" &&\n _isString(block.source.media_type) &&\n _isString(block.source.data)\n ) {\n return {\n type: \"file\",\n mimeType: block.source.media_type,\n data: block.source.data,\n };\n } else if (block.source.type === \"url\" && _isString(block.source.url)) {\n return {\n type: \"file\",\n url: block.source.url,\n };\n } else if (\n block.source.type === \"file\" &&\n _isString(block.source.file_id)\n ) {\n return {\n type: \"file\",\n fileId: block.source.file_id,\n };\n } else if (block.source.type === \"text\" && _isString(block.source.data)) {\n return {\n type: \"file\",\n mimeType: String(block.source.media_type ?? \"text/plain\"),\n data: block.source.data,\n };\n }\n } else if (\n _isContentBlock(block, \"image\") &&\n _isObject(block.source) &&\n \"type\" in block.source\n ) {\n if (\n block.source.type === \"base64\" &&\n _isString(block.source.media_type) &&\n _isString(block.source.data)\n ) {\n return {\n type: \"image\",\n mimeType: block.source.media_type,\n data: block.source.data,\n };\n } else if (block.source.type === \"url\" && _isString(block.source.url)) {\n return {\n type: \"image\",\n url: block.source.url,\n };\n } else if (\n block.source.type === \"file\" &&\n _isString(block.source.file_id)\n ) {\n return {\n type: \"image\",\n fileId: block.source.file_id,\n };\n }\n }\n return undefined;\n}\n\n/**\n * Converts an array of content blocks from Anthropic format to v1 standard format.\n *\n * This function processes each content block in the input array, attempting to convert\n * Anthropic-specific block formats (like image blocks with source objects, document blocks, etc.)\n * to the standardized v1 content block format. If a block cannot be converted, it is\n * passed through as-is with a type assertion to ContentBlock.Standard.\n *\n * @param content - Array of content blocks in Anthropic format to be converted\n * @returns Array of content blocks in v1 standard format\n */\nexport function convertToV1FromAnthropicInput(\n content: Array<ContentBlock>\n): Array<ContentBlock.Standard> {\n function* iterateContent(): Iterable<ContentBlock.Standard> {\n for (const block of content) {\n const stdBlock = convertToV1FromAnthropicContentBlock(block);\n if (stdBlock) {\n yield stdBlock;\n } else {\n yield block as ContentBlock.Standard;\n }\n }\n }\n return Array.from(iterateContent());\n}\n\n/**\n * Converts an Anthropic AI message to an array of v1 standard content blocks.\n *\n * This function processes an AI message containing Anthropic-specific content blocks\n * and converts them to the standardized v1 content block format.\n *\n * @param message - The AI message containing Anthropic-formatted content blocks\n * @returns Array of content blocks in v1 standard format\n *\n * @example\n * ```typescript\n * const message = new AIMessage([\n * { type: \"text\", text: \"Hello world\" },\n * { type: \"thinking\", text: \"Let me think about this...\" },\n * { type: \"tool_use\", id: \"123\", name: \"calculator\", input: { a: 1, b: 2 } }\n * ]);\n *\n * const standardBlocks = convertToV1FromAnthropicMessage(message);\n * // Returns:\n * // [\n * // { type: \"text\", text: \"Hello world\" },\n * // { type: \"reasoning\", reasoning: \"Let me think about this...\" },\n * // { type: \"tool_call\", id: \"123\", name: \"calculator\", args: { a: 1, b: 2 } }\n * // ]\n * ```\n */\nexport function convertToV1FromAnthropicMessage(\n message: AIMessage\n): Array<ContentBlock.Standard> {\n function* iterateContent(): Iterable<ContentBlock.Standard> {\n const content =\n typeof message.content === \"string\"\n ? [{ type: \"text\", text: message.content }]\n : message.content;\n for (const block of content) {\n // TextBlock\n if (_isContentBlock(block, \"text\") && _isString(block.text)) {\n const { text, citations, ...rest } = block;\n if (_isArray(citations) && citations.length) {\n const _citations = citations.reduce<ContentBlock.Citation[]>(\n (acc, item) => {\n const citation = convertAnthropicAnnotation(item as ContentBlock);\n if (citation) {\n return [...acc, citation];\n }\n return acc;\n },\n []\n );\n yield {\n ...rest,\n type: \"text\",\n text,\n annotations: _citations,\n };\n continue;\n } else {\n yield {\n ...rest,\n type: \"text\",\n text,\n };\n continue;\n }\n }\n // ThinkingBlock\n else if (\n _isContentBlock(block, \"thinking\") &&\n _isString(block.thinking)\n ) {\n const { thinking, signature, ...rest } = block;\n yield {\n ...rest,\n type: \"reasoning\",\n reasoning: thinking,\n signature,\n };\n continue;\n }\n // RedactedThinkingBlock\n else if (_isContentBlock(block, \"redacted_thinking\")) {\n yield { type: \"non_standard\", value: block };\n continue;\n }\n // ToolUseBlock\n else if (\n _isContentBlock(block, \"tool_use\") &&\n _isString(block.name) &&\n _isString(block.id)\n ) {\n yield {\n type: \"tool_call\",\n id: block.id,\n name: block.name,\n args: block.input,\n };\n continue;\n }\n // message chunks can have input_json_delta contents\n else if (_isContentBlock(block, \"input_json_delta\")) {\n if (_isAIMessageChunk(message) && message.tool_call_chunks?.length) {\n const tool_call_chunk = message.tool_call_chunks[0];\n yield {\n type: \"tool_call_chunk\",\n id: tool_call_chunk.id,\n name: tool_call_chunk.name,\n args: tool_call_chunk.args,\n index: tool_call_chunk.index,\n };\n continue;\n }\n }\n // ServerToolUseBlock\n else if (\n _isContentBlock(block, \"server_tool_use\") &&\n _isString(block.name) &&\n _isString(block.id)\n ) {\n const { name, id } = block;\n if (name === \"web_search\") {\n const query = iife(() => {\n if (typeof block.input === \"string\") {\n return block.input;\n } else if (_isObject(block.input) && _isString(block.input.query)) {\n return block.input.query;\n } else if (_isString(block.partial_json)) {\n const json = safeParseJson<{ query?: string }>(\n block.partial_json\n );\n if (json?.query) {\n return json.query;\n }\n }\n return \"\";\n });\n yield {\n id,\n type: \"server_tool_call\",\n name: \"web_search\",\n args: { query },\n };\n continue;\n } else if (block.name === \"code_execution\") {\n const code = iife(() => {\n if (typeof block.input === \"string\") {\n return block.input;\n } else if (_isObject(block.input) && _isString(block.input.code)) {\n return block.input.code;\n } else if (_isString(block.partial_json)) {\n const json = safeParseJson<{ code?: string }>(block.partial_json);\n if (json?.code) {\n return json.code;\n }\n }\n return \"\";\n });\n yield {\n id,\n type: \"server_tool_call\",\n name: \"code_execution\",\n args: { code },\n };\n continue;\n }\n }\n // WebSearchToolResultBlock\n else if (\n _isContentBlock(block, \"web_search_tool_result\") &&\n _isString(block.tool_use_id) &&\n _isArray(block.content)\n ) {\n const { content, tool_use_id } = block;\n const urls = content.reduce<string[]>((acc, content) => {\n if (_isContentBlock(content, \"web_search_result\")) {\n return [...acc, content.url as string];\n }\n return acc;\n }, []);\n yield {\n type: \"server_tool_call_result\",\n name: \"web_search\",\n toolCallId: tool_use_id,\n status: \"success\",\n output: {\n urls,\n },\n };\n continue;\n }\n // CodeExecutionToolResultBlock\n else if (\n _isContentBlock(block, \"code_execution_tool_result\") &&\n _isString(block.tool_use_id) &&\n _isObject(block.content)\n ) {\n yield {\n type: \"server_tool_call_result\",\n name: \"code_execution\",\n toolCallId: block.tool_use_id,\n status: \"success\",\n output: block.content,\n };\n continue;\n }\n // MCPToolUseBlock\n else if (_isContentBlock(block, \"mcp_tool_use\")) {\n yield {\n id: block.id,\n type: \"server_tool_call\",\n name: \"mcp_tool_use\",\n args: block.input,\n };\n continue;\n }\n // MCPToolResultBlock\n else if (\n _isContentBlock(block, \"mcp_tool_result\") &&\n _isString(block.tool_use_id) &&\n _isObject(block.content)\n ) {\n yield {\n type: \"server_tool_call_result\",\n name: \"mcp_tool_use\",\n toolCallId: block.tool_use_id,\n status: \"success\",\n output: block.content,\n };\n continue;\n }\n // ContainerUploadBlock\n else if (_isContentBlock(block, \"container_upload\")) {\n yield {\n type: \"server_tool_call\",\n name: \"container_upload\",\n args: block.input,\n };\n continue;\n }\n // SearchResultBlockParam\n else if (_isContentBlock(block, \"search_result\")) {\n yield { id: block.id, type: \"non_standard\", value: block };\n continue;\n }\n // ToolResultBlockParam\n else if (_isContentBlock(block, \"tool_result\")) {\n yield { id: block.id, type: \"non_standard\", value: block };\n continue;\n } else {\n // For all other blocks, we try to convert them to a standard block\n const stdBlock = convertToV1FromAnthropicContentBlock(block);\n if (stdBlock) {\n yield stdBlock;\n continue;\n }\n }\n yield { type: \"non_standard\", value: block };\n }\n }\n return Array.from(iterateContent());\n}\n\nexport const ChatAnthropicTranslator: StandardContentBlockTranslator = {\n translateContent: convertToV1FromAnthropicMessage,\n translateContentChunk: convertToV1FromAnthropicMessage,\n};\n\nfunction _isAIMessageChunk(message: unknown): message is AIMessageChunk {\n return (\n typeof (message as BaseMessage)?._getType === \"function\" &&\n typeof (message as BaseMessageChunk).concat === \"function\" &&\n (message as BaseMessageChunk)._getType() === \"ai\"\n );\n}\n"],"mappings":"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"}
|