@langchain/anthropic 0.3.7 → 0.3.9

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.
@@ -7,7 +7,7 @@ import { BaseChatModel, BaseChatModelCallOptions, LangSmithParams, type BaseChat
7
7
  import { type StructuredOutputMethodOptions, type BaseLanguageModelInput } from "@langchain/core/language_models/base";
8
8
  import { Runnable } from "@langchain/core/runnables";
9
9
  import { z } from "zod";
10
- import type { Tool as AnthropicTool } from "@anthropic-ai/sdk/resources/index.mjs";
10
+ import type { Tool as AnthropicTool } from "@anthropic-ai/sdk/resources/messages";
11
11
  import { AnthropicMessageCreateParams, AnthropicMessageStreamEvent, AnthropicRequestOptions, AnthropicStreamingMessageCreateParams, AnthropicToolChoice, ChatAnthropicToolType } from "./types.js";
12
12
  export interface ChatAnthropicCallOptions extends BaseChatModelCallOptions, Pick<AnthropicInput, "streamUsage"> {
13
13
  tools?: ChatAnthropicToolType[];
@@ -554,6 +554,7 @@ export declare class ChatAnthropicMessages<CallOptions extends ChatAnthropicCall
554
554
  id: string;
555
555
  model: Anthropic.Messages.Model;
556
556
  stop_reason: "tool_use" | "stop_sequence" | "end_turn" | "max_tokens" | null;
557
+ /** Anthropic API key */
557
558
  stop_sequence: string | null;
558
559
  usage: Anthropic.Messages.Usage;
559
560
  };
package/dist/types.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import Anthropic from "@anthropic-ai/sdk";
2
- import type { Tool as AnthropicTool } from "@anthropic-ai/sdk/resources/index.mjs";
2
+ import type { Tool as AnthropicTool } from "@anthropic-ai/sdk/resources/messages";
3
3
  import { BindToolsInput } from "@langchain/core/language_models/chat_models";
4
4
  export type AnthropicToolResponse = {
5
5
  type: "tool_use";
@@ -21,13 +21,13 @@ function _formatImage(imageUrl) {
21
21
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
22
22
  };
23
23
  }
24
- function _mergeMessages(messages) {
24
+ function _ensureMessageContents(messages) {
25
25
  // Merge runs of human/tool messages into single human messages with content blocks.
26
- const merged = [];
26
+ const updatedMsgs = [];
27
27
  for (const message of messages) {
28
28
  if (message._getType() === "tool") {
29
29
  if (typeof message.content === "string") {
30
- const previousMessage = merged[merged.length - 1];
30
+ const previousMessage = updatedMsgs[updatedMsgs.length - 1];
31
31
  if (previousMessage?._getType() === "human" &&
32
32
  Array.isArray(previousMessage.content) &&
33
33
  "type" in previousMessage.content[0] &&
@@ -41,7 +41,7 @@ function _mergeMessages(messages) {
41
41
  }
42
42
  else {
43
43
  // If not, we create a new human message with the tool result.
44
- merged.push(new messages_1.HumanMessage({
44
+ updatedMsgs.push(new messages_1.HumanMessage({
45
45
  content: [
46
46
  {
47
47
  type: "tool_result",
@@ -53,7 +53,7 @@ function _mergeMessages(messages) {
53
53
  }
54
54
  }
55
55
  else {
56
- merged.push(new messages_1.HumanMessage({
56
+ updatedMsgs.push(new messages_1.HumanMessage({
57
57
  content: [
58
58
  {
59
59
  type: "tool_result",
@@ -65,31 +65,10 @@ function _mergeMessages(messages) {
65
65
  }
66
66
  }
67
67
  else {
68
- const previousMessage = merged[merged.length - 1];
69
- if (previousMessage?._getType() === "human" &&
70
- message._getType() === "human") {
71
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
72
- let combinedContent;
73
- if (typeof previousMessage.content === "string") {
74
- combinedContent = [{ type: "text", text: previousMessage.content }];
75
- }
76
- else {
77
- combinedContent = previousMessage.content;
78
- }
79
- if (typeof message.content === "string") {
80
- combinedContent.push({ type: "text", text: message.content });
81
- }
82
- else {
83
- combinedContent = combinedContent.concat(message.content);
84
- }
85
- previousMessage.content = combinedContent;
86
- }
87
- else {
88
- merged.push(message);
89
- }
68
+ updatedMsgs.push(message);
90
69
  }
91
70
  }
92
- return merged;
71
+ return updatedMsgs;
93
72
  }
94
73
  function _convertLangChainToolCallToAnthropic(toolCall) {
95
74
  if (toolCall.id === undefined) {
@@ -176,7 +155,7 @@ function _formatContent(content) {
176
155
  * @returns The formatted prompt.
177
156
  */
178
157
  function _convertMessagesToAnthropicPayload(messages) {
179
- const mergedMessages = _mergeMessages(messages);
158
+ const mergedMessages = _ensureMessageContents(messages);
180
159
  let system;
181
160
  if (mergedMessages.length > 0 && mergedMessages[0]._getType() === "system") {
182
161
  system = messages[0].content;
@@ -18,13 +18,13 @@ function _formatImage(imageUrl) {
18
18
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
19
19
  };
20
20
  }
21
- function _mergeMessages(messages) {
21
+ function _ensureMessageContents(messages) {
22
22
  // Merge runs of human/tool messages into single human messages with content blocks.
23
- const merged = [];
23
+ const updatedMsgs = [];
24
24
  for (const message of messages) {
25
25
  if (message._getType() === "tool") {
26
26
  if (typeof message.content === "string") {
27
- const previousMessage = merged[merged.length - 1];
27
+ const previousMessage = updatedMsgs[updatedMsgs.length - 1];
28
28
  if (previousMessage?._getType() === "human" &&
29
29
  Array.isArray(previousMessage.content) &&
30
30
  "type" in previousMessage.content[0] &&
@@ -38,7 +38,7 @@ function _mergeMessages(messages) {
38
38
  }
39
39
  else {
40
40
  // If not, we create a new human message with the tool result.
41
- merged.push(new HumanMessage({
41
+ updatedMsgs.push(new HumanMessage({
42
42
  content: [
43
43
  {
44
44
  type: "tool_result",
@@ -50,7 +50,7 @@ function _mergeMessages(messages) {
50
50
  }
51
51
  }
52
52
  else {
53
- merged.push(new HumanMessage({
53
+ updatedMsgs.push(new HumanMessage({
54
54
  content: [
55
55
  {
56
56
  type: "tool_result",
@@ -62,31 +62,10 @@ function _mergeMessages(messages) {
62
62
  }
63
63
  }
64
64
  else {
65
- const previousMessage = merged[merged.length - 1];
66
- if (previousMessage?._getType() === "human" &&
67
- message._getType() === "human") {
68
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
69
- let combinedContent;
70
- if (typeof previousMessage.content === "string") {
71
- combinedContent = [{ type: "text", text: previousMessage.content }];
72
- }
73
- else {
74
- combinedContent = previousMessage.content;
75
- }
76
- if (typeof message.content === "string") {
77
- combinedContent.push({ type: "text", text: message.content });
78
- }
79
- else {
80
- combinedContent = combinedContent.concat(message.content);
81
- }
82
- previousMessage.content = combinedContent;
83
- }
84
- else {
85
- merged.push(message);
86
- }
65
+ updatedMsgs.push(message);
87
66
  }
88
67
  }
89
- return merged;
68
+ return updatedMsgs;
90
69
  }
91
70
  export function _convertLangChainToolCallToAnthropic(toolCall) {
92
71
  if (toolCall.id === undefined) {
@@ -172,7 +151,7 @@ function _formatContent(content) {
172
151
  * @returns The formatted prompt.
173
152
  */
174
153
  export function _convertMessagesToAnthropicPayload(messages) {
175
- const mergedMessages = _mergeMessages(messages);
154
+ const mergedMessages = _ensureMessageContents(messages);
176
155
  let system;
177
156
  if (mergedMessages.length > 0 && mergedMessages[0]._getType() === "system") {
178
157
  system = messages[0].content;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@langchain/anthropic",
3
- "version": "0.3.7",
3
+ "version": "0.3.9",
4
4
  "description": "Anthropic integrations for LangChain.js",
5
5
  "type": "module",
6
6
  "engines": {