Migrate AI SDK 5.x to 6.0
Learn how to upgrade AI SDK 5.x to 6.0.
Recommended Migration Process
- Backup your project. If you use a versioning control system, make sure all previous versions are committed.
- Upgrade to AI SDK 6.0.
- Follow the breaking changes guide below.
- Verify your project is working as expected.
- Commit your changes.
AI SDK 6.0 Package Versions
You need to update the following packages to the latest versions in your package.json file(s):
aipackage:^6.0.0@ai-sdk/providerpackage:^3.0.0@ai-sdk/provider-utilspackage:^4.0.0@ai-sdk/*packages:^3.0.0
An example upgrade command would be:
Codemods
The AI SDK provides Codemod transformations to help upgrade your codebase when a feature is deprecated, removed, or otherwise changed.
Codemods are transformations that run on your codebase automatically. They allow you to easily apply many changes without having to manually go through every file.
You can run all v6 codemods (v5 → v6 migration) by running the following command from the root of your project:
There is also an npx @ai-sdk/codemod upgrade command, but it runs all
codemods from all versions (v4, v5, and v6). Use v6 when upgrading from v5.
Individual codemods can be run by specifying the name of the codemod:
For example, to run a specific v6 codemod:
Codemods are intended as a tool to help you with the upgrade process. They may not cover all of the changes you need to make. You may need to make additional changes manually.
Codemod Table
| Codemod Name | Description |
|---|---|
rename-text-embedding-to-embedding | Renames textEmbeddingModel to embeddingModel and textEmbedding to embedding on providers |
rename-mock-v2-to-v3 | Renames V2 mock classes from ai/test to V3 (e.g., MockLanguageModelV2 → MockLanguageModelV3) |
rename-tool-call-options-to-tool-execution-options | Renames the ToolCallOptions type to ToolExecutionOptions |
rename-core-message-to-model-message | Renames the CoreMessage type to ModelMessage |
rename-converttocoremessages-to-converttomodelmessages | Renames convertToCoreMessages function to convertToModelMessages |
rename-vertex-provider-metadata-key | Renames google to vertex in providerMetadata and providerOptions for Google Vertex files |
wrap-tomodeloutput-parameter | Wraps toModelOutput parameter in object destructuring (output → { output }) |
add-await-converttomodelmessages | Adds await to convertToModelMessages calls (now async in AI SDK 6) |
AI SDK Core
Experimental_Agent to ToolLoopAgent Class
The Experimental_Agent class has been replaced with the ToolLoopAgent class. Two key changes:
- The
systemparameter has been renamed toinstructions - The default
stopWhenhas changed fromisStepCount(1)toisStepCount(20)
Learn more about building agents.
CoreMessage Removal
The deprecated CoreMessage type and related functions have been removed (PR #10710). Replace convertToCoreMessages with convertToModelMessages.
Use the rename-core-message-to-model-message and
rename-converttocoremessages-to-converttomodelmessages codemods to
automatically update your codebase.
generateObject and streamObject Deprecation
generateObject and streamObject have been deprecated (PR #10754).
They will be removed in a future version.
Use generateText and streamText with an output setting instead.
For streaming structured data, replace streamObject with streamText:
Learn more about generating structured data.
async convertToModelMessages
convertToModelMessages() is async in AI SDK 6 to support async Tool.toModelOutput().
Use the add-await-converttomodelmessages codemod to automatically update
your codebase.
Tool.toModelOutput changes
toModelOutput() receives a parameter object with an output property in AI SDK 6.
In AI SDK 5, the output was the arguments.
Use the wrap-tomodeloutput-parameter codemod to automatically update your
codebase.
Remove name from Function Tool Definitions
Function tool names come from their keys in the tools object. In AI SDK 5, a
name property could pass type checking because it was part of the
provider-defined member of the Tool type, but it did not set the name of a
function tool. The AI SDK 6 types no longer accept the property in a function
tool definition.
Remove name from tool() and use the intended name as the key in the tools
object:
cachedInputTokens and reasoningTokens in LanguageModelUsage Deprecation
cachedInputTokens and reasoningTokens in LanguageModelUsage have been deprecated.
You can replace cachedInputTokens with inputTokenDetails.cacheReadTokens
and reasoningTokens with outputTokenDetails.reasoningTokens.
ToolCallOptions to ToolExecutionOptions Rename
The ToolCallOptions type has been renamed to ToolExecutionOptions
and is now deprecated.
Use the rename-tool-call-options-to-tool-execution-options codemod to
automatically update your codebase.
Per-Tool Strict Mode
Strict mode for tools is now controlled by setting strict on each tool (PR #10817). This enables fine-grained control over strict tool calls, which is important since strict mode depends on the specific tool input schema.
Flexible Tool Content
AI SDK 6 introduces more flexible tool output and result content support (PR #9605), enabling richer tool interactions and better support for complex tool execution patterns.
ToolCallRepairFunction Signature
The system parameter in the ToolCallRepairFunction type now accepts SystemModelMessage in addition to string (PR #10635). This allows for more flexible system message configuration, including provider-specific options like caching.
Embedding Model Method Rename
The textEmbeddingModel and textEmbedding methods on providers have been renamed to embeddingModel and embedding respectively. Additionally, generics have been removed from EmbeddingModel, embed, and embedMany (PR #10592).
Use the rename-text-embedding-to-embedding codemod to automatically update
your codebase.
Warning Logger
AI SDK 6 introduces a warning logger that outputs deprecation warnings and best practice recommendations (PR #8343).
To disable warning logging, set the AI_SDK_LOG_WARNINGS environment variable to false:
Warning Type Unification
Separate warning types for each generation function have been consolidated into a single Warning type exported from the ai package (PR #10631).
Finish reason "unknown" merged into "other"
The unknown finish reason has been removed. It is now returned as other.
AI SDK UI
Tool UI Part Approval States
AI SDK 6 adds approval-requested, approval-responded, and output-denied
to the tool UI part state union. Update exhaustive switch statements and
other state handling to cover the three approval states.
See Tool execution approval for handling approval requests and responses in a chat UI.
Tool UI Part Helper Functions Rename
The tool UI part helper functions have been renamed to better reflect their purpose and to accommodate both static and dynamic tool parts (PR #XXXX).
isToolUIPart → isStaticToolUIPart
The isToolUIPart function has been renamed to isStaticToolUIPart to clarify that it checks for static tool parts only.
isToolOrDynamicToolUIPart → isToolUIPart
The isToolOrDynamicToolUIPart function has been renamed to isToolUIPart. The old name is deprecated but still available.
getToolName → getStaticToolName
The getToolName function has been renamed to getStaticToolName to clarify that it returns the tool name from static tool parts only.
getToolOrDynamicToolName → getToolName
The getToolOrDynamicToolName function has been renamed to getToolName. The old name is deprecated but still available.
Providers
OpenAI
strictJsonSchema Defaults to True
The strictJsonSchema setting for JSON outputs and tool calls is enabled by default (PR #10752). This improves stability and ensures valid JSON output that matches your schema.
However, strict mode is stricter about schema requirements. If you receive schema rejection errors, adjust your schema (for example, use null instead of undefined) or disable strict mode.
structuredOutputs Option Removed from Chat Model
The structuredOutputs provider option has been removed from chat models (PR #10752). Use strictJsonSchema instead.
Azure
Default Provider Uses Responses API
The @ai-sdk/azure provider now uses the Responses API by default when calling azure() (PR #9868). To use the previous Chat Completions API behavior, use azure.chat() instead.
The Responses and Chat Completions APIs have different behavior and defaults.
If you depend on the Chat Completions API, switch your model instance to
azure.chat() and audit your configuration.
Responses API providerMetadata and providerOptions Key
For the Responses API, the @ai-sdk/azure provider now uses azure as the key for providerMetadata and providerOptions instead of openai. The openai key is still supported for providerOptions input, but resulting providerMetadata output now uses azure.
Anthropic
Structured Outputs Mode
Anthropic has introduced native structured outputs for Claude Sonnet 4.5 and later models . The @ai-sdk/anthropic provider now includes a structuredOutputMode option to control how structured outputs are generated (PR #10502).
The available modes are:
'outputFormat': Use Anthropic's nativeoutput_formatparameter'jsonTool': Use a special JSON tool to specify the structured output format'auto'(default): Use'outputFormat'when supported by the model, otherwise fall back to'jsonTool'
Google Vertex
providerMetadata and providerOptions Key
The @ai-sdk/google-vertex provider now uses vertex as the key for providerMetadata and providerOptions instead of google. The google key is still supported for providerOptions input, but resulting providerMetadata output now uses vertex.
Use the rename-vertex-provider-metadata-key codemod to automatically update
your codebase.
ai/test
Mock Classes
V2 mock classes have been removed from the ai/test module. Use the new V3 mock classes instead for testing.
Use the rename-mock-v2-to-v3 codemod to automatically update your codebase.