From 1f74c6c766b0ec012a474ed04d8c1daca389656b Mon Sep 17 00:00:00 2001 From: Christopher Hertel Date: Sun, 6 Jul 2025 20:30:23 +0200 Subject: [PATCH] chore: update to llm-chain 0.24 (#29) --- demo/composer.json | 2 + demo/composer.lock | 519 ++++++++++++------- demo/config/packages/http_discovery.yaml | 10 + demo/src/Audio/Chat.php | 6 +- demo/src/Blog/Command/QueryCommand.php | 7 +- demo/src/Video/TwigComponent.php | 8 +- demo/src/YouTube/TranscriptFetcher.php | 44 +- demo/symfony.lock | 12 + demo/tests/YouTube/TranscriptFetcherTest.php | 36 -- demo/tests/YouTube/fixtures/transcript.xml | 66 --- demo/tests/YouTube/fixtures/video.html | 88 ---- 11 files changed, 367 insertions(+), 431 deletions(-) create mode 100644 demo/config/packages/http_discovery.yaml delete mode 100644 demo/tests/YouTube/TranscriptFetcherTest.php delete mode 100644 demo/tests/YouTube/fixtures/transcript.xml delete mode 100644 demo/tests/YouTube/fixtures/video.html diff --git a/demo/composer.json b/demo/composer.json index 39f368f5e0..4c8a2cc01b 100644 --- a/demo/composer.json +++ b/demo/composer.json @@ -11,6 +11,8 @@ "ext-iconv": "*", "codewithkyrian/chromadb-php": "^0.4.0", "league/commonmark": "^2.7", + "mrmysql/youtube-transcript": "^0.0.5", + "php-http/discovery": "^1.20", "runtime/frankenphp-symfony": "^0.2.0", "symfony/ai-bundle": "@dev", "symfony/asset": "7.3.*", diff --git a/demo/composer.lock b/demo/composer.lock index c11bbca49c..d7e1842b43 100644 --- a/demo/composer.lock +++ b/demo/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "afb427389b43f337697f38a12fb4c765", + "content-hash": "d376fdbaeea8a7a8e4e399c9d8a6d2a4", "packages": [ { "name": "codewithkyrian/chromadb-php", @@ -951,6 +951,59 @@ ], "time": "2025-03-24T10:02:05+00:00" }, + { + "name": "mrmysql/youtube-transcript", + "version": "v0.0.5", + "source": { + "type": "git", + "url": "https://github.com/MrMySQL/youtube-transcript.git", + "reference": "e10e5b11dbc1b3f67f375c425ac11188af9c21c4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/MrMySQL/youtube-transcript/zipball/e10e5b11dbc1b3f67f375c425ac11188af9c21c4", + "reference": "e10e5b11dbc1b3f67f375c425ac11188af9c21c4", + "shasum": "" + }, + "require": { + "php": "^8.2", + "psr/http-client": "^1.0", + "psr/http-factory": "^1.1" + }, + "require-dev": { + "phpunit/phpunit": "^10", + "psalm/plugin-phpunit": "^0.19.5", + "vimeo/psalm": "^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "MrMySQL\\YoutubeTranscript\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "WTFPL" + ], + "authors": [ + { + "name": "MrMySQL", + "email": "mrmysql.90@gmail.com" + } + ], + "description": "Retrieving transcripts for youtube videos.", + "support": { + "issues": "https://github.com/MrMySQL/youtube-transcript/issues", + "source": "https://github.com/MrMySQL/youtube-transcript/tree/v0.0.5" + }, + "funding": [ + { + "url": "https://github.com/MrMySQL", + "type": "github" + } + ], + "time": "2025-06-13T23:40:09+00:00" + }, { "name": "nette/schema", "version": "v1.3.2", @@ -1150,6 +1203,85 @@ }, "time": "2025-03-26T16:14:22+00:00" }, + { + "name": "php-http/discovery", + "version": "1.20.0", + "source": { + "type": "git", + "url": "https://github.com/php-http/discovery.git", + "reference": "82fe4c73ef3363caed49ff8dd1539ba06044910d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/discovery/zipball/82fe4c73ef3363caed49ff8dd1539ba06044910d", + "reference": "82fe4c73ef3363caed49ff8dd1539ba06044910d", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.0|^2.0", + "php": "^7.1 || ^8.0" + }, + "conflict": { + "nyholm/psr7": "<1.0", + "zendframework/zend-diactoros": "*" + }, + "provide": { + "php-http/async-client-implementation": "*", + "php-http/client-implementation": "*", + "psr/http-client-implementation": "*", + "psr/http-factory-implementation": "*", + "psr/http-message-implementation": "*" + }, + "require-dev": { + "composer/composer": "^1.0.2|^2.0", + "graham-campbell/phpspec-skip-example-extension": "^5.0", + "php-http/httplug": "^1.0 || ^2.0", + "php-http/message-factory": "^1.0", + "phpspec/phpspec": "^5.1 || ^6.1 || ^7.3", + "sebastian/comparator": "^3.0.5 || ^4.0.8", + "symfony/phpunit-bridge": "^6.4.4 || ^7.0.1" + }, + "type": "composer-plugin", + "extra": { + "class": "Http\\Discovery\\Composer\\Plugin", + "plugin-optional": true + }, + "autoload": { + "psr-4": { + "Http\\Discovery\\": "src/" + }, + "exclude-from-classmap": [ + "src/Composer/Plugin.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "Finds and installs PSR-7, PSR-17, PSR-18 and HTTPlug implementations", + "homepage": "http://php-http.org", + "keywords": [ + "adapter", + "client", + "discovery", + "factory", + "http", + "message", + "psr17", + "psr7" + ], + "support": { + "issues": "https://github.com/php-http/discovery/issues", + "source": "https://github.com/php-http/discovery/tree/1.20.0" + }, + "time": "2024-10-02T11:20:13+00:00" + }, { "name": "phpdocumentor/reflection-common", "version": "2.2.0", @@ -1880,11 +2012,11 @@ }, { "name": "symfony/ai-agent", - "version": "dev-integrate-demo", + "version": "dev-demo-update", "dist": { "type": "path", "url": "../src/agent", - "reference": "291833affae32075b3c79790a1a9c5b197fd9b95" + "reference": "fdf39db02aa955deb5ce0a1d983a5a373210d5e2" }, "require": { "ext-fileinfo": "*", @@ -1901,17 +2033,23 @@ "symfony/type-info": "^7.2.3" }, "require-dev": { + "mrmysql/youtube-transcript": "^v0.0.5", "phpstan/phpstan": "^2.0", "phpunit/phpunit": "^11.5.13", "symfony/ai-store": "@dev", + "symfony/cache": "^6.4 || ^7.1", "symfony/css-selector": "^6.4 || ^7.1", "symfony/dom-crawler": "^6.4 || ^7.1", - "symfony/event-dispatcher": "^6.4 || ^7.1" + "symfony/event-dispatcher": "^6.4 || ^7.1", + "symfony/http-foundation": "^6.4 || ^7.1" }, "suggest": { + "mrmysql/youtube-transcript": "For using the YouTube transcription tool.", + "psr/cache": "For using the CacheStore as message store.", "symfony/ai-store": "For using Similarity Search with a vector store.", "symfony/css-selector": "For using the YouTube transcription tool.", - "symfony/dom-crawler": "For using the YouTube transcription tool." + "symfony/dom-crawler": "For using the Crawler tool.", + "symfony/http-foundation": "For using the SessionStore as message store." }, "type": "library", "extra": { @@ -1956,7 +2094,7 @@ }, { "name": "symfony/ai-bundle", - "version": "dev-integrate-demo", + "version": "dev-demo-update", "dist": { "type": "path", "url": "../src/ai-bundle", @@ -2007,11 +2145,11 @@ }, { "name": "symfony/ai-platform", - "version": "dev-integrate-demo", + "version": "dev-demo-update", "dist": { "type": "path", "url": "../src/platform", - "reference": "9fe0bfa258e784fc869062f53868ffc836f5106d" + "reference": "21cd90f88bc76accce0b5ffb118618333d2eca21" }, "require": { "ext-fileinfo": "*", @@ -2026,6 +2164,7 @@ "symfony/property-info": "^6.4 || ^7.1", "symfony/serializer": "^6.4 || ^7.1", "symfony/type-info": "^7.2.3", + "symfony/uid": "^6.4 || ^7.1", "webmozart/assert": "^1.11" }, "require-dev": { @@ -2091,11 +2230,11 @@ }, { "name": "symfony/ai-store", - "version": "dev-integrate-demo", + "version": "dev-demo-update", "dist": { "type": "path", "url": "../src/store", - "reference": "8c2f8bb841d392d3981d76c8485193abb9dc00b9" + "reference": "b74fe318350ea22aee3318589831060d8479ef5a" }, "require": { "ext-fileinfo": "*", @@ -2112,7 +2251,9 @@ }, "require-dev": { "codewithkyrian/chromadb-php": "^0.2.1 || ^0.3 || ^0.4", - "mongodb/mongodb": "^1.21", + "doctrine/dbal": "^3.3 || ^4.0", + "ext-pdo": "*", + "mongodb/mongodb": "^1.21 || ^2.0", "phpstan/phpstan": "^2.0", "phpstan/phpstan-webmozart-assert": "^2.0", "phpunit/phpunit": "^11.5", @@ -2120,6 +2261,8 @@ }, "suggest": { "codewithkyrian/chromadb-php": "For using the ChromaDB as retrieval vector store.", + "doctrine/dbal": "For using MariaDB via Doctrine as retrieval vector store", + "ext-pdo": "For using MariaDB as retrieval vector store.", "mongodb/mongodb": "For using MongoDB Atlas as retrieval vector store.", "probots-io/pinecone-php": "For using the Pinecone as retrieval vector store." }, @@ -2153,7 +2296,7 @@ "email": "oskarstark@googlemail.com" } ], - "description": "PHP library for abstracting interaction with data stores in AI applications.", + "description": "Low-level abstraction for storing and retrieving documents in a vector store.", "keywords": [ "ai", "chromadb", @@ -2315,16 +2458,16 @@ }, { "name": "symfony/cache", - "version": "v7.3.0", + "version": "v7.3.1", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "c4b217b578c11ec764867aa0c73e602c602965de" + "reference": "a7c6caa9d6113cebfb3020b427bcb021ebfdfc9e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/c4b217b578c11ec764867aa0c73e602c602965de", - "reference": "c4b217b578c11ec764867aa0c73e602c602965de", + "url": "https://api.github.com/repos/symfony/cache/zipball/a7c6caa9d6113cebfb3020b427bcb021ebfdfc9e", + "reference": "a7c6caa9d6113cebfb3020b427bcb021ebfdfc9e", "shasum": "" }, "require": { @@ -2393,7 +2536,7 @@ "psr6" ], "support": { - "source": "https://github.com/symfony/cache/tree/v7.3.0" + "source": "https://github.com/symfony/cache/tree/v7.3.1" }, "funding": [ { @@ -2409,7 +2552,7 @@ "type": "tidelift" } ], - "time": "2025-05-06T19:00:13+00:00" + "time": "2025-06-27T19:55:54+00:00" }, { "name": "symfony/cache-contracts", @@ -2638,16 +2781,16 @@ }, { "name": "symfony/console", - "version": "v7.3.0", + "version": "v7.3.1", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "66c1440edf6f339fd82ed6c7caa76cb006211b44" + "reference": "9e27aecde8f506ba0fd1d9989620c04a87697101" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/66c1440edf6f339fd82ed6c7caa76cb006211b44", - "reference": "66c1440edf6f339fd82ed6c7caa76cb006211b44", + "url": "https://api.github.com/repos/symfony/console/zipball/9e27aecde8f506ba0fd1d9989620c04a87697101", + "reference": "9e27aecde8f506ba0fd1d9989620c04a87697101", "shasum": "" }, "require": { @@ -2712,7 +2855,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.3.0" + "source": "https://github.com/symfony/console/tree/v7.3.1" }, "funding": [ { @@ -2728,7 +2871,7 @@ "type": "tidelift" } ], - "time": "2025-05-24T10:34:04+00:00" + "time": "2025-06-27T19:55:54+00:00" }, { "name": "symfony/css-selector", @@ -2797,16 +2940,16 @@ }, { "name": "symfony/dependency-injection", - "version": "v7.3.0", + "version": "v7.3.1", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "f64a8f3fa7d4ad5e85de1b128a0e03faed02b732" + "reference": "8656c4848b48784c4bb8c4ae50d2b43f832cead8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/f64a8f3fa7d4ad5e85de1b128a0e03faed02b732", - "reference": "f64a8f3fa7d4ad5e85de1b128a0e03faed02b732", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/8656c4848b48784c4bb8c4ae50d2b43f832cead8", + "reference": "8656c4848b48784c4bb8c4ae50d2b43f832cead8", "shasum": "" }, "require": { @@ -2857,7 +3000,7 @@ "description": "Allows you to standardize and centralize the way objects are constructed in your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dependency-injection/tree/v7.3.0" + "source": "https://github.com/symfony/dependency-injection/tree/v7.3.1" }, "funding": [ { @@ -2873,7 +3016,7 @@ "type": "tidelift" } ], - "time": "2025-05-19T13:28:56+00:00" + "time": "2025-06-24T04:04:43+00:00" }, { "name": "symfony/deprecation-contracts", @@ -2944,16 +3087,16 @@ }, { "name": "symfony/dom-crawler", - "version": "v7.3.0", + "version": "v7.3.1", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "0fabbc3d6a9c473b716a93fc8e7a537adb396166" + "reference": "8b2ee2e06ab99fa5f067b6699296d4e35c156bb9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/0fabbc3d6a9c473b716a93fc8e7a537adb396166", - "reference": "0fabbc3d6a9c473b716a93fc8e7a537adb396166", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/8b2ee2e06ab99fa5f067b6699296d4e35c156bb9", + "reference": "8b2ee2e06ab99fa5f067b6699296d4e35c156bb9", "shasum": "" }, "require": { @@ -2991,7 +3134,7 @@ "description": "Eases DOM navigation for HTML and XML documents", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dom-crawler/tree/v7.3.0" + "source": "https://github.com/symfony/dom-crawler/tree/v7.3.1" }, "funding": [ { @@ -3007,7 +3150,7 @@ "type": "tidelift" } ], - "time": "2025-03-05T10:15:41+00:00" + "time": "2025-06-15T10:07:06+00:00" }, { "name": "symfony/dotenv", @@ -3085,16 +3228,16 @@ }, { "name": "symfony/error-handler", - "version": "v7.3.0", + "version": "v7.3.1", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "cf68d225bc43629de4ff54778029aee6dc191b83" + "reference": "35b55b166f6752d6aaf21aa042fc5ed280fce235" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/cf68d225bc43629de4ff54778029aee6dc191b83", - "reference": "cf68d225bc43629de4ff54778029aee6dc191b83", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/35b55b166f6752d6aaf21aa042fc5ed280fce235", + "reference": "35b55b166f6752d6aaf21aa042fc5ed280fce235", "shasum": "" }, "require": { @@ -3142,7 +3285,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v7.3.0" + "source": "https://github.com/symfony/error-handler/tree/v7.3.1" }, "funding": [ { @@ -3158,7 +3301,7 @@ "type": "tidelift" } ], - "time": "2025-05-29T07:19:49+00:00" + "time": "2025-06-13T07:48:40+00:00" }, { "name": "symfony/event-dispatcher", @@ -3448,16 +3591,16 @@ }, { "name": "symfony/flex", - "version": "v2.7.1", + "version": "v2.8.1", "source": { "type": "git", "url": "https://github.com/symfony/flex.git", - "reference": "4ae50d368415a06820739e54d38a4a29d6df9155" + "reference": "423c36e369361003dc31ef11c5f15fb589e52c01" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/flex/zipball/4ae50d368415a06820739e54d38a4a29d6df9155", - "reference": "4ae50d368415a06820739e54d38a4a29d6df9155", + "url": "https://api.github.com/repos/symfony/flex/zipball/423c36e369361003dc31ef11c5f15fb589e52c01", + "reference": "423c36e369361003dc31ef11c5f15fb589e52c01", "shasum": "" }, "require": { @@ -3496,7 +3639,7 @@ "description": "Composer plugin for Symfony", "support": { "issues": "https://github.com/symfony/flex/issues", - "source": "https://github.com/symfony/flex/tree/v2.7.1" + "source": "https://github.com/symfony/flex/tree/v2.8.1" }, "funding": [ { @@ -3512,20 +3655,20 @@ "type": "tidelift" } ], - "time": "2025-05-28T14:22:54+00:00" + "time": "2025-07-05T07:45:19+00:00" }, { "name": "symfony/framework-bundle", - "version": "v7.3.0", + "version": "v7.3.1", "source": { "type": "git", "url": "https://github.com/symfony/framework-bundle.git", - "reference": "030646f55fe18501a43edab22a8ad250d8ec42a6" + "reference": "91905f22f26aa350a33b3b9690bdf94976b0d0ab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/030646f55fe18501a43edab22a8ad250d8ec42a6", - "reference": "030646f55fe18501a43edab22a8ad250d8ec42a6", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/91905f22f26aa350a33b3b9690bdf94976b0d0ab", + "reference": "91905f22f26aa350a33b3b9690bdf94976b0d0ab", "shasum": "" }, "require": { @@ -3650,7 +3793,7 @@ "description": "Provides a tight integration between Symfony components and the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/framework-bundle/tree/v7.3.0" + "source": "https://github.com/symfony/framework-bundle/tree/v7.3.1" }, "funding": [ { @@ -3666,20 +3809,20 @@ "type": "tidelift" } ], - "time": "2025-05-28T06:56:42+00:00" + "time": "2025-06-27T19:55:54+00:00" }, { "name": "symfony/http-client", - "version": "v7.3.0", + "version": "v7.3.1", "source": { "type": "git", "url": "https://github.com/symfony/http-client.git", - "reference": "57e4fb86314015a695a750ace358d07a7e37b8a9" + "reference": "4403d87a2c16f33345dca93407a8714ee8c05a64" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client/zipball/57e4fb86314015a695a750ace358d07a7e37b8a9", - "reference": "57e4fb86314015a695a750ace358d07a7e37b8a9", + "url": "https://api.github.com/repos/symfony/http-client/zipball/4403d87a2c16f33345dca93407a8714ee8c05a64", + "reference": "4403d87a2c16f33345dca93407a8714ee8c05a64", "shasum": "" }, "require": { @@ -3691,6 +3834,7 @@ }, "conflict": { "amphp/amp": "<2.5", + "amphp/socket": "<1.1", "php-http/discovery": "<1.15", "symfony/http-foundation": "<6.4" }, @@ -3703,7 +3847,6 @@ "require-dev": { "amphp/http-client": "^4.2.1|^5.0", "amphp/http-tunnel": "^1.0|^2.0", - "amphp/socket": "^1.1", "guzzlehttp/promises": "^1.4|^2.0", "nyholm/psr7": "^1.0", "php-http/httplug": "^1.0|^2.0", @@ -3745,7 +3888,7 @@ "http" ], "support": { - "source": "https://github.com/symfony/http-client/tree/v7.3.0" + "source": "https://github.com/symfony/http-client/tree/v7.3.1" }, "funding": [ { @@ -3761,7 +3904,7 @@ "type": "tidelift" } ], - "time": "2025-05-02T08:23:16+00:00" + "time": "2025-06-28T07:58:39+00:00" }, { "name": "symfony/http-client-contracts", @@ -3843,16 +3986,16 @@ }, { "name": "symfony/http-foundation", - "version": "v7.3.0", + "version": "v7.3.1", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "4236baf01609667d53b20371486228231eb135fd" + "reference": "23dd60256610c86a3414575b70c596e5deff6ed9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/4236baf01609667d53b20371486228231eb135fd", - "reference": "4236baf01609667d53b20371486228231eb135fd", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/23dd60256610c86a3414575b70c596e5deff6ed9", + "reference": "23dd60256610c86a3414575b70c596e5deff6ed9", "shasum": "" }, "require": { @@ -3902,7 +4045,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v7.3.0" + "source": "https://github.com/symfony/http-foundation/tree/v7.3.1" }, "funding": [ { @@ -3918,20 +4061,20 @@ "type": "tidelift" } ], - "time": "2025-05-12T14:48:23+00:00" + "time": "2025-06-23T15:07:14+00:00" }, { "name": "symfony/http-kernel", - "version": "v7.3.0", + "version": "v7.3.1", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "ac7b8e163e8c83dce3abcc055a502d4486051a9f" + "reference": "1644879a66e4aa29c36fe33dfa6c54b450ce1831" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/ac7b8e163e8c83dce3abcc055a502d4486051a9f", - "reference": "ac7b8e163e8c83dce3abcc055a502d4486051a9f", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/1644879a66e4aa29c36fe33dfa6c54b450ce1831", + "reference": "1644879a66e4aa29c36fe33dfa6c54b450ce1831", "shasum": "" }, "require": { @@ -4016,7 +4159,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v7.3.0" + "source": "https://github.com/symfony/http-kernel/tree/v7.3.1" }, "funding": [ { @@ -4032,7 +4175,7 @@ "type": "tidelift" } ], - "time": "2025-05-29T07:47:32+00:00" + "time": "2025-06-28T08:24:55+00:00" }, { "name": "symfony/monolog-bridge", @@ -4433,16 +4576,16 @@ }, { "name": "symfony/property-access", - "version": "v7.3.0", + "version": "v7.3.1", "source": { "type": "git", "url": "https://github.com/symfony/property-access.git", - "reference": "3bcf43665d6aff90547b005348e1e351f4e2174b" + "reference": "518d15c8cca726ebe665dcd7154074584cf862e8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-access/zipball/3bcf43665d6aff90547b005348e1e351f4e2174b", - "reference": "3bcf43665d6aff90547b005348e1e351f4e2174b", + "url": "https://api.github.com/repos/symfony/property-access/zipball/518d15c8cca726ebe665dcd7154074584cf862e8", + "reference": "518d15c8cca726ebe665dcd7154074584cf862e8", "shasum": "" }, "require": { @@ -4489,7 +4632,7 @@ "reflection" ], "support": { - "source": "https://github.com/symfony/property-access/tree/v7.3.0" + "source": "https://github.com/symfony/property-access/tree/v7.3.1" }, "funding": [ { @@ -4505,27 +4648,27 @@ "type": "tidelift" } ], - "time": "2025-05-10T11:59:09+00:00" + "time": "2025-06-24T04:04:43+00:00" }, { "name": "symfony/property-info", - "version": "v7.3.0", + "version": "v7.3.1", "source": { "type": "git", "url": "https://github.com/symfony/property-info.git", - "reference": "200d230d8553610ada73ac557501dc4609aad31f" + "reference": "90586acbf2a6dd13bee4f09f09111c8bd4773970" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-info/zipball/200d230d8553610ada73ac557501dc4609aad31f", - "reference": "200d230d8553610ada73ac557501dc4609aad31f", + "url": "https://api.github.com/repos/symfony/property-info/zipball/90586acbf2a6dd13bee4f09f09111c8bd4773970", + "reference": "90586acbf2a6dd13bee4f09f09111c8bd4773970", "shasum": "" }, "require": { "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3", "symfony/string": "^6.4|^7.0", - "symfony/type-info": "~7.1.9|^7.2.2" + "symfony/type-info": "~7.2.8|^7.3.1" }, "conflict": { "phpdocumentor/reflection-docblock": "<5.2", @@ -4575,7 +4718,7 @@ "validator" ], "support": { - "source": "https://github.com/symfony/property-info/tree/v7.3.0" + "source": "https://github.com/symfony/property-info/tree/v7.3.1" }, "funding": [ { @@ -4591,7 +4734,7 @@ "type": "tidelift" } ], - "time": "2025-04-04T13:12:05+00:00" + "time": "2025-06-27T19:55:54+00:00" }, { "name": "symfony/routing", @@ -4676,16 +4819,16 @@ }, { "name": "symfony/runtime", - "version": "v7.3.0", + "version": "v7.3.1", "source": { "type": "git", "url": "https://github.com/symfony/runtime.git", - "reference": "fda552ee63dce9f3365f9c397efe7a80c8abac0a" + "reference": "9516056d432f8acdac9458eb41b80097da7a05c9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/runtime/zipball/fda552ee63dce9f3365f9c397efe7a80c8abac0a", - "reference": "fda552ee63dce9f3365f9c397efe7a80c8abac0a", + "url": "https://api.github.com/repos/symfony/runtime/zipball/9516056d432f8acdac9458eb41b80097da7a05c9", + "reference": "9516056d432f8acdac9458eb41b80097da7a05c9", "shasum": "" }, "require": { @@ -4735,7 +4878,7 @@ "runtime" ], "support": { - "source": "https://github.com/symfony/runtime/tree/v7.3.0" + "source": "https://github.com/symfony/runtime/tree/v7.3.1" }, "funding": [ { @@ -4751,20 +4894,20 @@ "type": "tidelift" } ], - "time": "2025-04-06T16:01:50+00:00" + "time": "2025-06-13T07:48:40+00:00" }, { "name": "symfony/serializer", - "version": "v7.3.0", + "version": "v7.3.1", "source": { "type": "git", "url": "https://github.com/symfony/serializer.git", - "reference": "2d86f81b1c506d7e1578789f93280dab4b8411bb" + "reference": "feaf837cedbbc8287986602223175d3fd639922d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/serializer/zipball/2d86f81b1c506d7e1578789f93280dab4b8411bb", - "reference": "2d86f81b1c506d7e1578789f93280dab4b8411bb", + "url": "https://api.github.com/repos/symfony/serializer/zipball/feaf837cedbbc8287986602223175d3fd639922d", + "reference": "feaf837cedbbc8287986602223175d3fd639922d", "shasum": "" }, "require": { @@ -4833,7 +4976,7 @@ "description": "Handles serializing and deserializing data structures, including object graphs, into array structures or other formats like XML and JSON.", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/serializer/tree/v7.3.0" + "source": "https://github.com/symfony/serializer/tree/v7.3.1" }, "funding": [ { @@ -4849,7 +4992,7 @@ "type": "tidelift" } ], - "time": "2025-05-12T14:48:23+00:00" + "time": "2025-06-27T19:55:54+00:00" }, { "name": "symfony/service-contracts", @@ -4936,16 +5079,16 @@ }, { "name": "symfony/stimulus-bundle", - "version": "v2.26.1", + "version": "v2.27.0", "source": { "type": "git", "url": "https://github.com/symfony/stimulus-bundle.git", - "reference": "82c174ebe564e6ecc1412974b6380b86d450675f" + "reference": "defaeb91bd366f9f43dbe54dbdfd9bc3c4138814" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stimulus-bundle/zipball/82c174ebe564e6ecc1412974b6380b86d450675f", - "reference": "82c174ebe564e6ecc1412974b6380b86d450675f", + "url": "https://api.github.com/repos/symfony/stimulus-bundle/zipball/defaeb91bd366f9f43dbe54dbdfd9bc3c4138814", + "reference": "defaeb91bd366f9f43dbe54dbdfd9bc3c4138814", "shasum": "" }, "require": { @@ -4985,7 +5128,7 @@ "symfony-ux" ], "support": { - "source": "https://github.com/symfony/stimulus-bundle/tree/v2.26.1" + "source": "https://github.com/symfony/stimulus-bundle/tree/v2.27.0" }, "funding": [ { @@ -5001,7 +5144,7 @@ "type": "tidelift" } ], - "time": "2025-06-05T17:25:17+00:00" + "time": "2025-06-22T19:07:55+00:00" }, { "name": "symfony/string", @@ -5281,16 +5424,16 @@ }, { "name": "symfony/twig-bundle", - "version": "v7.3.0", + "version": "v7.3.1", "source": { "type": "git", "url": "https://github.com/symfony/twig-bundle.git", - "reference": "0ace7d92b92437a5ad59fad457af7dc2475db89b" + "reference": "bc23c11d9716fc2261ee26a32e654b0e8b1b1896" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/0ace7d92b92437a5ad59fad457af7dc2475db89b", - "reference": "0ace7d92b92437a5ad59fad457af7dc2475db89b", + "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/bc23c11d9716fc2261ee26a32e654b0e8b1b1896", + "reference": "bc23c11d9716fc2261ee26a32e654b0e8b1b1896", "shasum": "" }, "require": { @@ -5345,7 +5488,7 @@ "description": "Provides a tight integration of Twig into the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/twig-bundle/tree/v7.3.0" + "source": "https://github.com/symfony/twig-bundle/tree/v7.3.1" }, "funding": [ { @@ -5361,20 +5504,20 @@ "type": "tidelift" } ], - "time": "2025-05-14T11:51:37+00:00" + "time": "2025-06-24T04:04:43+00:00" }, { "name": "symfony/type-info", - "version": "v7.3.0", + "version": "v7.3.1", "source": { "type": "git", "url": "https://github.com/symfony/type-info.git", - "reference": "bc9af22e25796d98078f69c0749ab3a9d3454786" + "reference": "5fa6e25e4195e73ce9e457b521ac5e61ec271150" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/type-info/zipball/bc9af22e25796d98078f69c0749ab3a9d3454786", - "reference": "bc9af22e25796d98078f69c0749ab3a9d3454786", + "url": "https://api.github.com/repos/symfony/type-info/zipball/5fa6e25e4195e73ce9e457b521ac5e61ec271150", + "reference": "5fa6e25e4195e73ce9e457b521ac5e61ec271150", "shasum": "" }, "require": { @@ -5424,7 +5567,7 @@ "type" ], "support": { - "source": "https://github.com/symfony/type-info/tree/v7.3.0" + "source": "https://github.com/symfony/type-info/tree/v7.3.1" }, "funding": [ { @@ -5440,20 +5583,20 @@ "type": "tidelift" } ], - "time": "2025-03-30T12:17:06+00:00" + "time": "2025-06-27T19:55:54+00:00" }, { "name": "symfony/uid", - "version": "v7.3.0", + "version": "v7.3.1", "source": { "type": "git", "url": "https://github.com/symfony/uid.git", - "reference": "7beeb2b885cd584cd01e126c5777206ae4c3c6a3" + "reference": "a69f69f3159b852651a6bf45a9fdd149520525bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/uid/zipball/7beeb2b885cd584cd01e126c5777206ae4c3c6a3", - "reference": "7beeb2b885cd584cd01e126c5777206ae4c3c6a3", + "url": "https://api.github.com/repos/symfony/uid/zipball/a69f69f3159b852651a6bf45a9fdd149520525bb", + "reference": "a69f69f3159b852651a6bf45a9fdd149520525bb", "shasum": "" }, "require": { @@ -5498,7 +5641,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/uid/tree/v7.3.0" + "source": "https://github.com/symfony/uid/tree/v7.3.1" }, "funding": [ { @@ -5514,20 +5657,20 @@ "type": "tidelift" } ], - "time": "2025-05-24T14:28:13+00:00" + "time": "2025-06-27T19:55:54+00:00" }, { "name": "symfony/ux-icons", - "version": "v2.26.0", + "version": "v2.27.0", "source": { "type": "git", "url": "https://github.com/symfony/ux-icons.git", - "reference": "e5c1e5b5093ae26dba45d0f3390a1e21f305c47a" + "reference": "af6d09779e786717c6e3b5a8a004e8c18ce3ef00" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/ux-icons/zipball/e5c1e5b5093ae26dba45d0f3390a1e21f305c47a", - "reference": "e5c1e5b5093ae26dba45d0f3390a1e21f305c47a", + "url": "https://api.github.com/repos/symfony/ux-icons/zipball/af6d09779e786717c6e3b5a8a004e8c18ce3ef00", + "reference": "af6d09779e786717c6e3b5a8a004e8c18ce3ef00", "shasum": "" }, "require": { @@ -5587,7 +5730,7 @@ "twig" ], "support": { - "source": "https://github.com/symfony/ux-icons/tree/v2.26.0" + "source": "https://github.com/symfony/ux-icons/tree/v2.27.0" }, "funding": [ { @@ -5603,20 +5746,20 @@ "type": "tidelift" } ], - "time": "2025-05-30T02:07:34+00:00" + "time": "2025-06-17T06:15:15+00:00" }, { "name": "symfony/ux-live-component", - "version": "v2.26.1", + "version": "v2.27.0", "source": { "type": "git", "url": "https://github.com/symfony/ux-live-component.git", - "reference": "92b300bb90d87f14aeae47b0f5c9e058b15f5c2f" + "reference": "05def4e467d378810f46f826dc67506180df8bd2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/ux-live-component/zipball/92b300bb90d87f14aeae47b0f5c9e058b15f5c2f", - "reference": "92b300bb90d87f14aeae47b0f5c9e058b15f5c2f", + "url": "https://api.github.com/repos/symfony/ux-live-component/zipball/05def4e467d378810f46f826dc67506180df8bd2", + "reference": "05def4e467d378810f46f826dc67506180df8bd2", "shasum": "" }, "require": { @@ -5684,7 +5827,7 @@ "twig" ], "support": { - "source": "https://github.com/symfony/ux-live-component/tree/v2.26.1" + "source": "https://github.com/symfony/ux-live-component/tree/v2.27.0" }, "funding": [ { @@ -5700,20 +5843,20 @@ "type": "tidelift" } ], - "time": "2025-06-06T19:57:53+00:00" + "time": "2025-06-22T19:07:55+00:00" }, { "name": "symfony/ux-turbo", - "version": "v2.26.1", + "version": "v2.27.0", "source": { "type": "git", "url": "https://github.com/symfony/ux-turbo.git", - "reference": "3754ac2b41220127e58c62f7599eaf7834b69a55" + "reference": "b9ce9b30a9cf9bbd090c7ad290bdaf84a0e100b2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/ux-turbo/zipball/3754ac2b41220127e58c62f7599eaf7834b69a55", - "reference": "3754ac2b41220127e58c62f7599eaf7834b69a55", + "url": "https://api.github.com/repos/symfony/ux-turbo/zipball/b9ce9b30a9cf9bbd090c7ad290bdaf84a0e100b2", + "reference": "b9ce9b30a9cf9bbd090c7ad290bdaf84a0e100b2", "shasum": "" }, "require": { @@ -5783,7 +5926,7 @@ "turbo-stream" ], "support": { - "source": "https://github.com/symfony/ux-turbo/tree/v2.26.1" + "source": "https://github.com/symfony/ux-turbo/tree/v2.27.0" }, "funding": [ { @@ -5799,20 +5942,20 @@ "type": "tidelift" } ], - "time": "2025-06-05T17:25:17+00:00" + "time": "2025-06-06T20:27:21+00:00" }, { "name": "symfony/ux-twig-component", - "version": "v2.26.0", + "version": "v2.27.0", "source": { "type": "git", "url": "https://github.com/symfony/ux-twig-component.git", - "reference": "825e653b34fb48ed2198913c603d80f7632fe9c1" + "reference": "0879cd53812b79e8b6a20e104b6e785a2ac2c013" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/ux-twig-component/zipball/825e653b34fb48ed2198913c603d80f7632fe9c1", - "reference": "825e653b34fb48ed2198913c603d80f7632fe9c1", + "url": "https://api.github.com/repos/symfony/ux-twig-component/zipball/0879cd53812b79e8b6a20e104b6e785a2ac2c013", + "reference": "0879cd53812b79e8b6a20e104b6e785a2ac2c013", "shasum": "" }, "require": { @@ -5866,7 +6009,7 @@ "twig" ], "support": { - "source": "https://github.com/symfony/ux-twig-component/tree/v2.26.0" + "source": "https://github.com/symfony/ux-twig-component/tree/v2.27.0" }, "funding": [ { @@ -5882,20 +6025,20 @@ "type": "tidelift" } ], - "time": "2025-05-26T06:21:54+00:00" + "time": "2025-06-21T16:41:28+00:00" }, { "name": "symfony/ux-typed", - "version": "v2.26.1", + "version": "v2.27.0", "source": { "type": "git", "url": "https://github.com/symfony/ux-typed.git", - "reference": "df0f3bec5c4e6016f2a777420a545a5bb50495ca" + "reference": "929f1e41c7f4898f9f509c96b798ed1bc241e33f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/ux-typed/zipball/df0f3bec5c4e6016f2a777420a545a5bb50495ca", - "reference": "df0f3bec5c4e6016f2a777420a545a5bb50495ca", + "url": "https://api.github.com/repos/symfony/ux-typed/zipball/929f1e41c7f4898f9f509c96b798ed1bc241e33f", + "reference": "929f1e41c7f4898f9f509c96b798ed1bc241e33f", "shasum": "" }, "require": { @@ -5937,7 +6080,7 @@ "symfony-ux" ], "support": { - "source": "https://github.com/symfony/ux-typed/tree/v2.26.1" + "source": "https://github.com/symfony/ux-typed/tree/v2.27.0" }, "funding": [ { @@ -5953,20 +6096,20 @@ "type": "tidelift" } ], - "time": "2025-06-05T20:47:06+00:00" + "time": "2025-06-06T20:27:21+00:00" }, { "name": "symfony/var-dumper", - "version": "v7.3.0", + "version": "v7.3.1", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "548f6760c54197b1084e1e5c71f6d9d523f2f78e" + "reference": "6e209fbe5f5a7b6043baba46fe5735a4b85d0d42" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/548f6760c54197b1084e1e5c71f6d9d523f2f78e", - "reference": "548f6760c54197b1084e1e5c71f6d9d523f2f78e", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/6e209fbe5f5a7b6043baba46fe5735a4b85d0d42", + "reference": "6e209fbe5f5a7b6043baba46fe5735a4b85d0d42", "shasum": "" }, "require": { @@ -6021,7 +6164,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v7.3.0" + "source": "https://github.com/symfony/var-dumper/tree/v7.3.1" }, "funding": [ { @@ -6037,7 +6180,7 @@ "type": "tidelift" } ], - "time": "2025-04-27T18:39:23+00:00" + "time": "2025-06-27T19:55:54+00:00" }, { "name": "symfony/var-exporter", @@ -6118,16 +6261,16 @@ }, { "name": "symfony/yaml", - "version": "v7.3.0", + "version": "v7.3.1", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "cea40a48279d58dc3efee8112634cb90141156c2" + "reference": "0c3555045a46ab3cd4cc5a69d161225195230edb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/cea40a48279d58dc3efee8112634cb90141156c2", - "reference": "cea40a48279d58dc3efee8112634cb90141156c2", + "url": "https://api.github.com/repos/symfony/yaml/zipball/0c3555045a46ab3cd4cc5a69d161225195230edb", + "reference": "0c3555045a46ab3cd4cc5a69d161225195230edb", "shasum": "" }, "require": { @@ -6170,7 +6313,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v7.3.0" + "source": "https://github.com/symfony/yaml/tree/v7.3.1" }, "funding": [ { @@ -6186,7 +6329,7 @@ "type": "tidelift" } ], - "time": "2025-04-04T10:10:33+00:00" + "time": "2025-06-03T06:57:57+00:00" }, { "name": "twig/extra-bundle", @@ -6475,16 +6618,16 @@ "packages-dev": [ { "name": "myclabs/deep-copy", - "version": "1.13.1", + "version": "1.13.3", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "1720ddd719e16cf0db4eb1c6eca108031636d46c" + "reference": "faed855a7b5f4d4637717c2b3863e277116beb36" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/1720ddd719e16cf0db4eb1c6eca108031636d46c", - "reference": "1720ddd719e16cf0db4eb1c6eca108031636d46c", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/faed855a7b5f4d4637717c2b3863e277116beb36", + "reference": "faed855a7b5f4d4637717c2b3863e277116beb36", "shasum": "" }, "require": { @@ -6523,7 +6666,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.13.1" + "source": "https://github.com/myclabs/DeepCopy/tree/1.13.3" }, "funding": [ { @@ -6531,7 +6674,7 @@ "type": "tidelift" } ], - "time": "2025-04-29T12:36:36+00:00" + "time": "2025-07-05T12:25:42+00:00" }, { "name": "nikic/php-parser", @@ -6768,16 +6911,16 @@ }, { "name": "php-cs-fixer/shim", - "version": "v3.75.0", + "version": "v3.80.0", "source": { "type": "git", "url": "https://github.com/PHP-CS-Fixer/shim.git", - "reference": "eea219a577085bd13ff0cb644a422c20798316c7" + "reference": "050bfba7a3f1716522075118a60e934344053b34" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/shim/zipball/eea219a577085bd13ff0cb644a422c20798316c7", - "reference": "eea219a577085bd13ff0cb644a422c20798316c7", + "url": "https://api.github.com/repos/PHP-CS-Fixer/shim/zipball/050bfba7a3f1716522075118a60e934344053b34", + "reference": "050bfba7a3f1716522075118a60e934344053b34", "shasum": "" }, "require": { @@ -6814,9 +6957,9 @@ "description": "A tool to automatically fix PHP code style", "support": { "issues": "https://github.com/PHP-CS-Fixer/shim/issues", - "source": "https://github.com/PHP-CS-Fixer/shim/tree/v3.75.0" + "source": "https://github.com/PHP-CS-Fixer/shim/tree/v3.80.0" }, - "time": "2025-03-31T18:45:02+00:00" + "time": "2025-07-06T21:01:12+00:00" }, { "name": "phpstan/phpstan", @@ -7213,16 +7356,16 @@ }, { "name": "phpunit/phpunit", - "version": "11.5.24", + "version": "11.5.26", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "6b07ab1047155cf38f82dd691787a277782271dd" + "reference": "4ad8fe263a0b55b54a8028c38a18e3c5bef312e0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/6b07ab1047155cf38f82dd691787a277782271dd", - "reference": "6b07ab1047155cf38f82dd691787a277782271dd", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/4ad8fe263a0b55b54a8028c38a18e3c5bef312e0", + "reference": "4ad8fe263a0b55b54a8028c38a18e3c5bef312e0", "shasum": "" }, "require": { @@ -7294,7 +7437,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.24" + "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.26" }, "funding": [ { @@ -7318,7 +7461,7 @@ "type": "tidelift" } ], - "time": "2025-06-20T11:31:02+00:00" + "time": "2025-07-04T05:58:21+00:00" }, { "name": "sebastian/cli-parser", @@ -8513,16 +8656,16 @@ }, { "name": "symfony/web-profiler-bundle", - "version": "v7.3.0", + "version": "v7.3.1", "source": { "type": "git", "url": "https://github.com/symfony/web-profiler-bundle.git", - "reference": "a22b7e4a744820a56f1bafa830f2c72a2ba0913c" + "reference": "47c994d8f08817122ffb48bf2ea4fb97b7e00d51" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/a22b7e4a744820a56f1bafa830f2c72a2ba0913c", - "reference": "a22b7e4a744820a56f1bafa830f2c72a2ba0913c", + "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/47c994d8f08817122ffb48bf2ea4fb97b7e00d51", + "reference": "47c994d8f08817122ffb48bf2ea4fb97b7e00d51", "shasum": "" }, "require": { @@ -8578,7 +8721,7 @@ "dev" ], "support": { - "source": "https://github.com/symfony/web-profiler-bundle/tree/v7.3.0" + "source": "https://github.com/symfony/web-profiler-bundle/tree/v7.3.1" }, "funding": [ { @@ -8594,7 +8737,7 @@ "type": "tidelift" } ], - "time": "2025-05-02T05:30:54+00:00" + "time": "2025-06-05T09:30:41+00:00" }, { "name": "theseer/tokenizer", diff --git a/demo/config/packages/http_discovery.yaml b/demo/config/packages/http_discovery.yaml new file mode 100644 index 0000000000..2a789e73c9 --- /dev/null +++ b/demo/config/packages/http_discovery.yaml @@ -0,0 +1,10 @@ +services: + Psr\Http\Message\RequestFactoryInterface: '@http_discovery.psr17_factory' + Psr\Http\Message\ResponseFactoryInterface: '@http_discovery.psr17_factory' + Psr\Http\Message\ServerRequestFactoryInterface: '@http_discovery.psr17_factory' + Psr\Http\Message\StreamFactoryInterface: '@http_discovery.psr17_factory' + Psr\Http\Message\UploadedFileFactoryInterface: '@http_discovery.psr17_factory' + Psr\Http\Message\UriFactoryInterface: '@http_discovery.psr17_factory' + + http_discovery.psr17_factory: + class: Http\Discovery\Psr17Factory diff --git a/demo/src/Audio/Chat.php b/demo/src/Audio/Chat.php index 6e0eebb396..2e405ab54f 100644 --- a/demo/src/Audio/Chat.php +++ b/demo/src/Audio/Chat.php @@ -17,7 +17,6 @@ use Symfony\AI\Platform\Message\Message; use Symfony\AI\Platform\Message\MessageBag; use Symfony\AI\Platform\PlatformInterface; -use Symfony\AI\Platform\Response\AsyncResponse; use Symfony\AI\Platform\Response\TextResponse; use Symfony\Component\DependencyInjection\Attribute\Autowire; use Symfony\Component\HttpFoundation\RequestStack; @@ -41,11 +40,8 @@ public function say(string $base64audio): void file_put_contents($path, base64_decode($base64audio)); $response = $this->platform->request(new Whisper(), Audio::fromFile($path)); - \assert($response instanceof AsyncResponse); - $response = $response->unwrap(); - \assert($response instanceof TextResponse); - $this->submitMessage($response->getContent()); + $this->submitMessage($response->asText()); } public function loadMessages(): MessageBag diff --git a/demo/src/Blog/Command/QueryCommand.php b/demo/src/Blog/Command/QueryCommand.php index cb7272a20c..db3d59dc03 100644 --- a/demo/src/Blog/Command/QueryCommand.php +++ b/demo/src/Blog/Command/QueryCommand.php @@ -14,8 +14,6 @@ use Codewithkyrian\ChromaDB\Client; use Symfony\AI\Platform\Bridge\OpenAI\Embeddings; use Symfony\AI\Platform\PlatformInterface; -use Symfony\AI\Platform\Response\AsyncResponse; -use Symfony\AI\Platform\Response\VectorResponse; use Symfony\Component\Console\Attribute\AsCommand; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputInterface; @@ -51,11 +49,8 @@ protected function execute(InputInterface $input, OutputInterface $output): int $io->comment('Results are limited to 4 most similar documents.'); $platformResponse = $this->platform->request(new Embeddings(), $search); - \assert($platformResponse instanceof AsyncResponse); - $platformResponse = $platformResponse->unwrap(); - \assert($platformResponse instanceof VectorResponse); $queryResponse = $collection->query( - queryEmbeddings: [$platformResponse->getContent()[0]->getData()], + queryEmbeddings: [$platformResponse->asVectors()[0]->getData()], nResults: 4, ); diff --git a/demo/src/Video/TwigComponent.php b/demo/src/Video/TwigComponent.php index 9ba1a18db8..30ca7341bc 100644 --- a/demo/src/Video/TwigComponent.php +++ b/demo/src/Video/TwigComponent.php @@ -16,8 +16,6 @@ use Symfony\AI\Platform\Message\Message; use Symfony\AI\Platform\Message\MessageBag; use Symfony\AI\Platform\PlatformInterface; -use Symfony\AI\Platform\Response\AsyncResponse; -use Symfony\AI\Platform\Response\TextResponse; use Symfony\UX\LiveComponent\Attribute\AsLiveComponent; use Symfony\UX\LiveComponent\Attribute\LiveAction; use Symfony\UX\LiveComponent\Attribute\LiveArg; @@ -53,10 +51,6 @@ public function submit(#[LiveArg] string $instruction, #[LiveArg] string $image) 'max_tokens' => 100, ]); - \assert($response instanceof AsyncResponse); - $response = $response->unwrap(); - \assert($response instanceof TextResponse); - - $this->caption = $response->getContent(); + $this->caption = $response->asText(); } } diff --git a/demo/src/YouTube/TranscriptFetcher.php b/demo/src/YouTube/TranscriptFetcher.php index 568ee01d68..716b6afa2f 100644 --- a/demo/src/YouTube/TranscriptFetcher.php +++ b/demo/src/YouTube/TranscriptFetcher.php @@ -11,7 +11,8 @@ namespace App\YouTube; -use Symfony\Component\DomCrawler\Crawler; +use MrMySQL\YoutubeTranscript\TranscriptListFetcher; +use Symfony\Component\HttpClient\Psr18Client; use Symfony\Contracts\HttpClient\HttpClientInterface; final class TranscriptFetcher @@ -23,41 +24,14 @@ public function __construct( public function fetchTranscript(string $videoId): string { - // Fetch the HTML content of the YouTube video page - $htmlResponse = $this->client->request('GET', 'https://youtube.com/watch?v='.$videoId); - $html = $htmlResponse->getContent(); + $psr18Client = new Psr18Client($this->client); + $fetcher = new TranscriptListFetcher($psr18Client, $psr18Client, $psr18Client); - // Use DomCrawler to parse the HTML - $crawler = new Crawler($html); + $list = $fetcher->fetch($videoId); + $transcript = $list->findTranscript($list->getAvailableLanguageCodes()); - // Extract the script containing the ytInitialPlayerResponse - $scriptContent = $crawler->filter('script')->reduce(function (Crawler $node) { - return str_contains($node->text(), 'var ytInitialPlayerResponse = {'); - })->text(); - - // Extract and parse the JSON data from the script - $start = strpos($scriptContent, 'var ytInitialPlayerResponse = ') + \strlen('var ytInitialPlayerResponse = '); - $dataString = substr($scriptContent, $start); - $dataString = substr($dataString, 0, strrpos($dataString, ';') ?: null); - $data = json_decode(trim($dataString), true); - - // Extract the URL for the captions - if (!isset($data['captions']['playerCaptionsTracklistRenderer']['captionTracks'][0]['baseUrl'])) { - throw new \Exception('Captions are not available for this video.'); - } - $captionsUrl = $data['captions']['playerCaptionsTracklistRenderer']['captionTracks'][0]['baseUrl']; - - // Fetch and parse the captions XML - $xmlResponse = $this->client->request('GET', $captionsUrl); - $xmlContent = $xmlResponse->getContent(); - $xmlCrawler = new Crawler($xmlContent); - - // Collect all text elements from the captions - $transcript = $xmlCrawler->filter('text')->each(function (Crawler $node) { - return $node->text().' TranscriptFetcher.php'; - }); - - // Combine all the text elements into one string - return implode(\PHP_EOL, $transcript); + return array_reduce($transcript->fetch(), function (string $carry, array $item): string { + return $carry.\PHP_EOL.$item['text']; + }, ''); } } diff --git a/demo/symfony.lock b/demo/symfony.lock index 4255e4cfe0..beeeda4b72 100644 --- a/demo/symfony.lock +++ b/demo/symfony.lock @@ -20,6 +20,18 @@ ".php-cs-fixer.dist.php" ] }, + "php-http/discovery": { + "version": "1.20", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "1.18", + "ref": "f45b5dd173a27873ab19f5e3180b2f661c21de02" + }, + "files": [ + "config/packages/http_discovery.yaml" + ] + }, "php-llm/llm-chain-bundle": { "version": "dev-main" }, diff --git a/demo/tests/YouTube/TranscriptFetcherTest.php b/demo/tests/YouTube/TranscriptFetcherTest.php deleted file mode 100644 index 2d4ac1e8b7..0000000000 --- a/demo/tests/YouTube/TranscriptFetcherTest.php +++ /dev/null @@ -1,36 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace App\Tests\YouTube; - -use App\YouTube\TranscriptFetcher; -use PHPUnit\Framework\Attributes\CoversClass; -use PHPUnit\Framework\TestCase; -use Symfony\Component\HttpClient\MockHttpClient; -use Symfony\Component\HttpClient\Response\MockResponse; - -#[CoversClass(TranscriptFetcher::class), ] -final class TranscriptFetcherTest extends TestCase -{ - public function testFetchTranscript(): void - { - $videoResponse = MockResponse::fromFile(__DIR__.'/fixtures/video.html'); - $transcriptResponse = MockResponse::fromFile(__DIR__.'/fixtures/transcript.xml'); - $mockClient = new MockHttpClient([$videoResponse, $transcriptResponse]); - - $fetcher = new TranscriptFetcher($mockClient); - $transcript = $fetcher->fetchTranscript('6uXW-ulpj0s'); - - self::assertStringContainsString('symphony is a PHP framework', $transcript); - } -} diff --git a/demo/tests/YouTube/fixtures/transcript.xml b/demo/tests/YouTube/fixtures/transcript.xml deleted file mode 100644 index f93f51bb2f..0000000000 --- a/demo/tests/YouTube/fixtures/transcript.xml +++ /dev/null @@ -1,66 +0,0 @@ - - - symphony is a PHP framework and this is - an advantage why because almost 80 - percent of all websites in the internet - use PHP as a server-side language eighty - percent this does mean that wherever you - are right now there is someone near you - probably searching to hire a PHP - developer Symphony will not only teach - you more PHP but also will teach you - different software architecture patterns - that you can use in different languages - software architecture patterns are so - much important in your skill sets - because they allow you to understand - complex software when you only know the - architecture that was used in that - software please let me tell you a story - that happened to me I had a PHP laravel - interview in a company and the interview - was successful so they invite me for a - test work day and that test work day - they asked me to build an application - using.net and Seashore they told me we - know you didn&#39;t had any previous - experience using C sharp but we want to - see how you can get along with different - programming language I was able to - Google and found out that the dotnet - framework is an MVC architect framework - the same framework is used in Symphony - and Bam I built the application in - c-sharp and I got a wonderful job offer - so yes learning Symphony will teach you - software architecture patterns that are - essential in your skill set symphony is - a full stack framework that mean you can - create deploy ready application you will - be using front-end Technologies like - HTML CSS and JavaScript and back-end or - server Technologies like PHP databases - that will process the user request all - in one place Symphony can integrate - easily with modern JavaScript Frameworks - like vue.js or react.js or even you can - set up different databases like MySQL - postgres or whatever you want Symphony - has a CLI tool that can help build and - speak and debug your application and is - one of the most advanced code generation - tool in the planner is relate in the - comment if you know anything that is - good finally documentation Symphony has - good documentation that will make it - easy for newcomers to learn and have fun - with the technology so that was my 6y2 - simple normally I don&#39;t do this but - right now go and check the description - see the comment and write me what you - think like the video and subscribe to my - channel then go to the channel check the - videos and like each one of them and - comment again and come back to this - video and watch it again thank you - diff --git a/demo/tests/YouTube/fixtures/video.html b/demo/tests/YouTube/fixtures/video.html deleted file mode 100644 index b9d313765e..0000000000 --- a/demo/tests/YouTube/fixtures/video.html +++ /dev/null @@ -1,88 +0,0 @@ -Learn Symfony in 2025, 6 reasons why - YouTube
InfoPresseUrheberrechtKontaktCreatorWerbenEntwicklerImpressumVerträge hier kündigenNutzungsbedingungenDatenschutzRichtlinien & SicherheitWie funktioniert YouTube?Neue Funktionen testen