Skip to content

v0.1.0

Choose a tag to compare

@njbrake njbrake released this 25 Jun 16:22
7e47657

0.1.0 - 2026-06-25

Bug Fixes

  • Add root path bootstrap for migrated test suite by @tbille (742ee21)
  • Fix preserve existing Vary header values in #10 by @tbille (c9700dd)
  • Satisfy lint in platform mode tests and config by @tbille (49c2fbb)
  • Default to platform mode when token is set by @tbille (3aea381)
  • Resolve mypy type errors and regenerate OpenAPI spec by @tbille (85469ad)
  • chat: Map stream-creation errors to 502 + narrow route for mypy by @agpituk (b7078ec)
  • streaming: Bake X-Otari-Request-ID into StreamingResponse headers by @agpituk (100a1d3)
  • api: Normalise naive datetimes from SQLite before tz-aware comparison by @agpituk (8705c11)
  • chat: Duck-type tool_call detection in MCP loop by @agpituk (bdab428)
  • Address Copilot review feedback on PR #63 by @agpituk (6145a7a)
  • Use requested n as fallback for image count in cost calculation by @tbille (cf09b00)
  • Address Copilot review feedback on audio endpoints by @tbille (ba98380)
  • Address Copilot review feedback on PR #65 by @agpituk (8855127)
  • demo: Auto-start a llamafile via $LLAMAFILE_BIN, no home-dir guessing by @agpituk (bb6a6a1)
  • demo: Handle empty model id from /v1/models and fix HF recipe URL by @agpituk (af8af69)
  • chat,sandbox: Address tbille review on PR #65 by @agpituk (1a001c8)
  • deps: Use git source for any-llm-sdk instead of local path by @tbille (ba848ba)
  • Import BatchRequestCounts from canonical module to satisfy mypy attr-defined check by @tbille (6fc7934)
  • Inject provider field into all batch endpoint responses by @tbille (d54e86f)
  • Revert AGENTS.md to main branch version by @tbille (ec0c21d)
  • deps: Use any-llm-sdk from PyPI instead of git branch source by @tbille (fcfa511)
  • Address Copilot review feedback on batch endpoints by @tbille (8e33cc0)
  • Address review feedback on PR #52 by @tbille (ce5d7c9)
  • mypy: Resolve type errors for moderation types and amoderation import by @tbille (ac4c01a)
  • Avoid name redefinition in moderation type shim by @tbille (f291039)
  • Address Copilot review feedback on rerank endpoint by @tbille (6102855)
  • Use direct arerank import now that SDK exports it by @tbille (99bce51)
  • chat: Align mcp-servers resolver status semantics with credentials resolver by @agpituk (e047521)
  • web-search: Address copilot review on PR #72 by @agpituk (64cd537)
  • web-search: Silence init errors for unused searxng engines by @agpituk (c20f170)
  • Add missing type annotations for mypy strict mode by @tbille (040f26a)
  • Address Copilot review feedback on model discovery by @tbille (7af6773)
  • Address remaining Copilot review comments on model discovery by @tbille (ab2829d)
  • chat: Align streaming tool-mode dispatch with tool_mode predicate by @agpituk (934f471)
  • routes: Address Copilot review on PR 1 by @agpituk (615b5c3)
  • messages: Map streaming backend-unreachable errors to 502 by @agpituk (a61fda3)
  • messages: Address Copilot review on PR 2 by @agpituk (c154aaf)
  • responses: Map streaming backend-unreachable errors to 502 by @agpituk (34f89a0)
  • responses: Address Copilot review on PR 3 by @agpituk (3fc34b6)
  • platform: Address Copilot review on PR 4 by @agpituk (c3ab2e0)
  • messages,responses: Streaming provider errors → HTTP error + regen OpenAPI spec by @agpituk (1e3273f)
  • tools: Typecheck + address Copilot review on PR 86 by @agpituk (f9442e7)
  • budget: Close cross-user IDOR, overspend race, and unmetered-usage bypasses by @khaledosman (9b0abbe)
  • ci: Typecheck async-generator aclose + regenerate openapi spec by @khaledosman (69fc2f9)
  • review: Address PR review on budget fix by @khaledosman (5e17af0)
  • review: Harden against negative/zero budget inputs + log estimated cost by @khaledosman (360bbfa)
  • guardrails: Address Copilot review by @agpituk (d134663)
  • demo: Repair guardrails demo_flow /validate formatter by @agpituk (c2d7dc9)
  • messages: Address review on count_tokens endpoint by @khaledosman (691ac52)
  • bootstrap: Keep bootstrap API key on a single log line in #131 by @njbrake (dcf2b00)
  • budget: Refund the reservation on streaming pre-commit provider errors in #129 by @njbrake (b0ee34e)
  • deploy: Dispatch to renamed otari-ai platform repo in #141 by @njbrake (8823fea)
  • sdk-codegen: Type response schemas in serialization mode so reasoning is a string in #145 by @njbrake (55d80f2)
  • files: Bill vision side-calls, harden delete + retention docs by @khaledosman (d849cfe)
  • files: Address review (bare-string Responses input, vision token cap, epoch skew) by @khaledosman (34e642f)
  • docker: Keep python 3.14, bump onnxruntime instead of downgrading in #159 by @njbrake (a83442a)
  • codegen: Name free-form-object union arrays so Go generates valid syntax in #166 by @njbrake (ea973fe)
  • codegen: Map bare empty-schema union members to FreeFormObject in #180 by @njbrake (69af27e)
  • usage: Treat 402 from the usage-report endpoint as non-retryable by @khaledosman (3f9c767)
  • fallback: Treat 404/405/409/410 as retryable so model-unavailable falls through by @agpituk (670165d)
  • fallback: Report each failed attempt when the whole chain is exhausted by @agpituk (039ce8c)
  • fallback: Log dropped inline usage-report failures; drop em dashes in #174 by @khaledosman (14610be)
  • fallback: Report each failed attempt when a streaming chain is exhausted by @agpituk (98be421)
  • fallback: Don't block cancellation or leak the backend stack on all-failed stream in #176 by @khaledosman (ed0978b)
  • fallback: Bound the inline usage-report flush; dedupe all-failed test by @khaledosman (419e19b)

Features

  • Extract gateway runtime into standalone service repo by @tbille (522fe09)
  • Add platform mode startup gating and API surface by @tbille (68e9538)
  • Integrate platform resolve and async usage reporting by @tbille (c491bba)
  • gateway: Add enable_docs config to disable FastAPI docs endpoints by @tbille (786dc75)
  • asyncio: Convert DB layer to async, add budget strategies and log writer by @tbille (3e593b6)
  • pricing: Add effective_at to model_pricing for historical price tracking by @tbille (e1d69b9)
  • gateway: Add GET /v1/usage bulk endpoint with time range filters by @tbille (139fef9)
  • Add POST /v1/responses endpoint for OpenAI Responses API by @tbille (b9b0e59)
  • gateway: Rename API_KEY_HEADER from X-AnyLLM-Key to AnyLLM-Key by @peteski22 (a006df8)
  • gateway: Accept legacy X-AnyLLM-Key header for back-compat by @tbille (a6f00e6)
  • chat: Walk multi-attempt resolve responses with retry on transient errors by @agpituk (08e4370)
  • streaming: First-chunk gate for routing-policy fallback (v1.1) by @agpituk (24e39fe)
  • chat: MCP tool-use loop with streaming support by @agpituk (850be4c)
  • chat: URL safety, content-block rendering, hardened error handling by @agpituk (5724cba)
  • Add POST /v1/images/generations endpoint by @tbille (f99061b)
  • Add POST /v1/audio/transcriptions and /v1/audio/speech endpoints by @tbille (6749d47)
  • chat: Code execution via sandbox container with multi-keyword detection by @agpituk (0df1f89)
  • chat: Resolve workspace-scoped MCP server ids in platform mode by @agpituk (fe8bbf1)
  • chat: Hoist user_token + narrow type guard for platform resolve by @agpituk (3cfbf8a)
  • chat: Web_search tool via SearXNG-compatible backend with content extraction by @agpituk (07c14c0)
  • Auto-discover models from configured providers for /v1/models by @tbille (0c95f3b)
  • chat: Pre-lock-in fallback for tool-loop requests by @agpituk (b4866ce)
  • messages: MCP / sandbox / web_search on /v1/messages by @agpituk (1fa3e47)
  • messages: Wire on_first_response into anthropic_tool_loop by @agpituk (65ce24a)
  • responses: MCP / sandbox / web_search on /v1/responses by @agpituk (92b9aa1)
  • responses: Wire on_first_response into responses_tool_loop by @agpituk (a8bfe78)
  • platform: Platform-mode routing for /v1/messages and /v1/responses by @agpituk (4cc54f8)
  • tools: Explicit otari_* gateway tool shapes (BREAKING) by @agpituk (259a267)
  • demo: --brave flag for the web-search demo by @agpituk (b67b413)
  • guardrails: Request-level guardrails across all endpoints by @agpituk (41bb2a9)
  • guardrails: Default to PIGuard via encoderfile, monitor mode by @agpituk (16632cd)
  • Add CodeRabbit configuration in #110 by @njbrake (f52cdd1)
  • messages: Add /v1/messages/count_tokens for Claude Code support by @khaledosman (2664e11)
  • Add PR template and enforcement workflow in #123 by @njbrake (690996c)
  • sdk-codegen: Emit the rust core as an inlined src/_client module in #136 by @njbrake (aca95e3)
  • sdk-codegen: Coordinate SDK releases with stamped spec version and staleness alert in #137 by @njbrake (3996758)
  • web-search: Per-workspace web-search policy via platform resolve in #144 by @agpituk (a2fc5c8)
  • files: File uploads + document understanding for local models by @khaledosman (56ba31e)
  • api: Derive request schemas from any-llm Params to stop param drift in #160 by @njbrake (d3948a1)
  • web-search: Forward X-Gateway-Token to the search backend in #164 by @agpituk (2ec9053)
  • Generate the changelog and release notes from commits with git-cliff in #162 by @njbrake (c2d3eb2)
  • codegen: Type the image-generation response from any-llm ImagesResponse in #178 by @njbrake (90f4523)
  • sandbox: Forward caller token to the sandbox backend as Bearer auth in #182 by @agpituk (a74c8bf)
  • usage: Forward provider cached-token counts in usage reports in #196 by @tbille (1b6a80e)
  • gateway: Classify upstream provider errors into specific safe responses in #197 by @khaledosman (01df970)
  • deploy: Add Deploy on Railway template scaffold and button in #210 by @njbrake (528c9be)
  • config: Support full provider/pricing config via environment in #211 by @njbrake (022a8dc)
  • pricing: Add genai-prices default pricing fallback in #201 by @njbrake (9880f58)

Other

Performance

Security

New Contributors