@langchain/google-common 2.1.18 → 2.1.20

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.
Files changed (108) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/auth.cjs +1 -2
  3. package/dist/auth.cjs.map +1 -1
  4. package/dist/auth.d.cts.map +1 -1
  5. package/dist/auth.d.ts.map +1 -1
  6. package/dist/auth.js +1 -2
  7. package/dist/auth.js.map +1 -1
  8. package/dist/chat_models.cjs +24 -27
  9. package/dist/chat_models.cjs.map +1 -1
  10. package/dist/chat_models.d.cts.map +1 -1
  11. package/dist/chat_models.d.ts.map +1 -1
  12. package/dist/chat_models.js +7 -9
  13. package/dist/chat_models.js.map +1 -1
  14. package/dist/connection.cjs +16 -26
  15. package/dist/connection.cjs.map +1 -1
  16. package/dist/connection.d.cts.map +1 -1
  17. package/dist/connection.d.ts.map +1 -1
  18. package/dist/connection.js +13 -22
  19. package/dist/connection.js.map +1 -1
  20. package/dist/embeddings.cjs +12 -22
  21. package/dist/embeddings.cjs.map +1 -1
  22. package/dist/embeddings.d.cts +0 -1
  23. package/dist/embeddings.d.cts.map +1 -1
  24. package/dist/embeddings.d.ts +0 -1
  25. package/dist/embeddings.d.ts.map +1 -1
  26. package/dist/embeddings.js +7 -16
  27. package/dist/embeddings.js.map +1 -1
  28. package/dist/experimental/media.cjs +41 -70
  29. package/dist/experimental/media.cjs.map +1 -1
  30. package/dist/experimental/media.d.cts.map +1 -1
  31. package/dist/experimental/media.d.ts.map +1 -1
  32. package/dist/experimental/media.js +36 -65
  33. package/dist/experimental/media.js.map +1 -1
  34. package/dist/experimental/utils/media_core.cjs +22 -39
  35. package/dist/experimental/utils/media_core.cjs.map +1 -1
  36. package/dist/experimental/utils/media_core.d.cts.map +1 -1
  37. package/dist/experimental/utils/media_core.d.ts.map +1 -1
  38. package/dist/experimental/utils/media_core.js +16 -33
  39. package/dist/experimental/utils/media_core.js.map +1 -1
  40. package/dist/index.cjs +1 -0
  41. package/dist/llms.cjs +14 -19
  42. package/dist/llms.cjs.map +1 -1
  43. package/dist/llms.d.cts.map +1 -1
  44. package/dist/llms.d.ts.map +1 -1
  45. package/dist/llms.js +4 -8
  46. package/dist/llms.js.map +1 -1
  47. package/dist/output_parsers.cjs +12 -29
  48. package/dist/output_parsers.cjs.map +1 -1
  49. package/dist/output_parsers.d.cts.map +1 -1
  50. package/dist/output_parsers.d.ts.map +1 -1
  51. package/dist/output_parsers.js +10 -26
  52. package/dist/output_parsers.js.map +1 -1
  53. package/dist/profiles.cjs +100 -17
  54. package/dist/profiles.cjs.map +1 -1
  55. package/dist/profiles.js +100 -17
  56. package/dist/profiles.js.map +1 -1
  57. package/dist/types-anthropic.d.cts.map +1 -1
  58. package/dist/types-anthropic.d.ts.map +1 -1
  59. package/dist/types.cjs +1 -0
  60. package/dist/types.cjs.map +1 -1
  61. package/dist/types.d.cts +0 -1
  62. package/dist/types.d.cts.map +1 -1
  63. package/dist/types.d.ts +0 -1
  64. package/dist/types.d.ts.map +1 -1
  65. package/dist/types.js.map +1 -1
  66. package/dist/utils/anthropic.cjs +73 -113
  67. package/dist/utils/anthropic.cjs.map +1 -1
  68. package/dist/utils/anthropic.js +63 -102
  69. package/dist/utils/anthropic.js.map +1 -1
  70. package/dist/utils/common.cjs +10 -13
  71. package/dist/utils/common.cjs.map +1 -1
  72. package/dist/utils/common.d.cts.map +1 -1
  73. package/dist/utils/common.d.ts.map +1 -1
  74. package/dist/utils/common.js +6 -8
  75. package/dist/utils/common.js.map +1 -1
  76. package/dist/utils/failed_handler.cjs +1 -2
  77. package/dist/utils/failed_handler.cjs.map +1 -1
  78. package/dist/utils/failed_handler.d.cts.map +1 -1
  79. package/dist/utils/failed_handler.d.ts.map +1 -1
  80. package/dist/utils/failed_handler.js +1 -2
  81. package/dist/utils/failed_handler.js.map +1 -1
  82. package/dist/utils/gemini.cjs +83 -135
  83. package/dist/utils/gemini.cjs.map +1 -1
  84. package/dist/utils/gemini.d.cts.map +1 -1
  85. package/dist/utils/gemini.d.ts.map +1 -1
  86. package/dist/utils/gemini.js +58 -109
  87. package/dist/utils/gemini.js.map +1 -1
  88. package/dist/utils/index.cjs +1 -0
  89. package/dist/utils/palm.d.cts.map +1 -1
  90. package/dist/utils/palm.d.ts.map +1 -1
  91. package/dist/utils/safety.cjs.map +1 -1
  92. package/dist/utils/safety.d.cts.map +1 -1
  93. package/dist/utils/safety.d.ts.map +1 -1
  94. package/dist/utils/safety.js.map +1 -1
  95. package/dist/utils/stream.cjs +5 -9
  96. package/dist/utils/stream.cjs.map +1 -1
  97. package/dist/utils/stream.d.cts.map +1 -1
  98. package/dist/utils/stream.d.ts.map +1 -1
  99. package/dist/utils/stream.js +5 -9
  100. package/dist/utils/stream.js.map +1 -1
  101. package/dist/utils/zod_to_gemini_parameters.cjs +4 -7
  102. package/dist/utils/zod_to_gemini_parameters.cjs.map +1 -1
  103. package/dist/utils/zod_to_gemini_parameters.d.cts.map +1 -1
  104. package/dist/utils/zod_to_gemini_parameters.d.ts.map +1 -1
  105. package/dist/utils/zod_to_gemini_parameters.js +2 -4
  106. package/dist/utils/zod_to_gemini_parameters.js.map +1 -1
  107. package/package.json +3 -3
  108. package/dist/_virtual/rolldown_runtime.cjs +0 -25
@@ -7,12 +7,9 @@ function getAnthropicAPI(config) {
7
7
  return "text" in part ? part.text : "";
8
8
  }
9
9
  function messageToString(message) {
10
- const content = message?.content ?? [];
11
- const ret = content.reduce((acc, part) => {
12
- const str = partToString(part);
13
- return acc + str;
10
+ return (message?.content ?? []).reduce((acc, part) => {
11
+ return acc + partToString(part);
14
12
  }, "");
15
- return ret;
16
13
  }
17
14
  function responseToString(response) {
18
15
  const data = response.data;
@@ -44,15 +41,14 @@ function getAnthropicAPI(config) {
44
41
  return { content: [textContent] };
45
42
  }
46
43
  function toolUseContentToMessageFields(toolUseContent) {
47
- const tool = {
48
- id: toolUseContent.id,
49
- name: toolUseContent.name,
50
- type: "tool_call",
51
- args: toolUseContent.input
52
- };
53
44
  return {
54
45
  content: [],
55
- tool_calls: [tool]
46
+ tool_calls: [{
47
+ id: toolUseContent.id,
48
+ name: toolUseContent.name,
49
+ type: "tool_call",
50
+ args: toolUseContent.input
51
+ }]
56
52
  };
57
53
  }
58
54
  function thinkingContentToMessageFields(thinkingContent) {
@@ -70,7 +66,7 @@ function getAnthropicAPI(config) {
70
66
  case "redacted_thinking": return redactedThinkingContentToMessageFields(anthropicContent);
71
67
  default:
72
68
  console.error(`Unknown message type: ${type}`, anthropicContent);
73
- return void 0;
69
+ return;
74
70
  }
75
71
  }
76
72
  function contentToMessage(anthropicContent) {
@@ -81,17 +77,16 @@ function getAnthropicAPI(config) {
81
77
  if (messageFields?.content) complexContent.push(...messageFields.content);
82
78
  if (messageFields?.tool_calls) toolCalls.push(...messageFields.tool_calls);
83
79
  });
84
- const ret = {
80
+ return newAIMessageChunk({
85
81
  content: complexContent,
86
82
  tool_calls: toolCalls
87
- };
88
- return newAIMessageChunk(ret);
83
+ });
89
84
  }
90
85
  function messageToUsageMetadata(message) {
91
86
  const usage = message?.usage;
92
87
  const inputTokens = usage?.input_tokens ?? 0;
93
88
  const outputTokens = usage?.output_tokens ?? 0;
94
- const usageMetadata = {
89
+ return {
95
90
  input_tokens: inputTokens,
96
91
  output_tokens: outputTokens,
97
92
  total_tokens: inputTokens + outputTokens,
@@ -100,24 +95,19 @@ function getAnthropicAPI(config) {
100
95
  cache_creation: usage?.cache_creation_input_tokens ?? 0
101
96
  }
102
97
  };
103
- return usageMetadata;
104
98
  }
105
99
  function messageToGenerationInfo(message) {
106
- const usageMetadata = messageToUsageMetadata(message);
107
100
  return {
108
- usage_metadata: usageMetadata,
101
+ usage_metadata: messageToUsageMetadata(message),
109
102
  finish_reason: message.stop_reason
110
103
  };
111
104
  }
112
105
  function messageToChatGeneration(responseMessage) {
113
106
  const content = responseMessage?.content ?? [];
114
- const text = messageToString(responseMessage);
115
- const message = contentToMessage(content);
116
- const generationInfo = messageToGenerationInfo(responseMessage);
117
107
  return new ChatGenerationChunk({
118
- text,
119
- message,
120
- generationInfo
108
+ text: messageToString(responseMessage),
109
+ message: contentToMessage(content),
110
+ generationInfo: messageToGenerationInfo(responseMessage)
121
111
  });
122
112
  }
123
113
  function messageStartToChatGeneration(event) {
@@ -132,10 +122,9 @@ function getAnthropicAPI(config) {
132
122
  const content = event.content_block;
133
123
  const message = contentToMessage([content]);
134
124
  if (!message) return null;
135
- const text = "text" in content ? content.text : "";
136
125
  return new ChatGenerationChunk({
137
126
  message,
138
- text
127
+ text: "text" in content ? content.text : ""
139
128
  });
140
129
  }
141
130
  function contentBlockStartToolUseToChatGeneration(event) {
@@ -149,17 +138,14 @@ function getAnthropicAPI(config) {
149
138
  };
150
139
  if (typeof contentBlock.input === "object" && Object.keys(contentBlock.input).length > 0) toolChunk.args = JSON.stringify(contentBlock.input);
151
140
  const toolChunks = [toolChunk];
152
- const content = [{
153
- index: event.index,
154
- ...contentBlock
155
- }];
156
- const messageFields = {
157
- content,
158
- tool_call_chunks: toolChunks
159
- };
160
- const message = newAIMessageChunk(messageFields);
161
141
  return new ChatGenerationChunk({
162
- message,
142
+ message: newAIMessageChunk({
143
+ content: [{
144
+ index: event.index,
145
+ ...contentBlock
146
+ }],
147
+ tool_call_chunks: toolChunks
148
+ }),
163
149
  text
164
150
  });
165
151
  }
@@ -173,11 +159,9 @@ function getAnthropicAPI(config) {
173
159
  }
174
160
  }
175
161
  function contentBlockDeltaTextToChatGeneration(event) {
176
- const delta = event.delta;
177
- const text = delta?.text;
178
- const message = newAIMessageChunk(text);
162
+ const text = event.delta?.text;
179
163
  return new ChatGenerationChunk({
180
- message,
164
+ message: newAIMessageChunk(text),
181
165
  text
182
166
  });
183
167
  }
@@ -188,17 +172,14 @@ function getAnthropicAPI(config) {
188
172
  index: event.index,
189
173
  args: delta.partial_json
190
174
  }];
191
- const content = [{
192
- index: event.index,
193
- ...delta
194
- }];
195
- const messageFields = {
196
- content,
197
- tool_call_chunks: toolChunks
198
- };
199
- const message = newAIMessageChunk(messageFields);
200
175
  return new ChatGenerationChunk({
201
- message,
176
+ message: newAIMessageChunk({
177
+ content: [{
178
+ index: event.index,
179
+ ...delta
180
+ }],
181
+ tool_call_chunks: toolChunks
182
+ }),
202
183
  text
203
184
  });
204
185
  }
@@ -236,19 +217,16 @@ function getAnthropicAPI(config) {
236
217
  else throw new Error(`Unexpected chunk: ${chunk}`);
237
218
  }
238
219
  function responseToBaseMessage(response) {
239
- const data = response.data;
240
- const content = data?.content ?? [];
241
- return contentToMessage(content);
220
+ return contentToMessage(response.data?.content ?? []);
242
221
  }
243
222
  function responseToChatResult(response) {
244
223
  const message = response.data;
245
224
  const generations = [];
246
225
  const gen = responseToChatGeneration(response);
247
226
  if (gen) generations.push(gen);
248
- const llmOutput = messageToGenerationInfo(message);
249
227
  return {
250
228
  generations,
251
- llmOutput
229
+ llmOutput: messageToGenerationInfo(message)
252
230
  };
253
231
  }
254
232
  function formatAnthropicVersion() {
@@ -266,9 +244,8 @@ function getAnthropicAPI(config) {
266
244
  }
267
245
  function imageContentToAnthropicContent(content) {
268
246
  const dataUrl = content.image_url;
269
- const url = typeof dataUrl === "string" ? dataUrl : dataUrl?.url;
270
- const urlInfo = extractMimeType(url);
271
- if (!urlInfo) return void 0;
247
+ const urlInfo = extractMimeType(typeof dataUrl === "string" ? dataUrl : dataUrl?.url);
248
+ if (!urlInfo) return;
272
249
  return {
273
250
  type: "image",
274
251
  source: {
@@ -299,7 +276,7 @@ function getAnthropicAPI(config) {
299
276
  case "redacted_thinking": return redactedThinkingContentToAnthropicContent(content);
300
277
  default:
301
278
  console.warn(`Unexpected content type: ${type}`, content);
302
- return void 0;
279
+ return;
303
280
  }
304
281
  }
305
282
  const anthropicContentConverter = {
@@ -415,11 +392,10 @@ function getAnthropicAPI(config) {
415
392
  }
416
393
  };
417
394
  function contentToAnthropicContent(content) {
418
- const ca = typeof content === "string" ? [{
395
+ return (typeof content === "string" ? [{
419
396
  type: "text",
420
397
  text: content
421
- }] : content;
422
- return ca.map((complex) => isDataContentBlock(complex) ? convertToProviderContentBlock(complex, anthropicContentConverter) : contentComplexToAnthropicContent(complex)).filter(Boolean);
398
+ }] : content).map((complex) => isDataContentBlock(complex) ? convertToProviderContentBlock(complex, anthropicContentConverter) : contentComplexToAnthropicContent(complex)).filter(Boolean);
423
399
  }
424
400
  function toolCallToAnthropicContent(toolCall) {
425
401
  return {
@@ -434,33 +410,25 @@ function getAnthropicAPI(config) {
434
410
  return toolCalls.map(toolCallToAnthropicContent);
435
411
  }
436
412
  function baseRoleToAnthropicMessage(base, role) {
437
- const content = contentToAnthropicContent(base.content);
438
413
  return {
439
414
  role,
440
- content
415
+ content: contentToAnthropicContent(base.content)
441
416
  };
442
417
  }
443
418
  function aiMessageToAnthropicMessage(base) {
444
419
  const ret = baseRoleToAnthropicMessage(base, "assistant");
445
420
  const toolContent = toolCallsToAnthropicContent(base.tool_calls);
446
- if (toolContent.length > 0) {
447
- const content = ret.content;
448
- ret.content = [...content, ...toolContent];
449
- }
421
+ if (toolContent.length > 0) ret.content = [...ret.content, ...toolContent];
450
422
  return ret;
451
423
  }
452
424
  function toolMessageToAnthropicMessage(base) {
453
- const role = "user";
454
- const toolUseId = base.tool_call_id;
455
- const toolContent = contentToAnthropicContent(base.content);
456
- const content = [{
457
- type: "tool_result",
458
- tool_use_id: toolUseId,
459
- content: toolContent
460
- }];
461
425
  return {
462
- role,
463
- content
426
+ role: "user",
427
+ content: [{
428
+ type: "tool_result",
429
+ tool_use_id: base.tool_call_id,
430
+ content: contentToAnthropicContent(base.content)
431
+ }]
464
432
  };
465
433
  }
466
434
  function baseToAnthropicMessage(base) {
@@ -469,10 +437,10 @@ function getAnthropicAPI(config) {
469
437
  case "human": return baseRoleToAnthropicMessage(base, "user");
470
438
  case "ai": return aiMessageToAnthropicMessage(base);
471
439
  case "tool": return toolMessageToAnthropicMessage(base);
472
- case "system": return void 0;
440
+ case "system": return;
473
441
  default:
474
442
  console.warn(`Unknown BaseMessage type: ${type}`, base);
475
- return void 0;
443
+ return;
476
444
  }
477
445
  }
478
446
  function formatMessages(input) {
@@ -497,11 +465,7 @@ function getAnthropicAPI(config) {
497
465
  function contentComplexArrayToText(contentArray) {
498
466
  let ret = "";
499
467
  contentArray.forEach((content) => {
500
- const contentType = content?.type;
501
- if (contentType === "text") {
502
- const textContent = content;
503
- ret = `${ret}\n${textContent.text}`;
504
- }
468
+ if (content?.type === "text") ret = `${ret}\n${content.text}`;
505
469
  });
506
470
  return ret;
507
471
  }
@@ -517,17 +481,15 @@ function getAnthropicAPI(config) {
517
481
  return ret;
518
482
  }
519
483
  function formatGeminiTool(tool) {
520
- if (Object.hasOwn(tool, "functionDeclarations")) {
521
- const funcs = tool?.functionDeclarations ?? [];
522
- return funcs.map((func) => {
523
- const inputSchema = func.parameters;
524
- return {
525
- name: func.name,
526
- description: func.description,
527
- input_schema: inputSchema
528
- };
529
- });
530
- } 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 {
531
493
  console.warn(`Unable to format GeminiTool: ${JSON.stringify(tool, null, 1)}`);
532
494
  return [];
533
495
  }
@@ -540,8 +502,7 @@ function getAnthropicAPI(config) {
540
502
  const tools = parameters?.tools ?? [];
541
503
  const ret = [];
542
504
  tools.forEach((tool) => {
543
- const anthropicTools = formatTool(tool);
544
- anthropicTools.forEach((anthropicTool) => {
505
+ formatTool(tool).forEach((anthropicTool) => {
545
506
  if (anthropicTool) ret.push(anthropicTool);
546
507
  });
547
508
  });
@@ -549,12 +510,12 @@ function getAnthropicAPI(config) {
549
510
  }
550
511
  function formatToolChoice(parameters) {
551
512
  const choice = parameters?.tool_choice;
552
- if (!choice) return void 0;
513
+ if (!choice) return;
553
514
  else if (typeof choice === "object") return choice;
554
515
  else switch (choice) {
555
516
  case "any":
556
517
  case "auto": return { type: choice };
557
- case "none": return void 0;
518
+ case "none": return;
558
519
  default: return {
559
520
  type: "tool",
560
521
  name: choice
@@ -1 +1 @@
1
- {"version":3,"file":"anthropic.js","names":["config?: AnthropicAPIConfig","part: AnthropicContent","message: AnthropicResponseMessage","content: AnthropicContent[]","response: GoogleLLMResponse","fields: string | AIMessageFields","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","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.js","names":[],"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,10 +1,9 @@
1
- const require_rolldown_runtime = require('../_virtual/rolldown_runtime.cjs');
2
1
  const require_types = require('../types.cjs');
3
2
  const require_zod_to_gemini_parameters = require('./zod_to_gemini_parameters.cjs');
4
3
  const require_gemini = require('./gemini.cjs');
5
4
  const require_anthropic = require('./anthropic.cjs');
6
- const __langchain_core_language_models_base = require_rolldown_runtime.__toESM(require("@langchain/core/language_models/base"));
7
- const __langchain_core_utils_function_calling = require_rolldown_runtime.__toESM(require("@langchain/core/utils/function_calling"));
5
+ let _langchain_core_language_models_base = require("@langchain/core/language_models/base");
6
+ let _langchain_core_utils_function_calling = require("@langchain/core/utils/function_calling");
8
7
 
9
8
  //#region src/utils/common.ts
10
9
  function copyAIModelParams(params, options) {
@@ -16,7 +15,7 @@ function processToolChoice(toolChoice, allowedFunctionNames) {
16
15
  tool_choice: "any",
17
16
  allowed_function_names: allowedFunctionNames
18
17
  };
19
- return void 0;
18
+ return;
20
19
  }
21
20
  if (toolChoice === "any" || toolChoice === "auto" || toolChoice === "none") return {
22
21
  tool_choice: toolChoice,
@@ -48,7 +47,7 @@ function convertToGeminiTools(tools) {
48
47
  if ("functionDeclarations" in tool && Array.isArray(tool.functionDeclarations)) {
49
48
  const funcs = tool.functionDeclarations;
50
49
  geminiTools[functionDeclarationsIndex].functionDeclarations.push(...funcs);
51
- } else if ((0, __langchain_core_utils_function_calling.isLangChainTool)(tool)) try {
50
+ } else if ((0, _langchain_core_utils_function_calling.isLangChainTool)(tool)) try {
52
51
  const jsonSchema = require_zod_to_gemini_parameters.schemaToGeminiParameters(tool.schema);
53
52
  geminiTools[functionDeclarationsIndex].functionDeclarations.push({
54
53
  name: tool.name,
@@ -59,7 +58,7 @@ function convertToGeminiTools(tools) {
59
58
  const errorMessage = error && typeof error === "object" && "message" in error ? String(error.message) : String(error);
60
59
  throw new Error(`Failed to convert tool '${tool.name}' schema for Gemini: ${errorMessage}. `);
61
60
  }
62
- else if ((0, __langchain_core_language_models_base.isOpenAITool)(tool)) geminiTools[functionDeclarationsIndex].functionDeclarations.push({
61
+ else if ((0, _langchain_core_language_models_base.isOpenAITool)(tool)) geminiTools[functionDeclarationsIndex].functionDeclarations.push({
63
62
  name: tool.function.name,
64
63
  description: tool.function.description ?? `A function available to call.`,
65
64
  parameters: require_zod_to_gemini_parameters.jsonSchemaToGeminiParameters(tool.function.parameters)
@@ -70,13 +69,13 @@ function convertToGeminiTools(tools) {
70
69
  return geminiTools;
71
70
  }
72
71
  function reasoningEffortToReasoningTokens(_modelName, effort) {
73
- if (effort === void 0) return void 0;
72
+ if (effort === void 0) return;
74
73
  const maxEffort = 24 * 1024;
75
74
  switch (effort) {
76
75
  case "low": return 1024;
77
76
  case "medium": return 8 * 1024;
78
77
  case "high": return maxEffort;
79
- default: return void 0;
78
+ default: return;
80
79
  }
81
80
  }
82
81
  function copyAIModelParamsInto(params, options, target) {
@@ -123,8 +122,7 @@ function modelToFamily(modelName) {
123
122
  else return null;
124
123
  }
125
124
  function modelToPublisher(modelName) {
126
- const family = modelToFamily(modelName);
127
- switch (family) {
125
+ switch (modelToFamily(modelName)) {
128
126
  case "gemini":
129
127
  case "gemma":
130
128
  case "palm": return "google";
@@ -134,11 +132,10 @@ function modelToPublisher(modelName) {
134
132
  }
135
133
  function validateModelParams(params) {
136
134
  const testParams = params ?? {};
137
- const model = testParams.model ?? testParams.modelName;
138
- switch (modelToFamily(model)) {
135
+ switch (modelToFamily(testParams.model ?? testParams.modelName)) {
139
136
  case "gemini":
140
137
  case "gemma": return require_gemini.validateGeminiParams(testParams);
141
- case "claude": return require_anthropic.validateClaudeParams(testParams);
138
+ case "claude": return /* @__PURE__ */ require_anthropic.validateClaudeParams(testParams);
142
139
  default: throw new Error(`Unable to verify model params: ${JSON.stringify(params)}`);
143
140
  }
144
141
  }