{"version":3,"file":"message_outputs.mjs","sources":["../../../../../src/llm/anthropic/utils/message_outputs.ts"],"sourcesContent":["/**\n * This util file contains functions for converting Anthropic messages to LangChain messages.\n */\nimport Anthropic from '@anthropic-ai/sdk';\nimport {\n  AIMessage,\n  AIMessageChunk,\n  UsageMetadata,\n} from '@langchain/core/messages';\nimport type { ToolCallChunk } from '@langchain/core/messages/tool';\nimport { ChatGeneration } from '@langchain/core/outputs';\nimport { extractToolCalls } from './output_parsers';\nimport { AnthropicMessageResponse } from '../types';\n\nfunction _isAnthropicCompactionBlock(\n  block: unknown\n): block is Anthropic.Beta.BetaCompactionBlockParam {\n  return (\n    typeof block === 'object' &&\n    block !== null &&\n    'type' in block &&\n    block.type === 'compaction'\n  );\n}\n\nexport function _makeMessageChunkFromAnthropicEvent(\n  data: Anthropic.Beta.Messages.BetaRawMessageStreamEvent,\n  fields: {\n    streamUsage: boolean;\n    coerceContentToString: boolean;\n  }\n): {\n  chunk: AIMessageChunk;\n} | null {\n  if (data.type === 'message_start') {\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    const { content, usage, ...additionalKwargs } = data.message;\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    const filteredAdditionalKwargs: Record<string, any> = {};\n    for (const [key, value] of Object.entries(additionalKwargs)) {\n      if (value !== undefined && value !== null) {\n        filteredAdditionalKwargs[key] = value;\n      }\n    }\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    const { input_tokens, output_tokens, ...rest }: Record<string, any> =\n      usage ?? {};\n    const usageMetadata: UsageMetadata = {\n      input_tokens,\n      output_tokens,\n      total_tokens: input_tokens + output_tokens,\n      input_token_details: {\n        cache_creation: rest.cache_creation_input_tokens,\n        cache_read: rest.cache_read_input_tokens,\n      },\n    };\n    return {\n      chunk: new AIMessageChunk({\n        content: fields.coerceContentToString ? '' : [],\n        additional_kwargs: filteredAdditionalKwargs,\n        usage_metadata: fields.streamUsage ? usageMetadata : undefined,\n        response_metadata: {\n          usage: {\n            ...rest,\n          },\n        },\n        id: data.message.id,\n      }),\n    };\n  } else if (data.type === 'message_delta') {\n    const usageMetadata: UsageMetadata = {\n      input_tokens: 0,\n      output_tokens: data.usage.output_tokens,\n      total_tokens: data.usage.output_tokens,\n      input_token_details: {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        cache_creation: (data.usage as any).cache_creation_input_tokens,\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        cache_read: (data.usage as any).cache_read_input_tokens,\n      },\n    };\n    return {\n      chunk: new AIMessageChunk({\n        content: fields.coerceContentToString ? '' : [],\n        additional_kwargs: { ...data.delta },\n        usage_metadata: fields.streamUsage ? usageMetadata : undefined,\n      }),\n    };\n  } else if (\n    data.type === 'content_block_start' &&\n    [\n      'tool_use',\n      'document',\n      'server_tool_use',\n      'web_search_tool_result',\n    ].includes(data.content_block.type)\n  ) {\n    const contentBlock = data.content_block;\n    let toolCallChunks: ToolCallChunk[];\n    if (contentBlock.type === 'tool_use') {\n      toolCallChunks = [\n        {\n          id: contentBlock.id,\n          index: data.index,\n          name: contentBlock.name,\n          args: '',\n        },\n      ];\n    } else if (contentBlock.type === 'server_tool_use') {\n      // Handle anthropic built-in server tool use (like web search)\n      toolCallChunks = [\n        {\n          id: contentBlock.id,\n          index: data.index,\n          name: contentBlock.name,\n          args: '',\n        },\n      ];\n    } else {\n      toolCallChunks = [];\n    }\n    return {\n      chunk: new AIMessageChunk({\n        content: fields.coerceContentToString\n          ? ''\n          : [\n            {\n              index: data.index,\n              ...data.content_block,\n              input:\n                  contentBlock.type === 'server_tool_use' ||\n                  contentBlock.type === 'tool_use'\n                    ? ''\n                    : undefined,\n            },\n          ],\n        additional_kwargs: {},\n        tool_call_chunks: toolCallChunks,\n      }),\n    };\n  } else if (\n    data.type === 'content_block_delta' &&\n    [\n      'text_delta',\n      'citations_delta',\n      'thinking_delta',\n      'signature_delta',\n    ].includes(data.delta.type)\n  ) {\n    if (fields.coerceContentToString && 'text' in data.delta) {\n      return {\n        chunk: new AIMessageChunk({\n          content: data.delta.text,\n        }),\n      };\n    } else {\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      const contentBlock: Record<string, any> = data.delta;\n      if ('citation' in contentBlock) {\n        contentBlock.citations = [contentBlock.citation];\n        delete contentBlock.citation;\n      }\n      if (\n        contentBlock.type === 'thinking_delta' ||\n        contentBlock.type === 'signature_delta'\n      ) {\n        return {\n          chunk: new AIMessageChunk({\n            content: [{ index: data.index, ...contentBlock, type: 'thinking' }],\n          }),\n        };\n      }\n\n      return {\n        chunk: new AIMessageChunk({\n          content: [{ index: data.index, ...contentBlock, type: 'text' }],\n        }),\n      };\n    }\n  } else if (\n    data.type === 'content_block_delta' &&\n    data.delta.type === 'input_json_delta'\n  ) {\n    return {\n      chunk: new AIMessageChunk({\n        content: fields.coerceContentToString\n          ? ''\n          : [\n            {\n              index: data.index,\n              input: data.delta.partial_json,\n              type: data.delta.type,\n            },\n          ],\n        additional_kwargs: {},\n        tool_call_chunks: [\n          {\n            index: data.index,\n            args: data.delta.partial_json,\n          },\n        ],\n      }),\n    };\n  } else if (\n    data.type === 'content_block_start' &&\n    data.content_block.type === 'text'\n  ) {\n    const content = data.content_block.text;\n    if (content !== undefined) {\n      return {\n        chunk: new AIMessageChunk({\n          content: fields.coerceContentToString\n            ? content\n            : [\n              {\n                index: data.index,\n                ...data.content_block,\n              },\n            ],\n          additional_kwargs: {},\n        }),\n      };\n    }\n  } else if (\n    data.type === 'content_block_start' &&\n    data.content_block.type === 'redacted_thinking'\n  ) {\n    return {\n      chunk: new AIMessageChunk({\n        content: fields.coerceContentToString\n          ? ''\n          : [{ index: data.index, ...data.content_block }],\n      }),\n    };\n  } else if (\n    data.type === 'content_block_start' &&\n    data.content_block.type === 'thinking'\n  ) {\n    const content = data.content_block.thinking;\n    return {\n      chunk: new AIMessageChunk({\n        content: fields.coerceContentToString\n          ? content\n          : [{ index: data.index, ...data.content_block }],\n      }),\n    };\n  } else if (\n    data.type === 'content_block_start' &&\n    _isAnthropicCompactionBlock(data.content_block)\n  ) {\n    return {\n      chunk: new AIMessageChunk({\n        content: fields.coerceContentToString\n          ? ''\n          : [{ index: data.index, ...data.content_block }],\n      }),\n    };\n  } else if (\n    data.type === 'content_block_delta' &&\n    data.delta.type === 'compaction_delta'\n  ) {\n    return {\n      chunk: new AIMessageChunk({\n        content: fields.coerceContentToString\n          ? ''\n          : [\n            {\n              index: data.index,\n              ...data.delta,\n              type: 'compaction',\n            },\n          ],\n      }),\n    };\n  }\n  return null;\n}\n\nexport function anthropicResponseToChatMessages(\n  messages: AnthropicMessageResponse[],\n  additionalKwargs: Record<string, unknown>\n): ChatGeneration[] {\n  const usage: Record<string, number> | null | undefined =\n    additionalKwargs.usage as Record<string, number> | null | undefined;\n  const usageMetadata =\n    usage != null\n      ? {\n        input_tokens: usage.input_tokens ?? 0,\n        output_tokens: usage.output_tokens ?? 0,\n        total_tokens: (usage.input_tokens ?? 0) + (usage.output_tokens ?? 0),\n        input_token_details: {\n          cache_creation: usage.cache_creation_input_tokens,\n          cache_read: usage.cache_read_input_tokens,\n        },\n      }\n      : undefined;\n  if (messages.length === 1 && messages[0].type === 'text') {\n    return [\n      {\n        text: messages[0].text,\n        message: new AIMessage({\n          content: messages[0].text,\n          additional_kwargs: additionalKwargs,\n          usage_metadata: usageMetadata,\n          response_metadata: additionalKwargs,\n          id: additionalKwargs.id as string,\n        }),\n      },\n    ];\n  } else {\n    const toolCalls = extractToolCalls(messages);\n    const generations: ChatGeneration[] = [\n      {\n        text: '',\n        message: new AIMessage({\n          // eslint-disable-next-line @typescript-eslint/no-explicit-any\n          content: messages as any,\n          additional_kwargs: additionalKwargs,\n          tool_calls: toolCalls,\n          usage_metadata: usageMetadata,\n          response_metadata: additionalKwargs,\n          id: additionalKwargs.id as string,\n        }),\n      },\n    ];\n    return generations;\n  }\n}\n"],"names":[],"mappings":"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"}