@langchain/anthropic 1.5.8 → 1.5.10-rc.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 +12 -0
- package/dist/_virtual/_rolldown/runtime.cjs +1 -1
- package/dist/chat_models.cjs +5 -2
- package/dist/chat_models.cjs.map +1 -1
- package/dist/chat_models.d.cts +2 -2
- package/dist/chat_models.d.cts.map +1 -1
- package/dist/chat_models.d.ts +2 -2
- package/dist/chat_models.d.ts.map +1 -1
- package/dist/chat_models.js +5 -2
- package/dist/chat_models.js.map +1 -1
- package/dist/output_parsers.cjs.map +1 -1
- package/dist/profiles.cjs +17 -0
- package/dist/profiles.cjs.map +1 -1
- package/dist/profiles.js +17 -0
- package/dist/profiles.js.map +1 -1
- package/dist/tools/bash.cjs.map +1 -1
- package/dist/tools/computer.cjs.map +1 -1
- package/dist/tools/memory.cjs.map +1 -1
- package/dist/tools/textEditor.cjs.map +1 -1
- package/dist/utils/content.cjs +52 -50
- package/dist/utils/content.cjs.map +1 -1
- package/dist/utils/content.js +52 -50
- package/dist/utils/content.js.map +1 -1
- package/dist/utils/errors.cjs.map +1 -1
- package/dist/utils/message_inputs.cjs +43 -40
- package/dist/utils/message_inputs.cjs.map +1 -1
- package/dist/utils/message_inputs.js +43 -40
- package/dist/utils/message_inputs.js.map +1 -1
- package/dist/utils/message_outputs.cjs +39 -35
- package/dist/utils/message_outputs.cjs.map +1 -1
- package/dist/utils/message_outputs.js +39 -35
- package/dist/utils/message_outputs.js.map +1 -1
- package/dist/utils/params.cjs +6 -2
- package/dist/utils/params.cjs.map +1 -1
- package/dist/utils/params.js +6 -2
- package/dist/utils/params.js.map +1 -1
- package/dist/utils/prompts.cjs +2 -1
- package/dist/utils/prompts.cjs.map +1 -1
- package/dist/utils/prompts.js +2 -1
- package/dist/utils/prompts.js.map +1 -1
- package/dist/utils/standard.cjs +11 -10
- package/dist/utils/standard.cjs.map +1 -1
- package/dist/utils/standard.js +11 -10
- package/dist/utils/standard.js.map +1 -1
- package/dist/utils/stream_events.cjs +6 -8
- package/dist/utils/stream_events.cjs.map +1 -1
- package/dist/utils/stream_events.js +6 -8
- package/dist/utils/stream_events.js.map +1 -1
- package/package.json +6 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"computer.cjs","names":["Computer20251124ActionSchema","Computer20250124ActionSchema"],"sources":["../../src/tools/computer.ts"],"sourcesContent":["/* oxlint-disable @typescript-eslint/no-explicit-any */\nimport Anthropic from \"@anthropic-ai/sdk\";\nimport { tool } from \"@langchain/core/tools\";\nimport { ToolMessage } from \"@langchain/core/messages\";\nimport type { DynamicStructuredTool, ToolRuntime } from \"@langchain/core/tools\";\n\nimport type {\n Computer20251124Action,\n Computer20250124Action,\n} from \"./types.js\";\nimport {\n Computer20251124ActionSchema,\n Computer20250124ActionSchema,\n} from \"./types.js\";\n\nconst TOOL_NAME = \"computer\";\n\nexport type ComputerUseReturnType =\n | string\n | Promise<string>\n | ToolMessage<any>\n | Promise<ToolMessage<any>>;\n\n/**\n * Options for the computer use tool (Claude Opus 4.5 only version).\n *\n * @template TState - The type of the state schema (when used with `ReactAgent`)\n * @template TContext - The type of the context schema (when used with `ReactAgent`)\n */\nexport interface Computer20251124Options<TState = any, TContext = any> {\n /**\n * The width of the display in pixels.\n */\n displayWidthPx: number;\n /**\n * The height of the display in pixels.\n */\n displayHeightPx: number;\n /**\n * Optional display number for X11 environments.\n */\n displayNumber?: number;\n /**\n * Enable zoom action for detailed screen region inspection.\n * When enabled, Claude can zoom into specific screen regions.\n * @default false\n */\n enableZoom?: boolean;\n /**\n * Optional execute function that handles computer action execution.\n * This function receives the action input and should return the result\n * (typically a base64-encoded screenshot or action confirmation).\n */\n execute?: (\n args: Computer20251124Action,\n runtime: ToolRuntime<TState, TContext>\n ) => ComputerUseReturnType;\n}\n\n/**\n * Creates an Anthropic computer use tool for Claude Opus 4.5 that provides\n * screenshot capabilities and mouse/keyboard control for autonomous desktop interaction.\n *\n * The computer use tool enables Claude to interact with desktop environments through:\n * - **Screenshot capture**: See what's currently displayed on screen\n * - **Mouse control**: Click, drag, and move the cursor\n * - **Keyboard input**: Type text and use keyboard shortcuts\n * - **Zoom**: View specific screen regions at full resolution (when enabled)\n *\n * @warning Computer use is a beta feature with unique risks. Use a dedicated virtual machine\n * or container with minimal privileges. Avoid giving access to sensitive data.\n *\n * @see {@link https://platform.claude.com/docs/en/agents-and-tools/tool-use/computer-use-tool | Anthropic Computer Use Documentation}\n *\n * @example\n * ```typescript\n * import { ChatAnthropic, tools } from \"@langchain/anthropic\";\n *\n * const llm = new ChatAnthropic({\n * model: \"claude-opus-4-5-20251101\",\n * clientOptions: {\n * defaultHeaders: {\n * \"anthropic-beta\": \"computer-use-2025-11-24\",\n * },\n * },\n * });\n *\n * const computer = tools.computer_20251124({\n * displayWidthPx: 1024,\n * displayHeightPx: 768,\n * displayNumber: 1,\n * enableZoom: true,\n * execute: async (action) => {\n * if (action.action === \"screenshot\") {\n * // Capture and return base64-encoded screenshot\n * return captureScreenshot();\n * }\n * if (action.action === \"left_click\") {\n * // Click at the specified coordinates\n * await click(action.coordinate[0], action.coordinate[1]);\n * return captureScreenshot();\n * }\n * // Handle other actions...\n * },\n * });\n *\n * const llmWithComputer = llm.bindTools([computer]);\n * const response = await llmWithComputer.invoke(\n * \"Save a picture of a cat to my desktop.\"\n * );\n * ```\n *\n * @param options - Configuration options for the computer use tool\n * @returns The computer use tool object that can be passed to `bindTools`\n */\nexport function computer_20251124(options: Computer20251124Options) {\n const name = TOOL_NAME;\n const computerTool = tool(\n options.execute as (\n input: unknown,\n runtime: ToolRuntime<unknown, unknown>\n ) => ComputerUseReturnType,\n {\n name,\n schema: Computer20251124ActionSchema,\n }\n );\n\n computerTool.extras = {\n ...(computerTool.extras ?? {}),\n providerToolDefinition: {\n type: \"computer_20251124\",\n name,\n display_width_px: options.displayWidthPx,\n display_height_px: options.displayHeightPx,\n ...(options.displayNumber !== undefined && {\n display_number: options.displayNumber,\n }),\n ...(options.enableZoom !== undefined && {\n enable_zoom: options.enableZoom,\n }),\n } satisfies Anthropic.Beta.BetaToolComputerUse20251124,\n };\n\n return computerTool as DynamicStructuredTool<\n typeof Computer20251124ActionSchema,\n Computer20251124Action,\n any,\n ToolMessage<any>\n >;\n}\n\n/**\n * Options for the computer use tool.\n *\n * Supported models: Claude Sonnet 4.5, Haiku 4.5, Opus 4.1, Sonnet 4, Opus 4, and Sonnet 3.7 versions.\n */\nexport interface Computer20250124Options<TState = any, TContext = any> {\n /**\n * The width of the display in pixels.\n */\n displayWidthPx: number;\n /**\n * The height of the display in pixels.\n */\n displayHeightPx: number;\n /**\n * Optional display number for X11 environments.\n */\n displayNumber?: number;\n /**\n * Optional execute function that handles computer action execution.\n * This function receives the action input and should return the result\n * (typically a base64-encoded screenshot or action confirmation).\n */\n execute?: (\n args: Computer20250124Action,\n runtime: ToolRuntime<TState, TContext>\n ) => ComputerUseReturnType;\n}\n\n/**\n * Creates an Anthropic computer use tool that provides screenshot capabilities and mouse/keyboard control\n * for autonomous desktop interaction.\n *\n * Supported models: Claude Sonnet 4.5, Haiku 4.5, Opus 4.1, Sonnet 4, Opus 4, and Sonnet 3.7 versions.\n *\n * The computer use tool enables Claude to interact with desktop environments through:\n * - **Screenshot capture**: See what's currently displayed on screen\n * - **Mouse control**: Click, drag, and move the cursor\n * - **Keyboard input**: Type text and use keyboard shortcuts\n *\n * @warning Computer use is a beta feature with unique risks. Use a dedicated virtual machine\n * or container with minimal privileges. Avoid giving access to sensitive data.\n *\n * @see {@link https://platform.claude.com/docs/en/agents-and-tools/tool-use/computer-use-tool | Anthropic Computer Use Documentation}\n *\n * @example\n * ```typescript\n * import { ChatAnthropic, tools } from \"@langchain/anthropic\";\n *\n * const llm = new ChatAnthropic({\n * model: \"claude-sonnet-4-5-20250929\",\n * clientOptions: {\n * defaultHeaders: {\n * \"anthropic-beta\": \"computer-use-2025-01-24\",\n * },\n * },\n * });\n *\n * const computer = tools.computer_20250124({\n * displayWidthPx: 1024,\n * displayHeightPx: 768,\n * displayNumber: 1,\n * execute: async (action) => {\n * if (action.action === \"screenshot\") {\n * // Capture and return base64-encoded screenshot\n * return captureScreenshot();\n * }\n * if (action.action === \"left_click\") {\n * // Click at the specified coordinates\n * await click(action.coordinate[0], action.coordinate[1]);\n * return captureScreenshot();\n * }\n * // Handle other actions...\n * },\n * });\n *\n * const llmWithComputer = llm.bindTools([computer]);\n * const response = await llmWithComputer.invoke(\n * \"Save a picture of a cat to my desktop.\"\n * );\n * ```\n *\n * @param options - Configuration options for the computer use tool\n * @returns The computer use tool object that can be passed to `bindTools`\n */\nexport function computer_20250124(options: Computer20250124Options) {\n const name = TOOL_NAME;\n const computerTool = tool(\n options.execute as (\n input: unknown,\n runtime: ToolRuntime<unknown, unknown>\n ) => ComputerUseReturnType,\n {\n name,\n description: \"A tool for interacting with the computer\",\n schema: Computer20250124ActionSchema,\n }\n );\n\n computerTool.extras = {\n ...(computerTool.extras ?? {}),\n providerToolDefinition: {\n type: \"computer_20250124\",\n name,\n display_width_px: options.displayWidthPx,\n display_height_px: options.displayHeightPx,\n ...(options.displayNumber !== undefined && {\n display_number: options.displayNumber,\n }),\n } satisfies Anthropic.Beta.BetaToolComputerUse20250124,\n };\n\n return computerTool as DynamicStructuredTool<\n typeof Computer20250124ActionSchema,\n Computer20250124Action,\n any,\n ComputerUseReturnType\n >;\n}\n"],"mappings":";;;AAeA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoGlB,SAAgB,kBAAkB,SAAkC;CAClE,MAAM,OAAO;CACb,MAAM,gBAAA,
|
|
1
|
+
{"version":3,"file":"computer.cjs","names":["tool","Computer20251124ActionSchema","Computer20250124ActionSchema"],"sources":["../../src/tools/computer.ts"],"sourcesContent":["/* oxlint-disable @typescript-eslint/no-explicit-any */\nimport Anthropic from \"@anthropic-ai/sdk\";\nimport { tool } from \"@langchain/core/tools\";\nimport { ToolMessage } from \"@langchain/core/messages\";\nimport type { DynamicStructuredTool, ToolRuntime } from \"@langchain/core/tools\";\n\nimport type {\n Computer20251124Action,\n Computer20250124Action,\n} from \"./types.js\";\nimport {\n Computer20251124ActionSchema,\n Computer20250124ActionSchema,\n} from \"./types.js\";\n\nconst TOOL_NAME = \"computer\";\n\nexport type ComputerUseReturnType =\n | string\n | Promise<string>\n | ToolMessage<any>\n | Promise<ToolMessage<any>>;\n\n/**\n * Options for the computer use tool (Claude Opus 4.5 only version).\n *\n * @template TState - The type of the state schema (when used with `ReactAgent`)\n * @template TContext - The type of the context schema (when used with `ReactAgent`)\n */\nexport interface Computer20251124Options<TState = any, TContext = any> {\n /**\n * The width of the display in pixels.\n */\n displayWidthPx: number;\n /**\n * The height of the display in pixels.\n */\n displayHeightPx: number;\n /**\n * Optional display number for X11 environments.\n */\n displayNumber?: number;\n /**\n * Enable zoom action for detailed screen region inspection.\n * When enabled, Claude can zoom into specific screen regions.\n * @default false\n */\n enableZoom?: boolean;\n /**\n * Optional execute function that handles computer action execution.\n * This function receives the action input and should return the result\n * (typically a base64-encoded screenshot or action confirmation).\n */\n execute?: (\n args: Computer20251124Action,\n runtime: ToolRuntime<TState, TContext>\n ) => ComputerUseReturnType;\n}\n\n/**\n * Creates an Anthropic computer use tool for Claude Opus 4.5 that provides\n * screenshot capabilities and mouse/keyboard control for autonomous desktop interaction.\n *\n * The computer use tool enables Claude to interact with desktop environments through:\n * - **Screenshot capture**: See what's currently displayed on screen\n * - **Mouse control**: Click, drag, and move the cursor\n * - **Keyboard input**: Type text and use keyboard shortcuts\n * - **Zoom**: View specific screen regions at full resolution (when enabled)\n *\n * @warning Computer use is a beta feature with unique risks. Use a dedicated virtual machine\n * or container with minimal privileges. Avoid giving access to sensitive data.\n *\n * @see {@link https://platform.claude.com/docs/en/agents-and-tools/tool-use/computer-use-tool | Anthropic Computer Use Documentation}\n *\n * @example\n * ```typescript\n * import { ChatAnthropic, tools } from \"@langchain/anthropic\";\n *\n * const llm = new ChatAnthropic({\n * model: \"claude-opus-4-5-20251101\",\n * clientOptions: {\n * defaultHeaders: {\n * \"anthropic-beta\": \"computer-use-2025-11-24\",\n * },\n * },\n * });\n *\n * const computer = tools.computer_20251124({\n * displayWidthPx: 1024,\n * displayHeightPx: 768,\n * displayNumber: 1,\n * enableZoom: true,\n * execute: async (action) => {\n * if (action.action === \"screenshot\") {\n * // Capture and return base64-encoded screenshot\n * return captureScreenshot();\n * }\n * if (action.action === \"left_click\") {\n * // Click at the specified coordinates\n * await click(action.coordinate[0], action.coordinate[1]);\n * return captureScreenshot();\n * }\n * // Handle other actions...\n * },\n * });\n *\n * const llmWithComputer = llm.bindTools([computer]);\n * const response = await llmWithComputer.invoke(\n * \"Save a picture of a cat to my desktop.\"\n * );\n * ```\n *\n * @param options - Configuration options for the computer use tool\n * @returns The computer use tool object that can be passed to `bindTools`\n */\nexport function computer_20251124(options: Computer20251124Options) {\n const name = TOOL_NAME;\n const computerTool = tool(\n options.execute as (\n input: unknown,\n runtime: ToolRuntime<unknown, unknown>\n ) => ComputerUseReturnType,\n {\n name,\n schema: Computer20251124ActionSchema,\n }\n );\n\n computerTool.extras = {\n ...(computerTool.extras ?? {}),\n providerToolDefinition: {\n type: \"computer_20251124\",\n name,\n display_width_px: options.displayWidthPx,\n display_height_px: options.displayHeightPx,\n ...(options.displayNumber !== undefined && {\n display_number: options.displayNumber,\n }),\n ...(options.enableZoom !== undefined && {\n enable_zoom: options.enableZoom,\n }),\n } satisfies Anthropic.Beta.BetaToolComputerUse20251124,\n };\n\n return computerTool as DynamicStructuredTool<\n typeof Computer20251124ActionSchema,\n Computer20251124Action,\n any,\n ToolMessage<any>\n >;\n}\n\n/**\n * Options for the computer use tool.\n *\n * Supported models: Claude Sonnet 4.5, Haiku 4.5, Opus 4.1, Sonnet 4, Opus 4, and Sonnet 3.7 versions.\n */\nexport interface Computer20250124Options<TState = any, TContext = any> {\n /**\n * The width of the display in pixels.\n */\n displayWidthPx: number;\n /**\n * The height of the display in pixels.\n */\n displayHeightPx: number;\n /**\n * Optional display number for X11 environments.\n */\n displayNumber?: number;\n /**\n * Optional execute function that handles computer action execution.\n * This function receives the action input and should return the result\n * (typically a base64-encoded screenshot or action confirmation).\n */\n execute?: (\n args: Computer20250124Action,\n runtime: ToolRuntime<TState, TContext>\n ) => ComputerUseReturnType;\n}\n\n/**\n * Creates an Anthropic computer use tool that provides screenshot capabilities and mouse/keyboard control\n * for autonomous desktop interaction.\n *\n * Supported models: Claude Sonnet 4.5, Haiku 4.5, Opus 4.1, Sonnet 4, Opus 4, and Sonnet 3.7 versions.\n *\n * The computer use tool enables Claude to interact with desktop environments through:\n * - **Screenshot capture**: See what's currently displayed on screen\n * - **Mouse control**: Click, drag, and move the cursor\n * - **Keyboard input**: Type text and use keyboard shortcuts\n *\n * @warning Computer use is a beta feature with unique risks. Use a dedicated virtual machine\n * or container with minimal privileges. Avoid giving access to sensitive data.\n *\n * @see {@link https://platform.claude.com/docs/en/agents-and-tools/tool-use/computer-use-tool | Anthropic Computer Use Documentation}\n *\n * @example\n * ```typescript\n * import { ChatAnthropic, tools } from \"@langchain/anthropic\";\n *\n * const llm = new ChatAnthropic({\n * model: \"claude-sonnet-4-5-20250929\",\n * clientOptions: {\n * defaultHeaders: {\n * \"anthropic-beta\": \"computer-use-2025-01-24\",\n * },\n * },\n * });\n *\n * const computer = tools.computer_20250124({\n * displayWidthPx: 1024,\n * displayHeightPx: 768,\n * displayNumber: 1,\n * execute: async (action) => {\n * if (action.action === \"screenshot\") {\n * // Capture and return base64-encoded screenshot\n * return captureScreenshot();\n * }\n * if (action.action === \"left_click\") {\n * // Click at the specified coordinates\n * await click(action.coordinate[0], action.coordinate[1]);\n * return captureScreenshot();\n * }\n * // Handle other actions...\n * },\n * });\n *\n * const llmWithComputer = llm.bindTools([computer]);\n * const response = await llmWithComputer.invoke(\n * \"Save a picture of a cat to my desktop.\"\n * );\n * ```\n *\n * @param options - Configuration options for the computer use tool\n * @returns The computer use tool object that can be passed to `bindTools`\n */\nexport function computer_20250124(options: Computer20250124Options) {\n const name = TOOL_NAME;\n const computerTool = tool(\n options.execute as (\n input: unknown,\n runtime: ToolRuntime<unknown, unknown>\n ) => ComputerUseReturnType,\n {\n name,\n description: \"A tool for interacting with the computer\",\n schema: Computer20250124ActionSchema,\n }\n );\n\n computerTool.extras = {\n ...(computerTool.extras ?? {}),\n providerToolDefinition: {\n type: \"computer_20250124\",\n name,\n display_width_px: options.displayWidthPx,\n display_height_px: options.displayHeightPx,\n ...(options.displayNumber !== undefined && {\n display_number: options.displayNumber,\n }),\n } satisfies Anthropic.Beta.BetaToolComputerUse20250124,\n };\n\n return computerTool as DynamicStructuredTool<\n typeof Computer20250124ActionSchema,\n Computer20250124Action,\n any,\n ComputerUseReturnType\n >;\n}\n"],"mappings":";;;AAeA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoGlB,SAAgB,kBAAkB,SAAkC;CAClE,MAAM,OAAO;CACb,MAAM,gBAAA,GAAeA,sBAAAA,KAAAA,CACnB,QAAQ,SAIR;EACE;EACA,QAAQC,cAAAA;CACV,CACF;CAEA,aAAa,SAAS;EACpB,GAAI,aAAa,UAAU,CAAC;EAC5B,wBAAwB;GACtB,MAAM;GACN;GACA,kBAAkB,QAAQ;GAC1B,mBAAmB,QAAQ;GAC3B,GAAI,QAAQ,kBAAkB,KAAA,KAAa,EACzC,gBAAgB,QAAQ,cAC1B;GACA,GAAI,QAAQ,eAAe,KAAA,KAAa,EACtC,aAAa,QAAQ,WACvB;EACF;CACF;CAEA,OAAO;AAMT;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuFA,SAAgB,kBAAkB,SAAkC;CAClE,MAAM,OAAO;CACb,MAAM,gBAAA,GAAeD,sBAAAA,KAAAA,CACnB,QAAQ,SAIR;EACE;EACA,aAAa;EACb,QAAQE,cAAAA;CACV,CACF;CAEA,aAAa,SAAS;EACpB,GAAI,aAAa,UAAU,CAAC;EAC5B,wBAAwB;GACtB,MAAM;GACN;GACA,kBAAkB,QAAQ;GAC1B,mBAAmB,QAAQ;GAC3B,GAAI,QAAQ,kBAAkB,KAAA,KAAa,EACzC,gBAAgB,QAAQ,cAC1B;EACF;CACF;CAEA,OAAO;AAMT"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory.cjs","names":["Memory20250818CommandSchema"],"sources":["../../src/tools/memory.ts"],"sourcesContent":["import Anthropic from \"@anthropic-ai/sdk\";\nimport { tool } from \"@langchain/core/tools\";\nimport type { DynamicStructuredTool, ToolRuntime } from \"@langchain/core/tools\";\n\nimport {\n Memory20250818CommandSchema,\n type MemoryTool20250818Options,\n type Memory20250818Command,\n} from \"./types.js\";\n\n/**\n * Creates an Anthropic memory tool that can be used with ChatAnthropic.\n *\n * The memory tool enables Claude to store and retrieve information across conversations\n * through a memory file directory. Claude can create, read, update, and delete files that\n * persist between sessions, allowing it to build knowledge over time without keeping\n * everything in the context window.\n *\n * @example\n * ```typescript\n * import { ChatAnthropic, memory_20250818 } from \"@langchain/anthropic\";\n *\n * const llm = new ChatAnthropic({\n * model: \"claude-sonnet-4-5-20250929\"\n * });\n *\n * const memory = memory_20250818({\n * execute: async (args) => {\n * // handle memory command execution\n * // ...\n * },\n * });\n * const llmWithMemory = llm.bindTools([memory]);\n *\n * const response = await llmWithMemory.invoke(\"Remember that I like Python\");\n * ```\n *\n * @param options - Optional configuration for the memory tool (currently unused)\n * @param options.execute - Optional execute function that handles memory command execution.\n * @returns The memory tool object that can be passed to `bindTools`\n *\n * @see https://docs.anthropic.com/en/docs/agents-and-tools/tool-use/memory-tool\n */\nexport function memory_20250818(options?: MemoryTool20250818Options) {\n const memoryTool = tool(\n options?.execute as (\n input: unknown,\n runtime: ToolRuntime<unknown, unknown>\n ) => string | Promise<string>,\n {\n name: \"memory\",\n schema: Memory20250818CommandSchema,\n }\n );\n\n memoryTool.extras = {\n ...(memoryTool.extras ?? {}),\n providerToolDefinition: {\n type: \"memory_20250818\",\n name: \"memory\",\n } satisfies Anthropic.Beta.BetaMemoryTool20250818,\n };\n\n return memoryTool as DynamicStructuredTool<\n typeof Memory20250818CommandSchema,\n Memory20250818Command,\n unknown,\n string | Promise<string>\n >;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2CA,SAAgB,gBAAgB,SAAqC;CACnE,MAAM,cAAA,
|
|
1
|
+
{"version":3,"file":"memory.cjs","names":["tool","Memory20250818CommandSchema"],"sources":["../../src/tools/memory.ts"],"sourcesContent":["import Anthropic from \"@anthropic-ai/sdk\";\nimport { tool } from \"@langchain/core/tools\";\nimport type { DynamicStructuredTool, ToolRuntime } from \"@langchain/core/tools\";\n\nimport {\n Memory20250818CommandSchema,\n type MemoryTool20250818Options,\n type Memory20250818Command,\n} from \"./types.js\";\n\n/**\n * Creates an Anthropic memory tool that can be used with ChatAnthropic.\n *\n * The memory tool enables Claude to store and retrieve information across conversations\n * through a memory file directory. Claude can create, read, update, and delete files that\n * persist between sessions, allowing it to build knowledge over time without keeping\n * everything in the context window.\n *\n * @example\n * ```typescript\n * import { ChatAnthropic, memory_20250818 } from \"@langchain/anthropic\";\n *\n * const llm = new ChatAnthropic({\n * model: \"claude-sonnet-4-5-20250929\"\n * });\n *\n * const memory = memory_20250818({\n * execute: async (args) => {\n * // handle memory command execution\n * // ...\n * },\n * });\n * const llmWithMemory = llm.bindTools([memory]);\n *\n * const response = await llmWithMemory.invoke(\"Remember that I like Python\");\n * ```\n *\n * @param options - Optional configuration for the memory tool (currently unused)\n * @param options.execute - Optional execute function that handles memory command execution.\n * @returns The memory tool object that can be passed to `bindTools`\n *\n * @see https://docs.anthropic.com/en/docs/agents-and-tools/tool-use/memory-tool\n */\nexport function memory_20250818(options?: MemoryTool20250818Options) {\n const memoryTool = tool(\n options?.execute as (\n input: unknown,\n runtime: ToolRuntime<unknown, unknown>\n ) => string | Promise<string>,\n {\n name: \"memory\",\n schema: Memory20250818CommandSchema,\n }\n );\n\n memoryTool.extras = {\n ...(memoryTool.extras ?? {}),\n providerToolDefinition: {\n type: \"memory_20250818\",\n name: \"memory\",\n } satisfies Anthropic.Beta.BetaMemoryTool20250818,\n };\n\n return memoryTool as DynamicStructuredTool<\n typeof Memory20250818CommandSchema,\n Memory20250818Command,\n unknown,\n string | Promise<string>\n >;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2CA,SAAgB,gBAAgB,SAAqC;CACnE,MAAM,cAAA,GAAaA,sBAAAA,KAAAA,CACjB,SAAS,SAIT;EACE,MAAM;EACN,QAAQC,cAAAA;CACV,CACF;CAEA,WAAW,SAAS;EAClB,GAAI,WAAW,UAAU,CAAC;EAC1B,wBAAwB;GACtB,MAAM;GACN,MAAM;EACR;CACF;CAEA,OAAO;AAMT"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"textEditor.cjs","names":["TextEditor20250728CommandSchema"],"sources":["../../src/tools/textEditor.ts"],"sourcesContent":["import Anthropic from \"@anthropic-ai/sdk\";\nimport { tool } from \"@langchain/core/tools\";\nimport type { DynamicStructuredTool, ToolRuntime } from \"@langchain/core/tools\";\n\nimport {\n TextEditor20250728CommandSchema,\n type TextEditor20250728Command,\n} from \"./types.js\";\n\n/**\n * Options for the text editor tool (Claude 4.x version).\n */\nexport interface TextEditor20250728Options {\n /**\n * Optional execute function that handles text editor command execution.\n * This function receives the command input and should return the result.\n */\n execute?: (args: TextEditor20250728Command) => string | Promise<string>;\n /**\n * Optional maximum characters to return when viewing files.\n * If the file content exceeds this limit, it will be truncated.\n */\n maxCharacters?: number;\n}\n\n/**\n * Creates an Anthropic text editor tool for Claude 4.x models that can view and modify text files.\n *\n * The text editor tool enables Claude to view and modify text files, helping debug, fix,\n * and improve code or other text documents. Claude can directly interact with files,\n * providing hands-on assistance rather than just suggesting changes.\n *\n * Available commands:\n * - `view`: Examine file contents or list directory contents\n * - `str_replace`: Replace specific text in a file\n * - `create`: Create a new file with specified content\n * - `insert`: Insert text at a specific line number\n *\n * @example\n * ```typescript\n * import { ChatAnthropic, tools } from \"@langchain/anthropic\";\n * import * as fs from \"fs\";\n *\n * const llm = new ChatAnthropic({\n * model: \"claude-sonnet-4-5-20250929\",\n * });\n *\n * const textEditor = tools.textEditor_20250728({\n * execute: async (args) => {\n * if (args.command === \"view\") {\n * const content = fs.readFileSync(args.path, \"utf-8\");\n * return content.split(\"\\n\").map((line, i) => `${i + 1}: ${line}`).join(\"\\n\");\n * }\n * if (args.command === \"str_replace\") {\n * let content = fs.readFileSync(args.path, \"utf-8\");\n * content = content.replace(args.old_str!, args.new_str!);\n * fs.writeFileSync(args.path, content);\n * return \"Successfully replaced text.\";\n * }\n * // Handle other commands...\n * return \"Command executed\";\n * },\n * maxCharacters: 10000,\n * });\n *\n * const llmWithEditor = llm.bindTools([textEditor]);\n * const response = await llmWithEditor.invoke(\n * \"There's a syntax error in my primes.py file. Can you help me fix it?\"\n * );\n * ```\n *\n * @param options - Configuration options for the text editor tool\n * @param options.execute - Function that handles text editor command execution\n * @param options.maxCharacters - Maximum characters to return when viewing files\n * @returns The text editor tool object that can be passed to `bindTools`\n *\n * @see https://docs.anthropic.com/en/docs/agents-and-tools/tool-use/text-editor-tool\n */\nexport function textEditor_20250728(options?: TextEditor20250728Options) {\n const name = \"str_replace_based_edit_tool\";\n const textEditorTool = tool(\n options?.execute as (\n input: unknown,\n runtime: ToolRuntime<unknown, unknown>\n ) => string | Promise<string>,\n {\n name,\n description: \"A tool for editing text files\",\n schema: TextEditor20250728CommandSchema,\n }\n );\n\n textEditorTool.extras = {\n ...(textEditorTool.extras ?? {}),\n providerToolDefinition: {\n type: \"text_editor_20250728\",\n name,\n ...(options?.maxCharacters !== undefined && {\n max_characters: options.maxCharacters,\n }),\n } satisfies Anthropic.Beta.Messages.BetaToolTextEditor20250728,\n };\n\n return textEditorTool as DynamicStructuredTool<\n typeof TextEditor20250728CommandSchema,\n TextEditor20250728Command,\n unknown,\n string | Promise<string>\n >;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8EA,SAAgB,oBAAoB,SAAqC;CACvE,MAAM,OAAO;CACb,MAAM,kBAAA,
|
|
1
|
+
{"version":3,"file":"textEditor.cjs","names":["tool","TextEditor20250728CommandSchema"],"sources":["../../src/tools/textEditor.ts"],"sourcesContent":["import Anthropic from \"@anthropic-ai/sdk\";\nimport { tool } from \"@langchain/core/tools\";\nimport type { DynamicStructuredTool, ToolRuntime } from \"@langchain/core/tools\";\n\nimport {\n TextEditor20250728CommandSchema,\n type TextEditor20250728Command,\n} from \"./types.js\";\n\n/**\n * Options for the text editor tool (Claude 4.x version).\n */\nexport interface TextEditor20250728Options {\n /**\n * Optional execute function that handles text editor command execution.\n * This function receives the command input and should return the result.\n */\n execute?: (args: TextEditor20250728Command) => string | Promise<string>;\n /**\n * Optional maximum characters to return when viewing files.\n * If the file content exceeds this limit, it will be truncated.\n */\n maxCharacters?: number;\n}\n\n/**\n * Creates an Anthropic text editor tool for Claude 4.x models that can view and modify text files.\n *\n * The text editor tool enables Claude to view and modify text files, helping debug, fix,\n * and improve code or other text documents. Claude can directly interact with files,\n * providing hands-on assistance rather than just suggesting changes.\n *\n * Available commands:\n * - `view`: Examine file contents or list directory contents\n * - `str_replace`: Replace specific text in a file\n * - `create`: Create a new file with specified content\n * - `insert`: Insert text at a specific line number\n *\n * @example\n * ```typescript\n * import { ChatAnthropic, tools } from \"@langchain/anthropic\";\n * import * as fs from \"fs\";\n *\n * const llm = new ChatAnthropic({\n * model: \"claude-sonnet-4-5-20250929\",\n * });\n *\n * const textEditor = tools.textEditor_20250728({\n * execute: async (args) => {\n * if (args.command === \"view\") {\n * const content = fs.readFileSync(args.path, \"utf-8\");\n * return content.split(\"\\n\").map((line, i) => `${i + 1}: ${line}`).join(\"\\n\");\n * }\n * if (args.command === \"str_replace\") {\n * let content = fs.readFileSync(args.path, \"utf-8\");\n * content = content.replace(args.old_str!, args.new_str!);\n * fs.writeFileSync(args.path, content);\n * return \"Successfully replaced text.\";\n * }\n * // Handle other commands...\n * return \"Command executed\";\n * },\n * maxCharacters: 10000,\n * });\n *\n * const llmWithEditor = llm.bindTools([textEditor]);\n * const response = await llmWithEditor.invoke(\n * \"There's a syntax error in my primes.py file. Can you help me fix it?\"\n * );\n * ```\n *\n * @param options - Configuration options for the text editor tool\n * @param options.execute - Function that handles text editor command execution\n * @param options.maxCharacters - Maximum characters to return when viewing files\n * @returns The text editor tool object that can be passed to `bindTools`\n *\n * @see https://docs.anthropic.com/en/docs/agents-and-tools/tool-use/text-editor-tool\n */\nexport function textEditor_20250728(options?: TextEditor20250728Options) {\n const name = \"str_replace_based_edit_tool\";\n const textEditorTool = tool(\n options?.execute as (\n input: unknown,\n runtime: ToolRuntime<unknown, unknown>\n ) => string | Promise<string>,\n {\n name,\n description: \"A tool for editing text files\",\n schema: TextEditor20250728CommandSchema,\n }\n );\n\n textEditorTool.extras = {\n ...(textEditorTool.extras ?? {}),\n providerToolDefinition: {\n type: \"text_editor_20250728\",\n name,\n ...(options?.maxCharacters !== undefined && {\n max_characters: options.maxCharacters,\n }),\n } satisfies Anthropic.Beta.Messages.BetaToolTextEditor20250728,\n };\n\n return textEditorTool as DynamicStructuredTool<\n typeof TextEditor20250728CommandSchema,\n TextEditor20250728Command,\n unknown,\n string | Promise<string>\n >;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8EA,SAAgB,oBAAoB,SAAqC;CACvE,MAAM,OAAO;CACb,MAAM,kBAAA,GAAiBA,sBAAAA,KAAAA,CACrB,SAAS,SAIT;EACE;EACA,aAAa;EACb,QAAQC,cAAAA;CACV,CACF;CAEA,eAAe,SAAS;EACtB,GAAI,eAAe,UAAU,CAAC;EAC9B,wBAAwB;GACtB,MAAM;GACN;GACA,GAAI,SAAS,kBAAkB,KAAA,KAAa,EAC1C,gBAAgB,QAAQ,cAC1B;EACF;CACF;CAEA,OAAO;AAMT"}
|
package/dist/utils/content.cjs
CHANGED
|
@@ -90,56 +90,58 @@ const standardContentBlockConverter = {
|
|
|
90
90
|
..."title" in (block.metadata ?? {}) ? { title: block.metadata.title } : {}
|
|
91
91
|
};
|
|
92
92
|
throw new Error(`Unsupported file mime type for file url source: ${block.mime_type}`);
|
|
93
|
-
} else if (block.source_type === "text")
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
type: "
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
type: "
|
|
127
|
-
|
|
128
|
-
type: "
|
|
129
|
-
|
|
130
|
-
type: "
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
93
|
+
} else if (block.source_type === "text") {
|
|
94
|
+
if (mime_type === "text/plain" || mime_type === "") return {
|
|
95
|
+
type: "document",
|
|
96
|
+
source: {
|
|
97
|
+
type: "text",
|
|
98
|
+
data: block.text,
|
|
99
|
+
media_type: block.mime_type ?? ""
|
|
100
|
+
},
|
|
101
|
+
..."cache_control" in (block.metadata ?? {}) ? { cache_control: block.metadata.cache_control } : {},
|
|
102
|
+
..."citations" in (block.metadata ?? {}) ? { citations: block.metadata.citations } : {},
|
|
103
|
+
..."context" in (block.metadata ?? {}) ? { context: block.metadata.context } : {},
|
|
104
|
+
..."title" in (block.metadata ?? {}) ? { title: block.metadata.title } : {}
|
|
105
|
+
};
|
|
106
|
+
else throw new Error(`Unsupported file mime type for file text source: ${block.mime_type}`);
|
|
107
|
+
} else if (block.source_type === "base64") {
|
|
108
|
+
if (mime_type === "application/pdf" || mime_type === "") return {
|
|
109
|
+
type: "document",
|
|
110
|
+
source: {
|
|
111
|
+
type: "base64",
|
|
112
|
+
data: block.data,
|
|
113
|
+
media_type: "application/pdf"
|
|
114
|
+
},
|
|
115
|
+
..."cache_control" in (block.metadata ?? {}) ? { cache_control: block.metadata.cache_control } : {},
|
|
116
|
+
..."citations" in (block.metadata ?? {}) ? { citations: block.metadata.citations } : {},
|
|
117
|
+
..."context" in (block.metadata ?? {}) ? { context: block.metadata.context } : {},
|
|
118
|
+
..."title" in (block.metadata ?? {}) ? { title: block.metadata.title } : {}
|
|
119
|
+
};
|
|
120
|
+
else if ([
|
|
121
|
+
"image/jpeg",
|
|
122
|
+
"image/png",
|
|
123
|
+
"image/gif",
|
|
124
|
+
"image/webp"
|
|
125
|
+
].includes(mime_type)) return {
|
|
126
|
+
type: "document",
|
|
127
|
+
source: {
|
|
128
|
+
type: "content",
|
|
129
|
+
content: [{
|
|
130
|
+
type: "image",
|
|
131
|
+
source: {
|
|
132
|
+
type: "base64",
|
|
133
|
+
data: block.data,
|
|
134
|
+
media_type: mime_type
|
|
135
|
+
}
|
|
136
|
+
}]
|
|
137
|
+
},
|
|
138
|
+
..."cache_control" in (block.metadata ?? {}) ? { cache_control: block.metadata.cache_control } : {},
|
|
139
|
+
..."citations" in (block.metadata ?? {}) ? { citations: block.metadata.citations } : {},
|
|
140
|
+
..."context" in (block.metadata ?? {}) ? { context: block.metadata.context } : {},
|
|
141
|
+
..."title" in (block.metadata ?? {}) ? { title: block.metadata.title } : {}
|
|
142
|
+
};
|
|
143
|
+
else throw new Error(`Unsupported file mime type for file base64 source: ${block.mime_type}`);
|
|
144
|
+
} else throw new Error(`Unsupported file source type: ${block.source_type}`);
|
|
143
145
|
}
|
|
144
146
|
};
|
|
145
147
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content.cjs","names":[],"sources":["../../src/utils/content.ts"],"sourcesContent":["import type Anthropic from \"@anthropic-ai/sdk\";\nimport {\n parseBase64DataUrl,\n type StandardContentBlockConverter,\n} from \"@langchain/core/messages\";\n\nexport function _isAnthropicThinkingBlock(\n block: unknown\n): block is Anthropic.Messages.ThinkingBlockParam {\n return (\n typeof block === \"object\" &&\n block !== null &&\n \"type\" in block &&\n block.type === \"thinking\"\n );\n}\n\nexport function _isAnthropicRedactedThinkingBlock(\n block: unknown\n): block is Anthropic.Messages.RedactedThinkingBlockParam {\n return (\n typeof block === \"object\" &&\n block !== null &&\n \"type\" in block &&\n block.type === \"redacted_thinking\"\n );\n}\n\nexport function _isAnthropicCompactionBlock(\n block: unknown\n): block is Anthropic.Beta.BetaCompactionBlockParam {\n return (\n typeof block === \"object\" &&\n block !== null &&\n \"type\" in block &&\n block.type === \"compaction\"\n );\n}\n\nexport function _isAnthropicSearchResultBlock(\n block: unknown\n): block is Anthropic.Beta.BetaSearchResultBlockParam {\n return (\n typeof block === \"object\" &&\n block !== null &&\n \"type\" in block &&\n block.type === \"search_result\"\n );\n}\n\nexport function _isAnthropicImageBlockParam(\n block: unknown\n): block is Anthropic.Messages.ImageBlockParam {\n if (typeof block !== \"object\" || block == null) {\n return false;\n }\n if (!(\"type\" in block) || block.type !== \"image\") {\n return false;\n }\n\n if (\n !(\"source\" in block) ||\n typeof block.source !== \"object\" ||\n block.source == null\n ) {\n return false;\n }\n\n if (!(\"type\" in block.source)) {\n return false;\n }\n\n if (block.source.type === \"base64\") {\n if (!(\"media_type\" in block.source)) {\n return false;\n }\n\n if (typeof block.source.media_type !== \"string\") {\n return false;\n }\n\n if (!(\"data\" in block.source)) {\n return false;\n }\n\n if (typeof block.source.data !== \"string\") {\n return false;\n }\n\n return true;\n }\n\n if (block.source.type === \"url\") {\n if (!(\"url\" in block.source)) {\n return false;\n }\n\n if (typeof block.source.url !== \"string\") {\n return false;\n }\n\n return true;\n }\n\n return false;\n}\n\nexport const standardContentBlockConverter: StandardContentBlockConverter<{\n text: Anthropic.Messages.TextBlockParam;\n image: Anthropic.Messages.ImageBlockParam;\n file: Anthropic.Messages.DocumentBlockParam;\n}> = {\n providerName: \"anthropic\",\n\n fromStandardTextBlock(block): Anthropic.Messages.TextBlockParam {\n return {\n type: \"text\",\n text: block.text,\n ...(\"citations\" in (block.metadata ?? {})\n ? { citations: block.metadata!.citations }\n : {}),\n ...(\"cache_control\" in (block.metadata ?? {})\n ? { cache_control: block.metadata!.cache_control }\n : {}),\n } as Anthropic.Messages.TextBlockParam;\n },\n\n fromStandardImageBlock(block): Anthropic.Messages.ImageBlockParam {\n if (block.source_type === \"url\") {\n const data = parseBase64DataUrl({\n dataUrl: block.url,\n asTypedArray: false,\n });\n if (data) {\n return {\n type: \"image\",\n source: {\n type: \"base64\",\n data: data.data,\n media_type: data.mime_type,\n },\n ...(\"cache_control\" in (block.metadata ?? {})\n ? { cache_control: block.metadata!.cache_control }\n : {}),\n } as Anthropic.Messages.ImageBlockParam;\n } else {\n return {\n type: \"image\",\n source: {\n type: \"url\",\n url: block.url,\n },\n ...(\"cache_control\" in (block.metadata ?? {})\n ? { cache_control: block.metadata!.cache_control }\n : {}),\n } as Anthropic.Messages.ImageBlockParam;\n }\n } else {\n if (block.source_type === \"base64\") {\n return {\n type: \"image\",\n source: {\n type: \"base64\",\n data: block.data,\n media_type: block.mime_type ?? \"\",\n },\n ...(\"cache_control\" in (block.metadata ?? {})\n ? { cache_control: block.metadata!.cache_control }\n : {}),\n } as Anthropic.Messages.ImageBlockParam;\n } else {\n throw new Error(`Unsupported image source type: ${block.source_type}`);\n }\n }\n },\n\n fromStandardFileBlock(block): Anthropic.Messages.DocumentBlockParam {\n const mime_type = (block.mime_type ?? \"\").split(\";\")[0];\n\n if (block.source_type === \"url\") {\n if (mime_type === \"application/pdf\" || mime_type === \"\") {\n return {\n type: \"document\",\n source: {\n type: \"url\",\n url: block.url,\n },\n ...(\"cache_control\" in (block.metadata ?? {})\n ? { cache_control: block.metadata!.cache_control }\n : {}),\n ...(\"citations\" in (block.metadata ?? {})\n ? { citations: block.metadata!.citations }\n : {}),\n ...(\"context\" in (block.metadata ?? {})\n ? { context: block.metadata!.context }\n : {}),\n ...(\"title\" in (block.metadata ?? {})\n ? { title: block.metadata!.title }\n : {}),\n } as Anthropic.Messages.DocumentBlockParam;\n }\n throw new Error(\n `Unsupported file mime type for file url source: ${block.mime_type}`\n );\n } else if (block.source_type === \"text\") {\n if (mime_type === \"text/plain\" || mime_type === \"\") {\n return {\n type: \"document\",\n source: {\n type: \"text\",\n data: block.text,\n media_type: block.mime_type ?? \"\",\n },\n ...(\"cache_control\" in (block.metadata ?? {})\n ? { cache_control: block.metadata!.cache_control }\n : {}),\n ...(\"citations\" in (block.metadata ?? {})\n ? { citations: block.metadata!.citations }\n : {}),\n ...(\"context\" in (block.metadata ?? {})\n ? { context: block.metadata!.context }\n : {}),\n ...(\"title\" in (block.metadata ?? {})\n ? { title: block.metadata!.title }\n : {}),\n } as Anthropic.Messages.DocumentBlockParam;\n } else {\n throw new Error(\n `Unsupported file mime type for file text source: ${block.mime_type}`\n );\n }\n } else if (block.source_type === \"base64\") {\n if (mime_type === \"application/pdf\" || mime_type === \"\") {\n return {\n type: \"document\",\n source: {\n type: \"base64\",\n data: block.data,\n media_type: \"application/pdf\",\n },\n ...(\"cache_control\" in (block.metadata ?? {})\n ? { cache_control: block.metadata!.cache_control }\n : {}),\n ...(\"citations\" in (block.metadata ?? {})\n ? { citations: block.metadata!.citations }\n : {}),\n ...(\"context\" in (block.metadata ?? {})\n ? { context: block.metadata!.context }\n : {}),\n ...(\"title\" in (block.metadata ?? {})\n ? { title: block.metadata!.title }\n : {}),\n } as Anthropic.Messages.DocumentBlockParam;\n } else if (\n [\"image/jpeg\", \"image/png\", \"image/gif\", \"image/webp\"].includes(\n mime_type\n )\n ) {\n return {\n type: \"document\",\n source: {\n type: \"content\",\n content: [\n {\n type: \"image\",\n source: {\n type: \"base64\",\n data: block.data,\n media_type: mime_type as\n | \"image/jpeg\"\n | \"image/png\"\n | \"image/gif\"\n | \"image/webp\",\n },\n },\n ],\n },\n ...(\"cache_control\" in (block.metadata ?? {})\n ? { cache_control: block.metadata!.cache_control }\n : {}),\n ...(\"citations\" in (block.metadata ?? {})\n ? { citations: block.metadata!.citations }\n : {}),\n ...(\"context\" in (block.metadata ?? {})\n ? { context: block.metadata!.context }\n : {}),\n ...(\"title\" in (block.metadata ?? {})\n ? { title: block.metadata!.title }\n : {}),\n } as Anthropic.Messages.DocumentBlockParam;\n } else {\n throw new Error(\n `Unsupported file mime type for file base64 source: ${block.mime_type}`\n );\n }\n } else {\n throw new Error(`Unsupported file source type: ${block.source_type}`);\n }\n },\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"content.cjs","names":["parseBase64DataUrl"],"sources":["../../src/utils/content.ts"],"sourcesContent":["import type Anthropic from \"@anthropic-ai/sdk\";\nimport {\n parseBase64DataUrl,\n type StandardContentBlockConverter,\n} from \"@langchain/core/messages\";\n\nexport function _isAnthropicThinkingBlock(\n block: unknown\n): block is Anthropic.Messages.ThinkingBlockParam {\n return (\n typeof block === \"object\" &&\n block !== null &&\n \"type\" in block &&\n block.type === \"thinking\"\n );\n}\n\nexport function _isAnthropicRedactedThinkingBlock(\n block: unknown\n): block is Anthropic.Messages.RedactedThinkingBlockParam {\n return (\n typeof block === \"object\" &&\n block !== null &&\n \"type\" in block &&\n block.type === \"redacted_thinking\"\n );\n}\n\nexport function _isAnthropicCompactionBlock(\n block: unknown\n): block is Anthropic.Beta.BetaCompactionBlockParam {\n return (\n typeof block === \"object\" &&\n block !== null &&\n \"type\" in block &&\n block.type === \"compaction\"\n );\n}\n\nexport function _isAnthropicSearchResultBlock(\n block: unknown\n): block is Anthropic.Beta.BetaSearchResultBlockParam {\n return (\n typeof block === \"object\" &&\n block !== null &&\n \"type\" in block &&\n block.type === \"search_result\"\n );\n}\n\nexport function _isAnthropicImageBlockParam(\n block: unknown\n): block is Anthropic.Messages.ImageBlockParam {\n if (typeof block !== \"object\" || block == null) {\n return false;\n }\n if (!(\"type\" in block) || block.type !== \"image\") {\n return false;\n }\n\n if (\n !(\"source\" in block) ||\n typeof block.source !== \"object\" ||\n block.source == null\n ) {\n return false;\n }\n\n if (!(\"type\" in block.source)) {\n return false;\n }\n\n if (block.source.type === \"base64\") {\n if (!(\"media_type\" in block.source)) {\n return false;\n }\n\n if (typeof block.source.media_type !== \"string\") {\n return false;\n }\n\n if (!(\"data\" in block.source)) {\n return false;\n }\n\n if (typeof block.source.data !== \"string\") {\n return false;\n }\n\n return true;\n }\n\n if (block.source.type === \"url\") {\n if (!(\"url\" in block.source)) {\n return false;\n }\n\n if (typeof block.source.url !== \"string\") {\n return false;\n }\n\n return true;\n }\n\n return false;\n}\n\nexport const standardContentBlockConverter: StandardContentBlockConverter<{\n text: Anthropic.Messages.TextBlockParam;\n image: Anthropic.Messages.ImageBlockParam;\n file: Anthropic.Messages.DocumentBlockParam;\n}> = {\n providerName: \"anthropic\",\n\n fromStandardTextBlock(block): Anthropic.Messages.TextBlockParam {\n return {\n type: \"text\",\n text: block.text,\n ...(\"citations\" in (block.metadata ?? {})\n ? { citations: block.metadata!.citations }\n : {}),\n ...(\"cache_control\" in (block.metadata ?? {})\n ? { cache_control: block.metadata!.cache_control }\n : {}),\n } as Anthropic.Messages.TextBlockParam;\n },\n\n fromStandardImageBlock(block): Anthropic.Messages.ImageBlockParam {\n if (block.source_type === \"url\") {\n const data = parseBase64DataUrl({\n dataUrl: block.url,\n asTypedArray: false,\n });\n if (data) {\n return {\n type: \"image\",\n source: {\n type: \"base64\",\n data: data.data,\n media_type: data.mime_type,\n },\n ...(\"cache_control\" in (block.metadata ?? {})\n ? { cache_control: block.metadata!.cache_control }\n : {}),\n } as Anthropic.Messages.ImageBlockParam;\n } else {\n return {\n type: \"image\",\n source: {\n type: \"url\",\n url: block.url,\n },\n ...(\"cache_control\" in (block.metadata ?? {})\n ? { cache_control: block.metadata!.cache_control }\n : {}),\n } as Anthropic.Messages.ImageBlockParam;\n }\n } else {\n if (block.source_type === \"base64\") {\n return {\n type: \"image\",\n source: {\n type: \"base64\",\n data: block.data,\n media_type: block.mime_type ?? \"\",\n },\n ...(\"cache_control\" in (block.metadata ?? {})\n ? { cache_control: block.metadata!.cache_control }\n : {}),\n } as Anthropic.Messages.ImageBlockParam;\n } else {\n throw new Error(`Unsupported image source type: ${block.source_type}`);\n }\n }\n },\n\n fromStandardFileBlock(block): Anthropic.Messages.DocumentBlockParam {\n const mime_type = (block.mime_type ?? \"\").split(\";\")[0];\n\n if (block.source_type === \"url\") {\n if (mime_type === \"application/pdf\" || mime_type === \"\") {\n return {\n type: \"document\",\n source: {\n type: \"url\",\n url: block.url,\n },\n ...(\"cache_control\" in (block.metadata ?? {})\n ? { cache_control: block.metadata!.cache_control }\n : {}),\n ...(\"citations\" in (block.metadata ?? {})\n ? { citations: block.metadata!.citations }\n : {}),\n ...(\"context\" in (block.metadata ?? {})\n ? { context: block.metadata!.context }\n : {}),\n ...(\"title\" in (block.metadata ?? {})\n ? { title: block.metadata!.title }\n : {}),\n } as Anthropic.Messages.DocumentBlockParam;\n }\n throw new Error(\n `Unsupported file mime type for file url source: ${block.mime_type}`\n );\n } else if (block.source_type === \"text\") {\n if (mime_type === \"text/plain\" || mime_type === \"\") {\n return {\n type: \"document\",\n source: {\n type: \"text\",\n data: block.text,\n media_type: block.mime_type ?? \"\",\n },\n ...(\"cache_control\" in (block.metadata ?? {})\n ? { cache_control: block.metadata!.cache_control }\n : {}),\n ...(\"citations\" in (block.metadata ?? {})\n ? { citations: block.metadata!.citations }\n : {}),\n ...(\"context\" in (block.metadata ?? {})\n ? { context: block.metadata!.context }\n : {}),\n ...(\"title\" in (block.metadata ?? {})\n ? { title: block.metadata!.title }\n : {}),\n } as Anthropic.Messages.DocumentBlockParam;\n } else {\n throw new Error(\n `Unsupported file mime type for file text source: ${block.mime_type}`\n );\n }\n } else if (block.source_type === \"base64\") {\n if (mime_type === \"application/pdf\" || mime_type === \"\") {\n return {\n type: \"document\",\n source: {\n type: \"base64\",\n data: block.data,\n media_type: \"application/pdf\",\n },\n ...(\"cache_control\" in (block.metadata ?? {})\n ? { cache_control: block.metadata!.cache_control }\n : {}),\n ...(\"citations\" in (block.metadata ?? {})\n ? { citations: block.metadata!.citations }\n : {}),\n ...(\"context\" in (block.metadata ?? {})\n ? { context: block.metadata!.context }\n : {}),\n ...(\"title\" in (block.metadata ?? {})\n ? { title: block.metadata!.title }\n : {}),\n } as Anthropic.Messages.DocumentBlockParam;\n } else if (\n [\"image/jpeg\", \"image/png\", \"image/gif\", \"image/webp\"].includes(\n mime_type\n )\n ) {\n return {\n type: \"document\",\n source: {\n type: \"content\",\n content: [\n {\n type: \"image\",\n source: {\n type: \"base64\",\n data: block.data,\n media_type: mime_type as\n | \"image/jpeg\"\n | \"image/png\"\n | \"image/gif\"\n | \"image/webp\",\n },\n },\n ],\n },\n ...(\"cache_control\" in (block.metadata ?? {})\n ? { cache_control: block.metadata!.cache_control }\n : {}),\n ...(\"citations\" in (block.metadata ?? {})\n ? { citations: block.metadata!.citations }\n : {}),\n ...(\"context\" in (block.metadata ?? {})\n ? { context: block.metadata!.context }\n : {}),\n ...(\"title\" in (block.metadata ?? {})\n ? { title: block.metadata!.title }\n : {}),\n } as Anthropic.Messages.DocumentBlockParam;\n } else {\n throw new Error(\n `Unsupported file mime type for file base64 source: ${block.mime_type}`\n );\n }\n } else {\n throw new Error(`Unsupported file source type: ${block.source_type}`);\n }\n },\n};\n"],"mappings":";;AAMA,SAAgB,0BACd,OACgD;CAChD,OACE,OAAO,UAAU,YACjB,UAAU,QACV,UAAU,SACV,MAAM,SAAS;AAEnB;AAEA,SAAgB,kCACd,OACwD;CACxD,OACE,OAAO,UAAU,YACjB,UAAU,QACV,UAAU,SACV,MAAM,SAAS;AAEnB;AAEA,SAAgB,4BACd,OACkD;CAClD,OACE,OAAO,UAAU,YACjB,UAAU,QACV,UAAU,SACV,MAAM,SAAS;AAEnB;AAEA,SAAgB,8BACd,OACoD;CACpD,OACE,OAAO,UAAU,YACjB,UAAU,QACV,UAAU,SACV,MAAM,SAAS;AAEnB;AAEA,SAAgB,4BACd,OAC6C;CAC7C,IAAI,OAAO,UAAU,YAAY,SAAS,MACxC,OAAO;CAET,IAAI,EAAE,UAAU,UAAU,MAAM,SAAS,SACvC,OAAO;CAGT,IACE,EAAE,YAAY,UACd,OAAO,MAAM,WAAW,YACxB,MAAM,UAAU,MAEhB,OAAO;CAGT,IAAI,EAAE,UAAU,MAAM,SACpB,OAAO;CAGT,IAAI,MAAM,OAAO,SAAS,UAAU;EAClC,IAAI,EAAE,gBAAgB,MAAM,SAC1B,OAAO;EAGT,IAAI,OAAO,MAAM,OAAO,eAAe,UACrC,OAAO;EAGT,IAAI,EAAE,UAAU,MAAM,SACpB,OAAO;EAGT,IAAI,OAAO,MAAM,OAAO,SAAS,UAC/B,OAAO;EAGT,OAAO;CACT;CAEA,IAAI,MAAM,OAAO,SAAS,OAAO;EAC/B,IAAI,EAAE,SAAS,MAAM,SACnB,OAAO;EAGT,IAAI,OAAO,MAAM,OAAO,QAAQ,UAC9B,OAAO;EAGT,OAAO;CACT;CAEA,OAAO;AACT;AAEA,MAAa,gCAIR;CACH,cAAc;CAEd,sBAAsB,OAA0C;EAC9D,OAAO;GACL,MAAM;GACN,MAAM,MAAM;GACZ,GAAI,gBAAgB,MAAM,YAAY,CAAC,KACnC,EAAE,WAAW,MAAM,SAAU,UAAU,IACvC,CAAC;GACL,GAAI,oBAAoB,MAAM,YAAY,CAAC,KACvC,EAAE,eAAe,MAAM,SAAU,cAAc,IAC/C,CAAC;EACP;CACF;CAEA,uBAAuB,OAA2C;EAChE,IAAI,MAAM,gBAAgB,OAAO;GAC/B,MAAM,QAAA,GAAOA,yBAAAA,mBAAAA,CAAmB;IAC9B,SAAS,MAAM;IACf,cAAc;GAChB,CAAC;GACD,IAAI,MACF,OAAO;IACL,MAAM;IACN,QAAQ;KACN,MAAM;KACN,MAAM,KAAK;KACX,YAAY,KAAK;IACnB;IACA,GAAI,oBAAoB,MAAM,YAAY,CAAC,KACvC,EAAE,eAAe,MAAM,SAAU,cAAc,IAC/C,CAAC;GACP;QAEA,OAAO;IACL,MAAM;IACN,QAAQ;KACN,MAAM;KACN,KAAK,MAAM;IACb;IACA,GAAI,oBAAoB,MAAM,YAAY,CAAC,KACvC,EAAE,eAAe,MAAM,SAAU,cAAc,IAC/C,CAAC;GACP;EAEJ,OACE,IAAI,MAAM,gBAAgB,UACxB,OAAO;GACL,MAAM;GACN,QAAQ;IACN,MAAM;IACN,MAAM,MAAM;IACZ,YAAY,MAAM,aAAa;GACjC;GACA,GAAI,oBAAoB,MAAM,YAAY,CAAC,KACvC,EAAE,eAAe,MAAM,SAAU,cAAc,IAC/C,CAAC;EACP;OAEA,MAAM,IAAI,MAAM,kCAAkC,MAAM,aAAa;CAG3E;CAEA,sBAAsB,OAA8C;EAClE,MAAM,aAAa,MAAM,aAAa,GAAA,CAAI,MAAM,GAAG,CAAC,CAAC;EAErD,IAAI,MAAM,gBAAgB,OAAO;GAC/B,IAAI,cAAc,qBAAqB,cAAc,IACnD,OAAO;IACL,MAAM;IACN,QAAQ;KACN,MAAM;KACN,KAAK,MAAM;IACb;IACA,GAAI,oBAAoB,MAAM,YAAY,CAAC,KACvC,EAAE,eAAe,MAAM,SAAU,cAAc,IAC/C,CAAC;IACL,GAAI,gBAAgB,MAAM,YAAY,CAAC,KACnC,EAAE,WAAW,MAAM,SAAU,UAAU,IACvC,CAAC;IACL,GAAI,cAAc,MAAM,YAAY,CAAC,KACjC,EAAE,SAAS,MAAM,SAAU,QAAQ,IACnC,CAAC;IACL,GAAI,YAAY,MAAM,YAAY,CAAC,KAC/B,EAAE,OAAO,MAAM,SAAU,MAAM,IAC/B,CAAC;GACP;GAEF,MAAM,IAAI,MACR,mDAAmD,MAAM,WAC3D;EACF,OAAO,IAAI,MAAM,gBAAgB,QAAQ;GACvC,IAAI,cAAc,gBAAgB,cAAc,IAC9C,OAAO;IACL,MAAM;IACN,QAAQ;KACN,MAAM;KACN,MAAM,MAAM;KACZ,YAAY,MAAM,aAAa;IACjC;IACA,GAAI,oBAAoB,MAAM,YAAY,CAAC,KACvC,EAAE,eAAe,MAAM,SAAU,cAAc,IAC/C,CAAC;IACL,GAAI,gBAAgB,MAAM,YAAY,CAAC,KACnC,EAAE,WAAW,MAAM,SAAU,UAAU,IACvC,CAAC;IACL,GAAI,cAAc,MAAM,YAAY,CAAC,KACjC,EAAE,SAAS,MAAM,SAAU,QAAQ,IACnC,CAAC;IACL,GAAI,YAAY,MAAM,YAAY,CAAC,KAC/B,EAAE,OAAO,MAAM,SAAU,MAAM,IAC/B,CAAC;GACP;QAEA,MAAM,IAAI,MACR,oDAAoD,MAAM,WAC5D;EAEJ,OAAO,IAAI,MAAM,gBAAgB,UAAU;GACzC,IAAI,cAAc,qBAAqB,cAAc,IACnD,OAAO;IACL,MAAM;IACN,QAAQ;KACN,MAAM;KACN,MAAM,MAAM;KACZ,YAAY;IACd;IACA,GAAI,oBAAoB,MAAM,YAAY,CAAC,KACvC,EAAE,eAAe,MAAM,SAAU,cAAc,IAC/C,CAAC;IACL,GAAI,gBAAgB,MAAM,YAAY,CAAC,KACnC,EAAE,WAAW,MAAM,SAAU,UAAU,IACvC,CAAC;IACL,GAAI,cAAc,MAAM,YAAY,CAAC,KACjC,EAAE,SAAS,MAAM,SAAU,QAAQ,IACnC,CAAC;IACL,GAAI,YAAY,MAAM,YAAY,CAAC,KAC/B,EAAE,OAAO,MAAM,SAAU,MAAM,IAC/B,CAAC;GACP;QACK,IACL;IAAC;IAAc;IAAa;IAAa;GAAY,CAAC,CAAC,SACrD,SACF,GAEA,OAAO;IACL,MAAM;IACN,QAAQ;KACN,MAAM;KACN,SAAS,CACP;MACE,MAAM;MACN,QAAQ;OACN,MAAM;OACN,MAAM,MAAM;OACZ,YAAY;MAKd;KACF,CACF;IACF;IACA,GAAI,oBAAoB,MAAM,YAAY,CAAC,KACvC,EAAE,eAAe,MAAM,SAAU,cAAc,IAC/C,CAAC;IACL,GAAI,gBAAgB,MAAM,YAAY,CAAC,KACnC,EAAE,WAAW,MAAM,SAAU,UAAU,IACvC,CAAC;IACL,GAAI,cAAc,MAAM,YAAY,CAAC,KACjC,EAAE,SAAS,MAAM,SAAU,QAAQ,IACnC,CAAC;IACL,GAAI,YAAY,MAAM,YAAY,CAAC,KAC/B,EAAE,OAAO,MAAM,SAAU,MAAM,IAC/B,CAAC;GACP;QAEA,MAAM,IAAI,MACR,sDAAsD,MAAM,WAC9D;EAEJ,OACE,MAAM,IAAI,MAAM,iCAAiC,MAAM,aAAa;CAExE;AACF"}
|
package/dist/utils/content.js
CHANGED
|
@@ -90,56 +90,58 @@ const standardContentBlockConverter = {
|
|
|
90
90
|
..."title" in (block.metadata ?? {}) ? { title: block.metadata.title } : {}
|
|
91
91
|
};
|
|
92
92
|
throw new Error(`Unsupported file mime type for file url source: ${block.mime_type}`);
|
|
93
|
-
} else if (block.source_type === "text")
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
type: "
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
type: "
|
|
127
|
-
|
|
128
|
-
type: "
|
|
129
|
-
|
|
130
|
-
type: "
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
93
|
+
} else if (block.source_type === "text") {
|
|
94
|
+
if (mime_type === "text/plain" || mime_type === "") return {
|
|
95
|
+
type: "document",
|
|
96
|
+
source: {
|
|
97
|
+
type: "text",
|
|
98
|
+
data: block.text,
|
|
99
|
+
media_type: block.mime_type ?? ""
|
|
100
|
+
},
|
|
101
|
+
..."cache_control" in (block.metadata ?? {}) ? { cache_control: block.metadata.cache_control } : {},
|
|
102
|
+
..."citations" in (block.metadata ?? {}) ? { citations: block.metadata.citations } : {},
|
|
103
|
+
..."context" in (block.metadata ?? {}) ? { context: block.metadata.context } : {},
|
|
104
|
+
..."title" in (block.metadata ?? {}) ? { title: block.metadata.title } : {}
|
|
105
|
+
};
|
|
106
|
+
else throw new Error(`Unsupported file mime type for file text source: ${block.mime_type}`);
|
|
107
|
+
} else if (block.source_type === "base64") {
|
|
108
|
+
if (mime_type === "application/pdf" || mime_type === "") return {
|
|
109
|
+
type: "document",
|
|
110
|
+
source: {
|
|
111
|
+
type: "base64",
|
|
112
|
+
data: block.data,
|
|
113
|
+
media_type: "application/pdf"
|
|
114
|
+
},
|
|
115
|
+
..."cache_control" in (block.metadata ?? {}) ? { cache_control: block.metadata.cache_control } : {},
|
|
116
|
+
..."citations" in (block.metadata ?? {}) ? { citations: block.metadata.citations } : {},
|
|
117
|
+
..."context" in (block.metadata ?? {}) ? { context: block.metadata.context } : {},
|
|
118
|
+
..."title" in (block.metadata ?? {}) ? { title: block.metadata.title } : {}
|
|
119
|
+
};
|
|
120
|
+
else if ([
|
|
121
|
+
"image/jpeg",
|
|
122
|
+
"image/png",
|
|
123
|
+
"image/gif",
|
|
124
|
+
"image/webp"
|
|
125
|
+
].includes(mime_type)) return {
|
|
126
|
+
type: "document",
|
|
127
|
+
source: {
|
|
128
|
+
type: "content",
|
|
129
|
+
content: [{
|
|
130
|
+
type: "image",
|
|
131
|
+
source: {
|
|
132
|
+
type: "base64",
|
|
133
|
+
data: block.data,
|
|
134
|
+
media_type: mime_type
|
|
135
|
+
}
|
|
136
|
+
}]
|
|
137
|
+
},
|
|
138
|
+
..."cache_control" in (block.metadata ?? {}) ? { cache_control: block.metadata.cache_control } : {},
|
|
139
|
+
..."citations" in (block.metadata ?? {}) ? { citations: block.metadata.citations } : {},
|
|
140
|
+
..."context" in (block.metadata ?? {}) ? { context: block.metadata.context } : {},
|
|
141
|
+
..."title" in (block.metadata ?? {}) ? { title: block.metadata.title } : {}
|
|
142
|
+
};
|
|
143
|
+
else throw new Error(`Unsupported file mime type for file base64 source: ${block.mime_type}`);
|
|
144
|
+
} else throw new Error(`Unsupported file source type: ${block.source_type}`);
|
|
143
145
|
}
|
|
144
146
|
};
|
|
145
147
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content.js","names":[],"sources":["../../src/utils/content.ts"],"sourcesContent":["import type Anthropic from \"@anthropic-ai/sdk\";\nimport {\n parseBase64DataUrl,\n type StandardContentBlockConverter,\n} from \"@langchain/core/messages\";\n\nexport function _isAnthropicThinkingBlock(\n block: unknown\n): block is Anthropic.Messages.ThinkingBlockParam {\n return (\n typeof block === \"object\" &&\n block !== null &&\n \"type\" in block &&\n block.type === \"thinking\"\n );\n}\n\nexport function _isAnthropicRedactedThinkingBlock(\n block: unknown\n): block is Anthropic.Messages.RedactedThinkingBlockParam {\n return (\n typeof block === \"object\" &&\n block !== null &&\n \"type\" in block &&\n block.type === \"redacted_thinking\"\n );\n}\n\nexport function _isAnthropicCompactionBlock(\n block: unknown\n): block is Anthropic.Beta.BetaCompactionBlockParam {\n return (\n typeof block === \"object\" &&\n block !== null &&\n \"type\" in block &&\n block.type === \"compaction\"\n );\n}\n\nexport function _isAnthropicSearchResultBlock(\n block: unknown\n): block is Anthropic.Beta.BetaSearchResultBlockParam {\n return (\n typeof block === \"object\" &&\n block !== null &&\n \"type\" in block &&\n block.type === \"search_result\"\n );\n}\n\nexport function _isAnthropicImageBlockParam(\n block: unknown\n): block is Anthropic.Messages.ImageBlockParam {\n if (typeof block !== \"object\" || block == null) {\n return false;\n }\n if (!(\"type\" in block) || block.type !== \"image\") {\n return false;\n }\n\n if (\n !(\"source\" in block) ||\n typeof block.source !== \"object\" ||\n block.source == null\n ) {\n return false;\n }\n\n if (!(\"type\" in block.source)) {\n return false;\n }\n\n if (block.source.type === \"base64\") {\n if (!(\"media_type\" in block.source)) {\n return false;\n }\n\n if (typeof block.source.media_type !== \"string\") {\n return false;\n }\n\n if (!(\"data\" in block.source)) {\n return false;\n }\n\n if (typeof block.source.data !== \"string\") {\n return false;\n }\n\n return true;\n }\n\n if (block.source.type === \"url\") {\n if (!(\"url\" in block.source)) {\n return false;\n }\n\n if (typeof block.source.url !== \"string\") {\n return false;\n }\n\n return true;\n }\n\n return false;\n}\n\nexport const standardContentBlockConverter: StandardContentBlockConverter<{\n text: Anthropic.Messages.TextBlockParam;\n image: Anthropic.Messages.ImageBlockParam;\n file: Anthropic.Messages.DocumentBlockParam;\n}> = {\n providerName: \"anthropic\",\n\n fromStandardTextBlock(block): Anthropic.Messages.TextBlockParam {\n return {\n type: \"text\",\n text: block.text,\n ...(\"citations\" in (block.metadata ?? {})\n ? { citations: block.metadata!.citations }\n : {}),\n ...(\"cache_control\" in (block.metadata ?? {})\n ? { cache_control: block.metadata!.cache_control }\n : {}),\n } as Anthropic.Messages.TextBlockParam;\n },\n\n fromStandardImageBlock(block): Anthropic.Messages.ImageBlockParam {\n if (block.source_type === \"url\") {\n const data = parseBase64DataUrl({\n dataUrl: block.url,\n asTypedArray: false,\n });\n if (data) {\n return {\n type: \"image\",\n source: {\n type: \"base64\",\n data: data.data,\n media_type: data.mime_type,\n },\n ...(\"cache_control\" in (block.metadata ?? {})\n ? { cache_control: block.metadata!.cache_control }\n : {}),\n } as Anthropic.Messages.ImageBlockParam;\n } else {\n return {\n type: \"image\",\n source: {\n type: \"url\",\n url: block.url,\n },\n ...(\"cache_control\" in (block.metadata ?? {})\n ? { cache_control: block.metadata!.cache_control }\n : {}),\n } as Anthropic.Messages.ImageBlockParam;\n }\n } else {\n if (block.source_type === \"base64\") {\n return {\n type: \"image\",\n source: {\n type: \"base64\",\n data: block.data,\n media_type: block.mime_type ?? \"\",\n },\n ...(\"cache_control\" in (block.metadata ?? {})\n ? { cache_control: block.metadata!.cache_control }\n : {}),\n } as Anthropic.Messages.ImageBlockParam;\n } else {\n throw new Error(`Unsupported image source type: ${block.source_type}`);\n }\n }\n },\n\n fromStandardFileBlock(block): Anthropic.Messages.DocumentBlockParam {\n const mime_type = (block.mime_type ?? \"\").split(\";\")[0];\n\n if (block.source_type === \"url\") {\n if (mime_type === \"application/pdf\" || mime_type === \"\") {\n return {\n type: \"document\",\n source: {\n type: \"url\",\n url: block.url,\n },\n ...(\"cache_control\" in (block.metadata ?? {})\n ? { cache_control: block.metadata!.cache_control }\n : {}),\n ...(\"citations\" in (block.metadata ?? {})\n ? { citations: block.metadata!.citations }\n : {}),\n ...(\"context\" in (block.metadata ?? {})\n ? { context: block.metadata!.context }\n : {}),\n ...(\"title\" in (block.metadata ?? {})\n ? { title: block.metadata!.title }\n : {}),\n } as Anthropic.Messages.DocumentBlockParam;\n }\n throw new Error(\n `Unsupported file mime type for file url source: ${block.mime_type}`\n );\n } else if (block.source_type === \"text\") {\n if (mime_type === \"text/plain\" || mime_type === \"\") {\n return {\n type: \"document\",\n source: {\n type: \"text\",\n data: block.text,\n media_type: block.mime_type ?? \"\",\n },\n ...(\"cache_control\" in (block.metadata ?? {})\n ? { cache_control: block.metadata!.cache_control }\n : {}),\n ...(\"citations\" in (block.metadata ?? {})\n ? { citations: block.metadata!.citations }\n : {}),\n ...(\"context\" in (block.metadata ?? {})\n ? { context: block.metadata!.context }\n : {}),\n ...(\"title\" in (block.metadata ?? {})\n ? { title: block.metadata!.title }\n : {}),\n } as Anthropic.Messages.DocumentBlockParam;\n } else {\n throw new Error(\n `Unsupported file mime type for file text source: ${block.mime_type}`\n );\n }\n } else if (block.source_type === \"base64\") {\n if (mime_type === \"application/pdf\" || mime_type === \"\") {\n return {\n type: \"document\",\n source: {\n type: \"base64\",\n data: block.data,\n media_type: \"application/pdf\",\n },\n ...(\"cache_control\" in (block.metadata ?? {})\n ? { cache_control: block.metadata!.cache_control }\n : {}),\n ...(\"citations\" in (block.metadata ?? {})\n ? { citations: block.metadata!.citations }\n : {}),\n ...(\"context\" in (block.metadata ?? {})\n ? { context: block.metadata!.context }\n : {}),\n ...(\"title\" in (block.metadata ?? {})\n ? { title: block.metadata!.title }\n : {}),\n } as Anthropic.Messages.DocumentBlockParam;\n } else if (\n [\"image/jpeg\", \"image/png\", \"image/gif\", \"image/webp\"].includes(\n mime_type\n )\n ) {\n return {\n type: \"document\",\n source: {\n type: \"content\",\n content: [\n {\n type: \"image\",\n source: {\n type: \"base64\",\n data: block.data,\n media_type: mime_type as\n | \"image/jpeg\"\n | \"image/png\"\n | \"image/gif\"\n | \"image/webp\",\n },\n },\n ],\n },\n ...(\"cache_control\" in (block.metadata ?? {})\n ? { cache_control: block.metadata!.cache_control }\n : {}),\n ...(\"citations\" in (block.metadata ?? {})\n ? { citations: block.metadata!.citations }\n : {}),\n ...(\"context\" in (block.metadata ?? {})\n ? { context: block.metadata!.context }\n : {}),\n ...(\"title\" in (block.metadata ?? {})\n ? { title: block.metadata!.title }\n : {}),\n } as Anthropic.Messages.DocumentBlockParam;\n } else {\n throw new Error(\n `Unsupported file mime type for file base64 source: ${block.mime_type}`\n );\n }\n } else {\n throw new Error(`Unsupported file source type: ${block.source_type}`);\n }\n },\n};\n"],"mappings":";;AAMA,SAAgB,0BACd,OACgD;CAChD,OACE,OAAO,UAAU,YACjB,UAAU,QACV,UAAU,SACV,MAAM,SAAS;AAEnB;AAEA,SAAgB,kCACd,OACwD;CACxD,OACE,OAAO,UAAU,YACjB,UAAU,QACV,UAAU,SACV,MAAM,SAAS;AAEnB;AAEA,SAAgB,4BACd,OACkD;CAClD,OACE,OAAO,UAAU,YACjB,UAAU,QACV,UAAU,SACV,MAAM,SAAS;AAEnB;AAEA,SAAgB,8BACd,OACoD;CACpD,OACE,OAAO,UAAU,YACjB,UAAU,QACV,UAAU,SACV,MAAM,SAAS;AAEnB;AAEA,SAAgB,4BACd,OAC6C;CAC7C,IAAI,OAAO,UAAU,YAAY,SAAS,MACxC,OAAO;CAET,IAAI,EAAE,UAAU,UAAU,MAAM,SAAS,SACvC,OAAO;CAGT,IACE,EAAE,YAAY,UACd,OAAO,MAAM,WAAW,YACxB,MAAM,UAAU,MAEhB,OAAO;CAGT,IAAI,EAAE,UAAU,MAAM,SACpB,OAAO;CAGT,IAAI,MAAM,OAAO,SAAS,UAAU;EAClC,IAAI,EAAE,gBAAgB,MAAM,SAC1B,OAAO;EAGT,IAAI,OAAO,MAAM,OAAO,eAAe,UACrC,OAAO;EAGT,IAAI,EAAE,UAAU,MAAM,SACpB,OAAO;EAGT,IAAI,OAAO,MAAM,OAAO,SAAS,UAC/B,OAAO;EAGT,OAAO;CACT;CAEA,IAAI,MAAM,OAAO,SAAS,OAAO;EAC/B,IAAI,EAAE,SAAS,MAAM,SACnB,OAAO;EAGT,IAAI,OAAO,MAAM,OAAO,QAAQ,UAC9B,OAAO;EAGT,OAAO;CACT;CAEA,OAAO;AACT;AAEA,MAAa,gCAIR;CACH,cAAc;CAEd,sBAAsB,OAA0C;EAC9D,OAAO;GACL,MAAM;GACN,MAAM,MAAM;GACZ,GAAI,gBAAgB,MAAM,YAAY,CAAC,KACnC,EAAE,WAAW,MAAM,SAAU,UAAU,IACvC,CAAC;GACL,GAAI,oBAAoB,MAAM,YAAY,CAAC,KACvC,EAAE,eAAe,MAAM,SAAU,cAAc,IAC/C,CAAC;EACP;CACF;CAEA,uBAAuB,OAA2C;EAChE,IAAI,MAAM,gBAAgB,OAAO;GAC/B,MAAM,OAAO,mBAAmB;IAC9B,SAAS,MAAM;IACf,cAAc;GAChB,CAAC;GACD,IAAI,MACF,OAAO;IACL,MAAM;IACN,QAAQ;KACN,MAAM;KACN,MAAM,KAAK;KACX,YAAY,KAAK;IACnB;IACA,GAAI,oBAAoB,MAAM,YAAY,CAAC,KACvC,EAAE,eAAe,MAAM,SAAU,cAAc,IAC/C,CAAC;GACP;QAEA,OAAO;IACL,MAAM;IACN,QAAQ;KACN,MAAM;KACN,KAAK,MAAM;IACb;IACA,GAAI,oBAAoB,MAAM,YAAY,CAAC,KACvC,EAAE,eAAe,MAAM,SAAU,cAAc,IAC/C,CAAC;GACP;EAEJ,OACE,IAAI,MAAM,gBAAgB,UACxB,OAAO;GACL,MAAM;GACN,QAAQ;IACN,MAAM;IACN,MAAM,MAAM;IACZ,YAAY,MAAM,aAAa;GACjC;GACA,GAAI,oBAAoB,MAAM,YAAY,CAAC,KACvC,EAAE,eAAe,MAAM,SAAU,cAAc,IAC/C,CAAC;EACP;OAEA,MAAM,IAAI,MAAM,kCAAkC,MAAM,aAAa;CAG3E;CAEA,sBAAsB,OAA8C;EAClE,MAAM,aAAa,MAAM,aAAa,GAAA,CAAI,MAAM,GAAG,CAAC,CAAC;EAErD,IAAI,MAAM,gBAAgB,OAAO;GAC/B,IAAI,cAAc,qBAAqB,cAAc,IACnD,OAAO;IACL,MAAM;IACN,QAAQ;KACN,MAAM;KACN,KAAK,MAAM;IACb;IACA,GAAI,oBAAoB,MAAM,YAAY,CAAC,KACvC,EAAE,eAAe,MAAM,SAAU,cAAc,IAC/C,CAAC;IACL,GAAI,gBAAgB,MAAM,YAAY,CAAC,KACnC,EAAE,WAAW,MAAM,SAAU,UAAU,IACvC,CAAC;IACL,GAAI,cAAc,MAAM,YAAY,CAAC,KACjC,EAAE,SAAS,MAAM,SAAU,QAAQ,IACnC,CAAC;IACL,GAAI,YAAY,MAAM,YAAY,CAAC,KAC/B,EAAE,OAAO,MAAM,SAAU,MAAM,IAC/B,CAAC;GACP;GAEF,MAAM,IAAI,MACR,mDAAmD,MAAM,WAC3D;EACF,OAAO,IAAI,MAAM,gBAAgB,QAC/B,IAAI,cAAc,gBAAgB,cAAc,IAC9C,OAAO;GACL,MAAM;GACN,QAAQ;IACN,MAAM;IACN,MAAM,MAAM;IACZ,YAAY,MAAM,aAAa;GACjC;GACA,GAAI,oBAAoB,MAAM,YAAY,CAAC,KACvC,EAAE,eAAe,MAAM,SAAU,cAAc,IAC/C,CAAC;GACL,GAAI,gBAAgB,MAAM,YAAY,CAAC,KACnC,EAAE,WAAW,MAAM,SAAU,UAAU,IACvC,CAAC;GACL,GAAI,cAAc,MAAM,YAAY,CAAC,KACjC,EAAE,SAAS,MAAM,SAAU,QAAQ,IACnC,CAAC;GACL,GAAI,YAAY,MAAM,YAAY,CAAC,KAC/B,EAAE,OAAO,MAAM,SAAU,MAAM,IAC/B,CAAC;EACP;OAEA,MAAM,IAAI,MACR,oDAAoD,MAAM,WAC5D;OAEG,IAAI,MAAM,gBAAgB,UAC/B,IAAI,cAAc,qBAAqB,cAAc,IACnD,OAAO;GACL,MAAM;GACN,QAAQ;IACN,MAAM;IACN,MAAM,MAAM;IACZ,YAAY;GACd;GACA,GAAI,oBAAoB,MAAM,YAAY,CAAC,KACvC,EAAE,eAAe,MAAM,SAAU,cAAc,IAC/C,CAAC;GACL,GAAI,gBAAgB,MAAM,YAAY,CAAC,KACnC,EAAE,WAAW,MAAM,SAAU,UAAU,IACvC,CAAC;GACL,GAAI,cAAc,MAAM,YAAY,CAAC,KACjC,EAAE,SAAS,MAAM,SAAU,QAAQ,IACnC,CAAC;GACL,GAAI,YAAY,MAAM,YAAY,CAAC,KAC/B,EAAE,OAAO,MAAM,SAAU,MAAM,IAC/B,CAAC;EACP;OACK,IACL;GAAC;GAAc;GAAa;GAAa;EAAY,CAAC,CAAC,SACrD,SACF,GAEA,OAAO;GACL,MAAM;GACN,QAAQ;IACN,MAAM;IACN,SAAS,CACP;KACE,MAAM;KACN,QAAQ;MACN,MAAM;MACN,MAAM,MAAM;MACZ,YAAY;KAKd;IACF,CACF;GACF;GACA,GAAI,oBAAoB,MAAM,YAAY,CAAC,KACvC,EAAE,eAAe,MAAM,SAAU,cAAc,IAC/C,CAAC;GACL,GAAI,gBAAgB,MAAM,YAAY,CAAC,KACnC,EAAE,WAAW,MAAM,SAAU,UAAU,IACvC,CAAC;GACL,GAAI,cAAc,MAAM,YAAY,CAAC,KACjC,EAAE,SAAS,MAAM,SAAU,QAAQ,IACnC,CAAC;GACL,GAAI,YAAY,MAAM,YAAY,CAAC,KAC/B,EAAE,OAAO,MAAM,SAAU,MAAM,IAC/B,CAAC;EACP;OAEA,MAAM,IAAI,MACR,sDAAsD,MAAM,WAC9D;OAGF,MAAM,IAAI,MAAM,iCAAiC,MAAM,aAAa;CAExE;AACF"}
|
|
1
|
+
{"version":3,"file":"content.js","names":[],"sources":["../../src/utils/content.ts"],"sourcesContent":["import type Anthropic from \"@anthropic-ai/sdk\";\nimport {\n parseBase64DataUrl,\n type StandardContentBlockConverter,\n} from \"@langchain/core/messages\";\n\nexport function _isAnthropicThinkingBlock(\n block: unknown\n): block is Anthropic.Messages.ThinkingBlockParam {\n return (\n typeof block === \"object\" &&\n block !== null &&\n \"type\" in block &&\n block.type === \"thinking\"\n );\n}\n\nexport function _isAnthropicRedactedThinkingBlock(\n block: unknown\n): block is Anthropic.Messages.RedactedThinkingBlockParam {\n return (\n typeof block === \"object\" &&\n block !== null &&\n \"type\" in block &&\n block.type === \"redacted_thinking\"\n );\n}\n\nexport function _isAnthropicCompactionBlock(\n block: unknown\n): block is Anthropic.Beta.BetaCompactionBlockParam {\n return (\n typeof block === \"object\" &&\n block !== null &&\n \"type\" in block &&\n block.type === \"compaction\"\n );\n}\n\nexport function _isAnthropicSearchResultBlock(\n block: unknown\n): block is Anthropic.Beta.BetaSearchResultBlockParam {\n return (\n typeof block === \"object\" &&\n block !== null &&\n \"type\" in block &&\n block.type === \"search_result\"\n );\n}\n\nexport function _isAnthropicImageBlockParam(\n block: unknown\n): block is Anthropic.Messages.ImageBlockParam {\n if (typeof block !== \"object\" || block == null) {\n return false;\n }\n if (!(\"type\" in block) || block.type !== \"image\") {\n return false;\n }\n\n if (\n !(\"source\" in block) ||\n typeof block.source !== \"object\" ||\n block.source == null\n ) {\n return false;\n }\n\n if (!(\"type\" in block.source)) {\n return false;\n }\n\n if (block.source.type === \"base64\") {\n if (!(\"media_type\" in block.source)) {\n return false;\n }\n\n if (typeof block.source.media_type !== \"string\") {\n return false;\n }\n\n if (!(\"data\" in block.source)) {\n return false;\n }\n\n if (typeof block.source.data !== \"string\") {\n return false;\n }\n\n return true;\n }\n\n if (block.source.type === \"url\") {\n if (!(\"url\" in block.source)) {\n return false;\n }\n\n if (typeof block.source.url !== \"string\") {\n return false;\n }\n\n return true;\n }\n\n return false;\n}\n\nexport const standardContentBlockConverter: StandardContentBlockConverter<{\n text: Anthropic.Messages.TextBlockParam;\n image: Anthropic.Messages.ImageBlockParam;\n file: Anthropic.Messages.DocumentBlockParam;\n}> = {\n providerName: \"anthropic\",\n\n fromStandardTextBlock(block): Anthropic.Messages.TextBlockParam {\n return {\n type: \"text\",\n text: block.text,\n ...(\"citations\" in (block.metadata ?? {})\n ? { citations: block.metadata!.citations }\n : {}),\n ...(\"cache_control\" in (block.metadata ?? {})\n ? { cache_control: block.metadata!.cache_control }\n : {}),\n } as Anthropic.Messages.TextBlockParam;\n },\n\n fromStandardImageBlock(block): Anthropic.Messages.ImageBlockParam {\n if (block.source_type === \"url\") {\n const data = parseBase64DataUrl({\n dataUrl: block.url,\n asTypedArray: false,\n });\n if (data) {\n return {\n type: \"image\",\n source: {\n type: \"base64\",\n data: data.data,\n media_type: data.mime_type,\n },\n ...(\"cache_control\" in (block.metadata ?? {})\n ? { cache_control: block.metadata!.cache_control }\n : {}),\n } as Anthropic.Messages.ImageBlockParam;\n } else {\n return {\n type: \"image\",\n source: {\n type: \"url\",\n url: block.url,\n },\n ...(\"cache_control\" in (block.metadata ?? {})\n ? { cache_control: block.metadata!.cache_control }\n : {}),\n } as Anthropic.Messages.ImageBlockParam;\n }\n } else {\n if (block.source_type === \"base64\") {\n return {\n type: \"image\",\n source: {\n type: \"base64\",\n data: block.data,\n media_type: block.mime_type ?? \"\",\n },\n ...(\"cache_control\" in (block.metadata ?? {})\n ? { cache_control: block.metadata!.cache_control }\n : {}),\n } as Anthropic.Messages.ImageBlockParam;\n } else {\n throw new Error(`Unsupported image source type: ${block.source_type}`);\n }\n }\n },\n\n fromStandardFileBlock(block): Anthropic.Messages.DocumentBlockParam {\n const mime_type = (block.mime_type ?? \"\").split(\";\")[0];\n\n if (block.source_type === \"url\") {\n if (mime_type === \"application/pdf\" || mime_type === \"\") {\n return {\n type: \"document\",\n source: {\n type: \"url\",\n url: block.url,\n },\n ...(\"cache_control\" in (block.metadata ?? {})\n ? { cache_control: block.metadata!.cache_control }\n : {}),\n ...(\"citations\" in (block.metadata ?? {})\n ? { citations: block.metadata!.citations }\n : {}),\n ...(\"context\" in (block.metadata ?? {})\n ? { context: block.metadata!.context }\n : {}),\n ...(\"title\" in (block.metadata ?? {})\n ? { title: block.metadata!.title }\n : {}),\n } as Anthropic.Messages.DocumentBlockParam;\n }\n throw new Error(\n `Unsupported file mime type for file url source: ${block.mime_type}`\n );\n } else if (block.source_type === \"text\") {\n if (mime_type === \"text/plain\" || mime_type === \"\") {\n return {\n type: \"document\",\n source: {\n type: \"text\",\n data: block.text,\n media_type: block.mime_type ?? \"\",\n },\n ...(\"cache_control\" in (block.metadata ?? {})\n ? { cache_control: block.metadata!.cache_control }\n : {}),\n ...(\"citations\" in (block.metadata ?? {})\n ? { citations: block.metadata!.citations }\n : {}),\n ...(\"context\" in (block.metadata ?? {})\n ? { context: block.metadata!.context }\n : {}),\n ...(\"title\" in (block.metadata ?? {})\n ? { title: block.metadata!.title }\n : {}),\n } as Anthropic.Messages.DocumentBlockParam;\n } else {\n throw new Error(\n `Unsupported file mime type for file text source: ${block.mime_type}`\n );\n }\n } else if (block.source_type === \"base64\") {\n if (mime_type === \"application/pdf\" || mime_type === \"\") {\n return {\n type: \"document\",\n source: {\n type: \"base64\",\n data: block.data,\n media_type: \"application/pdf\",\n },\n ...(\"cache_control\" in (block.metadata ?? {})\n ? { cache_control: block.metadata!.cache_control }\n : {}),\n ...(\"citations\" in (block.metadata ?? {})\n ? { citations: block.metadata!.citations }\n : {}),\n ...(\"context\" in (block.metadata ?? {})\n ? { context: block.metadata!.context }\n : {}),\n ...(\"title\" in (block.metadata ?? {})\n ? { title: block.metadata!.title }\n : {}),\n } as Anthropic.Messages.DocumentBlockParam;\n } else if (\n [\"image/jpeg\", \"image/png\", \"image/gif\", \"image/webp\"].includes(\n mime_type\n )\n ) {\n return {\n type: \"document\",\n source: {\n type: \"content\",\n content: [\n {\n type: \"image\",\n source: {\n type: \"base64\",\n data: block.data,\n media_type: mime_type as\n | \"image/jpeg\"\n | \"image/png\"\n | \"image/gif\"\n | \"image/webp\",\n },\n },\n ],\n },\n ...(\"cache_control\" in (block.metadata ?? {})\n ? { cache_control: block.metadata!.cache_control }\n : {}),\n ...(\"citations\" in (block.metadata ?? {})\n ? { citations: block.metadata!.citations }\n : {}),\n ...(\"context\" in (block.metadata ?? {})\n ? { context: block.metadata!.context }\n : {}),\n ...(\"title\" in (block.metadata ?? {})\n ? { title: block.metadata!.title }\n : {}),\n } as Anthropic.Messages.DocumentBlockParam;\n } else {\n throw new Error(\n `Unsupported file mime type for file base64 source: ${block.mime_type}`\n );\n }\n } else {\n throw new Error(`Unsupported file source type: ${block.source_type}`);\n }\n },\n};\n"],"mappings":";;AAMA,SAAgB,0BACd,OACgD;CAChD,OACE,OAAO,UAAU,YACjB,UAAU,QACV,UAAU,SACV,MAAM,SAAS;AAEnB;AAEA,SAAgB,kCACd,OACwD;CACxD,OACE,OAAO,UAAU,YACjB,UAAU,QACV,UAAU,SACV,MAAM,SAAS;AAEnB;AAEA,SAAgB,4BACd,OACkD;CAClD,OACE,OAAO,UAAU,YACjB,UAAU,QACV,UAAU,SACV,MAAM,SAAS;AAEnB;AAEA,SAAgB,8BACd,OACoD;CACpD,OACE,OAAO,UAAU,YACjB,UAAU,QACV,UAAU,SACV,MAAM,SAAS;AAEnB;AAEA,SAAgB,4BACd,OAC6C;CAC7C,IAAI,OAAO,UAAU,YAAY,SAAS,MACxC,OAAO;CAET,IAAI,EAAE,UAAU,UAAU,MAAM,SAAS,SACvC,OAAO;CAGT,IACE,EAAE,YAAY,UACd,OAAO,MAAM,WAAW,YACxB,MAAM,UAAU,MAEhB,OAAO;CAGT,IAAI,EAAE,UAAU,MAAM,SACpB,OAAO;CAGT,IAAI,MAAM,OAAO,SAAS,UAAU;EAClC,IAAI,EAAE,gBAAgB,MAAM,SAC1B,OAAO;EAGT,IAAI,OAAO,MAAM,OAAO,eAAe,UACrC,OAAO;EAGT,IAAI,EAAE,UAAU,MAAM,SACpB,OAAO;EAGT,IAAI,OAAO,MAAM,OAAO,SAAS,UAC/B,OAAO;EAGT,OAAO;CACT;CAEA,IAAI,MAAM,OAAO,SAAS,OAAO;EAC/B,IAAI,EAAE,SAAS,MAAM,SACnB,OAAO;EAGT,IAAI,OAAO,MAAM,OAAO,QAAQ,UAC9B,OAAO;EAGT,OAAO;CACT;CAEA,OAAO;AACT;AAEA,MAAa,gCAIR;CACH,cAAc;CAEd,sBAAsB,OAA0C;EAC9D,OAAO;GACL,MAAM;GACN,MAAM,MAAM;GACZ,GAAI,gBAAgB,MAAM,YAAY,CAAC,KACnC,EAAE,WAAW,MAAM,SAAU,UAAU,IACvC,CAAC;GACL,GAAI,oBAAoB,MAAM,YAAY,CAAC,KACvC,EAAE,eAAe,MAAM,SAAU,cAAc,IAC/C,CAAC;EACP;CACF;CAEA,uBAAuB,OAA2C;EAChE,IAAI,MAAM,gBAAgB,OAAO;GAC/B,MAAM,OAAO,mBAAmB;IAC9B,SAAS,MAAM;IACf,cAAc;GAChB,CAAC;GACD,IAAI,MACF,OAAO;IACL,MAAM;IACN,QAAQ;KACN,MAAM;KACN,MAAM,KAAK;KACX,YAAY,KAAK;IACnB;IACA,GAAI,oBAAoB,MAAM,YAAY,CAAC,KACvC,EAAE,eAAe,MAAM,SAAU,cAAc,IAC/C,CAAC;GACP;QAEA,OAAO;IACL,MAAM;IACN,QAAQ;KACN,MAAM;KACN,KAAK,MAAM;IACb;IACA,GAAI,oBAAoB,MAAM,YAAY,CAAC,KACvC,EAAE,eAAe,MAAM,SAAU,cAAc,IAC/C,CAAC;GACP;EAEJ,OACE,IAAI,MAAM,gBAAgB,UACxB,OAAO;GACL,MAAM;GACN,QAAQ;IACN,MAAM;IACN,MAAM,MAAM;IACZ,YAAY,MAAM,aAAa;GACjC;GACA,GAAI,oBAAoB,MAAM,YAAY,CAAC,KACvC,EAAE,eAAe,MAAM,SAAU,cAAc,IAC/C,CAAC;EACP;OAEA,MAAM,IAAI,MAAM,kCAAkC,MAAM,aAAa;CAG3E;CAEA,sBAAsB,OAA8C;EAClE,MAAM,aAAa,MAAM,aAAa,GAAA,CAAI,MAAM,GAAG,CAAC,CAAC;EAErD,IAAI,MAAM,gBAAgB,OAAO;GAC/B,IAAI,cAAc,qBAAqB,cAAc,IACnD,OAAO;IACL,MAAM;IACN,QAAQ;KACN,MAAM;KACN,KAAK,MAAM;IACb;IACA,GAAI,oBAAoB,MAAM,YAAY,CAAC,KACvC,EAAE,eAAe,MAAM,SAAU,cAAc,IAC/C,CAAC;IACL,GAAI,gBAAgB,MAAM,YAAY,CAAC,KACnC,EAAE,WAAW,MAAM,SAAU,UAAU,IACvC,CAAC;IACL,GAAI,cAAc,MAAM,YAAY,CAAC,KACjC,EAAE,SAAS,MAAM,SAAU,QAAQ,IACnC,CAAC;IACL,GAAI,YAAY,MAAM,YAAY,CAAC,KAC/B,EAAE,OAAO,MAAM,SAAU,MAAM,IAC/B,CAAC;GACP;GAEF,MAAM,IAAI,MACR,mDAAmD,MAAM,WAC3D;EACF,OAAO,IAAI,MAAM,gBAAgB,QAAQ;GACvC,IAAI,cAAc,gBAAgB,cAAc,IAC9C,OAAO;IACL,MAAM;IACN,QAAQ;KACN,MAAM;KACN,MAAM,MAAM;KACZ,YAAY,MAAM,aAAa;IACjC;IACA,GAAI,oBAAoB,MAAM,YAAY,CAAC,KACvC,EAAE,eAAe,MAAM,SAAU,cAAc,IAC/C,CAAC;IACL,GAAI,gBAAgB,MAAM,YAAY,CAAC,KACnC,EAAE,WAAW,MAAM,SAAU,UAAU,IACvC,CAAC;IACL,GAAI,cAAc,MAAM,YAAY,CAAC,KACjC,EAAE,SAAS,MAAM,SAAU,QAAQ,IACnC,CAAC;IACL,GAAI,YAAY,MAAM,YAAY,CAAC,KAC/B,EAAE,OAAO,MAAM,SAAU,MAAM,IAC/B,CAAC;GACP;QAEA,MAAM,IAAI,MACR,oDAAoD,MAAM,WAC5D;EAEJ,OAAO,IAAI,MAAM,gBAAgB,UAAU;GACzC,IAAI,cAAc,qBAAqB,cAAc,IACnD,OAAO;IACL,MAAM;IACN,QAAQ;KACN,MAAM;KACN,MAAM,MAAM;KACZ,YAAY;IACd;IACA,GAAI,oBAAoB,MAAM,YAAY,CAAC,KACvC,EAAE,eAAe,MAAM,SAAU,cAAc,IAC/C,CAAC;IACL,GAAI,gBAAgB,MAAM,YAAY,CAAC,KACnC,EAAE,WAAW,MAAM,SAAU,UAAU,IACvC,CAAC;IACL,GAAI,cAAc,MAAM,YAAY,CAAC,KACjC,EAAE,SAAS,MAAM,SAAU,QAAQ,IACnC,CAAC;IACL,GAAI,YAAY,MAAM,YAAY,CAAC,KAC/B,EAAE,OAAO,MAAM,SAAU,MAAM,IAC/B,CAAC;GACP;QACK,IACL;IAAC;IAAc;IAAa;IAAa;GAAY,CAAC,CAAC,SACrD,SACF,GAEA,OAAO;IACL,MAAM;IACN,QAAQ;KACN,MAAM;KACN,SAAS,CACP;MACE,MAAM;MACN,QAAQ;OACN,MAAM;OACN,MAAM,MAAM;OACZ,YAAY;MAKd;KACF,CACF;IACF;IACA,GAAI,oBAAoB,MAAM,YAAY,CAAC,KACvC,EAAE,eAAe,MAAM,SAAU,cAAc,IAC/C,CAAC;IACL,GAAI,gBAAgB,MAAM,YAAY,CAAC,KACnC,EAAE,WAAW,MAAM,SAAU,UAAU,IACvC,CAAC;IACL,GAAI,cAAc,MAAM,YAAY,CAAC,KACjC,EAAE,SAAS,MAAM,SAAU,QAAQ,IACnC,CAAC;IACL,GAAI,YAAY,MAAM,YAAY,CAAC,KAC/B,EAAE,OAAO,MAAM,SAAU,MAAM,IAC/B,CAAC;GACP;QAEA,MAAM,IAAI,MACR,sDAAsD,MAAM,WAC9D;EAEJ,OACE,MAAM,IAAI,MAAM,iCAAiC,MAAM,aAAa;CAExE;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.cjs","names":["ContextOverflowError"],"sources":["../../src/utils/errors.ts"],"sourcesContent":["/* oxlint-disable @typescript-eslint/no-explicit-any */\n/* oxlint-disable no-param-reassign */\n\nimport { ContextOverflowError, stampRetryable } from \"@langchain/core/errors\";\n\n// Duplicate of core\n// TODO: Remove once we stop supporting 0.2.x core versions\nexport type LangChainErrorCodes =\n | \"CONTEXT_OVERFLOW\"\n | \"INVALID_PROMPT_INPUT\"\n | \"INVALID_TOOL_RESULTS\"\n | \"MESSAGE_COERCION_FAILURE\"\n | \"MODEL_AUTHENTICATION\"\n | \"MODEL_NOT_FOUND\"\n | \"MODEL_RATE_LIMIT\"\n | \"OUTPUT_PARSING_FAILURE\";\n\nexport function addLangChainErrorFields(\n error: any,\n lc_error_code: LangChainErrorCodes\n) {\n (error as any).lc_error_code = lc_error_code;\n error.message = `${error.message}\\n\\nTroubleshooting URL: https://docs.langchain.com/oss/javascript/langchain/errors/${lc_error_code}/\\n`;\n return error;\n}\n\n// oxlint-disable-next-line @typescript-eslint/no-explicit-any\nexport function wrapAnthropicClientError(e: any) {\n let error;\n if (\n e.status === 400 &&\n typeof e.message === \"string\" &&\n e.message.includes(\"prompt is too long\")\n ) {\n // ContextOverflowError marks itself non-retryable at construction.\n error = addLangChainErrorFields(\n ContextOverflowError.fromError(e),\n \"CONTEXT_OVERFLOW\"\n );\n } else if (e.status === 400 && e.message.includes(\"tool\")) {\n error = stampRetryable(\n addLangChainErrorFields(e, \"INVALID_TOOL_RESULTS\"),\n false\n );\n } else if (e.status === 401) {\n error = stampRetryable(\n addLangChainErrorFields(e, \"MODEL_AUTHENTICATION\"),\n false\n );\n } else if (e.status === 404) {\n error = stampRetryable(\n addLangChainErrorFields(e, \"MODEL_NOT_FOUND\"),\n false\n );\n } else if (e.status === 429) {\n // AsyncCaller runs after this and re-marks false if it's quota exhaustion.\n error = stampRetryable(\n addLangChainErrorFields(e, \"MODEL_RATE_LIMIT\"),\n true\n );\n } else {\n error = e;\n }\n return error;\n}\n"],"mappings":";;AAiBA,SAAgB,wBACd,OACA,eACA;CACA,MAAe,gBAAgB;CAC/B,MAAM,UAAU,GAAG,MAAM,QAAQ,sFAAsF,cAAc;CACrI,OAAO;AACT;AAGA,SAAgB,yBAAyB,GAAQ;CAC/C,IAAI;CACJ,IACE,EAAE,WAAW,OACb,OAAO,EAAE,YAAY,YACrB,EAAE,QAAQ,SAAS,oBAAoB,GAGvC,QAAQ,wBACNA,uBAAAA,qBAAqB,UAAU,CAAC,GAChC,kBACF;MACK,IAAI,EAAE,WAAW,OAAO,EAAE,QAAQ,SAAS,MAAM,GACtD,SAAA,
|
|
1
|
+
{"version":3,"file":"errors.cjs","names":["ContextOverflowError","stampRetryable"],"sources":["../../src/utils/errors.ts"],"sourcesContent":["/* oxlint-disable @typescript-eslint/no-explicit-any */\n/* oxlint-disable no-param-reassign */\n\nimport { ContextOverflowError, stampRetryable } from \"@langchain/core/errors\";\n\n// Duplicate of core\n// TODO: Remove once we stop supporting 0.2.x core versions\nexport type LangChainErrorCodes =\n | \"CONTEXT_OVERFLOW\"\n | \"INVALID_PROMPT_INPUT\"\n | \"INVALID_TOOL_RESULTS\"\n | \"MESSAGE_COERCION_FAILURE\"\n | \"MODEL_AUTHENTICATION\"\n | \"MODEL_NOT_FOUND\"\n | \"MODEL_RATE_LIMIT\"\n | \"OUTPUT_PARSING_FAILURE\";\n\nexport function addLangChainErrorFields(\n error: any,\n lc_error_code: LangChainErrorCodes\n) {\n (error as any).lc_error_code = lc_error_code;\n error.message = `${error.message}\\n\\nTroubleshooting URL: https://docs.langchain.com/oss/javascript/langchain/errors/${lc_error_code}/\\n`;\n return error;\n}\n\n// oxlint-disable-next-line @typescript-eslint/no-explicit-any\nexport function wrapAnthropicClientError(e: any) {\n let error;\n if (\n e.status === 400 &&\n typeof e.message === \"string\" &&\n e.message.includes(\"prompt is too long\")\n ) {\n // ContextOverflowError marks itself non-retryable at construction.\n error = addLangChainErrorFields(\n ContextOverflowError.fromError(e),\n \"CONTEXT_OVERFLOW\"\n );\n } else if (e.status === 400 && e.message.includes(\"tool\")) {\n error = stampRetryable(\n addLangChainErrorFields(e, \"INVALID_TOOL_RESULTS\"),\n false\n );\n } else if (e.status === 401) {\n error = stampRetryable(\n addLangChainErrorFields(e, \"MODEL_AUTHENTICATION\"),\n false\n );\n } else if (e.status === 404) {\n error = stampRetryable(\n addLangChainErrorFields(e, \"MODEL_NOT_FOUND\"),\n false\n );\n } else if (e.status === 429) {\n // AsyncCaller runs after this and re-marks false if it's quota exhaustion.\n error = stampRetryable(\n addLangChainErrorFields(e, \"MODEL_RATE_LIMIT\"),\n true\n );\n } else {\n error = e;\n }\n return error;\n}\n"],"mappings":";;AAiBA,SAAgB,wBACd,OACA,eACA;CACA,MAAe,gBAAgB;CAC/B,MAAM,UAAU,GAAG,MAAM,QAAQ,sFAAsF,cAAc;CACrI,OAAO;AACT;AAGA,SAAgB,yBAAyB,GAAQ;CAC/C,IAAI;CACJ,IACE,EAAE,WAAW,OACb,OAAO,EAAE,YAAY,YACrB,EAAE,QAAQ,SAAS,oBAAoB,GAGvC,QAAQ,wBACNA,uBAAAA,qBAAqB,UAAU,CAAC,GAChC,kBACF;MACK,IAAI,EAAE,WAAW,OAAO,EAAE,QAAQ,SAAS,MAAM,GACtD,SAAA,GAAQC,uBAAAA,eAAAA,CACN,wBAAwB,GAAG,sBAAsB,GACjD,KACF;MACK,IAAI,EAAE,WAAW,KACtB,SAAA,GAAQA,uBAAAA,eAAAA,CACN,wBAAwB,GAAG,sBAAsB,GACjD,KACF;MACK,IAAI,EAAE,WAAW,KACtB,SAAA,GAAQA,uBAAAA,eAAAA,CACN,wBAAwB,GAAG,iBAAiB,GAC5C,KACF;MACK,IAAI,EAAE,WAAW,KAEtB,SAAA,GAAQA,uBAAAA,eAAAA,CACN,wBAAwB,GAAG,kBAAkB,GAC7C,IACF;MAEA,QAAQ;CAEV,OAAO;AACT"}
|
|
@@ -31,24 +31,25 @@ function _formatImage(imageUrl) {
|
|
|
31
31
|
}
|
|
32
32
|
function _ensureMessageContents(messages) {
|
|
33
33
|
const updatedMsgs = [];
|
|
34
|
-
for (const message of messages) if (message._getType() === "tool")
|
|
35
|
-
|
|
36
|
-
|
|
34
|
+
for (const message of messages) if (message._getType() === "tool") {
|
|
35
|
+
if (typeof message.content === "string") {
|
|
36
|
+
const previousMessage = updatedMsgs[updatedMsgs.length - 1];
|
|
37
|
+
if (previousMessage?._getType() === "human" && Array.isArray(previousMessage.content) && "type" in previousMessage.content[0] && previousMessage.content[0].type === "tool_result") previousMessage.content.push({
|
|
38
|
+
type: "tool_result",
|
|
39
|
+
content: message.content,
|
|
40
|
+
tool_use_id: message.tool_call_id
|
|
41
|
+
});
|
|
42
|
+
else updatedMsgs.push(new _langchain_core_messages.HumanMessage({ content: [{
|
|
43
|
+
type: "tool_result",
|
|
44
|
+
content: message.content,
|
|
45
|
+
tool_use_id: message.tool_call_id
|
|
46
|
+
}] }));
|
|
47
|
+
} else updatedMsgs.push(new _langchain_core_messages.HumanMessage({ content: [{
|
|
37
48
|
type: "tool_result",
|
|
38
|
-
content: message
|
|
39
|
-
tool_use_id: message.tool_call_id
|
|
40
|
-
});
|
|
41
|
-
else updatedMsgs.push(new _langchain_core_messages.HumanMessage({ content: [{
|
|
42
|
-
type: "tool_result",
|
|
43
|
-
content: message.content,
|
|
49
|
+
...message.content != null ? { content: _formatContent(message) } : {},
|
|
44
50
|
tool_use_id: message.tool_call_id
|
|
45
51
|
}] }));
|
|
46
|
-
} else updatedMsgs.push(
|
|
47
|
-
type: "tool_result",
|
|
48
|
-
...message.content != null ? { content: _formatContent(message) } : {},
|
|
49
|
-
tool_use_id: message.tool_call_id
|
|
50
|
-
}] }));
|
|
51
|
-
else updatedMsgs.push(message);
|
|
52
|
+
} else updatedMsgs.push(message);
|
|
52
53
|
return updatedMsgs;
|
|
53
54
|
}
|
|
54
55
|
function _convertLangChainToolCallToAnthropic(toolCall) {
|
|
@@ -212,31 +213,33 @@ function _convertMessagesToAnthropicPayload(messages) {
|
|
|
212
213
|
role,
|
|
213
214
|
content: require_standard._formatStandardContent(message)
|
|
214
215
|
};
|
|
215
|
-
if (_langchain_core_messages.AIMessage.isInstance(message) && !!message.tool_calls?.length)
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
216
|
+
if (_langchain_core_messages.AIMessage.isInstance(message) && !!message.tool_calls?.length) {
|
|
217
|
+
if (typeof message.content === "string") {
|
|
218
|
+
if (message.content === "") return {
|
|
219
|
+
role,
|
|
220
|
+
content: message.tool_calls.map(_convertLangChainToolCallToAnthropic)
|
|
221
|
+
};
|
|
222
|
+
else return {
|
|
223
|
+
role,
|
|
224
|
+
content: [{
|
|
225
|
+
type: "text",
|
|
226
|
+
text: message.content
|
|
227
|
+
}, ...message.tool_calls.map(_convertLangChainToolCallToAnthropic)]
|
|
228
|
+
};
|
|
229
|
+
} else {
|
|
230
|
+
const { content } = message;
|
|
231
|
+
const formattedContent = _formatContent(message, message.tool_calls);
|
|
232
|
+
const formattedContentArr = Array.isArray(formattedContent) ? formattedContent : [{
|
|
233
|
+
type: "text",
|
|
234
|
+
text: formattedContent
|
|
235
|
+
}];
|
|
236
|
+
const missingToolCalls = message.tool_calls.filter((toolCall) => !content.find((contentPart) => (contentPart.type === "tool_use" || contentPart.type === "input_json_delta" || contentPart.type === "server_tool_use") && contentPart.id === toolCall.id));
|
|
237
|
+
return {
|
|
238
|
+
role,
|
|
239
|
+
content: [...formattedContentArr, ...missingToolCalls.map(_convertLangChainToolCallToAnthropic)]
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
} else return {
|
|
240
243
|
role,
|
|
241
244
|
content: _formatContent(message, _langchain_core_messages.AIMessage.isInstance(message) ? message.tool_calls : void 0)
|
|
242
245
|
};
|