From f856b07621d15f2322b68693071b3e77c5ff274d Mon Sep 17 00:00:00 2001 From: thewh1teagle <61390950+thewh1teagle@users.noreply.github.com> Date: Wed, 27 Aug 2025 02:52:01 +0300 Subject: [PATCH 1/6] feat: expose convertToAnthropicMessagesPrompt --- packages/anthropic/src/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/anthropic/src/index.ts b/packages/anthropic/src/index.ts index 2581ae4017d3..67c9f5cc87f4 100644 --- a/packages/anthropic/src/index.ts +++ b/packages/anthropic/src/index.ts @@ -4,3 +4,4 @@ export type { AnthropicProvider, AnthropicProviderSettings, } from './anthropic-provider'; +export { convertToAnthropicMessagesPrompt } from './convert-to-anthropic-messages-prompt'; From d6552595e6a6fd49d23c42b7dced2116b9120ee8 Mon Sep 17 00:00:00 2001 From: thewh1teagle <61390950+thewh1teagle@users.noreply.github.com> Date: Wed, 27 Aug 2025 02:53:19 +0300 Subject: [PATCH 2/6] changeset --- .changeset/pudel-dog-bark.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/pudel-dog-bark.md diff --git a/.changeset/pudel-dog-bark.md b/.changeset/pudel-dog-bark.md new file mode 100644 index 000000000000..3326eb4edd94 --- /dev/null +++ b/.changeset/pudel-dog-bark.md @@ -0,0 +1,5 @@ +--- +'@ai-sdk/anthropic': patch +--- + +Export `convertToAnthropicMessagesPrompt` function from '@ai-sdk/anthropic' \ No newline at end of file From 17016a3d9a5c3dbc3eb6ba09ec3b9bc0d0a257fe Mon Sep 17 00:00:00 2001 From: thewh1teagle <61390950+thewh1teagle@users.noreply.github.com> Date: Sat, 13 Sep 2025 01:52:06 +0300 Subject: [PATCH 3/6] docs --- .../01-ai-sdk-providers/05-anthropic.mdx | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/content/providers/01-ai-sdk-providers/05-anthropic.mdx b/content/providers/01-ai-sdk-providers/05-anthropic.mdx index d221f10e06d6..1f75b46a5214 100644 --- a/content/providers/01-ai-sdk-providers/05-anthropic.mdx +++ b/content/providers/01-ai-sdk-providers/05-anthropic.mdx @@ -99,6 +99,41 @@ Anthropic language models can also be used in the `streamText`, `generateObject` instead of streaming it incrementally. +## Converting Messages to Anthropic Format + +You can convert AI SDK messages to Anthropic's native message format using the `convertToAnthropicMessagesPrompt` function. This is useful when you want to use Anthropic's native APIs directly while still using the AI SDK's message format. + +A common use case is leveraging Anthropic's token counting API to estimate costs before making requests: + +```ts +import { convertToAnthropicMessagesPrompt } from '@ai-sdk/anthropic'; +import Anthropic from '@anthropic-ai/sdk'; + +const anthropic = new Anthropic(); + +// Your AI SDK messages +const messages = [ + { role: 'system', content: 'You are a helpful assistant.' }, + { role: 'user', content: 'What is the capital of France?' }, +]; + +// Convert to Anthropic format +const anthropicPrompt = await convertToAnthropicMessagesPrompt({ + prompt: messages, + sendReasoning: false, + warnings: [], +}); + +// Use with Anthropic's native token counting API +const tokenCount = await anthropic.messages.countTokens({ + model: 'claude-3-5-sonnet-20241022', + system: anthropicPrompt.prompt.system, + messages: anthropicPrompt.prompt.messages, +}); + +console.log(`Estimated tokens: ${tokenCount.input_tokens}`); +``` + The following optional provider options are available for Anthropic models: - `sendReasoning` _boolean_ From 600416bcf08d8fcce9e2b03c68e21aff882aa3c7 Mon Sep 17 00:00:00 2001 From: thewh1teagle <61390950+thewh1teagle@users.noreply.github.com> Date: Sat, 13 Sep 2025 01:52:17 +0300 Subject: [PATCH 4/6] prettier --- .changeset/pudel-dog-bark.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/pudel-dog-bark.md b/.changeset/pudel-dog-bark.md index 3326eb4edd94..6307021c37d1 100644 --- a/.changeset/pudel-dog-bark.md +++ b/.changeset/pudel-dog-bark.md @@ -2,4 +2,4 @@ '@ai-sdk/anthropic': patch --- -Export `convertToAnthropicMessagesPrompt` function from '@ai-sdk/anthropic' \ No newline at end of file +Export `convertToAnthropicMessagesPrompt` function from '@ai-sdk/anthropic' From e5c2db6e7c5192cbdacd0cb4fb7bf6d66453e443 Mon Sep 17 00:00:00 2001 From: thewh1teagle <61390950+thewh1teagle@users.noreply.github.com> Date: Sat, 13 Sep 2025 02:02:20 +0300 Subject: [PATCH 5/6] Update content/providers/01-ai-sdk-providers/05-anthropic.mdx Co-authored-by: vercel[bot] <35613825+vercel[bot]@users.noreply.github.com> --- content/providers/01-ai-sdk-providers/05-anthropic.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/providers/01-ai-sdk-providers/05-anthropic.mdx b/content/providers/01-ai-sdk-providers/05-anthropic.mdx index 1f75b46a5214..ff79798e125e 100644 --- a/content/providers/01-ai-sdk-providers/05-anthropic.mdx +++ b/content/providers/01-ai-sdk-providers/05-anthropic.mdx @@ -114,7 +114,7 @@ const anthropic = new Anthropic(); // Your AI SDK messages const messages = [ { role: 'system', content: 'You are a helpful assistant.' }, - { role: 'user', content: 'What is the capital of France?' }, + { role: 'user', content: [{ type: 'text', text: 'What is the capital of France?' }] }, ]; // Convert to Anthropic format From 928bb1222b09c19496d28d04754a91cd120cb5ff Mon Sep 17 00:00:00 2001 From: thewh1teagle <61390950+thewh1teagle@users.noreply.github.com> Date: Sat, 13 Sep 2025 02:31:58 +0300 Subject: [PATCH 6/6] docs --- .../01-ai-sdk-providers/05-anthropic.mdx | 75 ++++++++++--------- 1 file changed, 39 insertions(+), 36 deletions(-) diff --git a/content/providers/01-ai-sdk-providers/05-anthropic.mdx b/content/providers/01-ai-sdk-providers/05-anthropic.mdx index ff79798e125e..52b9e0812a4f 100644 --- a/content/providers/01-ai-sdk-providers/05-anthropic.mdx +++ b/content/providers/01-ai-sdk-providers/05-anthropic.mdx @@ -99,41 +99,6 @@ Anthropic language models can also be used in the `streamText`, `generateObject` instead of streaming it incrementally. -## Converting Messages to Anthropic Format - -You can convert AI SDK messages to Anthropic's native message format using the `convertToAnthropicMessagesPrompt` function. This is useful when you want to use Anthropic's native APIs directly while still using the AI SDK's message format. - -A common use case is leveraging Anthropic's token counting API to estimate costs before making requests: - -```ts -import { convertToAnthropicMessagesPrompt } from '@ai-sdk/anthropic'; -import Anthropic from '@anthropic-ai/sdk'; - -const anthropic = new Anthropic(); - -// Your AI SDK messages -const messages = [ - { role: 'system', content: 'You are a helpful assistant.' }, - { role: 'user', content: [{ type: 'text', text: 'What is the capital of France?' }] }, -]; - -// Convert to Anthropic format -const anthropicPrompt = await convertToAnthropicMessagesPrompt({ - prompt: messages, - sendReasoning: false, - warnings: [], -}); - -// Use with Anthropic's native token counting API -const tokenCount = await anthropic.messages.countTokens({ - model: 'claude-3-5-sonnet-20241022', - system: anthropicPrompt.prompt.system, - messages: anthropicPrompt.prompt.messages, -}); - -console.log(`Estimated tokens: ${tokenCount.input_tokens}`); -``` - The following optional provider options are available for Anthropic models: - `sendReasoning` _boolean_ @@ -720,7 +685,45 @@ respond to questions about it. The PDF file should be passed using the `data` field, and the `mediaType` should be set to `'application/pdf'`. -### Model Capabilities +## Converting Messages to Anthropic Format + +You can convert AI SDK messages to Anthropic's native message format using the `convertToAnthropicMessagesPrompt` function. This is useful when you want to use Anthropic's native APIs directly while still using the AI SDK's message format. + +A common use case is leveraging Anthropic's token counting API to estimate costs before making requests: + +```ts +import { convertToAnthropicMessagesPrompt } from '@ai-sdk/anthropic'; +import Anthropic from '@anthropic-ai/sdk'; + +const anthropic = new Anthropic(); + +// Your AI SDK messages +const messages = [ + { role: 'system', content: 'You are a helpful assistant.' }, + { + role: 'user', + content: [{ type: 'text', text: 'What is the capital of France?' }], + }, +]; + +// Convert to Anthropic format +const anthropicPrompt = await convertToAnthropicMessagesPrompt({ + prompt: messages, + sendReasoning: false, + warnings: [], +}); + +// Use with Anthropic's native token counting API +const tokenCount = await anthropic.messages.countTokens({ + model: 'claude-3-5-sonnet-20241022', + system: anthropicPrompt.prompt.system, + messages: anthropicPrompt.prompt.messages, +}); + +console.log(`Estimated tokens: ${tokenCount.input_tokens}`); +``` + +## Model Capabilities | Model | Image Input | Object Generation | Tool Usage | Computer Use | Web Search | | ---------------------------- | ------------------- | ------------------- | ------------------- | ------------------- | ------------------- |