Releases: majiayu000/litellm-rs
Releases · majiayu000/litellm-rs
Release v0.5.0
Changelog
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.
[Unreleased]
[0.5.0] - 2026-04-30
Added
- Merge pull request #412 from majiayu000/feat/provider-model-refresh-2026-04-21
- feat(models): update model catalogs for OpenAI, Anthropic, and Zhipu AI (#388)
- feat(router): add zai prefix alias to zhipu routing
- feat(router): add moonshot/minimax/zhipu dynamic and prefix routing
- feat(router): add atomic routing metrics counters (#376)
- feat(anthropic): add beta headers, structured outputs, and built-in tool types (#324)
- feat(openai): add store/metadata/service_tier params, update image models, mark deprecated (#322)
- feat: replace wildcard re-exports with explicit pub use in lib.rs (#315)
- feat(providers): reject unknown provider type strings with clear error at parse time (#311)
- feat(mistral): add missing params - frequency_penalty, presence_penalty, n, parallel_tool_calls, guardrails (#302)
- feat(core): enable user_management module with stub DB implementations (#296)
- feat: add CI job to compile-check disabled modules (#295)
- feat: enable virtual_keys module with stub database implementations (#292)
- feat(openai): add GPT-5.4 family and fix GPT-4.1 context window (#287)
- feat(gemini): add Gemini 3.1 models, fix systemInstruction and tool call handling (#291)
- feat(mistral): overhaul model catalog with 36+ current models (#290)
- feat: add reasoning_effort parameter and Developer message role for o-series models (#289)
- feat(anthropic): add claude-sonnet-4-6, claude-haiku-4-5; fix opus-4-6 limits and thinking serialization (#288)
- feat(openai-like): forward extra_params to upstream provider (#286)
- feat(config): implement YAML env var substitution in Config::from_file (#285)
- feat(mcp): add lightweight JSON Schema validation for tool arguments (#212) (#232)
- feat(a2a): add periodic health checks and exclude Unknown agents from routing (#213) (#227)
- feat(storage): add cache-aside pattern for API key verification (#207) (#228)
- feat(router): add structured tracing for routing decisions (#229)
- feat(config): add environment variable support for cache/rate-limit/enterprise (#66)
- feat(config): add schema_version field to GatewayConfig (#68)
- feat(examples): add hello example and fix broken bin references (#57)
Fixed
- fix(cli): add gateway release entrypoint
- fix(router): execute with capability-aware deployments
- fix(auth): normalize brute-force lockout keys
- Merge pull request #455 from majiayu000/fix/issue-408-rate-limit-stable-client-key
- fix(rate-limit): ignore untrusted auth headers
- Merge pull request #454 from majiayu000/fix/issue-407-cors-validation-gate
- fix(server): fail fast on invalid cors config
- Merge pull request #453 from majiayu000/fix/issue-409-embedding-array-validation
- fix(embeddings): reject non-string array input
- Merge pull request #452 from majiayu000/fix/issue-413-sdk-chat-model
- fix(sdk): preserve explicit chat model
- Merge pull request #451 from majiayu000/fix/issue-414-vertex-gemini3-models
- fix(vertex-ai): route Gemini 3 models
- Merge pull request #450 from majiayu000/fix/issue-424-gemini-thinking-pricing
- fix(pricing): align Gemini thinking cost
- Merge pull request #449 from majiayu000/fix/issue-436-storage-file-config
- fix(storage): honor configured file storage
- Merge pull request #448 from majiayu000/fix/issue-438-streaming-deployment-lifecycle
- fix(ai): hold deployment leases for streams
- Merge pull request #447 from majiayu000/fix/issue-439-openai-error-envelope
- fix(ai): return OpenAI error envelopes
- Merge pull request #446 from majiayu000/fix/issue-433-filtered-key-pagination
- fix(keys): paginate filtered key listings
- Merge pull request #445 from majiayu000/fix/issue-432-key-admin-promotion
- fix(keys): block non-admin management permission grants
- fix(models): align GPT-5.4 Pro token limits
- Merge pull request #418 from majiayu000/fix/gstack-health-2026-04-24
- fix(deps): address TLS migration review
- Merge pull request #441 from majiayu000/fix/issue-434-key-manager
- Merge pull request #444 from majiayu000/fix/issue-440-virtual-key-persistence
- fix(storage): keep virtual key last-used monotonic
- fix: align Homebrew release automation (#429)
- fix(storage): require explicit sqlite fallback (#442)
- fix: add utility pricing for Gemini flash variants (#425)
- fix(storage): preserve virtual key spend during usage updates
- fix(storage): reject placeholder vector backends (#443)
- fix(storage): avoid virtual key usage races
- fix(keys): bound last used cache
- fix(storage): persist virtual keys
- fix(keys): share key manager across requests
- fix(release): publish gateway binary only (#431)
- fix(deps): eliminate vulnerable TLS and YAML chains
- fix(sdk): wire execute_stream_request to provider dispatch (#396) (#402)
- fix(sdk): parse data URI to extract correct media_type for Anthropic multimodal (#401)
- fix(sdk): implement atomic round-robin rotation in LoadBalancer (#397)
- fix(auth): guard is_admin_route() against prefix confusion (SEC-04) (#393)
- fix(auth): replace prefix match with exact equality in is_public_route (#390)
- fix(errors): replace Box with typed errors at trait boundaries (#384)
- fix(a2a): auto-trigger agent health checks before routing (#381)
- fix(mcp): add optional JSON Schema validation for MCP tool parameters (#380)
- fix(storage): wrap multi-step DB operations in SeaORM transactions (#377)
- fix(storage): add cache-aside invalidation on API key usage write (#378)
- fix(streaming): add CancellationToken to cancel provider streams on client disconnect (#379)
- fix(providers): wire 6 unreachable provider types into factory (#374)
- fix(security): redact sensitive fields in Debug impls for config structs (#369)
- fix(auth): tighten password reset rate limit to 5 requests per 15 minutes (#371)
- fix(rust): add rust-toolchain.toml pinning stable channel (#368)
- fix(router): wire min_requests and success_threshold into circuit breaker (#367)
- fix(providers): implement 5 missing from_config_async branches (#365)
- fix(a2a): replace hardcoded request ID=1 with unique IDs (#361)
- fix(streaming): add VecDeque buffer size limit to prevent OOM (#362)
- fix(responses): address 6 correctness issues from code review (#329)
- fix(responses): resolve CI failures in Responses API implementation (#328)
- fix(macros): remove dead helper functions from provider_config! macro (#321)
- fix(dead_code): resolve 55 of 56 dead_code suppressions (#278) (#320)
- fix(lib): restore FunctionCall and ToolCall to public re-exports (#319)
- fix(errors): replace .unwrap() in production hot paths (#261) (#312)
- fix(openai): update capability lists for GPT-5.4, o3, o4-mini (#274) (#306)
- fix(config): replace hardcoded default string comparison in StorageConfig merge logic (#310)
- fix(config): remove dead hot_reload entries from ConfigPresets (#308)
- fix(core): gate user_management behind storage feature flag (#300)
- fix: deep-merge reasoning object and make effort/max_tokens mutually exclusive (#301)
- fix(openrouter): add HTTP-Referer/X-Title headers and wire reasoning param (#299)
- fix: implement user_management DB ops and wire TeamManager to persistent storage (#298)
- fix: gate virtual_keys module behind gateway feature flag (#294)
- fix: resolve critical TODOs in teams, redis pubsub, and monitoring (#293)
- fix(security): migrate API key hashing to HMAC-SHA256 with server secret (#254)
- fix(auth): implement basic RBAC with admin/user roles in check_permission (#242) (#251)
- fix(security): enforce minimum 32-byte JWT secret length (#240) (#250)
- fix(security): reject empty OAuth allowed_origins instead of permitting all (#241) (#247)
- fix(router): add circular alias and fallback cycle detection (#214) (#234)
- fix(streaming): add idle timeout to SSE streams to prevent zombie connections (#205)
- fix(auth): reject empty JWT secret on startup instead of warn (#204)
- fix(auth): separate access and refresh token verification (#203)
- fix(router): use min_requests and success_threshold in circuit breaker (#200)
- fix(streaming): cancel upstream provider stream on client disconnect (#198)
- fix(provider): add missing from_config_async branches for catalog-covered provider types (#197)
- fix(config): change Redis default to enabled=false (#196)
- fix(streaming): handle SSE errors with proper error events instead of HTTP 200 (#185)
- fix(storage): replace relative ./data path with absolute path in local file storage (#184)
- fix(config): fix boolean merge one-way override in CacheConfig (#183)
- fix(a2a): replace hardcoded request ID=1 with atomic counter (#182)
- fix(config): validate port range to reject values >65535 (#181)
- fix(auth): add input validation for API key creation (#180)
- fix(router): rename CostBased strategy to PriorityBased (#178)
- fix(storage): implement 4 unimplemented S3 methods (#177)
- fix(streaming): add VecDeque buffer capacity limit to prevent OOM (#176)
- fix(security): redact secrets in Debug impl for AuthConfig and ProviderConfig (#175)
- fix(auth): add rate limiting to password reset endpoint (#174)
- fix(storage): replace hardcoded relative SQLite path with platform-aware default_sqlite_path() (#156)
- fix(perf): throttle api_key last_used DB writes to every 5 minutes (#153)
- fix(storage): apply max_connections config to Redis connection pool (#148)
- fix(storage): remove dead BatchOperations referencing nonexistent Database enum (#147)
- fix(security): mask usernames in login log messages to prevent PII leak (#146)
- fix(provider): replace from_f64().unwrap() with safe error handling across providers (#130)
- fix(auth): use transactional reset_password_with_token to eliminate TOCTOU race (#129)
- fix(perf): replace blocking parking_lot::Mutex with tokio::sync::...