📄 ai-sdk/docs/migration-guides/migration-guide-4-2

File: migration-guide-4-2.md | Updated: 11/15/2025

Source: https://ai-sdk.dev/docs/migration-guides/migration-guide-4-2

AI SDK

Menu

v5 (Latest)

AI SDK 5.x

AI SDK by Vercel

AI SDK 6 Beta

Foundations

Overview

Providers and Models

Prompts

Tools

Streaming

Getting Started

Navigating the Library

Next.js App Router

Next.js Pages Router

Svelte

Vue.js (Nuxt)

Node.js

Expo

Agents

Agents

Building Agents

Workflow Patterns

Loop Control

AI SDK Core

Overview

Generating Text

Generating Structured Data

Tool Calling

Model Context Protocol (MCP) Tools

Prompt Engineering

Settings

Embeddings

Image Generation

Transcription

Speech

Language Model Middleware

Provider & Model Management

Error Handling

Testing

Telemetry

AI SDK UI

Overview

Chatbot

Chatbot Message Persistence

Chatbot Resume Streams

Chatbot Tool Usage

Generative User Interfaces

Completion

Object Generation

Streaming Custom Data

Error Handling

Transport

Reading UIMessage Streams

Message Metadata

Stream Protocols

AI SDK RSC

Advanced

Reference

AI SDK Core

AI SDK UI

AI SDK RSC

Stream Helpers

AI SDK Errors

Migration Guides

Versioning

Migrate Your Data to AI SDK 5.0

Migrate AI SDK 4.0 to 5.0

Migrate AI SDK 4.1 to 4.2

Migrate AI SDK 4.0 to 4.1

Migrate AI SDK 3.4 to 4.0

Migrate AI SDK 3.3 to 3.4

Migrate AI SDK 3.2 to 3.3

Migrate AI SDK 3.1 to 3.2

Migrate AI SDK 3.0 to 3.1

Troubleshooting

Copy markdown

Migrate AI SDK 4.1 to 4.2

==================================================================================================================

Check out the AI SDK 4.2 release blog post for more information about the release.

This guide will help you upgrade to AI SDK 4.2:

Stable APIs


The following APIs have been moved to stable and no longer have the experimental_ prefix:

  • customProvider
  • providerOptions (renamed from providerMetadata for provider-specific inputs)
  • providerMetadata (for provider-specific outputs)
  • toolCallStreaming option for streamText

Dependency Versions


AI SDK requires a non-optional zod dependency with version ^3.23.8.

UI Message Parts


In AI SDK 4.2, we've redesigned how useChat handles model outputs with message parts and multiple steps. This is a significant improvement that simplifies rendering complex, multi-modal AI responses in your UI.

What's Changed

Assistant messages with tool calling now get combined into a single message with multiple parts, rather than creating separate messages for each step. This change addresses two key developments in AI applications:

  1. Diverse Output Types: Models now generate more than just text; they produce reasoning steps, sources, and tool calls.
  2. Interleaved Outputs: In multi-step agent use-cases, these different output types are frequently interleaved.

Benefits of the New Approach

Previously, useChat stored different output types separately, which made it challenging to maintain the correct sequence in your UI when these elements were interleaved in a response, and led to multiple consecutive assistant messages when there were tool calls. For example:

message.content = "Final answer: 42";message.reasoning = "First I'll calculate X, then Y...";message.toolInvocations = [{toolName: "calculator", args: {...}}];

This structure was limiting. The new message parts approach replaces separate properties with an ordered array that preserves the exact sequence:

message.parts = [  { type: "text", text: "Final answer: 42" },  { type: "reasoning", reasoning: "First I'll calculate X, then Y..." },  { type: "tool-invocation", toolInvocation: { toolName: "calculator", args: {...} } },];

Migration

Existing applications using the previous message format will need to update their UI components to handle the new parts array. The fields from the previous format are still available for backward compatibility, but we recommend migrating to the new format for better support of multi-modal and multi-step interactions.

You can use the useChat hook with the new message parts as follows:

function Chat() {  const { messages } = useChat();  return (    <div>      {messages.map(message =>        message.parts.map((part, i) => {          switch (part.type) {            case 'text':              return <p key={i}>{part.text}</p>;            case 'source':              return <p key={i}>{part.source.url}</p>;            case 'reasoning':              return <div key={i}>{part.reasoning}</div>;            case 'tool-invocation':              return <div key={i}>{part.toolInvocation.toolName}</div>;            case 'file':              return (                <img                  key={i}                  src={`data:${part.mediaType};base64,${part.data}`}                />              );          }        }),      )}    </div>  );}

On this page

Migrate AI SDK 4.1 to 4.2

Stable APIs

Dependency Versions

UI Message Parts

What's Changed

Benefits of the New Approach

Migration

Deploy and Scale AI Apps with Vercel.

Vercel delivers the infrastructure and developer experience you need to ship reliable AI-powered applications at scale.

Trusted by industry leaders:

  • OpenAI
  • Photoroom
  • leonardo-ai Logoleonardo-ai Logo
  • zapier Logozapier Logo

Talk to an expert