NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
npm · #2684 most downloaded on npm
AI SDK by Vercel - build apps like ChatGPT, Claude, Gemini, and more with a single interface for any model using the Vercel AI Gateway or go direct to OpenAI, Anthropic, Google, or any other model provider.
Last release today
06 Oct 2026
Ships on a steady schedule
a new release about every 8 days
Some releases are documented
notes for 27 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
13 years old
1572 releases · first in 2014
Updated dependencies [ af9597b ]
afd5c2a: fix(ai): preserve filename for file parts in convertToModelMessages
One column per quarter.
5434a34 : feat(xai): add missing video provider options
771e74b : chore: enable dead code lint rules
Updated dependencies [ ffb0e76 ]
### Patch Changes - Updated dependencies [893aed6] - @ai-sdk/gateway@1.0.3
Updated dependencies [ 2973485 ]
Updated dependencies [ 0455398 ]
Updated dependencies [ 215b25e ]
Updated dependencies [ 91c2128 ]
1f20dba : feat(xai)!: remove Chat Completions API
e1cbf8a: chore(@ai-sdk/rsc): extract to separate package
a847c3e: chore: rename reasoning to reasoningText etc
13fef90: chore (ai): remove automatic conversion of UI messages to model messages
d964901: - remove setting temperature to 0 by default
null option from DefaultSettingsMiddlewaretemperature and stopSequences in ai to enable middleware changes0a710d8: feat (ui): typed tool parts in ui messages
9ad0484: feat (ai): automatic tool execution error handling
63f9e9b: chore (provider,ai): tools have input/output instead of args,result
ab7ccef: chore (ai): change source ui message parts to source-url
d5f588f: AI SDK 5
ec78cdc: chore (ai): remove "data" UIMessage role
6a83f7d: refactoring (ai): restructure message metadata transfer
db345da: chore (ai): remove exports of internal ui functions
496bbc1: chore (ui): inline/remove ChatRequest type
72d7d72: chore (ai): stable activeTools
40acf9b: feat (ui): introduce ChatStore and ChatTransport
98f25e5: chore (ui): remove managed chat inputs
2d03e19: chore (ai): remove StreamCallbacks.onCompletion
da70d79: chore (ai): remove getUIText helper
c60f895: chore (ai): remove useChat keepLastMessageOnError
0560977: chore (ai): improve consistency of generate text result, stream text result, and step result
9477ebb: chore (ui): remove useAssistant hook (breaking change)
1f55c21: chore (ai): send reasoning to the client by default
e7dc6c7: chore (ai): remove onResponse callback
8b86e99: chore (ai): replace Message with UIMessage
04d5063: chore (ai): rename default provider global to AI_SDK_DEFAULT_PROVIDER
319b989: chore (ai): remove content from ui messages
14c9410: chore: refactor file towards source pattern (spec)
a34eb39: chore (ai): remove data and allowEmptySubmit from ChatRequestOptions
f04fb4a: chore (ai): replace useChat attachments with file ui parts
f7e8bf4: chore (ai): flatten ui message stream parts
257224b: chore (ai): separate TextStreamChatTransport
fd1924b: chore (ai): remove redundant mimeType property
2524fc7: chore (ai): remove ui message toolInvocations property
6fba4c7: chore (ai): remove deprecated experimental_providerMetadata
b4b4bb2: chore (ui): rename experimental_resume to resumeStream
441d042: chore (ui): data stream protocol v2 with SSEs
ef256ed: chore (ai): refactor and use chatstore in svelte
516be5b: ### Move Image Model Settings into generate options
Image Models no longer have settings. Instead, maxImagesPerCall can be passed directly to generateImage(). All other image settings can be passed to providerOptions[provider].
Before
await generateImage({
model: luma.image("photon-flash-1", {
maxImagesPerCall: 5,
pollIntervalMillis: 500,
}),
prompt,
n: 10,
});
After
await generateImage({
model: luma.image("photon-flash-1"),
prompt,
n: 10,
maxImagesPerCall: 5,
providerOptions: {
luma: { pollIntervalMillis: 5 },
},
});
Pull Request: https://github.com/vercel/ai/pull/6180
a662dea: chore (ai): remove sendExtraMessageFields
d884051: feat (ai): simplify default provider setup
e8324c5: feat (ai): add args callbacks to tools
fafc3f2: chore (ai): change file to parts to use urls instead of data
1ed0287: chore (ai): stable sendStart/sendFinish options
c7710a9: chore (ai): rename DataStreamToSSETransformStream to JsonToSseTransformStream
bfbfc4c: feat (ai): streamText/generateText: totalUsage contains usage for all steps. usage is for a single step.
9ae327d: chore (ui): replace chat store concept with chat instances
9315076: chore (ai): rename continueUntil to stopWhen. Rename maxSteps stop condition to isStepCount.
247ee0c: chore (ai): remove steps from tool invocation ui parts
109c0ac: chore (ai): rename id to chatId (in post request, resume request, and useChat)
954aa73: feat (ui): extended regenerate support
33eb499: feat (ai): inject message id in createUIMessageStream
901df02: feat (ui): use UI_MESSAGE generic
4892798: chore (ai): always stream tool calls
c25cbce: feat (ai): use console.error as default error handler for streamText and streamObject
b33ed7a: chore (ai): rename DataStream* to UIMessage*
ed675de: feat (ai): add ui data parts
7bb58d4: chore (ai): restructure prepareRequest
ea7a7c9: feat (ui): UI message metadata
0463011: fix (ai): update source url stream part
dcc549b: remove StreamTextResult.mergeIntoDataStream method rename DataStreamOptions.getErrorMessage to onError add pipeTextStreamToResponse function add createTextStreamResponse function change createDataStreamResponse function to accept a DataStream and not a DataStreamWriter change pipeDataStreamToResponse function to accept a DataStream and not a DataStreamWriter change pipeDataStreamToResponse function to have a single parameter
35fc02c: chore (ui): rename RequestOptions to CompletionRequestOptions
64f6d64: feat (ai): replace maxSteps with continueUntil (generateText)
175b868: chore (ai): rename reasoning UI parts 'reasoning' property to 'text'
60e2c56: feat (ai): restructure chat transports
765f1cd: chore (ai): remove deprecated useChat isLoading helper
cb2b53a: chore (ai): refactor header preparation
e244a78: chore (ai): remove StreamData and mergeStreams
d306260: feat (ai): replace maxSteps with continueUntil (streamText)
4bfe9ec: chore (ai): remove ui message reasoning property
1766ede: chore: rename maxTokens to maxOutputTokens
2877a74: chore (ai): remove ui message data property
1409e13: chore (ai): remove experimental continueSteps
b32e192: chore (ai): rename reasoning to reasoningText, rename reasoningDetails to reasoning (streamText, generateText)
92cb0a2: chore (ai): rename CoreMessage to ModelMessage
2b637d6: chore (ai): rename UIMessageStreamPart to UIMessageChunk
a571d6e: chore(provider-utils): move ToolResultContent to provider-utils
de2d2ab: feat(ai): add provider and provider registry middleware functionality
c22ad54: feat(smooth-stream): chunking callbacks
d88455d: feat (ai): expose http chat transport type
e7fcc86: feat (ai): introduce dynamic tools
da1e6f0: feat (ui): add generics to ui message stream parts
48378b9: fix (ai): send null as tool output when tools return undefined
5d1e3ba: chore (ai): remove provider re-exports
93d53a1: chore (ai): remove cli
e90d45d: chore (rsc): move HANGING_STREAM_WARNING_TIME constant into @ai-sdk/rsc package
b32c141: feat (ai): add array support to stopWhen
bc3109f: chore (ai): push stream-callbacks into langchain/llamaindex adapters
0d9583c: fix (ai): use user-provided media type when available
38ae5cc: feat (ai): export InferUIMessageChunk type
10b21eb: feat(cli): add ai command line interface
9e40cbe: Allow destructuring output and errorText on ToolUIPart type
6909543: feat (ai): support system parameter in Agent constructor
86cfc72: feat (ai): add ignoreIncompleteToolCalls option to convertToModelMessages
377bbcf: fix (ui): tool input can be undefined during input-streaming
d8aeaef: feat(providers/fal): add transcribe
ae77a99: chore (ai): rename text and reasoning chunks in streamText fullstream
4fef487: feat: support for zod v4 for schema validation
All these methods now accept both a zod v4 and zod v3 schemas for validation:
generateObject()streamObject()generateText()experimental_useObject() from @ai-sdk/reactstreamUI() from @ai-sdk/rscb1e3abd: feat (ai): expose ui message stream headers
4f3e637: fix (ui): avoid caching globalThis.fetch in case it is patched by other libraries
14cb3be: chore(providers/llamaindex): extract to separate package
1f6ce57: feat (ai): infer tool call types in the onToolCall callback
16ccfb2: feat (ai): add readUIMessageStream helper
225f087: fix (ai/mcp): prevent mutation of customEnv
ce1d1f3: feat (ai): export mock image, speech, and transcription models
fc0380b: feat (ui): resolvable header, body, credentials in http chat transport
6622441: feat (ai): add static/dynamic toolCalls/toolResults helpers
4048ce3: fix (ai): add tests and examples for openai responses
6c42e56: feat (ai): validate ui stream data chunks
bedb239: chore (ai): make ui stream parts value optional when it's not required
9b4d074: feat(streamObject): add enum support
c8fce91: feat (ai): add experimental Agent abstraction
655cf3c: feat (ui): add onFinish to createUIMessageStream
3e10408: fix(utils/detect-mimetype): add support for detecting id3 tags
d5ae088: feat (ui): add sendAutomaticallyWhen to Chat
ced8eee: feat(ai): re-export zodSchema from main package
c040e2f: fix (ui): inject generated response message id
d3960e3: selectTelemetryAttributes more robustness
faea29f: fix (provider/openai): multi-step reasoning with text
66af894: fix (ai): respect content order in toResponseMessages
332167b: chore (ai): move maxSteps into UseChatOptions
6b1c55c: feat (ai): introduce GLOBAL_DEFAULT_PROVIDER
5a975a4: feat (ui): update Chat tool result submission
507ac1d: fix (ui/react): update messages immediately with the submitted user message
a166433: feat: add transcription with experimental_transcribe
26735b5: chore(embedding-model): add v2 interface
c93a8bc: chore(ai): export AsyncIterableStream type from async-iterable-stream module
0d2c085: feat (ai): support string model ids through gateway
2b9bbcd: feat (ai): improve prompt validation error message
a8c8bd5: feat(embed-many): respect supportsParallelCalls & concurrency
75c3396: fix (ai): handle errors in 2nd streamText doStream call
cb9c9e4: remove deprecated experimental_wrapLanguageModel
9bf7291: chore(providers/openai): enable structuredOutputs by default & switch to provider option
9b0da33: fix (ai): do not send id with start unless specified
28ad69e: fix(react-native): support experimental_attachments without FileList global
0b78e17: chore(ai/generateObject): simplify function signature
20398f2: feat: ai sdk cli documentation + adjusted default model
66962ed: fix(packages): export node10 compatible types
b71fe8d: fix(ai): remove jsondiffpatch dependency
7827a49: fix (ai/core): refactor toResponseMessages to filter out empty string/content
bd8a36c: feat(embedding-model-v2/embedMany): add response body field
d9209ca: fix (image-model): specificationVersion: v1 -> v2
b346545: feat (ai): add data ui part schemas
05d2819: feat: allow zod 4.x as peer dependency
f2b041e: Fix custom fetch in HttpChatTransport
2a62513: Fix error thrown when emptying messages in onError or onFinish
143c55b: feat (ai): export Chat callback types
9301f86: refactor (image-model): rename ImageModelV1 to ImageModelV2
904fa5e: feat (ai/core): add terminateOnError option to readUIMessageStream
0a87932: core (ai): change transcription model mimeType to mediaType
1675396: fix: avoid job executor deadlock when adding tool result
51f497d: feat (ai): step input message modification in prepareStep
cee64b2: fix(otel): change back toolCall attributes of input/output back to args/result for compatibility
f04ffe4: feat (ui): add onData callback to Chat
bc24722: feat (ai): Add finishReason as a promise on StreamObjectResult to match StreamTextResult
b6f9f3c: remove deprecated CoreTool* types
8aa9e20: feat: add speech with experimental_generateSpeech
4617fab: chore(embedding-models): remove remaining settings
8255639: ### Fix use with Google APIs + zod v4's .literal() schema
Before zod@3.25.49, requests to Google's APIs failed due to a missing type in the provided schema. The problem has been resolved for the ai SDK by bumping our zod peer dependencies to ^3.25.49.
pull request: https://github.com/vercel/ai/pull/6609
f81c720: chore(ai): bundle dependencies in CLI binary
cf9af6e: feat (ai): allow sync prepareStep
ee38081: Add support for audio/webm to detect-media-type
2e4f9e4: feat (ai): improved error messages when using gateway
3e3b9df: fix (ai/mcp): better support for zero-argument MCP tools
cda32ba: fix (ai): send start part in correct position in stream (streamText)
48a7606: feat (ai): support changing the system prompt in prepareSteps
cb68df0: feat: add transcription and speech model support to provider registry
db64cbe: fix (provider/openai): multi-step reasoning with tool calls
97c35c0: feat (ui): transient data parts
26695a3: feat (ui): add state for text and reasoning ui message parts
90ac328: fix (ui): tool part metadata support in ui messages
60132dd: fixed date formatting for updated mcp protocol version
4a1e0c8: fix(ai-cli): fix bundling and improve authentication error handling
c6b64a7: feat (ai): allow async prepareRequest on HttpChatTransport
fccf75c: update mcp protocol version
9121250: Expose provider metadata as an attribute on exported OTEL spans
ea27cc6: chore (ai): use JSONValue definition from provider
90ca2b9: feat(ai): Record tool call errors on tool call spans recorded in generateText and streamText.
50f0362: fix (ai): fix experimental sendStart/sendFinish options in streamText
825e8d7: release alpha.5
7d97ab6: release alpha.4
0ff02bb: chore(provider-utils): move over jsonSchema
4f3776c: feat (ai): add InferUITools helper
9338f3e: fix (ai): throw error for v1 models
92c8e66: fix(ai/core): properly handle custom separator in provider registry
53569b8: feat (ai): add experimental repairText function to streamObject
82aa95d: fix (ai): merge data ui stream parts correctly
e7d2ce3: feat: provider-executed tools
add5ac1: feat (ai): make streamText toUIMessageStream async iterable
37a916d: feat (ai): add prepareSteps to streamText
30ac566: fix (ui): text message metadata support in ui messages
8026705: fix (core): send buffered text in smooth stream when stream parts change
9bd5ab5: feat (provider): add providerMetadata to ImageModelV2 interface (#5977)
The experimental_generateImage method from the ai package now returnes revised prompts for OpenAI's image models.
const prompt = "Santa Claus driving a Cadillac";
const { providerMetadata } = await experimental_generateImage({
model: openai.image("dall-e-3"),
prompt,
});
const revisedPrompt = providerMetadata.openai.images[0]?.revisedPrompt;
console.log({
prompt,
revisedPrompt,
});
ec5933d: chore (ai/mcp): add assertCapability method to experimental MCP client
09f41ac: fix (ui): add message metadata in Chat.sendMessage
ff1c81a: feat (ai): add streamText onAbort callback
af1d5a5: fix(ai): Unexpected reasoning-start event in extract reasoning middleware
cb3b9c9: fix (ai): catch errors in ui message stream
86293e5: fix (ai): use correct generateMessageId in streamText toUIMessageStream
d1a034f: feature: using Zod 4 for internal stuff
fd65bc6: chore(embedding-model-v2): rename rawResponse to response
d92b9a8: fix(ai): add support for MCP protocol version 2025-06-18
102b066: fix (ai): fix invalid fetch call
142576e: feat (ui): support message replacement in chat via messageId param on sendMessage
84343eb: fix (ui): call sendAutomaticallyWhen with updated messages
a76a62b: feat (ai): add experimental prepareStep callback to generateText
89ba235: fix (ui): support tool names with dash
8e31d46: feat (ai): export SourceDocumentUIPart
bd398e4: fix (core): improve error handling in streamText's consumeStream method
88a8ee5: fix (ai): support abort during retry waits
205077b: fix: improve Zod compatibility
d91b50d: chore(ui-utils): merge into ai package
e4c8647: feat (ui): allow asynchronous onFinish in createUIMessageStream
c808e4d: fix (ui): do not send changing assistant message ids when onFinish is provided
e862b5b: feat (ai): allow sync tool.execute
395c85e: feat (ai): add consumeSseStream option to UI message stream responses
5bdff05: Removed deprecated options.throwErrorForEmptyVectors from cosineSimilarity(). Since throwErrorForEmptyVectors was the only option the entire options argument was removed.
- cosineSimilarity(vector1, vector2, options)
+cosineSimilarity(vector1, vector2)
13b4f46: feat (ai): export experimental MCPClient and MCPClientConfig interfaces
a4f3007: chore: remove ai/react
8e64e9c: feat (ai): allow using provider default temperature by specifying null
b983b51: feat (ai): support model message array in prompt
56c232b: fix (ai): remove outdated sendStart jsdoc
7324c21: fix (ai/telemetry): Avoid JSON.stringify on Uint8Arrays for telemetry
f10304b: feat(tool-calling): don't require the user to have to pass parameters
dd5fd43: feat (ai): support dynamic tools in Chat onToolCall
a753b3a: feat (provider/anthropic): cache control for tools
383cbfa: feat (ai): add isAborted to onFinish callback for ui message streams
27deb4d: feat (provider/gateway): Add providerMetadata to embeddings response
5f2b3d4: chore (ai): stable prepareStep
4c8f834: feat: automatically respect rate limit headers in retry logic
Added automatic support for respecting rate limit headers (retry-after-ms and retry-after) in the SDK's retry logic. When these headers are present and contain reasonable values (0-60 seconds), the retry mechanism will use the server-specified delay instead of exponential backoff. This matches the behavior of Anthropic and OpenAI client SDKs and improves rate limit handling without requiring any API changes.
f2c7f19: feat (ui): add Chat.clearError()
7bd025b: fix (ai): fix sync tool execute with streamText
Updated dependencies
f7e8bf4: chore (ai): flatten ui message stream parts
start part in correct position in stream (streamText)40acf9b: feat (ui): introduce ChatStore and ChatTransport
765f1cd: chore (ai): remove deprecated useChat isLoading helper
data and allowEmptySubmit from ChatRequestOptionsd964901: - remove setting temperature to 0 by default
d964901: - remove setting temperature to 0 by default
null option from DefaultSettingsMiddlewaretemperature and stopSequences in ai to enable middleware changes0560977: chore (ai): improve consistency of generate text result, stream text result, and step result
516be5b: ### Move Image Model Settings into generate options
Image Models no longer have settings. Instead, maxImagesPerCall can be passed directly to generateImage(). All other image settings can be passed to providerOptions[provider].
Before
await generateImage({
model: luma.image("photon-flash-1", {
maxImagesPerCall: 5,
pollIntervalMillis: 500,
}),
prompt,
n: 10,
});
After
await generateImage({
model: luma.image("photon-flash-1"),
prompt,
n: 10,
maxImagesPerCall: 5,
providerOptions: {
luma: { pollIntervalMillis: 5 },
},
});
Pull Request: https://github.com/vercel/ai/pull/6180
bfbfc4c: feat (ai): streamText/generateText: totalUsage contains usage for all steps. usage is for a single step.
ea7a7c9: feat (ui): UI message metadata
1409e13: chore (ai): remove experimental continueSteps
13fef90: chore (ai): remove automatic conversion of UI messages to model messages
2d03e19: chore (ai): remove StreamCallbacks.onCompletion
c60f895: chore (ai): remove useChat keepLastMessageOnError
f04fb4a: chore (ai): replace useChat attachments with file ui parts
mimeType property9bd5ab5: feat (provider): add providerMetadata to ImageModelV2 interface (#5977)
The experimental_generateImage method from the ai package now returnes revised prompts for OpenAI's image models.
const prompt = "Santa Claus driving a Cadillac";
const { providerMetadata } = await experimental_generateImage({
model: openai.image("dall-e-3"),
prompt,
});
const revisedPrompt = providerMetadata.openai.images[0]?.revisedPrompt;
console.log({
prompt,
revisedPrompt,
});
Updated dependencies
ec78cdc: chore (ai): remove "data" UIMessage role
Message with UIMessageassertCapability method to experimental MCP client4bfe9ec: chore (ai): remove ui message reasoning property
specificationVersion: v1 -> v29bf7291: chore(providers/openai): enable structuredOutputs by default & switch to provider option
14cb3be: chore(providers/llamaindex): extract to separate package
ImageModelV1 to ImageModelV2@ai-sdk/provider@2.0.0-canary.9
8e64e9c: feat (ai): allow using provider default temperature by specifying null
d8aeaef: feat(providers/fal): add transcribe
cb9c9e4: remove deprecated experimental_wrapLanguageModel
experimental_wrapLanguageModelb6f9f3c: remove deprecated CoreTool* types
5d1e3ba: chore (ai): remove provider re-exports
26735b5: chore(embedding-model): add v2 interface
7827a49: fix (ai/core): refactor toResponseMessages to filter out empty string/content
bd8a36c: feat(embedding-model-v2/embedMany): add response body field
b6f9f3c: remove deprecated CoreTool* types
92c8e66: fix(ai/core): properly handle custom separator in provider registry
fd65bc6: chore(embedding-model-v2): rename rawResponse to response
5bdff05: Removed deprecated options.throwErrorForEmptyVectors from cosineSimilarity(). Since throwErrorForEmptyVectors was the only option the entire options argument was removed.
- cosineSimilarity(vector1, vector2, options)
+cosineSimilarity(vector1, vector2)
Updated dependencies
6fba4c7: chore (ai): remove deprecated experimental_providerMetadata
@ai-sdk/provider@2.0.0-canary.4
b71fe8d: fix(ai): remove jsondiffpatch dependency
e1cbf8a: chore(@ai-sdk/rsc): extract to separate package
@ai-sdk/provider@2.0.0-canary.1
bd398e4: fix (core): improve error handling in streamText's consumeStream method
b7eae2d: feat (core): Add finishReason field to NoObjectGeneratedError
9477ebb: chore (ui): remove useAssistant hook (breaking change)
53569b8: feat (ai): add experimental repairText function to streamObject
48378b9: fix (ai): send null as tool output when tools return undefined
bc24722: feat (ai): Add finishReason as a promise on StreamObjectResult to match StreamTextResult
6622441: feat (ai): add static/dynamic toolCalls/toolResults helpers
### Patch Changes - Updated dependencies [fedb55e] - @ai-sdk/gateway@1.0.0-beta.16
e7fcc86: feat (ai): introduce dynamic tools
84343eb: fix (ui): call sendAutomaticallyWhen with updated messages
d5ae088: feat (ui): add sendAutomaticallyWhen to Chat
ae77a99: chore (ai): rename text and reasoning chunks in streamText fullstream
onToolCall callback### Patch Changes - Updated dependencies - @ai-sdk/gateway@1.0.0-beta.11
add5ac1: feat (ai): make streamText toUIMessageStream async iterable
89ba235: fix (ui): support tool names with dash
de2d2ab: feat(ai): add provider and provider registry middleware functionality
38ae5cc: feat (ai): export InferUIMessageChunk type
4c8f834: feat: automatically respect rate limit headers in retry logic
4c8f834: feat: automatically respect rate limit headers in retry logic
Added automatic support for respecting rate limit headers (retry-after-ms and retry-after) in the SDK's retry logic. When these headers are present and contain reasonable values (0-60 seconds), the retry mechanism will use the server-specified delay instead of exponential backoff. This matches the behavior of Anthropic and OpenAI client SDKs and improves rate limit handling without requiring any API changes.
10b21eb: feat(cli): add ai command line interface
d3960e3: selectTelemetryAttributes more robustness
### Patch Changes - Updated dependencies [c190907] - @ai-sdk/gateway@1.0.0-beta.7
### Patch Changes - Updated dependencies [9e16bfd] - @ai-sdk/gateway@1.0.0-beta.6
8e31d46: feat (ai): export SourceDocumentUIPart
### Patch Changes - Updated dependencies [30ab1de] - @ai-sdk/gateway@1.0.0-beta.5
377bbcf: fix (ui): tool input can be undefined during input-streaming
fc0380b: feat (ui): resolvable header, body, credentials in http chat transport
9e40cbe: Allow destructuring output and errorText on ToolUIPart type
ToolUIPart typeYour coding agent can read these notes before it upgrades. Set up the MCP server →