@langchain/google-common 2.1.26 → 2.1.27

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 (42) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/dist/auth.cjs.map +1 -1
  3. package/dist/auth.d.cts.map +1 -1
  4. package/dist/auth.d.ts.map +1 -1
  5. package/dist/auth.js.map +1 -1
  6. package/dist/chat_models.cjs +1 -1
  7. package/dist/chat_models.cjs.map +1 -1
  8. package/dist/chat_models.js +1 -1
  9. package/dist/chat_models.js.map +1 -1
  10. package/dist/connection.cjs.map +1 -1
  11. package/dist/connection.js.map +1 -1
  12. package/dist/experimental/media.cjs.map +1 -1
  13. package/dist/experimental/media.js.map +1 -1
  14. package/dist/experimental/utils/media_core.cjs.map +1 -1
  15. package/dist/experimental/utils/media_core.js.map +1 -1
  16. package/dist/llms.cjs +1 -1
  17. package/dist/llms.js +1 -1
  18. package/dist/types.cjs.map +1 -1
  19. package/dist/types.d.cts +1 -1
  20. package/dist/types.d.cts.map +1 -1
  21. package/dist/types.d.ts +1 -1
  22. package/dist/types.d.ts.map +1 -1
  23. package/dist/types.js.map +1 -1
  24. package/dist/utils/anthropic.cjs.map +1 -1
  25. package/dist/utils/anthropic.js.map +1 -1
  26. package/dist/utils/common.cjs.map +1 -1
  27. package/dist/utils/common.js.map +1 -1
  28. package/dist/utils/failed_handler.cjs.map +1 -1
  29. package/dist/utils/failed_handler.js.map +1 -1
  30. package/dist/utils/gemini.cjs +1 -0
  31. package/dist/utils/gemini.cjs.map +1 -1
  32. package/dist/utils/gemini.d.cts.map +1 -1
  33. package/dist/utils/gemini.d.ts.map +1 -1
  34. package/dist/utils/gemini.js +1 -0
  35. package/dist/utils/gemini.js.map +1 -1
  36. package/dist/utils/safety.cjs.map +1 -1
  37. package/dist/utils/safety.js.map +1 -1
  38. package/dist/utils/stream.cjs.map +1 -1
  39. package/dist/utils/stream.js.map +1 -1
  40. package/dist/utils/zod_to_gemini_parameters.cjs.map +1 -1
  41. package/dist/utils/zod_to_gemini_parameters.js.map +1 -1
  42. package/package.json +5 -14
@@ -1 +1 @@
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 text = \"text\" in content ? content.text : \"\";\n const message = new AIMessageChunk({\n content: [{ index: event.index, ...content }],\n });\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 = new AIMessageChunk({\n content: [{ index: event.index, type: \"text\", text }],\n });\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 | undefined {\n if (!content.text) {\n return undefined;\n }\n return { type: \"text\", text: content.text };\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 toolUseContentToAnthropicContent(\n content: Record<string, unknown>\n ): AnthropicMessageContentToolUse {\n return {\n type: \"tool_use\",\n id: content.id as string,\n name: content.name as string,\n input: content.input as Record<string, unknown>,\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 \"tool_use\":\n return toolUseContentToAnthropicContent(content);\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 if (type === \"tool_call\") {\n return undefined;\n }\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 content = ret.content as AnthropicMessageContent[];\n const existingToolUseIds = new Set(\n content\n .filter(\n (block): block is AnthropicMessageContentToolUse =>\n block.type === \"tool_use\"\n )\n .map((block) => block.id)\n );\n\n const toolContent = toolCallsToAnthropicContent(base.tool_calls).filter(\n (block) => !existingToolUseIds.has(block.id)\n );\n if (toolContent.length > 0) {\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":";;;AAqEA,SAAgB,gBAAgB,QAA0C;CACxE,SAAS,aAAa,MAAgC;AACpD,SAAO,UAAU,OAAO,KAAK,OAAO;;CAGtC,SAAS,gBAAgB,SAA2C;AAMlE,UALoC,SAAS,WAAW,EAAE,EACtC,QAAQ,KAAK,SAAS;AAExC,UAAO,MADK,aAAa,KAAK;KAE7B,GAAG;;CAIR,SAAS,iBAAiB,UAAqC;EAC7D,MAAM,OAAO,SAAS;AACtB,UAAQ,MAAM,MAAd;GACE,KAAK,UACH,QAAO,gBAAgB,KAAiC;GAC1D,QACE,OAAM,MAAM,iBAAiB,MAAM,OAAO;;;;;;;;;CAUhD,SAAS,kBAAkB,QAAkD;AAC3E,MAAI,OAAO,WAAW,SACpB,QAAO,IAAIA,yBAAAA,eAAe,OAAO;EAEnC,MAAM,MAAuB,EAC3B,GAAG,QACJ;AAED,MAAI,MAAM,QAAQ,QAAQ,QAAQ,EAAE;GAClC,IAAI,MAA0B;AAC9B,UAAO,QAAQ,SAAS,QAAQ;AAC9B,QAAI,QAAQ,KAAA,KAAa,IAAI,SAAS,OACpC,OAAM,GAAG,MAAM,IAAI;QAEnB,OAAM,KAAA;KAER;AACF,OAAI,IACF,KAAI,UAAU;;AAIlB,SAAO,IAAIA,yBAAAA,eAAe,IAAI;;CAGhC,SAAS,2BACP,aACiB;AACjB,SAAO,EACL,SAAS,CAAC,YAAY,EACvB;;CAGH,SAAS,8BACP,gBACiB;AAOjB,SAAO;GACL,SAAS,EAAE;GACX,YAAY,CARS;IACrB,IAAI,eAAe;IACnB,MAAM,eAAe;IACrB,MAAM;IACN,MAAM,eAAe;IACtB,CAGmB;GACnB;;CAGH,SAAS,+BACP,iBACiB;AAEjB,SAAO,EACL,SAAS,CAAC,gBAAgB,EAC3B;;CAGH,SAAS,uCACP,iBACiB;AAEjB,SAAO,EACL,SAAS,CAAC,gBAAgB,EAC3B;;CAGH,SAAS,gCACP,kBAC6B;EAC7B,MAAM,OAAO,kBAAkB;AAC/B,UAAQ,MAAR;GACE,KAAK,OACH,QAAO,2BAA2B,iBAAiB;GACrD,KAAK,WACH,QAAO,8BAA8B,iBAAiB;GACxD,KAAK,WACH,QAAO,+BAA+B,iBAAiB;GACzD,KAAK,oBACH,QAAO,uCAAuC,iBAAiB;GACjE;AACE,YAAQ,MAAM,yBAAyB,QAAQ,iBAAiB;AAChE;;;CAIN,SAAS,iBACP,kBACkB;EAClB,MAAM,iBAA0C,EAAE;EAClD,MAAM,YAAwB,EAAE;AAChC,mBAAiB,SAAS,OAAO;GAC/B,MAAM,gBAAgB,gCAAgC,GAAG;AACzD,OAAI,eAAe,QACjB,gBAAe,KACb,GAAI,cAAc,QACnB;AAEH,OAAI,eAAe,WACjB,WAAU,KAAK,GAAG,cAAc,WAAW;IAE7C;AAMF,SAAO,kBAJsB;GAC3B,SAAS;GACT,YAAY;GACb,CAC4B;;CAG/B,SAAS,uBACP,SACe;EACf,MAAM,QAAQ,SAAS;EACvB,MAAM,cAAc,OAAO,gBAAgB;EAC3C,MAAM,eAAe,OAAO,iBAAiB;AAU7C,SATqC;GACnC,cAAc;GACd,eAAe;GACf,cAAc,cAAc;GAC5B,qBAAqB;IACnB,YAAY,OAAO,2BAA2B;IAC9C,gBAAgB,OAAO,+BAA+B;IACvD;GACF;;CAIH,SAAS,wBAAwB,SAAmC;AAGlE,SAAO;GACL,gBAHoB,uBAAuB,QAAQ;GAInD,eAAe,QAAQ;GACxB;;CAGH,SAAS,wBACP,iBACqB;EACrB,MAAM,UAA8B,iBAAiB,WAAW,EAAE;AAIlE,SAAO,IAAIC,wBAAAA,oBAAoB;GAC7B,MAJW,gBAAgB,gBAAgB;GAK3C,SAJc,iBAAiB,QAAQ;GAKvC,gBAJqB,wBAAwB,gBAAgB;GAK9D,CAAC;;CAGJ,SAAS,6BACP,OACqB;EACrB,MAAM,kBAAkB,MAAM;AAC9B,SAAO,wBAAwB,gBAAgB;;CAGjD,SAAS,6BACP,OACqB;EACrB,MAAM,kBAAkB,MAAM;AAC9B,SAAO,wBAAwB,gBAA4C;;CAG7E,SAAS,sCACP,OAC4B;EAC5B,MAAM,UAAU,MAAM;EACtB,MAAM,OAAO,UAAU,UAAU,QAAQ,OAAO;AAIhD,SAAO,IAAIA,wBAAAA,oBAAoB;GAC7B,SAJc,IAAID,yBAAAA,eAAe,EACjC,SAAS,CAAC;IAAE,OAAO,MAAM;IAAO,GAAG;IAAS,CAAC,EAC9C,CAAC;GAGA;GACD,CAAC;;CAGJ,SAAS,yCACP,OAC4B;EAC5B,MAAM,eAAe,MAAM;EAC3B,MAAM,OAAe;EACrB,MAAM,YAA2B;GAC/B,MAAM;GACN,OAAO,MAAM;GACb,MAAM,aAAa;GACnB,IAAI,aAAa;GAClB;AACD,MACE,OAAO,aAAa,UAAU,YAC9B,OAAO,KAAK,aAAa,MAAM,CAAC,SAAS,EAEzC,WAAU,OAAO,KAAK,UAAU,aAAa,MAAM;EAErD,MAAM,aAA8B,CAAC,UAAU;AAa/C,SAAO,IAAIC,wBAAAA,oBAAoB;GAC7B,SAFc,kBAJ4B;IAC1C,SAPuC,CACvC;KACE,OAAO,MAAM;KACb,GAAG;KACJ,CACF;IAGC,kBAAkB;IACnB,CAC+C;GAG9C;GACD,CAAC;;CAGJ,SAAS,kCACP,OAC4B;AAC5B,UAAQ,MAAM,cAAc,MAA5B;GACE,KAAK,OACH,QAAO,sCAAsC,MAAM;GACrD,KAAK,WACH,QAAO,yCAAyC,MAAM;GACxD;AACE,YAAQ,KACN,wCAAwC,KAAK,UAAU,MAAM,GAC9D;AACD,WAAO;;;CAIb,SAAS,sCACP,OACqB;EAErB,MAAM,OADQ,MAAM,OACA;AAIpB,SAAO,IAAIA,wBAAAA,oBAAoB;GAC7B,SAJc,IAAID,yBAAAA,eAAe,EACjC,SAAS,CAAC;IAAE,OAAO,MAAM;IAAO,MAAM;IAAQ;IAAM,CAAC,EACtD,CAAC;GAGA;GACD,CAAC;;CAGJ,SAAS,gDACP,OACqB;EACrB,MAAM,QAAQ,MAAM;EACpB,MAAM,OAAe;EACrB,MAAM,aAA8B,CAClC;GACE,OAAO,MAAM;GACb,MAAM,MAAM;GACb,CACF;AAYD,SAAO,IAAIC,wBAAAA,oBAAoB;GAC7B,SAFc,kBAJ4B;IAC1C,SAPuC,CACvC;KACE,OAAO,MAAM;KACb,GAAG;KACJ,CACF;IAGC,kBAAkB;IACnB,CAC+C;GAG9C;GACD,CAAC;;CAGJ,SAAS,kCACP,OAC4B;AAC5B,UAAQ,MAAM,MAAM,MAApB;GACE,KAAK,aACH,QAAO,sCAAsC,MAAM;GACrD,KAAK,mBACH,QAAO,gDAAgD,MAAM;GAC/D;AACE,YAAQ,KACN,wCAAwC,KAAK,UAAU,MAAM,GAC9D;AACD,WAAO;;;CAIb,SAAS,yBACP,UAC4B;EAC5B,MAAM,OAAO,SAAS;AACtB,UAAQ,KAAK,MAAb;GACE,KAAK,UACH,QAAO,wBAAwB,KAAiC;GAClE,KAAK,gBACH,QAAO,6BACL,KACD;GACH,KAAK,gBACH,QAAO,6BACL,KACD;GACH,KAAK,sBACH,QAAO,kCACL,KACD;GACH,KAAK,sBACH,QAAO,kCACL,KACD;GAEH,KAAK;GACL,KAAK;GACL,KAAK,qBAEH,QAAO;GAET,KAAK,QACH,OAAM,IAAI,MACR,kCAAkC,KAAK,UAAU,KAAK,GACvD;GAEH;AAGE,YAAQ,KAAK,6CAA6C,KAAK;AAE/D,WAAO;;;CAIb,SAAS,cAAc,OAAiC;AACtD,MAAI,UAAU,KACZ,QAAO;WACE,OAAO,MAAM,YAAY,SAClC,QAAO,MAAM;WACJ,MAAM,QAAQ,WAAW,EAClC,QAAO;WACE,MAAM,QAAQ,GAAG,SAAS,OACnC,QAAO,MAAM,QAAQ,GAAG;MAExB,OAAM,IAAI,MAAM,qBAAqB,QAAQ;;CAIjD,SAAS,sBAAsB,UAA0C;AAGvE,SAAO,iBAFM,SAAS,MACoB,WAAW,EAAE,CACvB;;CAGlC,SAAS,qBAAqB,UAAyC;EACrE,MAAM,UAAU,SAAS;EACzB,MAAM,cAAgC,EAAE;EACxC,MAAM,MAAM,yBAAyB,SAAS;AAC9C,MAAI,IACF,aAAY,KAAK,IAAI;AAGvB,SAAO;GACL;GACA,WAHgB,wBAAwB,QAAQ;GAIjD;;CAGH,SAAS,yBAAiC;AACxC,SAAO,QAAQ,WAAW;;CAG5B,SAAS,8BACP,SACyC;AACzC,MAAI,CAAC,QAAQ,KACX;AAEF,SAAO;GAAE,MAAM;GAAQ,MAAM,QAAQ;GAAM;;CAG7C,SAAS,gBACP,KAC6C;AAC7C,MAAI,IAAI,WAAW,QAAQ,CACzB,QAAO;GACL,YAAY,IAAI,MAAM,IAAI,CAAC,GAAG,MAAM,IAAI,CAAC;GACzC,MAAM,IAAI,MAAM,IAAI,CAAC;GACtB;AAEH,SAAO;;CAGT,SAAS,+BACP,SAC0C;EAC1C,MAAM,UAAU,QAAQ;EAExB,MAAM,UAAU,gBADJ,OAAO,YAAY,WAAW,UAAU,SAAS,IACzB;AAEpC,MAAI,CAAC,QACH;AAGF,SAAO;GACL,MAAM;GACN,QAAQ;IACN,MAAM;IACN,GAAG;IACJ;GACF;;CAGH,SAAS,iCACP,SACgC;AAChC,SAAO;GACL,MAAM;GACN,IAAI,QAAQ;GACZ,MAAM,QAAQ;GACd,OAAO,QAAQ;GAChB;;CAGH,SAAS,kCAEP,SAC6C;AAE7C,SAAO;GACL,MAAM;GACN,UAAU,QAAQ;GAClB,WAAW,QAAQ;GACpB;;CAGH,SAAS,0CAEP,SACqD;AAErD,SAAO;GACL,MAAM;GACN,MAAM,QAAQ;GACf;;CAGH,SAAS,iCACP,SACqC;EACrC,MAAM,OAAO,SAAS;AACtB,UAAQ,MAAR;GACE,KAAK,OACH,QAAO,8BAA8B,QAA8B;GACrE,KAAK,YACH,QAAO,+BACL,QACD;GACH,KAAK,WACH,QAAO,iCAAiC,QAAQ;GAClD,KAAK,WACH,QAAO,kCACL,QACD;GACH,KAAK,oBACH,QAAO,0CACL,QACD;GACH;AACE,QAAI,SAAS,YACX;AAEF,YAAQ,KAAK,4BAA4B,QAAQ,QAAQ;AACzD;;;CAIN,MAAM,4BAID;EACH,cAAc;EAEd,sBACE,OAC6B;AAC7B,UAAO;IACL,MAAM;IACN,MAAM,MAAM;IACZ,GAAI,oBAAoB,MAAM,YAAY,EAAE,IACxC,EACE,eAAe,MAAM,SAClB,eACJ,GACD,EAAE;IACP;;EAGH,uBACE,OAC8B;AAC9B,OAAI,MAAM,gBAAgB,OAAO;IAC/B,MAAM,QAAA,GAAA,yBAAA,oBAA0B;KAC9B,SAAS,MAAM;KACf,cAAc;KACf,CAAC;AACF,QAAI,KACF,QAAO;KACL,MAAM;KACN,QAAQ;MACN,MAAM;MACN,MAAM,KAAK;MACX,YAAY,KAAK;MAClB;KACD,GAAI,oBAAoB,MAAM,YAAY,EAAE,IACxC,EAAE,eAAe,MAAM,SAAU,eAAe,GAChD,EAAE;KACP;QAED,QAAO;KACL,MAAM;KACN,QAAQ;MACN,MAAM;MACN,KAAK,MAAM;MACX,YAAY,MAAM,aAAa;MAChC;KACD,GAAI,oBAAoB,MAAM,YAAY,EAAE,IACxC,EAAE,eAAe,MAAM,SAAU,eAAe,GAChD,EAAE;KACP;cAGC,MAAM,gBAAgB,SACxB,QAAO;IACL,MAAM;IACN,QAAQ;KACN,MAAM;KACN,MAAM,MAAM;KACZ,YAAY,MAAM,aAAa;KAChC;IACD,GAAI,oBAAoB,MAAM,YAAY,EAAE,IACxC,EAAE,eAAe,MAAM,SAAU,eAAe,GAChD,EAAE;IACP;OAED,OAAM,IAAI,MACR,kCAAkC,MAAM,cACzC;;EAKP,sBACE,OACiC;GACjC,MAAM,aAAa,MAAM,aAAa,IAAI,MAAM,IAAI,CAAC;AAErD,OAAI,MAAM,gBAAgB,OAAO;AAC/B,QAAI,cAAc,qBAAqB,cAAc,GACnD,QAAO;KACL,MAAM;KACN,QAAQ;MACN,MAAM;MACN,KAAK,MAAM;MACX,YAAY,MAAM,aAAa;MAChC;KACD,GAAI,oBAAoB,MAAM,YAAY,EAAE,IACxC,EACE,eAAe,MAAM,SAClB,eACJ,GACD,EAAE;KACN,GAAI,gBAAgB,MAAM,YAAY,EAAE,IACpC,EACE,WAAW,MAAM,SAAU,WAC5B,GACD,EAAE;KACN,GAAI,cAAc,MAAM,YAAY,EAAE,IAClC,EAAE,SAAS,MAAM,SAAU,SAAmB,GAC9C,EAAE;KACN,GAAI,MAAM,UAAU,SACpB,MAAM,UAAU,YAChB,MAAM,UAAU,OACZ,EACE,OAAQ,MAAM,UAAU,SACtB,MAAM,UAAU,YAChB,MAAM,UAAU,MACnB,GACD,EAAE;KACP;AAEH,UAAM,IAAI,MACR,mDAAmD,MAAM,YAC1D;cACQ,MAAM,gBAAgB,OAC/B,KAAI,cAAc,gBAAgB,cAAc,GAC9C,QAAO;IACL,MAAM;IACN,QAAQ;KACN,MAAM;KACN,MAAM,MAAM;KACZ,YAAY,MAAM,aAAa;KAChC;IACD,GAAI,oBAAoB,MAAM,YAAY,EAAE,IACxC,EACE,eAAe,MAAM,SAClB,eACJ,GACD,EAAE;IACN,GAAI,gBAAgB,MAAM,YAAY,EAAE,IACpC,EACE,WAAW,MAAM,SAAU,WAC5B,GACD,EAAE;IACN,GAAI,cAAc,MAAM,YAAY,EAAE,IAClC,EAAE,SAAS,MAAM,SAAU,SAAmB,GAC9C,EAAE;IACN,GAAI,YAAY,MAAM,YAAY,EAAE,IAChC,EAAE,OAAO,MAAM,SAAU,OAAiB,GAC1C,EAAE;IACP;OAED,OAAM,IAAI,MACR,oDAAoD,MAAM,YAC3D;YAEM,MAAM,gBAAgB,SAC/B,KAAI,cAAc,qBAAqB,cAAc,GACnD,QAAO;IACL,MAAM;IACN,QAAQ;KACN,MAAM;KACN,MAAM,MAAM;KACZ,YAAY;KACb;IACD,GAAI,oBAAoB,MAAM,YAAY,EAAE,IACxC,EACE,eAAe,MAAM,SAClB,eACJ,GACD,EAAE;IACN,GAAI,gBAAgB,MAAM,YAAY,EAAE,IACpC,EACE,WAAW,MAAM,SAAU,WAC5B,GACD,EAAE;IACN,GAAI,cAAc,MAAM,YAAY,EAAE,IAClC,EAAE,SAAS,MAAM,SAAU,SAAmB,GAC9C,EAAE;IACN,GAAI,YAAY,MAAM,YAAY,EAAE,IAChC,EAAE,OAAO,MAAM,SAAU,OAAiB,GAC1C,EAAE;IACP;YAED;IAAC;IAAc;IAAa;IAAa;IAAa,CAAC,SACrD,UACD,CAED,QAAO;IACL,MAAM;IACN,QAAQ;KACN,MAAM;KACN,SAAS,CACP;MACE,MAAM;MACN,QAAQ;OACN,MAAM;OACN,MAAM,MAAM;OACZ,YAAY;OAKb;MACF,CACF;KACF;IACD,GAAI,oBAAoB,MAAM,YAAY,EAAE,IACxC,EACE,eAAe,MAAM,SAClB,eACJ,GACD,EAAE;IACN,GAAI,gBAAgB,MAAM,YAAY,EAAE,IACpC,EACE,WAAW,MAAM,SAAU,WAC5B,GACD,EAAE;IACN,GAAI,cAAc,MAAM,YAAY,EAAE,IAClC,EAAE,SAAS,MAAM,SAAU,SAAmB,GAC9C,EAAE;IACN,GAAI,YAAY,MAAM,YAAY,EAAE,IAChC,EAAE,OAAO,MAAM,SAAU,OAAiB,GAC1C,EAAE;IACP;OAED,OAAM,IAAI,MACR,sDAAsD,MAAM,YAC7D;OAGH,OAAM,IAAI,MAAM,iCAAiC,MAAM,cAAc;;EAG1E;CAED,SAAS,0BACP,SAC2B;AAG3B,UADE,OAAO,YAAY,WAAW,CAAC;GAAE,MAAM;GAAQ,MAAM;GAAS,CAAC,GAAG,SAEjE,KAAK,aAAA,GAAA,yBAAA,oBACe,QAAQ,IAAA,GAAA,yBAAA,+BACO,SAAS,0BAA0B,GACjE,iCAAiC,QAAQ,CAC9C,CACA,OAAO,QAAQ;;CAGpB,SAAS,2BACP,UACgC;AAChC,SAAO;GACL,MAAM;GACN,IAAI,SAAS;GACb,MAAM,SAAS;GACf,OAAO,SAAS;GACjB;;CAGH,SAAS,4BACP,WACkC;AAClC,MAAI,cAAc,KAAA,EAChB,QAAO,EAAE;AAEX,SAAO,UAAU,IAAI,2BAA2B;;CAGlD,SAAS,2BACP,MACA,MACkB;AAElB,SAAO;GACL;GACA,SAHc,0BAA0B,KAAK,QAAQ;GAItD;;CAGH,SAAS,4BAA4B,MAAmC;EACtE,MAAM,MAAM,2BAA2B,MAAM,YAAY;EAEzD,MAAM,UAAU,IAAI;EACpB,MAAM,qBAAqB,IAAI,IAC7B,QACG,QACE,UACC,MAAM,SAAS,WAClB,CACA,KAAK,UAAU,MAAM,GAAG,CAC5B;EAED,MAAM,cAAc,4BAA4B,KAAK,WAAW,CAAC,QAC9D,UAAU,CAAC,mBAAmB,IAAI,MAAM,GAAG,CAC7C;AACD,MAAI,YAAY,SAAS,EACvB,KAAI,UAAU,CAAC,GAAG,SAAS,GAAG,YAAY;AAG5C,SAAO;;CAGT,SAAS,8BAA8B,MAAqC;AAa1E,SAAO;GACL,MAbW;GAcX,SATmD,CACnD;IACE,MAAM;IACN,aAPc,KAAK;IAQnB,SAPgB,0BAClB,KAAK,QACN;IAME,CACF;GAIA;;CAGH,SAAS,uBACP,MAC8B;EAC9B,MAAM,OAAO,KAAK,UAAU;AAC5B,UAAQ,MAAR;GACE,KAAK,QACH,QAAO,2BAA2B,MAAM,OAAO;GACjD,KAAK,KACH,QAAO,4BAA4B,KAAkB;GACvD,KAAK,OACH,QAAO,8BAA8B,KAAoB;GAC3D,KAAK,SAEH;GACF;AACE,YAAQ,KAAK,6BAA6B,QAAQ,KAAK;AACvD;;;CAIN,SAAS,eAAe,OAA0C;EAChE,MAAM,MAA0B,EAAE;AAElC,QAAM,SAAS,gBAAgB;GAC7B,MAAM,mBAAmB,uBAAuB,YAAY;AAC5D,OAAI,iBACF,KAAI,KAAK,iBAAiB;IAE5B;AAEF,SAAO;;CAGT,SAAS,eACP,YAC0B;EAC1B,MAAM,MAAgC;GACpC,QAAQ,YAAY,aAAa;GACjC,YAAY,YAAY,mBAAmB;GAC5C;AAED,MAAI,WAAW,KACb,KAAI,QAAQ,WAAW;AAEzB,MAAI,WAAW,KACb,KAAI,QAAQ,WAAW;AAEzB,MAAI,WAAW,YACb,KAAI,cAAc,WAAW;AAE/B,MAAI,WAAW,cACb,KAAI,iBAAiB,WAAW;AAGlC,SAAO;;CAGT,SAAS,0BACP,cACQ;EACR,IAAI,MAAM;AAEV,eAAa,SAAS,YAAY;AAEhC,OADoB,SAAS,SACT,OAElB,OAAM,GAAG,IAAI,IADO,QACS;IAE/B;AAEF,SAAO;;CAGT,SAAS,aAAa,OAA8B;EAClD,IAAI,MAAM;AAEV,QAAM,SAAS,YAAY;AACzB,OAAI,QAAQ,UAAU,KAAK,UAAU;IACnC,MAAM,UAAU,SAAS;IACzB,MAAM,gBACJ,OAAO,YAAY,WACd,UACD,0BAA0B,QAAmC;AACnE,UAAM,GAAG,IAAI,IAAI;;IAEnB;AAEF,SAAO;;CAGT,SAAS,iBAAiB,MAAmC;AAC3D,MAAI,OAAO,OAAO,MAAM,uBAAuB,CAE7C,SADc,MAAM,wBAAwB,EAAE,EACjC,KAAK,SAAS;GACzB,MAAM,cAAc,KAAK;AACzB,UAAO;IAEL,MAAM,KAAK;IACX,aAAa,KAAK;IAClB,cAAc;IACf;IACD;OACG;AACL,WAAQ,KACN,gCAAgC,KAAK,UAAU,MAAM,MAAM,EAAE,GAC9D;AACD,UAAO,EAAE;;;CAIb,SAAS,WAAW,MAAyC;AAC3D,MAAI,OAAO,OAAO,MAAM,OAAO,CAC7B,QAAO,CAAC,KAAsB;MAE9B,QAAO,iBAAiB,KAAmB;;CAI/C,SAAS,YACP,YACiB;EACjB,MAAM,QAA4B,YAAY,SAAS,EAAE;EACzD,MAAM,MAAuB,EAAE;AAC/B,QAAM,SAAS,SAAS;AACC,cAAW,KAAK,CACxB,SAAS,kBAAkB;AACxC,QAAI,cACF,KAAI,KAAK,cAAc;KAEzB;IACF;AACF,SAAO;;CAGT,SAAS,iBACP,YACiC;EACjC,MAAM,SAAS,YAAY;AAC3B,MAAI,CAAC,OACH;WACS,OAAO,WAAW,SAC3B,QAAO;MAEP,SAAQ,QAAR;GACE,KAAK;GACL,KAAK,OACH,QAAO,EACL,MAAM,QACP;GACH,KAAK,OACH;GACF,QACE,QAAO;IACL,MAAM;IACN,MAAM;IACP;;;CAKT,eAAe,WACb,OACA,YAC2B;EAC3B,MAAM,aAAa;EACnB,MAAM,mBAAmB,wBAAwB;EACjD,MAAM,WAAW,eAAe,WAAW;EAC3C,MAAM,WAAW,eAAe,WAAW;EAC3C,MAAM,SAAS,aAAa,WAAW;EACvC,MAAM,QAAQ,YAAY,WAAW;EACrC,MAAM,aAAa,iBAAiB,WAAW;EAC/C,MAAM,MAAwB;GAC5B,mBAAmB;GACnB;GACA,GAAG;GACJ;AACD,MAAI,SAAS,MAAM,UAAU,YAAY,gBAAgB,OACvD,KAAI,QAAQ;AAEd,MAAI,WACF,KAAI,cAAc;AAEpB,MAAI,QAAQ,OACV,KAAI,SAAS;AAEf,MAAI,QAAQ,SACV,KAAI,WAAW,QAAQ;AAGzB,SAAO;;AAGT,QAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACD;;AAGH,SAAgB,qBAAqB,SAAoC;AAIzE,SAAgB,cAAc,WAA4B;AACxD,QAAO,UAAU,aAAa,CAAC,WAAW,SAAS"}
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 text = \"text\" in content ? content.text : \"\";\n const message = new AIMessageChunk({\n content: [{ index: event.index, ...content }],\n });\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 = new AIMessageChunk({\n content: [{ index: event.index, type: \"text\", text }],\n });\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 | undefined {\n if (!content.text) {\n return undefined;\n }\n return { type: \"text\", text: content.text };\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 toolUseContentToAnthropicContent(\n content: Record<string, unknown>\n ): AnthropicMessageContentToolUse {\n return {\n type: \"tool_use\",\n id: content.id as string,\n name: content.name as string,\n input: content.input as Record<string, unknown>,\n };\n }\n\n function thinkingContentToAnthropicContent(\n // oxlint-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 // oxlint-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 \"tool_use\":\n return toolUseContentToAnthropicContent(content);\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 if (type === \"tool_call\") {\n return undefined;\n }\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 content = ret.content as AnthropicMessageContent[];\n const existingToolUseIds = new Set(\n content\n .filter(\n (block): block is AnthropicMessageContentToolUse =>\n block.type === \"tool_use\"\n )\n .map((block) => block.id)\n );\n\n const toolContent = toolCallsToAnthropicContent(base.tool_calls).filter(\n (block) => !existingToolUseIds.has(block.id)\n );\n if (toolContent.length > 0) {\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":";;;AAqEA,SAAgB,gBAAgB,QAA0C;CACxE,SAAS,aAAa,MAAgC;AACpD,SAAO,UAAU,OAAO,KAAK,OAAO;;CAGtC,SAAS,gBAAgB,SAA2C;AAMlE,UALoC,SAAS,WAAW,EAAE,EACtC,QAAQ,KAAK,SAAS;AAExC,UAAO,MADK,aAAa,KAAK;KAE7B,GAAG;;CAIR,SAAS,iBAAiB,UAAqC;EAC7D,MAAM,OAAO,SAAS;AACtB,UAAQ,MAAM,MAAd;GACE,KAAK,UACH,QAAO,gBAAgB,KAAiC;GAC1D,QACE,OAAM,MAAM,iBAAiB,MAAM,OAAO;;;;;;;;;CAUhD,SAAS,kBAAkB,QAAkD;AAC3E,MAAI,OAAO,WAAW,SACpB,QAAO,IAAIA,yBAAAA,eAAe,OAAO;EAEnC,MAAM,MAAuB,EAC3B,GAAG,QACJ;AAED,MAAI,MAAM,QAAQ,QAAQ,QAAQ,EAAE;GAClC,IAAI,MAA0B;AAC9B,UAAO,QAAQ,SAAS,QAAQ;AAC9B,QAAI,QAAQ,KAAA,KAAa,IAAI,SAAS,OACpC,OAAM,GAAG,MAAM,IAAI;QAEnB,OAAM,KAAA;KAER;AACF,OAAI,IACF,KAAI,UAAU;;AAIlB,SAAO,IAAIA,yBAAAA,eAAe,IAAI;;CAGhC,SAAS,2BACP,aACiB;AACjB,SAAO,EACL,SAAS,CAAC,YAAY,EACvB;;CAGH,SAAS,8BACP,gBACiB;AAOjB,SAAO;GACL,SAAS,EAAE;GACX,YAAY,CARS;IACrB,IAAI,eAAe;IACnB,MAAM,eAAe;IACrB,MAAM;IACN,MAAM,eAAe;IACtB,CAGmB;GACnB;;CAGH,SAAS,+BACP,iBACiB;AAEjB,SAAO,EACL,SAAS,CAAC,gBAAgB,EAC3B;;CAGH,SAAS,uCACP,iBACiB;AAEjB,SAAO,EACL,SAAS,CAAC,gBAAgB,EAC3B;;CAGH,SAAS,gCACP,kBAC6B;EAC7B,MAAM,OAAO,kBAAkB;AAC/B,UAAQ,MAAR;GACE,KAAK,OACH,QAAO,2BAA2B,iBAAiB;GACrD,KAAK,WACH,QAAO,8BAA8B,iBAAiB;GACxD,KAAK,WACH,QAAO,+BAA+B,iBAAiB;GACzD,KAAK,oBACH,QAAO,uCAAuC,iBAAiB;GACjE;AACE,YAAQ,MAAM,yBAAyB,QAAQ,iBAAiB;AAChE;;;CAIN,SAAS,iBACP,kBACkB;EAClB,MAAM,iBAA0C,EAAE;EAClD,MAAM,YAAwB,EAAE;AAChC,mBAAiB,SAAS,OAAO;GAC/B,MAAM,gBAAgB,gCAAgC,GAAG;AACzD,OAAI,eAAe,QACjB,gBAAe,KACb,GAAI,cAAc,QACnB;AAEH,OAAI,eAAe,WACjB,WAAU,KAAK,GAAG,cAAc,WAAW;IAE7C;AAMF,SAAO,kBAJsB;GAC3B,SAAS;GACT,YAAY;GACb,CAC4B;;CAG/B,SAAS,uBACP,SACe;EACf,MAAM,QAAQ,SAAS;EACvB,MAAM,cAAc,OAAO,gBAAgB;EAC3C,MAAM,eAAe,OAAO,iBAAiB;AAU7C,SATqC;GACnC,cAAc;GACd,eAAe;GACf,cAAc,cAAc;GAC5B,qBAAqB;IACnB,YAAY,OAAO,2BAA2B;IAC9C,gBAAgB,OAAO,+BAA+B;IACvD;GACF;;CAIH,SAAS,wBAAwB,SAAmC;AAGlE,SAAO;GACL,gBAHoB,uBAAuB,QAAQ;GAInD,eAAe,QAAQ;GACxB;;CAGH,SAAS,wBACP,iBACqB;EACrB,MAAM,UAA8B,iBAAiB,WAAW,EAAE;AAIlE,SAAO,IAAIC,wBAAAA,oBAAoB;GAC7B,MAJW,gBAAgB,gBAAgB;GAK3C,SAJc,iBAAiB,QAAQ;GAKvC,gBAJqB,wBAAwB,gBAAgB;GAK9D,CAAC;;CAGJ,SAAS,6BACP,OACqB;EACrB,MAAM,kBAAkB,MAAM;AAC9B,SAAO,wBAAwB,gBAAgB;;CAGjD,SAAS,6BACP,OACqB;EACrB,MAAM,kBAAkB,MAAM;AAC9B,SAAO,wBAAwB,gBAA4C;;CAG7E,SAAS,sCACP,OAC4B;EAC5B,MAAM,UAAU,MAAM;EACtB,MAAM,OAAO,UAAU,UAAU,QAAQ,OAAO;AAIhD,SAAO,IAAIA,wBAAAA,oBAAoB;GAC7B,SAJc,IAAID,yBAAAA,eAAe,EACjC,SAAS,CAAC;IAAE,OAAO,MAAM;IAAO,GAAG;IAAS,CAAC,EAC9C,CAAC;GAGA;GACD,CAAC;;CAGJ,SAAS,yCACP,OAC4B;EAC5B,MAAM,eAAe,MAAM;EAC3B,MAAM,OAAe;EACrB,MAAM,YAA2B;GAC/B,MAAM;GACN,OAAO,MAAM;GACb,MAAM,aAAa;GACnB,IAAI,aAAa;GAClB;AACD,MACE,OAAO,aAAa,UAAU,YAC9B,OAAO,KAAK,aAAa,MAAM,CAAC,SAAS,EAEzC,WAAU,OAAO,KAAK,UAAU,aAAa,MAAM;EAErD,MAAM,aAA8B,CAAC,UAAU;AAa/C,SAAO,IAAIC,wBAAAA,oBAAoB;GAC7B,SAFc,kBAJ4B;IAC1C,SAPuC,CACvC;KACE,OAAO,MAAM;KACb,GAAG;KACJ,CACF;IAGC,kBAAkB;IACnB,CAC+C;GAG9C;GACD,CAAC;;CAGJ,SAAS,kCACP,OAC4B;AAC5B,UAAQ,MAAM,cAAc,MAA5B;GACE,KAAK,OACH,QAAO,sCAAsC,MAAM;GACrD,KAAK,WACH,QAAO,yCAAyC,MAAM;GACxD;AACE,YAAQ,KACN,wCAAwC,KAAK,UAAU,MAAM,GAC9D;AACD,WAAO;;;CAIb,SAAS,sCACP,OACqB;EAErB,MAAM,OADQ,MAAM,OACA;AAIpB,SAAO,IAAIA,wBAAAA,oBAAoB;GAC7B,SAJc,IAAID,yBAAAA,eAAe,EACjC,SAAS,CAAC;IAAE,OAAO,MAAM;IAAO,MAAM;IAAQ;IAAM,CAAC,EACtD,CAAC;GAGA;GACD,CAAC;;CAGJ,SAAS,gDACP,OACqB;EACrB,MAAM,QAAQ,MAAM;EACpB,MAAM,OAAe;EACrB,MAAM,aAA8B,CAClC;GACE,OAAO,MAAM;GACb,MAAM,MAAM;GACb,CACF;AAYD,SAAO,IAAIC,wBAAAA,oBAAoB;GAC7B,SAFc,kBAJ4B;IAC1C,SAPuC,CACvC;KACE,OAAO,MAAM;KACb,GAAG;KACJ,CACF;IAGC,kBAAkB;IACnB,CAC+C;GAG9C;GACD,CAAC;;CAGJ,SAAS,kCACP,OAC4B;AAC5B,UAAQ,MAAM,MAAM,MAApB;GACE,KAAK,aACH,QAAO,sCAAsC,MAAM;GACrD,KAAK,mBACH,QAAO,gDAAgD,MAAM;GAC/D;AACE,YAAQ,KACN,wCAAwC,KAAK,UAAU,MAAM,GAC9D;AACD,WAAO;;;CAIb,SAAS,yBACP,UAC4B;EAC5B,MAAM,OAAO,SAAS;AACtB,UAAQ,KAAK,MAAb;GACE,KAAK,UACH,QAAO,wBAAwB,KAAiC;GAClE,KAAK,gBACH,QAAO,6BACL,KACD;GACH,KAAK,gBACH,QAAO,6BACL,KACD;GACH,KAAK,sBACH,QAAO,kCACL,KACD;GACH,KAAK,sBACH,QAAO,kCACL,KACD;GAEH,KAAK;GACL,KAAK;GACL,KAAK,qBAEH,QAAO;GAET,KAAK,QACH,OAAM,IAAI,MACR,kCAAkC,KAAK,UAAU,KAAK,GACvD;GAEH;AAGE,YAAQ,KAAK,6CAA6C,KAAK;AAE/D,WAAO;;;CAIb,SAAS,cAAc,OAAiC;AACtD,MAAI,UAAU,KACZ,QAAO;WACE,OAAO,MAAM,YAAY,SAClC,QAAO,MAAM;WACJ,MAAM,QAAQ,WAAW,EAClC,QAAO;WACE,MAAM,QAAQ,GAAG,SAAS,OACnC,QAAO,MAAM,QAAQ,GAAG;MAExB,OAAM,IAAI,MAAM,qBAAqB,QAAQ;;CAIjD,SAAS,sBAAsB,UAA0C;AAGvE,SAAO,iBAFM,SAAS,MACoB,WAAW,EAAE,CACvB;;CAGlC,SAAS,qBAAqB,UAAyC;EACrE,MAAM,UAAU,SAAS;EACzB,MAAM,cAAgC,EAAE;EACxC,MAAM,MAAM,yBAAyB,SAAS;AAC9C,MAAI,IACF,aAAY,KAAK,IAAI;AAGvB,SAAO;GACL;GACA,WAHgB,wBAAwB,QAAQ;GAIjD;;CAGH,SAAS,yBAAiC;AACxC,SAAO,QAAQ,WAAW;;CAG5B,SAAS,8BACP,SACyC;AACzC,MAAI,CAAC,QAAQ,KACX;AAEF,SAAO;GAAE,MAAM;GAAQ,MAAM,QAAQ;GAAM;;CAG7C,SAAS,gBACP,KAC6C;AAC7C,MAAI,IAAI,WAAW,QAAQ,CACzB,QAAO;GACL,YAAY,IAAI,MAAM,IAAI,CAAC,GAAG,MAAM,IAAI,CAAC;GACzC,MAAM,IAAI,MAAM,IAAI,CAAC;GACtB;AAEH,SAAO;;CAGT,SAAS,+BACP,SAC0C;EAC1C,MAAM,UAAU,QAAQ;EAExB,MAAM,UAAU,gBADJ,OAAO,YAAY,WAAW,UAAU,SAAS,IACzB;AAEpC,MAAI,CAAC,QACH;AAGF,SAAO;GACL,MAAM;GACN,QAAQ;IACN,MAAM;IACN,GAAG;IACJ;GACF;;CAGH,SAAS,iCACP,SACgC;AAChC,SAAO;GACL,MAAM;GACN,IAAI,QAAQ;GACZ,MAAM,QAAQ;GACd,OAAO,QAAQ;GAChB;;CAGH,SAAS,kCAEP,SAC6C;AAE7C,SAAO;GACL,MAAM;GACN,UAAU,QAAQ;GAClB,WAAW,QAAQ;GACpB;;CAGH,SAAS,0CAEP,SACqD;AAErD,SAAO;GACL,MAAM;GACN,MAAM,QAAQ;GACf;;CAGH,SAAS,iCACP,SACqC;EACrC,MAAM,OAAO,SAAS;AACtB,UAAQ,MAAR;GACE,KAAK,OACH,QAAO,8BAA8B,QAA8B;GACrE,KAAK,YACH,QAAO,+BACL,QACD;GACH,KAAK,WACH,QAAO,iCAAiC,QAAQ;GAClD,KAAK,WACH,QAAO,kCACL,QACD;GACH,KAAK,oBACH,QAAO,0CACL,QACD;GACH;AACE,QAAI,SAAS,YACX;AAEF,YAAQ,KAAK,4BAA4B,QAAQ,QAAQ;AACzD;;;CAIN,MAAM,4BAID;EACH,cAAc;EAEd,sBACE,OAC6B;AAC7B,UAAO;IACL,MAAM;IACN,MAAM,MAAM;IACZ,GAAI,oBAAoB,MAAM,YAAY,EAAE,IACxC,EACE,eAAe,MAAM,SAClB,eACJ,GACD,EAAE;IACP;;EAGH,uBACE,OAC8B;AAC9B,OAAI,MAAM,gBAAgB,OAAO;IAC/B,MAAM,QAAA,GAAA,yBAAA,oBAA0B;KAC9B,SAAS,MAAM;KACf,cAAc;KACf,CAAC;AACF,QAAI,KACF,QAAO;KACL,MAAM;KACN,QAAQ;MACN,MAAM;MACN,MAAM,KAAK;MACX,YAAY,KAAK;MAClB;KACD,GAAI,oBAAoB,MAAM,YAAY,EAAE,IACxC,EAAE,eAAe,MAAM,SAAU,eAAe,GAChD,EAAE;KACP;QAED,QAAO;KACL,MAAM;KACN,QAAQ;MACN,MAAM;MACN,KAAK,MAAM;MACX,YAAY,MAAM,aAAa;MAChC;KACD,GAAI,oBAAoB,MAAM,YAAY,EAAE,IACxC,EAAE,eAAe,MAAM,SAAU,eAAe,GAChD,EAAE;KACP;cAGC,MAAM,gBAAgB,SACxB,QAAO;IACL,MAAM;IACN,QAAQ;KACN,MAAM;KACN,MAAM,MAAM;KACZ,YAAY,MAAM,aAAa;KAChC;IACD,GAAI,oBAAoB,MAAM,YAAY,EAAE,IACxC,EAAE,eAAe,MAAM,SAAU,eAAe,GAChD,EAAE;IACP;OAED,OAAM,IAAI,MACR,kCAAkC,MAAM,cACzC;;EAKP,sBACE,OACiC;GACjC,MAAM,aAAa,MAAM,aAAa,IAAI,MAAM,IAAI,CAAC;AAErD,OAAI,MAAM,gBAAgB,OAAO;AAC/B,QAAI,cAAc,qBAAqB,cAAc,GACnD,QAAO;KACL,MAAM;KACN,QAAQ;MACN,MAAM;MACN,KAAK,MAAM;MACX,YAAY,MAAM,aAAa;MAChC;KACD,GAAI,oBAAoB,MAAM,YAAY,EAAE,IACxC,EACE,eAAe,MAAM,SAClB,eACJ,GACD,EAAE;KACN,GAAI,gBAAgB,MAAM,YAAY,EAAE,IACpC,EACE,WAAW,MAAM,SAAU,WAC5B,GACD,EAAE;KACN,GAAI,cAAc,MAAM,YAAY,EAAE,IAClC,EAAE,SAAS,MAAM,SAAU,SAAmB,GAC9C,EAAE;KACN,GAAI,MAAM,UAAU,SACpB,MAAM,UAAU,YAChB,MAAM,UAAU,OACZ,EACE,OAAQ,MAAM,UAAU,SACtB,MAAM,UAAU,YAChB,MAAM,UAAU,MACnB,GACD,EAAE;KACP;AAEH,UAAM,IAAI,MACR,mDAAmD,MAAM,YAC1D;cACQ,MAAM,gBAAgB,OAC/B,KAAI,cAAc,gBAAgB,cAAc,GAC9C,QAAO;IACL,MAAM;IACN,QAAQ;KACN,MAAM;KACN,MAAM,MAAM;KACZ,YAAY,MAAM,aAAa;KAChC;IACD,GAAI,oBAAoB,MAAM,YAAY,EAAE,IACxC,EACE,eAAe,MAAM,SAClB,eACJ,GACD,EAAE;IACN,GAAI,gBAAgB,MAAM,YAAY,EAAE,IACpC,EACE,WAAW,MAAM,SAAU,WAC5B,GACD,EAAE;IACN,GAAI,cAAc,MAAM,YAAY,EAAE,IAClC,EAAE,SAAS,MAAM,SAAU,SAAmB,GAC9C,EAAE;IACN,GAAI,YAAY,MAAM,YAAY,EAAE,IAChC,EAAE,OAAO,MAAM,SAAU,OAAiB,GAC1C,EAAE;IACP;OAED,OAAM,IAAI,MACR,oDAAoD,MAAM,YAC3D;YAEM,MAAM,gBAAgB,SAC/B,KAAI,cAAc,qBAAqB,cAAc,GACnD,QAAO;IACL,MAAM;IACN,QAAQ;KACN,MAAM;KACN,MAAM,MAAM;KACZ,YAAY;KACb;IACD,GAAI,oBAAoB,MAAM,YAAY,EAAE,IACxC,EACE,eAAe,MAAM,SAClB,eACJ,GACD,EAAE;IACN,GAAI,gBAAgB,MAAM,YAAY,EAAE,IACpC,EACE,WAAW,MAAM,SAAU,WAC5B,GACD,EAAE;IACN,GAAI,cAAc,MAAM,YAAY,EAAE,IAClC,EAAE,SAAS,MAAM,SAAU,SAAmB,GAC9C,EAAE;IACN,GAAI,YAAY,MAAM,YAAY,EAAE,IAChC,EAAE,OAAO,MAAM,SAAU,OAAiB,GAC1C,EAAE;IACP;YAED;IAAC;IAAc;IAAa;IAAa;IAAa,CAAC,SACrD,UACD,CAED,QAAO;IACL,MAAM;IACN,QAAQ;KACN,MAAM;KACN,SAAS,CACP;MACE,MAAM;MACN,QAAQ;OACN,MAAM;OACN,MAAM,MAAM;OACZ,YAAY;OAKb;MACF,CACF;KACF;IACD,GAAI,oBAAoB,MAAM,YAAY,EAAE,IACxC,EACE,eAAe,MAAM,SAClB,eACJ,GACD,EAAE;IACN,GAAI,gBAAgB,MAAM,YAAY,EAAE,IACpC,EACE,WAAW,MAAM,SAAU,WAC5B,GACD,EAAE;IACN,GAAI,cAAc,MAAM,YAAY,EAAE,IAClC,EAAE,SAAS,MAAM,SAAU,SAAmB,GAC9C,EAAE;IACN,GAAI,YAAY,MAAM,YAAY,EAAE,IAChC,EAAE,OAAO,MAAM,SAAU,OAAiB,GAC1C,EAAE;IACP;OAED,OAAM,IAAI,MACR,sDAAsD,MAAM,YAC7D;OAGH,OAAM,IAAI,MAAM,iCAAiC,MAAM,cAAc;;EAG1E;CAED,SAAS,0BACP,SAC2B;AAG3B,UADE,OAAO,YAAY,WAAW,CAAC;GAAE,MAAM;GAAQ,MAAM;GAAS,CAAC,GAAG,SAEjE,KAAK,aAAA,GAAA,yBAAA,oBACe,QAAQ,IAAA,GAAA,yBAAA,+BACO,SAAS,0BAA0B,GACjE,iCAAiC,QAAQ,CAC9C,CACA,OAAO,QAAQ;;CAGpB,SAAS,2BACP,UACgC;AAChC,SAAO;GACL,MAAM;GACN,IAAI,SAAS;GACb,MAAM,SAAS;GACf,OAAO,SAAS;GACjB;;CAGH,SAAS,4BACP,WACkC;AAClC,MAAI,cAAc,KAAA,EAChB,QAAO,EAAE;AAEX,SAAO,UAAU,IAAI,2BAA2B;;CAGlD,SAAS,2BACP,MACA,MACkB;AAElB,SAAO;GACL;GACA,SAHc,0BAA0B,KAAK,QAAQ;GAItD;;CAGH,SAAS,4BAA4B,MAAmC;EACtE,MAAM,MAAM,2BAA2B,MAAM,YAAY;EAEzD,MAAM,UAAU,IAAI;EACpB,MAAM,qBAAqB,IAAI,IAC7B,QACG,QACE,UACC,MAAM,SAAS,WAClB,CACA,KAAK,UAAU,MAAM,GAAG,CAC5B;EAED,MAAM,cAAc,4BAA4B,KAAK,WAAW,CAAC,QAC9D,UAAU,CAAC,mBAAmB,IAAI,MAAM,GAAG,CAC7C;AACD,MAAI,YAAY,SAAS,EACvB,KAAI,UAAU,CAAC,GAAG,SAAS,GAAG,YAAY;AAG5C,SAAO;;CAGT,SAAS,8BAA8B,MAAqC;AAa1E,SAAO;GACL,MAbW;GAcX,SATmD,CACnD;IACE,MAAM;IACN,aAPc,KAAK;IAQnB,SAPgB,0BAClB,KAAK,QACN;IAME,CACF;GAIA;;CAGH,SAAS,uBACP,MAC8B;EAC9B,MAAM,OAAO,KAAK,UAAU;AAC5B,UAAQ,MAAR;GACE,KAAK,QACH,QAAO,2BAA2B,MAAM,OAAO;GACjD,KAAK,KACH,QAAO,4BAA4B,KAAkB;GACvD,KAAK,OACH,QAAO,8BAA8B,KAAoB;GAC3D,KAAK,SAEH;GACF;AACE,YAAQ,KAAK,6BAA6B,QAAQ,KAAK;AACvD;;;CAIN,SAAS,eAAe,OAA0C;EAChE,MAAM,MAA0B,EAAE;AAElC,QAAM,SAAS,gBAAgB;GAC7B,MAAM,mBAAmB,uBAAuB,YAAY;AAC5D,OAAI,iBACF,KAAI,KAAK,iBAAiB;IAE5B;AAEF,SAAO;;CAGT,SAAS,eACP,YAC0B;EAC1B,MAAM,MAAgC;GACpC,QAAQ,YAAY,aAAa;GACjC,YAAY,YAAY,mBAAmB;GAC5C;AAED,MAAI,WAAW,KACb,KAAI,QAAQ,WAAW;AAEzB,MAAI,WAAW,KACb,KAAI,QAAQ,WAAW;AAEzB,MAAI,WAAW,YACb,KAAI,cAAc,WAAW;AAE/B,MAAI,WAAW,cACb,KAAI,iBAAiB,WAAW;AAGlC,SAAO;;CAGT,SAAS,0BACP,cACQ;EACR,IAAI,MAAM;AAEV,eAAa,SAAS,YAAY;AAEhC,OADoB,SAAS,SACT,OAElB,OAAM,GAAG,IAAI,IADO,QACS;IAE/B;AAEF,SAAO;;CAGT,SAAS,aAAa,OAA8B;EAClD,IAAI,MAAM;AAEV,QAAM,SAAS,YAAY;AACzB,OAAI,QAAQ,UAAU,KAAK,UAAU;IACnC,MAAM,UAAU,SAAS;IACzB,MAAM,gBACJ,OAAO,YAAY,WACd,UACD,0BAA0B,QAAmC;AACnE,UAAM,GAAG,IAAI,IAAI;;IAEnB;AAEF,SAAO;;CAGT,SAAS,iBAAiB,MAAmC;AAC3D,MAAI,OAAO,OAAO,MAAM,uBAAuB,CAE7C,SADc,MAAM,wBAAwB,EAAE,EACjC,KAAK,SAAS;GACzB,MAAM,cAAc,KAAK;AACzB,UAAO;IAEL,MAAM,KAAK;IACX,aAAa,KAAK;IAClB,cAAc;IACf;IACD;OACG;AACL,WAAQ,KACN,gCAAgC,KAAK,UAAU,MAAM,MAAM,EAAE,GAC9D;AACD,UAAO,EAAE;;;CAIb,SAAS,WAAW,MAAyC;AAC3D,MAAI,OAAO,OAAO,MAAM,OAAO,CAC7B,QAAO,CAAC,KAAsB;MAE9B,QAAO,iBAAiB,KAAmB;;CAI/C,SAAS,YACP,YACiB;EACjB,MAAM,QAA4B,YAAY,SAAS,EAAE;EACzD,MAAM,MAAuB,EAAE;AAC/B,QAAM,SAAS,SAAS;AACC,cAAW,KAAK,CACxB,SAAS,kBAAkB;AACxC,QAAI,cACF,KAAI,KAAK,cAAc;KAEzB;IACF;AACF,SAAO;;CAGT,SAAS,iBACP,YACiC;EACjC,MAAM,SAAS,YAAY;AAC3B,MAAI,CAAC,OACH;WACS,OAAO,WAAW,SAC3B,QAAO;MAEP,SAAQ,QAAR;GACE,KAAK;GACL,KAAK,OACH,QAAO,EACL,MAAM,QACP;GACH,KAAK,OACH;GACF,QACE,QAAO;IACL,MAAM;IACN,MAAM;IACP;;;CAKT,eAAe,WACb,OACA,YAC2B;EAC3B,MAAM,aAAa;EACnB,MAAM,mBAAmB,wBAAwB;EACjD,MAAM,WAAW,eAAe,WAAW;EAC3C,MAAM,WAAW,eAAe,WAAW;EAC3C,MAAM,SAAS,aAAa,WAAW;EACvC,MAAM,QAAQ,YAAY,WAAW;EACrC,MAAM,aAAa,iBAAiB,WAAW;EAC/C,MAAM,MAAwB;GAC5B,mBAAmB;GACnB;GACA,GAAG;GACJ;AACD,MAAI,SAAS,MAAM,UAAU,YAAY,gBAAgB,OACvD,KAAI,QAAQ;AAEd,MAAI,WACF,KAAI,cAAc;AAEpB,MAAI,QAAQ,OACV,KAAI,SAAS;AAEf,MAAI,QAAQ,SACV,KAAI,WAAW,QAAQ;AAGzB,SAAO;;AAGT,QAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACD;;AAGH,SAAgB,qBAAqB,SAAoC;AAIzE,SAAgB,cAAc,WAA4B;AACxD,QAAO,UAAU,aAAa,CAAC,WAAW,SAAS"}
@@ -1 +1 @@
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 text = \"text\" in content ? content.text : \"\";\n const message = new AIMessageChunk({\n content: [{ index: event.index, ...content }],\n });\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 = new AIMessageChunk({\n content: [{ index: event.index, type: \"text\", text }],\n });\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 | undefined {\n if (!content.text) {\n return undefined;\n }\n return { type: \"text\", text: content.text };\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 toolUseContentToAnthropicContent(\n content: Record<string, unknown>\n ): AnthropicMessageContentToolUse {\n return {\n type: \"tool_use\",\n id: content.id as string,\n name: content.name as string,\n input: content.input as Record<string, unknown>,\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 \"tool_use\":\n return toolUseContentToAnthropicContent(content);\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 if (type === \"tool_call\") {\n return undefined;\n }\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 content = ret.content as AnthropicMessageContent[];\n const existingToolUseIds = new Set(\n content\n .filter(\n (block): block is AnthropicMessageContentToolUse =>\n block.type === \"tool_use\"\n )\n .map((block) => block.id)\n );\n\n const toolContent = toolCallsToAnthropicContent(base.tool_calls).filter(\n (block) => !existingToolUseIds.has(block.id)\n );\n if (toolContent.length > 0) {\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 text = \"text\" in content ? content.text : \"\";\n const message = new AIMessageChunk({\n content: [{ index: event.index, ...content }],\n });\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 = new AIMessageChunk({\n content: [{ index: event.index, type: \"text\", text }],\n });\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 | undefined {\n if (!content.text) {\n return undefined;\n }\n return { type: \"text\", text: content.text };\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 toolUseContentToAnthropicContent(\n content: Record<string, unknown>\n ): AnthropicMessageContentToolUse {\n return {\n type: \"tool_use\",\n id: content.id as string,\n name: content.name as string,\n input: content.input as Record<string, unknown>,\n };\n }\n\n function thinkingContentToAnthropicContent(\n // oxlint-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 // oxlint-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 \"tool_use\":\n return toolUseContentToAnthropicContent(content);\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 if (type === \"tool_call\") {\n return undefined;\n }\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 content = ret.content as AnthropicMessageContent[];\n const existingToolUseIds = new Set(\n content\n .filter(\n (block): block is AnthropicMessageContentToolUse =>\n block.type === \"tool_use\"\n )\n .map((block) => block.id)\n );\n\n const toolContent = toolCallsToAnthropicContent(base.tool_calls).filter(\n (block) => !existingToolUseIds.has(block.id)\n );\n if (toolContent.length > 0) {\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 +1 @@
1
- {"version":3,"file":"common.cjs","names":["GeminiToolAttributes","schemaToGeminiParameters","jsonSchemaToGeminiParameters","normalizeSpeechConfig","isModelGemini","isModelGemma","isModelClaude","validateGeminiParams"],"sources":["../../src/utils/common.ts"],"sourcesContent":["import { isOpenAITool } from \"@langchain/core/language_models/base\";\nimport { isLangChainTool } from \"@langchain/core/utils/function_calling\";\nimport {\n isModelGemini,\n isModelGemma,\n normalizeSpeechConfig,\n validateGeminiParams,\n} from \"./gemini.js\";\nimport {\n GeminiFunctionDeclaration,\n GeminiFunctionSchema,\n GeminiTool,\n GeminiToolAttributes,\n GoogleAIBaseLanguageModelCallOptions,\n GoogleAIModelParams,\n GoogleAIModelRequestParams,\n GoogleAIToolType,\n VertexModelFamily,\n} from \"../types.js\";\nimport {\n jsonSchemaToGeminiParameters,\n schemaToGeminiParameters,\n} from \"./zod_to_gemini_parameters.js\";\nimport { isModelClaude, validateClaudeParams } from \"./anthropic.js\";\n\nexport function copyAIModelParams(\n params: GoogleAIModelParams | undefined,\n options: GoogleAIBaseLanguageModelCallOptions | undefined\n): GoogleAIModelRequestParams {\n return copyAIModelParamsInto(params, options, {});\n}\n\nfunction processToolChoice(\n toolChoice: GoogleAIBaseLanguageModelCallOptions[\"tool_choice\"],\n allowedFunctionNames: GoogleAIBaseLanguageModelCallOptions[\"allowed_function_names\"]\n):\n | {\n tool_choice: \"any\" | \"auto\" | \"none\";\n allowed_function_names?: string[];\n }\n | undefined {\n if (!toolChoice) {\n if (allowedFunctionNames) {\n // Allowed func names is passed, return 'any' so it forces the model to use a tool.\n return {\n tool_choice: \"any\",\n allowed_function_names: allowedFunctionNames,\n };\n }\n return undefined;\n }\n\n if (toolChoice === \"any\" || toolChoice === \"auto\" || toolChoice === \"none\") {\n return {\n tool_choice: toolChoice,\n allowed_function_names: allowedFunctionNames,\n };\n }\n if (typeof toolChoice === \"string\") {\n // String representing the function name.\n // Return any to force the model to predict the specified function call.\n return {\n tool_choice: \"any\",\n allowed_function_names: [...(allowedFunctionNames ?? []), toolChoice],\n };\n }\n throw new Error(\"Object inputs for tool_choice not supported.\");\n}\n\nfunction isGeminiTool(tool: GoogleAIToolType): tool is GeminiTool {\n for (const toolAttribute of GeminiToolAttributes) {\n if (toolAttribute in tool) {\n return true;\n }\n }\n return false;\n}\n\nfunction isGeminiNonFunctionTool(tool: GoogleAIToolType): tool is GeminiTool {\n return isGeminiTool(tool) && !(\"functionDeclaration\" in tool);\n}\n\nexport function convertToGeminiTools(tools: GoogleAIToolType[]): GeminiTool[] {\n const geminiTools: GeminiTool[] = [];\n let functionDeclarationsIndex = -1;\n tools.forEach((tool) => {\n if (isGeminiNonFunctionTool(tool)) {\n geminiTools.push(tool);\n } else {\n if (functionDeclarationsIndex === -1) {\n geminiTools.push({\n functionDeclarations: [],\n });\n functionDeclarationsIndex = geminiTools.length - 1;\n }\n if (\n \"functionDeclarations\" in tool &&\n Array.isArray(tool.functionDeclarations)\n ) {\n const funcs: GeminiFunctionDeclaration[] = tool.functionDeclarations;\n geminiTools[functionDeclarationsIndex].functionDeclarations!.push(\n ...funcs\n );\n } else if (isLangChainTool(tool)) {\n try {\n const jsonSchema = schemaToGeminiParameters(tool.schema);\n geminiTools[functionDeclarationsIndex].functionDeclarations!.push({\n name: tool.name,\n description: tool.description ?? `A function available to call.`,\n parameters: jsonSchema as GeminiFunctionSchema,\n });\n } catch (error) {\n const errorMessage =\n error && typeof error === \"object\" && \"message\" in error\n ? String(error.message)\n : String(error);\n throw new Error(\n `Failed to convert tool '${tool.name}' schema for Gemini: ${errorMessage}. `\n );\n }\n } else if (isOpenAITool(tool)) {\n geminiTools[functionDeclarationsIndex].functionDeclarations!.push({\n name: tool.function.name,\n description:\n tool.function.description ?? `A function available to call.`,\n parameters: jsonSchemaToGeminiParameters(tool.function.parameters),\n });\n } else {\n throw new Error(`Received invalid tool: ${JSON.stringify(tool)}`);\n }\n }\n });\n return geminiTools;\n}\n\nfunction reasoningEffortToReasoningTokens(\n _modelName?: string,\n effort?: string\n): number | undefined {\n if (effort === undefined) {\n return undefined;\n }\n const maxEffort = 24 * 1024; // Max for Gemini 2.5 Flash\n switch (effort) {\n case \"low\":\n // Defined as 1k by https://ai.google.dev/gemini-api/docs/openai#thinking\n return 1024;\n case \"medium\":\n // Defined as 8k by https://ai.google.dev/gemini-api/docs/openai#thinking\n return 8 * 1024;\n case \"high\":\n return maxEffort;\n default:\n return undefined;\n }\n}\n\nexport function copyAIModelParamsInto(\n params: GoogleAIModelParams | undefined,\n options: GoogleAIBaseLanguageModelCallOptions | undefined,\n target: GoogleAIModelParams\n): GoogleAIModelRequestParams {\n const ret: GoogleAIModelRequestParams = target || {};\n const model = options?.model ?? params?.model ?? target.model;\n ret.modelName =\n model ?? options?.modelName ?? params?.modelName ?? target.modelName;\n ret.model = model;\n ret.temperature =\n options?.temperature ?? params?.temperature ?? target.temperature;\n ret.maxOutputTokens =\n options?.maxOutputTokens ??\n params?.maxOutputTokens ??\n target.maxOutputTokens;\n ret.maxReasoningTokens =\n options?.maxReasoningTokens ??\n params?.maxReasoningTokens ??\n target?.maxReasoningTokens ??\n options?.thinkingBudget ??\n params?.thinkingBudget ??\n target?.thinkingBudget ??\n reasoningEffortToReasoningTokens(ret.modelName, params?.reasoningEffort) ??\n reasoningEffortToReasoningTokens(ret.modelName, target?.reasoningEffort) ??\n reasoningEffortToReasoningTokens(ret.modelName, options?.reasoningEffort);\n ret.topP = options?.topP ?? params?.topP ?? target.topP;\n ret.topK = options?.topK ?? params?.topK ?? target.topK;\n ret.seed = options?.seed ?? params?.seed ?? target.seed;\n ret.presencePenalty =\n options?.presencePenalty ??\n params?.presencePenalty ??\n target.presencePenalty;\n ret.frequencyPenalty =\n options?.frequencyPenalty ??\n params?.frequencyPenalty ??\n target.frequencyPenalty;\n ret.stopSequences =\n options?.stopSequences ?? params?.stopSequences ?? target.stopSequences;\n ret.safetySettings =\n options?.safetySettings ?? params?.safetySettings ?? target.safetySettings;\n ret.logprobs = options?.logprobs ?? params?.logprobs ?? target.logprobs;\n ret.topLogprobs =\n options?.topLogprobs ?? params?.topLogprobs ?? target.topLogprobs;\n ret.thinkingLevel =\n options?.thinkingLevel ?? params?.thinkingLevel ?? target?.thinkingLevel;\n ret.reasoningLevel =\n options?.reasoningLevel ?? params?.reasoningLevel ?? target?.reasoningLevel;\n ret.convertSystemMessageToHumanContent =\n options?.convertSystemMessageToHumanContent ??\n params?.convertSystemMessageToHumanContent ??\n target?.convertSystemMessageToHumanContent;\n ret.responseMimeType =\n options?.responseMimeType ??\n params?.responseMimeType ??\n target?.responseMimeType;\n ret.responseSchema =\n options?.responseSchema ?? params?.responseSchema ?? target?.responseSchema;\n ret.responseModalities =\n options?.responseModalities ??\n params?.responseModalities ??\n target?.responseModalities;\n ret.speechConfig = normalizeSpeechConfig(\n options?.speechConfig ?? params?.speechConfig ?? target?.speechConfig\n );\n ret.streaming = options?.streaming ?? params?.streaming ?? target?.streaming;\n const toolChoice = processToolChoice(\n options?.tool_choice,\n options?.allowed_function_names\n );\n if (toolChoice) {\n ret.tool_choice = toolChoice.tool_choice;\n ret.allowed_function_names = toolChoice.allowed_function_names;\n }\n\n const tools = options?.tools;\n if (tools) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ret.tools = convertToGeminiTools(tools as Record<string, any>[]);\n }\n\n if (options?.cachedContent) {\n ret.cachedContent = options.cachedContent;\n }\n\n ret.labels = options?.labels ?? params?.labels ?? target?.labels;\n\n return ret;\n}\n\nexport function modelToFamily(\n modelName: string | undefined\n): VertexModelFamily {\n if (!modelName) {\n return null;\n } else if (isModelGemini(modelName)) {\n return \"gemini\";\n } else if (isModelGemma(modelName)) {\n return \"gemma\";\n } else if (isModelClaude(modelName)) {\n return \"claude\";\n } else {\n return null;\n }\n}\n\nexport function modelToPublisher(modelName: string | undefined): string {\n const family = modelToFamily(modelName);\n switch (family) {\n case \"gemini\":\n case \"gemma\":\n case \"palm\":\n return \"google\";\n\n case \"claude\":\n return \"anthropic\";\n\n default:\n return \"unknown\";\n }\n}\n\nexport function validateModelParams(\n params: GoogleAIModelParams | undefined\n): void {\n const testParams: GoogleAIModelParams = params ?? {};\n const model = testParams.model ?? testParams.modelName;\n switch (modelToFamily(model)) {\n case \"gemini\":\n case \"gemma\": // TODO: Are we sure?\n return validateGeminiParams(testParams);\n\n case \"claude\":\n return validateClaudeParams(testParams);\n\n default:\n throw new Error(\n `Unable to verify model params: ${JSON.stringify(params)}`\n );\n }\n}\n\nexport function copyAndValidateModelParamsInto(\n params: GoogleAIModelParams | undefined,\n target: GoogleAIModelParams\n): GoogleAIModelParams {\n copyAIModelParamsInto(params, undefined, target);\n validateModelParams(target);\n return target;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"common.cjs","names":["GeminiToolAttributes","schemaToGeminiParameters","jsonSchemaToGeminiParameters","normalizeSpeechConfig","isModelGemini","isModelGemma","isModelClaude","validateGeminiParams"],"sources":["../../src/utils/common.ts"],"sourcesContent":["import { isOpenAITool } from \"@langchain/core/language_models/base\";\nimport { isLangChainTool } from \"@langchain/core/utils/function_calling\";\nimport {\n isModelGemini,\n isModelGemma,\n normalizeSpeechConfig,\n validateGeminiParams,\n} from \"./gemini.js\";\nimport {\n GeminiFunctionDeclaration,\n GeminiFunctionSchema,\n GeminiTool,\n GeminiToolAttributes,\n GoogleAIBaseLanguageModelCallOptions,\n GoogleAIModelParams,\n GoogleAIModelRequestParams,\n GoogleAIToolType,\n VertexModelFamily,\n} from \"../types.js\";\nimport {\n jsonSchemaToGeminiParameters,\n schemaToGeminiParameters,\n} from \"./zod_to_gemini_parameters.js\";\nimport { isModelClaude, validateClaudeParams } from \"./anthropic.js\";\n\nexport function copyAIModelParams(\n params: GoogleAIModelParams | undefined,\n options: GoogleAIBaseLanguageModelCallOptions | undefined\n): GoogleAIModelRequestParams {\n return copyAIModelParamsInto(params, options, {});\n}\n\nfunction processToolChoice(\n toolChoice: GoogleAIBaseLanguageModelCallOptions[\"tool_choice\"],\n allowedFunctionNames: GoogleAIBaseLanguageModelCallOptions[\"allowed_function_names\"]\n):\n | {\n tool_choice: \"any\" | \"auto\" | \"none\";\n allowed_function_names?: string[];\n }\n | undefined {\n if (!toolChoice) {\n if (allowedFunctionNames) {\n // Allowed func names is passed, return 'any' so it forces the model to use a tool.\n return {\n tool_choice: \"any\",\n allowed_function_names: allowedFunctionNames,\n };\n }\n return undefined;\n }\n\n if (toolChoice === \"any\" || toolChoice === \"auto\" || toolChoice === \"none\") {\n return {\n tool_choice: toolChoice,\n allowed_function_names: allowedFunctionNames,\n };\n }\n if (typeof toolChoice === \"string\") {\n // String representing the function name.\n // Return any to force the model to predict the specified function call.\n return {\n tool_choice: \"any\",\n allowed_function_names: [...(allowedFunctionNames ?? []), toolChoice],\n };\n }\n throw new Error(\"Object inputs for tool_choice not supported.\");\n}\n\nfunction isGeminiTool(tool: GoogleAIToolType): tool is GeminiTool {\n for (const toolAttribute of GeminiToolAttributes) {\n if (toolAttribute in tool) {\n return true;\n }\n }\n return false;\n}\n\nfunction isGeminiNonFunctionTool(tool: GoogleAIToolType): tool is GeminiTool {\n return isGeminiTool(tool) && !(\"functionDeclaration\" in tool);\n}\n\nexport function convertToGeminiTools(tools: GoogleAIToolType[]): GeminiTool[] {\n const geminiTools: GeminiTool[] = [];\n let functionDeclarationsIndex = -1;\n tools.forEach((tool) => {\n if (isGeminiNonFunctionTool(tool)) {\n geminiTools.push(tool);\n } else {\n if (functionDeclarationsIndex === -1) {\n geminiTools.push({\n functionDeclarations: [],\n });\n functionDeclarationsIndex = geminiTools.length - 1;\n }\n if (\n \"functionDeclarations\" in tool &&\n Array.isArray(tool.functionDeclarations)\n ) {\n const funcs: GeminiFunctionDeclaration[] = tool.functionDeclarations;\n geminiTools[functionDeclarationsIndex].functionDeclarations!.push(\n ...funcs\n );\n } else if (isLangChainTool(tool)) {\n try {\n const jsonSchema = schemaToGeminiParameters(tool.schema);\n geminiTools[functionDeclarationsIndex].functionDeclarations!.push({\n name: tool.name,\n description: tool.description ?? `A function available to call.`,\n parameters: jsonSchema as GeminiFunctionSchema,\n });\n } catch (error) {\n const errorMessage =\n error && typeof error === \"object\" && \"message\" in error\n ? String(error.message)\n : String(error);\n throw new Error(\n `Failed to convert tool '${tool.name}' schema for Gemini: ${errorMessage}. `\n );\n }\n } else if (isOpenAITool(tool)) {\n geminiTools[functionDeclarationsIndex].functionDeclarations!.push({\n name: tool.function.name,\n description:\n tool.function.description ?? `A function available to call.`,\n parameters: jsonSchemaToGeminiParameters(tool.function.parameters),\n });\n } else {\n throw new Error(`Received invalid tool: ${JSON.stringify(tool)}`);\n }\n }\n });\n return geminiTools;\n}\n\nfunction reasoningEffortToReasoningTokens(\n _modelName?: string,\n effort?: string\n): number | undefined {\n if (effort === undefined) {\n return undefined;\n }\n const maxEffort = 24 * 1024; // Max for Gemini 2.5 Flash\n switch (effort) {\n case \"low\":\n // Defined as 1k by https://ai.google.dev/gemini-api/docs/openai#thinking\n return 1024;\n case \"medium\":\n // Defined as 8k by https://ai.google.dev/gemini-api/docs/openai#thinking\n return 8 * 1024;\n case \"high\":\n return maxEffort;\n default:\n return undefined;\n }\n}\n\nexport function copyAIModelParamsInto(\n params: GoogleAIModelParams | undefined,\n options: GoogleAIBaseLanguageModelCallOptions | undefined,\n target: GoogleAIModelParams\n): GoogleAIModelRequestParams {\n const ret: GoogleAIModelRequestParams = target || {};\n const model = options?.model ?? params?.model ?? target.model;\n ret.modelName =\n model ?? options?.modelName ?? params?.modelName ?? target.modelName;\n ret.model = model;\n ret.temperature =\n options?.temperature ?? params?.temperature ?? target.temperature;\n ret.maxOutputTokens =\n options?.maxOutputTokens ??\n params?.maxOutputTokens ??\n target.maxOutputTokens;\n ret.maxReasoningTokens =\n options?.maxReasoningTokens ??\n params?.maxReasoningTokens ??\n target?.maxReasoningTokens ??\n options?.thinkingBudget ??\n params?.thinkingBudget ??\n target?.thinkingBudget ??\n reasoningEffortToReasoningTokens(ret.modelName, params?.reasoningEffort) ??\n reasoningEffortToReasoningTokens(ret.modelName, target?.reasoningEffort) ??\n reasoningEffortToReasoningTokens(ret.modelName, options?.reasoningEffort);\n ret.topP = options?.topP ?? params?.topP ?? target.topP;\n ret.topK = options?.topK ?? params?.topK ?? target.topK;\n ret.seed = options?.seed ?? params?.seed ?? target.seed;\n ret.presencePenalty =\n options?.presencePenalty ??\n params?.presencePenalty ??\n target.presencePenalty;\n ret.frequencyPenalty =\n options?.frequencyPenalty ??\n params?.frequencyPenalty ??\n target.frequencyPenalty;\n ret.stopSequences =\n options?.stopSequences ?? params?.stopSequences ?? target.stopSequences;\n ret.safetySettings =\n options?.safetySettings ?? params?.safetySettings ?? target.safetySettings;\n ret.logprobs = options?.logprobs ?? params?.logprobs ?? target.logprobs;\n ret.topLogprobs =\n options?.topLogprobs ?? params?.topLogprobs ?? target.topLogprobs;\n ret.thinkingLevel =\n options?.thinkingLevel ?? params?.thinkingLevel ?? target?.thinkingLevel;\n ret.reasoningLevel =\n options?.reasoningLevel ?? params?.reasoningLevel ?? target?.reasoningLevel;\n ret.convertSystemMessageToHumanContent =\n options?.convertSystemMessageToHumanContent ??\n params?.convertSystemMessageToHumanContent ??\n target?.convertSystemMessageToHumanContent;\n ret.responseMimeType =\n options?.responseMimeType ??\n params?.responseMimeType ??\n target?.responseMimeType;\n ret.responseSchema =\n options?.responseSchema ?? params?.responseSchema ?? target?.responseSchema;\n ret.responseModalities =\n options?.responseModalities ??\n params?.responseModalities ??\n target?.responseModalities;\n ret.speechConfig = normalizeSpeechConfig(\n options?.speechConfig ?? params?.speechConfig ?? target?.speechConfig\n );\n ret.streaming = options?.streaming ?? params?.streaming ?? target?.streaming;\n const toolChoice = processToolChoice(\n options?.tool_choice,\n options?.allowed_function_names\n );\n if (toolChoice) {\n ret.tool_choice = toolChoice.tool_choice;\n ret.allowed_function_names = toolChoice.allowed_function_names;\n }\n\n const tools = options?.tools;\n if (tools) {\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n ret.tools = convertToGeminiTools(tools as Record<string, any>[]);\n }\n\n if (options?.cachedContent) {\n ret.cachedContent = options.cachedContent;\n }\n\n ret.labels = options?.labels ?? params?.labels ?? target?.labels;\n\n return ret;\n}\n\nexport function modelToFamily(\n modelName: string | undefined\n): VertexModelFamily {\n if (!modelName) {\n return null;\n } else if (isModelGemini(modelName)) {\n return \"gemini\";\n } else if (isModelGemma(modelName)) {\n return \"gemma\";\n } else if (isModelClaude(modelName)) {\n return \"claude\";\n } else {\n return null;\n }\n}\n\nexport function modelToPublisher(modelName: string | undefined): string {\n const family = modelToFamily(modelName);\n switch (family) {\n case \"gemini\":\n case \"gemma\":\n case \"palm\":\n return \"google\";\n\n case \"claude\":\n return \"anthropic\";\n\n default:\n return \"unknown\";\n }\n}\n\nexport function validateModelParams(\n params: GoogleAIModelParams | undefined\n): void {\n const testParams: GoogleAIModelParams = params ?? {};\n const model = testParams.model ?? testParams.modelName;\n switch (modelToFamily(model)) {\n case \"gemini\":\n case \"gemma\": // TODO: Are we sure?\n return validateGeminiParams(testParams);\n\n case \"claude\":\n return validateClaudeParams(testParams);\n\n default:\n throw new Error(\n `Unable to verify model params: ${JSON.stringify(params)}`\n );\n }\n}\n\nexport function copyAndValidateModelParamsInto(\n params: GoogleAIModelParams | undefined,\n target: GoogleAIModelParams\n): GoogleAIModelParams {\n copyAIModelParamsInto(params, undefined, target);\n validateModelParams(target);\n return target;\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"common.js","names":[],"sources":["../../src/utils/common.ts"],"sourcesContent":["import { isOpenAITool } from \"@langchain/core/language_models/base\";\nimport { isLangChainTool } from \"@langchain/core/utils/function_calling\";\nimport {\n isModelGemini,\n isModelGemma,\n normalizeSpeechConfig,\n validateGeminiParams,\n} from \"./gemini.js\";\nimport {\n GeminiFunctionDeclaration,\n GeminiFunctionSchema,\n GeminiTool,\n GeminiToolAttributes,\n GoogleAIBaseLanguageModelCallOptions,\n GoogleAIModelParams,\n GoogleAIModelRequestParams,\n GoogleAIToolType,\n VertexModelFamily,\n} from \"../types.js\";\nimport {\n jsonSchemaToGeminiParameters,\n schemaToGeminiParameters,\n} from \"./zod_to_gemini_parameters.js\";\nimport { isModelClaude, validateClaudeParams } from \"./anthropic.js\";\n\nexport function copyAIModelParams(\n params: GoogleAIModelParams | undefined,\n options: GoogleAIBaseLanguageModelCallOptions | undefined\n): GoogleAIModelRequestParams {\n return copyAIModelParamsInto(params, options, {});\n}\n\nfunction processToolChoice(\n toolChoice: GoogleAIBaseLanguageModelCallOptions[\"tool_choice\"],\n allowedFunctionNames: GoogleAIBaseLanguageModelCallOptions[\"allowed_function_names\"]\n):\n | {\n tool_choice: \"any\" | \"auto\" | \"none\";\n allowed_function_names?: string[];\n }\n | undefined {\n if (!toolChoice) {\n if (allowedFunctionNames) {\n // Allowed func names is passed, return 'any' so it forces the model to use a tool.\n return {\n tool_choice: \"any\",\n allowed_function_names: allowedFunctionNames,\n };\n }\n return undefined;\n }\n\n if (toolChoice === \"any\" || toolChoice === \"auto\" || toolChoice === \"none\") {\n return {\n tool_choice: toolChoice,\n allowed_function_names: allowedFunctionNames,\n };\n }\n if (typeof toolChoice === \"string\") {\n // String representing the function name.\n // Return any to force the model to predict the specified function call.\n return {\n tool_choice: \"any\",\n allowed_function_names: [...(allowedFunctionNames ?? []), toolChoice],\n };\n }\n throw new Error(\"Object inputs for tool_choice not supported.\");\n}\n\nfunction isGeminiTool(tool: GoogleAIToolType): tool is GeminiTool {\n for (const toolAttribute of GeminiToolAttributes) {\n if (toolAttribute in tool) {\n return true;\n }\n }\n return false;\n}\n\nfunction isGeminiNonFunctionTool(tool: GoogleAIToolType): tool is GeminiTool {\n return isGeminiTool(tool) && !(\"functionDeclaration\" in tool);\n}\n\nexport function convertToGeminiTools(tools: GoogleAIToolType[]): GeminiTool[] {\n const geminiTools: GeminiTool[] = [];\n let functionDeclarationsIndex = -1;\n tools.forEach((tool) => {\n if (isGeminiNonFunctionTool(tool)) {\n geminiTools.push(tool);\n } else {\n if (functionDeclarationsIndex === -1) {\n geminiTools.push({\n functionDeclarations: [],\n });\n functionDeclarationsIndex = geminiTools.length - 1;\n }\n if (\n \"functionDeclarations\" in tool &&\n Array.isArray(tool.functionDeclarations)\n ) {\n const funcs: GeminiFunctionDeclaration[] = tool.functionDeclarations;\n geminiTools[functionDeclarationsIndex].functionDeclarations!.push(\n ...funcs\n );\n } else if (isLangChainTool(tool)) {\n try {\n const jsonSchema = schemaToGeminiParameters(tool.schema);\n geminiTools[functionDeclarationsIndex].functionDeclarations!.push({\n name: tool.name,\n description: tool.description ?? `A function available to call.`,\n parameters: jsonSchema as GeminiFunctionSchema,\n });\n } catch (error) {\n const errorMessage =\n error && typeof error === \"object\" && \"message\" in error\n ? String(error.message)\n : String(error);\n throw new Error(\n `Failed to convert tool '${tool.name}' schema for Gemini: ${errorMessage}. `\n );\n }\n } else if (isOpenAITool(tool)) {\n geminiTools[functionDeclarationsIndex].functionDeclarations!.push({\n name: tool.function.name,\n description:\n tool.function.description ?? `A function available to call.`,\n parameters: jsonSchemaToGeminiParameters(tool.function.parameters),\n });\n } else {\n throw new Error(`Received invalid tool: ${JSON.stringify(tool)}`);\n }\n }\n });\n return geminiTools;\n}\n\nfunction reasoningEffortToReasoningTokens(\n _modelName?: string,\n effort?: string\n): number | undefined {\n if (effort === undefined) {\n return undefined;\n }\n const maxEffort = 24 * 1024; // Max for Gemini 2.5 Flash\n switch (effort) {\n case \"low\":\n // Defined as 1k by https://ai.google.dev/gemini-api/docs/openai#thinking\n return 1024;\n case \"medium\":\n // Defined as 8k by https://ai.google.dev/gemini-api/docs/openai#thinking\n return 8 * 1024;\n case \"high\":\n return maxEffort;\n default:\n return undefined;\n }\n}\n\nexport function copyAIModelParamsInto(\n params: GoogleAIModelParams | undefined,\n options: GoogleAIBaseLanguageModelCallOptions | undefined,\n target: GoogleAIModelParams\n): GoogleAIModelRequestParams {\n const ret: GoogleAIModelRequestParams = target || {};\n const model = options?.model ?? params?.model ?? target.model;\n ret.modelName =\n model ?? options?.modelName ?? params?.modelName ?? target.modelName;\n ret.model = model;\n ret.temperature =\n options?.temperature ?? params?.temperature ?? target.temperature;\n ret.maxOutputTokens =\n options?.maxOutputTokens ??\n params?.maxOutputTokens ??\n target.maxOutputTokens;\n ret.maxReasoningTokens =\n options?.maxReasoningTokens ??\n params?.maxReasoningTokens ??\n target?.maxReasoningTokens ??\n options?.thinkingBudget ??\n params?.thinkingBudget ??\n target?.thinkingBudget ??\n reasoningEffortToReasoningTokens(ret.modelName, params?.reasoningEffort) ??\n reasoningEffortToReasoningTokens(ret.modelName, target?.reasoningEffort) ??\n reasoningEffortToReasoningTokens(ret.modelName, options?.reasoningEffort);\n ret.topP = options?.topP ?? params?.topP ?? target.topP;\n ret.topK = options?.topK ?? params?.topK ?? target.topK;\n ret.seed = options?.seed ?? params?.seed ?? target.seed;\n ret.presencePenalty =\n options?.presencePenalty ??\n params?.presencePenalty ??\n target.presencePenalty;\n ret.frequencyPenalty =\n options?.frequencyPenalty ??\n params?.frequencyPenalty ??\n target.frequencyPenalty;\n ret.stopSequences =\n options?.stopSequences ?? params?.stopSequences ?? target.stopSequences;\n ret.safetySettings =\n options?.safetySettings ?? params?.safetySettings ?? target.safetySettings;\n ret.logprobs = options?.logprobs ?? params?.logprobs ?? target.logprobs;\n ret.topLogprobs =\n options?.topLogprobs ?? params?.topLogprobs ?? target.topLogprobs;\n ret.thinkingLevel =\n options?.thinkingLevel ?? params?.thinkingLevel ?? target?.thinkingLevel;\n ret.reasoningLevel =\n options?.reasoningLevel ?? params?.reasoningLevel ?? target?.reasoningLevel;\n ret.convertSystemMessageToHumanContent =\n options?.convertSystemMessageToHumanContent ??\n params?.convertSystemMessageToHumanContent ??\n target?.convertSystemMessageToHumanContent;\n ret.responseMimeType =\n options?.responseMimeType ??\n params?.responseMimeType ??\n target?.responseMimeType;\n ret.responseSchema =\n options?.responseSchema ?? params?.responseSchema ?? target?.responseSchema;\n ret.responseModalities =\n options?.responseModalities ??\n params?.responseModalities ??\n target?.responseModalities;\n ret.speechConfig = normalizeSpeechConfig(\n options?.speechConfig ?? params?.speechConfig ?? target?.speechConfig\n );\n ret.streaming = options?.streaming ?? params?.streaming ?? target?.streaming;\n const toolChoice = processToolChoice(\n options?.tool_choice,\n options?.allowed_function_names\n );\n if (toolChoice) {\n ret.tool_choice = toolChoice.tool_choice;\n ret.allowed_function_names = toolChoice.allowed_function_names;\n }\n\n const tools = options?.tools;\n if (tools) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ret.tools = convertToGeminiTools(tools as Record<string, any>[]);\n }\n\n if (options?.cachedContent) {\n ret.cachedContent = options.cachedContent;\n }\n\n ret.labels = options?.labels ?? params?.labels ?? target?.labels;\n\n return ret;\n}\n\nexport function modelToFamily(\n modelName: string | undefined\n): VertexModelFamily {\n if (!modelName) {\n return null;\n } else if (isModelGemini(modelName)) {\n return \"gemini\";\n } else if (isModelGemma(modelName)) {\n return \"gemma\";\n } else if (isModelClaude(modelName)) {\n return \"claude\";\n } else {\n return null;\n }\n}\n\nexport function modelToPublisher(modelName: string | undefined): string {\n const family = modelToFamily(modelName);\n switch (family) {\n case \"gemini\":\n case \"gemma\":\n case \"palm\":\n return \"google\";\n\n case \"claude\":\n return \"anthropic\";\n\n default:\n return \"unknown\";\n }\n}\n\nexport function validateModelParams(\n params: GoogleAIModelParams | undefined\n): void {\n const testParams: GoogleAIModelParams = params ?? {};\n const model = testParams.model ?? testParams.modelName;\n switch (modelToFamily(model)) {\n case \"gemini\":\n case \"gemma\": // TODO: Are we sure?\n return validateGeminiParams(testParams);\n\n case \"claude\":\n return validateClaudeParams(testParams);\n\n default:\n throw new Error(\n `Unable to verify model params: ${JSON.stringify(params)}`\n );\n }\n}\n\nexport function copyAndValidateModelParamsInto(\n params: GoogleAIModelParams | undefined,\n target: GoogleAIModelParams\n): GoogleAIModelParams {\n copyAIModelParamsInto(params, undefined, target);\n validateModelParams(target);\n return target;\n}\n"],"mappings":";;;;;;;AAyBA,SAAgB,kBACd,QACA,SAC4B;AAC5B,QAAO,sBAAsB,QAAQ,SAAS,EAAE,CAAC;;AAGnD,SAAS,kBACP,YACA,sBAMY;AACZ,KAAI,CAAC,YAAY;AACf,MAAI,qBAEF,QAAO;GACL,aAAa;GACb,wBAAwB;GACzB;AAEH;;AAGF,KAAI,eAAe,SAAS,eAAe,UAAU,eAAe,OAClE,QAAO;EACL,aAAa;EACb,wBAAwB;EACzB;AAEH,KAAI,OAAO,eAAe,SAGxB,QAAO;EACL,aAAa;EACb,wBAAwB,CAAC,GAAI,wBAAwB,EAAE,EAAG,WAAW;EACtE;AAEH,OAAM,IAAI,MAAM,+CAA+C;;AAGjE,SAAS,aAAa,MAA4C;AAChE,MAAK,MAAM,iBAAiB,qBAC1B,KAAI,iBAAiB,KACnB,QAAO;AAGX,QAAO;;AAGT,SAAS,wBAAwB,MAA4C;AAC3E,QAAO,aAAa,KAAK,IAAI,EAAE,yBAAyB;;AAG1D,SAAgB,qBAAqB,OAAyC;CAC5E,MAAM,cAA4B,EAAE;CACpC,IAAI,4BAA4B;AAChC,OAAM,SAAS,SAAS;AACtB,MAAI,wBAAwB,KAAK,CAC/B,aAAY,KAAK,KAAK;OACjB;AACL,OAAI,8BAA8B,IAAI;AACpC,gBAAY,KAAK,EACf,sBAAsB,EAAE,EACzB,CAAC;AACF,gCAA4B,YAAY,SAAS;;AAEnD,OACE,0BAA0B,QAC1B,MAAM,QAAQ,KAAK,qBAAqB,EACxC;IACA,MAAM,QAAqC,KAAK;AAChD,gBAAY,2BAA2B,qBAAsB,KAC3D,GAAG,MACJ;cACQ,gBAAgB,KAAK,CAC9B,KAAI;IACF,MAAM,aAAa,yBAAyB,KAAK,OAAO;AACxD,gBAAY,2BAA2B,qBAAsB,KAAK;KAChE,MAAM,KAAK;KACX,aAAa,KAAK,eAAe;KACjC,YAAY;KACb,CAAC;YACK,OAAO;IACd,MAAM,eACJ,SAAS,OAAO,UAAU,YAAY,aAAa,QAC/C,OAAO,MAAM,QAAQ,GACrB,OAAO,MAAM;AACnB,UAAM,IAAI,MACR,2BAA2B,KAAK,KAAK,uBAAuB,aAAa,IAC1E;;YAEM,aAAa,KAAK,CAC3B,aAAY,2BAA2B,qBAAsB,KAAK;IAChE,MAAM,KAAK,SAAS;IACpB,aACE,KAAK,SAAS,eAAe;IAC/B,YAAY,6BAA6B,KAAK,SAAS,WAAW;IACnE,CAAC;OAEF,OAAM,IAAI,MAAM,0BAA0B,KAAK,UAAU,KAAK,GAAG;;GAGrE;AACF,QAAO;;AAGT,SAAS,iCACP,YACA,QACoB;AACpB,KAAI,WAAW,KAAA,EACb;CAEF,MAAM,YAAY,KAAK;AACvB,SAAQ,QAAR;EACE,KAAK,MAEH,QAAO;EACT,KAAK,SAEH,QAAO,IAAI;EACb,KAAK,OACH,QAAO;EACT,QACE;;;AAIN,SAAgB,sBACd,QACA,SACA,QAC4B;CAC5B,MAAM,MAAkC,UAAU,EAAE;CACpD,MAAM,QAAQ,SAAS,SAAS,QAAQ,SAAS,OAAO;AACxD,KAAI,YACF,SAAS,SAAS,aAAa,QAAQ,aAAa,OAAO;AAC7D,KAAI,QAAQ;AACZ,KAAI,cACF,SAAS,eAAe,QAAQ,eAAe,OAAO;AACxD,KAAI,kBACF,SAAS,mBACT,QAAQ,mBACR,OAAO;AACT,KAAI,qBACF,SAAS,sBACT,QAAQ,sBACR,QAAQ,sBACR,SAAS,kBACT,QAAQ,kBACR,QAAQ,kBACR,iCAAiC,IAAI,WAAW,QAAQ,gBAAgB,IACxE,iCAAiC,IAAI,WAAW,QAAQ,gBAAgB,IACxE,iCAAiC,IAAI,WAAW,SAAS,gBAAgB;AAC3E,KAAI,OAAO,SAAS,QAAQ,QAAQ,QAAQ,OAAO;AACnD,KAAI,OAAO,SAAS,QAAQ,QAAQ,QAAQ,OAAO;AACnD,KAAI,OAAO,SAAS,QAAQ,QAAQ,QAAQ,OAAO;AACnD,KAAI,kBACF,SAAS,mBACT,QAAQ,mBACR,OAAO;AACT,KAAI,mBACF,SAAS,oBACT,QAAQ,oBACR,OAAO;AACT,KAAI,gBACF,SAAS,iBAAiB,QAAQ,iBAAiB,OAAO;AAC5D,KAAI,iBACF,SAAS,kBAAkB,QAAQ,kBAAkB,OAAO;AAC9D,KAAI,WAAW,SAAS,YAAY,QAAQ,YAAY,OAAO;AAC/D,KAAI,cACF,SAAS,eAAe,QAAQ,eAAe,OAAO;AACxD,KAAI,gBACF,SAAS,iBAAiB,QAAQ,iBAAiB,QAAQ;AAC7D,KAAI,iBACF,SAAS,kBAAkB,QAAQ,kBAAkB,QAAQ;AAC/D,KAAI,qCACF,SAAS,sCACT,QAAQ,sCACR,QAAQ;AACV,KAAI,mBACF,SAAS,oBACT,QAAQ,oBACR,QAAQ;AACV,KAAI,iBACF,SAAS,kBAAkB,QAAQ,kBAAkB,QAAQ;AAC/D,KAAI,qBACF,SAAS,sBACT,QAAQ,sBACR,QAAQ;AACV,KAAI,eAAe,sBACjB,SAAS,gBAAgB,QAAQ,gBAAgB,QAAQ,aAC1D;AACD,KAAI,YAAY,SAAS,aAAa,QAAQ,aAAa,QAAQ;CACnE,MAAM,aAAa,kBACjB,SAAS,aACT,SAAS,uBACV;AACD,KAAI,YAAY;AACd,MAAI,cAAc,WAAW;AAC7B,MAAI,yBAAyB,WAAW;;CAG1C,MAAM,QAAQ,SAAS;AACvB,KAAI,MAEF,KAAI,QAAQ,qBAAqB,MAA+B;AAGlE,KAAI,SAAS,cACX,KAAI,gBAAgB,QAAQ;AAG9B,KAAI,SAAS,SAAS,UAAU,QAAQ,UAAU,QAAQ;AAE1D,QAAO;;AAGT,SAAgB,cACd,WACmB;AACnB,KAAI,CAAC,UACH,QAAO;UACE,cAAc,UAAU,CACjC,QAAO;UACE,aAAa,UAAU,CAChC,QAAO;UACE,cAAc,UAAU,CACjC,QAAO;KAEP,QAAO;;AAIX,SAAgB,iBAAiB,WAAuC;AAEtE,SADe,cAAc,UAAU,EACvC;EACE,KAAK;EACL,KAAK;EACL,KAAK,OACH,QAAO;EAET,KAAK,SACH,QAAO;EAET,QACE,QAAO;;;AAIb,SAAgB,oBACd,QACM;CACN,MAAM,aAAkC,UAAU,EAAE;AAEpD,SAAQ,cADM,WAAW,SAAS,WAAW,UACjB,EAA5B;EACE,KAAK;EACL,KAAK,QACH,QAAO,qBAAqB,WAAW;EAEzC,KAAK,SACH,QAAO,qCAAqB,WAAW;EAEzC,QACE,OAAM,IAAI,MACR,kCAAkC,KAAK,UAAU,OAAO,GACzD;;;AAIP,SAAgB,+BACd,QACA,QACqB;AACrB,uBAAsB,QAAQ,KAAA,GAAW,OAAO;AAChD,qBAAoB,OAAO;AAC3B,QAAO"}
1
+ {"version":3,"file":"common.js","names":[],"sources":["../../src/utils/common.ts"],"sourcesContent":["import { isOpenAITool } from \"@langchain/core/language_models/base\";\nimport { isLangChainTool } from \"@langchain/core/utils/function_calling\";\nimport {\n isModelGemini,\n isModelGemma,\n normalizeSpeechConfig,\n validateGeminiParams,\n} from \"./gemini.js\";\nimport {\n GeminiFunctionDeclaration,\n GeminiFunctionSchema,\n GeminiTool,\n GeminiToolAttributes,\n GoogleAIBaseLanguageModelCallOptions,\n GoogleAIModelParams,\n GoogleAIModelRequestParams,\n GoogleAIToolType,\n VertexModelFamily,\n} from \"../types.js\";\nimport {\n jsonSchemaToGeminiParameters,\n schemaToGeminiParameters,\n} from \"./zod_to_gemini_parameters.js\";\nimport { isModelClaude, validateClaudeParams } from \"./anthropic.js\";\n\nexport function copyAIModelParams(\n params: GoogleAIModelParams | undefined,\n options: GoogleAIBaseLanguageModelCallOptions | undefined\n): GoogleAIModelRequestParams {\n return copyAIModelParamsInto(params, options, {});\n}\n\nfunction processToolChoice(\n toolChoice: GoogleAIBaseLanguageModelCallOptions[\"tool_choice\"],\n allowedFunctionNames: GoogleAIBaseLanguageModelCallOptions[\"allowed_function_names\"]\n):\n | {\n tool_choice: \"any\" | \"auto\" | \"none\";\n allowed_function_names?: string[];\n }\n | undefined {\n if (!toolChoice) {\n if (allowedFunctionNames) {\n // Allowed func names is passed, return 'any' so it forces the model to use a tool.\n return {\n tool_choice: \"any\",\n allowed_function_names: allowedFunctionNames,\n };\n }\n return undefined;\n }\n\n if (toolChoice === \"any\" || toolChoice === \"auto\" || toolChoice === \"none\") {\n return {\n tool_choice: toolChoice,\n allowed_function_names: allowedFunctionNames,\n };\n }\n if (typeof toolChoice === \"string\") {\n // String representing the function name.\n // Return any to force the model to predict the specified function call.\n return {\n tool_choice: \"any\",\n allowed_function_names: [...(allowedFunctionNames ?? []), toolChoice],\n };\n }\n throw new Error(\"Object inputs for tool_choice not supported.\");\n}\n\nfunction isGeminiTool(tool: GoogleAIToolType): tool is GeminiTool {\n for (const toolAttribute of GeminiToolAttributes) {\n if (toolAttribute in tool) {\n return true;\n }\n }\n return false;\n}\n\nfunction isGeminiNonFunctionTool(tool: GoogleAIToolType): tool is GeminiTool {\n return isGeminiTool(tool) && !(\"functionDeclaration\" in tool);\n}\n\nexport function convertToGeminiTools(tools: GoogleAIToolType[]): GeminiTool[] {\n const geminiTools: GeminiTool[] = [];\n let functionDeclarationsIndex = -1;\n tools.forEach((tool) => {\n if (isGeminiNonFunctionTool(tool)) {\n geminiTools.push(tool);\n } else {\n if (functionDeclarationsIndex === -1) {\n geminiTools.push({\n functionDeclarations: [],\n });\n functionDeclarationsIndex = geminiTools.length - 1;\n }\n if (\n \"functionDeclarations\" in tool &&\n Array.isArray(tool.functionDeclarations)\n ) {\n const funcs: GeminiFunctionDeclaration[] = tool.functionDeclarations;\n geminiTools[functionDeclarationsIndex].functionDeclarations!.push(\n ...funcs\n );\n } else if (isLangChainTool(tool)) {\n try {\n const jsonSchema = schemaToGeminiParameters(tool.schema);\n geminiTools[functionDeclarationsIndex].functionDeclarations!.push({\n name: tool.name,\n description: tool.description ?? `A function available to call.`,\n parameters: jsonSchema as GeminiFunctionSchema,\n });\n } catch (error) {\n const errorMessage =\n error && typeof error === \"object\" && \"message\" in error\n ? String(error.message)\n : String(error);\n throw new Error(\n `Failed to convert tool '${tool.name}' schema for Gemini: ${errorMessage}. `\n );\n }\n } else if (isOpenAITool(tool)) {\n geminiTools[functionDeclarationsIndex].functionDeclarations!.push({\n name: tool.function.name,\n description:\n tool.function.description ?? `A function available to call.`,\n parameters: jsonSchemaToGeminiParameters(tool.function.parameters),\n });\n } else {\n throw new Error(`Received invalid tool: ${JSON.stringify(tool)}`);\n }\n }\n });\n return geminiTools;\n}\n\nfunction reasoningEffortToReasoningTokens(\n _modelName?: string,\n effort?: string\n): number | undefined {\n if (effort === undefined) {\n return undefined;\n }\n const maxEffort = 24 * 1024; // Max for Gemini 2.5 Flash\n switch (effort) {\n case \"low\":\n // Defined as 1k by https://ai.google.dev/gemini-api/docs/openai#thinking\n return 1024;\n case \"medium\":\n // Defined as 8k by https://ai.google.dev/gemini-api/docs/openai#thinking\n return 8 * 1024;\n case \"high\":\n return maxEffort;\n default:\n return undefined;\n }\n}\n\nexport function copyAIModelParamsInto(\n params: GoogleAIModelParams | undefined,\n options: GoogleAIBaseLanguageModelCallOptions | undefined,\n target: GoogleAIModelParams\n): GoogleAIModelRequestParams {\n const ret: GoogleAIModelRequestParams = target || {};\n const model = options?.model ?? params?.model ?? target.model;\n ret.modelName =\n model ?? options?.modelName ?? params?.modelName ?? target.modelName;\n ret.model = model;\n ret.temperature =\n options?.temperature ?? params?.temperature ?? target.temperature;\n ret.maxOutputTokens =\n options?.maxOutputTokens ??\n params?.maxOutputTokens ??\n target.maxOutputTokens;\n ret.maxReasoningTokens =\n options?.maxReasoningTokens ??\n params?.maxReasoningTokens ??\n target?.maxReasoningTokens ??\n options?.thinkingBudget ??\n params?.thinkingBudget ??\n target?.thinkingBudget ??\n reasoningEffortToReasoningTokens(ret.modelName, params?.reasoningEffort) ??\n reasoningEffortToReasoningTokens(ret.modelName, target?.reasoningEffort) ??\n reasoningEffortToReasoningTokens(ret.modelName, options?.reasoningEffort);\n ret.topP = options?.topP ?? params?.topP ?? target.topP;\n ret.topK = options?.topK ?? params?.topK ?? target.topK;\n ret.seed = options?.seed ?? params?.seed ?? target.seed;\n ret.presencePenalty =\n options?.presencePenalty ??\n params?.presencePenalty ??\n target.presencePenalty;\n ret.frequencyPenalty =\n options?.frequencyPenalty ??\n params?.frequencyPenalty ??\n target.frequencyPenalty;\n ret.stopSequences =\n options?.stopSequences ?? params?.stopSequences ?? target.stopSequences;\n ret.safetySettings =\n options?.safetySettings ?? params?.safetySettings ?? target.safetySettings;\n ret.logprobs = options?.logprobs ?? params?.logprobs ?? target.logprobs;\n ret.topLogprobs =\n options?.topLogprobs ?? params?.topLogprobs ?? target.topLogprobs;\n ret.thinkingLevel =\n options?.thinkingLevel ?? params?.thinkingLevel ?? target?.thinkingLevel;\n ret.reasoningLevel =\n options?.reasoningLevel ?? params?.reasoningLevel ?? target?.reasoningLevel;\n ret.convertSystemMessageToHumanContent =\n options?.convertSystemMessageToHumanContent ??\n params?.convertSystemMessageToHumanContent ??\n target?.convertSystemMessageToHumanContent;\n ret.responseMimeType =\n options?.responseMimeType ??\n params?.responseMimeType ??\n target?.responseMimeType;\n ret.responseSchema =\n options?.responseSchema ?? params?.responseSchema ?? target?.responseSchema;\n ret.responseModalities =\n options?.responseModalities ??\n params?.responseModalities ??\n target?.responseModalities;\n ret.speechConfig = normalizeSpeechConfig(\n options?.speechConfig ?? params?.speechConfig ?? target?.speechConfig\n );\n ret.streaming = options?.streaming ?? params?.streaming ?? target?.streaming;\n const toolChoice = processToolChoice(\n options?.tool_choice,\n options?.allowed_function_names\n );\n if (toolChoice) {\n ret.tool_choice = toolChoice.tool_choice;\n ret.allowed_function_names = toolChoice.allowed_function_names;\n }\n\n const tools = options?.tools;\n if (tools) {\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n ret.tools = convertToGeminiTools(tools as Record<string, any>[]);\n }\n\n if (options?.cachedContent) {\n ret.cachedContent = options.cachedContent;\n }\n\n ret.labels = options?.labels ?? params?.labels ?? target?.labels;\n\n return ret;\n}\n\nexport function modelToFamily(\n modelName: string | undefined\n): VertexModelFamily {\n if (!modelName) {\n return null;\n } else if (isModelGemini(modelName)) {\n return \"gemini\";\n } else if (isModelGemma(modelName)) {\n return \"gemma\";\n } else if (isModelClaude(modelName)) {\n return \"claude\";\n } else {\n return null;\n }\n}\n\nexport function modelToPublisher(modelName: string | undefined): string {\n const family = modelToFamily(modelName);\n switch (family) {\n case \"gemini\":\n case \"gemma\":\n case \"palm\":\n return \"google\";\n\n case \"claude\":\n return \"anthropic\";\n\n default:\n return \"unknown\";\n }\n}\n\nexport function validateModelParams(\n params: GoogleAIModelParams | undefined\n): void {\n const testParams: GoogleAIModelParams = params ?? {};\n const model = testParams.model ?? testParams.modelName;\n switch (modelToFamily(model)) {\n case \"gemini\":\n case \"gemma\": // TODO: Are we sure?\n return validateGeminiParams(testParams);\n\n case \"claude\":\n return validateClaudeParams(testParams);\n\n default:\n throw new Error(\n `Unable to verify model params: ${JSON.stringify(params)}`\n );\n }\n}\n\nexport function copyAndValidateModelParamsInto(\n params: GoogleAIModelParams | undefined,\n target: GoogleAIModelParams\n): GoogleAIModelParams {\n copyAIModelParamsInto(params, undefined, target);\n validateModelParams(target);\n return target;\n}\n"],"mappings":";;;;;;;AAyBA,SAAgB,kBACd,QACA,SAC4B;AAC5B,QAAO,sBAAsB,QAAQ,SAAS,EAAE,CAAC;;AAGnD,SAAS,kBACP,YACA,sBAMY;AACZ,KAAI,CAAC,YAAY;AACf,MAAI,qBAEF,QAAO;GACL,aAAa;GACb,wBAAwB;GACzB;AAEH;;AAGF,KAAI,eAAe,SAAS,eAAe,UAAU,eAAe,OAClE,QAAO;EACL,aAAa;EACb,wBAAwB;EACzB;AAEH,KAAI,OAAO,eAAe,SAGxB,QAAO;EACL,aAAa;EACb,wBAAwB,CAAC,GAAI,wBAAwB,EAAE,EAAG,WAAW;EACtE;AAEH,OAAM,IAAI,MAAM,+CAA+C;;AAGjE,SAAS,aAAa,MAA4C;AAChE,MAAK,MAAM,iBAAiB,qBAC1B,KAAI,iBAAiB,KACnB,QAAO;AAGX,QAAO;;AAGT,SAAS,wBAAwB,MAA4C;AAC3E,QAAO,aAAa,KAAK,IAAI,EAAE,yBAAyB;;AAG1D,SAAgB,qBAAqB,OAAyC;CAC5E,MAAM,cAA4B,EAAE;CACpC,IAAI,4BAA4B;AAChC,OAAM,SAAS,SAAS;AACtB,MAAI,wBAAwB,KAAK,CAC/B,aAAY,KAAK,KAAK;OACjB;AACL,OAAI,8BAA8B,IAAI;AACpC,gBAAY,KAAK,EACf,sBAAsB,EAAE,EACzB,CAAC;AACF,gCAA4B,YAAY,SAAS;;AAEnD,OACE,0BAA0B,QAC1B,MAAM,QAAQ,KAAK,qBAAqB,EACxC;IACA,MAAM,QAAqC,KAAK;AAChD,gBAAY,2BAA2B,qBAAsB,KAC3D,GAAG,MACJ;cACQ,gBAAgB,KAAK,CAC9B,KAAI;IACF,MAAM,aAAa,yBAAyB,KAAK,OAAO;AACxD,gBAAY,2BAA2B,qBAAsB,KAAK;KAChE,MAAM,KAAK;KACX,aAAa,KAAK,eAAe;KACjC,YAAY;KACb,CAAC;YACK,OAAO;IACd,MAAM,eACJ,SAAS,OAAO,UAAU,YAAY,aAAa,QAC/C,OAAO,MAAM,QAAQ,GACrB,OAAO,MAAM;AACnB,UAAM,IAAI,MACR,2BAA2B,KAAK,KAAK,uBAAuB,aAAa,IAC1E;;YAEM,aAAa,KAAK,CAC3B,aAAY,2BAA2B,qBAAsB,KAAK;IAChE,MAAM,KAAK,SAAS;IACpB,aACE,KAAK,SAAS,eAAe;IAC/B,YAAY,6BAA6B,KAAK,SAAS,WAAW;IACnE,CAAC;OAEF,OAAM,IAAI,MAAM,0BAA0B,KAAK,UAAU,KAAK,GAAG;;GAGrE;AACF,QAAO;;AAGT,SAAS,iCACP,YACA,QACoB;AACpB,KAAI,WAAW,KAAA,EACb;CAEF,MAAM,YAAY,KAAK;AACvB,SAAQ,QAAR;EACE,KAAK,MAEH,QAAO;EACT,KAAK,SAEH,QAAO,IAAI;EACb,KAAK,OACH,QAAO;EACT,QACE;;;AAIN,SAAgB,sBACd,QACA,SACA,QAC4B;CAC5B,MAAM,MAAkC,UAAU,EAAE;CACpD,MAAM,QAAQ,SAAS,SAAS,QAAQ,SAAS,OAAO;AACxD,KAAI,YACF,SAAS,SAAS,aAAa,QAAQ,aAAa,OAAO;AAC7D,KAAI,QAAQ;AACZ,KAAI,cACF,SAAS,eAAe,QAAQ,eAAe,OAAO;AACxD,KAAI,kBACF,SAAS,mBACT,QAAQ,mBACR,OAAO;AACT,KAAI,qBACF,SAAS,sBACT,QAAQ,sBACR,QAAQ,sBACR,SAAS,kBACT,QAAQ,kBACR,QAAQ,kBACR,iCAAiC,IAAI,WAAW,QAAQ,gBAAgB,IACxE,iCAAiC,IAAI,WAAW,QAAQ,gBAAgB,IACxE,iCAAiC,IAAI,WAAW,SAAS,gBAAgB;AAC3E,KAAI,OAAO,SAAS,QAAQ,QAAQ,QAAQ,OAAO;AACnD,KAAI,OAAO,SAAS,QAAQ,QAAQ,QAAQ,OAAO;AACnD,KAAI,OAAO,SAAS,QAAQ,QAAQ,QAAQ,OAAO;AACnD,KAAI,kBACF,SAAS,mBACT,QAAQ,mBACR,OAAO;AACT,KAAI,mBACF,SAAS,oBACT,QAAQ,oBACR,OAAO;AACT,KAAI,gBACF,SAAS,iBAAiB,QAAQ,iBAAiB,OAAO;AAC5D,KAAI,iBACF,SAAS,kBAAkB,QAAQ,kBAAkB,OAAO;AAC9D,KAAI,WAAW,SAAS,YAAY,QAAQ,YAAY,OAAO;AAC/D,KAAI,cACF,SAAS,eAAe,QAAQ,eAAe,OAAO;AACxD,KAAI,gBACF,SAAS,iBAAiB,QAAQ,iBAAiB,QAAQ;AAC7D,KAAI,iBACF,SAAS,kBAAkB,QAAQ,kBAAkB,QAAQ;AAC/D,KAAI,qCACF,SAAS,sCACT,QAAQ,sCACR,QAAQ;AACV,KAAI,mBACF,SAAS,oBACT,QAAQ,oBACR,QAAQ;AACV,KAAI,iBACF,SAAS,kBAAkB,QAAQ,kBAAkB,QAAQ;AAC/D,KAAI,qBACF,SAAS,sBACT,QAAQ,sBACR,QAAQ;AACV,KAAI,eAAe,sBACjB,SAAS,gBAAgB,QAAQ,gBAAgB,QAAQ,aAC1D;AACD,KAAI,YAAY,SAAS,aAAa,QAAQ,aAAa,QAAQ;CACnE,MAAM,aAAa,kBACjB,SAAS,aACT,SAAS,uBACV;AACD,KAAI,YAAY;AACd,MAAI,cAAc,WAAW;AAC7B,MAAI,yBAAyB,WAAW;;CAG1C,MAAM,QAAQ,SAAS;AACvB,KAAI,MAEF,KAAI,QAAQ,qBAAqB,MAA+B;AAGlE,KAAI,SAAS,cACX,KAAI,gBAAgB,QAAQ;AAG9B,KAAI,SAAS,SAAS,UAAU,QAAQ,UAAU,QAAQ;AAE1D,QAAO;;AAGT,SAAgB,cACd,WACmB;AACnB,KAAI,CAAC,UACH,QAAO;UACE,cAAc,UAAU,CACjC,QAAO;UACE,aAAa,UAAU,CAChC,QAAO;UACE,cAAc,UAAU,CACjC,QAAO;KAEP,QAAO;;AAIX,SAAgB,iBAAiB,WAAuC;AAEtE,SADe,cAAc,UAAU,EACvC;EACE,KAAK;EACL,KAAK;EACL,KAAK,OACH,QAAO;EAET,KAAK,SACH,QAAO;EAET,QACE,QAAO;;;AAIb,SAAgB,oBACd,QACM;CACN,MAAM,aAAkC,UAAU,EAAE;AAEpD,SAAQ,cADM,WAAW,SAAS,WAAW,UACjB,EAA5B;EACE,KAAK;EACL,KAAK,QACH,QAAO,qBAAqB,WAAW;EAEzC,KAAK,SACH,QAAO,qCAAqB,WAAW;EAEzC,QACE,OAAM,IAAI,MACR,kCAAkC,KAAK,UAAU,OAAO,GACzD;;;AAIP,SAAgB,+BACd,QACA,QACqB;AACrB,uBAAsB,QAAQ,KAAA,GAAW,OAAO;AAChD,qBAAoB,OAAO;AAC3B,QAAO"}
@@ -1 +1 @@
1
- {"version":3,"file":"failed_handler.cjs","names":[],"sources":["../../src/utils/failed_handler.ts"],"sourcesContent":["import { AsyncCallerParams } from \"@langchain/core/utils/async_caller\";\n\nconst STATUS_NO_RETRY = [\n 400,\n 401,\n 402,\n 403,\n 404,\n 405,\n 406,\n 407,\n 408,\n 409, // Conflict\n];\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function failedAttemptHandler(error: any) {\n const status = error?.response?.status ?? 0;\n\n if (status === 0) {\n // What is this?\n console.error(\"failedAttemptHandler\", error);\n throw error;\n }\n\n // What errors shouldn't be retried?\n if (STATUS_NO_RETRY.includes(+status)) {\n throw error;\n }\n}\n\nexport function ensureParams(params?: AsyncCallerParams): AsyncCallerParams {\n const base: AsyncCallerParams = params ?? {};\n return {\n onFailedAttempt: failedAttemptHandler,\n ...base,\n };\n}\n"],"mappings":";AAEA,MAAM,kBAAkB;CACtB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;AAGD,SAAgB,qBAAqB,OAAY;CAC/C,MAAM,SAAS,OAAO,UAAU,UAAU;AAE1C,KAAI,WAAW,GAAG;AAEhB,UAAQ,MAAM,wBAAwB,MAAM;AAC5C,QAAM;;AAIR,KAAI,gBAAgB,SAAS,CAAC,OAAO,CACnC,OAAM;;AAIV,SAAgB,aAAa,QAA+C;AAE1E,QAAO;EACL,iBAAiB;EACjB,GAH8B,UAAU,EAAE;EAI3C"}
1
+ {"version":3,"file":"failed_handler.cjs","names":[],"sources":["../../src/utils/failed_handler.ts"],"sourcesContent":["import { AsyncCallerParams } from \"@langchain/core/utils/async_caller\";\n\nconst STATUS_NO_RETRY = [\n 400,\n 401,\n 402,\n 403,\n 404,\n 405,\n 406,\n 407,\n 408,\n 409, // Conflict\n];\n\n// oxlint-disable-next-line @typescript-eslint/no-explicit-any\nexport function failedAttemptHandler(error: any) {\n const status = error?.response?.status ?? 0;\n\n if (status === 0) {\n // What is this?\n console.error(\"failedAttemptHandler\", error);\n throw error;\n }\n\n // What errors shouldn't be retried?\n if (STATUS_NO_RETRY.includes(+status)) {\n throw error;\n }\n}\n\nexport function ensureParams(params?: AsyncCallerParams): AsyncCallerParams {\n const base: AsyncCallerParams = params ?? {};\n return {\n onFailedAttempt: failedAttemptHandler,\n ...base,\n };\n}\n"],"mappings":";AAEA,MAAM,kBAAkB;CACtB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;AAGD,SAAgB,qBAAqB,OAAY;CAC/C,MAAM,SAAS,OAAO,UAAU,UAAU;AAE1C,KAAI,WAAW,GAAG;AAEhB,UAAQ,MAAM,wBAAwB,MAAM;AAC5C,QAAM;;AAIR,KAAI,gBAAgB,SAAS,CAAC,OAAO,CACnC,OAAM;;AAIV,SAAgB,aAAa,QAA+C;AAE1E,QAAO;EACL,iBAAiB;EACjB,GAH8B,UAAU,EAAE;EAI3C"}