UNPKG

@ai-sdk/anthropic

Version:

The **[Anthropic provider](https://ai-sdk.dev/providers/ai-sdk-providers/anthropic)** for the [AI SDK](https://ai-sdk.dev/docs) contains language model support for the [Anthropic Messages API](https://docs.anthropic.com/claude/reference/messages_post).

1,345 lines (1,295 loc) 41.5 kB
import { JSONSchema7 } from '@ai-sdk/provider'; import { InferSchema, lazySchema, zodSchema } from '@ai-sdk/provider-utils'; import { z } from 'zod/v4'; export type AnthropicMessagesPrompt = { system: Array<AnthropicTextContent> | undefined; messages: AnthropicMessage[]; }; export type AnthropicMessage = AnthropicUserMessage | AnthropicAssistantMessage; export type AnthropicCacheControl = { type: 'ephemeral'; ttl?: '5m' | '1h'; }; export interface AnthropicUserMessage { role: 'user'; content: Array< | AnthropicTextContent | AnthropicImageContent | AnthropicDocumentContent | AnthropicToolResultContent >; } export interface AnthropicAssistantMessage { role: 'assistant'; content: Array< | AnthropicTextContent | AnthropicThinkingContent | AnthropicRedactedThinkingContent | AnthropicToolCallContent | AnthropicServerToolUseContent | AnthropicCodeExecutionToolResultContent | AnthropicWebFetchToolResultContent | AnthropicWebSearchToolResultContent | AnthropicToolSearchToolResultContent | AnthropicBashCodeExecutionToolResultContent | AnthropicTextEditorCodeExecutionToolResultContent | AnthropicMcpToolUseContent | AnthropicMcpToolResultContent | AnthropicCompactionContent >; } export interface AnthropicCompactionContent { type: 'compaction'; content: string; cache_control?: AnthropicCacheControl; } export interface AnthropicTextContent { type: 'text'; text: string; cache_control: AnthropicCacheControl | undefined; } export interface AnthropicThinkingContent { type: 'thinking'; thinking: string; signature: string; // Note: thinking blocks cannot be directly cached with cache_control. // They are cached implicitly when appearing in previous assistant turns. cache_control?: never; } export interface AnthropicRedactedThinkingContent { type: 'redacted_thinking'; data: string; // Note: redacted thinking blocks cannot be directly cached with cache_control. // They are cached implicitly when appearing in previous assistant turns. cache_control?: never; } type AnthropicContentSource = | { type: 'base64'; media_type: string; data: string; } | { type: 'url'; url: string; } | { type: 'text'; media_type: 'text/plain'; data: string; }; export interface AnthropicImageContent { type: 'image'; source: AnthropicContentSource; cache_control: AnthropicCacheControl | undefined; } export interface AnthropicDocumentContent { type: 'document'; source: AnthropicContentSource; title?: string; context?: string; citations?: { enabled: boolean }; cache_control: AnthropicCacheControl | undefined; } /** * The caller information for programmatic tool calling. * Present when a tool is called from within code execution. */ export type AnthropicToolCallCaller = | { type: 'code_execution_20250825'; tool_id: string; } | { type: 'code_execution_20260120'; tool_id: string; } | { type: 'direct'; }; export interface AnthropicToolCallContent { type: 'tool_use'; id: string; name: string; input: unknown; /** * Present when this tool call was triggered by a server-executed tool * (e.g., code execution calling a user-defined tool programmatically). */ caller?: AnthropicToolCallCaller; cache_control: AnthropicCacheControl | undefined; } export interface AnthropicServerToolUseContent { type: 'server_tool_use'; id: string; name: | 'web_fetch' | 'web_search' // code execution 20250522: | 'code_execution' // code execution 20250825: | 'bash_code_execution' | 'text_editor_code_execution' // tool search: | 'tool_search_tool_regex' | 'tool_search_tool_bm25'; input: unknown; cache_control: AnthropicCacheControl | undefined; } // Nested content types for tool results (without cache_control) // Sub-content blocks cannot be cached directly according to Anthropic docs type AnthropicNestedTextContent = Omit< AnthropicTextContent, 'cache_control' > & { cache_control?: never; }; type AnthropicNestedImageContent = Omit< AnthropicImageContent, 'cache_control' > & { cache_control?: never; }; type AnthropicNestedDocumentContent = Omit< AnthropicDocumentContent, 'cache_control' > & { cache_control?: never; }; export interface AnthropicToolReferenceContent { type: 'tool_reference'; tool_name: string; } export interface AnthropicToolResultContent { type: 'tool_result'; tool_use_id: string; content: | string | Array< | AnthropicNestedTextContent | AnthropicNestedImageContent | AnthropicNestedDocumentContent | AnthropicToolReferenceContent >; is_error: boolean | undefined; cache_control: AnthropicCacheControl | undefined; } export interface AnthropicWebSearchToolResultContent { type: 'web_search_tool_result'; tool_use_id: string; content: Array<{ url: string; title: string | null; page_age: string | null; encrypted_content: string; type: string; }>; cache_control: AnthropicCacheControl | undefined; } export interface AnthropicToolSearchToolResultContent { type: 'tool_search_tool_result'; tool_use_id: string; content: | { type: 'tool_search_tool_search_result'; tool_references: Array<{ type: 'tool_reference'; tool_name: string; }>; } | { type: 'tool_search_tool_result_error'; error_code: string; }; cache_control: AnthropicCacheControl | undefined; } // code execution results for code_execution_20250522 tool: export interface AnthropicCodeExecutionToolResultContent { type: 'code_execution_tool_result'; tool_use_id: string; content: | { type: 'code_execution_result'; stdout: string; stderr: string; return_code: number; content: Array<{ type: 'code_execution_output'; file_id: string }>; } | { type: 'encrypted_code_execution_result'; encrypted_stdout: string; stderr: string; return_code: number; content: Array<{ type: 'code_execution_output'; file_id: string }>; } | { type: 'code_execution_tool_result_error'; error_code: string; }; cache_control: AnthropicCacheControl | undefined; } // text editor code execution results for code_execution_20250825 tool: export interface AnthropicTextEditorCodeExecutionToolResultContent { type: 'text_editor_code_execution_tool_result'; tool_use_id: string; content: | { type: 'text_editor_code_execution_tool_result_error'; error_code: string; } | { type: 'text_editor_code_execution_create_result'; is_file_update: boolean; } | { type: 'text_editor_code_execution_view_result'; content: string; file_type: string; num_lines: number | null; start_line: number | null; total_lines: number | null; } | { type: 'text_editor_code_execution_str_replace_result'; lines: string[] | null; new_lines: number | null; new_start: number | null; old_lines: number | null; old_start: number | null; }; cache_control: AnthropicCacheControl | undefined; } // bash code execution results for code_execution_20250825 tool: export interface AnthropicBashCodeExecutionToolResultContent { type: 'bash_code_execution_tool_result'; tool_use_id: string; content: | { type: 'bash_code_execution_result'; stdout: string; stderr: string; return_code: number; content: { type: 'bash_code_execution_output'; file_id: string; }[]; } | { type: 'bash_code_execution_tool_result_error'; error_code: string; }; cache_control: AnthropicCacheControl | undefined; } export interface AnthropicWebFetchToolResultContent { type: 'web_fetch_tool_result'; tool_use_id: string; content: | { type: 'web_fetch_result'; url: string; retrieved_at: string | null; content: { type: 'document'; title: string | null; citations?: { enabled: boolean }; source: | { type: 'base64'; media_type: 'application/pdf'; data: string } | { type: 'text'; media_type: 'text/plain'; data: string }; }; } | { type: 'web_fetch_tool_result_error'; error_code: string; }; cache_control: AnthropicCacheControl | undefined; } export interface AnthropicMcpToolUseContent { type: 'mcp_tool_use'; id: string; name: string; server_name: string; input: unknown; cache_control: AnthropicCacheControl | undefined; } export interface AnthropicMcpToolResultContent { type: 'mcp_tool_result'; tool_use_id: string; is_error: boolean; content: string | Array<{ type: 'text'; text: string }>; cache_control: AnthropicCacheControl | undefined; } export type AnthropicTool = | { name: string; description: string | undefined; input_schema: JSONSchema7; cache_control: AnthropicCacheControl | undefined; eager_input_streaming?: boolean; strict?: boolean; /** * When true, this tool is deferred and will only be loaded when * discovered via the tool search tool. */ defer_loading?: boolean; /** * Programmatic tool calling: specifies which server-executed tools * are allowed to call this tool. When set, only the specified callers * can invoke this tool programmatically. * * @example ['code_execution_20250825'] */ allowed_callers?: Array< 'direct' | 'code_execution_20250825' | 'code_execution_20260120' >; } | { type: 'code_execution_20250522'; name: string; cache_control: AnthropicCacheControl | undefined; } | { type: 'code_execution_20250825'; name: string; } | { type: 'code_execution_20260120'; name: string; } | { name: string; type: 'computer_20250124' | 'computer_20241022'; display_width_px: number; display_height_px: number; display_number: number; cache_control: AnthropicCacheControl | undefined; } | { name: string; type: 'computer_20251124'; display_width_px: number; display_height_px: number; display_number: number; enable_zoom?: boolean; cache_control: AnthropicCacheControl | undefined; } | { name: string; type: | 'text_editor_20250124' | 'text_editor_20241022' | 'text_editor_20250429'; cache_control: AnthropicCacheControl | undefined; } | { name: string; type: 'text_editor_20250728'; max_characters?: number; cache_control: AnthropicCacheControl | undefined; } | { name: string; type: 'bash_20250124' | 'bash_20241022'; cache_control: AnthropicCacheControl | undefined; } | { name: string; type: 'memory_20250818'; } | { type: 'web_fetch_20250910' | 'web_fetch_20260209'; name: string; max_uses?: number; allowed_domains?: string[]; blocked_domains?: string[]; citations?: { enabled: boolean }; max_content_tokens?: number; cache_control: AnthropicCacheControl | undefined; } | { type: 'web_search_20250305' | 'web_search_20260209'; name: string; max_uses?: number; allowed_domains?: string[]; blocked_domains?: string[]; user_location?: { type: 'approximate'; city?: string; region?: string; country?: string; timezone?: string; }; cache_control: AnthropicCacheControl | undefined; } | { type: 'tool_search_tool_regex_20251119'; name: string; } | { type: 'tool_search_tool_bm25_20251119'; name: string; }; export type AnthropicSpeed = 'fast' | 'standard'; export type AnthropicToolChoice = | { type: 'auto' | 'any'; disable_parallel_tool_use?: boolean } | { type: 'tool'; name: string; disable_parallel_tool_use?: boolean }; export type AnthropicContainer = { id?: string | null; skills?: Array<{ type: 'anthropic' | 'custom'; skill_id: string; version?: string; }> | null; }; export type AnthropicInputTokensTrigger = { type: 'input_tokens'; value: number; }; export type AnthropicToolUsesTrigger = { type: 'tool_uses'; value: number; }; export type AnthropicContextManagementTrigger = | AnthropicInputTokensTrigger | AnthropicToolUsesTrigger; export type AnthropicClearToolUsesEdit = { type: 'clear_tool_uses_20250919'; trigger?: AnthropicContextManagementTrigger; keep?: { type: 'tool_uses'; value: number; }; clear_at_least?: { type: 'input_tokens'; value: number; }; clear_tool_inputs?: boolean; exclude_tools?: string[]; }; export type AnthropicClearThinkingBlockEdit = { type: 'clear_thinking_20251015'; keep?: 'all' | { type: 'thinking_turns'; value: number }; }; export type AnthropicCompactEdit = { type: 'compact_20260112'; trigger?: AnthropicInputTokensTrigger; pause_after_compaction?: boolean; instructions?: string; }; export type AnthropicContextManagementEdit = | AnthropicClearToolUsesEdit | AnthropicClearThinkingBlockEdit | AnthropicCompactEdit; export type AnthropicContextManagementConfig = { edits: AnthropicContextManagementEdit[]; }; export type AnthropicResponseClearToolUsesEdit = { type: 'clear_tool_uses_20250919'; cleared_tool_uses: number; cleared_input_tokens: number; }; export type AnthropicResponseClearThinkingBlockEdit = { type: 'clear_thinking_20251015'; cleared_thinking_turns: number; cleared_input_tokens: number; }; export type AnthropicResponseCompactEdit = { type: 'compact_20260112'; }; export type AnthropicResponseContextManagementEdit = | AnthropicResponseClearToolUsesEdit | AnthropicResponseClearThinkingBlockEdit | AnthropicResponseCompactEdit; export type AnthropicResponseContextManagement = { applied_edits: AnthropicResponseContextManagementEdit[]; }; // limited version of the schema, focussed on what is needed for the implementation // this approach limits breakages when the API changes and increases efficiency export const anthropicMessagesResponseSchema = lazySchema(() => zodSchema( z.object({ type: z.literal('message'), id: z.string().nullish(), model: z.string().nullish(), content: z.array( z.discriminatedUnion('type', [ z.object({ type: z.literal('text'), text: z.string(), citations: z .array( z.discriminatedUnion('type', [ z.object({ type: z.literal('web_search_result_location'), cited_text: z.string(), url: z.string(), title: z.string(), encrypted_index: z.string(), }), z.object({ type: z.literal('page_location'), cited_text: z.string(), document_index: z.number(), document_title: z.string().nullable(), start_page_number: z.number(), end_page_number: z.number(), }), z.object({ type: z.literal('char_location'), cited_text: z.string(), document_index: z.number(), document_title: z.string().nullable(), start_char_index: z.number(), end_char_index: z.number(), }), ]), ) .optional(), }), z.object({ type: z.literal('thinking'), thinking: z.string(), signature: z.string(), }), z.object({ type: z.literal('redacted_thinking'), data: z.string(), }), z.object({ type: z.literal('compaction'), content: z.string(), }), z.object({ type: z.literal('tool_use'), id: z.string(), name: z.string(), input: z.unknown(), // Programmatic tool calling: caller info when triggered from code execution caller: z .union([ z.object({ type: z.literal('code_execution_20250825'), tool_id: z.string(), }), z.object({ type: z.literal('code_execution_20260120'), tool_id: z.string(), }), z.object({ type: z.literal('direct'), }), ]) .optional(), }), z.object({ type: z.literal('server_tool_use'), id: z.string(), name: z.string(), input: z.record(z.string(), z.unknown()).nullish(), caller: z .union([ z.object({ type: z.literal('code_execution_20260120'), tool_id: z.string(), }), z.object({ type: z.literal('direct'), }), ]) .optional(), }), z.object({ type: z.literal('mcp_tool_use'), id: z.string(), name: z.string(), input: z.unknown(), server_name: z.string(), }), z.object({ type: z.literal('mcp_tool_result'), tool_use_id: z.string(), is_error: z.boolean(), content: z.array( z.union([ z.string(), z.object({ type: z.literal('text'), text: z.string() }), ]), ), }), z.object({ type: z.literal('web_fetch_tool_result'), tool_use_id: z.string(), content: z.union([ z.object({ type: z.literal('web_fetch_result'), url: z.string(), retrieved_at: z.string(), content: z.object({ type: z.literal('document'), title: z.string().nullable(), citations: z.object({ enabled: z.boolean() }).optional(), source: z.union([ z.object({ type: z.literal('base64'), media_type: z.literal('application/pdf'), data: z.string(), }), z.object({ type: z.literal('text'), media_type: z.literal('text/plain'), data: z.string(), }), ]), }), }), z.object({ type: z.literal('web_fetch_tool_result_error'), error_code: z.string(), }), ]), }), z.object({ type: z.literal('web_search_tool_result'), tool_use_id: z.string(), content: z.union([ z.array( z.object({ type: z.literal('web_search_result'), url: z.string(), title: z.string(), encrypted_content: z.string(), page_age: z.string().nullish(), }), ), z.object({ type: z.literal('web_search_tool_result_error'), error_code: z.string(), }), ]), }), // code execution results for code_execution_20250522 tool: z.object({ type: z.literal('code_execution_tool_result'), tool_use_id: z.string(), content: z.union([ z.object({ type: z.literal('code_execution_result'), stdout: z.string(), stderr: z.string(), return_code: z.number(), content: z .array( z.object({ type: z.literal('code_execution_output'), file_id: z.string(), }), ) .optional() .default([]), }), z.object({ type: z.literal('encrypted_code_execution_result'), encrypted_stdout: z.string(), stderr: z.string(), return_code: z.number(), content: z .array( z.object({ type: z.literal('code_execution_output'), file_id: z.string(), }), ) .optional() .default([]), }), z.object({ type: z.literal('code_execution_tool_result_error'), error_code: z.string(), }), ]), }), // bash code execution results for code_execution_20250825 tool: z.object({ type: z.literal('bash_code_execution_tool_result'), tool_use_id: z.string(), content: z.discriminatedUnion('type', [ z.object({ type: z.literal('bash_code_execution_result'), content: z.array( z.object({ type: z.literal('bash_code_execution_output'), file_id: z.string(), }), ), stdout: z.string(), stderr: z.string(), return_code: z.number(), }), z.object({ type: z.literal('bash_code_execution_tool_result_error'), error_code: z.string(), }), ]), }), // text editor code execution results for code_execution_20250825 tool: z.object({ type: z.literal('text_editor_code_execution_tool_result'), tool_use_id: z.string(), content: z.discriminatedUnion('type', [ z.object({ type: z.literal('text_editor_code_execution_tool_result_error'), error_code: z.string(), }), z.object({ type: z.literal('text_editor_code_execution_view_result'), content: z.string(), file_type: z.string(), num_lines: z.number().nullable(), start_line: z.number().nullable(), total_lines: z.number().nullable(), }), z.object({ type: z.literal('text_editor_code_execution_create_result'), is_file_update: z.boolean(), }), z.object({ type: z.literal( 'text_editor_code_execution_str_replace_result', ), lines: z.array(z.string()).nullable(), new_lines: z.number().nullable(), new_start: z.number().nullable(), old_lines: z.number().nullable(), old_start: z.number().nullable(), }), ]), }), // tool search tool results for tool_search_tool_regex_20251119 and tool_search_tool_bm25_20251119: z.object({ type: z.literal('tool_search_tool_result'), tool_use_id: z.string(), content: z.union([ z.object({ type: z.literal('tool_search_tool_search_result'), tool_references: z.array( z.object({ type: z.literal('tool_reference'), tool_name: z.string(), }), ), }), z.object({ type: z.literal('tool_search_tool_result_error'), error_code: z.string(), }), ]), }), ]), ), stop_reason: z.string().nullish(), stop_sequence: z.string().nullish(), usage: z.looseObject({ input_tokens: z.number(), output_tokens: z.number(), cache_creation_input_tokens: z.number().nullish(), cache_read_input_tokens: z.number().nullish(), iterations: z .array( z.object({ type: z.union([z.literal('compaction'), z.literal('message')]), input_tokens: z.number(), output_tokens: z.number(), }), ) .nullish(), }), container: z .object({ expires_at: z.string(), id: z.string(), skills: z .array( z.object({ type: z.union([z.literal('anthropic'), z.literal('custom')]), skill_id: z.string(), version: z.string(), }), ) .nullish(), }) .nullish(), context_management: z .object({ applied_edits: z.array( z.union([ z.object({ type: z.literal('clear_tool_uses_20250919'), cleared_tool_uses: z.number(), cleared_input_tokens: z.number(), }), z.object({ type: z.literal('clear_thinking_20251015'), cleared_thinking_turns: z.number(), cleared_input_tokens: z.number(), }), z.object({ type: z.literal('compact_20260112'), }), ]), ), }) .nullish(), }), ), ); // limited version of the schema, focused on what is needed for the implementation // this approach limits breakages when the API changes and increases efficiency export const anthropicMessagesChunkSchema = lazySchema(() => zodSchema( z.discriminatedUnion('type', [ z.object({ type: z.literal('message_start'), message: z.object({ id: z.string().nullish(), model: z.string().nullish(), role: z.string().nullish(), usage: z.looseObject({ input_tokens: z.number(), cache_creation_input_tokens: z.number().nullish(), cache_read_input_tokens: z.number().nullish(), }), // Programmatic tool calling: content may be pre-populated for deferred tool calls content: z .array( z.discriminatedUnion('type', [ z.object({ type: z.literal('tool_use'), id: z.string(), name: z.string(), input: z.unknown(), caller: z .union([ z.object({ type: z.literal('code_execution_20250825'), tool_id: z.string(), }), z.object({ type: z.literal('code_execution_20260120'), tool_id: z.string(), }), z.object({ type: z.literal('direct'), }), ]) .optional(), }), ]), ) .nullish(), stop_reason: z.string().nullish(), container: z .object({ expires_at: z.string(), id: z.string(), }) .nullish(), }), }), z.object({ type: z.literal('content_block_start'), index: z.number(), content_block: z.discriminatedUnion('type', [ z.object({ type: z.literal('text'), text: z.string(), }), z.object({ type: z.literal('thinking'), thinking: z.string(), }), z.object({ type: z.literal('tool_use'), id: z.string(), name: z.string(), // Programmatic tool calling: input may be present directly for deferred tool calls input: z.record(z.string(), z.unknown()).optional(), // Programmatic tool calling: caller info when triggered from code execution caller: z .union([ z.object({ type: z.literal('code_execution_20250825'), tool_id: z.string(), }), z.object({ type: z.literal('code_execution_20260120'), tool_id: z.string(), }), z.object({ type: z.literal('direct'), }), ]) .optional(), }), z.object({ type: z.literal('redacted_thinking'), data: z.string(), }), z.object({ type: z.literal('compaction'), content: z.string().nullish(), }), z.object({ type: z.literal('server_tool_use'), id: z.string(), name: z.string(), input: z.record(z.string(), z.unknown()).nullish(), caller: z .union([ z.object({ type: z.literal('code_execution_20260120'), tool_id: z.string(), }), z.object({ type: z.literal('direct'), }), ]) .optional(), }), z.object({ type: z.literal('mcp_tool_use'), id: z.string(), name: z.string(), input: z.unknown(), server_name: z.string(), }), z.object({ type: z.literal('mcp_tool_result'), tool_use_id: z.string(), is_error: z.boolean(), content: z.array( z.union([ z.string(), z.object({ type: z.literal('text'), text: z.string() }), ]), ), }), z.object({ type: z.literal('web_fetch_tool_result'), tool_use_id: z.string(), content: z.union([ z.object({ type: z.literal('web_fetch_result'), url: z.string(), retrieved_at: z.string(), content: z.object({ type: z.literal('document'), title: z.string().nullable(), citations: z.object({ enabled: z.boolean() }).optional(), source: z.union([ z.object({ type: z.literal('base64'), media_type: z.literal('application/pdf'), data: z.string(), }), z.object({ type: z.literal('text'), media_type: z.literal('text/plain'), data: z.string(), }), ]), }), }), z.object({ type: z.literal('web_fetch_tool_result_error'), error_code: z.string(), }), ]), }), z.object({ type: z.literal('web_search_tool_result'), tool_use_id: z.string(), content: z.union([ z.array( z.object({ type: z.literal('web_search_result'), url: z.string(), title: z.string(), encrypted_content: z.string(), page_age: z.string().nullish(), }), ), z.object({ type: z.literal('web_search_tool_result_error'), error_code: z.string(), }), ]), }), // code execution results for code_execution_20250522 tool: z.object({ type: z.literal('code_execution_tool_result'), tool_use_id: z.string(), content: z.union([ z.object({ type: z.literal('code_execution_result'), stdout: z.string(), stderr: z.string(), return_code: z.number(), content: z .array( z.object({ type: z.literal('code_execution_output'), file_id: z.string(), }), ) .optional() .default([]), }), z.object({ type: z.literal('encrypted_code_execution_result'), encrypted_stdout: z.string(), stderr: z.string(), return_code: z.number(), content: z .array( z.object({ type: z.literal('code_execution_output'), file_id: z.string(), }), ) .optional() .default([]), }), z.object({ type: z.literal('code_execution_tool_result_error'), error_code: z.string(), }), ]), }), // bash code execution results for code_execution_20250825 tool: z.object({ type: z.literal('bash_code_execution_tool_result'), tool_use_id: z.string(), content: z.discriminatedUnion('type', [ z.object({ type: z.literal('bash_code_execution_result'), content: z.array( z.object({ type: z.literal('bash_code_execution_output'), file_id: z.string(), }), ), stdout: z.string(), stderr: z.string(), return_code: z.number(), }), z.object({ type: z.literal('bash_code_execution_tool_result_error'), error_code: z.string(), }), ]), }), // text editor code execution results for code_execution_20250825 tool: z.object({ type: z.literal('text_editor_code_execution_tool_result'), tool_use_id: z.string(), content: z.discriminatedUnion('type', [ z.object({ type: z.literal('text_editor_code_execution_tool_result_error'), error_code: z.string(), }), z.object({ type: z.literal('text_editor_code_execution_view_result'), content: z.string(), file_type: z.string(), num_lines: z.number().nullable(), start_line: z.number().nullable(), total_lines: z.number().nullable(), }), z.object({ type: z.literal('text_editor_code_execution_create_result'), is_file_update: z.boolean(), }), z.object({ type: z.literal( 'text_editor_code_execution_str_replace_result', ), lines: z.array(z.string()).nullable(), new_lines: z.number().nullable(), new_start: z.number().nullable(), old_lines: z.number().nullable(), old_start: z.number().nullable(), }), ]), }), // tool search tool results for tool_search_tool_regex_20251119 and tool_search_tool_bm25_20251119: z.object({ type: z.literal('tool_search_tool_result'), tool_use_id: z.string(), content: z.union([ z.object({ type: z.literal('tool_search_tool_search_result'), tool_references: z.array( z.object({ type: z.literal('tool_reference'), tool_name: z.string(), }), ), }), z.object({ type: z.literal('tool_search_tool_result_error'), error_code: z.string(), }), ]), }), ]), }), z.object({ type: z.literal('content_block_delta'), index: z.number(), delta: z.discriminatedUnion('type', [ z.object({ type: z.literal('input_json_delta'), partial_json: z.string(), }), z.object({ type: z.literal('text_delta'), text: z.string(), }), z.object({ type: z.literal('thinking_delta'), thinking: z.string(), }), z.object({ type: z.literal('signature_delta'), signature: z.string(), }), z.object({ type: z.literal('compaction_delta'), content: z.string().nullish(), }), z.object({ type: z.literal('citations_delta'), citation: z.discriminatedUnion('type', [ z.object({ type: z.literal('web_search_result_location'), cited_text: z.string(), url: z.string(), title: z.string(), encrypted_index: z.string(), }), z.object({ type: z.literal('page_location'), cited_text: z.string(), document_index: z.number(), document_title: z.string().nullable(), start_page_number: z.number(), end_page_number: z.number(), }), z.object({ type: z.literal('char_location'), cited_text: z.string(), document_index: z.number(), document_title: z.string().nullable(), start_char_index: z.number(), end_char_index: z.number(), }), ]), }), ]), }), z.object({ type: z.literal('content_block_stop'), index: z.number(), }), z.object({ type: z.literal('error'), error: z.object({ type: z.string(), message: z.string(), }), }), z.object({ type: z.literal('message_delta'), delta: z.object({ stop_reason: z.string().nullish(), stop_sequence: z.string().nullish(), container: z .object({ expires_at: z.string(), id: z.string(), skills: z .array( z.object({ type: z.union([ z.literal('anthropic'), z.literal('custom'), ]), skill_id: z.string(), version: z.string(), }), ) .nullish(), }) .nullish(), }), usage: z.looseObject({ input_tokens: z.number().nullish(), output_tokens: z.number(), cache_creation_input_tokens: z.number().nullish(), cache_read_input_tokens: z.number().nullish(), iterations: z .array( z.object({ type: z.union([z.literal('compaction'), z.literal('message')]), input_tokens: z.number(), output_tokens: z.number(), }), ) .nullish(), }), context_management: z .object({ applied_edits: z.array( z.union([ z.object({ type: z.literal('clear_tool_uses_20250919'), cleared_tool_uses: z.number(), cleared_input_tokens: z.number(), }), z.object({ type: z.literal('clear_thinking_20251015'), cleared_thinking_turns: z.number(), cleared_input_tokens: z.number(), }), z.object({ type: z.literal('compact_20260112'), }), ]), ), }) .nullish(), }), z.object({ type: z.literal('message_stop'), }), z.object({ type: z.literal('ping'), }), ]), ), ); export const anthropicReasoningMetadataSchema = lazySchema(() => zodSchema( z.object({ signature: z.string().optional(), redactedData: z.string().optional(), }), ), ); export type AnthropicReasoningMetadata = InferSchema< typeof anthropicReasoningMetadataSchema >; export type Citation = NonNullable< (InferSchema<typeof anthropicMessagesResponseSchema>['content'][number] & { type: 'text'; })['citations'] >[number];