From 6bdd2dfde7ea0507f0b63b1ce9b238d942acfe10 Mon Sep 17 00:00:00 2001 From: Christopher Hertel Date: Sun, 6 Jul 2025 19:04:53 +0200 Subject: [PATCH] chore: update to llm-chain 0.24 --- composer.json | 4 +- composer.lock | 585 +++++++++++++++--------- config/packages/http_discovery.yaml | 10 + config/packages/llm_chain.yaml | 4 +- src/Audio/Chat.php | 6 +- src/Blog/Command/QueryCommand.php | 7 +- src/Blog/Embedder.php | 6 +- src/Video/TwigComponent.php | 8 +- src/YouTube/TranscriptFetcher.php | 44 +- symfony.lock | 12 + tests/YouTube/TranscriptFetcherTest.php | 27 -- tests/YouTube/fixtures/transcript.xml | 66 --- tests/YouTube/fixtures/video.html | 88 ---- 13 files changed, 415 insertions(+), 452 deletions(-) create mode 100644 config/packages/http_discovery.yaml delete mode 100644 tests/YouTube/TranscriptFetcherTest.php delete mode 100644 tests/YouTube/fixtures/transcript.xml delete mode 100644 tests/YouTube/fixtures/video.html diff --git a/composer.json b/composer.json index 6826f64..9e883c9 100644 --- a/composer.json +++ b/composer.json @@ -9,7 +9,9 @@ "ext-iconv": "*", "codewithkyrian/chromadb-php": "^0.4.0", "league/commonmark": "^2.7", - "php-llm/llm-chain-bundle": "^0.22", + "mrmysql/youtube-transcript": "^0.0.5", + "php-http/discovery": "^1.20", + "php-llm/llm-chain-bundle": "^0.24", "runtime/frankenphp-symfony": "^0.2.0", "symfony/asset": "7.3.*", "symfony/asset-mapper": "7.3.*", diff --git a/composer.lock b/composer.lock index 9aaf5da..b76eeef 100644 --- a/composer.lock +++ b/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": "77581522a522ad0ebf6540fa79d0e10a", + "content-hash": "db90222ee206dd7758bfacbeb779b3b8", "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", @@ -1015,16 +1068,16 @@ }, { "name": "nette/utils", - "version": "v4.0.6", + "version": "v4.0.7", "source": { "type": "git", "url": "https://github.com/nette/utils.git", - "reference": "ce708655043c7050eb050df361c5e313cf708309" + "reference": "e67c4061eb40b9c113b218214e42cb5a0dda28f2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/utils/zipball/ce708655043c7050eb050df361c5e313cf708309", - "reference": "ce708655043c7050eb050df361c5e313cf708309", + "url": "https://api.github.com/repos/nette/utils/zipball/e67c4061eb40b9c113b218214e42cb5a0dda28f2", + "reference": "e67c4061eb40b9c113b218214e42cb5a0dda28f2", "shasum": "" }, "require": { @@ -1095,9 +1148,9 @@ ], "support": { "issues": "https://github.com/nette/utils/issues", - "source": "https://github.com/nette/utils/tree/v4.0.6" + "source": "https://github.com/nette/utils/tree/v4.0.7" }, - "time": "2025-03-30T21:06:30+00:00" + "time": "2025-06-03T04:55:08+00:00" }, { "name": "oskarstark/enum-helper", @@ -1150,18 +1203,97 @@ }, "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": "php-llm/llm-chain", - "version": "0.22.0", + "version": "0.24.0", "source": { "type": "git", "url": "https://github.com/php-llm/llm-chain.git", - "reference": "c27618db1646b46ae9524b356bb5561b56f04027" + "reference": "cb6fc83aec7038646a4aa187436d53c8cf05865c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-llm/llm-chain/zipball/c27618db1646b46ae9524b356bb5561b56f04027", - "reference": "c27618db1646b46ae9524b356bb5561b56f04027", + "url": "https://api.github.com/repos/php-llm/llm-chain/zipball/cb6fc83aec7038646a4aa187436d53c8cf05865c", + "reference": "cb6fc83aec7038646a4aa187436d53c8cf05865c", "shasum": "" }, "require": { @@ -1170,7 +1302,6 @@ "php": ">=8.2", "phpdocumentor/reflection-docblock": "^5.4", "phpstan/phpdoc-parser": "^2.1", - "psr/cache": "^3.0", "psr/log": "^3.0", "symfony/clock": "^6.4 || ^7.1", "symfony/http-client": "^6.4 || ^7.1", @@ -1188,20 +1319,27 @@ "async-aws/bedrock-runtime": "^0.1.0", "codewithkyrian/chromadb-php": "^0.2.1 || ^0.3 || ^0.4", "codewithkyrian/transformers": "^0.5.3", - "mongodb/mongodb": "^1.21", + "doctrine/dbal": "^3.0 || ^4.0", + "ext-pdo": "*", + "mongodb/mongodb": "^1.21 || ^2.0", + "mrmysql/youtube-transcript": "^v0.0.5", "php-cs-fixer/shim": "^3.70", + "php-http/discovery": "^1.20", "phpstan/phpstan": "^2.0", "phpstan/phpstan-symfony": "^2.0", "phpstan/phpstan-webmozart-assert": "^2.0", - "phpunit/phpunit": "^11.5", + "phpunit/phpunit": "^11.5.13", "probots-io/pinecone-php": "^1.0", + "psr/http-factory-implementation": "*", "rector/rector": "^2.0", + "symfony/cache": "^6.4 || ^7.1", "symfony/console": "^6.4 || ^7.1", "symfony/css-selector": "^6.4 || ^7.1", "symfony/dom-crawler": "^6.4 || ^7.1", "symfony/dotenv": "^6.4 || ^7.1", "symfony/event-dispatcher": "^6.4 || ^7.1", "symfony/finder": "^6.4 || ^7.1", + "symfony/http-foundation": "^6.4 || ^7.1", "symfony/process": "^6.4 || ^7.1", "symfony/var-dumper": "^6.4 || ^7.1" }, @@ -1209,10 +1347,14 @@ "async-aws/bedrock-runtime": "For using the Bedrock platform.", "codewithkyrian/chromadb-php": "For using the ChromaDB as retrieval vector store.", "codewithkyrian/transformers": "For using the TransformersPHP with FFI to run models in PHP.", + "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.", + "mrmysql/youtube-transcript": "For using the YouTube transcription tool.", "probots-io/pinecone-php": "For using the Pinecone as retrieval vector store.", - "symfony/css-selector": "For using the YouTube transcription tool.", - "symfony/dom-crawler": "For using the YouTube transcription tool." + "psr/cache": "For using the CacheStore as message store.", + "symfony/dom-crawler": "For using the Crawler tool.", + "symfony/http-foundation": "For using the SessionStore as message store." }, "type": "library", "autoload": { @@ -1243,34 +1385,34 @@ ], "support": { "issues": "https://github.com/php-llm/llm-chain/issues", - "source": "https://github.com/php-llm/llm-chain/tree/0.22.0" + "source": "https://github.com/php-llm/llm-chain/tree/0.24.0" }, - "time": "2025-06-01T13:51:19+00:00" + "time": "2025-07-06T17:56:46+00:00" }, { "name": "php-llm/llm-chain-bundle", - "version": "0.22.0", + "version": "0.24.0", "source": { "type": "git", "url": "https://github.com/php-llm/llm-chain-bundle.git", - "reference": "e83812e10daa443598c5e577963e8b010213446d" + "reference": "b3e83d078fe0bfab405b8ef24b52fd74d155bba1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-llm/llm-chain-bundle/zipball/e83812e10daa443598c5e577963e8b010213446d", - "reference": "e83812e10daa443598c5e577963e8b010213446d", + "url": "https://api.github.com/repos/php-llm/llm-chain-bundle/zipball/b3e83d078fe0bfab405b8ef24b52fd74d155bba1", + "reference": "b3e83d078fe0bfab405b8ef24b52fd74d155bba1", "shasum": "" }, "require": { "php": ">=8.2", - "php-llm/llm-chain": "^0.22", + "php-llm/llm-chain": "^0.24", "symfony/config": "^6.4 || ^7.0", "symfony/dependency-injection": "^6.4 || ^7.0", "symfony/framework-bundle": "^6.4 || ^7.0", "symfony/string": "^6.4 || ^7.0" }, "require-dev": { - "php-cs-fixer/shim": "^3.69", + "php-cs-fixer/shim": "^3.78", "phpstan/phpstan": "^2.1", "phpunit/phpunit": "^11.5", "rector/rector": "^2.0" @@ -1298,9 +1440,9 @@ "description": "Symfony integration bundle for php-llm/llm-chain", "support": { "issues": "https://github.com/php-llm/llm-chain-bundle/issues", - "source": "https://github.com/php-llm/llm-chain-bundle/tree/0.22.0" + "source": "https://github.com/php-llm/llm-chain-bundle/tree/0.24.0" }, - "time": "2025-06-01T20:53:32+00:00" + "time": "2025-07-06T18:13:02+00:00" }, { "name": "phpdocumentor/reflection-common", @@ -2181,16 +2323,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": { @@ -2259,7 +2401,7 @@ "psr6" ], "support": { - "source": "https://github.com/symfony/cache/tree/v7.3.0" + "source": "https://github.com/symfony/cache/tree/v7.3.1" }, "funding": [ { @@ -2275,7 +2417,7 @@ "type": "tidelift" } ], - "time": "2025-05-06T19:00:13+00:00" + "time": "2025-06-27T19:55:54+00:00" }, { "name": "symfony/cache-contracts", @@ -2504,16 +2646,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": { @@ -2578,7 +2720,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.3.0" + "source": "https://github.com/symfony/console/tree/v7.3.1" }, "funding": [ { @@ -2594,7 +2736,7 @@ "type": "tidelift" } ], - "time": "2025-05-24T10:34:04+00:00" + "time": "2025-06-27T19:55:54+00:00" }, { "name": "symfony/css-selector", @@ -2663,16 +2805,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": { @@ -2723,7 +2865,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": [ { @@ -2739,7 +2881,7 @@ "type": "tidelift" } ], - "time": "2025-05-19T13:28:56+00:00" + "time": "2025-06-24T04:04:43+00:00" }, { "name": "symfony/deprecation-contracts", @@ -2810,16 +2952,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": { @@ -2857,7 +2999,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": [ { @@ -2873,7 +3015,7 @@ "type": "tidelift" } ], - "time": "2025-03-05T10:15:41+00:00" + "time": "2025-06-15T10:07:06+00:00" }, { "name": "symfony/dotenv", @@ -2951,16 +3093,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": { @@ -3008,7 +3150,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": [ { @@ -3024,7 +3166,7 @@ "type": "tidelift" } ], - "time": "2025-05-29T07:19:49+00:00" + "time": "2025-06-13T07:48:40+00:00" }, { "name": "symfony/event-dispatcher", @@ -3314,16 +3456,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": { @@ -3362,7 +3504,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": [ { @@ -3378,20 +3520,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": { @@ -3516,7 +3658,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": [ { @@ -3532,20 +3674,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": { @@ -3557,6 +3699,7 @@ }, "conflict": { "amphp/amp": "<2.5", + "amphp/socket": "<1.1", "php-http/discovery": "<1.15", "symfony/http-foundation": "<6.4" }, @@ -3569,7 +3712,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", @@ -3611,7 +3753,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": [ { @@ -3627,7 +3769,7 @@ "type": "tidelift" } ], - "time": "2025-05-02T08:23:16+00:00" + "time": "2025-06-28T07:58:39+00:00" }, { "name": "symfony/http-client-contracts", @@ -3709,16 +3851,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": { @@ -3768,7 +3910,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": [ { @@ -3784,20 +3926,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": { @@ -3882,7 +4024,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": [ { @@ -3898,7 +4040,7 @@ "type": "tidelift" } ], - "time": "2025-05-29T07:47:32+00:00" + "time": "2025-06-28T08:24:55+00:00" }, { "name": "symfony/monolog-bridge", @@ -4299,16 +4441,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": { @@ -4355,7 +4497,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": [ { @@ -4371,27 +4513,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", @@ -4441,7 +4583,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": [ { @@ -4457,7 +4599,7 @@ "type": "tidelift" } ], - "time": "2025-04-04T13:12:05+00:00" + "time": "2025-06-27T19:55:54+00:00" }, { "name": "symfony/routing", @@ -4542,16 +4684,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": { @@ -4601,7 +4743,7 @@ "runtime" ], "support": { - "source": "https://github.com/symfony/runtime/tree/v7.3.0" + "source": "https://github.com/symfony/runtime/tree/v7.3.1" }, "funding": [ { @@ -4617,20 +4759,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": { @@ -4699,7 +4841,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": [ { @@ -4715,7 +4857,7 @@ "type": "tidelift" } ], - "time": "2025-05-12T14:48:23+00:00" + "time": "2025-06-27T19:55:54+00:00" }, { "name": "symfony/service-contracts", @@ -4802,16 +4944,16 @@ }, { "name": "symfony/stimulus-bundle", - "version": "v2.25.2", + "version": "v2.27.0", "source": { "type": "git", "url": "https://github.com/symfony/stimulus-bundle.git", - "reference": "5a6aef0646119530da862d5afa1386ade3b9ed43" + "reference": "defaeb91bd366f9f43dbe54dbdfd9bc3c4138814" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stimulus-bundle/zipball/5a6aef0646119530da862d5afa1386ade3b9ed43", - "reference": "5a6aef0646119530da862d5afa1386ade3b9ed43", + "url": "https://api.github.com/repos/symfony/stimulus-bundle/zipball/defaeb91bd366f9f43dbe54dbdfd9bc3c4138814", + "reference": "defaeb91bd366f9f43dbe54dbdfd9bc3c4138814", "shasum": "" }, "require": { @@ -4851,7 +4993,7 @@ "symfony-ux" ], "support": { - "source": "https://github.com/symfony/stimulus-bundle/tree/v2.25.2" + "source": "https://github.com/symfony/stimulus-bundle/tree/v2.27.0" }, "funding": [ { @@ -4867,7 +5009,7 @@ "type": "tidelift" } ], - "time": "2025-05-19T11:54:27+00:00" + "time": "2025-06-22T19:07:55+00:00" }, { "name": "symfony/string", @@ -5147,16 +5289,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": { @@ -5211,7 +5353,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": [ { @@ -5227,20 +5369,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": { @@ -5290,7 +5432,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": [ { @@ -5306,20 +5448,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": { @@ -5364,7 +5506,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/uid/tree/v7.3.0" + "source": "https://github.com/symfony/uid/tree/v7.3.1" }, "funding": [ { @@ -5380,20 +5522,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.25.0", + "version": "v2.27.0", "source": { "type": "git", "url": "https://github.com/symfony/ux-icons.git", - "reference": "430b2753aa55a46baa001055bf7976b62bc96942" + "reference": "af6d09779e786717c6e3b5a8a004e8c18ce3ef00" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/ux-icons/zipball/430b2753aa55a46baa001055bf7976b62bc96942", - "reference": "430b2753aa55a46baa001055bf7976b62bc96942", + "url": "https://api.github.com/repos/symfony/ux-icons/zipball/af6d09779e786717c6e3b5a8a004e8c18ce3ef00", + "reference": "af6d09779e786717c6e3b5a8a004e8c18ce3ef00", "shasum": "" }, "require": { @@ -5453,7 +5595,7 @@ "twig" ], "support": { - "source": "https://github.com/symfony/ux-icons/tree/v2.25.0" + "source": "https://github.com/symfony/ux-icons/tree/v2.27.0" }, "funding": [ { @@ -5469,20 +5611,20 @@ "type": "tidelift" } ], - "time": "2025-04-07T13:54:07+00:00" + "time": "2025-06-17T06:15:15+00:00" }, { "name": "symfony/ux-live-component", - "version": "v2.25.2", + "version": "v2.27.0", "source": { "type": "git", "url": "https://github.com/symfony/ux-live-component.git", - "reference": "79e8cc179eb21119547c492ae21e4bf529ac1a15" + "reference": "05def4e467d378810f46f826dc67506180df8bd2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/ux-live-component/zipball/79e8cc179eb21119547c492ae21e4bf529ac1a15", - "reference": "79e8cc179eb21119547c492ae21e4bf529ac1a15", + "url": "https://api.github.com/repos/symfony/ux-live-component/zipball/05def4e467d378810f46f826dc67506180df8bd2", + "reference": "05def4e467d378810f46f826dc67506180df8bd2", "shasum": "" }, "require": { @@ -5495,7 +5637,9 @@ "twig/twig": "^3.10.3" }, "conflict": { - "symfony/config": "<5.4.0" + "symfony/config": "<5.4.0", + "symfony/property-info": "~7.0.0", + "symfony/type-info": "<7.2" }, "require-dev": { "doctrine/annotations": "^1.0", @@ -5548,7 +5692,7 @@ "twig" ], "support": { - "source": "https://github.com/symfony/ux-live-component/tree/v2.25.2" + "source": "https://github.com/symfony/ux-live-component/tree/v2.27.0" }, "funding": [ { @@ -5564,20 +5708,20 @@ "type": "tidelift" } ], - "time": "2025-05-19T11:54:27+00:00" + "time": "2025-06-22T19:07:55+00:00" }, { "name": "symfony/ux-turbo", - "version": "v2.25.2", + "version": "v2.27.0", "source": { "type": "git", "url": "https://github.com/symfony/ux-turbo.git", - "reference": "11ebca138005c7e25678c3f98a07ddf718a0480c" + "reference": "b9ce9b30a9cf9bbd090c7ad290bdaf84a0e100b2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/ux-turbo/zipball/11ebca138005c7e25678c3f98a07ddf718a0480c", - "reference": "11ebca138005c7e25678c3f98a07ddf718a0480c", + "url": "https://api.github.com/repos/symfony/ux-turbo/zipball/b9ce9b30a9cf9bbd090c7ad290bdaf84a0e100b2", + "reference": "b9ce9b30a9cf9bbd090c7ad290bdaf84a0e100b2", "shasum": "" }, "require": { @@ -5591,7 +5735,8 @@ "dbrekelmans/bdi": "dev-main", "doctrine/doctrine-bundle": "^2.4.3", "doctrine/orm": "^2.8 | 3.0", - "phpstan/phpstan": "^1.10", + "php-webdriver/webdriver": "^1.15", + "phpstan/phpstan": "^2.1.17", "symfony/asset-mapper": "^6.4|^7.0", "symfony/debug-bundle": "^5.4|^6.0|^7.0", "symfony/expression-language": "^5.4|^6.0|^7.0", @@ -5599,7 +5744,7 @@ "symfony/framework-bundle": "^6.4|^7.0", "symfony/mercure-bundle": "^0.3.7", "symfony/messenger": "^5.4|^6.0|^7.0", - "symfony/panther": "^2.1", + "symfony/panther": "^2.2", "symfony/phpunit-bridge": "^5.4|^6.0|^7.0", "symfony/process": "^5.4|6.3.*|^7.0", "symfony/property-access": "^5.4|^6.0|^7.0", @@ -5646,7 +5791,7 @@ "turbo-stream" ], "support": { - "source": "https://github.com/symfony/ux-turbo/tree/v2.25.2" + "source": "https://github.com/symfony/ux-turbo/tree/v2.27.0" }, "funding": [ { @@ -5662,20 +5807,20 @@ "type": "tidelift" } ], - "time": "2025-05-19T11:54:27+00:00" + "time": "2025-06-06T20:27:21+00:00" }, { "name": "symfony/ux-twig-component", - "version": "v2.25.2", + "version": "v2.27.0", "source": { "type": "git", "url": "https://github.com/symfony/ux-twig-component.git", - "reference": "d20da25517fc09d147897d02819a046f0a0f6735" + "reference": "0879cd53812b79e8b6a20e104b6e785a2ac2c013" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/ux-twig-component/zipball/d20da25517fc09d147897d02819a046f0a0f6735", - "reference": "d20da25517fc09d147897d02819a046f0a0f6735", + "url": "https://api.github.com/repos/symfony/ux-twig-component/zipball/0879cd53812b79e8b6a20e104b6e785a2ac2c013", + "reference": "0879cd53812b79e8b6a20e104b6e785a2ac2c013", "shasum": "" }, "require": { @@ -5729,7 +5874,7 @@ "twig" ], "support": { - "source": "https://github.com/symfony/ux-twig-component/tree/v2.25.2" + "source": "https://github.com/symfony/ux-twig-component/tree/v2.27.0" }, "funding": [ { @@ -5745,22 +5890,26 @@ "type": "tidelift" } ], - "time": "2025-05-20T13:06:01+00:00" + "time": "2025-06-21T16:41:28+00:00" }, { "name": "symfony/ux-typed", - "version": "v2.25.2", + "version": "v2.27.0", "source": { "type": "git", "url": "https://github.com/symfony/ux-typed.git", - "reference": "d6dd9f8a1cd3db7c109202391c59e0817aee8131" + "reference": "929f1e41c7f4898f9f509c96b798ed1bc241e33f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/ux-typed/zipball/d6dd9f8a1cd3db7c109202391c59e0817aee8131", - "reference": "d6dd9f8a1cd3db7c109202391c59e0817aee8131", + "url": "https://api.github.com/repos/symfony/ux-typed/zipball/929f1e41c7f4898f9f509c96b798ed1bc241e33f", + "reference": "929f1e41c7f4898f9f509c96b798ed1bc241e33f", "shasum": "" }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3" + }, "conflict": { "symfony/flex": "<1.13" }, @@ -5796,7 +5945,7 @@ "symfony-ux" ], "support": { - "source": "https://github.com/symfony/ux-typed/tree/v2.25.2" + "source": "https://github.com/symfony/ux-typed/tree/v2.27.0" }, "funding": [ { @@ -5812,20 +5961,20 @@ "type": "tidelift" } ], - "time": "2025-05-19T11:54:27+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": { @@ -5880,7 +6029,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": [ { @@ -5896,7 +6045,7 @@ "type": "tidelift" } ], - "time": "2025-04-27T18:39:23+00:00" + "time": "2025-06-27T19:55:54+00:00" }, { "name": "symfony/var-exporter", @@ -5977,16 +6126,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": { @@ -6029,7 +6178,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": [ { @@ -6045,7 +6194,7 @@ "type": "tidelift" } ], - "time": "2025-04-04T10:10:33+00:00" + "time": "2025-06-03T06:57:57+00:00" }, { "name": "twig/extra-bundle", @@ -6334,16 +6483,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": { @@ -6382,7 +6531,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": [ { @@ -6390,7 +6539,7 @@ "type": "tidelift" } ], - "time": "2025-04-29T12:36:36+00:00" + "time": "2025-07-05T12:25:42+00:00" }, { "name": "nikic/php-parser", @@ -6627,16 +6776,16 @@ }, { "name": "php-cs-fixer/shim", - "version": "v3.75.0", + "version": "v3.78.1", "source": { "type": "git", "url": "https://github.com/PHP-CS-Fixer/shim.git", - "reference": "eea219a577085bd13ff0cb644a422c20798316c7" + "reference": "f6f362075a3e23540ef435e1071c5bb8641628e1" }, "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/f6f362075a3e23540ef435e1071c5bb8641628e1", + "reference": "f6f362075a3e23540ef435e1071c5bb8641628e1", "shasum": "" }, "require": { @@ -6673,9 +6822,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.78.1" }, - "time": "2025-03-31T18:45:02+00:00" + "time": "2025-07-06T14:13:56+00:00" }, { "name": "phpstan/phpstan", @@ -6737,16 +6886,16 @@ }, { "name": "phpunit/php-code-coverage", - "version": "11.0.9", + "version": "11.0.10", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "14d63fbcca18457e49c6f8bebaa91a87e8e188d7" + "reference": "1a800a7446add2d79cc6b3c01c45381810367d76" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/14d63fbcca18457e49c6f8bebaa91a87e8e188d7", - "reference": "14d63fbcca18457e49c6f8bebaa91a87e8e188d7", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/1a800a7446add2d79cc6b3c01c45381810367d76", + "reference": "1a800a7446add2d79cc6b3c01c45381810367d76", "shasum": "" }, "require": { @@ -6803,15 +6952,27 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/11.0.9" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/show" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/php-code-coverage", + "type": "tidelift" } ], - "time": "2025-02-25T13:26:39+00:00" + "time": "2025-06-18T08:56:18+00:00" }, { "name": "phpunit/php-file-iterator", @@ -7060,16 +7221,16 @@ }, { "name": "phpunit/phpunit", - "version": "11.5.21", + "version": "11.5.26", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "d565e2cdc21a7db9dc6c399c1fc2083b8010f289" + "reference": "4ad8fe263a0b55b54a8028c38a18e3c5bef312e0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/d565e2cdc21a7db9dc6c399c1fc2083b8010f289", - "reference": "d565e2cdc21a7db9dc6c399c1fc2083b8010f289", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/4ad8fe263a0b55b54a8028c38a18e3c5bef312e0", + "reference": "4ad8fe263a0b55b54a8028c38a18e3c5bef312e0", "shasum": "" }, "require": { @@ -7083,7 +7244,7 @@ "phar-io/manifest": "^2.0.4", "phar-io/version": "^3.2.1", "php": ">=8.2", - "phpunit/php-code-coverage": "^11.0.9", + "phpunit/php-code-coverage": "^11.0.10", "phpunit/php-file-iterator": "^5.1.0", "phpunit/php-invoker": "^5.0.1", "phpunit/php-text-template": "^4.0.1", @@ -7141,7 +7302,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.21" + "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.26" }, "funding": [ { @@ -7165,7 +7326,7 @@ "type": "tidelift" } ], - "time": "2025-05-21T12:35:00+00:00" + "time": "2025-07-04T05:58:21+00:00" }, { "name": "sebastian/cli-parser", @@ -8360,16 +8521,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": { @@ -8425,7 +8586,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": [ { @@ -8441,7 +8602,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/config/packages/http_discovery.yaml b/config/packages/http_discovery.yaml new file mode 100644 index 0000000..2a789e7 --- /dev/null +++ b/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/config/packages/llm_chain.yaml b/config/packages/llm_chain.yaml index e8ea8f8..2ded47d 100644 --- a/config/packages/llm_chain.yaml +++ b/config/packages/llm_chain.yaml @@ -44,7 +44,7 @@ llm_chain: chroma_db: symfonycon: collection: 'symfony_blog' - embedder: + indexer: default: model: name: 'Embeddings' @@ -61,5 +61,5 @@ services: # $apiKey: '%env(SERP_API_KEY)%' PhpLlm\LlmChain\Chain\Toolbox\Tool\Wikipedia: ~ PhpLlm\LlmChain\Chain\Toolbox\Tool\SimilaritySearch: - $model: '@llm_chain.embedder.default.model' + $model: '@llm_chain.indexer.default.model' diff --git a/src/Audio/Chat.php b/src/Audio/Chat.php index f8ea7fc..e54fa16 100644 --- a/src/Audio/Chat.php +++ b/src/Audio/Chat.php @@ -10,7 +10,6 @@ use PhpLlm\LlmChain\Platform\Message\Message; use PhpLlm\LlmChain\Platform\Message\MessageBag; use PhpLlm\LlmChain\Platform\PlatformInterface; -use PhpLlm\LlmChain\Platform\Response\AsyncResponse; use PhpLlm\LlmChain\Platform\Response\TextResponse; use Symfony\Component\DependencyInjection\Attribute\Autowire; use Symfony\Component\HttpFoundation\RequestStack; @@ -34,11 +33,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/src/Blog/Command/QueryCommand.php b/src/Blog/Command/QueryCommand.php index 2a5d15c..af0f183 100644 --- a/src/Blog/Command/QueryCommand.php +++ b/src/Blog/Command/QueryCommand.php @@ -7,8 +7,6 @@ use Codewithkyrian\ChromaDB\Client; use PhpLlm\LlmChain\Platform\Bridge\OpenAI\Embeddings; use PhpLlm\LlmChain\Platform\PlatformInterface; -use PhpLlm\LlmChain\Platform\Response\AsyncResponse; -use PhpLlm\LlmChain\Platform\Response\VectorResponse; use Symfony\Component\Console\Attribute\AsCommand; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputInterface; @@ -44,11 +42,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/src/Blog/Embedder.php b/src/Blog/Embedder.php index 8185aae..bf2068a 100644 --- a/src/Blog/Embedder.php +++ b/src/Blog/Embedder.php @@ -6,13 +6,13 @@ use PhpLlm\LlmChain\Store\Document\Metadata; use PhpLlm\LlmChain\Store\Document\TextDocument; -use PhpLlm\LlmChain\Store\Embedder as LlmChainEmbedder; +use PhpLlm\LlmChain\Store\Indexer; final readonly class Embedder { public function __construct( private FeedLoader $loader, - private LlmChainEmbedder $embedder, + private Indexer $indexer, ) { } @@ -23,6 +23,6 @@ public function embedBlog(): void $documents[] = new TextDocument($post->id, $post->toString(), new Metadata($post->toArray())); } - $this->embedder->embed($documents); + $this->indexer->index($documents); } } diff --git a/src/Video/TwigComponent.php b/src/Video/TwigComponent.php index 3b5cd05..56fe161 100644 --- a/src/Video/TwigComponent.php +++ b/src/Video/TwigComponent.php @@ -9,8 +9,6 @@ use PhpLlm\LlmChain\Platform\Message\Message; use PhpLlm\LlmChain\Platform\Message\MessageBag; use PhpLlm\LlmChain\Platform\PlatformInterface; -use PhpLlm\LlmChain\Platform\Response\AsyncResponse; -use PhpLlm\LlmChain\Platform\Response\TextResponse; use Symfony\UX\LiveComponent\Attribute\AsLiveComponent; use Symfony\UX\LiveComponent\Attribute\LiveAction; use Symfony\UX\LiveComponent\Attribute\LiveArg; @@ -46,10 +44,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/src/YouTube/TranscriptFetcher.php b/src/YouTube/TranscriptFetcher.php index d99a7f7..d6c4a57 100644 --- a/src/YouTube/TranscriptFetcher.php +++ b/src/YouTube/TranscriptFetcher.php @@ -4,7 +4,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 @@ -16,41 +17,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().' '; - }); - - // 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/symfony.lock b/symfony.lock index a5d7b7f..f06096c 100644 --- a/symfony.lock +++ b/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/tests/YouTube/TranscriptFetcherTest.php b/tests/YouTube/TranscriptFetcherTest.php deleted file mode 100644 index 5a65b4a..0000000 --- a/tests/YouTube/TranscriptFetcherTest.php +++ /dev/null @@ -1,27 +0,0 @@ -fetchTranscript('6uXW-ulpj0s'); - - self::assertStringContainsString('symphony is a PHP framework', $transcript); - } -} diff --git a/tests/YouTube/fixtures/transcript.xml b/tests/YouTube/fixtures/transcript.xml deleted file mode 100644 index f93f51b..0000000 --- a/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/tests/YouTube/fixtures/video.html b/tests/YouTube/fixtures/video.html deleted file mode 100644 index 9ecea3f..0000000 --- a/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
\ No newline at end of file