# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
Changelog entries are grouped by type, with the following types:
- `Added` for new features.
- `Changed` for changes in existing functionality.
- `Deprecated` for soon-to-be removed features.
- `Removed` for now removed features.
- `Fixed` for any bug fixes.
- `Security` in case of vulnerabilities.
## [Unreleased] - ReleaseDate
### Added
- Added support for custom HTTP headers in `LanguageModelRequest`, allowing request header injection and overriding provider default headers. by [@gaki2](https://github.com/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 `LanguageModelRequest` and all providers, allowing request body injection and overriding provider default body. by [@gaki2](https://github.com/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 `LanguageModelRequest` and `EmbeddingModelRequest`. 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 `ToolContext` for tools, enabling runtime-aware execution and access to `LanguageModelOptions`.
- Added optional tool stream sender support in `ToolContext`, allowing tools to emit `LanguageModelStreamChunkType` from the tool body.
- Added new `LanguageModelStreamChunkType` chunk types: `ReasoningStart`, `ReasoningDelta`, `ReasoningEnd`, `ToolCallStart`, `ToolCallDelta`, `ToolCallAvailable`, and `ToolCallEnd`
- Added ToolCall progress stream support for vercel-ai-sdk-ui integration.
### Changed
- `ToolExecute` now uses a trait-based executor abstraction internally, allowing both synchronous and asynchronous tool executors behind the same `Tool` API.
- `ToolExecute::call(...)` is now async and must be awaited. This is a breaking change for direct callers of the tool executor API.
- `ToolList::execute(...)` and `ToolExecute::call(...)` is now async, takes `ToolContext` as the first parameter as the first parameter for runtime-aware execution.
- Removed `ToolExecute::new(...)` in favor of the explicit `from_sync(...)` and `from_async(...)` constructors.
- `Start` and `End` language model stream chunk types are now `TextStart` and `TextEnd`.
## [0.5.2] - 2026-02-25
### Fixed
- Fixed `DynamicModel` builder bug where `.model_name(...)` was overwritten on `.build()`, causing empty model IDs.
### Added
- 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)
### Changed
- 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
- Added `EmbeddingModel` trait and `EmbeddingModelRequest` for embedding support across providers
- Added embedding support to `OpenAI` provider
- Added embedding support to `Google` provider
- Added embedding support to `OpenRouter` provider (delegates to OpenAI)
- Added embedding support to `TogetherAI` provider (delegates to OpenAI)
- Added embedding support to `Vercel` provider (delegates to OpenAI)
- Added `openai_compatible` provider.
- 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
- Added `DynamicModel`, `model_name()` methods to set model name dynamically
- Added `Vercel AI Gateway` provider
- Added `OpenRouter` provider
- Added `DeepSeek` provider
- Added `Amazon Bedrock` provider
- Added `TogetherAI` provider
- Added `XAI` provider
### Changed
- Changed Groq provider to use OpenAI's ChatCompletions API
## [0.3.0] - 2025-12-29
### Added
- Added `Messages` type alias for `Vec<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 `Extensions` struct for attaching provider-specific metadata to core SDK structures
- Async accessor methods to `StreamTextResponse` for thread-safe data retrieval (`messages()`, `steps()`, `usage()`, etc.)
- Added `builder()` method for `Tool` for easier construction
- `tool` macro is now re-exported from the main `agentsdk` crate for easier access
- Automatic retry logic with exponential backoff for rate limit errors (429)
### Changed
- 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 `agentsdk::core::tools::ToolExecute` anymore to work with the tool macro
- `LanguageModel` trait now requires `Clone + 'static` bounds (all providers must implement `Clone`)
- Streaming implementation now uses `tokio::sync::mpsc` instead of `std::sync::mpsc`
- Import path for `tool` macro has changed from `use agentsdk_macros::tool` to `use agentsdk::tool`
- `Error::ApiError` now uses a struct with `status_code: Option<StatusCode>` and `details: String` fields
- `LanguageModelResponseContentType::Reasoning` now includes an `extensions` field for provider-specific metadata
### Removed
- Removed the tool macro re-export from `src/core/mod.rs`. User should use `agentsdk_macros::tool` directly
- Removed async-openai dependency
- `Clone` implementation from `LanguageModelRequest<M>`
- `Deref` implementation from `StreamTextResponse` (direct field access no longer works)
### Fixed
- `agentsdk-macros` `#[tool]` function unused variable warning even though it is used
- Anthropic provider API endpoint path corrected from `/messages` to `/v1/messages`
- Anthropic provider serialization/deserialization issues with tool calls
- Stream reliability issues that caused premature termination
## [0.2.1] - 2025-12-02
### Added
- OpenAI provider add verbosity option to default value
## [0.2.0] - 2025-12-02
### Added
- Tooll Call Support
- Hooks (StopWhen, OnStepStart, OnStepFinish) for Language Model Requests
- Reasoning message and configuration options
- Anthropic provider
- Groq provider
### Changed
- Changed standalone (generate_text,stream_text) functions to methods on LanguageModelRequest struct
- Rebranded to agentsdk
[Unreleased]: https://github.com/dineshdb/agentsdk/compare/v0.5.2...HEAD
[0.5.2]: https://github.com/dineshdb/agentsdk/compare/v0.5.1...v0.5.2
[0.5.1]: https://github.com/dineshdb/agentsdk/compare/v0.5.0...v0.5.1
[0.5.0]: https://github.com/dineshdb/agentsdk/compare/v0.4.0...v0.5.0
[0.4.0]: https://github.com/dineshdb/agentsdk/compare/v0.3.0...v0.4.0
[0.3.0]: https://github.com/dineshdb/agentsdk/compare/v0.2.1...v0.3.0
[0.2.1]: https://github.com/dineshdb/agentsdk/compare/v0.2.0...v0.2.1
[0.2.0]: https://github.com/dineshdb/agentsdk/compare/v0.1.0...v0.2.0
[0.1.0]: https://github.com/dineshdb/agentsdk/releases/tag/v0.1.0