Skip to content

v0.19.0

Choose a tag to compare

@yuanhao yuanhao released this 25 Sep 12:38
· 259 commits to main since this release
c6a37a5

0.19.0 contains correctness fixes and model updates. It includes breaking changes. CHANGELOG.md gives a migration note for each.

Breaking

  • ThinkingLevel gains XHigh and Max, and is now #[non_exhaustive]. Code that matches on it outside the crate needs a wildcard arm (#171).
  • ModelConfig::cost is now Option<CostConfig>. None means pricing is unknown; a config with every rate at zero means the model is free (#172).
  • AnthropicCompat is now #[non_exhaustive]. Build it with its constructors and builders instead of a struct literal.
  • Claude presets now use native structured outputs (output_config.format). Schemas must follow Anthropic's rules: additionalProperties: false, and no minimum/maxLength.

New models

  • claude_opus_5_5(), claude_fable_5_1()
  • gpt_6_astra(), gpt_6_sol(), gpt_6_luna(). These use the OpenAI Responses API and include pricing for requests over 272K input tokens.
  • ModelConfig::openai_responses()
  • XHigh/Max are sent only to models that accept them. Each preset declares its highest effort level (#176).
  • Gemini 3.x uses thinkingLevel instead of a token budget.
  • xAI Grok now receives the configured reasoning effort.

Fixes

  • Tool arguments: truncated or malformed arguments no longer run the tool with {} (#167).
  • Sub-agent spend now reaches the parent's totals (#173).
  • OpenAI Responses and Azure now collect tool calls (#178).
  • Azure sends requests to its documented v1 endpoint. The old URL was never served, so every request failed. Legacy deployment-style base_urls still work.
  • Structured outputs: prompt_structured now works on Fable 5.1 and Opus 5.5 (#175).
  • Refusals and content-filter stops now report StopReason::Refusal with an explanation, on Responses, Azure and Chat Completions. Tools in a refused turn are not run.
  • Rate limits: HTTP 429 and capacity errors are retried as rate limits instead of being mistaken for context overflow.
  • Usage and cost:
    • Cached and cache-write tokens are billed at their own rates.
    • A cache rate left at 0 bills at the input rate.
    • gpt_5_5 now prices requests over 272K input tokens.
  • DeepSeek: reasoning_content is sent back when the request includes tools, as DeepSeek requires.
  • OpenCode routing: grok-* and muse-spark-* (and gpt-* on Go) are routed to the Responses API.
  • Retired model ids are replaced in examples and docs, and MiniMax moves to api.minimax.io.
  • ThinkingLevel::Off sends no thinking or effort setting on every provider. Models that always think run at their own default level.

Note: this release was verified with unit, mock-server and price-audit tests. It has not been run against a live provider API.