@langchain/google-common 2.1.18 → 2.1.19
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 +9 -0
- package/dist/auth.cjs +1 -2
- package/dist/auth.cjs.map +1 -1
- package/dist/auth.d.cts.map +1 -1
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +1 -2
- package/dist/auth.js.map +1 -1
- package/dist/chat_models.cjs +24 -27
- package/dist/chat_models.cjs.map +1 -1
- package/dist/chat_models.d.cts.map +1 -1
- package/dist/chat_models.d.ts.map +1 -1
- package/dist/chat_models.js +7 -9
- package/dist/chat_models.js.map +1 -1
- package/dist/connection.cjs +16 -26
- package/dist/connection.cjs.map +1 -1
- package/dist/connection.d.cts.map +1 -1
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +13 -22
- package/dist/connection.js.map +1 -1
- package/dist/embeddings.cjs +12 -22
- package/dist/embeddings.cjs.map +1 -1
- package/dist/embeddings.d.cts +0 -1
- package/dist/embeddings.d.cts.map +1 -1
- package/dist/embeddings.d.ts +0 -1
- package/dist/embeddings.d.ts.map +1 -1
- package/dist/embeddings.js +7 -16
- package/dist/embeddings.js.map +1 -1
- package/dist/experimental/media.cjs +41 -70
- package/dist/experimental/media.cjs.map +1 -1
- package/dist/experimental/media.d.cts.map +1 -1
- package/dist/experimental/media.d.ts.map +1 -1
- package/dist/experimental/media.js +36 -65
- package/dist/experimental/media.js.map +1 -1
- package/dist/experimental/utils/media_core.cjs +22 -39
- package/dist/experimental/utils/media_core.cjs.map +1 -1
- package/dist/experimental/utils/media_core.d.cts.map +1 -1
- package/dist/experimental/utils/media_core.d.ts.map +1 -1
- package/dist/experimental/utils/media_core.js +16 -33
- package/dist/experimental/utils/media_core.js.map +1 -1
- package/dist/index.cjs +1 -0
- package/dist/llms.cjs +14 -19
- package/dist/llms.cjs.map +1 -1
- package/dist/llms.d.cts.map +1 -1
- package/dist/llms.d.ts.map +1 -1
- package/dist/llms.js +4 -8
- package/dist/llms.js.map +1 -1
- package/dist/output_parsers.cjs +12 -29
- package/dist/output_parsers.cjs.map +1 -1
- package/dist/output_parsers.d.cts.map +1 -1
- package/dist/output_parsers.d.ts.map +1 -1
- package/dist/output_parsers.js +10 -26
- package/dist/output_parsers.js.map +1 -1
- package/dist/profiles.cjs +100 -17
- package/dist/profiles.cjs.map +1 -1
- package/dist/profiles.js +100 -17
- package/dist/profiles.js.map +1 -1
- package/dist/types-anthropic.d.cts.map +1 -1
- package/dist/types-anthropic.d.ts.map +1 -1
- package/dist/types.cjs +1 -0
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +0 -1
- package/dist/types.d.cts.map +1 -1
- package/dist/types.d.ts +0 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utils/anthropic.cjs +73 -113
- package/dist/utils/anthropic.cjs.map +1 -1
- package/dist/utils/anthropic.js +63 -102
- package/dist/utils/anthropic.js.map +1 -1
- package/dist/utils/common.cjs +10 -13
- package/dist/utils/common.cjs.map +1 -1
- package/dist/utils/common.d.cts.map +1 -1
- package/dist/utils/common.d.ts.map +1 -1
- package/dist/utils/common.js +6 -8
- package/dist/utils/common.js.map +1 -1
- package/dist/utils/failed_handler.cjs +1 -2
- package/dist/utils/failed_handler.cjs.map +1 -1
- package/dist/utils/failed_handler.d.cts.map +1 -1
- package/dist/utils/failed_handler.d.ts.map +1 -1
- package/dist/utils/failed_handler.js +1 -2
- package/dist/utils/failed_handler.js.map +1 -1
- package/dist/utils/gemini.cjs +83 -135
- package/dist/utils/gemini.cjs.map +1 -1
- package/dist/utils/gemini.d.cts.map +1 -1
- package/dist/utils/gemini.d.ts.map +1 -1
- package/dist/utils/gemini.js +58 -109
- package/dist/utils/gemini.js.map +1 -1
- package/dist/utils/index.cjs +1 -0
- package/dist/utils/palm.d.cts.map +1 -1
- package/dist/utils/palm.d.ts.map +1 -1
- package/dist/utils/safety.cjs.map +1 -1
- package/dist/utils/safety.d.cts.map +1 -1
- package/dist/utils/safety.d.ts.map +1 -1
- package/dist/utils/safety.js.map +1 -1
- package/dist/utils/stream.cjs +5 -9
- package/dist/utils/stream.cjs.map +1 -1
- package/dist/utils/stream.d.cts.map +1 -1
- package/dist/utils/stream.d.ts.map +1 -1
- package/dist/utils/stream.js +5 -9
- package/dist/utils/stream.js.map +1 -1
- package/dist/utils/zod_to_gemini_parameters.cjs +4 -7
- package/dist/utils/zod_to_gemini_parameters.cjs.map +1 -1
- package/dist/utils/zod_to_gemini_parameters.d.cts.map +1 -1
- package/dist/utils/zod_to_gemini_parameters.d.ts.map +1 -1
- package/dist/utils/zod_to_gemini_parameters.js +2 -4
- package/dist/utils/zod_to_gemini_parameters.js.map +1 -1
- package/package.json +3 -3
- package/dist/_virtual/rolldown_runtime.cjs +0 -25
package/dist/utils/anthropic.cjs
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
const __langchain_core_messages = require_rolldown_runtime.__toESM(require("@langchain/core/messages"));
|
|
1
|
+
let _langchain_core_outputs = require("@langchain/core/outputs");
|
|
2
|
+
let _langchain_core_messages = require("@langchain/core/messages");
|
|
4
3
|
|
|
5
4
|
//#region src/utils/anthropic.ts
|
|
6
5
|
function getAnthropicAPI(config) {
|
|
@@ -8,12 +7,9 @@ function getAnthropicAPI(config) {
|
|
|
8
7
|
return "text" in part ? part.text : "";
|
|
9
8
|
}
|
|
10
9
|
function messageToString(message) {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
const str = partToString(part);
|
|
14
|
-
return acc + str;
|
|
10
|
+
return (message?.content ?? []).reduce((acc, part) => {
|
|
11
|
+
return acc + partToString(part);
|
|
15
12
|
}, "");
|
|
16
|
-
return ret;
|
|
17
13
|
}
|
|
18
14
|
function responseToString(response) {
|
|
19
15
|
const data = response.data;
|
|
@@ -29,7 +25,7 @@ function getAnthropicAPI(config) {
|
|
|
29
25
|
* @param fields
|
|
30
26
|
*/
|
|
31
27
|
function newAIMessageChunk(fields) {
|
|
32
|
-
if (typeof fields === "string") return new
|
|
28
|
+
if (typeof fields === "string") return new _langchain_core_messages.AIMessageChunk(fields);
|
|
33
29
|
const ret = { ...fields };
|
|
34
30
|
if (Array.isArray(fields?.content)) {
|
|
35
31
|
let str = "";
|
|
@@ -39,21 +35,20 @@ function getAnthropicAPI(config) {
|
|
|
39
35
|
});
|
|
40
36
|
if (str) ret.content = str;
|
|
41
37
|
}
|
|
42
|
-
return new
|
|
38
|
+
return new _langchain_core_messages.AIMessageChunk(ret);
|
|
43
39
|
}
|
|
44
40
|
function textContentToMessageFields(textContent) {
|
|
45
41
|
return { content: [textContent] };
|
|
46
42
|
}
|
|
47
43
|
function toolUseContentToMessageFields(toolUseContent) {
|
|
48
|
-
const tool = {
|
|
49
|
-
id: toolUseContent.id,
|
|
50
|
-
name: toolUseContent.name,
|
|
51
|
-
type: "tool_call",
|
|
52
|
-
args: toolUseContent.input
|
|
53
|
-
};
|
|
54
44
|
return {
|
|
55
45
|
content: [],
|
|
56
|
-
tool_calls: [
|
|
46
|
+
tool_calls: [{
|
|
47
|
+
id: toolUseContent.id,
|
|
48
|
+
name: toolUseContent.name,
|
|
49
|
+
type: "tool_call",
|
|
50
|
+
args: toolUseContent.input
|
|
51
|
+
}]
|
|
57
52
|
};
|
|
58
53
|
}
|
|
59
54
|
function thinkingContentToMessageFields(thinkingContent) {
|
|
@@ -71,7 +66,7 @@ function getAnthropicAPI(config) {
|
|
|
71
66
|
case "redacted_thinking": return redactedThinkingContentToMessageFields(anthropicContent);
|
|
72
67
|
default:
|
|
73
68
|
console.error(`Unknown message type: ${type}`, anthropicContent);
|
|
74
|
-
return
|
|
69
|
+
return;
|
|
75
70
|
}
|
|
76
71
|
}
|
|
77
72
|
function contentToMessage(anthropicContent) {
|
|
@@ -82,17 +77,16 @@ function getAnthropicAPI(config) {
|
|
|
82
77
|
if (messageFields?.content) complexContent.push(...messageFields.content);
|
|
83
78
|
if (messageFields?.tool_calls) toolCalls.push(...messageFields.tool_calls);
|
|
84
79
|
});
|
|
85
|
-
|
|
80
|
+
return newAIMessageChunk({
|
|
86
81
|
content: complexContent,
|
|
87
82
|
tool_calls: toolCalls
|
|
88
|
-
};
|
|
89
|
-
return newAIMessageChunk(ret);
|
|
83
|
+
});
|
|
90
84
|
}
|
|
91
85
|
function messageToUsageMetadata(message) {
|
|
92
86
|
const usage = message?.usage;
|
|
93
87
|
const inputTokens = usage?.input_tokens ?? 0;
|
|
94
88
|
const outputTokens = usage?.output_tokens ?? 0;
|
|
95
|
-
|
|
89
|
+
return {
|
|
96
90
|
input_tokens: inputTokens,
|
|
97
91
|
output_tokens: outputTokens,
|
|
98
92
|
total_tokens: inputTokens + outputTokens,
|
|
@@ -101,24 +95,19 @@ function getAnthropicAPI(config) {
|
|
|
101
95
|
cache_creation: usage?.cache_creation_input_tokens ?? 0
|
|
102
96
|
}
|
|
103
97
|
};
|
|
104
|
-
return usageMetadata;
|
|
105
98
|
}
|
|
106
99
|
function messageToGenerationInfo(message) {
|
|
107
|
-
const usageMetadata = messageToUsageMetadata(message);
|
|
108
100
|
return {
|
|
109
|
-
usage_metadata:
|
|
101
|
+
usage_metadata: messageToUsageMetadata(message),
|
|
110
102
|
finish_reason: message.stop_reason
|
|
111
103
|
};
|
|
112
104
|
}
|
|
113
105
|
function messageToChatGeneration(responseMessage) {
|
|
114
106
|
const content = responseMessage?.content ?? [];
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
text,
|
|
120
|
-
message,
|
|
121
|
-
generationInfo
|
|
107
|
+
return new _langchain_core_outputs.ChatGenerationChunk({
|
|
108
|
+
text: messageToString(responseMessage),
|
|
109
|
+
message: contentToMessage(content),
|
|
110
|
+
generationInfo: messageToGenerationInfo(responseMessage)
|
|
122
111
|
});
|
|
123
112
|
}
|
|
124
113
|
function messageStartToChatGeneration(event) {
|
|
@@ -133,10 +122,9 @@ function getAnthropicAPI(config) {
|
|
|
133
122
|
const content = event.content_block;
|
|
134
123
|
const message = contentToMessage([content]);
|
|
135
124
|
if (!message) return null;
|
|
136
|
-
|
|
137
|
-
return new __langchain_core_outputs.ChatGenerationChunk({
|
|
125
|
+
return new _langchain_core_outputs.ChatGenerationChunk({
|
|
138
126
|
message,
|
|
139
|
-
text
|
|
127
|
+
text: "text" in content ? content.text : ""
|
|
140
128
|
});
|
|
141
129
|
}
|
|
142
130
|
function contentBlockStartToolUseToChatGeneration(event) {
|
|
@@ -150,17 +138,14 @@ function getAnthropicAPI(config) {
|
|
|
150
138
|
};
|
|
151
139
|
if (typeof contentBlock.input === "object" && Object.keys(contentBlock.input).length > 0) toolChunk.args = JSON.stringify(contentBlock.input);
|
|
152
140
|
const toolChunks = [toolChunk];
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
const message = newAIMessageChunk(messageFields);
|
|
162
|
-
return new __langchain_core_outputs.ChatGenerationChunk({
|
|
163
|
-
message,
|
|
141
|
+
return new _langchain_core_outputs.ChatGenerationChunk({
|
|
142
|
+
message: newAIMessageChunk({
|
|
143
|
+
content: [{
|
|
144
|
+
index: event.index,
|
|
145
|
+
...contentBlock
|
|
146
|
+
}],
|
|
147
|
+
tool_call_chunks: toolChunks
|
|
148
|
+
}),
|
|
164
149
|
text
|
|
165
150
|
});
|
|
166
151
|
}
|
|
@@ -174,11 +159,9 @@ function getAnthropicAPI(config) {
|
|
|
174
159
|
}
|
|
175
160
|
}
|
|
176
161
|
function contentBlockDeltaTextToChatGeneration(event) {
|
|
177
|
-
const
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
return new __langchain_core_outputs.ChatGenerationChunk({
|
|
181
|
-
message,
|
|
162
|
+
const text = event.delta?.text;
|
|
163
|
+
return new _langchain_core_outputs.ChatGenerationChunk({
|
|
164
|
+
message: newAIMessageChunk(text),
|
|
182
165
|
text
|
|
183
166
|
});
|
|
184
167
|
}
|
|
@@ -189,17 +172,14 @@ function getAnthropicAPI(config) {
|
|
|
189
172
|
index: event.index,
|
|
190
173
|
args: delta.partial_json
|
|
191
174
|
}];
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
const message = newAIMessageChunk(messageFields);
|
|
201
|
-
return new __langchain_core_outputs.ChatGenerationChunk({
|
|
202
|
-
message,
|
|
175
|
+
return new _langchain_core_outputs.ChatGenerationChunk({
|
|
176
|
+
message: newAIMessageChunk({
|
|
177
|
+
content: [{
|
|
178
|
+
index: event.index,
|
|
179
|
+
...delta
|
|
180
|
+
}],
|
|
181
|
+
tool_call_chunks: toolChunks
|
|
182
|
+
}),
|
|
203
183
|
text
|
|
204
184
|
});
|
|
205
185
|
}
|
|
@@ -237,19 +217,16 @@ function getAnthropicAPI(config) {
|
|
|
237
217
|
else throw new Error(`Unexpected chunk: ${chunk}`);
|
|
238
218
|
}
|
|
239
219
|
function responseToBaseMessage(response) {
|
|
240
|
-
|
|
241
|
-
const content = data?.content ?? [];
|
|
242
|
-
return contentToMessage(content);
|
|
220
|
+
return contentToMessage(response.data?.content ?? []);
|
|
243
221
|
}
|
|
244
222
|
function responseToChatResult(response) {
|
|
245
223
|
const message = response.data;
|
|
246
224
|
const generations = [];
|
|
247
225
|
const gen = responseToChatGeneration(response);
|
|
248
226
|
if (gen) generations.push(gen);
|
|
249
|
-
const llmOutput = messageToGenerationInfo(message);
|
|
250
227
|
return {
|
|
251
228
|
generations,
|
|
252
|
-
llmOutput
|
|
229
|
+
llmOutput: messageToGenerationInfo(message)
|
|
253
230
|
};
|
|
254
231
|
}
|
|
255
232
|
function formatAnthropicVersion() {
|
|
@@ -267,9 +244,8 @@ function getAnthropicAPI(config) {
|
|
|
267
244
|
}
|
|
268
245
|
function imageContentToAnthropicContent(content) {
|
|
269
246
|
const dataUrl = content.image_url;
|
|
270
|
-
const
|
|
271
|
-
|
|
272
|
-
if (!urlInfo) return void 0;
|
|
247
|
+
const urlInfo = extractMimeType(typeof dataUrl === "string" ? dataUrl : dataUrl?.url);
|
|
248
|
+
if (!urlInfo) return;
|
|
273
249
|
return {
|
|
274
250
|
type: "image",
|
|
275
251
|
source: {
|
|
@@ -300,7 +276,7 @@ function getAnthropicAPI(config) {
|
|
|
300
276
|
case "redacted_thinking": return redactedThinkingContentToAnthropicContent(content);
|
|
301
277
|
default:
|
|
302
278
|
console.warn(`Unexpected content type: ${type}`, content);
|
|
303
|
-
return
|
|
279
|
+
return;
|
|
304
280
|
}
|
|
305
281
|
}
|
|
306
282
|
const anthropicContentConverter = {
|
|
@@ -314,7 +290,7 @@ function getAnthropicAPI(config) {
|
|
|
314
290
|
},
|
|
315
291
|
fromStandardImageBlock(block) {
|
|
316
292
|
if (block.source_type === "url") {
|
|
317
|
-
const data = (0,
|
|
293
|
+
const data = (0, _langchain_core_messages.parseBase64DataUrl)({
|
|
318
294
|
dataUrl: block.url,
|
|
319
295
|
asTypedArray: false
|
|
320
296
|
});
|
|
@@ -416,11 +392,10 @@ function getAnthropicAPI(config) {
|
|
|
416
392
|
}
|
|
417
393
|
};
|
|
418
394
|
function contentToAnthropicContent(content) {
|
|
419
|
-
|
|
395
|
+
return (typeof content === "string" ? [{
|
|
420
396
|
type: "text",
|
|
421
397
|
text: content
|
|
422
|
-
}] : content;
|
|
423
|
-
return ca.map((complex) => (0, __langchain_core_messages.isDataContentBlock)(complex) ? (0, __langchain_core_messages.convertToProviderContentBlock)(complex, anthropicContentConverter) : contentComplexToAnthropicContent(complex)).filter(Boolean);
|
|
398
|
+
}] : content).map((complex) => (0, _langchain_core_messages.isDataContentBlock)(complex) ? (0, _langchain_core_messages.convertToProviderContentBlock)(complex, anthropicContentConverter) : contentComplexToAnthropicContent(complex)).filter(Boolean);
|
|
424
399
|
}
|
|
425
400
|
function toolCallToAnthropicContent(toolCall) {
|
|
426
401
|
return {
|
|
@@ -435,33 +410,25 @@ function getAnthropicAPI(config) {
|
|
|
435
410
|
return toolCalls.map(toolCallToAnthropicContent);
|
|
436
411
|
}
|
|
437
412
|
function baseRoleToAnthropicMessage(base, role) {
|
|
438
|
-
const content = contentToAnthropicContent(base.content);
|
|
439
413
|
return {
|
|
440
414
|
role,
|
|
441
|
-
content
|
|
415
|
+
content: contentToAnthropicContent(base.content)
|
|
442
416
|
};
|
|
443
417
|
}
|
|
444
418
|
function aiMessageToAnthropicMessage(base) {
|
|
445
419
|
const ret = baseRoleToAnthropicMessage(base, "assistant");
|
|
446
420
|
const toolContent = toolCallsToAnthropicContent(base.tool_calls);
|
|
447
|
-
if (toolContent.length > 0)
|
|
448
|
-
const content = ret.content;
|
|
449
|
-
ret.content = [...content, ...toolContent];
|
|
450
|
-
}
|
|
421
|
+
if (toolContent.length > 0) ret.content = [...ret.content, ...toolContent];
|
|
451
422
|
return ret;
|
|
452
423
|
}
|
|
453
424
|
function toolMessageToAnthropicMessage(base) {
|
|
454
|
-
const role = "user";
|
|
455
|
-
const toolUseId = base.tool_call_id;
|
|
456
|
-
const toolContent = contentToAnthropicContent(base.content);
|
|
457
|
-
const content = [{
|
|
458
|
-
type: "tool_result",
|
|
459
|
-
tool_use_id: toolUseId,
|
|
460
|
-
content: toolContent
|
|
461
|
-
}];
|
|
462
425
|
return {
|
|
463
|
-
role,
|
|
464
|
-
content
|
|
426
|
+
role: "user",
|
|
427
|
+
content: [{
|
|
428
|
+
type: "tool_result",
|
|
429
|
+
tool_use_id: base.tool_call_id,
|
|
430
|
+
content: contentToAnthropicContent(base.content)
|
|
431
|
+
}]
|
|
465
432
|
};
|
|
466
433
|
}
|
|
467
434
|
function baseToAnthropicMessage(base) {
|
|
@@ -470,10 +437,10 @@ function getAnthropicAPI(config) {
|
|
|
470
437
|
case "human": return baseRoleToAnthropicMessage(base, "user");
|
|
471
438
|
case "ai": return aiMessageToAnthropicMessage(base);
|
|
472
439
|
case "tool": return toolMessageToAnthropicMessage(base);
|
|
473
|
-
case "system": return
|
|
440
|
+
case "system": return;
|
|
474
441
|
default:
|
|
475
442
|
console.warn(`Unknown BaseMessage type: ${type}`, base);
|
|
476
|
-
return
|
|
443
|
+
return;
|
|
477
444
|
}
|
|
478
445
|
}
|
|
479
446
|
function formatMessages(input) {
|
|
@@ -498,11 +465,7 @@ function getAnthropicAPI(config) {
|
|
|
498
465
|
function contentComplexArrayToText(contentArray) {
|
|
499
466
|
let ret = "";
|
|
500
467
|
contentArray.forEach((content) => {
|
|
501
|
-
|
|
502
|
-
if (contentType === "text") {
|
|
503
|
-
const textContent = content;
|
|
504
|
-
ret = `${ret}\n${textContent.text}`;
|
|
505
|
-
}
|
|
468
|
+
if (content?.type === "text") ret = `${ret}\n${content.text}`;
|
|
506
469
|
});
|
|
507
470
|
return ret;
|
|
508
471
|
}
|
|
@@ -518,17 +481,15 @@ function getAnthropicAPI(config) {
|
|
|
518
481
|
return ret;
|
|
519
482
|
}
|
|
520
483
|
function formatGeminiTool(tool) {
|
|
521
|
-
if (Object.hasOwn(tool, "functionDeclarations")) {
|
|
522
|
-
const
|
|
523
|
-
return
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
});
|
|
531
|
-
} else {
|
|
484
|
+
if (Object.hasOwn(tool, "functionDeclarations")) return (tool?.functionDeclarations ?? []).map((func) => {
|
|
485
|
+
const inputSchema = func.parameters;
|
|
486
|
+
return {
|
|
487
|
+
name: func.name,
|
|
488
|
+
description: func.description,
|
|
489
|
+
input_schema: inputSchema
|
|
490
|
+
};
|
|
491
|
+
});
|
|
492
|
+
else {
|
|
532
493
|
console.warn(`Unable to format GeminiTool: ${JSON.stringify(tool, null, 1)}`);
|
|
533
494
|
return [];
|
|
534
495
|
}
|
|
@@ -541,8 +502,7 @@ function getAnthropicAPI(config) {
|
|
|
541
502
|
const tools = parameters?.tools ?? [];
|
|
542
503
|
const ret = [];
|
|
543
504
|
tools.forEach((tool) => {
|
|
544
|
-
|
|
545
|
-
anthropicTools.forEach((anthropicTool) => {
|
|
505
|
+
formatTool(tool).forEach((anthropicTool) => {
|
|
546
506
|
if (anthropicTool) ret.push(anthropicTool);
|
|
547
507
|
});
|
|
548
508
|
});
|
|
@@ -550,12 +510,12 @@ function getAnthropicAPI(config) {
|
|
|
550
510
|
}
|
|
551
511
|
function formatToolChoice(parameters) {
|
|
552
512
|
const choice = parameters?.tool_choice;
|
|
553
|
-
if (!choice) return
|
|
513
|
+
if (!choice) return;
|
|
554
514
|
else if (typeof choice === "object") return choice;
|
|
555
515
|
else switch (choice) {
|
|
556
516
|
case "any":
|
|
557
517
|
case "auto": return { type: choice };
|
|
558
|
-
case "none": return
|
|
518
|
+
case "none": return;
|
|
559
519
|
default: return {
|
|
560
520
|
type: "tool",
|
|
561
521
|
name: choice
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anthropic.cjs","names":["config?: AnthropicAPIConfig","part: AnthropicContent","message: AnthropicResponseMessage","content: AnthropicContent[]","response: GoogleLLMResponse","fields: string | AIMessageFields","AIMessageChunk","ret: AIMessageFields","str: string | undefined","textContent: AnthropicContentText","toolUseContent: AnthropicContentToolUse","tool: ToolCall","thinkingContent: AnthropicContentThinking","thinkingContent: AnthropicContentRedactedThinking","anthropicContent: AnthropicContent","anthropicContent: AnthropicContent[]","complexContent: MessageContentComplex[]","toolCalls: ToolCall[]","usageMetadata: UsageMetadata","responseMessage: AnthropicResponseMessage","ChatGenerationChunk","event: AnthropicStreamMessageStartEvent","event: AnthropicStreamMessageDeltaEvent","event: AnthropicStreamContentBlockStartEvent","text: string","toolChunk: ToolCallChunk","toolChunks: ToolCallChunk[]","content: MessageContentComplex[]","messageFields: AIMessageChunkFields","event: AnthropicStreamContentBlockDeltaEvent","chunk: BaseMessageChunk","generations: ChatGeneration[]","content: MessageContentText","str: string","content: MessageContentImageUrl","content: Record<string, any>","content: MessageContentComplex","anthropicContentConverter: StandardContentBlockConverter<{\n text: AnthropicMessageContentText;\n image: AnthropicMessageContentImage;\n file: AnthropicMessageContentDocument;\n }>","block: StandardTextBlock","block: StandardImageBlock","block: StandardFileBlock","content: MessageContent | DataContentBlock[]","toolCall: ToolCall","toolCalls: ToolCall[] | undefined","base: BaseMessage","role: string","base: AIMessage","base: ToolMessage","content: AnthropicMessageContentToolResult[]","input: BaseMessage[]","ret: AnthropicMessage[]","parameters: GoogleAIModelRequestParams","ret: AnthropicRequestSettings","contentArray: MessageContentComplex[]","tool: GeminiTool","tool: GoogleAIToolType","tools: GoogleAIToolType[]","ret: AnthropicTool[]","input: unknown","ret: AnthropicRequest","_params: GoogleAIModelParams","modelName: string"],"sources":["../../src/utils/anthropic.ts"],"sourcesContent":["import {\n ChatGeneration,\n ChatGenerationChunk,\n ChatResult,\n} from \"@langchain/core/outputs\";\nimport {\n BaseMessage,\n BaseMessageChunk,\n AIMessageChunk,\n MessageContentComplex,\n MessageContentText,\n MessageContent,\n MessageContentImageUrl,\n AIMessageFields,\n AIMessageChunkFields,\n AIMessage,\n StandardContentBlockConverter,\n StandardImageBlock,\n StandardTextBlock,\n StandardFileBlock,\n DataContentBlock,\n isDataContentBlock,\n convertToProviderContentBlock,\n parseBase64DataUrl,\n UsageMetadata,\n} from \"@langchain/core/messages\";\nimport {\n ToolCall,\n ToolCallChunk,\n ToolMessage,\n} from \"@langchain/core/messages/tool\";\nimport {\n AnthropicAPIConfig,\n AnthropicCacheControl,\n AnthropicContent,\n AnthropicContentRedactedThinking,\n AnthropicContentText,\n AnthropicContentThinking,\n AnthropicContentToolUse,\n AnthropicMessage,\n AnthropicMessageContent,\n AnthropicMessageContentDocument,\n AnthropicMessageContentImage,\n AnthropicMessageContentRedactedThinking,\n AnthropicMessageContentText,\n AnthropicMessageContentThinking,\n AnthropicMessageContentToolResult,\n AnthropicMessageContentToolResultContent,\n AnthropicMessageContentToolUse,\n AnthropicRequest,\n AnthropicRequestSettings,\n AnthropicResponseData,\n AnthropicResponseMessage,\n AnthropicStreamContentBlockDeltaEvent,\n AnthropicStreamContentBlockStartEvent,\n AnthropicStreamInputJsonDelta,\n AnthropicStreamMessageDeltaEvent,\n AnthropicStreamMessageStartEvent,\n AnthropicStreamTextDelta,\n AnthropicTool,\n AnthropicToolChoice,\n GeminiTool,\n GoogleAIAPI,\n GoogleAIModelParams,\n GoogleAIModelRequestParams,\n GoogleAIToolType,\n GoogleLLMResponse,\n} from \"../types.js\";\n\nexport function getAnthropicAPI(config?: AnthropicAPIConfig): GoogleAIAPI {\n function partToString(part: AnthropicContent): string {\n return \"text\" in part ? part.text : \"\";\n }\n\n function messageToString(message: AnthropicResponseMessage): string {\n const content: AnthropicContent[] = message?.content ?? [];\n const ret = content.reduce((acc, part) => {\n const str = partToString(part);\n return acc + str;\n }, \"\");\n return ret;\n }\n\n function responseToString(response: GoogleLLMResponse): string {\n const data = response.data as AnthropicResponseData;\n switch (data?.type) {\n case \"message\":\n return messageToString(data as AnthropicResponseMessage);\n default:\n throw Error(`Unknown type: ${data?.type}`);\n }\n }\n\n /**\n * Normalize the AIMessageChunk.\n * If the fields are just a string - use that as content.\n * If the content is an array of just text fields, turn them into a string.\n * @param fields\n */\n function newAIMessageChunk(fields: string | AIMessageFields): AIMessageChunk {\n if (typeof fields === \"string\") {\n return new AIMessageChunk(fields);\n }\n const ret: AIMessageFields = {\n ...fields,\n };\n\n if (Array.isArray(fields?.content)) {\n let str: string | undefined = \"\";\n fields.content.forEach((val) => {\n if (str !== undefined && val.type === \"text\") {\n str = `${str}${val.text}`;\n } else {\n str = undefined;\n }\n });\n if (str) {\n ret.content = str;\n }\n }\n\n return new AIMessageChunk(ret);\n }\n\n function textContentToMessageFields(\n textContent: AnthropicContentText\n ): AIMessageFields {\n return {\n content: [textContent],\n };\n }\n\n function toolUseContentToMessageFields(\n toolUseContent: AnthropicContentToolUse\n ): AIMessageFields {\n const tool: ToolCall = {\n id: toolUseContent.id,\n name: toolUseContent.name,\n type: \"tool_call\",\n args: toolUseContent.input,\n };\n return {\n content: [],\n tool_calls: [tool],\n };\n }\n\n function thinkingContentToMessageFields(\n thinkingContent: AnthropicContentThinking\n ): AIMessageFields {\n // TODO: Once a reasoning/thinking type is defined in LangChain, use it\n return {\n content: [thinkingContent],\n };\n }\n\n function redactedThinkingContentToMessageFields(\n thinkingContent: AnthropicContentRedactedThinking\n ): AIMessageFields {\n // TODO: Once a reasoning/thinking type is defined in LangChain, use it\n return {\n content: [thinkingContent],\n };\n }\n\n function anthropicContentToMessageFields(\n anthropicContent: AnthropicContent\n ): AIMessageFields | undefined {\n const type = anthropicContent?.type;\n switch (type) {\n case \"text\":\n return textContentToMessageFields(anthropicContent);\n case \"tool_use\":\n return toolUseContentToMessageFields(anthropicContent);\n case \"thinking\":\n return thinkingContentToMessageFields(anthropicContent);\n case \"redacted_thinking\":\n return redactedThinkingContentToMessageFields(anthropicContent);\n default:\n console.error(`Unknown message type: ${type}`, anthropicContent);\n return undefined;\n }\n }\n\n function contentToMessage(\n anthropicContent: AnthropicContent[]\n ): BaseMessageChunk {\n const complexContent: MessageContentComplex[] = [];\n const toolCalls: ToolCall[] = [];\n anthropicContent.forEach((ac) => {\n const messageFields = anthropicContentToMessageFields(ac);\n if (messageFields?.content) {\n complexContent.push(\n ...(messageFields.content as MessageContentComplex[])\n );\n }\n if (messageFields?.tool_calls) {\n toolCalls.push(...messageFields.tool_calls);\n }\n });\n\n const ret: AIMessageFields = {\n content: complexContent,\n tool_calls: toolCalls,\n };\n return newAIMessageChunk(ret);\n }\n\n function messageToUsageMetadata(\n message: AnthropicResponseMessage\n ): UsageMetadata {\n const usage = message?.usage;\n const inputTokens = usage?.input_tokens ?? 0;\n const outputTokens = usage?.output_tokens ?? 0;\n const usageMetadata: UsageMetadata = {\n input_tokens: inputTokens,\n output_tokens: outputTokens,\n total_tokens: inputTokens + outputTokens,\n input_token_details: {\n cache_read: usage?.cache_read_input_tokens ?? 0,\n cache_creation: usage?.cache_creation_input_tokens ?? 0,\n },\n };\n return usageMetadata;\n }\n\n function messageToGenerationInfo(message: AnthropicResponseMessage) {\n const usageMetadata = messageToUsageMetadata(message);\n\n return {\n usage_metadata: usageMetadata,\n finish_reason: message.stop_reason,\n };\n }\n\n function messageToChatGeneration(\n responseMessage: AnthropicResponseMessage\n ): ChatGenerationChunk {\n const content: AnthropicContent[] = responseMessage?.content ?? [];\n const text = messageToString(responseMessage);\n const message = contentToMessage(content);\n const generationInfo = messageToGenerationInfo(responseMessage);\n return new ChatGenerationChunk({\n text,\n message,\n generationInfo,\n });\n }\n\n function messageStartToChatGeneration(\n event: AnthropicStreamMessageStartEvent\n ): ChatGenerationChunk {\n const responseMessage = event.message;\n return messageToChatGeneration(responseMessage);\n }\n\n function messageDeltaToChatGeneration(\n event: AnthropicStreamMessageDeltaEvent\n ): ChatGenerationChunk {\n const responseMessage = event.delta;\n return messageToChatGeneration(responseMessage as AnthropicResponseMessage);\n }\n\n function contentBlockStartTextToChatGeneration(\n event: AnthropicStreamContentBlockStartEvent\n ): ChatGenerationChunk | null {\n const content = event.content_block;\n const message = contentToMessage([content]);\n if (!message) {\n return null;\n }\n\n const text = \"text\" in content ? content.text : \"\";\n return new ChatGenerationChunk({\n message,\n text,\n });\n }\n\n function contentBlockStartToolUseToChatGeneration(\n event: AnthropicStreamContentBlockStartEvent\n ): ChatGenerationChunk | null {\n const contentBlock = event.content_block as AnthropicContentToolUse;\n const text: string = \"\";\n const toolChunk: ToolCallChunk = {\n type: \"tool_call_chunk\",\n index: event.index,\n name: contentBlock.name,\n id: contentBlock.id,\n };\n if (\n typeof contentBlock.input === \"object\" &&\n Object.keys(contentBlock.input).length > 0\n ) {\n toolChunk.args = JSON.stringify(contentBlock.input);\n }\n const toolChunks: ToolCallChunk[] = [toolChunk];\n\n const content: MessageContentComplex[] = [\n {\n index: event.index,\n ...contentBlock,\n },\n ];\n const messageFields: AIMessageChunkFields = {\n content,\n tool_call_chunks: toolChunks,\n };\n const message = newAIMessageChunk(messageFields);\n return new ChatGenerationChunk({\n message,\n text,\n });\n }\n\n function contentBlockStartToChatGeneration(\n event: AnthropicStreamContentBlockStartEvent\n ): ChatGenerationChunk | null {\n switch (event.content_block.type) {\n case \"text\":\n return contentBlockStartTextToChatGeneration(event);\n case \"tool_use\":\n return contentBlockStartToolUseToChatGeneration(event);\n default:\n console.warn(\n `Unexpected start content_block type: ${JSON.stringify(event)}`\n );\n return null;\n }\n }\n\n function contentBlockDeltaTextToChatGeneration(\n event: AnthropicStreamContentBlockDeltaEvent\n ): ChatGenerationChunk {\n const delta = event.delta as AnthropicStreamTextDelta;\n const text = delta?.text;\n const message = newAIMessageChunk(text);\n return new ChatGenerationChunk({\n message,\n text,\n });\n }\n\n function contentBlockDeltaInputJsonDeltaToChatGeneration(\n event: AnthropicStreamContentBlockDeltaEvent\n ): ChatGenerationChunk {\n const delta = event.delta as AnthropicStreamInputJsonDelta;\n const text: string = \"\";\n const toolChunks: ToolCallChunk[] = [\n {\n index: event.index,\n args: delta.partial_json,\n },\n ];\n const content: MessageContentComplex[] = [\n {\n index: event.index,\n ...delta,\n },\n ];\n const messageFields: AIMessageChunkFields = {\n content,\n tool_call_chunks: toolChunks,\n };\n const message = newAIMessageChunk(messageFields);\n return new ChatGenerationChunk({\n message,\n text,\n });\n }\n\n function contentBlockDeltaToChatGeneration(\n event: AnthropicStreamContentBlockDeltaEvent\n ): ChatGenerationChunk | null {\n switch (event.delta.type) {\n case \"text_delta\":\n return contentBlockDeltaTextToChatGeneration(event);\n case \"input_json_delta\":\n return contentBlockDeltaInputJsonDeltaToChatGeneration(event);\n default:\n console.warn(\n `Unexpected delta content_block type: ${JSON.stringify(event)}`\n );\n return null;\n }\n }\n\n function responseToChatGeneration(\n response: GoogleLLMResponse\n ): ChatGenerationChunk | null {\n const data = response.data as AnthropicResponseData;\n switch (data.type) {\n case \"message\":\n return messageToChatGeneration(data as AnthropicResponseMessage);\n case \"message_start\":\n return messageStartToChatGeneration(\n data as AnthropicStreamMessageStartEvent\n );\n case \"message_delta\":\n return messageDeltaToChatGeneration(\n data as AnthropicStreamMessageDeltaEvent\n );\n case \"content_block_start\":\n return contentBlockStartToChatGeneration(\n data as AnthropicStreamContentBlockStartEvent\n );\n case \"content_block_delta\":\n return contentBlockDeltaToChatGeneration(\n data as AnthropicStreamContentBlockDeltaEvent\n );\n\n case \"ping\":\n case \"message_stop\":\n case \"content_block_stop\":\n // These are ignorable\n return null;\n\n case \"error\":\n throw new Error(\n `Error while streaming results: ${JSON.stringify(data)}`\n );\n\n default:\n // We don't know what type this is, but Anthropic may have added\n // new ones without telling us. Don't error, but don't use them.\n console.warn(\"Unknown data for responseToChatGeneration\", data);\n // throw new Error(`Unknown response type: ${data.type}`);\n return null;\n }\n }\n\n function chunkToString(chunk: BaseMessageChunk): string {\n if (chunk === null) {\n return \"\";\n } else if (typeof chunk.content === \"string\") {\n return chunk.content;\n } else if (chunk.content.length === 0) {\n return \"\";\n } else if (chunk.content[0].type === \"text\") {\n return chunk.content[0].text;\n } else {\n throw new Error(`Unexpected chunk: ${chunk}`);\n }\n }\n\n function responseToBaseMessage(response: GoogleLLMResponse): BaseMessage {\n const data = response.data as AnthropicResponseMessage;\n const content: AnthropicContent[] = data?.content ?? [];\n return contentToMessage(content);\n }\n\n function responseToChatResult(response: GoogleLLMResponse): ChatResult {\n const message = response.data as AnthropicResponseMessage;\n const generations: ChatGeneration[] = [];\n const gen = responseToChatGeneration(response);\n if (gen) {\n generations.push(gen);\n }\n const llmOutput = messageToGenerationInfo(message);\n return {\n generations,\n llmOutput,\n };\n }\n\n function formatAnthropicVersion(): string {\n return config?.version ?? \"vertex-2023-10-16\";\n }\n\n function textContentToAnthropicContent(\n content: MessageContentText\n ): AnthropicMessageContentText {\n return content;\n }\n\n function extractMimeType(\n str: string\n ): { media_type: string; data: string } | null {\n if (str.startsWith(\"data:\")) {\n return {\n media_type: str.split(\":\")[1].split(\";\")[0],\n data: str.split(\",\")[1],\n };\n }\n return null;\n }\n\n function imageContentToAnthropicContent(\n content: MessageContentImageUrl\n ): AnthropicMessageContentImage | undefined {\n const dataUrl = content.image_url;\n const url = typeof dataUrl === \"string\" ? dataUrl : dataUrl?.url;\n const urlInfo = extractMimeType(url);\n\n if (!urlInfo) {\n return undefined;\n }\n\n return {\n type: \"image\",\n source: {\n type: \"base64\",\n ...urlInfo,\n },\n };\n }\n\n function thinkingContentToAnthropicContent(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n content: Record<string, any>\n ): AnthropicMessageContentThinking | undefined {\n // TODO: Once a Langchain Thinking type is defined, use it\n return {\n type: \"thinking\",\n thinking: content.thinking,\n signature: content.signature,\n };\n }\n\n function redactedThinkingContentToAnthropicContent(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n content: Record<string, any>\n ): AnthropicMessageContentRedactedThinking | undefined {\n // TODO: Once a Langchain Thinking type is defined, use it\n return {\n type: \"redacted_thinking\",\n data: content.data,\n };\n }\n\n function contentComplexToAnthropicContent(\n content: MessageContentComplex\n ): AnthropicMessageContent | undefined {\n const type = content?.type;\n switch (type) {\n case \"text\":\n return textContentToAnthropicContent(content as MessageContentText);\n case \"image_url\":\n return imageContentToAnthropicContent(\n content as MessageContentImageUrl\n );\n case \"thinking\":\n return thinkingContentToAnthropicContent(\n content as Record<string, unknown>\n );\n case \"redacted_thinking\":\n return redactedThinkingContentToAnthropicContent(\n content as Record<string, unknown>\n );\n default:\n console.warn(`Unexpected content type: ${type}`, content);\n return undefined;\n }\n }\n\n const anthropicContentConverter: StandardContentBlockConverter<{\n text: AnthropicMessageContentText;\n image: AnthropicMessageContentImage;\n file: AnthropicMessageContentDocument;\n }> = {\n providerName: \"anthropic\",\n\n fromStandardTextBlock(\n block: StandardTextBlock\n ): AnthropicMessageContentText {\n return {\n type: \"text\",\n text: block.text,\n ...(\"cache_control\" in (block.metadata ?? {})\n ? {\n cache_control: block.metadata!\n .cache_control as AnthropicCacheControl,\n }\n : {}),\n };\n },\n\n fromStandardImageBlock(\n block: StandardImageBlock\n ): AnthropicMessageContentImage {\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 AnthropicMessageContentImage;\n } else {\n return {\n type: \"image\",\n source: {\n type: \"url\",\n url: block.url,\n media_type: block.mime_type ?? \"\",\n },\n ...(\"cache_control\" in (block.metadata ?? {})\n ? { cache_control: block.metadata!.cache_control }\n : {}),\n } as AnthropicMessageContentImage;\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 AnthropicMessageContentImage;\n } else {\n throw new Error(\n `Unsupported image source type: ${block.source_type}`\n );\n }\n }\n },\n\n fromStandardFileBlock(\n block: StandardFileBlock\n ): AnthropicMessageContentDocument {\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 media_type: block.mime_type ?? \"\",\n },\n ...(\"cache_control\" in (block.metadata ?? {})\n ? {\n cache_control: block.metadata!\n .cache_control as AnthropicCacheControl,\n }\n : {}),\n ...(\"citations\" in (block.metadata ?? {})\n ? {\n citations: block.metadata!.citations as { enabled?: boolean },\n }\n : {}),\n ...(\"context\" in (block.metadata ?? {})\n ? { context: block.metadata!.context as string }\n : {}),\n ...(block.metadata?.title ||\n block.metadata?.filename ||\n block.metadata?.name\n ? {\n title: (block.metadata?.title ||\n block.metadata?.filename ||\n block.metadata?.name) as string,\n }\n : {}),\n };\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 ? {\n cache_control: block.metadata!\n .cache_control as AnthropicCacheControl,\n }\n : {}),\n ...(\"citations\" in (block.metadata ?? {})\n ? {\n citations: block.metadata!.citations as { enabled?: boolean },\n }\n : {}),\n ...(\"context\" in (block.metadata ?? {})\n ? { context: block.metadata!.context as string }\n : {}),\n ...(\"title\" in (block.metadata ?? {})\n ? { title: block.metadata!.title as string }\n : {}),\n };\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 ? {\n cache_control: block.metadata!\n .cache_control as AnthropicCacheControl,\n }\n : {}),\n ...(\"citations\" in (block.metadata ?? {})\n ? {\n citations: block.metadata!.citations as { enabled?: boolean },\n }\n : {}),\n ...(\"context\" in (block.metadata ?? {})\n ? { context: block.metadata!.context as string }\n : {}),\n ...(\"title\" in (block.metadata ?? {})\n ? { title: block.metadata!.title as string }\n : {}),\n };\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 ? {\n cache_control: block.metadata!\n .cache_control as AnthropicCacheControl,\n }\n : {}),\n ...(\"citations\" in (block.metadata ?? {})\n ? {\n citations: block.metadata!.citations as { enabled?: boolean },\n }\n : {}),\n ...(\"context\" in (block.metadata ?? {})\n ? { context: block.metadata!.context as string }\n : {}),\n ...(\"title\" in (block.metadata ?? {})\n ? { title: block.metadata!.title as string }\n : {}),\n };\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\n function contentToAnthropicContent(\n content: MessageContent | DataContentBlock[]\n ): AnthropicMessageContent[] {\n const ca =\n typeof content === \"string\" ? [{ type: \"text\", text: content }] : content;\n return ca\n .map((complex) =>\n isDataContentBlock(complex)\n ? convertToProviderContentBlock(complex, anthropicContentConverter)\n : contentComplexToAnthropicContent(complex)\n )\n .filter(Boolean) as AnthropicMessageContent[];\n }\n\n function toolCallToAnthropicContent(\n toolCall: ToolCall\n ): AnthropicMessageContentToolUse {\n return {\n type: \"tool_use\",\n id: toolCall.id!,\n name: toolCall.name,\n input: toolCall.args,\n };\n }\n\n function toolCallsToAnthropicContent(\n toolCalls: ToolCall[] | undefined\n ): AnthropicMessageContentToolUse[] {\n if (toolCalls === undefined) {\n return [];\n }\n return toolCalls.map(toolCallToAnthropicContent);\n }\n\n function baseRoleToAnthropicMessage(\n base: BaseMessage,\n role: string\n ): AnthropicMessage {\n const content = contentToAnthropicContent(base.content);\n return {\n role,\n content,\n };\n }\n\n function aiMessageToAnthropicMessage(base: AIMessage): AnthropicMessage {\n const ret = baseRoleToAnthropicMessage(base, \"assistant\");\n\n const toolContent = toolCallsToAnthropicContent(base.tool_calls);\n if (toolContent.length > 0) {\n const content = ret.content as AnthropicMessageContent[];\n ret.content = [...content, ...toolContent];\n }\n\n return ret;\n }\n\n function toolMessageToAnthropicMessage(base: ToolMessage): AnthropicMessage {\n const role = \"user\";\n const toolUseId = base.tool_call_id;\n const toolContent = contentToAnthropicContent(\n base.content\n ) as AnthropicMessageContentToolResultContent[];\n const content: AnthropicMessageContentToolResult[] = [\n {\n type: \"tool_result\",\n tool_use_id: toolUseId,\n content: toolContent,\n },\n ];\n return {\n role,\n content,\n };\n }\n\n function baseToAnthropicMessage(\n base: BaseMessage\n ): AnthropicMessage | undefined {\n const type = base._getType();\n switch (type) {\n case \"human\":\n return baseRoleToAnthropicMessage(base, \"user\");\n case \"ai\":\n return aiMessageToAnthropicMessage(base as AIMessage);\n case \"tool\":\n return toolMessageToAnthropicMessage(base as ToolMessage);\n case \"system\":\n // System messages are handled in formatSystem()\n return undefined;\n default:\n console.warn(`Unknown BaseMessage type: ${type}`, base);\n return undefined;\n }\n }\n\n function formatMessages(input: BaseMessage[]): AnthropicMessage[] {\n const ret: AnthropicMessage[] = [];\n\n input.forEach((baseMessage) => {\n const anthropicMessage = baseToAnthropicMessage(baseMessage);\n if (anthropicMessage) {\n ret.push(anthropicMessage);\n }\n });\n\n return ret;\n }\n\n function formatSettings(\n parameters: GoogleAIModelRequestParams\n ): AnthropicRequestSettings {\n const ret: AnthropicRequestSettings = {\n stream: parameters?.streaming ?? false,\n max_tokens: parameters?.maxOutputTokens ?? 8192,\n };\n\n if (parameters.topP) {\n ret.top_p = parameters.topP;\n }\n if (parameters.topK) {\n ret.top_k = parameters.topK;\n }\n if (parameters.temperature) {\n ret.temperature = parameters.temperature;\n }\n if (parameters.stopSequences) {\n ret.stop_sequences = parameters.stopSequences;\n }\n\n return ret;\n }\n\n function contentComplexArrayToText(\n contentArray: MessageContentComplex[]\n ): string {\n let ret = \"\";\n\n contentArray.forEach((content) => {\n const contentType = content?.type;\n if (contentType === \"text\") {\n const textContent = content as MessageContentText;\n ret = `${ret}\\n${textContent.text}`;\n }\n });\n\n return ret;\n }\n\n function formatSystem(input: BaseMessage[]): string {\n let ret = \"\";\n\n input.forEach((message) => {\n if (message._getType() === \"system\") {\n const content = message?.content;\n const contentString =\n typeof content === \"string\"\n ? (content as string)\n : contentComplexArrayToText(content as MessageContentComplex[]);\n ret = `${ret}\\n${contentString}`;\n }\n });\n\n return ret;\n }\n\n function formatGeminiTool(tool: GeminiTool): AnthropicTool[] {\n if (Object.hasOwn(tool, \"functionDeclarations\")) {\n const funcs = tool?.functionDeclarations ?? [];\n return funcs.map((func) => {\n const inputSchema = func.parameters!;\n return {\n // type: \"tool\", // This may only be valid for models 20241022+\n name: func.name,\n description: func.description,\n input_schema: inputSchema,\n };\n });\n } else {\n console.warn(\n `Unable to format GeminiTool: ${JSON.stringify(tool, null, 1)}`\n );\n return [];\n }\n }\n\n function formatTool(tool: GoogleAIToolType): AnthropicTool[] {\n if (Object.hasOwn(tool, \"name\")) {\n return [tool as AnthropicTool];\n } else {\n return formatGeminiTool(tool as GeminiTool);\n }\n }\n\n function formatTools(\n parameters: GoogleAIModelRequestParams\n ): AnthropicTool[] {\n const tools: GoogleAIToolType[] = parameters?.tools ?? [];\n const ret: AnthropicTool[] = [];\n tools.forEach((tool) => {\n const anthropicTools = formatTool(tool);\n anthropicTools.forEach((anthropicTool) => {\n if (anthropicTool) {\n ret.push(anthropicTool);\n }\n });\n });\n return ret;\n }\n\n function formatToolChoice(\n parameters: GoogleAIModelRequestParams\n ): AnthropicToolChoice | undefined {\n const choice = parameters?.tool_choice;\n if (!choice) {\n return undefined;\n } else if (typeof choice === \"object\") {\n return choice as AnthropicToolChoice;\n } else {\n switch (choice) {\n case \"any\":\n case \"auto\":\n return {\n type: choice,\n };\n case \"none\":\n return undefined;\n default:\n return {\n type: \"tool\",\n name: choice,\n };\n }\n }\n }\n\n async function formatData(\n input: unknown,\n parameters: GoogleAIModelRequestParams\n ): Promise<AnthropicRequest> {\n const typedInput = input as BaseMessage[];\n const anthropicVersion = formatAnthropicVersion();\n const messages = formatMessages(typedInput);\n const settings = formatSettings(parameters);\n const system = formatSystem(typedInput);\n const tools = formatTools(parameters);\n const toolChoice = formatToolChoice(parameters);\n const ret: AnthropicRequest = {\n anthropic_version: anthropicVersion,\n messages,\n ...settings,\n };\n if (tools && tools.length && parameters?.tool_choice !== \"none\") {\n ret.tools = tools;\n }\n if (toolChoice) {\n ret.tool_choice = toolChoice;\n }\n if (system?.length) {\n ret.system = system;\n }\n if (config?.thinking) {\n ret.thinking = config?.thinking;\n }\n\n return ret;\n }\n\n return {\n responseToString,\n responseToChatGeneration,\n chunkToString,\n responseToBaseMessage,\n responseToChatResult,\n formatData,\n };\n}\n\nexport function validateClaudeParams(_params: GoogleAIModelParams): void {\n // FIXME - validate the parameters\n}\n\nexport function isModelClaude(modelName: string): boolean {\n return modelName.toLowerCase().startsWith(\"claude\");\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"anthropic.cjs","names":["AIMessageChunk","ChatGenerationChunk"],"sources":["../../src/utils/anthropic.ts"],"sourcesContent":["import {\n ChatGeneration,\n ChatGenerationChunk,\n ChatResult,\n} from \"@langchain/core/outputs\";\nimport {\n BaseMessage,\n BaseMessageChunk,\n AIMessageChunk,\n MessageContentComplex,\n MessageContentText,\n MessageContent,\n MessageContentImageUrl,\n AIMessageFields,\n AIMessageChunkFields,\n AIMessage,\n StandardContentBlockConverter,\n StandardImageBlock,\n StandardTextBlock,\n StandardFileBlock,\n DataContentBlock,\n isDataContentBlock,\n convertToProviderContentBlock,\n parseBase64DataUrl,\n UsageMetadata,\n} from \"@langchain/core/messages\";\nimport {\n ToolCall,\n ToolCallChunk,\n ToolMessage,\n} from \"@langchain/core/messages/tool\";\nimport {\n AnthropicAPIConfig,\n AnthropicCacheControl,\n AnthropicContent,\n AnthropicContentRedactedThinking,\n AnthropicContentText,\n AnthropicContentThinking,\n AnthropicContentToolUse,\n AnthropicMessage,\n AnthropicMessageContent,\n AnthropicMessageContentDocument,\n AnthropicMessageContentImage,\n AnthropicMessageContentRedactedThinking,\n AnthropicMessageContentText,\n AnthropicMessageContentThinking,\n AnthropicMessageContentToolResult,\n AnthropicMessageContentToolResultContent,\n AnthropicMessageContentToolUse,\n AnthropicRequest,\n AnthropicRequestSettings,\n AnthropicResponseData,\n AnthropicResponseMessage,\n AnthropicStreamContentBlockDeltaEvent,\n AnthropicStreamContentBlockStartEvent,\n AnthropicStreamInputJsonDelta,\n AnthropicStreamMessageDeltaEvent,\n AnthropicStreamMessageStartEvent,\n AnthropicStreamTextDelta,\n AnthropicTool,\n AnthropicToolChoice,\n GeminiTool,\n GoogleAIAPI,\n GoogleAIModelParams,\n GoogleAIModelRequestParams,\n GoogleAIToolType,\n GoogleLLMResponse,\n} from \"../types.js\";\n\nexport function getAnthropicAPI(config?: AnthropicAPIConfig): GoogleAIAPI {\n function partToString(part: AnthropicContent): string {\n return \"text\" in part ? part.text : \"\";\n }\n\n function messageToString(message: AnthropicResponseMessage): string {\n const content: AnthropicContent[] = message?.content ?? [];\n const ret = content.reduce((acc, part) => {\n const str = partToString(part);\n return acc + str;\n }, \"\");\n return ret;\n }\n\n function responseToString(response: GoogleLLMResponse): string {\n const data = response.data as AnthropicResponseData;\n switch (data?.type) {\n case \"message\":\n return messageToString(data as AnthropicResponseMessage);\n default:\n throw Error(`Unknown type: ${data?.type}`);\n }\n }\n\n /**\n * Normalize the AIMessageChunk.\n * If the fields are just a string - use that as content.\n * If the content is an array of just text fields, turn them into a string.\n * @param fields\n */\n function newAIMessageChunk(fields: string | AIMessageFields): AIMessageChunk {\n if (typeof fields === \"string\") {\n return new AIMessageChunk(fields);\n }\n const ret: AIMessageFields = {\n ...fields,\n };\n\n if (Array.isArray(fields?.content)) {\n let str: string | undefined = \"\";\n fields.content.forEach((val) => {\n if (str !== undefined && val.type === \"text\") {\n str = `${str}${val.text}`;\n } else {\n str = undefined;\n }\n });\n if (str) {\n ret.content = str;\n }\n }\n\n return new AIMessageChunk(ret);\n }\n\n function textContentToMessageFields(\n textContent: AnthropicContentText\n ): AIMessageFields {\n return {\n content: [textContent],\n };\n }\n\n function toolUseContentToMessageFields(\n toolUseContent: AnthropicContentToolUse\n ): AIMessageFields {\n const tool: ToolCall = {\n id: toolUseContent.id,\n name: toolUseContent.name,\n type: \"tool_call\",\n args: toolUseContent.input,\n };\n return {\n content: [],\n tool_calls: [tool],\n };\n }\n\n function thinkingContentToMessageFields(\n thinkingContent: AnthropicContentThinking\n ): AIMessageFields {\n // TODO: Once a reasoning/thinking type is defined in LangChain, use it\n return {\n content: [thinkingContent],\n };\n }\n\n function redactedThinkingContentToMessageFields(\n thinkingContent: AnthropicContentRedactedThinking\n ): AIMessageFields {\n // TODO: Once a reasoning/thinking type is defined in LangChain, use it\n return {\n content: [thinkingContent],\n };\n }\n\n function anthropicContentToMessageFields(\n anthropicContent: AnthropicContent\n ): AIMessageFields | undefined {\n const type = anthropicContent?.type;\n switch (type) {\n case \"text\":\n return textContentToMessageFields(anthropicContent);\n case \"tool_use\":\n return toolUseContentToMessageFields(anthropicContent);\n case \"thinking\":\n return thinkingContentToMessageFields(anthropicContent);\n case \"redacted_thinking\":\n return redactedThinkingContentToMessageFields(anthropicContent);\n default:\n console.error(`Unknown message type: ${type}`, anthropicContent);\n return undefined;\n }\n }\n\n function contentToMessage(\n anthropicContent: AnthropicContent[]\n ): BaseMessageChunk {\n const complexContent: MessageContentComplex[] = [];\n const toolCalls: ToolCall[] = [];\n anthropicContent.forEach((ac) => {\n const messageFields = anthropicContentToMessageFields(ac);\n if (messageFields?.content) {\n complexContent.push(\n ...(messageFields.content as MessageContentComplex[])\n );\n }\n if (messageFields?.tool_calls) {\n toolCalls.push(...messageFields.tool_calls);\n }\n });\n\n const ret: AIMessageFields = {\n content: complexContent,\n tool_calls: toolCalls,\n };\n return newAIMessageChunk(ret);\n }\n\n function messageToUsageMetadata(\n message: AnthropicResponseMessage\n ): UsageMetadata {\n const usage = message?.usage;\n const inputTokens = usage?.input_tokens ?? 0;\n const outputTokens = usage?.output_tokens ?? 0;\n const usageMetadata: UsageMetadata = {\n input_tokens: inputTokens,\n output_tokens: outputTokens,\n total_tokens: inputTokens + outputTokens,\n input_token_details: {\n cache_read: usage?.cache_read_input_tokens ?? 0,\n cache_creation: usage?.cache_creation_input_tokens ?? 0,\n },\n };\n return usageMetadata;\n }\n\n function messageToGenerationInfo(message: AnthropicResponseMessage) {\n const usageMetadata = messageToUsageMetadata(message);\n\n return {\n usage_metadata: usageMetadata,\n finish_reason: message.stop_reason,\n };\n }\n\n function messageToChatGeneration(\n responseMessage: AnthropicResponseMessage\n ): ChatGenerationChunk {\n const content: AnthropicContent[] = responseMessage?.content ?? [];\n const text = messageToString(responseMessage);\n const message = contentToMessage(content);\n const generationInfo = messageToGenerationInfo(responseMessage);\n return new ChatGenerationChunk({\n text,\n message,\n generationInfo,\n });\n }\n\n function messageStartToChatGeneration(\n event: AnthropicStreamMessageStartEvent\n ): ChatGenerationChunk {\n const responseMessage = event.message;\n return messageToChatGeneration(responseMessage);\n }\n\n function messageDeltaToChatGeneration(\n event: AnthropicStreamMessageDeltaEvent\n ): ChatGenerationChunk {\n const responseMessage = event.delta;\n return messageToChatGeneration(responseMessage as AnthropicResponseMessage);\n }\n\n function contentBlockStartTextToChatGeneration(\n event: AnthropicStreamContentBlockStartEvent\n ): ChatGenerationChunk | null {\n const content = event.content_block;\n const message = contentToMessage([content]);\n if (!message) {\n return null;\n }\n\n const text = \"text\" in content ? content.text : \"\";\n return new ChatGenerationChunk({\n message,\n text,\n });\n }\n\n function contentBlockStartToolUseToChatGeneration(\n event: AnthropicStreamContentBlockStartEvent\n ): ChatGenerationChunk | null {\n const contentBlock = event.content_block as AnthropicContentToolUse;\n const text: string = \"\";\n const toolChunk: ToolCallChunk = {\n type: \"tool_call_chunk\",\n index: event.index,\n name: contentBlock.name,\n id: contentBlock.id,\n };\n if (\n typeof contentBlock.input === \"object\" &&\n Object.keys(contentBlock.input).length > 0\n ) {\n toolChunk.args = JSON.stringify(contentBlock.input);\n }\n const toolChunks: ToolCallChunk[] = [toolChunk];\n\n const content: MessageContentComplex[] = [\n {\n index: event.index,\n ...contentBlock,\n },\n ];\n const messageFields: AIMessageChunkFields = {\n content,\n tool_call_chunks: toolChunks,\n };\n const message = newAIMessageChunk(messageFields);\n return new ChatGenerationChunk({\n message,\n text,\n });\n }\n\n function contentBlockStartToChatGeneration(\n event: AnthropicStreamContentBlockStartEvent\n ): ChatGenerationChunk | null {\n switch (event.content_block.type) {\n case \"text\":\n return contentBlockStartTextToChatGeneration(event);\n case \"tool_use\":\n return contentBlockStartToolUseToChatGeneration(event);\n default:\n console.warn(\n `Unexpected start content_block type: ${JSON.stringify(event)}`\n );\n return null;\n }\n }\n\n function contentBlockDeltaTextToChatGeneration(\n event: AnthropicStreamContentBlockDeltaEvent\n ): ChatGenerationChunk {\n const delta = event.delta as AnthropicStreamTextDelta;\n const text = delta?.text;\n const message = newAIMessageChunk(text);\n return new ChatGenerationChunk({\n message,\n text,\n });\n }\n\n function contentBlockDeltaInputJsonDeltaToChatGeneration(\n event: AnthropicStreamContentBlockDeltaEvent\n ): ChatGenerationChunk {\n const delta = event.delta as AnthropicStreamInputJsonDelta;\n const text: string = \"\";\n const toolChunks: ToolCallChunk[] = [\n {\n index: event.index,\n args: delta.partial_json,\n },\n ];\n const content: MessageContentComplex[] = [\n {\n index: event.index,\n ...delta,\n },\n ];\n const messageFields: AIMessageChunkFields = {\n content,\n tool_call_chunks: toolChunks,\n };\n const message = newAIMessageChunk(messageFields);\n return new ChatGenerationChunk({\n message,\n text,\n });\n }\n\n function contentBlockDeltaToChatGeneration(\n event: AnthropicStreamContentBlockDeltaEvent\n ): ChatGenerationChunk | null {\n switch (event.delta.type) {\n case \"text_delta\":\n return contentBlockDeltaTextToChatGeneration(event);\n case \"input_json_delta\":\n return contentBlockDeltaInputJsonDeltaToChatGeneration(event);\n default:\n console.warn(\n `Unexpected delta content_block type: ${JSON.stringify(event)}`\n );\n return null;\n }\n }\n\n function responseToChatGeneration(\n response: GoogleLLMResponse\n ): ChatGenerationChunk | null {\n const data = response.data as AnthropicResponseData;\n switch (data.type) {\n case \"message\":\n return messageToChatGeneration(data as AnthropicResponseMessage);\n case \"message_start\":\n return messageStartToChatGeneration(\n data as AnthropicStreamMessageStartEvent\n );\n case \"message_delta\":\n return messageDeltaToChatGeneration(\n data as AnthropicStreamMessageDeltaEvent\n );\n case \"content_block_start\":\n return contentBlockStartToChatGeneration(\n data as AnthropicStreamContentBlockStartEvent\n );\n case \"content_block_delta\":\n return contentBlockDeltaToChatGeneration(\n data as AnthropicStreamContentBlockDeltaEvent\n );\n\n case \"ping\":\n case \"message_stop\":\n case \"content_block_stop\":\n // These are ignorable\n return null;\n\n case \"error\":\n throw new Error(\n `Error while streaming results: ${JSON.stringify(data)}`\n );\n\n default:\n // We don't know what type this is, but Anthropic may have added\n // new ones without telling us. Don't error, but don't use them.\n console.warn(\"Unknown data for responseToChatGeneration\", data);\n // throw new Error(`Unknown response type: ${data.type}`);\n return null;\n }\n }\n\n function chunkToString(chunk: BaseMessageChunk): string {\n if (chunk === null) {\n return \"\";\n } else if (typeof chunk.content === \"string\") {\n return chunk.content;\n } else if (chunk.content.length === 0) {\n return \"\";\n } else if (chunk.content[0].type === \"text\") {\n return chunk.content[0].text;\n } else {\n throw new Error(`Unexpected chunk: ${chunk}`);\n }\n }\n\n function responseToBaseMessage(response: GoogleLLMResponse): BaseMessage {\n const data = response.data as AnthropicResponseMessage;\n const content: AnthropicContent[] = data?.content ?? [];\n return contentToMessage(content);\n }\n\n function responseToChatResult(response: GoogleLLMResponse): ChatResult {\n const message = response.data as AnthropicResponseMessage;\n const generations: ChatGeneration[] = [];\n const gen = responseToChatGeneration(response);\n if (gen) {\n generations.push(gen);\n }\n const llmOutput = messageToGenerationInfo(message);\n return {\n generations,\n llmOutput,\n };\n }\n\n function formatAnthropicVersion(): string {\n return config?.version ?? \"vertex-2023-10-16\";\n }\n\n function textContentToAnthropicContent(\n content: MessageContentText\n ): AnthropicMessageContentText {\n return content;\n }\n\n function extractMimeType(\n str: string\n ): { media_type: string; data: string } | null {\n if (str.startsWith(\"data:\")) {\n return {\n media_type: str.split(\":\")[1].split(\";\")[0],\n data: str.split(\",\")[1],\n };\n }\n return null;\n }\n\n function imageContentToAnthropicContent(\n content: MessageContentImageUrl\n ): AnthropicMessageContentImage | undefined {\n const dataUrl = content.image_url;\n const url = typeof dataUrl === \"string\" ? dataUrl : dataUrl?.url;\n const urlInfo = extractMimeType(url);\n\n if (!urlInfo) {\n return undefined;\n }\n\n return {\n type: \"image\",\n source: {\n type: \"base64\",\n ...urlInfo,\n },\n };\n }\n\n function thinkingContentToAnthropicContent(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n content: Record<string, any>\n ): AnthropicMessageContentThinking | undefined {\n // TODO: Once a Langchain Thinking type is defined, use it\n return {\n type: \"thinking\",\n thinking: content.thinking,\n signature: content.signature,\n };\n }\n\n function redactedThinkingContentToAnthropicContent(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n content: Record<string, any>\n ): AnthropicMessageContentRedactedThinking | undefined {\n // TODO: Once a Langchain Thinking type is defined, use it\n return {\n type: \"redacted_thinking\",\n data: content.data,\n };\n }\n\n function contentComplexToAnthropicContent(\n content: MessageContentComplex\n ): AnthropicMessageContent | undefined {\n const type = content?.type;\n switch (type) {\n case \"text\":\n return textContentToAnthropicContent(content as MessageContentText);\n case \"image_url\":\n return imageContentToAnthropicContent(\n content as MessageContentImageUrl\n );\n case \"thinking\":\n return thinkingContentToAnthropicContent(\n content as Record<string, unknown>\n );\n case \"redacted_thinking\":\n return redactedThinkingContentToAnthropicContent(\n content as Record<string, unknown>\n );\n default:\n console.warn(`Unexpected content type: ${type}`, content);\n return undefined;\n }\n }\n\n const anthropicContentConverter: StandardContentBlockConverter<{\n text: AnthropicMessageContentText;\n image: AnthropicMessageContentImage;\n file: AnthropicMessageContentDocument;\n }> = {\n providerName: \"anthropic\",\n\n fromStandardTextBlock(\n block: StandardTextBlock\n ): AnthropicMessageContentText {\n return {\n type: \"text\",\n text: block.text,\n ...(\"cache_control\" in (block.metadata ?? {})\n ? {\n cache_control: block.metadata!\n .cache_control as AnthropicCacheControl,\n }\n : {}),\n };\n },\n\n fromStandardImageBlock(\n block: StandardImageBlock\n ): AnthropicMessageContentImage {\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 AnthropicMessageContentImage;\n } else {\n return {\n type: \"image\",\n source: {\n type: \"url\",\n url: block.url,\n media_type: block.mime_type ?? \"\",\n },\n ...(\"cache_control\" in (block.metadata ?? {})\n ? { cache_control: block.metadata!.cache_control }\n : {}),\n } as AnthropicMessageContentImage;\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 AnthropicMessageContentImage;\n } else {\n throw new Error(\n `Unsupported image source type: ${block.source_type}`\n );\n }\n }\n },\n\n fromStandardFileBlock(\n block: StandardFileBlock\n ): AnthropicMessageContentDocument {\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 media_type: block.mime_type ?? \"\",\n },\n ...(\"cache_control\" in (block.metadata ?? {})\n ? {\n cache_control: block.metadata!\n .cache_control as AnthropicCacheControl,\n }\n : {}),\n ...(\"citations\" in (block.metadata ?? {})\n ? {\n citations: block.metadata!.citations as { enabled?: boolean },\n }\n : {}),\n ...(\"context\" in (block.metadata ?? {})\n ? { context: block.metadata!.context as string }\n : {}),\n ...(block.metadata?.title ||\n block.metadata?.filename ||\n block.metadata?.name\n ? {\n title: (block.metadata?.title ||\n block.metadata?.filename ||\n block.metadata?.name) as string,\n }\n : {}),\n };\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 ? {\n cache_control: block.metadata!\n .cache_control as AnthropicCacheControl,\n }\n : {}),\n ...(\"citations\" in (block.metadata ?? {})\n ? {\n citations: block.metadata!.citations as { enabled?: boolean },\n }\n : {}),\n ...(\"context\" in (block.metadata ?? {})\n ? { context: block.metadata!.context as string }\n : {}),\n ...(\"title\" in (block.metadata ?? {})\n ? { title: block.metadata!.title as string }\n : {}),\n };\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 ? {\n cache_control: block.metadata!\n .cache_control as AnthropicCacheControl,\n }\n : {}),\n ...(\"citations\" in (block.metadata ?? {})\n ? {\n citations: block.metadata!.citations as { enabled?: boolean },\n }\n : {}),\n ...(\"context\" in (block.metadata ?? {})\n ? { context: block.metadata!.context as string }\n : {}),\n ...(\"title\" in (block.metadata ?? {})\n ? { title: block.metadata!.title as string }\n : {}),\n };\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 ? {\n cache_control: block.metadata!\n .cache_control as AnthropicCacheControl,\n }\n : {}),\n ...(\"citations\" in (block.metadata ?? {})\n ? {\n citations: block.metadata!.citations as { enabled?: boolean },\n }\n : {}),\n ...(\"context\" in (block.metadata ?? {})\n ? { context: block.metadata!.context as string }\n : {}),\n ...(\"title\" in (block.metadata ?? {})\n ? { title: block.metadata!.title as string }\n : {}),\n };\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\n function contentToAnthropicContent(\n content: MessageContent | DataContentBlock[]\n ): AnthropicMessageContent[] {\n const ca =\n typeof content === \"string\" ? [{ type: \"text\", text: content }] : content;\n return ca\n .map((complex) =>\n isDataContentBlock(complex)\n ? convertToProviderContentBlock(complex, anthropicContentConverter)\n : contentComplexToAnthropicContent(complex)\n )\n .filter(Boolean) as AnthropicMessageContent[];\n }\n\n function toolCallToAnthropicContent(\n toolCall: ToolCall\n ): AnthropicMessageContentToolUse {\n return {\n type: \"tool_use\",\n id: toolCall.id!,\n name: toolCall.name,\n input: toolCall.args,\n };\n }\n\n function toolCallsToAnthropicContent(\n toolCalls: ToolCall[] | undefined\n ): AnthropicMessageContentToolUse[] {\n if (toolCalls === undefined) {\n return [];\n }\n return toolCalls.map(toolCallToAnthropicContent);\n }\n\n function baseRoleToAnthropicMessage(\n base: BaseMessage,\n role: string\n ): AnthropicMessage {\n const content = contentToAnthropicContent(base.content);\n return {\n role,\n content,\n };\n }\n\n function aiMessageToAnthropicMessage(base: AIMessage): AnthropicMessage {\n const ret = baseRoleToAnthropicMessage(base, \"assistant\");\n\n const toolContent = toolCallsToAnthropicContent(base.tool_calls);\n if (toolContent.length > 0) {\n const content = ret.content as AnthropicMessageContent[];\n ret.content = [...content, ...toolContent];\n }\n\n return ret;\n }\n\n function toolMessageToAnthropicMessage(base: ToolMessage): AnthropicMessage {\n const role = \"user\";\n const toolUseId = base.tool_call_id;\n const toolContent = contentToAnthropicContent(\n base.content\n ) as AnthropicMessageContentToolResultContent[];\n const content: AnthropicMessageContentToolResult[] = [\n {\n type: \"tool_result\",\n tool_use_id: toolUseId,\n content: toolContent,\n },\n ];\n return {\n role,\n content,\n };\n }\n\n function baseToAnthropicMessage(\n base: BaseMessage\n ): AnthropicMessage | undefined {\n const type = base._getType();\n switch (type) {\n case \"human\":\n return baseRoleToAnthropicMessage(base, \"user\");\n case \"ai\":\n return aiMessageToAnthropicMessage(base as AIMessage);\n case \"tool\":\n return toolMessageToAnthropicMessage(base as ToolMessage);\n case \"system\":\n // System messages are handled in formatSystem()\n return undefined;\n default:\n console.warn(`Unknown BaseMessage type: ${type}`, base);\n return undefined;\n }\n }\n\n function formatMessages(input: BaseMessage[]): AnthropicMessage[] {\n const ret: AnthropicMessage[] = [];\n\n input.forEach((baseMessage) => {\n const anthropicMessage = baseToAnthropicMessage(baseMessage);\n if (anthropicMessage) {\n ret.push(anthropicMessage);\n }\n });\n\n return ret;\n }\n\n function formatSettings(\n parameters: GoogleAIModelRequestParams\n ): AnthropicRequestSettings {\n const ret: AnthropicRequestSettings = {\n stream: parameters?.streaming ?? false,\n max_tokens: parameters?.maxOutputTokens ?? 8192,\n };\n\n if (parameters.topP) {\n ret.top_p = parameters.topP;\n }\n if (parameters.topK) {\n ret.top_k = parameters.topK;\n }\n if (parameters.temperature) {\n ret.temperature = parameters.temperature;\n }\n if (parameters.stopSequences) {\n ret.stop_sequences = parameters.stopSequences;\n }\n\n return ret;\n }\n\n function contentComplexArrayToText(\n contentArray: MessageContentComplex[]\n ): string {\n let ret = \"\";\n\n contentArray.forEach((content) => {\n const contentType = content?.type;\n if (contentType === \"text\") {\n const textContent = content as MessageContentText;\n ret = `${ret}\\n${textContent.text}`;\n }\n });\n\n return ret;\n }\n\n function formatSystem(input: BaseMessage[]): string {\n let ret = \"\";\n\n input.forEach((message) => {\n if (message._getType() === \"system\") {\n const content = message?.content;\n const contentString =\n typeof content === \"string\"\n ? (content as string)\n : contentComplexArrayToText(content as MessageContentComplex[]);\n ret = `${ret}\\n${contentString}`;\n }\n });\n\n return ret;\n }\n\n function formatGeminiTool(tool: GeminiTool): AnthropicTool[] {\n if (Object.hasOwn(tool, \"functionDeclarations\")) {\n const funcs = tool?.functionDeclarations ?? [];\n return funcs.map((func) => {\n const inputSchema = func.parameters!;\n return {\n // type: \"tool\", // This may only be valid for models 20241022+\n name: func.name,\n description: func.description,\n input_schema: inputSchema,\n };\n });\n } else {\n console.warn(\n `Unable to format GeminiTool: ${JSON.stringify(tool, null, 1)}`\n );\n return [];\n }\n }\n\n function formatTool(tool: GoogleAIToolType): AnthropicTool[] {\n if (Object.hasOwn(tool, \"name\")) {\n return [tool as AnthropicTool];\n } else {\n return formatGeminiTool(tool as GeminiTool);\n }\n }\n\n function formatTools(\n parameters: GoogleAIModelRequestParams\n ): AnthropicTool[] {\n const tools: GoogleAIToolType[] = parameters?.tools ?? [];\n const ret: AnthropicTool[] = [];\n tools.forEach((tool) => {\n const anthropicTools = formatTool(tool);\n anthropicTools.forEach((anthropicTool) => {\n if (anthropicTool) {\n ret.push(anthropicTool);\n }\n });\n });\n return ret;\n }\n\n function formatToolChoice(\n parameters: GoogleAIModelRequestParams\n ): AnthropicToolChoice | undefined {\n const choice = parameters?.tool_choice;\n if (!choice) {\n return undefined;\n } else if (typeof choice === \"object\") {\n return choice as AnthropicToolChoice;\n } else {\n switch (choice) {\n case \"any\":\n case \"auto\":\n return {\n type: choice,\n };\n case \"none\":\n return undefined;\n default:\n return {\n type: \"tool\",\n name: choice,\n };\n }\n }\n }\n\n async function formatData(\n input: unknown,\n parameters: GoogleAIModelRequestParams\n ): Promise<AnthropicRequest> {\n const typedInput = input as BaseMessage[];\n const anthropicVersion = formatAnthropicVersion();\n const messages = formatMessages(typedInput);\n const settings = formatSettings(parameters);\n const system = formatSystem(typedInput);\n const tools = formatTools(parameters);\n const toolChoice = formatToolChoice(parameters);\n const ret: AnthropicRequest = {\n anthropic_version: anthropicVersion,\n messages,\n ...settings,\n };\n if (tools && tools.length && parameters?.tool_choice !== \"none\") {\n ret.tools = tools;\n }\n if (toolChoice) {\n ret.tool_choice = toolChoice;\n }\n if (system?.length) {\n ret.system = system;\n }\n if (config?.thinking) {\n ret.thinking = config?.thinking;\n }\n\n return ret;\n }\n\n return {\n responseToString,\n responseToChatGeneration,\n chunkToString,\n responseToBaseMessage,\n responseToChatResult,\n formatData,\n };\n}\n\nexport function validateClaudeParams(_params: GoogleAIModelParams): void {\n // FIXME - validate the parameters\n}\n\nexport function isModelClaude(modelName: string): boolean {\n return modelName.toLowerCase().startsWith(\"claude\");\n}\n"],"mappings":"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"}
|