@langchain/anthropic 1.3.22 → 1.3.23

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 CHANGED
@@ -1,5 +1,14 @@
1
1
  # @langchain/anthropic
2
2
 
3
+ ## 1.3.23
4
+
5
+ ### Patch Changes
6
+
7
+ - [#10250](https://github.com/langchain-ai/langchainjs/pull/10250) [`8252619`](https://github.com/langchain-ai/langchainjs/commit/8252619b727bfcc37a3f01921edf3550d50949f6) Thanks [@JadenKim-dev](https://github.com/JadenKim-dev)! - fix(anthropic): prevent cache token double-counting in streaming
8
+
9
+ - Updated dependencies [[`26488b5`](https://github.com/langchain-ai/langchainjs/commit/26488b596f01b7b7fe2f1d97d07164e52365ade5), [`ca826f6`](https://github.com/langchain-ai/langchainjs/commit/ca826f6fecae6087bf0dee7781ee80b587396ec1), [`a602c42`](https://github.com/langchain-ai/langchainjs/commit/a602c42db75d7e7e01cab38b12e0b65b9c0cce95), [`db7d017`](https://github.com/langchain-ai/langchainjs/commit/db7d017f7ce13cb937147aabcbfa3847d80bde9d)]:
10
+ - @langchain/core@1.1.32
11
+
3
12
  ## 1.3.22
4
13
 
5
14
  ### Patch Changes
@@ -648,7 +648,7 @@ var ChatAnthropicMessages = class extends _langchain_core_language_models_chat_m
648
648
  model: modelOrFields
649
649
  } : modelOrFields ?? {};
650
650
  super(fields ?? {});
651
- this._addVersion("@langchain/anthropic", "1.3.22");
651
+ this._addVersion("@langchain/anthropic", "1.3.23");
652
652
  this.anthropicApiKey = fields?.apiKey ?? fields?.anthropicApiKey ?? (0, _langchain_core_utils_env.getEnvironmentVariable)("ANTHROPIC_API_KEY");
653
653
  if (!this.anthropicApiKey && !fields?.createClient) throw new Error("Anthropic API key not found");
654
654
  this.clientOptions = fields?.clientOptions ?? {};
@@ -647,7 +647,7 @@ var ChatAnthropicMessages = class extends BaseChatModel {
647
647
  model: modelOrFields
648
648
  } : modelOrFields ?? {};
649
649
  super(fields ?? {});
650
- this._addVersion("@langchain/anthropic", "1.3.22");
650
+ this._addVersion("@langchain/anthropic", "1.3.23");
651
651
  this.anthropicApiKey = fields?.apiKey ?? fields?.anthropicApiKey ?? getEnvironmentVariable("ANTHROPIC_API_KEY");
652
652
  if (!this.anthropicApiKey && !fields?.createClient) throw new Error("Anthropic API key not found");
653
653
  this.clientOptions = fields?.clientOptions ?? {};
@@ -93,7 +93,7 @@ declare function bash_20250124(options?: Bash20250124Options): DynamicStructured
93
93
  command: string;
94
94
  } | {
95
95
  restart: true;
96
- }, unknown, string, string>;
96
+ }, unknown, string, unknown, string>;
97
97
  //#endregion
98
98
  export { Bash20250124Options, bash_20250124 };
99
99
  //# sourceMappingURL=bash.d.cts.map
@@ -93,7 +93,7 @@ declare function bash_20250124(options?: Bash20250124Options): DynamicStructured
93
93
  command: string;
94
94
  } | {
95
95
  restart: true;
96
- }, unknown, string, string>;
96
+ }, unknown, string, unknown, string>;
97
97
  //#endregion
98
98
  export { Bash20250124Options, bash_20250124 };
99
99
  //# sourceMappingURL=bash.d.ts.map
@@ -149,7 +149,7 @@ declare function computer_20251124(options: Computer20251124Options): DynamicStr
149
149
  }, zod_v4_core0.$strip>, zod.ZodObject<{
150
150
  action: zod.ZodLiteral<"zoom">;
151
151
  region: zod.ZodTuple<[zod.ZodNumber, zod.ZodNumber, zod.ZodNumber, zod.ZodNumber], null>;
152
- }, zod_v4_core0.$strip>], "action">, Computer20251124Action, any, ToolMessage<any>, string>;
152
+ }, zod_v4_core0.$strip>], "action">, Computer20251124Action, any, ToolMessage<any>, unknown, string>;
153
153
  /**
154
154
  * Options for the computer use tool.
155
155
  *
@@ -283,7 +283,7 @@ declare function computer_20250124(options: Computer20250124Options): DynamicStr
283
283
  }, zod_v4_core0.$strip>, zod.ZodObject<{
284
284
  action: zod.ZodLiteral<"wait">;
285
285
  duration: zod.ZodOptional<zod.ZodNumber>;
286
- }, zod_v4_core0.$strip>], "action">, Computer20250124Action, any, ComputerUseReturnType, string>;
286
+ }, zod_v4_core0.$strip>], "action">, Computer20250124Action, any, ComputerUseReturnType, unknown, string>;
287
287
  //#endregion
288
288
  export { Computer20250124Options, Computer20251124Options, ComputerUseReturnType, computer_20250124, computer_20251124 };
289
289
  //# sourceMappingURL=computer.d.cts.map
@@ -149,7 +149,7 @@ declare function computer_20251124(options: Computer20251124Options): DynamicStr
149
149
  }, zod_v4_core0.$strip>, zod.ZodObject<{
150
150
  action: zod.ZodLiteral<"zoom">;
151
151
  region: zod.ZodTuple<[zod.ZodNumber, zod.ZodNumber, zod.ZodNumber, zod.ZodNumber], null>;
152
- }, zod_v4_core0.$strip>], "action">, Computer20251124Action, any, ToolMessage<any>, string>;
152
+ }, zod_v4_core0.$strip>], "action">, Computer20251124Action, any, ToolMessage<any>, unknown, string>;
153
153
  /**
154
154
  * Options for the computer use tool.
155
155
  *
@@ -283,7 +283,7 @@ declare function computer_20250124(options: Computer20250124Options): DynamicStr
283
283
  }, zod_v4_core0.$strip>, zod.ZodObject<{
284
284
  action: zod.ZodLiteral<"wait">;
285
285
  duration: zod.ZodOptional<zod.ZodNumber>;
286
- }, zod_v4_core0.$strip>], "action">, Computer20250124Action, any, ComputerUseReturnType, string>;
286
+ }, zod_v4_core0.$strip>], "action">, Computer20250124Action, any, ComputerUseReturnType, unknown, string>;
287
287
  //#endregion
288
288
  export { Computer20250124Options, Computer20251124Options, ComputerUseReturnType, computer_20250124, computer_20251124 };
289
289
  //# sourceMappingURL=computer.d.ts.map
@@ -85,7 +85,7 @@ declare function memory_20250818(options?: MemoryTool20250818Options): DynamicSt
85
85
  command: "rename";
86
86
  old_path: string;
87
87
  new_path: string;
88
- }, unknown, string | Promise<string>, string>;
88
+ }, unknown, string | Promise<string>, unknown, string>;
89
89
  //#endregion
90
90
  export { memory_20250818 };
91
91
  //# sourceMappingURL=memory.d.cts.map
@@ -85,7 +85,7 @@ declare function memory_20250818(options?: MemoryTool20250818Options): DynamicSt
85
85
  command: "rename";
86
86
  old_path: string;
87
87
  new_path: string;
88
- }, unknown, string | Promise<string>, string>;
88
+ }, unknown, string | Promise<string>, unknown, string>;
89
89
  //#endregion
90
90
  export { memory_20250818 };
91
91
  //# sourceMappingURL=memory.d.ts.map
@@ -108,7 +108,7 @@ declare function textEditor_20250728(options?: TextEditor20250728Options): Dynam
108
108
  path: string;
109
109
  insert_line: number;
110
110
  new_str: string;
111
- }, unknown, string | Promise<string>, string>;
111
+ }, unknown, string | Promise<string>, unknown, string>;
112
112
  //#endregion
113
113
  export { TextEditor20250728Options, textEditor_20250728 };
114
114
  //# sourceMappingURL=textEditor.d.cts.map
@@ -108,7 +108,7 @@ declare function textEditor_20250728(options?: TextEditor20250728Options): Dynam
108
108
  path: string;
109
109
  insert_line: number;
110
110
  new_str: string;
111
- }, unknown, string | Promise<string>, string>;
111
+ }, unknown, string | Promise<string>, unknown, string>;
112
112
  //#endregion
113
113
  export { TextEditor20250728Options, textEditor_20250728 };
114
114
  //# sourceMappingURL=textEditor.d.ts.map
@@ -26,11 +26,7 @@ function _makeMessageChunkFromAnthropicEvent(data, fields) {
26
26
  const usageMetadata = {
27
27
  input_tokens: 0,
28
28
  output_tokens: data.usage.output_tokens,
29
- total_tokens: data.usage.output_tokens,
30
- input_token_details: {
31
- cache_creation: data.usage.cache_creation_input_tokens,
32
- cache_read: data.usage.cache_read_input_tokens
33
- }
29
+ total_tokens: data.usage.output_tokens
34
30
  };
35
31
  const responseMetadata = "context_management" in data.delta ? { context_management: data.delta.context_management } : void 0;
36
32
  return { chunk: new _langchain_core_messages.AIMessageChunk({
@@ -1 +1 @@
1
- {"version":3,"file":"message_outputs.cjs","names":["AIMessageChunk","_isAnthropicCompactionBlock","AIMessage","extractToolCalls"],"sources":["../../src/utils/message_outputs.ts"],"sourcesContent":["/**\n * This util file contains functions for converting Anthropic messages to LangChain messages.\n */\nimport Anthropic from \"@anthropic-ai/sdk\";\nimport {\n AIMessage,\n AIMessageChunk,\n UsageMetadata,\n} from \"@langchain/core/messages\";\nimport type { ToolCallChunk } from \"@langchain/core/messages/tool\";\nimport { ChatGeneration } from \"@langchain/core/outputs\";\nimport { AnthropicMessageResponse } from \"../types.js\";\nimport { extractToolCalls } from \"../output_parsers.js\";\nimport { _isAnthropicCompactionBlock } from \"./content.js\";\n\nexport function _makeMessageChunkFromAnthropicEvent(\n data: Anthropic.Beta.Messages.BetaRawMessageStreamEvent,\n fields: {\n streamUsage: boolean;\n coerceContentToString: boolean;\n }\n): {\n chunk: AIMessageChunk;\n} | null {\n const response_metadata = { model_provider: \"anthropic\" };\n if (data.type === \"message_start\") {\n const { content, usage, ...additionalKwargs } = data.message;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const filteredAdditionalKwargs: Record<string, any> = {};\n for (const [key, value] of Object.entries(additionalKwargs)) {\n if (value !== undefined && value !== null) {\n filteredAdditionalKwargs[key] = value;\n }\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const { input_tokens, output_tokens, ...rest }: Record<string, any> =\n usage ?? {};\n const usageMetadata = buildUsageMetadata(usage);\n return {\n chunk: new AIMessageChunk({\n content: fields.coerceContentToString ? \"\" : [],\n additional_kwargs: filteredAdditionalKwargs,\n usage_metadata: fields.streamUsage ? usageMetadata : undefined,\n response_metadata: {\n ...response_metadata,\n usage: {\n ...rest,\n },\n },\n id: data.message.id,\n }),\n };\n } else if (data.type === \"message_delta\") {\n const usageMetadata: UsageMetadata = {\n input_tokens: 0,\n output_tokens: data.usage.output_tokens,\n total_tokens: data.usage.output_tokens,\n input_token_details: {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n cache_creation: (data.usage as any).cache_creation_input_tokens,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n cache_read: (data.usage as any).cache_read_input_tokens,\n },\n };\n const responseMetadata =\n \"context_management\" in data.delta\n ? { context_management: data.delta.context_management }\n : undefined;\n return {\n chunk: new AIMessageChunk({\n content: fields.coerceContentToString ? \"\" : [],\n response_metadata: responseMetadata,\n additional_kwargs: { ...data.delta },\n usage_metadata: fields.streamUsage ? usageMetadata : undefined,\n }),\n };\n } else if (\n data.type === \"content_block_start\" &&\n [\n \"tool_use\",\n \"document\",\n \"server_tool_use\",\n \"web_search_tool_result\",\n ].includes(data.content_block.type)\n ) {\n const contentBlock = data.content_block;\n let toolCallChunks: ToolCallChunk[];\n if (contentBlock.type === \"tool_use\") {\n toolCallChunks = [\n {\n id: contentBlock.id,\n index: data.index,\n name: contentBlock.name,\n args: \"\",\n },\n ];\n } else {\n toolCallChunks = [];\n }\n return {\n chunk: new AIMessageChunk({\n content: fields.coerceContentToString\n ? \"\"\n : [\n {\n index: data.index,\n ...data.content_block,\n input:\n contentBlock.type === \"server_tool_use\" ||\n contentBlock.type === \"tool_use\"\n ? \"\"\n : undefined,\n },\n ],\n response_metadata,\n additional_kwargs: {},\n tool_call_chunks: toolCallChunks,\n }),\n };\n } else if (\n data.type === \"content_block_delta\" &&\n [\n \"text_delta\",\n \"citations_delta\",\n \"thinking_delta\",\n \"signature_delta\",\n ].includes(data.delta.type)\n ) {\n if (fields.coerceContentToString && \"text\" in data.delta) {\n return {\n chunk: new AIMessageChunk({\n content: data.delta.text,\n }),\n };\n } else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const contentBlock: Record<string, any> = data.delta;\n if (\"citation\" in contentBlock) {\n contentBlock.citations = [contentBlock.citation];\n delete contentBlock.citation;\n }\n if (\n contentBlock.type === \"thinking_delta\" ||\n contentBlock.type === \"signature_delta\"\n ) {\n return {\n chunk: new AIMessageChunk({\n content: [{ index: data.index, ...contentBlock, type: \"thinking\" }],\n response_metadata,\n }),\n };\n }\n\n return {\n chunk: new AIMessageChunk({\n content: [{ index: data.index, ...contentBlock, type: \"text\" }],\n response_metadata,\n }),\n };\n }\n } else if (\n data.type === \"content_block_delta\" &&\n data.delta.type === \"input_json_delta\"\n ) {\n return {\n chunk: new AIMessageChunk({\n content: fields.coerceContentToString\n ? \"\"\n : [\n {\n index: data.index,\n input: data.delta.partial_json,\n type: data.delta.type,\n },\n ],\n response_metadata,\n additional_kwargs: {},\n tool_call_chunks: [\n {\n index: data.index,\n args: data.delta.partial_json,\n },\n ],\n }),\n };\n } else if (\n data.type === \"content_block_start\" &&\n data.content_block.type === \"text\"\n ) {\n const content = data.content_block?.text;\n if (content !== undefined) {\n return {\n chunk: new AIMessageChunk({\n content: fields.coerceContentToString\n ? content\n : [\n {\n index: data.index,\n ...data.content_block,\n },\n ],\n response_metadata,\n additional_kwargs: {},\n }),\n };\n }\n } else if (\n data.type === \"content_block_start\" &&\n data.content_block.type === \"redacted_thinking\"\n ) {\n return {\n chunk: new AIMessageChunk({\n content: fields.coerceContentToString\n ? \"\"\n : [{ index: data.index, ...data.content_block }],\n response_metadata,\n }),\n };\n } else if (\n data.type === \"content_block_start\" &&\n data.content_block.type === \"thinking\"\n ) {\n const content = data.content_block.thinking;\n return {\n chunk: new AIMessageChunk({\n content: fields.coerceContentToString\n ? content\n : [{ index: data.index, ...data.content_block }],\n response_metadata,\n }),\n };\n } else if (\n data.type === \"content_block_start\" &&\n _isAnthropicCompactionBlock(data.content_block)\n ) {\n return {\n chunk: new AIMessageChunk({\n content: fields.coerceContentToString\n ? \"\"\n : [{ index: data.index, ...data.content_block }],\n response_metadata,\n }),\n };\n } else if (\n data.type === \"content_block_delta\" &&\n data.delta.type === \"compaction_delta\"\n ) {\n return {\n chunk: new AIMessageChunk({\n content: fields.coerceContentToString\n ? \"\"\n : [\n {\n index: data.index,\n ...data.delta,\n type: \"compaction\",\n },\n ],\n response_metadata,\n }),\n };\n }\n return null;\n}\n\nexport function anthropicResponseToChatMessages(\n messages: AnthropicMessageResponse[],\n additionalKwargs: Record<string, unknown>\n): ChatGeneration[] {\n const response_metadata = {\n ...additionalKwargs,\n model_provider: \"anthropic\",\n };\n const usage: Record<string, number> | null | undefined =\n additionalKwargs.usage as Record<string, number> | null | undefined;\n const usageMetadata = usage != null ? buildUsageMetadata(usage) : undefined;\n if (messages.length === 1 && messages[0].type === \"text\") {\n return [\n {\n text: messages[0].text,\n message: new AIMessage({\n content: messages[0].text,\n additional_kwargs: additionalKwargs,\n usage_metadata: usageMetadata,\n response_metadata,\n id: additionalKwargs.id as string,\n }),\n },\n ];\n } else {\n const toolCalls = extractToolCalls(messages);\n const generations: ChatGeneration[] = [\n {\n text: \"\",\n message: new AIMessage({\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n content: messages as any,\n additional_kwargs: additionalKwargs,\n tool_calls: toolCalls,\n usage_metadata: usageMetadata,\n response_metadata,\n id: additionalKwargs.id as string,\n }),\n },\n ];\n return generations;\n }\n}\n\nfunction buildUsageMetadata(\n usage: Anthropic.Messages.Usage | Record<string, number>\n): UsageMetadata {\n const cacheCreationInputTokens = usage.cache_creation_input_tokens ?? 0;\n const cacheReadInputTokens = usage.cache_read_input_tokens ?? 0;\n // Total input tokens in a Claude API request is the summation of `input_tokens`, `cache_creation_input_tokens`, and `cache_read_input_tokens`.\n // ref: https://platform.claude.com/docs/en/api/messages\n const totalInputTokens =\n usage.input_tokens + cacheCreationInputTokens + cacheReadInputTokens;\n return {\n input_tokens: totalInputTokens,\n output_tokens: usage.output_tokens,\n total_tokens: totalInputTokens + usage.output_tokens,\n input_token_details: {\n cache_creation: cacheCreationInputTokens,\n cache_read: cacheReadInputTokens,\n },\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"message_outputs.cjs","names":["AIMessageChunk","_isAnthropicCompactionBlock","AIMessage","extractToolCalls"],"sources":["../../src/utils/message_outputs.ts"],"sourcesContent":["/**\n * This util file contains functions for converting Anthropic messages to LangChain messages.\n */\nimport Anthropic from \"@anthropic-ai/sdk\";\nimport {\n AIMessage,\n AIMessageChunk,\n UsageMetadata,\n} from \"@langchain/core/messages\";\nimport type { ToolCallChunk } from \"@langchain/core/messages/tool\";\nimport { ChatGeneration } from \"@langchain/core/outputs\";\nimport { AnthropicMessageResponse } from \"../types.js\";\nimport { extractToolCalls } from \"../output_parsers.js\";\nimport { _isAnthropicCompactionBlock } from \"./content.js\";\n\nexport function _makeMessageChunkFromAnthropicEvent(\n data: Anthropic.Beta.Messages.BetaRawMessageStreamEvent,\n fields: {\n streamUsage: boolean;\n coerceContentToString: boolean;\n }\n): {\n chunk: AIMessageChunk;\n} | null {\n const response_metadata = { model_provider: \"anthropic\" };\n if (data.type === \"message_start\") {\n const { content, usage, ...additionalKwargs } = data.message;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const filteredAdditionalKwargs: Record<string, any> = {};\n for (const [key, value] of Object.entries(additionalKwargs)) {\n if (value !== undefined && value !== null) {\n filteredAdditionalKwargs[key] = value;\n }\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const { input_tokens, output_tokens, ...rest }: Record<string, any> =\n usage ?? {};\n const usageMetadata = buildUsageMetadata(usage);\n return {\n chunk: new AIMessageChunk({\n content: fields.coerceContentToString ? \"\" : [],\n additional_kwargs: filteredAdditionalKwargs,\n usage_metadata: fields.streamUsage ? usageMetadata : undefined,\n response_metadata: {\n ...response_metadata,\n usage: {\n ...rest,\n },\n },\n id: data.message.id,\n }),\n };\n } else if (data.type === \"message_delta\") {\n const usageMetadata: UsageMetadata = {\n input_tokens: 0,\n output_tokens: data.usage.output_tokens,\n total_tokens: data.usage.output_tokens,\n };\n const responseMetadata =\n \"context_management\" in data.delta\n ? { context_management: data.delta.context_management }\n : undefined;\n return {\n chunk: new AIMessageChunk({\n content: fields.coerceContentToString ? \"\" : [],\n response_metadata: responseMetadata,\n additional_kwargs: { ...data.delta },\n usage_metadata: fields.streamUsage ? usageMetadata : undefined,\n }),\n };\n } else if (\n data.type === \"content_block_start\" &&\n [\n \"tool_use\",\n \"document\",\n \"server_tool_use\",\n \"web_search_tool_result\",\n ].includes(data.content_block.type)\n ) {\n const contentBlock = data.content_block;\n let toolCallChunks: ToolCallChunk[];\n if (contentBlock.type === \"tool_use\") {\n toolCallChunks = [\n {\n id: contentBlock.id,\n index: data.index,\n name: contentBlock.name,\n args: \"\",\n },\n ];\n } else {\n toolCallChunks = [];\n }\n return {\n chunk: new AIMessageChunk({\n content: fields.coerceContentToString\n ? \"\"\n : [\n {\n index: data.index,\n ...data.content_block,\n input:\n contentBlock.type === \"server_tool_use\" ||\n contentBlock.type === \"tool_use\"\n ? \"\"\n : undefined,\n },\n ],\n response_metadata,\n additional_kwargs: {},\n tool_call_chunks: toolCallChunks,\n }),\n };\n } else if (\n data.type === \"content_block_delta\" &&\n [\n \"text_delta\",\n \"citations_delta\",\n \"thinking_delta\",\n \"signature_delta\",\n ].includes(data.delta.type)\n ) {\n if (fields.coerceContentToString && \"text\" in data.delta) {\n return {\n chunk: new AIMessageChunk({\n content: data.delta.text,\n }),\n };\n } else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const contentBlock: Record<string, any> = data.delta;\n if (\"citation\" in contentBlock) {\n contentBlock.citations = [contentBlock.citation];\n delete contentBlock.citation;\n }\n if (\n contentBlock.type === \"thinking_delta\" ||\n contentBlock.type === \"signature_delta\"\n ) {\n return {\n chunk: new AIMessageChunk({\n content: [{ index: data.index, ...contentBlock, type: \"thinking\" }],\n response_metadata,\n }),\n };\n }\n\n return {\n chunk: new AIMessageChunk({\n content: [{ index: data.index, ...contentBlock, type: \"text\" }],\n response_metadata,\n }),\n };\n }\n } else if (\n data.type === \"content_block_delta\" &&\n data.delta.type === \"input_json_delta\"\n ) {\n return {\n chunk: new AIMessageChunk({\n content: fields.coerceContentToString\n ? \"\"\n : [\n {\n index: data.index,\n input: data.delta.partial_json,\n type: data.delta.type,\n },\n ],\n response_metadata,\n additional_kwargs: {},\n tool_call_chunks: [\n {\n index: data.index,\n args: data.delta.partial_json,\n },\n ],\n }),\n };\n } else if (\n data.type === \"content_block_start\" &&\n data.content_block.type === \"text\"\n ) {\n const content = data.content_block?.text;\n if (content !== undefined) {\n return {\n chunk: new AIMessageChunk({\n content: fields.coerceContentToString\n ? content\n : [\n {\n index: data.index,\n ...data.content_block,\n },\n ],\n response_metadata,\n additional_kwargs: {},\n }),\n };\n }\n } else if (\n data.type === \"content_block_start\" &&\n data.content_block.type === \"redacted_thinking\"\n ) {\n return {\n chunk: new AIMessageChunk({\n content: fields.coerceContentToString\n ? \"\"\n : [{ index: data.index, ...data.content_block }],\n response_metadata,\n }),\n };\n } else if (\n data.type === \"content_block_start\" &&\n data.content_block.type === \"thinking\"\n ) {\n const content = data.content_block.thinking;\n return {\n chunk: new AIMessageChunk({\n content: fields.coerceContentToString\n ? content\n : [{ index: data.index, ...data.content_block }],\n response_metadata,\n }),\n };\n } else if (\n data.type === \"content_block_start\" &&\n _isAnthropicCompactionBlock(data.content_block)\n ) {\n return {\n chunk: new AIMessageChunk({\n content: fields.coerceContentToString\n ? \"\"\n : [{ index: data.index, ...data.content_block }],\n response_metadata,\n }),\n };\n } else if (\n data.type === \"content_block_delta\" &&\n data.delta.type === \"compaction_delta\"\n ) {\n return {\n chunk: new AIMessageChunk({\n content: fields.coerceContentToString\n ? \"\"\n : [\n {\n index: data.index,\n ...data.delta,\n type: \"compaction\",\n },\n ],\n response_metadata,\n }),\n };\n }\n return null;\n}\n\nexport function anthropicResponseToChatMessages(\n messages: AnthropicMessageResponse[],\n additionalKwargs: Record<string, unknown>\n): ChatGeneration[] {\n const response_metadata = {\n ...additionalKwargs,\n model_provider: \"anthropic\",\n };\n const usage: Record<string, number> | null | undefined =\n additionalKwargs.usage as Record<string, number> | null | undefined;\n const usageMetadata = usage != null ? buildUsageMetadata(usage) : undefined;\n if (messages.length === 1 && messages[0].type === \"text\") {\n return [\n {\n text: messages[0].text,\n message: new AIMessage({\n content: messages[0].text,\n additional_kwargs: additionalKwargs,\n usage_metadata: usageMetadata,\n response_metadata,\n id: additionalKwargs.id as string,\n }),\n },\n ];\n } else {\n const toolCalls = extractToolCalls(messages);\n const generations: ChatGeneration[] = [\n {\n text: \"\",\n message: new AIMessage({\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n content: messages as any,\n additional_kwargs: additionalKwargs,\n tool_calls: toolCalls,\n usage_metadata: usageMetadata,\n response_metadata,\n id: additionalKwargs.id as string,\n }),\n },\n ];\n return generations;\n }\n}\n\nfunction buildUsageMetadata(\n usage: Anthropic.Messages.Usage | Record<string, number>\n): UsageMetadata {\n const cacheCreationInputTokens = usage.cache_creation_input_tokens ?? 0;\n const cacheReadInputTokens = usage.cache_read_input_tokens ?? 0;\n // Total input tokens in a Claude API request is the summation of `input_tokens`, `cache_creation_input_tokens`, and `cache_read_input_tokens`.\n // ref: https://platform.claude.com/docs/en/api/messages\n const totalInputTokens =\n usage.input_tokens + cacheCreationInputTokens + cacheReadInputTokens;\n return {\n input_tokens: totalInputTokens,\n output_tokens: usage.output_tokens,\n total_tokens: totalInputTokens + usage.output_tokens,\n input_token_details: {\n cache_creation: cacheCreationInputTokens,\n cache_read: cacheReadInputTokens,\n },\n };\n}\n"],"mappings":"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"}
@@ -25,11 +25,7 @@ function _makeMessageChunkFromAnthropicEvent(data, fields) {
25
25
  const usageMetadata = {
26
26
  input_tokens: 0,
27
27
  output_tokens: data.usage.output_tokens,
28
- total_tokens: data.usage.output_tokens,
29
- input_token_details: {
30
- cache_creation: data.usage.cache_creation_input_tokens,
31
- cache_read: data.usage.cache_read_input_tokens
32
- }
28
+ total_tokens: data.usage.output_tokens
33
29
  };
34
30
  const responseMetadata = "context_management" in data.delta ? { context_management: data.delta.context_management } : void 0;
35
31
  return { chunk: new AIMessageChunk({
@@ -1 +1 @@
1
- {"version":3,"file":"message_outputs.js","names":[],"sources":["../../src/utils/message_outputs.ts"],"sourcesContent":["/**\n * This util file contains functions for converting Anthropic messages to LangChain messages.\n */\nimport Anthropic from \"@anthropic-ai/sdk\";\nimport {\n AIMessage,\n AIMessageChunk,\n UsageMetadata,\n} from \"@langchain/core/messages\";\nimport type { ToolCallChunk } from \"@langchain/core/messages/tool\";\nimport { ChatGeneration } from \"@langchain/core/outputs\";\nimport { AnthropicMessageResponse } from \"../types.js\";\nimport { extractToolCalls } from \"../output_parsers.js\";\nimport { _isAnthropicCompactionBlock } from \"./content.js\";\n\nexport function _makeMessageChunkFromAnthropicEvent(\n data: Anthropic.Beta.Messages.BetaRawMessageStreamEvent,\n fields: {\n streamUsage: boolean;\n coerceContentToString: boolean;\n }\n): {\n chunk: AIMessageChunk;\n} | null {\n const response_metadata = { model_provider: \"anthropic\" };\n if (data.type === \"message_start\") {\n const { content, usage, ...additionalKwargs } = data.message;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const filteredAdditionalKwargs: Record<string, any> = {};\n for (const [key, value] of Object.entries(additionalKwargs)) {\n if (value !== undefined && value !== null) {\n filteredAdditionalKwargs[key] = value;\n }\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const { input_tokens, output_tokens, ...rest }: Record<string, any> =\n usage ?? {};\n const usageMetadata = buildUsageMetadata(usage);\n return {\n chunk: new AIMessageChunk({\n content: fields.coerceContentToString ? \"\" : [],\n additional_kwargs: filteredAdditionalKwargs,\n usage_metadata: fields.streamUsage ? usageMetadata : undefined,\n response_metadata: {\n ...response_metadata,\n usage: {\n ...rest,\n },\n },\n id: data.message.id,\n }),\n };\n } else if (data.type === \"message_delta\") {\n const usageMetadata: UsageMetadata = {\n input_tokens: 0,\n output_tokens: data.usage.output_tokens,\n total_tokens: data.usage.output_tokens,\n input_token_details: {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n cache_creation: (data.usage as any).cache_creation_input_tokens,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n cache_read: (data.usage as any).cache_read_input_tokens,\n },\n };\n const responseMetadata =\n \"context_management\" in data.delta\n ? { context_management: data.delta.context_management }\n : undefined;\n return {\n chunk: new AIMessageChunk({\n content: fields.coerceContentToString ? \"\" : [],\n response_metadata: responseMetadata,\n additional_kwargs: { ...data.delta },\n usage_metadata: fields.streamUsage ? usageMetadata : undefined,\n }),\n };\n } else if (\n data.type === \"content_block_start\" &&\n [\n \"tool_use\",\n \"document\",\n \"server_tool_use\",\n \"web_search_tool_result\",\n ].includes(data.content_block.type)\n ) {\n const contentBlock = data.content_block;\n let toolCallChunks: ToolCallChunk[];\n if (contentBlock.type === \"tool_use\") {\n toolCallChunks = [\n {\n id: contentBlock.id,\n index: data.index,\n name: contentBlock.name,\n args: \"\",\n },\n ];\n } else {\n toolCallChunks = [];\n }\n return {\n chunk: new AIMessageChunk({\n content: fields.coerceContentToString\n ? \"\"\n : [\n {\n index: data.index,\n ...data.content_block,\n input:\n contentBlock.type === \"server_tool_use\" ||\n contentBlock.type === \"tool_use\"\n ? \"\"\n : undefined,\n },\n ],\n response_metadata,\n additional_kwargs: {},\n tool_call_chunks: toolCallChunks,\n }),\n };\n } else if (\n data.type === \"content_block_delta\" &&\n [\n \"text_delta\",\n \"citations_delta\",\n \"thinking_delta\",\n \"signature_delta\",\n ].includes(data.delta.type)\n ) {\n if (fields.coerceContentToString && \"text\" in data.delta) {\n return {\n chunk: new AIMessageChunk({\n content: data.delta.text,\n }),\n };\n } else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const contentBlock: Record<string, any> = data.delta;\n if (\"citation\" in contentBlock) {\n contentBlock.citations = [contentBlock.citation];\n delete contentBlock.citation;\n }\n if (\n contentBlock.type === \"thinking_delta\" ||\n contentBlock.type === \"signature_delta\"\n ) {\n return {\n chunk: new AIMessageChunk({\n content: [{ index: data.index, ...contentBlock, type: \"thinking\" }],\n response_metadata,\n }),\n };\n }\n\n return {\n chunk: new AIMessageChunk({\n content: [{ index: data.index, ...contentBlock, type: \"text\" }],\n response_metadata,\n }),\n };\n }\n } else if (\n data.type === \"content_block_delta\" &&\n data.delta.type === \"input_json_delta\"\n ) {\n return {\n chunk: new AIMessageChunk({\n content: fields.coerceContentToString\n ? \"\"\n : [\n {\n index: data.index,\n input: data.delta.partial_json,\n type: data.delta.type,\n },\n ],\n response_metadata,\n additional_kwargs: {},\n tool_call_chunks: [\n {\n index: data.index,\n args: data.delta.partial_json,\n },\n ],\n }),\n };\n } else if (\n data.type === \"content_block_start\" &&\n data.content_block.type === \"text\"\n ) {\n const content = data.content_block?.text;\n if (content !== undefined) {\n return {\n chunk: new AIMessageChunk({\n content: fields.coerceContentToString\n ? content\n : [\n {\n index: data.index,\n ...data.content_block,\n },\n ],\n response_metadata,\n additional_kwargs: {},\n }),\n };\n }\n } else if (\n data.type === \"content_block_start\" &&\n data.content_block.type === \"redacted_thinking\"\n ) {\n return {\n chunk: new AIMessageChunk({\n content: fields.coerceContentToString\n ? \"\"\n : [{ index: data.index, ...data.content_block }],\n response_metadata,\n }),\n };\n } else if (\n data.type === \"content_block_start\" &&\n data.content_block.type === \"thinking\"\n ) {\n const content = data.content_block.thinking;\n return {\n chunk: new AIMessageChunk({\n content: fields.coerceContentToString\n ? content\n : [{ index: data.index, ...data.content_block }],\n response_metadata,\n }),\n };\n } else if (\n data.type === \"content_block_start\" &&\n _isAnthropicCompactionBlock(data.content_block)\n ) {\n return {\n chunk: new AIMessageChunk({\n content: fields.coerceContentToString\n ? \"\"\n : [{ index: data.index, ...data.content_block }],\n response_metadata,\n }),\n };\n } else if (\n data.type === \"content_block_delta\" &&\n data.delta.type === \"compaction_delta\"\n ) {\n return {\n chunk: new AIMessageChunk({\n content: fields.coerceContentToString\n ? \"\"\n : [\n {\n index: data.index,\n ...data.delta,\n type: \"compaction\",\n },\n ],\n response_metadata,\n }),\n };\n }\n return null;\n}\n\nexport function anthropicResponseToChatMessages(\n messages: AnthropicMessageResponse[],\n additionalKwargs: Record<string, unknown>\n): ChatGeneration[] {\n const response_metadata = {\n ...additionalKwargs,\n model_provider: \"anthropic\",\n };\n const usage: Record<string, number> | null | undefined =\n additionalKwargs.usage as Record<string, number> | null | undefined;\n const usageMetadata = usage != null ? buildUsageMetadata(usage) : undefined;\n if (messages.length === 1 && messages[0].type === \"text\") {\n return [\n {\n text: messages[0].text,\n message: new AIMessage({\n content: messages[0].text,\n additional_kwargs: additionalKwargs,\n usage_metadata: usageMetadata,\n response_metadata,\n id: additionalKwargs.id as string,\n }),\n },\n ];\n } else {\n const toolCalls = extractToolCalls(messages);\n const generations: ChatGeneration[] = [\n {\n text: \"\",\n message: new AIMessage({\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n content: messages as any,\n additional_kwargs: additionalKwargs,\n tool_calls: toolCalls,\n usage_metadata: usageMetadata,\n response_metadata,\n id: additionalKwargs.id as string,\n }),\n },\n ];\n return generations;\n }\n}\n\nfunction buildUsageMetadata(\n usage: Anthropic.Messages.Usage | Record<string, number>\n): UsageMetadata {\n const cacheCreationInputTokens = usage.cache_creation_input_tokens ?? 0;\n const cacheReadInputTokens = usage.cache_read_input_tokens ?? 0;\n // Total input tokens in a Claude API request is the summation of `input_tokens`, `cache_creation_input_tokens`, and `cache_read_input_tokens`.\n // ref: https://platform.claude.com/docs/en/api/messages\n const totalInputTokens =\n usage.input_tokens + cacheCreationInputTokens + cacheReadInputTokens;\n return {\n input_tokens: totalInputTokens,\n output_tokens: usage.output_tokens,\n total_tokens: totalInputTokens + usage.output_tokens,\n input_token_details: {\n cache_creation: cacheCreationInputTokens,\n cache_read: cacheReadInputTokens,\n },\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"message_outputs.js","names":[],"sources":["../../src/utils/message_outputs.ts"],"sourcesContent":["/**\n * This util file contains functions for converting Anthropic messages to LangChain messages.\n */\nimport Anthropic from \"@anthropic-ai/sdk\";\nimport {\n AIMessage,\n AIMessageChunk,\n UsageMetadata,\n} from \"@langchain/core/messages\";\nimport type { ToolCallChunk } from \"@langchain/core/messages/tool\";\nimport { ChatGeneration } from \"@langchain/core/outputs\";\nimport { AnthropicMessageResponse } from \"../types.js\";\nimport { extractToolCalls } from \"../output_parsers.js\";\nimport { _isAnthropicCompactionBlock } from \"./content.js\";\n\nexport function _makeMessageChunkFromAnthropicEvent(\n data: Anthropic.Beta.Messages.BetaRawMessageStreamEvent,\n fields: {\n streamUsage: boolean;\n coerceContentToString: boolean;\n }\n): {\n chunk: AIMessageChunk;\n} | null {\n const response_metadata = { model_provider: \"anthropic\" };\n if (data.type === \"message_start\") {\n const { content, usage, ...additionalKwargs } = data.message;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const filteredAdditionalKwargs: Record<string, any> = {};\n for (const [key, value] of Object.entries(additionalKwargs)) {\n if (value !== undefined && value !== null) {\n filteredAdditionalKwargs[key] = value;\n }\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const { input_tokens, output_tokens, ...rest }: Record<string, any> =\n usage ?? {};\n const usageMetadata = buildUsageMetadata(usage);\n return {\n chunk: new AIMessageChunk({\n content: fields.coerceContentToString ? \"\" : [],\n additional_kwargs: filteredAdditionalKwargs,\n usage_metadata: fields.streamUsage ? usageMetadata : undefined,\n response_metadata: {\n ...response_metadata,\n usage: {\n ...rest,\n },\n },\n id: data.message.id,\n }),\n };\n } else if (data.type === \"message_delta\") {\n const usageMetadata: UsageMetadata = {\n input_tokens: 0,\n output_tokens: data.usage.output_tokens,\n total_tokens: data.usage.output_tokens,\n };\n const responseMetadata =\n \"context_management\" in data.delta\n ? { context_management: data.delta.context_management }\n : undefined;\n return {\n chunk: new AIMessageChunk({\n content: fields.coerceContentToString ? \"\" : [],\n response_metadata: responseMetadata,\n additional_kwargs: { ...data.delta },\n usage_metadata: fields.streamUsage ? usageMetadata : undefined,\n }),\n };\n } else if (\n data.type === \"content_block_start\" &&\n [\n \"tool_use\",\n \"document\",\n \"server_tool_use\",\n \"web_search_tool_result\",\n ].includes(data.content_block.type)\n ) {\n const contentBlock = data.content_block;\n let toolCallChunks: ToolCallChunk[];\n if (contentBlock.type === \"tool_use\") {\n toolCallChunks = [\n {\n id: contentBlock.id,\n index: data.index,\n name: contentBlock.name,\n args: \"\",\n },\n ];\n } else {\n toolCallChunks = [];\n }\n return {\n chunk: new AIMessageChunk({\n content: fields.coerceContentToString\n ? \"\"\n : [\n {\n index: data.index,\n ...data.content_block,\n input:\n contentBlock.type === \"server_tool_use\" ||\n contentBlock.type === \"tool_use\"\n ? \"\"\n : undefined,\n },\n ],\n response_metadata,\n additional_kwargs: {},\n tool_call_chunks: toolCallChunks,\n }),\n };\n } else if (\n data.type === \"content_block_delta\" &&\n [\n \"text_delta\",\n \"citations_delta\",\n \"thinking_delta\",\n \"signature_delta\",\n ].includes(data.delta.type)\n ) {\n if (fields.coerceContentToString && \"text\" in data.delta) {\n return {\n chunk: new AIMessageChunk({\n content: data.delta.text,\n }),\n };\n } else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const contentBlock: Record<string, any> = data.delta;\n if (\"citation\" in contentBlock) {\n contentBlock.citations = [contentBlock.citation];\n delete contentBlock.citation;\n }\n if (\n contentBlock.type === \"thinking_delta\" ||\n contentBlock.type === \"signature_delta\"\n ) {\n return {\n chunk: new AIMessageChunk({\n content: [{ index: data.index, ...contentBlock, type: \"thinking\" }],\n response_metadata,\n }),\n };\n }\n\n return {\n chunk: new AIMessageChunk({\n content: [{ index: data.index, ...contentBlock, type: \"text\" }],\n response_metadata,\n }),\n };\n }\n } else if (\n data.type === \"content_block_delta\" &&\n data.delta.type === \"input_json_delta\"\n ) {\n return {\n chunk: new AIMessageChunk({\n content: fields.coerceContentToString\n ? \"\"\n : [\n {\n index: data.index,\n input: data.delta.partial_json,\n type: data.delta.type,\n },\n ],\n response_metadata,\n additional_kwargs: {},\n tool_call_chunks: [\n {\n index: data.index,\n args: data.delta.partial_json,\n },\n ],\n }),\n };\n } else if (\n data.type === \"content_block_start\" &&\n data.content_block.type === \"text\"\n ) {\n const content = data.content_block?.text;\n if (content !== undefined) {\n return {\n chunk: new AIMessageChunk({\n content: fields.coerceContentToString\n ? content\n : [\n {\n index: data.index,\n ...data.content_block,\n },\n ],\n response_metadata,\n additional_kwargs: {},\n }),\n };\n }\n } else if (\n data.type === \"content_block_start\" &&\n data.content_block.type === \"redacted_thinking\"\n ) {\n return {\n chunk: new AIMessageChunk({\n content: fields.coerceContentToString\n ? \"\"\n : [{ index: data.index, ...data.content_block }],\n response_metadata,\n }),\n };\n } else if (\n data.type === \"content_block_start\" &&\n data.content_block.type === \"thinking\"\n ) {\n const content = data.content_block.thinking;\n return {\n chunk: new AIMessageChunk({\n content: fields.coerceContentToString\n ? content\n : [{ index: data.index, ...data.content_block }],\n response_metadata,\n }),\n };\n } else if (\n data.type === \"content_block_start\" &&\n _isAnthropicCompactionBlock(data.content_block)\n ) {\n return {\n chunk: new AIMessageChunk({\n content: fields.coerceContentToString\n ? \"\"\n : [{ index: data.index, ...data.content_block }],\n response_metadata,\n }),\n };\n } else if (\n data.type === \"content_block_delta\" &&\n data.delta.type === \"compaction_delta\"\n ) {\n return {\n chunk: new AIMessageChunk({\n content: fields.coerceContentToString\n ? \"\"\n : [\n {\n index: data.index,\n ...data.delta,\n type: \"compaction\",\n },\n ],\n response_metadata,\n }),\n };\n }\n return null;\n}\n\nexport function anthropicResponseToChatMessages(\n messages: AnthropicMessageResponse[],\n additionalKwargs: Record<string, unknown>\n): ChatGeneration[] {\n const response_metadata = {\n ...additionalKwargs,\n model_provider: \"anthropic\",\n };\n const usage: Record<string, number> | null | undefined =\n additionalKwargs.usage as Record<string, number> | null | undefined;\n const usageMetadata = usage != null ? buildUsageMetadata(usage) : undefined;\n if (messages.length === 1 && messages[0].type === \"text\") {\n return [\n {\n text: messages[0].text,\n message: new AIMessage({\n content: messages[0].text,\n additional_kwargs: additionalKwargs,\n usage_metadata: usageMetadata,\n response_metadata,\n id: additionalKwargs.id as string,\n }),\n },\n ];\n } else {\n const toolCalls = extractToolCalls(messages);\n const generations: ChatGeneration[] = [\n {\n text: \"\",\n message: new AIMessage({\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n content: messages as any,\n additional_kwargs: additionalKwargs,\n tool_calls: toolCalls,\n usage_metadata: usageMetadata,\n response_metadata,\n id: additionalKwargs.id as string,\n }),\n },\n ];\n return generations;\n }\n}\n\nfunction buildUsageMetadata(\n usage: Anthropic.Messages.Usage | Record<string, number>\n): UsageMetadata {\n const cacheCreationInputTokens = usage.cache_creation_input_tokens ?? 0;\n const cacheReadInputTokens = usage.cache_read_input_tokens ?? 0;\n // Total input tokens in a Claude API request is the summation of `input_tokens`, `cache_creation_input_tokens`, and `cache_read_input_tokens`.\n // ref: https://platform.claude.com/docs/en/api/messages\n const totalInputTokens =\n usage.input_tokens + cacheCreationInputTokens + cacheReadInputTokens;\n return {\n input_tokens: totalInputTokens,\n output_tokens: usage.output_tokens,\n total_tokens: totalInputTokens + usage.output_tokens,\n input_token_details: {\n cache_creation: cacheCreationInputTokens,\n cache_read: cacheReadInputTokens,\n },\n };\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@langchain/anthropic",
3
- "version": "1.3.22",
3
+ "version": "1.3.23",
4
4
  "description": "Anthropic integrations for LangChain.js",
5
5
  "author": "LangChain",
6
6
  "license": "MIT",
@@ -12,13 +12,13 @@
12
12
  "type": "git",
13
13
  "url": "git@github.com:langchain-ai/langchainjs.git"
14
14
  },
15
- "homepage": "https://github.com/langchain-ai/langchainjs/tree/main/libs/langchain-anthropic/",
15
+ "homepage": "https://github.com/langchain-ai/langchainjs/tree/main/libs/providers/langchain-anthropic/",
16
16
  "dependencies": {
17
17
  "@anthropic-ai/sdk": "^0.74.0",
18
18
  "zod": "^3.25.76 || ^4"
19
19
  },
20
20
  "peerDependencies": {
21
- "@langchain/core": "^1.1.30"
21
+ "@langchain/core": "^1.1.32"
22
22
  },
23
23
  "devDependencies": {
24
24
  "@anthropic-ai/vertex-sdk": "^0.14.4",
@@ -29,13 +29,13 @@
29
29
  "dpdm": "^3.14.0",
30
30
  "eslint": "^9.34.0",
31
31
  "prettier": "^3.5.0",
32
- "rimraf": "^5.0.1",
32
+ "rimraf": "^6.1.3",
33
33
  "typescript": "~5.8.3",
34
34
  "uuid": "^13.0.0",
35
35
  "vitest": "^3.2.4",
36
- "@langchain/core": "^1.1.30",
37
- "@langchain/eslint": "0.1.1",
36
+ "@langchain/core": "^1.1.32",
38
37
  "@langchain/standard-tests": "0.0.23",
38
+ "@langchain/eslint": "0.1.1",
39
39
  "@langchain/tsconfig": "0.0.1"
40
40
  },
41
41
  "publishConfig": {