v0.109.0
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_completionspath (Text/Structured/Stream) now has cache parity with the Responses path. This also benefits vLLM/LiteLLM-style backends used viaapi_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
cacheReadInputTokensand left insidepromptTokens); 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 vialaravel/framework— no consumer impact).laravel/mcpis now suggested for the optionalLaravelMcpTool. - 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-ignoreddev/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