symfony/ai-platform
PHP library for interacting with AI platform provider.
v0.12.0
1.8M downloads/mo
#1724 most downloaded on Packagist
symfony/ai-platform
What this package is like to depend on
Last release 1 months ago
21 Jul 2026
Ships fairly regularly
a new release about every 3 weeks
Most releases are documented
notes for 10 of 13 stable releases
Nothing withdrawn
no release was ever pulled
8 months old
13 releases · first in 2025
11 releases in the last 12 months
see the full history below
Release timeline
11 releases · Dec 2025 to Jul 2026Releases
latest 13-
v0.12.021 Jul 2026Release notes
Open source →Changelog (v0.11.0...v0.12.0)
- feature #2317 Let the model router select the model, not just the provider (@chr-hertel)
- feature #2336 Report malformed OpenResponses tool arguments (@fabpot)
-
v0.11.015 Jul 2026Release notes
Open source →Changelog (v0.10.0...v0.11.0)
- feature #2290 Normalize finish_reason metadata across all bridges (@chr-hertel)
- feature #2316 Allow attaching metadata to tools (@chr-hertel)
- feature #2314 Allow scoping generated JSON Schema to serializer groups (@chr-hertel)
- feature #2304 Add MessageBag::isLastMessageFrom() and use it in demo chats (@chr-hertel)
- feature #2291 Add an exception is the
response_formatoption looks like a class, but is not (@lyrixx) - feature #2281 Throw when an Anthropic stream is truncated at the max output token limit (@fabpot)
- bug #2289 Fix parallel tool calls being dropped (@chr-hertel)
- feature #2276 Fix #2194: expose streamed finish_reason as metadata (@ineersa)
- bug #2254 Add queries in case the model issued multiple searches in a single call (@push-mann)
- feature #2248 Convert OpenAI Responses built-in tool output items to typed results (@OskarStark)
- bug #2232 Fix asObject() after partial consumption of streamed structured output (@chr-hertel)
- feature #2116 Add streaming support for structured output (@wachterjohannes)
- bug #2230 Always batch embeddings, drop catalog coupling (@chr-hertel)
- feature #2224 Replace retired OpenAI DALL-E with gpt-image (rename bridge to Image, add editing) (@chr-hertel)
- feature #2222 Add ResultConvertedEvent and ResultErrorEvent (@chr-hertel)
- bug #2226 Fix PHPStan errors in Schema attribute and TypeInfoDescriber (@wachterjohannes)
- feature #1463 Add support for
MiniMax(@Guikingone) - feature #2024 Add # with SchemaProviderInterface for runtime JSON Schema fragments (@camilleislasse, @alpernuage, @chr-hertel)
- feature #2115 Add DeferredResult::asPartialJsonStream() for streaming structured output (@wachterjohannes)
- bug #2206 Add a retryable ServerException for transient 5xx and Anthropic overloaded errors (@fabpot)
- feature #2212 Add multimodal tool results for Anthropic, Vertex, Bedrock (@fabpot)
- feature #2161 Add OCR support via the /v1/ocr endpoint (@tacman, @chr-hertel)
- feature #2123 Add Mock test provider for routing-aware, any-result-type mocks (@wachterjohannes, @chr-hertel)
- feature #2113 Add PartialJsonParser for streaming structured output (@wachterjohannes)
- minor #2101 Make AGENTS.md the canonical AI-agent guidance, slim CLAUDE.md (@wachterjohannes)
- bug #2174 Move unsupported schema features to
description(@valtzu)
-
v0.10.016 Jun 2026Release notes
Open source →Changelog (v0.9.0...v0.10.0)
- bug #2170 Parse SSE streams that omit the text/event-stream content type (@fabpot)
- feature #2185 Add MessageBag::withoutToolMessages() and use it in demo chats (@chr-hertel)
- bug #2184 Throw ModelNotFoundException on 404 responses (@chr-hertel)
- bug #2163 Replace malformed UTF-8 in request bodies instead of abort… (@fabpot)
- bug #2162 Fix incomplete stream terminal events (@fabpot)
- bug #2009 Mutate the message bag in place in SystemPromptInputProcessor / MemoryInputProcessor (@Amoifr, @chr-hertel)
- feature #2139 Accept Model instance in Platform::invoke() (@chr-hertel)
- feature #2117 Support cache_control on system prompt block (@4lxndr)
- bug #2138 Fix red CI: gpt-5.5-pro capabilities mismatch and class_exists() on Validator interface (@chr-hertel)
-
v0.9.015 May 2026Release notes
Open source →Changelog (v0.8.0...v0.9.0)
- feature #2015 Add tool-call trace metadata for ClaudeCode and Codex bridges (@wachterjohannes)
- bug #2071 Capability insert ollama platform fix (@vkost)
- bug #2067 Surface API error message on RateLimitExceededException (@chr-hertel)
- bug #2033 Data Collector - Fix bug that re-throws Exception (@MolloKhan)
- bug #2032 Fix structured output for reasoning models (@chr-hertel)
- feature #2060 Follow-up fixes for AssistantMessage rework (@chr-hertel)
- feature #1917 Add Support for Multiple System Messages (@MolloKhan)
- bug #2031 Fix JSONSchema generation with CPP &
@var(@HypeMC) - feature #2002 Validate structured output (@valtzu)
-
v0.8.120 Apr 2026Release notes
Open source →Changelog (v0.8.0...v0.8.1)
- bug #1982 Align model catalog with official docs (@wachterjohannes)
- bug #1981 Fix tool calls dropped (@Tiriel)
- bug #1980 Gemini call after a tool action fail (@froozeify)
-
v0.8.0no dateRelease notes
Open source →Changelog (v0.7.0...v0.8.0)
- feature #1968 Expose API errors uniformly across bridges through a shared trait (@Amoifr)
- feature #1923 Introduce Provider abstraction and model routing layer (@chr-hertel)
- feature #1970 Add Google Maps server tool (@valtzu)
- feature #1557 Add support for DiscriminatorMap on single polymorphic interface parameters (@aszenz)
- feature #1896 Add speech-to-text support and update model catalog (@wachterjohannes)
- feature #1907 Add
refto#attribute (@valtzu) - feature #1937 Return
MultiPartResultfor multi-part responses (@valtzu) - feature #1948 Return
MultiPartResultfor multi-part results (@valtzu) - feature #1947 Add Gemini 3 and 3.1 flash (@NielsAI)
- feature #1900 Add
MultiPartResult(@valtzu) - bug #1938 Fix binary result handling (@valtzu)
- bug #1939 Fix model catalog referencing wrong bridge (@valtzu)
-
v0.7.009 Apr 2026Release notes
Open source →Changelog (v0.6.0...v0.7.0)
- feature #1908 Add model list command and sync catalog with Bedrock API (@chr-hertel)
- bug #1912 Fix various examples (@chr-hertel)
- bug #1909 Add error handling to Client and LlamaResultConverter (@chr-hertel)
- bug #1899 Revert logic of SseStream to fix Gemini and Perplexity (@chr-hertel)
- bug #1827 Fix streaming by handling NDJSON instead of SSE (@wachterjohannes)
- feature #1735 Add native bridge for chat, embeddings, and reranking (@wachterjohannes)
- bug #1895 Fix test failures in Codex bridge (@chr-hertel)
- feature #1826 Add Codex CLI platform bridge (@wachterjohannes)
- bug #1888 Remove prefix for ScopingHttpClient (@Guikingone)
- feature #1884 Add ThinkingStart and Anthropic example (@chr-hertel)
- feature #1849 Add reasoning content streaming support (@Amoifr)
- bug #1883 Fix Elevenlabs ModelCatalog and streaming (@chr-hertel)
- bug #1863 Add support for audio capability in ModelCatalog to use Gemma4 which has audio capability built in (@digitaldreams, @chr-hertel)
- bug #1862 Fix interleaved reasoning in CompletionsConversionTrait (@ineersa)
- feature #943 Introduce
Speechsupport (@Guikingone, @chr-hertel) - feature #1851 Add token usage extraction for embeddings (@Amoifr)
- bug #1855 Add reasoning_content serialization to AssistantMessageNormalizer (@ineersa)
- feature #1759 Replace untyped stream chunks with semantic DeltaInterface deltas (@fabpot, @chr-hertel)
- bug #1814 Fix RateLimitExceededException TypeError in Generic Embeddings ResultConverter (@melkamar)
- feature #1807 Add gpt-5.4-mini and gpt-5.4-nano to ModelCatalog (@Quentinmse80)
- feature #1790 Rename
ElevenLabsApiCatalogasModelCatalog(@Guikingone) - feature #1583 Add support for streaming (@Guikingone)
- bug #1810 Fix structured output in Responses API client (@melkamar)
- bug #1803 Fix number constraints in
#(@valtzu) - bug #1792 Fix tool call without arguments (@guillaume-ro-fr)
- feature #1793 Add Qwen 3-embedding and Qwen 3.5 (@guillaume-ro-fr)
- feature #1785 Add
asFile()method toBinaryResultandDeferredResult(@chr-hertel) - feature #1722 Generate JSON schema using Validator metadata (@valtzu)
- feature #1767 Replace
ModelCatalogbyOllamaApiCatalog(@Guikingone) - feature #1763 Add prompt caching for tool definitions (@HKandulla)
- feature #1765 Add token usage extraction for embeddings (@wachterjohannes)
- feature #1766 Add description property to # attribute (@bigdevlarry)
- feature #1704 Add platform-level reranking and hybrid retriever (@wachterjohannes)
- feature #1756 Extract duplicated completions conversion methods into CompletionsConversionTrait (@fabpot)
- feature #1764 Add phpdocumentor/reflection-docblock v6 support (@VincentLanglet)
- feature #1757 Add openrouter/free as base routing model (@lochmueller)
- bug #1732 Pass deployment name to
ResponsesModelClient(@pkothmair) - bug #1742 Fix
MessageBaghandling (@Guikingone) - feature #1733 Add support for
structured_output(@Guikingone)
-
v0.6.004 Mar 2026Release notes
Open source →Changelog (v0.5.0...v0.6.0)
- feature #1644 Add support for prompt caching (@fabpot)
- feature #1683 Make JSON schema generation extensible (v2) (@valtzu)
- bug #1714 Fix FallbackModelCatalog (@fabpot)
- feature #1701 Add bridge (@chr-hertel)
- bug #1694 Fix on
ElevenLabsplatform (@Guikingone) - feature #1719 Replace Chat Completions client with Responses API client (@paulkothmair)
- feature #1717 Resolve models.dev JSON from symfony/models-dev Composer package (@fabpot)
- bug #1711 Throw InvalidArgumentException when ModelClient receives a string payload (@fabpot)
- bug #1712 Skip specialized bridge check when a custom baseUrl is provided (@fabpot)
- bug #1703 Improve Elevenlabs error handling (@chr-hertel)
- feature #1661 Support API key authentication with global endpoint (@botjaeger)
- bug #1690 Fix OpenAI tool call serialization (@fabpot)
- feature #1689 Add well-known base URLs for providers with dedicated npm packages (@fabpot)
- bug #1698 fix typo in model name (no 's') (@tacman)
- bug #1691 Fix scientific notation strings being cast to int instead of float in model option parsing (@fabpot)
- feature #1556 Support structured output for
ClaudeModelClient(@aszenz) - feature #1678 Add support for
gemini-3.1-pro-preview(@alex-ception) - bug #1670 Fix AssistantMessageNormalizer producing null content for Anthropic API (@fabpot)
-
v0.5.018 Feb 2026Release notes
Open source →Changelog (v0.4.0...v0.5.0)
- feature #1615 Improve support for
ScopingHttpClient(@Guikingone)
- feature #1615 Improve support for
-
v0.4.0no dateRelease notes
Open source →Changelog (v0.3.3...v0.4.0)
- feature #1594 Add bridge (colorfield)
- feature #1635 Add thinking support (fabpot)
- feature #1634 Update models (fabpot)
- feature #1622 Add
ModelResolver(fabpot) - feature #1626 Add support for
gemini-3-flash-preview(alex-ception) - bug #1618 Fix
AssistantMessageNormalizerto support tools properly (fabpot) - feature #1620 Allow to override dataPath and default Contract (fabpot)
- bug #1607 Keep lazy iterator alive (chr-hertel)
- bug #1610 Skip streaming candidates without content parts (stijnkuppens)
- bug #1609 Improve support for
ScopingHttpClient(Guikingone) - feature #1550 Add support for object instances in structured output (wachterjohannes)
- feature #1576 Add bridge (fabpot)
- feature #1600 Add support for object serialization in template variables (wachterjohannes)
- feature #1599 Add structured output and tool calling support (4lxndr)
- bug #1604 Bug: JsonException with SSE comments in RawHttpResult (bigdevlarry)
- feature #1571 Introduce Open Responses Platform Bridge by extracting from OpenAI (chr-hertel)
- bug #1535 Read discriminator mapping from serializer metadata (valtzu)
- feature #1521 Add bridge (loicsapone)
- bug #1530 Add missing EMBEDDINGS capability to embedding models (RamyHakam)
- feature #1520 Add support for token usage on generic bridge (@chr-hertel)
-
v0.3.024 Jan 2026Nothing published for this version
-
v0.2.009 Jan 2026Nothing published for this version
-
v0.1.023 Dec 2025Nothing published for this version