v0.104.0 — Batch 3: features
Nine upstream feature PRs absorbed (upstream prism-php/prism refs):
Anthropic
- prism-php#998 adaptive thinking (
thinking.type: adaptive) + output effort (output_config.effort) - prism-php#1003
pause_turnresume loop;refusalresolves gracefully withFinishReason::Refusal - prism-php#988 fine-grained tool streaming (
eager_input_streaming)
Cross-provider
- prism-php#1018 provider-agnostic
withReasoning()toggle (Anthropic, Gemini, OpenAI, Ollama, OpenRouter, Perplexity) - prism-php#951 Batching + Files APIs for Anthropic and OpenAI (
Prism::batch(),Prism::files()) — with a fork fix making the Anthropic payload-size guard config-overridable (prism.anthropic.batch.max_payload_bytes) so it is actually testable
New capabilities & providers
- prism-php#1014 Mistral FIM (fill-in-the-middle) —
Prism::fim() - prism-php#960 xAI image generation
- prism-php#978 Google Vertex AI provider (text, structured, streaming, embeddings) — with a fork fix repairing the GOOGLE_APPLICATION_CREDENTIALS fallback (a no-op ternary meant the env path was never used)
- prism-php#1026 Requesty provider — with fork fixes: removed the duplicate ToolMap parameters key (the prism-php#1004 bug pattern), graceful unknown finish reasons (prism-php#996 convention), and a backfilled test suite (the PR shipped none)
Deferred
- prism-php#932 (client-executed tools + human-in-the-loop approval) — touches every provider's handlers and predates three batches of drift; needs a dedicated rebase. Tracked separately.
Suite: 1713 passing, PHPStan clean.