@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.
package/dist/chat_models.d.ts
CHANGED
|
@@ -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/
|
|
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/
|
|
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
|
|
24
|
+
function _ensureMessageContents(messages) {
|
|
25
25
|
// Merge runs of human/tool messages into single human messages with content blocks.
|
|
26
|
-
const
|
|
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 =
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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 =
|
|
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
|
|
21
|
+
function _ensureMessageContents(messages) {
|
|
22
22
|
// Merge runs of human/tool messages into single human messages with content blocks.
|
|
23
|
-
const
|
|
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 =
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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 =
|
|
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;
|