Skip to content

v0.109.0

Choose a tag to compare

@wishborn wishborn released this 07 Jul 06:03

Cache-token visibility across seven more providers

Extends the v0.108.1 usage convention — promptTokens = non-cached input tokens, cacheReadInputTokens reported separately — to every remaining provider whose API exposes prompt_tokens_details.cached_tokens:

  • OpenAI chat_completions path (Text/Structured/Stream) now has cache parity with the Responses path. This also benefits vLLM/LiteLLM-style backends used via api_format: chat_completions.
  • Azure, Groq, Qwen, xAI: cached-token visibility wired up — these providers previously ignored the field entirely.
  • Z.AI and Requesty: fixed genuine double counting in their stream paths (cached tokens were reported in cacheReadInputTokens and left inside promptTokens); their Text/Structured paths gain cache visibility.

If you bill or budget on promptTokens for these providers, note the value no longer includes cached input tokens on cache hits.

Dependency hygiene + new CI gate

  • Directly-used dependencies are now declared: ext-mbstring, ext-openssl, psr/http-message, symfony/http-foundation (all were already installed transitively via laravel/framework — no consumer impact). laravel/mcp is now suggested for the optional LaravelMcpTool.
  • A new composer-require-checker CI workflow fails the build if code uses symbols from undeclared packages.
  • The custom Rector rule no longer ships inside src/ (moved to a dev-only, export-ignored dev/ directory).

Tests

10 new tests (1,884 total): cached-token regression coverage for all seven providers, stream-level SSE fixture tests for Z.AI and Requesty, and the first tests for the Azure provider.

🤖 Generated with Claude Code