( systemPrompt: string, messages: Anthropic.Messages.MessageParam[], metadata?: ApiHandlerCreateMessageMetadata, )
| 49 | } |
| 50 | |
| 51 | async *createMessage( |
| 52 | systemPrompt: string, |
| 53 | messages: Anthropic.Messages.MessageParam[], |
| 54 | metadata?: ApiHandlerCreateMessageMetadata, |
| 55 | ): ApiStream { |
| 56 | let stream: AnthropicStream<Anthropic.Messages.RawMessageStreamEvent> |
| 57 | const cacheControl: CacheControlEphemeral = { type: "ephemeral" } |
| 58 | const { |
| 59 | id: modelId, |
| 60 | betas = ["fine-grained-tool-streaming-2025-05-14"], |
| 61 | maxTokens, |
| 62 | temperature, |
| 63 | info, |
| 64 | reasoningBudget, |
| 65 | } = this.getModel() |
| 66 | const thinking = getAnthropicProviderReasoning({ |
| 67 | model: info, |
| 68 | reasoningBudget, |
| 69 | settings: this.options, |
| 70 | }) |
| 71 | |
| 72 | // Filter out non-Anthropic blocks (reasoning, thoughtSignature, etc.) before sending to the API |
| 73 | const sanitizedMessages = filterNonAnthropicBlocks(messages) |
| 74 | |
| 75 | // Add 1M context beta flag if enabled for supported models (Claude Sonnet 4/4.5/4.6, Opus 4.6) |
| 76 | if ( |
| 77 | (modelId === "claude-sonnet-4-20250514" || |
| 78 | modelId === "claude-sonnet-4-5" || |
| 79 | modelId === "claude-sonnet-4-6" || |
| 80 | modelId === "claude-opus-4-6") && |
| 81 | this.options.anthropicBeta1MContext |
| 82 | ) { |
| 83 | betas.push("context-1m-2025-08-07") |
| 84 | } |
| 85 | |
| 86 | const nativeToolParams = { |
| 87 | tools: convertOpenAIToolsToAnthropic(metadata?.tools ?? []), |
| 88 | tool_choice: convertOpenAIToolChoiceToAnthropic(metadata?.tool_choice, metadata?.parallelToolCalls), |
| 89 | } |
| 90 | |
| 91 | switch (modelId) { |
| 92 | case "claude-sonnet-5": |
| 93 | case "claude-sonnet-4-6": |
| 94 | case "claude-sonnet-4-5": |
| 95 | case "claude-sonnet-4-20250514": |
| 96 | case "claude-opus-4-6": |
| 97 | case "claude-opus-4-7": |
| 98 | case "claude-opus-4-8": |
| 99 | case "claude-fable-5": |
| 100 | case "claude-opus-4-5-20251101": |
| 101 | case "claude-opus-4-1-20250805": |
| 102 | case "claude-opus-4-20250514": |
| 103 | case "claude-3-7-sonnet-20250219": |
| 104 | case "claude-3-5-sonnet-20241022": |
| 105 | case "claude-3-5-haiku-20241022": |
| 106 | case "claude-3-opus-20240229": |
| 107 | case "claude-haiku-4-5-20251001": |
| 108 | case "claude-3-haiku-20240307": { |
nothing calls this directly
no test coverage detected