All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Changelog entries are grouped by type, with the following types:
Addedfor new features.Changedfor changes in existing functionality.Deprecatedfor soon-to-be removed features.Removedfor now removed features.Fixedfor any bug fixes.Securityin case of vulnerabilities.
Unreleased - ReleaseDate
- Added support for SubAgents
- Added support for custom HTTP headers in
LanguageModelRequest, allowing request header injection and overriding provider default headers. by @gaki2 - Added support for custom HTTP headers in
EmbeddingModelRequest, allowing request header injection and overriding provider default headers. - Add grok-4-20-beta as a model in xAI provider.
- Added support for custom HTTP request body for
LanguageModelRequestand all providers, allowing request body injection and overriding provider default body. by @gaki2 - Added support for custom HTTP request body for
EmbeddingModelRequest, and for all providers, allowing request body injection and overriding provider default body. - Added Provider level HTTP headers to
LanguageModelRequestandEmbeddingModelRequest. allowing request header injection on provider intialization. - Added async tool executor support through
ToolExecute::from_async(...). - Added support for
#[tool] pub async fn ...tool bodies. - Added
ToolContextfor tools, enabling runtime-aware execution and access toLanguageModelOptions. - Added optional tool stream sender support in
ToolContext, allowing tools to emitLanguageModelStreamChunkTypefrom the tool body. - Added new
LanguageModelStreamChunkTypechunk types:ReasoningStart,ReasoningDelta,ReasoningEnd,ToolCallStart,ToolCallDelta,ToolCallAvailable, andToolCallEnd - Added ToolCall progress stream support for vercel-ai-sdk-ui integration.
ToolExecutenow uses a trait-based executor abstraction internally, allowing both synchronous and asynchronous tool executors behind the sameToolAPI.ToolExecute::call(...)is now async and must be awaited. This is a breaking change for direct callers of the tool executor API.ToolList::execute(...)andToolExecute::call(...)is now async, takesToolContextas the first parameter as the first parameter for runtime-aware execution.- Removed
ToolExecute::new(...)in favor of the explicitfrom_sync(...)andfrom_async(...)constructors. StartandEndlanguage model stream chunk types are nowTextStartandTextEnd.
0.5.2 - 2026-02-25
- Fixed
DynamicModelbuilder bug where.model_name(...)was overwritten on.build(), causing empty model IDs.
- Added optional jitter feature flag for backoff jitter (pulls in fastrand)
- Added separate shared connection pools
- Added retry logic for transport-level errors (timeout, connection refused)
- Switched TLS backend from native-tls to rustls (removes OpenSSL dependency)
- Reduced default max_retries from 5 to 3, initial_wait from 1s to 500ms and reduced default max_wait from 30s to 20s
0.5.1 - 2026-02-16
0.5.0 - 2026-02-16
- Added
EmbeddingModeltrait andEmbeddingModelRequestfor embedding support across providers - Added embedding support to
OpenAIprovider - Added embedding support to
Googleprovider - Added embedding support to
OpenRouterprovider (delegates to OpenAI) - Added embedding support to
TogetherAIprovider (delegates to OpenAI) - Added embedding support to
Vercelprovider (delegates to OpenAI) - Added
openai_compatibleprovider. - Added 68 new OpenAI-compatible providers:
- 302ai, abacus, aihubmix, alibaba, alibaba-cn, amazon_bedrock, bailing, baseten, berget, chutes
- cloudflare-ai-gateway, cloudflare-workers-ai, cortecs, deepseek, fastrouter, fireworks-ai, firmware, friendli, github-copilot, github-models
- groq, helicone, huggingface, iflowcn, inception, inference, io-net, jiekou, kuae-cloud-coding-plan, llama, lmstudio
- lucidquery, mistral, moark, modelscope, moonshotai, moonshotai-cn, morph, nano-gpt, nebius, nova
- novita-ai, nvidia, ollama-cloud, opencode, openrouter, ovhcloud, poe, requesty, scaleway, siliconflow
- siliconflow-cn, stackit, stepfun, submodel, synthetic, togetherai, upstage, vercel, vultr, wandb
- xai, xiaomi, zai, zai-coding-plan, zenmux, zhipuai, zhipuai-coding-plan
0.4.0 - 2026-01-24
- Added
DynamicModel,model_name()methods to set model name dynamically - Added
Vercel AI Gatewayprovider - Added
OpenRouterprovider - Added
DeepSeekprovider - Added
Amazon Bedrockprovider - Added
TogetherAIprovider - Added
XAIprovider
- Changed Groq provider to use OpenAI's ChatCompletions API
0.3.0 - 2025-12-29
- Added
Messagestype alias forVec<Message>. - Added seamless integration to work with vercel's ai-sdk-ui.
- Added seamless integration to work with axum + vercel's ai-sdk ui.
- Added Google provider
- Added
Extensionsstruct for attaching provider-specific metadata to core SDK structures - Async accessor methods to
StreamTextResponsefor thread-safe data retrieval (messages(),steps(),usage(), etc.) - Added
builder()method forToolfor easier construction toolmacro is now re-exported from the mainaisdkcrate for easier access- Automatic retry logic with exponential backoff for rate limit errors (429)
- Model capabilities are now enforced at compile time via marker traits, preventing invalid feature usage (e.g., tool calls on unsupported models).
- Updated tool macro to require a return type of
Tool - User does not need to import
aisdk::core::tools::ToolExecuteanymore to work with the tool macro LanguageModeltrait now requiresClone + 'staticbounds (all providers must implementClone)- Streaming implementation now uses
tokio::sync::mpscinstead ofstd::sync::mpsc - Import path for
toolmacro has changed fromuse aisdk_macros::tooltouse aisdk::macros::tool Error::ApiErrornow uses a struct withstatus_code: Option<StatusCode>anddetails: StringfieldsLanguageModelResponseContentType::Reasoningnow includes anextensionsfield for provider-specific metadata
- Removed the tool macro re-export from
src/core/mod.rs. User should useaisdk_macros::tooldirectly - Removed async-openai dependency
Cloneimplementation fromLanguageModelRequest<M>Derefimplementation fromStreamTextResponse(direct field access no longer works)
aisdk-macros#[tool]function unused variable warning even though it is used- Anthropic provider API endpoint path corrected from
/messagesto/v1/messages - Anthropic provider serialization/deserialization issues with tool calls
- Stream reliability issues that caused premature termination
0.2.1 - 2025-12-02
- OpenAI provider add verbosity option to default value
0.2.0 - 2025-12-02
- Tooll Call Support
- Hooks (StopWhen, OnStepStart, OnStepFinish) for Language Model Requests
- Reasoning message and configuration options
- Anthropic provider
- Groq provider
- Changed standalone (generate_text,stream_text) functions to methods on LanguageModelRequest struct
- Rebranded to aisdk