Skip to content
Dashboard

Link to headingAt a Glance

Link to headingBefore You Upgrade

Link to headingDevelop Agents

import { generateText } from 'ai';
const result = await generateText({
model: 'openai/gpt-5.5',
prompt: 'Plan a launch checklist.',
reasoning: 'high',
});

import { ToolLoopAgent } from 'ai';
const agent = new ToolLoopAgent({
model: 'openai/gpt-5.5',
runtimeContext: {
audience: 'developers',
},
prepareStep({ runtimeContext }) {
return {
instructions: `Write for ${runtimeContext.audience}.`,
};
},
});

import { generateText, tool } from 'ai';
import * as z from 'zod/v4';
const result = await generateText({
model: 'openai/gpt-5.5',
tools: {
weather: tool({
inputSchema: z.object({ city: z.string() }),
contextSchema: z.object({ apiKey: z.string() }),
execute: async ({ city }, { context }) =>
getWeather(city, context.apiKey),
}),
},
toolsContext: {
weather: {
apiKey: process.env.WEATHER_API_KEY,
},
},
prompt: 'What is the weather in SF?',
});

import { readFile } from 'node:fs/promises';
import { openai } from '@ai-sdk/openai';
import { streamText, uploadFile } from 'ai';
const { providerReference } = await uploadFile({
api: openai.files(),
data: await readFile('./brief.pdf'),
filename: 'brief.pdf',
});
const result = await streamText({
model: 'openai/gpt-5.5',
messages: [
{
role: 'user',
content: [
{ type: 'text', text: 'Summarize this brief.' },
{
type: 'file',
mediaType: 'application/pdf',
data: providerReference,
},
],
},
],
});

import { readFile } from 'node:fs/promises';
import {
anthropic,
type AnthropicLanguageModelOptions,
} from '@ai-sdk/anthropic';
import { streamText, uploadSkill } from 'ai';
const { providerReference } = await uploadSkill({
api: anthropic.skills(),
files: [
{
path: 'my-skill/SKILL.md',
content: await readFile('./SKILL.md'),
},
],
displayTitle: 'My Skill',
});
const result = await streamText({
model: anthropic('claude-sonnet-4-6'),
prompt: 'Use my-skill to complete the task.',
providerOptions: {
anthropic: {
container: {
skills: [{ type: 'custom', providerReference }],
},
} satisfies AnthropicLanguageModelOptions,
},
});

import { experimental_MCPAppRenderer as MCPAppRenderer } from '@ai-sdk/react';
import { isToolUIPart } from 'ai';
{
messages.map(message =>
message.parts.map(part =>
isToolUIPart(part) ? (
<MCPAppRenderer
key={part.toolCallId}
part={part}
sandbox={{ url: '/mcp-app-sandbox' }}
loadResource={app => fetch(`/api/mcp-apps?uri=${app.resourceUri}`)}
handlers={{ allowedTools: ['refreshDashboard'] }}
/>
) : null,
),
);
}

import { ToolLoopAgent } from 'ai';
import { runAgentTUI } from '@ai-sdk/tui';
const agent = new ToolLoopAgent({
model: 'openai/gpt-5.5',
});
await runAgentTUI({ agent });

Link to headingRun Agents in Production

import { generateText } from 'ai';
const result = await generateText({
model: 'openai/gpt-5.5',
tools: { deleteFile },
toolApproval: {
deleteFile: 'user-approval',
},
prompt: 'Remove stale temporary files.',
});

import { WorkflowAgent } from '@ai-sdk/workflow';
const agent = new WorkflowAgent({
model: 'openai/gpt-5.5',
tools,
runtimeContext: {
userId: 'user_123',
},
});

import { generateText } from 'ai';
const result = await generateText({
model: 'openai/gpt-5.5',
timeout: {
totalMs: 60_000,
stepMs: 10_000,
chunkMs: 2_000,
toolMs: 5_000,
},
prompt: 'Research this issue and summarize it.',
});

import { generateText, tool } from 'ai';
import * as z from 'zod/v4';
const result = await generateText({
model: 'openai/gpt-5.5',
tools: {
runCommand: tool({
inputSchema: z.object({ command: z.string() }),
execute: async ({ command }, { experimental_sandbox }) => {
if (experimental_sandbox == null) {
throw new Error('Sandbox is not available');
}
return experimental_sandbox.run({ command });
},
}),
},
experimental_sandbox: sandbox,
prompt: 'Run the tests and summarize the result.',
});

Link to headingIntegrate Agent Harnesses

import { HarnessAgent } from '@ai-sdk/harness/agent';
import { claudeCode } from '@ai-sdk/harness-claude-code';
import { createVercelSandbox } from '@ai-sdk/sandbox-vercel';
const agent = new HarnessAgent({
harness: claudeCode,
sandbox: createVercelSandbox({ runtime: 'node24' }),
instructions: 'Review the repository and make a small, safe fix.',
});
const result = await agent.generate({
prompt: 'Fix the failing unit test.',
});

Link to headingObserve Agents

import { generateText, registerTelemetry } from 'ai';
import { LangfuseVercelAiSdkIntegration } from '@langfuse/vercel-ai-sdk';
registerTelemetry(new LangfuseVercelAiSdkIntegration());
const result = await generateText({
model: 'openai/gpt-5.5',
prompt: 'Write a launch announcement.',
telemetry: {
functionId: 'launch-copy-agent',
},
});

import { generateText, registerTelemetry } from 'ai';
import { OpenTelemetry } from '@ai-sdk/otel';
registerTelemetry(new OpenTelemetry());
const result = await generateText({
model: 'openai/gpt-5.5',
prompt: 'Write a launch announcement.',
});

import { tracingChannel } from 'node:diagnostics_channel';
import {
AI_SDK_TELEMETRY_TRACING_CHANNEL,
type TelemetryTracingChannelMessage,
} from 'ai';
tracingChannel(AI_SDK_TELEMETRY_TRACING_CHANNEL).subscribe({
start(message) {
const { type, event } = message as TelemetryTracingChannelMessage;
console.log(`AI SDK ${type} started`, event);
},
});

import { generateText } from 'ai';
const result = await generateText({
model: 'openai/gpt-5.5',
prompt: 'Write a launch announcement.',
runtimeContext: {
userId: 'user_123',
feature: 'launch-copy',
},
telemetry: {
includeRuntimeContext: {
userId: true,
feature: true,
},
},
});

import { generateText } from 'ai';
const result = await generateText({
model: 'openai/gpt-5.5',
prompt: 'What changed in AI SDK 7?',
onStart({ callId, modelId }) {
console.log('started', { callId, modelId });
},
onStepEnd({ stepNumber, finishReason, usage }) {
console.log('step finished', { stepNumber, finishReason, usage });
},
onEnd({ usage, finishReason }) {
console.log('finished', { usage, finishReason });
},
});

import { streamText } from 'ai';
const result = streamText({
model: 'openai/gpt-5.5',
prompt: 'Explain partial prerendering in two paragraphs.',
onLanguageModelCallEnd({ usage, performance }) {
console.log({
totalTokens: usage.totalTokens,
responseTimeMs: performance.responseTimeMs,
outputTokensPerSecond: performance.outputTokensPerSecond,
});
},
});

Link to headingBuild Beyond Text

import { gateway } from '@ai-sdk/gateway';
import { experimental_useRealtime } from '@ai-sdk/react';
const realtime = experimental_useRealtime({
model: gateway.experimental_realtime('openai/gpt-realtime-2'),
api: {
token: '/api/realtime/setup',
},
});

import { fal } from '@ai-sdk/fal';
import { experimental_generateVideo } from 'ai';
const { video } = await experimental_generateVideo({
model: fal.video('luma-dream-machine/ray-2'),
prompt: 'A cat walking on a treadmill',
});

import { readFile } from 'node:fs/promises';
import { openai } from '@ai-sdk/openai';
import { generateSpeech, transcribe } from 'ai';
const speech = await generateSpeech({
model: openai.speech('tts-1'),
text: 'Welcome to AI SDK 7.',
});
const { text } = await transcribe({
model: openai.transcription('whisper-1'),
audio: await readFile('meeting.mp3'),
});

Link to headingUI, Streams, and Message Handling

import { DirectChatTransport, useChat } from '@ai-sdk/react';
const { messages, sendMessage } = useChat({
transport: new DirectChatTransport({ agent }),
});

const finalStep = await result.finalStep;
console.log({
totalUsage: await result.usage,
finalStepUsage: finalStep.usage,
});

Link to headingConfigure MCP

Link to headingConfigure Runtime and Packaging

Terminal
npx skills add vercel/ai --skill migrate-ai-sdk-v6-to-v7
npx @ai-sdk/codemod v7

AI Prompt
Use the migrate-ai-sdk-v6-to-v7 skill and migrate my app from AI SDK v6 to v7.

Link to headingComing Out of Experimental

Link to headingRenamed APIs

Link to headingDeprecated APIs

Link to headingOther Migration Themes

Link to headingUpgrade Path

Terminal
npx @ai-sdk/codemod v7

Terminal
npx skills add vercel/ai --skill migrate-ai-sdk-v6-to-v7

Ready to deploy?