diff --git a/.konflux/build-args-konflux.conf b/.konflux/build-args-konflux.conf index 18b2697ee..d75c52951 100644 --- a/.konflux/build-args-konflux.conf +++ b/.konflux/build-args-konflux.conf @@ -1,4 +1,4 @@ -BUILDER_BASE_IMAGE=registry.redhat.io/rhai/base-image-cpu-rhel9:3.2 +BUILDER_BASE_IMAGE=registry.redhat.io/rhai/base-image-cpu-rhel9:3.4.0-1777399554 BUILDER_DNF_COMMAND=dnf -RUNTIME_BASE_IMAGE=registry.redhat.io/rhai/base-image-cpu-rhel9:3.2 +RUNTIME_BASE_IMAGE=registry.redhat.io/rhai/base-image-cpu-rhel9:3.4.0-1777399554 RUNTIME_DNF_COMMAND=dnf diff --git a/.konflux/profiles.toml b/.konflux/profiles.toml new file mode 100644 index 000000000..b3b60da7a --- /dev/null +++ b/.konflux/profiles.toml @@ -0,0 +1,14 @@ +[common] +python_version = "3.12" +platforms = ["x86_64", "aarch64"] +bootstrap_packages = ["uv-build", "uv", "pip", "maturin"] + +[profiles.cpu] +rhoai_index_url = "https://packages.redhat.com/api/pypi/public-rhai/rhoai/3.4/cpu-ubi9/simple/" +output_suffix = "" +tekton_files = [ + ".tekton/lightspeed-stack-pull-request.yaml", + ".tekton/lightspeed-stack-push.yaml", + ".tekton/lightspeed-stack-0-6-pull-request.yaml", + ".tekton/lightspeed-stack-0-6-push.yaml", +] diff --git a/.konflux/pypi_wheel_only.txt b/.konflux/pypi_wheel_only.txt new file mode 100644 index 000000000..82469f5fd --- /dev/null +++ b/.konflux/pypi_wheel_only.txt @@ -0,0 +1,8 @@ +# Packages where PyPI has an sdist but it cannot be built reliably. +# Rust/C++ bootstrap, binary-only distributions, CUDA stack. +# +# Pure-Python packages whose build backends pull in C-extension deps +# (e.g. jinja2→markupsafe) that conflict with RHOAI-rebuilt wheels. +a2a-sdk +opentelemetry-distro +pydantic-ai-skills diff --git a/.konflux/requirements-build.txt b/.konflux/requirements-build.txt index 56c93f10e..01f505d46 100644 --- a/.konflux/requirements-build.txt +++ b/.konflux/requirements-build.txt @@ -1,171 +1 @@ -# -# This file is autogenerated by pip-compile with Python 3.13 -# by the following command: -# -# pybuild-deps compile --output-file=requirements-build.txt requirements.source.txt -# -calver==2025.10.20 - # via trove-classifiers -cython==3.2.4 - # via oracledb -dunamai==1.26.1 - # via uv-dynamic-versioning -flit-core==3.12.0 - # via - # click - # jinja2 - # packaging - # pathspec - # pypdf - # wheel -hatch-fancy-pypi-readme==25.1.0 - # via - # attrs - # llama-stack-client - # openai -hatch-vcs==0.5.0 - # via - # attrs - # chardet - # filelock -hatchling==1.26.3 - # via - # hatch-fancy-pypi-readme - # llama-stack-client - # openai -hatchling==1.29.0 - # via - # a2a-sdk - # attrs - # chardet - # filelock - # hatch-fancy-pypi-readme - # hatch-vcs - # mcp - # opentelemetry-api - # opentelemetry-distro - # opentelemetry-exporter-otlp - # opentelemetry-exporter-otlp-proto-common - # opentelemetry-exporter-otlp-proto-grpc - # opentelemetry-exporter-otlp-proto-http - # opentelemetry-instrumentation - # opentelemetry-proto - # opentelemetry-sdk - # opentelemetry-semantic-conventions - # pydantic-settings - # pygments - # pythainlp - # python-multipart - # starlette - # uv-dynamic-versioning - # uvicorn - # wcwidth -jinja2==3.1.6 - # via uv-dynamic-versioning -markupsafe==3.0.3 - # via jinja2 -maturin==1.10.2 - # via fastuuid -packaging==26.0 - # via - # dunamai - # hatchling - # setuptools-scm - # vcs-versioning - # wheel -pathspec==1.0.4 - # via hatchling -pdm-backend==2.4.8 - # via fastapi -pkgconfig==1.6.0 - # via aiohttp -pluggy==1.6.0 - # via hatchling -poetry-core==2.3.2 - # via - # dunamai - # litellm - # pkgconfig - # rich - # tomlkit -semantic-version==2.10.0 - # via setuptools-rust -setuptools-rust==1.12.1 - # via maturin -setuptools-scm==10.0.5 - # via - # hatch-vcs - # llama-stack - # llama-stack-api - # pluggy - # setuptools-rust - # tenacity -tomlkit==0.14.0 - # via uv-dynamic-versioning -trove-classifiers==2026.1.14.14 - # via hatchling -uv-dynamic-versioning==0.14.0 - # via - # a2a-sdk - # mcp -vcs-versioning==1.1.1 - # via setuptools-scm -wheel==0.46.3 - # via - # authlib - # azure-core - # azure-identity - # cachetools - # litellm - # oracledb - # sentence-transformers - # tornado - # tzdata - -# The following packages are considered to be unsafe in a requirements file: -setuptools==82.0.1 - # via - # aiohttp - # authlib - # azure-core - # azure-identity - # blobfile - # cachetools - # calver - # certifi - # charset-normalizer - # emoji - # google-api-core - # google-cloud-bigquery - # googleapis-common-protos - # greenlet - # grpc-google-iam-v1 - # joserfc - # llama-stack - # llama-stack-api - # markupsafe - # maturin - # multiprocess - # oracledb - # pathspec - # pluggy - # polyleven - # proto-plus - # psutil - # pyasn1 - # pycryptodomex - # pyjwt - # python-dotenv - # regex - # requests - # semver - # sentence-transformers - # setuptools-rust - # setuptools-scm - # sse-starlette - # tenacity - # tornado - # trl - # trove-classifiers - # tzdata - # vcs-versioning \ No newline at end of file +# No sdist packages — no build dependencies needed. diff --git a/.konflux/requirements.hashes.source.txt b/.konflux/requirements.hashes.source.txt index d7eb66756..c1d470df5 100644 --- a/.konflux/requirements.hashes.source.txt +++ b/.konflux/requirements.hashes.source.txt @@ -1,1108 +1 @@ -# This file was autogenerated by uv via the following command: -# uv pip compile requirements.source.txt --refresh --generate-hashes --python-version 3.12 --emit-index-url --no-deps --no-annotate --index-url https://pypi.org/simple - -a2a-sdk==0.3.26 \ - --hash=sha256:44068e2d037afbb07ab899267439e9bc7eaa7ac2af94f1e8b239933c993ad52d \ - --hash=sha256:754e0573f6d33b225c1d8d51f640efa69cbbed7bdfb06ce9c3540ea9f58d4a91 -accelerate==1.13.0 \ - --hash=sha256:cf1a3efb96c18f7b152eb0fa7490f3710b19c3f395699358f08decca2b8b62e0 \ - --hash=sha256:d631b4e0f5b3de4aff2d7e9e6857d164810dfc3237d54d017f075122d057b236 -aiohttp==3.13.5 \ - --hash=sha256:019a67772e034a0e6b9b17c13d0a8fe56ad9fb150fc724b7f3ffd3724288d9e5 \ - --hash=sha256:02222e7e233295f40e011c1b00e3b0bd451f22cf853a0304c3595633ee47da4b \ - --hash=sha256:023ecba036ddd840b0b19bf195bfae970083fd7024ce1ac22e9bba90464620e9 \ - --hash=sha256:02e048037a6501a5ec1f6fc9736135aec6eb8a004ce48838cb951c515f32c80b \ - --hash=sha256:0494a01ca9584eea1e5fbd6d748e61ecff218c51b576ee1999c23db7066417d8 \ - --hash=sha256:0f7a18f258d124cd678c5fe072fe4432a4d5232b0657fca7c1847f599233c83a \ - --hash=sha256:10a75acfcf794edf9d8db50e5a7ec5fc818b2a8d3f591ce93bc7b1210df016d2 \ - --hash=sha256:110e448e02c729bcebb18c60b9214a87ba33bac4a9fa5e9a5f139938b56c6cb1 \ - --hash=sha256:147b4f501d0292077f29d5268c16bb7c864a1f054d7001c4c1812c0421ea1ed0 \ - --hash=sha256:157826e2fa245d2ef46c83ea8a5faf77ca19355d278d425c29fda0beb3318037 \ - --hash=sha256:15c933ad7920b7d9a20de151efcd05a6e38302cbf0e10c9b2acb9a42210a2416 \ - --hash=sha256:178c7b5e62b454c2bc790786e6058c3cc968613b4419251b478c153a4aec32b1 \ - --hash=sha256:18a2f6c1182c51baa1d28d68fea51513cb2a76612f038853c0ad3c145423d3d9 \ - --hash=sha256:1efb06900858bb618ff5cee184ae2de5828896c448403d51fb633f09e109be0a \ - --hash=sha256:20058e23909b9e65f9da62b396b77dfa95965cbe840f8def6e572538b1d32e36 \ - --hash=sha256:206b7b3ef96e4ce211754f0cd003feb28b7d81f0ad26b8d077a5d5161436067f \ - --hash=sha256:20ae0ff08b1f2c8788d6fb85afcb798654ae6ba0b747575f8562de738078457b \ - --hash=sha256:2294172ce08a82fb7c7273485895de1fa1186cc8294cfeb6aef4af42ad261174 \ - --hash=sha256:241a94f7de7c0c3b616627aaad530fe2cb620084a8b144d3be7b6ecfe95bae3b \ - --hash=sha256:26d2f8546f1dfa75efa50c3488215a903c0168d253b75fba4210f57ab77a0fb8 \ - --hash=sha256:2837fb92951564d6339cedae4a7231692aa9f73cbc4fb2e04263b96844e03b4e \ - --hash=sha256:2994be9f6e51046c4f864598fd9abeb4fba6e88f0b2152422c9666dcd4aea9c6 \ - --hash=sha256:2d6d44a5b48132053c2f6cd5c8cb14bc67e99a63594e336b0f2af81e94d5530c \ - --hash=sha256:31cebae8b26f8a615d2b546fee45d5ffb76852ae6450e2a03f42c9102260d6fe \ - --hash=sha256:327cc432fdf1356fb4fbc6fe833ad4e9f6aacb71a8acaa5f1855e4b25910e4a9 \ - --hash=sha256:329f292ed14d38a6c4c435e465f48bebb47479fd676a0411936cc371643225cc \ - --hash=sha256:330f5da04c987f1d5bdb8ae189137c77139f36bd1cb23779ca1a354a4b027800 \ - --hash=sha256:33add2463dde55c4f2d9635c6ab33ce154e5ecf322bd26d09af95c5f81cfa286 \ - --hash=sha256:347542f0ea3f95b2a955ee6656461fa1c776e401ac50ebce055a6c38454a0adf \ - --hash=sha256:39380e12bd1f2fdab4285b6e055ad48efbaed5c836433b142ed4f5b9be71036a \ - --hash=sha256:3a807cabd5115fb55af198b98178997a5e0e57dead43eb74a93d9c07d6d4a7dc \ - --hash=sha256:3b13560160d07e047a93f23aaa30718606493036253d5430887514715b67c9d9 \ - --hash=sha256:3df334e39d4c2f899a914f1dba283c1aadc311790733f705182998c6f7cae665 \ - --hash=sha256:4bb6bf5811620003614076bdc807ef3b5e38244f9d25ca5fe888eaccea2a9832 \ - --hash=sha256:4beac52e9fe46d6abf98b0176a88154b742e878fdf209d2248e99fcdf73cd297 \ - --hash=sha256:4e704c52438f66fdd89588346183d898bb42167cf88f8b7ff1c0f9fc957c348f \ - --hash=sha256:4eac02d9af4813ee289cd63a361576da36dba57f5a1ab36377bc2600db0cbb73 \ - --hash=sha256:53fc049ed6390d05423ba33103ded7281fe897cf97878f369a527070bd95795b \ - --hash=sha256:55b3bdd3292283295774ab585160c4004f4f2f203946997f49aac032c84649e9 \ - --hash=sha256:57653eac22c6a4c13eb22ecf4d673d64a12f266e72785ab1c8b8e5940d0e8090 \ - --hash=sha256:60869c7ac4aaabe7110f26499f3e6e5696eae98144735b12a9c3d9eae2b51a49 \ - --hash=sha256:636bc362f0c5bbc7372bc3ae49737f9e3030dbce469f0f422c8f38079780363d \ - --hash=sha256:676e5651705ad5d8a70aeb8eb6936c436d8ebbd56e63436cb7dd9bb36d2a9a46 \ - --hash=sha256:69f571de7500e0557801c0b51f4780482c0ec5fe2ac851af5a92cfce1af1cb83 \ - --hash=sha256:6a7cbeb06d1070f1d14895eeeed4dac5913b22d7b456f2eb969f11f4b3993796 \ - --hash=sha256:6cf81fe010b8c17b09495cbd15c1d35afbc8fb405c0c9cf4738e5ae3af1d65be \ - --hash=sha256:6e27ea05d184afac78aabbac667450c75e54e35f62238d44463131bd3f96753d \ - --hash=sha256:6f1cbf0c7926d315c3c26c2da41fd2b5d2fe01ac0e157b78caefc51a782196cf \ - --hash=sha256:6f497a6876aa4b1a102b04996ce4c1170c7040d83faa9387dd921c16e30d5c83 \ - --hash=sha256:756c3c304d394977519824449600adaf2be0ccee76d206ee339c5e76b70ded25 \ - --hash=sha256:77dfa48c9f8013271011e51c00f8ada19851f013cde2c48fca1ba5e0caf5bb06 \ - --hash=sha256:7996023b2ed59489ae4762256c8516df9820f751cf2c5da8ed2fb20ee50abab3 \ - --hash=sha256:7ab7229b6f9b5c1ba4910d6c41a9eb11f543eadb3f384df1b4c293f4e73d44d6 \ - --hash=sha256:7becdf835feff2f4f335d7477f121af787e3504b48b449ff737afb35869ba7bb \ - --hash=sha256:7c35b0bf0b48a70b4cb4fc5d7bed9b932532728e124874355de1a0af8ec4bc88 \ - --hash=sha256:7c4b6668b2b2b9027f209ddf647f2a4407784b5d88b8be4efcc72036f365baf9 \ - --hash=sha256:7e5dc4311bd5ac493886c63cbf76ab579dbe4641268e7c74e48e774c74b6f2be \ - --hash=sha256:888e78eb5ca55a615d285c3c09a7a91b42e9dd6fc699b166ebd5dee87c9ccf14 \ - --hash=sha256:898703aa2667e3c5ca4c54ca36cd73f58b7a38ef87a5606414799ebce4d3fd3a \ - --hash=sha256:8b14eb3262fad0dc2f89c1a43b13727e709504972186ff6a99a3ecaa77102b6c \ - --hash=sha256:8bd3ec6376e68a41f9f95f5ed170e2fcf22d4eb27a1f8cb361d0508f6e0557f3 \ - --hash=sha256:8cf20a8d6868cb15a73cab329ffc07291ba8c22b1b88176026106ae39aa6df0f \ - --hash=sha256:8f14c50708bb156b3a3ca7230b3d820199d56a48e3af76fa21c2d6087190fe3d \ - --hash=sha256:8f546a4dc1e6a5edbb9fd1fd6ad18134550e096a5a43f4ad74acfbd834fc6670 \ - --hash=sha256:912d4b6af530ddb1338a66229dac3a25ff11d4448be3ec3d6340583995f56031 \ - --hash=sha256:9277145d36a01653863899c665243871434694bcc3431922c3b35c978061bdb8 \ - --hash=sha256:95d14ca7abefde230f7639ec136ade282655431fd5db03c343b19dda72dd1643 \ - --hash=sha256:999802d5fa0389f58decd24b537c54aa63c01c3219ce17d1214cbda3c2b22d2d \ - --hash=sha256:9a0f4474b6ea6818b41f82172d799e4b3d29e22c2c520ce4357856fced9af2f8 \ - --hash=sha256:9b16c653d38eb1a611cc898c41e76859ca27f119d25b53c12875fd0474ae31a8 \ - --hash=sha256:9d98cc980ecc96be6eb4c1994ce35d28d8b1f5e5208a23b421187d1209dbb7d1 \ - --hash=sha256:9efcc0f11d850cefcafdd9275b9576ad3bfb539bed96807663b32ad99c4d4b88 \ - --hash=sha256:a2567b72e1ffc3ab25510db43f355b29eeada56c0a622e58dcdb19530eb0a3cb \ - --hash=sha256:a5029cc80718bbd545123cd8fe5d15025eccaaaace5d0eeec6bd556ad6163d61 \ - --hash=sha256:a60eaa2d440cd4707696b52e40ed3e2b0f73f65be07fd0ef23b6b539c9c0b0b4 \ - --hash=sha256:a79a6d399cef33a11b6f004c67bb07741d91f2be01b8d712d52c75711b1e07c7 \ - --hash=sha256:a84792f8631bf5a94e52d9cc881c0b824ab42717165a5579c760b830d9392ac9 \ - --hash=sha256:a8a4d3427e8de1312ddf309cc482186466c79895b3a139fed3259fc01dfa9a5b \ - --hash=sha256:a8aca50daa9493e9e13c0f566201a9006f080e7c50e5e90d0b06f53146a54500 \ - --hash=sha256:aa6d0d932e0f39c02b80744273cd5c388a2d9bc07760a03164f229c8e02662f6 \ - --hash=sha256:ab2899f9fa2f9f741896ebb6fa07c4c883bfa5c7f2ddd8cf2aafa86fa981b2d2 \ - --hash=sha256:af545c2cffdb0967a96b6249e6f5f7b0d92cdfd267f9d5238d5b9ca63e8edb10 \ - --hash=sha256:b18f31b80d5a33661e08c89e202edabf1986e9b49c42b4504371daeaa11b47c1 \ - --hash=sha256:b20df693de16f42b2472a9c485e1c948ee55524786a0a34345511afdd22246f3 \ - --hash=sha256:b38765950832f7d728297689ad78f5f2cf79ff82487131c4d26fe6ceecdc5f8e \ - --hash=sha256:b6f6cd1560c5fa427e3b6074bb24d2c64e225afbb7165008903bd42e4e33e28a \ - --hash=sha256:bace460460ed20614fa6bc8cb09966c0b8517b8c58ad8046828c6078d25333b5 \ - --hash=sha256:bca9ef7517fd7874a1a08970ae88f497bf5c984610caa0bf40bd7e8450852b95 \ - --hash=sha256:c180f480207a9b2475f2b8d8bd7204e47aec952d084b2a2be58a782ffcf96074 \ - --hash=sha256:c2b2355dc094e5f7d45a7bb262fe7207aa0460b37a0d87027dcf21b5d890e7d5 \ - --hash=sha256:c564dd5f09ddc9d8f2c2d0a301cd30a79a2cc1b46dd1a73bef8f0038863d016b \ - --hash=sha256:c632ce9c0b534fbe25b52c974515ed674937c5b99f549a92127c85f771a78772 \ - --hash=sha256:c719f65bebcdf6716f10e9eff80d27567f7892d8988c06de12bbbd39307c6e3a \ - --hash=sha256:c86969d012e51b8e415a8c6ce96f7857d6a87d6207303ab02d5d11ef0cad2274 \ - --hash=sha256:c974fb66180e58709b6fc402846f13791240d180b74de81d23913abe48e96d94 \ - --hash=sha256:c9883051c6972f58bfc4ebb2116345ee2aa151178e99c3f2b2bbe2af712abd13 \ - --hash=sha256:ca9ac61ac6db4eb6c2a0cd1d0f7e1357647b638ccc92f7e9d8d133e71ed3c6ac \ - --hash=sha256:cb979826071c0986a5f08333a36104153478ce6018c58cba7f9caddaf63d5d67 \ - --hash=sha256:cd3db5927bf9167d5a6157ddb2f036f6b6b0ad001ac82355d43e97a4bde76d76 \ - --hash=sha256:d147004fede1b12f6013a6dbb2a26a986a671a03c6ea740ddc76500e5f1c399f \ - --hash=sha256:d3a4834f221061624b8887090637db9ad4f61752001eae37d56c52fddade2dc8 \ - --hash=sha256:d9010032a0b9710f58012a1e9c222528763d860ba2ee1422c03473eab47703e7 \ - --hash=sha256:d97f93fdae594d886c5a866636397e2bcab146fd7a132fd6bb9ce182224452f8 \ - --hash=sha256:df23d57718f24badef8656c49743e11a89fd6f5358fa8a7b96e728fda2abf7d3 \ - --hash=sha256:df6104c009713d3a89621096f3e3e88cc323fd269dbd7c20afe18535094320be \ - --hash=sha256:e5e5f7debc7a57af53fdf5c5009f9391d9f4c12867049d509bf7bb164a6e295b \ - --hash=sha256:e7d2f8616f0ff60bd332022279011776c3ac0faa0f1b463f7bb12326fbc97a1c \ - --hash=sha256:e999f0c88a458c836d5fb521814e92ed2172c649200336a6df514987c1488258 \ - --hash=sha256:eb4639f32fd4a9904ab8fb45bf3383ba71137f3d9d4ba25b3b3f3109977c5b8c \ - --hash=sha256:ec707059ee75732b1ba130ed5f9580fe10ff75180c812bc267ded039db5128c6 \ - --hash=sha256:ecc26751323224cf8186efcf7fbcbc30f4e1d8c7970659daf25ad995e4032a56 \ - --hash=sha256:ee5e86776273de1795947d17bddd6bb19e0365fd2af4289c0d2c5454b6b1d36b \ - --hash=sha256:f1162a1492032c82f14271e831c8f4b49f2b6078f4f5fc74de2c912fa225d51d \ - --hash=sha256:f34ecee82858e41dd217734f0c41a532bd066bcaab636ad830f03a30b2a96f2a \ - --hash=sha256:f85c6f327bf0b8c29da7d93b1cabb6363fb5e4e160a32fa241ed2dce21b73162 \ - --hash=sha256:f92995dfec9420bb69ae629abf422e516923ba79ba4403bc750d94fb4a6c68c1 \ - --hash=sha256:fb0540c854ac9c0c5ad495908fdfd3e332d553ec731698c0e29b1877ba0d2ec6 \ - --hash=sha256:fceedde51fbd67ee2bcc8c0b33d0126cc8b51ef3bbde2f86662bd6d5a6f10ec5 \ - --hash=sha256:fe6970addfea9e5e081401bcbadf865d2b6da045472f58af08427e108d618540 \ - --hash=sha256:fee86b7c4bd29bdaf0d53d14739b08a106fdda809ca5fe032a15f52fae5fe254 -attrs==26.1.0 \ - --hash=sha256:c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309 \ - --hash=sha256:d03ceb89cb322a8fd706d4fb91940737b6642aa36998fe130a9bc96c985eff32 -authlib==1.7.2 \ - --hash=sha256:2cea25fefcd4e7173bdf1372c0afc265c8034b23a8cd5dcb6a9164b826c64231 \ - --hash=sha256:3e1faedc9d87e7d56a164eca3ccb6ace0d61b94abe83e92242f8dc8bba9b4a9f -autoevals==0.2.0 \ - --hash=sha256:83546e86f716d5bea64de39db2e99f5eaeadd70d3f72481a75b576bc511e21d6 \ - --hash=sha256:dec041989ce85d6043ba30efa959527c213a62f768dc54e77d41364510e1acb6 -azure-core==1.41.0 \ - --hash=sha256:522b4011e8180b1a3dcd2024396a4e7fe9ac37fb8597db47163d230b5efe892d \ - --hash=sha256:f46ff5dfcd230f25cf1c19e8a34b8dc08a337b2503e268bb600a16c00db8ad5a -azure-identity==1.25.3 \ - --hash=sha256:ab23c0d63015f50b630ef6c6cf395e7262f439ce06e5d07a64e874c724f8d9e6 \ - --hash=sha256:f4d0b956a8146f30333e071374171f3cfa7bdb8073adb8c3814b65567aa7447c -cachetools==7.1.4 \ - --hash=sha256:323dc4127934744db5b54eb4924482d7edafbf9554e820d1531c2e08c0e4ef54 \ - --hash=sha256:437f55a4e0c1b01a4f3077cc470e6991d47430970e36fbcb77e2be0df4fc1cd6 -certifi==2026.5.20 \ - --hash=sha256:3c52e209ba0a4ad7aebe60436a4ab349c39e1e602e8c134221e546902ad25897 \ - --hash=sha256:69dea482ab64caa7b9f6aba1c6bf48bb6a5448d1c0f1b17ab42ad8c763a5344d -chardet==7.4.3 \ - --hash=sha256:0ac3bf11c645734a1701a3804e43eabd98851838192267d08c353a834ab79fea \ - --hash=sha256:1173b74051570cf08099d7429d92e4882d375ad4217f92a6e5240ccfb26f231e \ - --hash=sha256:23163921dccf3103ce59540b0443c106d2c0a0ff2e0503e05196f5e6fdea453f \ - --hash=sha256:25a862cddc6a9ac07023e808aedd297115345fbaabc2690479481ddc0f980e09 \ - --hash=sha256:27cc23da03630cdecc9aa81a895aa86629c211f995cd57651f0fbc280717bf93 \ - --hash=sha256:29af5999f654e8729d251f1724a62b538b1262d9292cccaefddf8a02aae1ef6a \ - --hash=sha256:365135eaf37ba65a828f8e668eb0a8c38c479dcbec724dc25f4dfd781049c357 \ - --hash=sha256:3990fffcc6a6045f2234ab72752ad037e3b2d48c72037f244d42738db397eb75 \ - --hash=sha256:457f619882ba66327d4d8d14c6c342269bdb1e4e1c38e8117df941d14d351b04 \ - --hash=sha256:4b2799bd58e7245cfa8d4ab2e8ad1d76a5c3a5b1f32318eb6acca4c69a3e7101 \ - --hash=sha256:4c3da294de1a681097848ab58bd3f2771a674f8039d2d87a5538b28856b815e9 \ - --hash=sha256:4fbff1907925b0c5a1064cffb5e040cd5e338585c9c552625f30de6bc2f3107a \ - --hash=sha256:5d2879598bc220689e8ce509fe9c3f37ad2fca53a36be9c9bd91abdd91dd364f \ - --hash=sha256:626f00299ad62dfe937058a09572beed442ccc7b58f87aa667949b20fd3db235 \ - --hash=sha256:6e3bd9f936e04bae89c254262af08d9e5b98f805175ba1e29d454e6cba3107b7 \ - --hash=sha256:7005c88da26fd95d8abb8acbe6281d833e9a9181b03cf49b4546c4555389bd97 \ - --hash=sha256:75d3c65cc16bddf40b8da1fd25ba84fca5f8070f2b14e86083653c1c85aee971 \ - --hash=sha256:93c45e116dd51b66226a53ade3f9f635e870de5399b90e00ce45dcc311093bf4 \ - --hash=sha256:9a4904dd5f071b7a7d7f50b4a67a86db3c902d243bf31708f1d5cde2f68239cb \ - --hash=sha256:9acd9988a93e09390f3cd231201ea7166c415eb8da1b735928990ffc05cb9fbb \ - --hash=sha256:9f3504c139a2ad544077dd2d9e412cd08b01786843d76997cd43bb6de311723c \ - --hash=sha256:a9e4486df251b8962e86ea9f139ca235aa6e0542a00f7844c9a04160afb99aa9 \ - --hash=sha256:acc46d1b8b7d5783216afe15db56d1c179b9a40e5a1558bc13164c4fd20674c4 \ - --hash=sha256:b95c934b9ad59e2ba8abb9be49df70d3ad1b0d95d864b9fdb7588d4fa8bd921c \ - --hash=sha256:bba8bea1b28d927b3e99e47deafe53658d34497c0a891d95ff1ba8ff6663f01c \ - --hash=sha256:bfc134b70c846c21ead8e43ada3ae1a805fff732f6922f8abcf2ff27b8f6493d \ - --hash=sha256:c0c79b13c9908ac7dfe0a74116ebc9a0f28b2319d23c32f3dfcdfbe1279c7eaf \ - --hash=sha256:c7116b0452994734ccff35e154b44240090eb0f4f74b9106292668133557c175 \ - --hash=sha256:c77867f0c1cb8bd819502249fcdc500364aedb07881e11b743726fa2148e7b6e \ - --hash=sha256:cc1d4eb92a4ec1c2df3b490836ffa46922e599d34ce0bb75cf41fd2bf6303d56 \ - --hash=sha256:ccc1f83ab4bcfb901cf39e0c4ba6bc6e726fc6264735f10e24ceb5cb47387578 \ - --hash=sha256:cf1efeaf65a6ef2f5b9cc3a1df6f08ba2831b369ccaa4c7018eaf90aa757bb11 \ - --hash=sha256:cfb54563fe5f130da17c44c6a4e2e8052ba628e5ab4eab7ef8190f736f0f8f72 \ - --hash=sha256:d892d3dcd652fdef53e3d6327d39b17c0df40a899dfc919abaeb64c974497531 \ - --hash=sha256:dc50f28bad067393cce0af9091052c3b8df7a23115afd8ba7b2e0947f0cef1f8 \ - --hash=sha256:e1b98790c284ff813f18f7cf7de5f05ea2435a080030c7f1a8318f3a4f80b131 -charset-normalizer==3.4.7 \ - --hash=sha256:007d05ec7321d12a40227aae9e2bc6dca73f3cb21058999a1df9e193555a9dcc \ - --hash=sha256:03853ed82eeebbce3c2abfdbc98c96dc205f32a79627688ac9a27370ea61a49c \ - --hash=sha256:07d9e39b01743c3717745f4c530a6349eadbfa043c7577eef86c502c15df2c67 \ - --hash=sha256:08e721811161356f97b4059a9ba7bafb23ea5ee2255402c42881c214e173c6b4 \ - --hash=sha256:0c96c3b819b5c3e9e165495db84d41914d6894d55181d2d108cc1a69bfc9cce0 \ - --hash=sha256:0ea948db76d31190bf08bd371623927ee1339d5f2a0b4b1b4a4439a65298703c \ - --hash=sha256:0f7eb884681e3938906ed0434f20c63046eacd0111c4ba96f27b76084cd679f5 \ - --hash=sha256:12a6fff75f6bc66711b73a2f0addfc4c8c15a20e805146a02d147a318962c444 \ - --hash=sha256:12d8baf840cc7889b37c7c770f478adea7adce3dcb3944d02ec87508e2dcf153 \ - --hash=sha256:14265bfe1f09498b9d8ec91e9ec9fa52775edf90fcbde092b25f4a33d444fea9 \ - --hash=sha256:16d971e29578a5e97d7117866d15889a4a07befe0e87e703ed63cd90cb348c01 \ - --hash=sha256:177a0ba5f0211d488e295aaf82707237e331c24788d8d76c96c5a41594723217 \ - --hash=sha256:1a87ca9d5df6fe460483d9a5bbf2b18f620cbed41b432e2bddb686228282d10b \ - --hash=sha256:1c2a768fdd44ee4a9339a9b0b130049139b8ce3c01d2ce09f67f5a68048d477c \ - --hash=sha256:1c2aed2e5e41f24ea8ef1590b8e848a79b56f3a5564a65ceec43c9d692dc7d8a \ - --hash=sha256:1dc8b0ea451d6e69735094606991f32867807881400f808a106ee1d963c46a83 \ - --hash=sha256:1efde3cae86c8c273f1eb3b287be7d8499420cf2fe7585c41d370d3e790054a5 \ - --hash=sha256:202389074300232baeb53ae2569a60901f7efadd4245cf3a3bf0617d60b439d7 \ - --hash=sha256:203104ed3e428044fd943bc4bf45fa73c0730391f9621e37fe39ecf477b128cb \ - --hash=sha256:2257141f39fe65a3fdf38aeccae4b953e5f3b3324f4ff0daf9f15b8518666a2c \ - --hash=sha256:298930cec56029e05497a76988377cbd7457ba864beeea92ad7e844fe74cd1f1 \ - --hash=sha256:2cd4a60d0e2fb04537162c62bbbb4182f53541fe0ede35cdf270a1c1e723cc42 \ - --hash=sha256:2d6eb928e13016cea4f1f21d1e10c1cebd5a421bc57ddf5b1142ae3f86824fab \ - --hash=sha256:2fe249cb4651fd12605b7288b24751d8bfd46d35f12a20b1ba33dea122e690df \ - --hash=sha256:30b8d1d8c52a48c2c5690e152c169b673487a2a58de1ec7393196753063fcd5e \ - --hash=sha256:320ade88cfb846b8cd6b4ddf5ee9e80ee0c1f52401f2456b84ae1ae6a1a5f207 \ - --hash=sha256:3534e7dcbdcf757da6b85a0bbf5b6868786d5982dd959b065e65481644817a18 \ - --hash=sha256:36836d6ff945a00b88ba1e4572d721e60b5b8c98c155d465f56ad19d68f23734 \ - --hash=sha256:38c0109396c4cfc574d502df99742a45c72c08eff0a36158b6f04000043dbf38 \ - --hash=sha256:3946fa46a0cf3e4c8cb1cc52f56bb536310d34f25f01ca9b6c16afa767dab110 \ - --hash=sha256:3bec022aec2c514d9cf199522a802bd007cd588ab17ab2525f20f9c34d067c18 \ - --hash=sha256:3c9a494bc5ec77d43cea229c4f6db1e4d8fe7e1bbffa8b6f0f0032430ff8ab44 \ - --hash=sha256:3dce51d0f5e7951f8bb4900c257dad282f49190fdbebecd4ba99bcc41fef404d \ - --hash=sha256:3dedcc22d73ec993f42055eff4fcfed9318d1eeb9a6606c55892a26964964e48 \ - --hash=sha256:4042d5c8f957e15221d423ba781e85d553722fc4113f523f2feb7b188cc34c5e \ - --hash=sha256:481551899c856c704d58119b5025793fa6730adda3571971af568f66d2424bb5 \ - --hash=sha256:4dc1e73c36828f982bfe79fadf5919923f8a6f4df2860804db9a98c48824ce8d \ - --hash=sha256:4e5163c14bffd570ef2affbfdd77bba66383890797df43dc8b4cc7d6f500bf53 \ - --hash=sha256:511ef87c8aec0783e08ac18565a16d435372bc1ac25a91e6ac7f5ef2b0bff790 \ - --hash=sha256:532bc9bf33a68613fd7d65e4b1c71a6a38d7d42604ecf239c77392e9b4e8998c \ - --hash=sha256:54523e136b8948060c0fa0bc7b1b50c32c186f2fceee897a495406bb6e311d2b \ - --hash=sha256:5649fd1c7bade02f320a462fdefd0b4bd3ce036065836d4f42e0de958038e116 \ - --hash=sha256:56be790f86bfb2c98fb742ce566dfb4816e5a83384616ab59c49e0604d49c51d \ - --hash=sha256:5b77459df20e08151cd6f8b9ef8ef1f961ef73d85c21a555c7eed5b79410ec10 \ - --hash=sha256:5ed6ab538499c8644b8a3e18debabcd7ce684f3fa91cf867521a7a0279cab2d6 \ - --hash=sha256:6178f72c5508bfc5fd446a5905e698c6212932f25bcdd4b47a757a50605a90e2 \ - --hash=sha256:6370e8686f662e6a3941ee48ed4742317cafbe5707e36406e9df792cdb535776 \ - --hash=sha256:64f02c6841d7d83f832cd97ccf8eb8a906d06eb95d5276069175c696b024b60a \ - --hash=sha256:65bcd23054beab4d166035cabbc868a09c1a49d1efe458fe8e4361215df40265 \ - --hash=sha256:66671f93accb62ed07da56613636f3641f1a12c13046ce91ffc923721f23c008 \ - --hash=sha256:6696b7688f54f5af4462118f0bfa7c1621eeb87154f77fa04b9295ce7a8f2943 \ - --hash=sha256:6785f414ae0f3c733c437e0f3929197934f526d19dfaa75e18fdb4f94c6fb374 \ - --hash=sha256:67f6279d125ca0046a7fd386d01b311c6363844deac3e5b069b514ba3e63c246 \ - --hash=sha256:6c114670c45346afedc0d947faf3c7f701051d2518b943679c8ff88befe14f8e \ - --hash=sha256:6e0d51f618228538a3e8f46bd246f87a6cd030565e015803691603f55e12afb5 \ - --hash=sha256:6ed74185b2db44f41ef35fd1617c5888e59792da9bbc9190d6c7300617182616 \ - --hash=sha256:708838739abf24b2ceb208d0e22403dd018faeef86ddac04319a62ae884c4f15 \ - --hash=sha256:715479b9a2802ecac752a3b0efa2b0b60285cf962ee38414211abdfccc233b41 \ - --hash=sha256:733784b6d6def852c814bce5f318d25da2ee65dd4839a0718641c696e09a2960 \ - --hash=sha256:750e02e074872a3fad7f233b47734166440af3cdea0add3e95163110816d6752 \ - --hash=sha256:752a45dc4a6934060b3b0dab47e04edc3326575f82be64bc4fc293914566503e \ - --hash=sha256:7579e913a5339fb8fa133f6bbcfd8e6749696206cf05acdbdca71a1b436d8e72 \ - --hash=sha256:7641bb8895e77f921102f72833904dcd9901df5d6d72a2ab8f31d04b7e51e4e7 \ - --hash=sha256:7804338df6fcc08105c7745f1502ba68d900f45fd770d5bdd5288ddccb8a42d8 \ - --hash=sha256:80d04837f55fc81da168b98de4f4b797ef007fc8a79ab71c6ec9bc4dd662b15b \ - --hash=sha256:813c0e0132266c08eb87469a642cb30aaff57c5f426255419572aaeceeaa7bf4 \ - --hash=sha256:82b271f5137d07749f7bf32f70b17ab6eaabedd297e75dce75081a24f76eb545 \ - --hash=sha256:84c018e49c3bf790f9c2771c45e9313a08c2c2a6342b162cd650258b57817706 \ - --hash=sha256:8751d2787c9131302398b11e6c8068053dcb55d5a8964e114b6e196cf16cb366 \ - --hash=sha256:8778f0c7a52e56f75d12dae53ae320fae900a8b9b4164b981b9c5ce059cd1fcb \ - --hash=sha256:87fad7d9ba98c86bcb41b2dc8dbb326619be2562af1f8ff50776a39e55721c5a \ - --hash=sha256:8d828b6667a32a728a1ad1d93957cdf37489c57b97ae6c4de2860fa749b8fc1e \ - --hash=sha256:8e385e4267ab76874ae30db04c627faaaf0b509e1ccc11a95b3fc3e83f855c00 \ - --hash=sha256:92a0a01ead5e668468e952e4238cccd7c537364eb7d851ab144ab6627dbbe12f \ - --hash=sha256:94e1885b270625a9a828c9793b4d52a64445299baa1fea5a173bf1d3dd9a1a5a \ - --hash=sha256:a180c5e59792af262bf263b21a3c49353f25945d8d9f70628e73de370d55e1e1 \ - --hash=sha256:a277ab8928b9f299723bc1a2dabb1265911b1a76341f90a510368ca44ad9ab66 \ - --hash=sha256:a5fe03b42827c13cdccd08e6c0247b6a6d4b5e3cdc53fd1749f5896adcdc2356 \ - --hash=sha256:a6c5863edfbe888d9eff9c8b8087354e27618d9da76425c119293f11712a6319 \ - --hash=sha256:a89c23ef8d2c6b27fd200a42aa4ac72786e7c60d40efdc76e6011260b6e949c4 \ - --hash=sha256:adb2597b428735679446b46c8badf467b4ca5f5056aae4d51a19f9570301b1ad \ - --hash=sha256:ae196f021b5e7c78e918242d217db021ed2a6ace2bc6ae94c0fc596221c7f58d \ - --hash=sha256:ae89db9e5f98a11a4bf50407d4363e7b09b31e55bc117b4f7d80aab97ba009e5 \ - --hash=sha256:aed52fea0513bac0ccde438c188c8a471c4e0f457c2dd20cdbf6ea7a450046c7 \ - --hash=sha256:aef65cd602a6d0e0ff6f9930fcb1c8fec60dd2cfcb6facaf4bdb0e5873042db0 \ - --hash=sha256:af21eb4409a119e365397b2adbaca4c9ccab56543a65d5dbd9f920d6ac29f686 \ - --hash=sha256:b14b2d9dac08e28bb8046a1a0434b1750eb221c8f5b87a68f4fa11a6f97b5e34 \ - --hash=sha256:bb6d88045545b26da47aa879dd4a89a71d1dce0f0e549b1abcb31dfe4a8eac49 \ - --hash=sha256:bb8cc7534f51d9a017b93e3e85b260924f909601c3df002bcdb58ddb4dc41a5c \ - --hash=sha256:bc17a677b21b3502a21f66a8cc64f5bfad4df8a0b8434d661666f8ce90ac3af1 \ - --hash=sha256:bd6c2a1c7573c64738d716488d2cdd3c00e340e4835707d8fdb8dc1a66ef164e \ - --hash=sha256:bd9b23791fe793e4968dba0c447e12f78e425c59fc0e3b97f6450f4781f3ee60 \ - --hash=sha256:c03a41a8784091e67a39648f70c5f97b5b6a37f216896d44d2cdcb82615339a0 \ - --hash=sha256:c0f081d69a6e58272819b70288d3221a6ee64b98df852631c80f293514d3b274 \ - --hash=sha256:c35abb8bfff0185efac5878da64c45dafd2b37fb0383add1be155a763c1f083d \ - --hash=sha256:c36c333c39be2dbca264d7803333c896ab8fa7d4d6f0ab7edb7dfd7aea6e98c0 \ - --hash=sha256:c45e9440fb78f8ddabcf714b68f936737a121355bf59f3907f4e17721b9d1aae \ - --hash=sha256:c593052c465475e64bbfe5dbd81680f64a67fdc752c56d7a0ae205dc8aeefe0f \ - --hash=sha256:cdd68a1fb318e290a2077696b7eb7a21a49163c455979c639bf5a5dcdc46617d \ - --hash=sha256:ce3412fbe1e31eb81ea42f4169ed94861c56e643189e1e75f0041f3fe7020abe \ - --hash=sha256:cf1493cd8607bec4d8a7b9b004e699fcf8f9103a9284cc94962cb73d20f9d4a3 \ - --hash=sha256:cf29836da5119f3c8a8a70667b0ef5fdca3bb12f80fd06487cfa575b3909b393 \ - --hash=sha256:d4a48e5b3c2a489fae013b7589308a40146ee081f6f509e047e0e096084ceca1 \ - --hash=sha256:d560742f3c0d62afaccf9f41fe485ed69bd7661a241f86a3ef0f0fb8b1a397af \ - --hash=sha256:d6038d37043bced98a66e68d3aa2b6a35505dc01328cd65217cefe82f25def44 \ - --hash=sha256:d61f00a0869d77422d9b2aba989e2d24afa6ffd552af442e0e58de4f35ea6d00 \ - --hash=sha256:d635aab80466bc95771bb78d5370e74d36d1fe31467b6b29b8b57b2a3cd7d22c \ - --hash=sha256:dca4bbc466a95ba9c0234ef56d7dd9509f63da22274589ebd4ed7f1f4d4c54e3 \ - --hash=sha256:dd915403e231e6b1809fe9b6d9fc55cf8fb5e02765ac625d9cd623342a7905d7 \ - --hash=sha256:e044c39e41b92c845bc815e5ae4230804e8e7bc29e399b0437d64222d92809dd \ - --hash=sha256:e060d01aec0a910bdccb8be71faf34e7799ce36950f8294c8bf612cba65a2c9e \ - --hash=sha256:e1421b502d83040e6d7fb2fb18dff63957f720da3d77b2fbd3187ceb63755d7b \ - --hash=sha256:e17b8d5d6a8c47c85e68ca8379def1303fd360c3e22093a807cd34a71cd082b8 \ - --hash=sha256:e5f4d355f0a2b1a31bc3edec6795b46324349c9cb25eed068049e4f472fb4259 \ - --hash=sha256:e712b419df8ba5e42b226c510472b37bd57b38e897d3eca5e8cfd410a29fa859 \ - --hash=sha256:e74327fb75de8986940def6e8dee4f127cc9752bee7355bb323cc5b2659b6d46 \ - --hash=sha256:e80c8378d8f3d83cd3164da1ad2df9e37a666cdde7b1cb2298ed0b558064be30 \ - --hash=sha256:e8ac484bf18ce6975760921bb6148041faa8fef0547200386ea0b52b5d27bf7b \ - --hash=sha256:eca9705049ad3c7345d574e3510665cb2cf844c2f2dcfe675332677f081cbd46 \ - --hash=sha256:ed065083d0898c9d5b4bbec7b026fd755ff7454e6e8b73a67f8c744b13986e24 \ - --hash=sha256:edac0f1ab77644605be2cbba52e6b7f630731fc42b34cb0f634be1a6eface56a \ - --hash=sha256:effc3f449787117233702311a1b7d8f59cba9ced946ba727bdc329ec69028e24 \ - --hash=sha256:f22dec1690b584cea26fade98b2435c132c1b5f68e39f5a0b7627cd7ae31f1dc \ - --hash=sha256:f495a1652cf3fbab2eb0639776dad966c2fb874d79d87ca07f9d5f059b8bd215 \ - --hash=sha256:f496c9c3cc02230093d8330875c4c3cdfc3b73612a5fd921c65d39cbcef08063 \ - --hash=sha256:f59099f9b66f0d7145115e6f80dd8b1d847176df89b234a5a6b3f00437aa0832 \ - --hash=sha256:f59ad4c0e8f6bba240a9bb85504faa1ab438237199d4cce5f622761507b8f6a6 \ - --hash=sha256:fbccdc05410c9ee21bbf16a35f4c1d16123dcdeb8a1d38f33654fa21d0234f79 \ - --hash=sha256:fea24543955a6a729c45a73fe90e08c743f0b3334bbf3201e6c4bc1b0c7fa464 -circuitbreaker==2.1.3 \ - --hash=sha256:1a4baee510f7bea3c91b194dcce7c07805fe96c4423ed5594b75af438531d084 \ - --hash=sha256:87ba6a3ed03fdc7032bc175561c2b04d52ade9d5faf94ca2b035fbdc5e6b1dd1 -datasets==4.8.5 \ - --hash=sha256:0f0c1c3d56ffff2c93b2f4c63c95bac94f3d7e8621aea2a2a576275233bba772 \ - --hash=sha256:5079900781719c0e063a8efdd2cd95a31ad0c63209178669cd23cf1b926149ff -emoji==2.15.0 \ - --hash=sha256:205296793d66a89d88af4688fa57fd6496732eb48917a87175a023c8138995eb \ - --hash=sha256:eae4ab7d86456a70a00a985125a03263a5eac54cd55e51d7e184b1ed3b6757e4 -fastapi==0.136.3 \ - --hash=sha256:3d2a69bdf04b7e9f3afa292c3bc7a98816bbfafa10bc9b45f3f3700d2f761620 \ - --hash=sha256:e487fae93ad408e6f47641ee4dfe389864fd7bec92e547ea8498fc13f43e83ab -fastuuid==0.14.0 \ - --hash=sha256:05a8dde1f395e0c9b4be515b7a521403d1e8349443e7641761af07c7ad1624b1 \ - --hash=sha256:0737606764b29785566f968bd8005eace73d3666bd0862f33a760796e26d1ede \ - --hash=sha256:089c18018fdbdda88a6dafd7d139f8703a1e7c799618e33ea25eb52503d28a11 \ - --hash=sha256:09098762aad4f8da3a888eb9ae01c84430c907a297b97166b8abc07b640f2995 \ - --hash=sha256:09378a05020e3e4883dfdab438926f31fea15fd17604908f3d39cbeb22a0b4dc \ - --hash=sha256:0c9ec605ace243b6dbe3bd27ebdd5d33b00d8d1d3f580b39fdd15cd96fd71796 \ - --hash=sha256:0df14e92e7ad3276327631c9e7cec09e32572ce82089c55cb1bb8df71cf394ed \ - --hash=sha256:12ac85024637586a5b69645e7ed986f7535106ed3013640a393a03e461740cb7 \ - --hash=sha256:1383fff584fa249b16329a059c68ad45d030d5a4b70fb7c73a08d98fd53bcdab \ - --hash=sha256:139d7ff12bb400b4a0c76be64c28cbe2e2edf60b09826cbfd85f33ed3d0bbe8b \ - --hash=sha256:13ec4f2c3b04271f62be2e1ce7e95ad2dd1cf97e94503a3760db739afbd48f00 \ - --hash=sha256:178947fc2f995b38497a74172adee64fdeb8b7ec18f2a5934d037641ba265d26 \ - --hash=sha256:193ca10ff553cf3cc461572da83b5780fc0e3eea28659c16f89ae5202f3958d4 \ - --hash=sha256:1a771f135ab4523eb786e95493803942a5d1fc1610915f131b363f55af53b219 \ - --hash=sha256:1bf539a7a95f35b419f9ad105d5a8a35036df35fdafae48fb2fd2e5f318f0d75 \ - --hash=sha256:1ca61b592120cf314cfd66e662a5b54a578c5a15b26305e1b8b618a6f22df714 \ - --hash=sha256:1e3cc56742f76cd25ecb98e4b82a25f978ccffba02e4bdce8aba857b6d85d87b \ - --hash=sha256:1e690d48f923c253f28151b3a6b4e335f2b06bf669c68a02665bc150b7839e94 \ - --hash=sha256:2b29e23c97e77c3a9514d70ce343571e469098ac7f5a269320a0f0b3e193ab36 \ - --hash=sha256:2dce5d0756f046fa792a40763f36accd7e466525c5710d2195a038f93ff96346 \ - --hash=sha256:2ec3d94e13712a133137b2805073b65ecef4a47217d5bac15d8ac62376cefdb4 \ - --hash=sha256:2fb3c0d7fef6674bbeacdd6dbd386924a7b60b26de849266d1ff6602937675c8 \ - --hash=sha256:2fc37479517d4d70c08696960fad85494a8a7a0af4e93e9a00af04d74c59f9e3 \ - --hash=sha256:33e678459cf4addaedd9936bbb038e35b3f6b2061330fd8f2f6a1d80414c0f87 \ - --hash=sha256:3964bab460c528692c70ab6b2e469dd7a7b152fbe8c18616c58d34c93a6cf8d4 \ - --hash=sha256:3acdf655684cc09e60fb7e4cf524e8f42ea760031945aa8086c7eae2eeeabeb8 \ - --hash=sha256:448aa6833f7a84bfe37dd47e33df83250f404d591eb83527fa2cac8d1e57d7f3 \ - --hash=sha256:47c821f2dfe95909ead0085d4cb18d5149bca704a2b03e03fb3f81a5202d8cea \ - --hash=sha256:4edc56b877d960b4eda2c4232f953a61490c3134da94f3c28af129fb9c62a4f6 \ - --hash=sha256:5816d41f81782b209843e52fdef757a361b448d782452d96abedc53d545da722 \ - --hash=sha256:6e6243d40f6c793c3e2ee14c13769e341b90be5ef0c23c82fa6515a96145181a \ - --hash=sha256:6fbc49a86173e7f074b1a9ec8cf12ca0d54d8070a85a06ebf0e76c309b84f0d0 \ - --hash=sha256:73657c9f778aba530bc96a943d30e1a7c80edb8278df77894fe9457540df4f85 \ - --hash=sha256:73946cb950c8caf65127d4e9a325e2b6be0442a224fd51ba3b6ac44e1912ce34 \ - --hash=sha256:77a09cb7427e7af74c594e409f7731a0cf887221de2f698e1ca0ebf0f3139021 \ - --hash=sha256:77e94728324b63660ebf8adb27055e92d2e4611645bf12ed9d88d30486471d0a \ - --hash=sha256:7a3c0bca61eacc1843ea97b288d6789fbad7400d16db24e36a66c28c268cfe3d \ - --hash=sha256:7f2f3efade4937fae4e77efae1af571902263de7b78a0aee1a1653795a093b2a \ - --hash=sha256:808527f2407f58a76c916d6aa15d58692a4a019fdf8d4c32ac7ff303b7d7af09 \ - --hash=sha256:83cffc144dc93eb604b87b179837f2ce2af44871a7b323f2bfed40e8acb40ba8 \ - --hash=sha256:84b0779c5abbdec2a9511d5ffbfcd2e53079bf889824b32be170c0d8ef5fc74c \ - --hash=sha256:9579618be6280700ae36ac42c3efd157049fe4dd40ca49b021280481c78c3176 \ - --hash=sha256:9a133bf9cc78fdbd1179cb58a59ad0100aa32d8675508150f3658814aeefeaa4 \ - --hash=sha256:9bd57289daf7b153bfa3e8013446aa144ce5e8c825e9e366d455155ede5ea2dc \ - --hash=sha256:a0809f8cc5731c066c909047f9a314d5f536c871a7a22e815cc4967c110ac9ad \ - --hash=sha256:a6f46790d59ab38c6aa0e35c681c0484b50dc0acf9e2679c005d61e019313c24 \ - --hash=sha256:a8a0dfea3972200f72d4c7df02c8ac70bad1bb4c58d7e0ec1e6f341679073a7f \ - --hash=sha256:aa75b6657ec129d0abded3bec745e6f7ab642e6dba3a5272a68247e85f5f316f \ - --hash=sha256:ab32f74bd56565b186f036e33129da77db8be09178cd2f5206a5d4035fb2a23f \ - --hash=sha256:ab3f5d36e4393e628a4df337c2c039069344db5f4b9d2a3c9cea48284f1dd741 \ - --hash=sha256:ac60fc860cdf3c3f327374db87ab8e064c86566ca8c49d2e30df15eda1b0c2d5 \ - --hash=sha256:ae64ba730d179f439b0736208b4c279b8bc9c089b102aec23f86512ea458c8a4 \ - --hash=sha256:af5967c666b7d6a377098849b07f83462c4fedbafcf8eb8bc8ff05dcbe8aa209 \ - --hash=sha256:b2fdd48b5e4236df145a149d7125badb28e0a383372add3fbaac9a6b7a394470 \ - --hash=sha256:b852a870a61cfc26c884af205d502881a2e59cc07076b60ab4a951cc0c94d1ad \ - --hash=sha256:b9a0ca4f03b7e0b01425281ffd44e99d360e15c895f1907ca105854ed85e2057 \ - --hash=sha256:bbb0c4b15d66b435d2538f3827f05e44e2baafcc003dd7d8472dc67807ab8fd8 \ - --hash=sha256:bcc96ee819c282e7c09b2eed2b9bd13084e3b749fdb2faf58c318d498df2efbe \ - --hash=sha256:c0a94245afae4d7af8c43b3159d5e3934c53f47140be0be624b96acd672ceb73 \ - --hash=sha256:c0eb25f0fd935e376ac4334927a59e7c823b36062080e2e13acbaf2af15db836 \ - --hash=sha256:c3091e63acf42f56a6f74dc65cfdb6f99bfc79b5913c8a9ac498eb7ca09770a8 \ - --hash=sha256:c501561e025b7aea3508719c5801c360c711d5218fc4ad5d77bf1c37c1a75779 \ - --hash=sha256:c7502d6f54cd08024c3ea9b3514e2d6f190feb2f46e6dbcd3747882264bb5f7b \ - --hash=sha256:caa1f14d2102cb8d353096bc6ef6c13b2c81f347e6ab9d6fbd48b9dea41c153d \ - --hash=sha256:cb9a030f609194b679e1660f7e32733b7a0f332d519c5d5a6a0a580991290022 \ - --hash=sha256:cd5a7f648d4365b41dbf0e38fe8da4884e57bed4e77c83598e076ac0c93995e7 \ - --hash=sha256:d23ef06f9e67163be38cece704170486715b177f6baae338110983f99a72c070 \ - --hash=sha256:d31f8c257046b5617fc6af9c69be066d2412bdef1edaa4bdf6a214cf57806105 \ - --hash=sha256:d55b7e96531216fc4f071909e33e35e5bfa47962ae67d9e84b00a04d6e8b7173 \ - --hash=sha256:d9e4332dc4ba054434a9594cbfaf7823b57993d7d8e7267831c3e059857cf397 \ - --hash=sha256:de01280eabcd82f7542828ecd67ebf1551d37203ecdfd7ab1f2e534edb78d505 \ - --hash=sha256:df61342889d0f5e7a32f7284e55ef95103f2110fee433c2ae7c2c0956d76ac8a \ - --hash=sha256:e0976c0dff7e222513d206e06341503f07423aceb1db0b83ff6851c008ceee06 \ - --hash=sha256:e150eab56c95dc9e3fefc234a0eedb342fac433dacc273cd4d150a5b0871e1fa \ - --hash=sha256:e23fc6a83f112de4be0cc1990e5b127c27663ae43f866353166f87df58e73d06 \ - --hash=sha256:ec27778c6ca3393ef662e2762dba8af13f4ec1aaa32d08d77f71f2a70ae9feb8 \ - --hash=sha256:f54d5b36c56a2d5e1a31e73b950b28a0d83eb0c37b91d10408875a5a29494bad \ - --hash=sha256:f74631b8322d2780ebcf2d2d75d58045c3e9378625ec51865fe0b5620800c39d -filelock==3.29.0 \ - --hash=sha256:69974355e960702e789734cb4871f884ea6fe50bd8404051a3530bc07809cf90 \ - --hash=sha256:96f5f6344709aa1572bbf631c640e4ebeeb519e08da902c39a001882f30ac258 -google-api-core==2.30.3 \ - --hash=sha256:a85761ba72c444dad5d611c2220633480b2b6be2521eca69cca2dbb3ffd6bfe8 \ - --hash=sha256:e601a37f148585319b26db36e219df68c5d07b6382cff2d580e83404e44d641b -google-auth==2.53.0 \ - --hash=sha256:6e7449917c599b35126a99ec268ec6880301f2fea41dce198fe8fd83ff642b68 \ - --hash=sha256:e7e6aa16f6bee7b2b264830fd04f08087a1d5a836df516251a5d15327b246c9c -google-cloud-aiplatform==1.145.0 \ - --hash=sha256:4d1c31797a8bd8f3342ed5f186dd30d1f6bca73ddbee2bde452777100d2ddc11 \ - --hash=sha256:7894c4f3d2684bdb60e9a122004c01678e3b585174a27298ae7a3ed1e5eaf3bd -google-cloud-bigquery==3.41.0 \ - --hash=sha256:2217e488b47ed576360c9b2cc07d59d883a54b83167c0ef37f915c26b01a06fe \ - --hash=sha256:2a5b5a737b401cbd824a6e5eac7554100b878668d908e6548836b5d8aaa4dcaa -google-cloud-core==2.6.0 \ - --hash=sha256:6d63ac8e5eca6d9e4319d0a1e2265fadcd7f1049904378caecfa01cf52dd869e \ - --hash=sha256:e76149739f90fac1fc6757c09f47eaccb3145b54adbd7759b0f7c4b235f46c83 -google-cloud-resource-manager==1.17.0 \ - --hash=sha256:0f486b62e2c58ff992a3a50fa0f4a96eef7750aa6c971bb373398ccb91828660 \ - --hash=sha256:e479baf4b014a57f298e01b8279e3290b032e3476d69c8e5e1427af8f82739a5 -google-cloud-storage==3.10.1 \ - --hash=sha256:97db9aa4460727982040edd2bd13ff3d5e2260b5331ad22895802da1fc2a5286 \ - --hash=sha256:a72f656759b7b99bda700f901adcb3425a828d4a29f911bc26b3ea79c5b1217f -google-resumable-media==2.9.0 \ - --hash=sha256:c8901e88e389af8bed64d9696c74d8bad961865eb2236e13e0bfca9bb0a65ca3 \ - --hash=sha256:f7cfb224846a9dd444d125115dfbe8ef02a2b893e78f087762fe716a255a734b -googleapis-common-protos==1.75.0 \ - --hash=sha256:53a062ff3c32552fbd62c11fe23768b78e4ddf0494d5e5fd97d3f4689c75fbbd \ - --hash=sha256:961ed60399c457ceb0ee8f285a84c870aabc9c6a832b9d37bb281b5bebde43ed -greenlet==3.5.1 \ - --hash=sha256:001775efe7b8e758861294c7a27c28af87f3f3f1c20468a2bc618c45b346c061 \ - --hash=sha256:00929c98ec525fd9bf075875d8c5f6a983a90906cdf78a66e6de2d8e466c2a19 \ - --hash=sha256:017a544f0385d441e88714160d089d6900ef46c9eff9d99b6715a5ef2d127747 \ - --hash=sha256:089fff7a6ce8d9316d1f65ebc00273a56be258c1725b32b94de90a3a979557e1 \ - --hash=sha256:1072b4f9edcc1e192d9283a66a3e68d6b84c561de33a83d7858beb9ba1effe10 \ - --hash=sha256:10a9a1c0bfbc93d41156ffcb90c75fbc05544054faf15dcc1fdf9765f8b607f0 \ - --hash=sha256:110a1ca7b49b014b097f6078272c3f4ed31af45b254de5228b79adba879f6af9 \ - --hash=sha256:111e2390ffffc47d5840b01711dd7fac07d4c09283d0283e7f3264b14e284c64 \ - --hash=sha256:17d86354f0ae6b61bf9be5148d0dd34e06c3cb7c602c671f79f29ac3b150e659 \ - --hash=sha256:1ffdb3c0bb002c99cd8f298957e046c3dbf6006b5b7cdf11a4e19194624a0a0a \ - --hash=sha256:2baee5ca02031757ffe8cc3d69f0cc0aec7065ce362622da74f32d3bcab1c541 \ - --hash=sha256:2c18ef16bf6d4dd410e4dd52996888ea1497be26892fe5bbc73580aba4287b8e \ - --hash=sha256:2f82b3597e9d83b63408affed0b48fd0f54935edac4302237b9a837be0dae33c \ - --hash=sha256:3bfbd69cc349e43bf3a8ae1c85548ff0718efc887615c2db16c3833d7b0b072d \ - --hash=sha256:3c8bb982ad117d29478ef8f5533e97df21f1e2befd17a299257b0c96d1371c0b \ - --hash=sha256:3d955c89b75eeca4723d7cc14135f393cd47c32e2a6cb4a8e4c6e760a26b0986 \ - --hash=sha256:4378720dd888136c27215a0214d32a4d37c3852765d45bc37aad0623423cfd78 \ - --hash=sha256:45718441607f9325d948db98cbc691276059316d0358c188c246da4e1d4d23d2 \ - --hash=sha256:5028648bf2253ec4745add746129d3904121fa7fe871a76bed23c5720573ce0a \ - --hash=sha256:50ae25a67bea74ea41fb14b960bc532df73eb713417b2d61892dced82fe8d3bc \ - --hash=sha256:51518ff74664078fc51bffcc6fc529b0df5ae58da192691cee765d45ce944a2b \ - --hash=sha256:540dae7b956209af4d70a3be35927b4055f617763771e5e84a5255bea934d2f5 \ - --hash=sha256:5a56aeb7d5d9cc4b3a735efb5095bd4b4f6f0e4f93e5ca876d0e2315137b7829 \ - --hash=sha256:5e300185139abc337ade480c327183adf42a875ac7181bfe66d7d4efea31fbea \ - --hash=sha256:67821bb03e4e98664490edb787ff6af501194c29bbee0f5c1dfdcf1dc3d9d436 \ - --hash=sha256:6c09df69dc1712d131332054a858a3e5cca400967fa3a672e2324fbb0971448c \ - --hash=sha256:6ebeb75c81211f5c702576cf81f315e77e23cfdb2c7c6fcb9dd143e6de35c360 \ - --hash=sha256:73f78f9b9f0a5c06e5c946ba1e8e36f5114923b6be109ee618c54f079c3ea14f \ - --hash=sha256:7546556f0d649f99f6a361098a55f761181bb2ea12ff150bb16d26092ad88244 \ - --hash=sha256:7715a5a2c3378ba602c3a440558261e13a820bb53a82693aacd7b7f6d964e283 \ - --hash=sha256:7b5f5fae05b8ac6d176a61b60c394a8cbdc2b5b91b81793066e68745cf165e54 \ - --hash=sha256:7eacb17a9d41538a2bc4912eba5ef13823c83cb69e4d141d0813debe7163187f \ - --hash=sha256:7ffdb990dcaa0234cf9845aead5df2e3c3a8b6507d409274dd87e0d5ab05ffc2 \ - --hash=sha256:80eb4b04dadc4e67df3fae179a32c4706a3f495bc7f22fc8a81115d5f5512188 \ - --hash=sha256:88e300d136eac057b2397aa1cfd7328b4c87c7eb66a09c7bc6a1292234db474e \ - --hash=sha256:89101bfd5011e069be974903cb3a4e4523845e4ece2d62dcd8d358933c0ef249 \ - --hash=sha256:8a17c42330e261299766b75ac1ea32caa437a9453c8f65d16a13140db378ecd3 \ - --hash=sha256:8a271fcd66c74615cda6a964fda3f304267a12e50a084472218a39bb0376f563 \ - --hash=sha256:8d8a23250ea3ec7b36de8fa4b541e9e2db3ee82915cc060ab0631609ad8b28de \ - --hash=sha256:92fd6d44ac5e5a887c8a5dc4a8ba0ba908527c31c12f78c6bc7dcfe8aab279f6 \ - --hash=sha256:975eac34b44a7077ca4d421348455b94f0f518246a7f14bc6d2fdcfe5b584368 \ - --hash=sha256:9ab3c3a0b2ae6198e67c898dad5215a49f9ae0d0081b3c3ec59f333e39eeca26 \ - --hash=sha256:9b1ec3274918a81d3ea778b9e75b56b72b33f300edb6cf7f3a7fe1dae56683de \ - --hash=sha256:9d59e840387076a51016777a9328b3f2c427c6f9208a6e958bad251be50a648d \ - --hash=sha256:a0cbed8bb44e23c5b199f888f4e4ce096b45ad9f25ff74a7ad0213875e936bb2 \ - --hash=sha256:a19570c52a21420dcbc94e661994bc325c0b5b11304540fed514586da5dc8f2e \ - --hash=sha256:a203a8bd0acb0701653d3bbb26e404854a68674139ed5cbb778830f42b09bb33 \ - --hash=sha256:a4764e0bfc6a4d114c865b32520805c16a990ef5f286a514413b05d5ecd6a23d \ - --hash=sha256:a57b0d05a0448eed231d59c0ceb287dde984551e54cbc51ac2d4865712838e9c \ - --hash=sha256:a5c81f74d204d3edd136ebfd50dce53acbb776995d721a0fe801626cfc93b8cd \ - --hash=sha256:a5ea42a752d47a145eae922b605cd1634665ac3d5ec1e72402d5048e8d60d207 \ - --hash=sha256:a6fdf2433a5441ef9a95464f7c3e674775da1c8c1177fff311cee1acad4626ed \ - --hash=sha256:add5217d68b31130f0beca584d7fef4878327d2e31642b66618a14eef312b63b \ - --hash=sha256:b0703c2cef53e01baec47f7a3868009913ad71ec678bbecb42a6f40895e4ce62 \ - --hash=sha256:b9152fca4a6466e114aaec745ae61cba739903a109754a9d4e1262f01e9259b1 \ - --hash=sha256:c0141e37414c10164e702b8fb1473304221ad98f71600850c6ef7ff4880feba0 \ - --hash=sha256:c3d35f87c7253b715d13d679e0783d845910144f282cb939fe1ba4ac8616269c \ - --hash=sha256:c5551170cf4f5ff5623e9af81323751979fee2c731e2287b61f73cd27257b823 \ - --hash=sha256:cbfc69be86e10dcfef5b1e6269d1d6926552aa89ee39e1de3353360c1b6989ab \ - --hash=sha256:cc6ab7e555c8a112ad3a76e368e86e12a2754bcae1652a5602e133ec7b635523 \ - --hash=sha256:cd443683db272ebaaca03af98c0b063ab30db70ea8a31a1559f35e3f7b744ccd \ - --hash=sha256:d0932b81d72f552ded9d810d00021b64d89f2195a91ce115b893f943b7a4ab3c \ - --hash=sha256:d40a890035c0058cadbdc4af7569800fd28a0e527a0fdbb7b5f9418f176846ce \ - --hash=sha256:d5ee3ea898009fa898f85f9982255d35278c477bebe185beca249cab42d4526c \ - --hash=sha256:d8ab31c9de8651a2facdd5c5bb0011f2380dd1a7af78ce2adf4b56095294fc07 \ - --hash=sha256:dc71ff466927a201b08305acac451ebe1aedfcea002f62f1f2f2ac2ac1e6a135 \ - --hash=sha256:de2daaaebd1a5aa88c49045b6baf9310b3263796bd88db713edf37cf53e7bb4e \ - --hash=sha256:ded7b068c7c31c1a8657d4fd42d886b3e051ae29f88b80c5ff9d502257b0f071 \ - --hash=sha256:e5cc9606aa5f4e0bde0d3bd502b44f743864c3ffa5cfa1011b1e30f5aa02366f \ - --hash=sha256:e630136e905fe5ff43e86945ae41220b6d1470956a39220e708110ac48d01ea5 \ - --hash=sha256:e6cd99ea59dd5d89f0c956606571d79bfe6f68c9eb7f4a4083a41a7f1587edee \ - --hash=sha256:e7516cf6ae6b8a582c2770a0caed47b8a48373ed732c33d69a72913ae6ac923e \ - --hash=sha256:ea37d5a157eb9493820d3792ac4ece28619a394391d2b9f2f78057d396ff0f0f \ - --hash=sha256:ea8da1e900d758d078810d4255d8c6aa572181896a31ec79d779eb79c3adc9ad \ - --hash=sha256:ed8cdb691169715a9a492844a83246f090182247d1a5031dc78a403f68ba1e97 \ - --hash=sha256:ef08c1567c78074b22d1a200183d52d04a14df447bf70bcbb6a3507a48e776fc \ - --hash=sha256:f16ba1efc0715b680a18b8123d90dad887c6112ae3555b4b5c32c149540c6b4e \ - --hash=sha256:fa4f98af3a528f0c3fd592a26df7f376f93329c8f4d987f6bb979057af8bf5e2 \ - --hash=sha256:ffea73584b216150eab159b6d12348fb253e68757974de1e2c40d8a318ac89ed -grpc-google-iam-v1==0.14.4 \ - --hash=sha256:392b3796947ed6334e61171d9ab06bf7eb357f554e5fc7556ad7aab6d0e17038 \ - --hash=sha256:412facc320fcbd94034b4df3d557662051d4d8adfa86e0ddb4dca70a3f739964 -huggingface-hub==0.36.2 \ - --hash=sha256:1934304d2fb224f8afa3b87007d58501acfda9215b334eed53072dd5e815ff7a \ - --hash=sha256:48f0c8eac16145dfce371e9d2d7772854a4f591bcb56c9cf548accf531d54270 -idna==3.17 \ - --hash=sha256:466e48829084efe2548012b855df21540b96f2e20e51bd124c851536556a592c \ - --hash=sha256:5eb0cb53bc467c12eadcf6de83163ad8527cec9416f44b9b61b19caedad2b87f -importlib-metadata==8.5.0 \ - --hash=sha256:45e54197d28b7a7f1559e60b95e7c567032b602131fbd588f1497f47880aa68b \ - --hash=sha256:71522656f0abace1d072b9e5481a48f07c138e00f079c38c8f883823f9c26bd7 -joserfc==1.6.8 \ - --hash=sha256:22fb31a69094a5e6f44632002a9df2c30c941fc6c8ce1b037e92c03de954cf9f \ - --hash=sha256:878620c553a6ebdd76ccdc356782fee3f735f21a356d079a546b42a4670ace5f -jsonpath-ng==1.8.0 \ - --hash=sha256:54252968134b5e549ea5b872f1df1168bd7defe1a52fed5a358c194e1943ddc3 \ - --hash=sha256:b8dde192f8af58d646fc031fac9c99fe4d00326afc4148f1f043c601a8cfe138 -jsonschema==4.23.0 \ - --hash=sha256:d71497fef26351a33265337fa77ffeb82423f3ea21283cd9467bb03999266bc4 \ - --hash=sha256:fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566 -langdetect==1.0.9 \ - --hash=sha256:7cbc0746252f19e76f77c0b1690aadf01963be835ef0cd4b56dddf2a8f1dfc2a \ - --hash=sha256:cbc1fef89f8d062739774bd51eda3da3274006b3661d199c2655f6b3f6d605a0 -litellm==1.83.7 \ - --hash=sha256:5784a1d9a9a4a8acd6ca1e347003a5e2e1b3c749b4d41e7da4904577adade111 \ - --hash=sha256:e2f2cb99df2e2b2eab63f1354faa45c88dd7c8d40c18eb648afb1b349c689633 -llama-stack==0.6.0 \ - --hash=sha256:b804830664dc91e54c7225a7a081cb1874c48fc18573569c19fac4a9397e8076 \ - --hash=sha256:d92711791633f5505a4473ffba3f3e26acb700716fddab5aec419d99e614c802 -llama-stack-api==0.6.0 \ - --hash=sha256:b99a03aba3659736b6b540c9e5e674b1daac2bf5eeb2a68795113d62b8250672 \ - --hash=sha256:f0f3a1a6239a5d3b8c7ef02cefdf817c96c6461dcd8a82c1689ac67ec3107270 -llama-stack-client==0.6.0 \ - --hash=sha256:3290aac36dcafbd1bc0baaf995522e2037f57056672b5a1516af112a4210f3ea \ - --hash=sha256:7e514a6ffd92f237aceb062dadc4db44e24a3cd9c4ea35e25173d1e0739beb8e -markupsafe==3.0.3 \ - --hash=sha256:0303439a41979d9e74d18ff5e2dd8c43ed6c6001fd40e5bf2e43f7bd9bbc523f \ - --hash=sha256:068f375c472b3e7acbe2d5318dea141359e6900156b5b2ba06a30b169086b91a \ - --hash=sha256:0bf2a864d67e76e5c9a34dc26ec616a66b9888e25e7b9460e1c76d3293bd9dbf \ - --hash=sha256:0db14f5dafddbb6d9208827849fad01f1a2609380add406671a26386cdf15a19 \ - --hash=sha256:0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf \ - --hash=sha256:0f4b68347f8c5eab4a13419215bdfd7f8c9b19f2b25520968adfad23eb0ce60c \ - --hash=sha256:1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175 \ - --hash=sha256:116bb52f642a37c115f517494ea5feb03889e04df47eeff5b130b1808ce7c219 \ - --hash=sha256:12c63dfb4a98206f045aa9563db46507995f7ef6d83b2f68eda65c307c6829eb \ - --hash=sha256:133a43e73a802c5562be9bbcd03d090aa5a1fe899db609c29e8c8d815c5f6de6 \ - --hash=sha256:1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab \ - --hash=sha256:15d939a21d546304880945ca1ecb8a039db6b4dc49b2c5a400387cdae6a62e26 \ - --hash=sha256:177b5253b2834fe3678cb4a5f0059808258584c559193998be2601324fdeafb1 \ - --hash=sha256:1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce \ - --hash=sha256:1b4b79e8ebf6b55351f0d91fe80f893b4743f104bff22e90697db1590e47a218 \ - --hash=sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634 \ - --hash=sha256:1ba88449deb3de88bd40044603fafffb7bc2b055d626a330323a9ed736661695 \ - --hash=sha256:1cc7ea17a6824959616c525620e387f6dd30fec8cb44f649e31712db02123dad \ - --hash=sha256:218551f6df4868a8d527e3062d0fb968682fe92054e89978594c28e642c43a73 \ - --hash=sha256:26a5784ded40c9e318cfc2bdb30fe164bdb8665ded9cd64d500a34fb42067b1c \ - --hash=sha256:2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe \ - --hash=sha256:2a15a08b17dd94c53a1da0438822d70ebcd13f8c3a95abe3a9ef9f11a94830aa \ - --hash=sha256:2f981d352f04553a7171b8e44369f2af4055f888dfb147d55e42d29e29e74559 \ - --hash=sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa \ - --hash=sha256:3524b778fe5cfb3452a09d31e7b5adefeea8c5be1d43c4f810ba09f2ceb29d37 \ - --hash=sha256:3537e01efc9d4dccdf77221fb1cb3b8e1a38d5428920e0657ce299b20324d758 \ - --hash=sha256:35add3b638a5d900e807944a078b51922212fb3dedb01633a8defc4b01a3c85f \ - --hash=sha256:38664109c14ffc9e7437e86b4dceb442b0096dfe3541d7864d9cbe1da4cf36c8 \ - --hash=sha256:3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d \ - --hash=sha256:3b562dd9e9ea93f13d53989d23a7e775fdfd1066c33494ff43f5418bc8c58a5c \ - --hash=sha256:457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97 \ - --hash=sha256:4bd4cd07944443f5a265608cc6aab442e4f74dff8088b0dfc8238647b8f6ae9a \ - --hash=sha256:4e885a3d1efa2eadc93c894a21770e4bc67899e3543680313b09f139e149ab19 \ - --hash=sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9 \ - --hash=sha256:509fa21c6deb7a7a273d629cf5ec029bc209d1a51178615ddf718f5918992ab9 \ - --hash=sha256:5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc \ - --hash=sha256:591ae9f2a647529ca990bc681daebdd52c8791ff06c2bfa05b65163e28102ef2 \ - --hash=sha256:5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4 \ - --hash=sha256:69c0b73548bc525c8cb9a251cddf1931d1db4d2258e9599c28c07ef3580ef354 \ - --hash=sha256:6b5420a1d9450023228968e7e6a9ce57f65d148ab56d2313fcd589eee96a7a50 \ - --hash=sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698 \ - --hash=sha256:729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9 \ - --hash=sha256:77f0643abe7495da77fb436f50f8dab76dbc6e5fd25d39589a0f1fe6548bfa2b \ - --hash=sha256:795e7751525cae078558e679d646ae45574b47ed6e7771863fcc079a6171a0fc \ - --hash=sha256:7be7b61bb172e1ed687f1754f8e7484f1c8019780f6f6b0786e76bb01c2ae115 \ - --hash=sha256:7c3fb7d25180895632e5d3148dbdc29ea38ccb7fd210aa27acbd1201a1902c6e \ - --hash=sha256:7e68f88e5b8799aa49c85cd116c932a1ac15caaa3f5db09087854d218359e485 \ - --hash=sha256:83891d0e9fb81a825d9a6d61e3f07550ca70a076484292a70fde82c4b807286f \ - --hash=sha256:8485f406a96febb5140bfeca44a73e3ce5116b2501ac54fe953e488fb1d03b12 \ - --hash=sha256:8709b08f4a89aa7586de0aadc8da56180242ee0ada3999749b183aa23df95025 \ - --hash=sha256:8f71bc33915be5186016f675cd83a1e08523649b0e33efdb898db577ef5bb009 \ - --hash=sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d \ - --hash=sha256:949b8d66bc381ee8b007cd945914c721d9aba8e27f71959d750a46f7c282b20b \ - --hash=sha256:94c6f0bb423f739146aec64595853541634bde58b2135f27f61c1ffd1cd4d16a \ - --hash=sha256:9a1abfdc021a164803f4d485104931fb8f8c1efd55bc6b748d2f5774e78b62c5 \ - --hash=sha256:9b79b7a16f7fedff2495d684f2b59b0457c3b493778c9eed31111be64d58279f \ - --hash=sha256:a320721ab5a1aba0a233739394eb907f8c8da5c98c9181d1161e77a0c8e36f2d \ - --hash=sha256:a4afe79fb3de0b7097d81da19090f4df4f8d3a2b3adaa8764138aac2e44f3af1 \ - --hash=sha256:ad2cf8aa28b8c020ab2fc8287b0f823d0a7d8630784c31e9ee5edea20f406287 \ - --hash=sha256:b8512a91625c9b3da6f127803b166b629725e68af71f8184ae7e7d54686a56d6 \ - --hash=sha256:bc51efed119bc9cfdf792cdeaa4d67e8f6fcccab66ed4bfdd6bde3e59bfcbb2f \ - --hash=sha256:bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581 \ - --hash=sha256:bdd37121970bfd8be76c5fb069c7751683bdf373db1ed6c010162b2a130248ed \ - --hash=sha256:be8813b57049a7dc738189df53d69395eba14fb99345e0a5994914a3864c8a4b \ - --hash=sha256:c0c0b3ade1c0b13b936d7970b1d37a57acde9199dc2aecc4c336773e1d86049c \ - --hash=sha256:c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026 \ - --hash=sha256:c4ffb7ebf07cfe8931028e3e4c85f0357459a3f9f9490886198848f4fa002ec8 \ - --hash=sha256:ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676 \ - --hash=sha256:d2ee202e79d8ed691ceebae8e0486bd9a2cd4794cec4824e1c99b6f5009502f6 \ - --hash=sha256:d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e \ - --hash=sha256:d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d \ - --hash=sha256:d88b440e37a16e651bda4c7c2b930eb586fd15ca7406cb39e211fcff3bf3017d \ - --hash=sha256:de8a88e63464af587c950061a5e6a67d3632e36df62b986892331d4620a35c01 \ - --hash=sha256:df2449253ef108a379b8b5d6b43f4b1a8e81a061d6537becd5582fba5f9196d7 \ - --hash=sha256:e1c1493fb6e50ab01d20a22826e57520f1284df32f2d8601fdd90b6304601419 \ - --hash=sha256:e1cf1972137e83c5d4c136c43ced9ac51d0e124706ee1c8aa8532c1287fa8795 \ - --hash=sha256:e2103a929dfa2fcaf9bb4e7c091983a49c9ac3b19c9061b6d5427dd7d14d81a1 \ - --hash=sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5 \ - --hash=sha256:e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d \ - --hash=sha256:e8fc20152abba6b83724d7ff268c249fa196d8259ff481f3b1476383f8f24e42 \ - --hash=sha256:eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe \ - --hash=sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda \ - --hash=sha256:f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e \ - --hash=sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737 \ - --hash=sha256:f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523 \ - --hash=sha256:f42d0984e947b8adf7dd6dde396e720934d12c506ce84eea8476409563607591 \ - --hash=sha256:f71a396b3bf33ecaa1626c255855702aca4d3d9fea5e051b41ac59a9c1c41edc \ - --hash=sha256:f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a \ - --hash=sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50 -mcp==1.27.2 \ - --hash=sha256:8e02db104096d1c25b28e64bde29a5c32b31bc241710213e12fd4d84985bdfef \ - --hash=sha256:d6ff5160c6ca65d93013626efb3fc249de683c30b2d8570755ceddd490344de5 -msal==1.37.0 \ - --hash=sha256:1b1672a33ee467c1d70b341bb16cafd51bb3c817147a95b93263794b03971bec \ - --hash=sha256:dd17e95a7c71bce75e8108113438ba7c4a086b3bcad4f57a8c09b7af3d753c2d -msal-extensions==1.3.1 \ - --hash=sha256:96d3de4d034504e969ac5e85bae8106c8373b5c6568e4c8fa7af2eca9dbe6bca \ - --hash=sha256:c5b0fd10f65ef62b5f1d62f4251d51cbcaf003fcedae8c91b040a488614be1a4 -multiprocess==0.70.19 \ - --hash=sha256:02e5c35d7d6cd2bdc89c1858867f7bde4012837411023a4696c148c1bdd7c80e \ - --hash=sha256:0d4b4397ed669d371c81dcd1ef33fd384a44d6c3de1bd0ca7ac06d837720d3c5 \ - --hash=sha256:1bbf1b69af1cf64cd05f65337d9215b88079ec819cd0ea7bac4dab84e162efe7 \ - --hash=sha256:1c3dce098845a0db43b32a0b76a228ca059a668071cfeaa0f40c36c0b1585d45 \ - --hash=sha256:3a56c0e85dd5025161bac5ce138dcac1e49174c7d8e74596537e729fd5c53c28 \ - --hash=sha256:5be9ec7f0c1c49a4f4a6fd20d5dda4aeabc2d39a50f4ad53720f1cd02b3a7c2e \ - --hash=sha256:79576c02d1207ec405b00cabf2c643c36070800cca433860e14539df7818b2aa \ - --hash=sha256:8d5eb4ec5017ba2fab4e34a747c6d2c2b6fecfe9e7236e77988db91580ada952 \ - --hash=sha256:928851ae7973aea4ce0eaf330bbdafb2e01398a91518d5c8818802845564f45c \ - --hash=sha256:952021e0e6c55a4a9fe4cd787895b86e239a40e76802a789d6305398d3975897 \ - --hash=sha256:97404393419dcb2a8385910864eedf47a3cadf82c66345b44f036420eb0b5d87 \ - --hash=sha256:c6b6d78d43a03b68014ca1f0b7937d965393a670c5de7c29026beb2258f2f896 \ - --hash=sha256:d6db91ca6391eebc139c352f34578cea382df6bfa03d3b4146ed12b18b01cc14 \ - --hash=sha256:e5e7dc3e3e1732e88c07aaec17eeb9917f9ed1107d9e60d5ab985cdc14bac43a \ - --hash=sha256:e6c0674d34b8adac22533f6786576b3de4e396aaeda9e0c15378af9b8ada2702 \ - --hash=sha256:e8cc7fbdff15c0613f0a1f1f8744bef961b0a164c0ca29bdff53e9d2d93c5e5f -nltk==3.9.4 \ - --hash=sha256:ed03bc098a40481310320808b2db712d95d13ca65b27372f8a403949c8b523d0 \ - --hash=sha256:f2fa301c3a12718ce4a0e9305c5675299da5ad9e26068218b69d692fda84828f -oci==2.170.0 \ - --hash=sha256:1e205a395e856b6514501d34595dd1e8e261415aaaab2c97f77fd2fc9618dcc3 \ - --hash=sha256:49adf0ffaf754c07c43194d19d2e11f5e1b602a95bb365bb384d939ff365b1b4 -openai==2.30.0 \ - --hash=sha256:92f7661c990bda4b22a941806c83eabe4896c3094465030dd882a71abe80c885 \ - --hash=sha256:9a5ae616888eb2748ec5e0c5b955a51592e0b201a11f4262db920f2a78c5231d -opentelemetry-api==1.42.1 \ - --hash=sha256:51a69edacadbc03a8950ace1c4c21099cacc538820ac2c9e36277e78cebba714 \ - --hash=sha256:56c63bea9f77b62856be8c47600474acad853b2924b99b1687c4cb6297166716 -opentelemetry-distro==0.63b1 \ - --hash=sha256:b405b04ad70e430390265eb38e82e067a84ca1f49a21429eaadb930c13330d66 \ - --hash=sha256:f435098abc7953f58226e8bf79e4c90bc6b32e50aa75d6fa074201db8243b577 -opentelemetry-exporter-otlp==1.42.1 \ - --hash=sha256:2d9ebaed714377a67d224d46795ddcc11d2c877fa5de35fda70b6f3b010729a9 \ - --hash=sha256:aedd54545bb0587cd45210abdc8be545af9c01413f3307786e276df1e3c83bee -opentelemetry-exporter-otlp-proto-common==1.42.1 \ - --hash=sha256:04f1f01fb597c4249dfcd7f8b861c902c2102369d376d9d346ff38de4469a2ee \ - --hash=sha256:f48d395ab815b444da118868977e9798ea354c25737d5cf39578ae894011c140 -opentelemetry-exporter-otlp-proto-grpc==1.42.1 \ - --hash=sha256:0ae1177e2038b18a929b3098215243631ef91136cba26b7e2b12790ceb7e87cc \ - --hash=sha256:975c4461f167dd8ed8857d68d3b6b25f3d272eab896f6a9470d0f5b90e2faf15 -opentelemetry-exporter-otlp-proto-http==1.42.1 \ - --hash=sha256:00a16da1b312a1d6c7233d600d557c91df71125af73020f3b9a7765bd699d59d \ - --hash=sha256:bf142a21035d7571ac3a09cb2e5639f49886f243972883cfe777ed3bf02b734d -opentelemetry-instrumentation==0.63b1 \ - --hash=sha256:32368d6ae52c8de20aa790a6ad86b10a76f09956092337ae37d675773990e541 \ - --hash=sha256:f1986716d52cc316ea5f60189098726a9071d8ecc0eee96c9ed110be08bade9c -opentelemetry-proto==1.42.1 \ - --hash=sha256:c6a51e6b4f05ae63565f3a113217f3d2bfaec68f78c02d7a6c85f9010d1cfca6 \ - --hash=sha256:dedb74cba2886c59c7789b227a7a670613025a07489040050aedff6e5c0fb43c -opentelemetry-sdk==1.42.1 \ - --hash=sha256:083cd4bbfaa5aa7b5a9e552430d9951219967cfb27aa61feb13a77aba1fc839d \ - --hash=sha256:8c834e8f8c9ba4171d4ec843d0cb8a67e4c7394d3f9e9297e582cbd9456ddbf7 -opentelemetry-semantic-conventions==0.63b1 \ - --hash=sha256:3daf963611334b365e98a57438183eb012d3bfb40b2d931a9af613476b8701a9 \ - --hash=sha256:dfe5ef4dee82586b746f522b818ceb298d00b3d59f660042bd79404bff8d0682 -oracledb==4.0.1 \ - --hash=sha256:032ca4f558b05f03fa1bef1b04e59ec350ae0b22e6d85c47f4ac62ae98315823 \ - --hash=sha256:03afeda85bec3eca983ebf3ad9910d0f217d99300258366d287e015a041d6c13 \ - --hash=sha256:08e84a6af1b6e5921dba088dd9fc0738927206eafe5ce9763c34195f87556849 \ - --hash=sha256:0d3c6ed987df64b914ece0722692419fe494d07f15bb4d7715adeada4f914c3a \ - --hash=sha256:0ece951553c106a0896c8e1690bcdf69d472761fa65fec9b8152cbce13ab8b81 \ - --hash=sha256:10204432f0eea8707a79c75bdccb84071e43fd19c658cb3b34d1746b12c6e7fe \ - --hash=sha256:20a10f903c8da59e9689a98bd68012f78fa19bed950ad9f19cd8f5b8b97e73a0 \ - --hash=sha256:29ae0ff517a3241060eeee15a321b710c3f83a688cf2da7d5729adbe212e2b00 \ - --hash=sha256:34bbea44423ed8b24093aa859ca7ee9b6e76ea490f9acdc5f6ff01aa1083e343 \ - --hash=sha256:3b5ef1676a27b7e0a7ec55be27fd8f6d28d1601f5e8dfdae78705909f25b7c0a \ - --hash=sha256:416b324cd7715073cf5f3d577330387ffd59741463995c25bdc2d82b3e80b88e \ - --hash=sha256:443b2f03461e873ccd73dff3d8541fcf974c05e13e296a6687ffbb0c4a72c0a1 \ - --hash=sha256:4b42725337f80d433a3bd2928c08667e5b89da9ce05cf9ae3a4189c4fc4805ea \ - --hash=sha256:523b3356cde9d588ba250cefafdfc34869233d65c179f805ea6e4d3d6b209a7f \ - --hash=sha256:5332a4499d61c3cd659ed09bbd0d3c9a4c74a70bd51136d5c3de9127dc6d7434 \ - --hash=sha256:5646c126d4ab506ee2bda261e792f0036231ee929296057e79857ec678d86d4f \ - --hash=sha256:7156ef112a901967b3ee89b6c582bafc5a3082c47ca566de1a79e9ac3b48da32 \ - --hash=sha256:73ba32597fe1da72e0824aaa4b1900ec08a3b77268cb4eb45c733ae7e7043e70 \ - --hash=sha256:7bbe5611f9196f0ec15d4bf838ec728d89586a962a20d65cad898aec020e11c4 \ - --hash=sha256:7db5a43c29a23ed23923a29816c65c7a81fe00f2abfe6bf36d83ad952abd9b89 \ - --hash=sha256:8159c5bd8f25b0ca0ce30f21e7a732a2bdfb4adb81b9c8ea1ca75339d8ec8398 \ - --hash=sha256:828dd4c981b286f0467feab1c035fae8d3888cfdc707706841734821877ae1f3 \ - --hash=sha256:86a06d0afb3bb3a24bace0e72fb9abca2093efe0fa3457c65c13ba4eb5000b0b \ - --hash=sha256:86ac65cbc8d29626b1d9d203f9151566c26a78e55bdfc030c06169ae8017f458 \ - --hash=sha256:873fcca53306e2b3b445a7d657cddc19e415a7aa7e392c473dfd1a3ae3970989 \ - --hash=sha256:8e13ff1e6f28fdb863180d23fa94cb42c619c29d2981e24992431e51b97caa54 \ - --hash=sha256:8fcad6d9628923281bf21e48a391ac2f87ec6950dc63381d8fea470e3128aef0 \ - --hash=sha256:90586b3c7729b9cf3d40df902e81257f01e15e3408d8b6b9dbf91e939b64f72c \ - --hash=sha256:9f521b3f3f14fa9b8e748aeb79b064ae6767fcb0e8ff969a9aba7a852f059658 \ - --hash=sha256:a029dcee759bca56a8c95e952040c3d3f57e5ec05965355293b21930a66967fb \ - --hash=sha256:ae894ca2705929eb0ac228329336fd03388ad6e3b54002be6f5d4400a8feaf52 \ - --hash=sha256:b05bfadbfe462c39cc97258a973972f5bbbc9f8e2e9a4c2e0efcb1ec86b91088 \ - --hash=sha256:b09eec35681d72c9476e6d715b89bb775724a31e7363df6beba7470494ea8040 \ - --hash=sha256:b73820521eccd290506af94e1ffb9a8a5941b4018e3861df9b040652a7cef123 \ - --hash=sha256:c05a01d6ad610a88c2aa1a43b1dc0a8485f5fbd4374d2b36908859d4205de192 \ - --hash=sha256:c24b174aac8163065736072a726a50091791f6d30ac5c44965cf7044e86fbaf8 \ - --hash=sha256:c2d394453f669858bec942ff0da18b6ebade296ece823d582ad2b464ed5c6c90 \ - --hash=sha256:cb7727f93ff962ab826bc3d0bca4b0e5bf45ecb7c525551c70c9e094f0f27027 \ - --hash=sha256:ce3f25552fe58df5c266874f8b13f0a8ab7fcd09ab4b476bc15520a67527ca4b \ - --hash=sha256:ce6319ee01dcbb4d74f0e2a5794c6a566f339958ecac9830c67c7070521620e2 \ - --hash=sha256:cf61e42b9ef723dbdd0b23032b695e872009ed7341003df59d9a97cd960df977 \ - --hash=sha256:d132af7d95474d207632363575c7968b09e2d33dd24af3a36f539254433f4ae8 \ - --hash=sha256:d7cd278d59780e22e0a7451d208460756d779dc62b55bdbd95652f9640fbf8c3 \ - --hash=sha256:dbe8b44fea57385617838f2acfce8cc19f6c95cd9e65e7235e86b5932af1acd9 \ - --hash=sha256:e36581bb10e719d928dad12018c2d42606db2c34f49d6665b06f701f049255f0 \ - --hash=sha256:e3d54b624748cfe42248c4bc62c3f788632a2077058485a9acb3150312b1c396 \ - --hash=sha256:e4926e699a42c526137724960fa4303ecb0b542186b11d3705ac84414a896508 -polyleven==0.11.0 \ - --hash=sha256:046e90c02c5b8dae2ab71c4fb33772bd6f27b7883b05e2117573bf478b5ced44 \ - --hash=sha256:05207bb66da15a2dc5c530e2f5cb5f0588d0a7e79b3bd542965f9e06e3fb14fe \ - --hash=sha256:0cb8ed97b536f9aada3ad45169ee7768c426498bf3fa608a4eabd055dfef795e \ - --hash=sha256:0edbc74858bcd41e02865ad9431f8c78752161d96ab61d3643dcfc3f334bed58 \ - --hash=sha256:14601c9ea632d0d4bd95e78f4ca0752d1de26f75aa3d983ad49800f07f76f90b \ - --hash=sha256:166f6c9b161c6af92ff201c734d6437bc7ef74a32dab306c5d47a0bdb7a82d9f \ - --hash=sha256:16986fd58911d6075b5f63ea001197141145b7a6df48bc4ce4530e79227e74a2 \ - --hash=sha256:209fa669ca23ac453a7e9fbf07695350d5cbe61d71a6226b861757ccab28e664 \ - --hash=sha256:248b9f645d8c6e337091498ed5c7d4a796d9d51df98458be25b1d76d962954e2 \ - --hash=sha256:2a33728df4708c9370f5e65fdb8de7e15f01d5ae8530eedf507d182fe63afb0e \ - --hash=sha256:2a59849c327279902e8b396666f6998234aa82aacc47abc103d93babaad46203 \ - --hash=sha256:2eb8f6778f3073dce041805a09f0753cc441b0219253d7b933aad234a954f30a \ - --hash=sha256:2f975ab8cb81fd8eb5a647a3cefb0bb80bc307920a9307f66ab4019d88370ed2 \ - --hash=sha256:310caad59e5cb02553806ba5a66d0cbc533e17d17e6dc90dcc810f20f230e183 \ - --hash=sha256:367faf0e1898c79624f46a894ebe5b69bf1782318ec3e3331676ce5b24352882 \ - --hash=sha256:3bfce4689b6aaacf7c5296b8ed11ada07ccf046a01097ba1681e10f9caabbf6f \ - --hash=sha256:3c18b8e44e5d04f1ffa7d41eb68da553833ab8663b7cfb1a505d85676db5c797 \ - --hash=sha256:3c93419c84e5cabfcf38cdaf322c915c58866ce1828a3cfaebc06bbe2fc66d6d \ - --hash=sha256:45487a1e4a8415e4ed45e6720b2a3ad9d240336f7afa136a625b8f802a1880c2 \ - --hash=sha256:45cfb234fece0c9df73276788fa529a25f91abf97dd0d9aed4f1b713b6d530e3 \ - --hash=sha256:4648732c8ad3955c8d7b1aa015d92936a150475aaa97ce704fe0c8e7fa7e0c4f \ - --hash=sha256:47a3fb5b8cb60f647d2832d38b7d87cda27da8622b27c1292bceb9a04954c189 \ - --hash=sha256:4b8e5ac8faecc6daa7b3d325436a3f23f8c33dec7bfca5d22df3fbe00f92ddd9 \ - --hash=sha256:4c78b4d3e7d7b74315d5422178118963374c0cf3d7a9532a955f446ed365320a \ - --hash=sha256:50bb7d68b790194d552ee1256a02e205486b27eb22ab333eeb0003e0271c4846 \ - --hash=sha256:561f028c9535223c78cd58f6b546dd15ce69a6e268e651ae1377644845fae639 \ - --hash=sha256:5808f62874187dfd4e30de5dd5f42a660562ec95a87cc64d5455ba0f4be8f175 \ - --hash=sha256:58c11ce44466f6d833fd90f77ccd0c44accce41c9e80dea4c2817d5c124a61d5 \ - --hash=sha256:5c9ccb2f327d49a7566b0192e0d426f7772b38e247dc4e809c0b1cdf23e2ecc2 \ - --hash=sha256:6526d2516b439065864722069de6fcc418a4135696990dad66b81ddb18863bd9 \ - --hash=sha256:65fc01fe6cfe287f2f20170b35687a436ab36b882db568a55d81d6e0acd8379d \ - --hash=sha256:6ba2dcf3aff2909bbf3bdd9c1749f8de207f023fbb2c0b1d681c6bf3e78ceef1 \ - --hash=sha256:71bbb17919548d4e162444c918b1acf864f84150197087c757975606cbb99e43 \ - --hash=sha256:71d7c324e13ace16ecb7f1ba4d37e64dd34419187c6827f62b419421646ff73a \ - --hash=sha256:758c5fcb9d8556720fb51c1de5f3a7b39bb8dce9510a1f40e5f287951b901010 \ - --hash=sha256:7859ce33fe4184e52da6c2161f806e5c26faefff148ba16f7205c8d779e2ed68 \ - --hash=sha256:7ab547adc0ac72a2852d37337a4a839d4e2f713940b0e8a944d45c528e5e6538 \ - --hash=sha256:83e59c8590a06ea6a959a3c55e6d28544b8d11a51aac2a318c1b74f92575dd28 \ - --hash=sha256:864aed924fd22bac26b6afefdb7455132a98922c060a20aee317b1a2a1c394d1 \ - --hash=sha256:8742d8bc9225237af5b574e2f8b95757418c6329f2d6bfdf3eb1d2bc44241880 \ - --hash=sha256:88a35ec93ec3d81a7347fd49db314a914798a144dca3d22946d18bba9b597dec \ - --hash=sha256:909d76c5e28d555b4174677041c0909f540f4948b7f77a86739e3dda6b34a9e0 \ - --hash=sha256:94311ee39e2db957415eacb36b96ae26dcc427c260465324de45fb8c870d4661 \ - --hash=sha256:94832ff5d04022ba6038c2ca0c9ea6906330cde3a3b1761739d772647d01da33 \ - --hash=sha256:9aaed455f498172769fd88f83c27bb8f43e0583d7b27d6b343154d471ec2145e \ - --hash=sha256:9b97b9260730deda4cdd5878fd6ce128b970497da0fbefeeacc0b1ed4c59ebb7 \ - --hash=sha256:9d34f655ae577fd91c6fa01e86e0396bf9700ffb8f9ef936306b6f14bd061d98 \ - --hash=sha256:9deb75346b4177d5e69496791e6156f705d9059961ce8f9520a0dc96532f10f2 \ - --hash=sha256:9e0d77012697d5a3ad74f0c8bacdade26ec38d99ce40f537cca3f44cf3a94af9 \ - --hash=sha256:a11326921f1581e72072e921eb572049945529a856d1c6a981c6fd6316f298d3 \ - --hash=sha256:a28860fe33a7f907bc5f86e55a0b9faea80047d1677fa23b4d6c631ccf91ef2f \ - --hash=sha256:a472fccba89ffb44b10481760c7351c79855b0ff654ec9d28966bfb111a71748 \ - --hash=sha256:b2aada9dd04e84389d90790f359447447a499d6d86807697d80732ed45547a43 \ - --hash=sha256:bb8c41d845a7c11fd33d2f4c9287204777943e7ba0da4ab772ef19926a54f5f2 \ - --hash=sha256:bf47079b6dc62e6af2bd6ecb45a6087efd9a27b61666b98d0326c246a22ea991 \ - --hash=sha256:bf82bb8601582da8f2248293c1e6f4cce2025c79fd64fccddf67dd8538655b55 \ - --hash=sha256:c1a02e3f0acfd1164cbaea25192398bc943ee9b93b9883a1fba9b2613d3616b0 \ - --hash=sha256:c518ced3e7c05de4efbd12fd7b61d6d574eb170f431e0415689d9f143fe552ee \ - --hash=sha256:c6a814629cc0468f9800b1333414a3be08fda9c5ce6b63e97154a9d21732e590 \ - --hash=sha256:cae70197d545a09bfab8d7e506eed66ef314fa6c4e7a5e2c402c2febc31db74b \ - --hash=sha256:cb23352025d8f1eab1f71548a8a1579e554ed7cd82098d6a4f7752c8dc8b28c0 \ - --hash=sha256:ccf87f6ac8d76aa4c48a4828becc0c19fd1589b14b20affe23e5e012be4fa64f \ - --hash=sha256:ce264f6a9daa3265299d8ffcb180d8256517a8d9235613a3b267172da0bc1e06 \ - --hash=sha256:ce2e782f8fae812c7ad960c4fd17a58ada183b89ae220cacfe6b3234179872f4 \ - --hash=sha256:d74d348387cf340051711c0dd6af993b4c264daa78470098de16f4a2b725785c \ - --hash=sha256:dc4f17007b07fde292ad33ec43a3ae8febe27a5bd92462b920736fd81d774fce \ - --hash=sha256:e6182ea6142904ea50cf82e2955d922156b5fcf9a8279925f312961f16710a58 \ - --hash=sha256:e7b6c8cfa13114bc2b17b51503a4db0cbc358c3c96197d6d7283bd686c0fd8fb \ - --hash=sha256:e9fd720e67c2385b5a8ee970d01343d6e249dd03b11c2fea0a933a67dbce63f8 \ - --hash=sha256:ec83e88b28a77d3be353e13840893cc57a7d9272a07c7dac169de3578c0d2025 \ - --hash=sha256:ef28c4c6cdc71a32f0478772d2f07b2cd412fe7950182033b1c36c8a481b0834 \ - --hash=sha256:fa49732cdecd985241db9f78d5fdba7170ba6375d2bf9ad040b05127dc96b877 -proto-plus==1.27.2 \ - --hash=sha256:6432f75893d3b9e70b9c412f1d2f03f65b11fb164b793d14ae2ca01821d22718 \ - --hash=sha256:b2adde53adadf75737c44d3dcb0104fde65250dfc83ad59168b4aa3e574b6a24 -protobuf==6.33.6 \ - --hash=sha256:0cd27b587afca21b7cfa59a74dcbd48a50f0a6400cfb59391340ad729d91d326 \ - --hash=sha256:77179e006c476e69bf8e8ce866640091ec42e1beb80b213c3900006ecfba6901 \ - --hash=sha256:7d29d9b65f8afef196f8334e80d6bc1d5d4adedb449971fefd3723824e6e77d3 \ - --hash=sha256:9720e6961b251bde64edfdab7d500725a2af5280f3f4c87e57c0208376aa8c3a \ - --hash=sha256:a6768d25248312c297558af96a9f9c929e8c4cee0659cb07e780731095f38135 \ - --hash=sha256:bd56799fb262994b2c2faa1799693c95cc2e22c62f56fb43af311cae45d26f0e \ - --hash=sha256:c96c37eec15086b79762ed265d59ab204dabc53056e3443e702d2681f4b39ce3 \ - --hash=sha256:e2afbae9b8e1825e3529f88d514754e094278bb95eadc0e199751cdd9a2e82a2 \ - --hash=sha256:e9db7e292e0ab79dd108d7f1a94fe31601ce1ee3f7b79e0692043423020b0593 \ - --hash=sha256:f443a394af5ed23672bc6c486be138628fbe5c651ccbc536873d7da23d1868cf -psutil==7.2.2 \ - --hash=sha256:0746f5f8d406af344fd547f1c8daa5f5c33dbc293bb8d6a16d80b4bb88f59372 \ - --hash=sha256:076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9 \ - --hash=sha256:11fe5a4f613759764e79c65cf11ebdf26e33d6dd34336f8a337aa2996d71c841 \ - --hash=sha256:1a571f2330c966c62aeda00dd24620425d4b0cc86881c89861fbc04549e5dc63 \ - --hash=sha256:1a7b04c10f32cc88ab39cbf606e117fd74721c831c98a27dc04578deb0c16979 \ - --hash=sha256:1fa4ecf83bcdf6e6c8f4449aff98eefb5d0604bf88cb883d7da3d8d2d909546a \ - --hash=sha256:2edccc433cbfa046b980b0df0171cd25bcaeb3a68fe9022db0979e7aa74a826b \ - --hash=sha256:7b6d09433a10592ce39b13d7be5a54fbac1d1228ed29abc880fb23df7cb694c9 \ - --hash=sha256:8c233660f575a5a89e6d4cb65d9f938126312bca76d8fe087b947b3a1aaac9ee \ - --hash=sha256:917e891983ca3c1887b4ef36447b1e0873e70c933afc831c6b6da078ba474312 \ - --hash=sha256:ab486563df44c17f5173621c7b198955bd6b613fb87c71c161f827d3fb149a9b \ - --hash=sha256:ae0aefdd8796a7737eccea863f80f81e468a1e4cf14d926bd9b6f5f2d5f90ca9 \ - --hash=sha256:b0726cecd84f9474419d67252add4ac0cd9811b04d61123054b9fb6f57df6e9e \ - --hash=sha256:b58fabe35e80b264a4e3bb23e6b96f9e45a3df7fb7eed419ac0e5947c61e47cc \ - --hash=sha256:c7663d4e37f13e884d13994247449e9f8f574bc4655d509c3b95e9ec9e2b9dc1 \ - --hash=sha256:e452c464a02e7dc7822a05d25db4cde564444a67e58539a00f929c51eddda0cf \ - --hash=sha256:e78c8603dcd9a04c7364f1a3e670cea95d51ee865e4efb3556a3a63adef958ea \ - --hash=sha256:eb7e81434c8d223ec4a219b5fc1c47d0417b12be7ea866e24fb5ad6e84b3d988 \ - --hash=sha256:ed0cace939114f62738d808fdcecd4c869222507e266e574799e9c0faa17d486 \ - --hash=sha256:eed63d3b4d62449571547b60578c5b2c4bcccc5387148db46e0c2313dad0ee00 \ - --hash=sha256:fd04ef36b4a6d599bbdb225dd1d3f51e00105f6d48a28f006da7f9822f2606d8 -pyaml==26.2.1 \ - --hash=sha256:489dd82997235d4cfcf76a6287fce2f075487d77a6567c271e8d790583690c68 \ - --hash=sha256:6261c2f0a2f33245286c794ad6ec234be33a73d2b05427079fd343e2812a87cf -pyasn1==0.6.3 \ - --hash=sha256:697a8ecd6d98891189184ca1fa05d1bb00e2f84b5977c481452050549c8a72cf \ - --hash=sha256:a80184d120f0864a52a073acc6fc642847d0be408e7c7252f31390c0f4eadcde -pycryptodomex==3.23.0 \ - --hash=sha256:02d87b80778c171445d67e23d1caef279bf4b25c3597050ccd2e13970b57fd51 \ - --hash=sha256:06698f957fe1ab229a99ba2defeeae1c09af185baa909a31a5d1f9d42b1aaed6 \ - --hash=sha256:14c37aaece158d0ace436f76a7bb19093db3b4deade9797abfc39ec6cd6cc2fe \ - --hash=sha256:189afbc87f0b9f158386bf051f720e20fa6145975f1e76369303d0f31d1a8d7c \ - --hash=sha256:1c3a65ad441746b250d781910d26b7ed0a396733c6f2dbc3327bd7051ec8a541 \ - --hash=sha256:1c6d919fc8429e5cb228ba8c0d4d03d202a560b421c14867a65f6042990adc8e \ - --hash=sha256:267a3038f87a8565bd834317dbf053a02055915acf353bf42ededb9edaf72010 \ - --hash=sha256:27e13c80ac9a0a1d050ef0a7e0a18cc04c8850101ec891815b6c5a0375e8a245 \ - --hash=sha256:43c446e2ba8df8889e0e16f02211c25b4934898384c1ec1ec04d7889c0333587 \ - --hash=sha256:47f6d318fe864d02d5e59a20a18834819596c4ed1d3c917801b22b92b3ffa648 \ - --hash=sha256:4e79f1aaff5a3a374e92eb462fa9e598585452135012e2945f96874ca6eeb1ff \ - --hash=sha256:4f2596e643d4365e14d0879dc5aafe6355616c61c2176009270f3048f6d9a61f \ - --hash=sha256:52e5ca58c3a0b0bd5e100a9fbc8015059b05cffc6c66ce9d98b4b45e023443b9 \ - --hash=sha256:55ccbe27f049743a4caf4f4221b166560d3438d0b1e5ab929e07ae1702a4d6fd \ - --hash=sha256:58b851b9effd0d072d4ca2e4542bf2a4abcf13c82a29fd2c93ce27ee2a2e9462 \ - --hash=sha256:6b8962204c47464d5c1c4038abeadd4514a133b28748bcd9fa5b6d62e3cec6fa \ - --hash=sha256:6bbcb1dd0f646484939e142462d9e532482bc74475cecf9c4903d4e1cd21f003 \ - --hash=sha256:71909758f010c82bc99b0abf4ea12012c98962fbf0583c2164f8b84533c2e4da \ - --hash=sha256:7b37e08e3871efe2187bc1fd9320cc81d87caf19816c648f24443483005ff886 \ - --hash=sha256:7de1e40a41a5d7f1ac42b6569b10bcdded34339950945948529067d8426d2785 \ - --hash=sha256:8a4fcd42ccb04c31268d1efeecfccfd1249612b4de6374205376b8f280321744 \ - --hash=sha256:91979028227543010d7b2ba2471cf1d1e398b3f183cb105ac584df0c36dac28d \ - --hash=sha256:a33986a0066860f7fcf7c7bd2bc804fa90e434183645595ae7b33d01f3c91ed8 \ - --hash=sha256:a9d446e844f08299236780f2efa9898c818fe7e02f17263866b8550c7d5fb328 \ - --hash=sha256:add243d204e125f189819db65eed55e6b4713f70a7e9576c043178656529cec7 \ - --hash=sha256:b2c2537863eccef2d41061e82a881dcabb04944c5c06c5aa7110b577cc487545 \ - --hash=sha256:bc65bdd9fc8de7a35a74cab1c898cab391a4add33a8fe740bda00f5976ca4708 \ - --hash=sha256:bdc69d0d3d989a1029df0eed67cc5e8e5d968f3724f4519bd03e0ec68df7543c \ - --hash=sha256:bffc92138d75664b6d543984db7893a628559b9e78658563b0395e2a5fb47ed9 \ - --hash=sha256:c25e30a20e1b426e1f0fa00131c516f16e474204eee1139d1603e132acffc314 \ - --hash=sha256:c7947ab8d589e3178da3d7cdeabe14f841b391e17046954f2fbcd941705762b5 \ - --hash=sha256:c84b239a1f4ec62e9c789aafe0543f0594f0acd90c8d9e15bcece3efe55eca66 \ - --hash=sha256:c885da45e70139464f082018ac527fdaad26f1657a99ee13eecdce0f0ca24ab4 \ - --hash=sha256:d9825410197a97685d6a1fa2a86196430b01877d64458a20e95d4fd00d739a08 \ - --hash=sha256:da4fa650cef02db88c2b98acc5434461e027dce0ae8c22dd5a69013eaf510006 \ - --hash=sha256:df027262368334552db2c0ce39706b3fb32022d1dce34673d0f9422df004b96a \ - --hash=sha256:ebfff755c360d674306e5891c564a274a47953562b42fb74a5c25b8fc1fb1cb5 \ - --hash=sha256:eca54f4bb349d45afc17e3011ed4264ef1cc9e266699874cdd1349c504e64798 \ - --hash=sha256:f489c4765093fb60e2edafdf223397bc716491b2b69fe74367b70d6999257a5c \ - --hash=sha256:fdfac7cda115bca3a5abb2f9e43bc2fb66c2b65ab074913643803ca7083a79ea \ - --hash=sha256:febec69c0291efd056c65691b6d9a339f8b4bc43c6635b8699471248fe897fea -pydantic-settings==2.14.2 \ - --hash=sha256:a20c97b37910b6550d5ea50fbcc2d4187defe58cd57070b73863d069419c9440 \ - --hash=sha256:c19dd64b19097f1de80184f0cc7b0272a13ae6e170cbf240a3e27e381ed14a5f -pygments==2.20.0 \ - --hash=sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f \ - --hash=sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176 -pyjwt==2.13.0 \ - --hash=sha256:41571c89ca91598c79e8ef18a2d07367d4810fbbd6f637794879baf1b7703423 \ - --hash=sha256:66adcc2aff09b3f1bbd95fc1e1577df8ac8723c978552fd43304c8a290ac5728 -pyopenssl==26.2.0 \ - --hash=sha256:4f9d971bc5298b8bc1fab282803da04bf000c755d4ad9d99b52de2569ca19a70 \ - --hash=sha256:8c6fcecd1183a7fc897548dfe388b0cdb7f37e018200d8409cf33959dbe35387 -pypdf==6.13.3 \ - --hash=sha256:c6e3f86afb625791510b02ad5480e94b63970bb957df75d44657c282ecc52224 \ - --hash=sha256:f3cb822769725f1bac658c406cfc9460399043f3750c2d3e4650e0a85eacabd7 -pythainlp==5.3.4 \ - --hash=sha256:76744e51e27c895630bafd74f53a1f0aa8782cef2f7f02eebd6427fe8ce8d84d \ - --hash=sha256:e66fd76fb5931834fd4e32ed54337ec62350d7654f187850e4dd4f915e9f624f -python-dotenv==1.0.1 \ - --hash=sha256:e324ee90a023d808f1959c46bcbc04446a10ced277783dc6ee09987c37ec10ca \ - --hash=sha256:f7b63ef50f1b690dddf550d03497b66d609393b40b564ed0d674909a68ebf16a -python-multipart==0.0.32 \ - --hash=sha256:be54b7f3fa167bb83e4fcd936b887b708f4e57fe75911c02aebf53efaf8d938e \ - --hash=sha256:ff6d3f776f16878c894e52e107296ffc890e913c611b1a4ec6c44e2821fe2e23 -pytz==2026.1.post1 \ - --hash=sha256:3378dde6a0c3d26719182142c56e60c7f9af7e968076f31aae569d72a0358ee1 \ - --hash=sha256:f2fd16142fda348286a75e1a524be810bb05d444e5a081f37f7affc635035f7a -regex==2026.5.9 \ - --hash=sha256:002205cafd2a9e78c6290c7d1df277bf3277b3b7a30e0b4bb0dac2e2e3f7cb2d \ - --hash=sha256:01f0f5f55f4b64dacec85dc116d3c05fd23ad3ff037bbc73a2085775953c2611 \ - --hash=sha256:01f28d868834624c934b8d2e0aa1c8341337e37831f4a012f18a5afcba4cbaf3 \ - --hash=sha256:075160bf16658e16d35233300b8453aac25de4cbea808d22348b6979668e924d \ - --hash=sha256:0de5cf193997384ed2ca6f1cd4f78055b255d93d82d5a8cd6ba0d11c10b167e4 \ - --hash=sha256:0e1b1b4e496afbb24f4a62aba855ee4f88f25578927697b340702e48c9ee6bc2 \ - --hash=sha256:0f03aa6898aaaac4592479821df16e68e8d0e29e903e65d8f2dfb2f19028a989 \ - --hash=sha256:0f9eede6a5cbdc02d4978090186390936e1776a7d1359b21e41014c609880bcf \ - --hash=sha256:1268eddd8486dc561d08eee1156e40aa3a8fe10f4bdec8fa653b455fcbffd12c \ - --hash=sha256:15ee42209947f4ca045412eae98416317238163618ace2a8e54f99586a466733 \ - --hash=sha256:164eba9b755ea6f244b0d881196fbc1fac09714e9782c9e2732b813142033c8e \ - --hash=sha256:19c16ceb4a267a8789e25733e583983eeab9f0f8664e66b0bd1c5d21f14c2d4b \ - --hash=sha256:1bd7587a2948b4085195d5a3374eaf4a425dc3e55784c038175355ecf3bbbf8a \ - --hash=sha256:1e6da47d679b7010ef27556b6e0f99771b744936db1792a10ceac6547ae1503e \ - --hash=sha256:205109e96b3cf5adf8f4cd62bedde9487feb282b9497a3535451e5a24cd706a0 \ - --hash=sha256:2099f7e7ff7b6aa3192312650a56e91cc091e49d50b04e4f6f8b6e28b3b27f1c \ - --hash=sha256:246de9d60aa3f8538b519834dd95cbf276ea263d6a7bd5a3666dc3fa0230505b \ - --hash=sha256:24b2355ef5cc9aa5b8f07d17704face1c166fdcc2290fa7bd6e6c925655a8346 \ - --hash=sha256:2a661a7d270a61f7cf460caee8b9fa2d5ef9e5c681234bcb9e0fe14f488e7dfc \ - --hash=sha256:2acfb48634f64996b57f90f39afa692ff362162722581921fe92239a59960f3c \ - --hash=sha256:2efa205e6d98b24d1f3ab395c11aa15cdf10935bca283d0285e0499c284fba21 \ - --hash=sha256:31037c82eccb44b7ea2e9e221d7c01429430e989a1f4b91ea5a855f6017b509a \ - --hash=sha256:3527bb4942d2c14552155406cdedd906567456821848aed1cb4933a391bf5eca \ - --hash=sha256:39617fb0cde9c0e6306dc70e3bfc096f3da793219879f7ae7aa341a69fbdcf6d \ - --hash=sha256:398c521292f4c7fb807001dcd54694d3a1fcafc179a36ad9cc56f98df85930b6 \ - --hash=sha256:3b1e39888c5e0c7d92cea4fc777396c4a90363b05de75d02eb459a4752200808 \ - --hash=sha256:3dd4a3ff360dfb836fecdb93a4598f9d6e2ac81e3e397125145c6221bf58cf4c \ - --hash=sha256:3ddd90103f9e5c471c49c7852ecc1fe27c7e45eb99e977aefe7caa4e779f4f58 \ - --hash=sha256:446ddd671e43ab535810c4b21cff7104945c701d4a14d1e6d1cd6f4e445a8bea \ - --hash=sha256:45375819235558a4ff1c4971dc32881f022613abdb180128f5cb4768c1765a1c \ - --hash=sha256:46f1326ca6e65b0879d23ca302c0f2415aad42ff0309b9c818e7949fe19a41d8 \ - --hash=sha256:48036f6374aaa79eb3b754ec29c61d1c6b1606749d705a13f8854fa2539671f6 \ - --hash=sha256:4ebe8f0b5ec5a5024dc4a4c59f444c4e9afc5f2abdbb8962065b75d27fb971f9 \ - --hash=sha256:4eeb011098fcb77af513dcef521a3dbecbf8849b1e38940759d293b7a93f5026 \ - --hash=sha256:508f56a89ba9cb26e4168cbc37dbd60a28d82430a9e18ad1d25fe0883c314ca2 \ - --hash=sha256:5604dfd046dc37eca90250fc3be938b076c8059fa772ac0ed6f499b0f0fb0415 \ - --hash=sha256:56a33f191f17d8c417f99945ebdc1e691d3af9605d86ec68c7e54a57e3e17af6 \ - --hash=sha256:57e8915c7986aa33d25e4d3629cef711cd2863f2961b10409f0c04cb8b7d9020 \ - --hash=sha256:57eeeb05db7979413dec5438f2db21d7ecbba787cde7a711df1a6f6df672aa06 \ - --hash=sha256:5b73ab8afcf66c622db143d1c6fda4e58e4d537ee4f125229ad47b1ab80f34c0 \ - --hash=sha256:5e41809d2683fcde7d5a8c87a6567ba1fb1ce0de9f31bff578de00a4b2d76daa \ - --hash=sha256:6351571c8a42b505eb555c0dc47d740d0fb66977dc142919eea6f4325b7c56a0 \ - --hash=sha256:6441cc660d76107934a09c22167200839a0e89604a6297f78a974e66e931d2c0 \ - --hash=sha256:65c8c8c37377794bd5b2f3ebe51919042bf17aec802e23c833d89782ed0c78af \ - --hash=sha256:6ba42b2e7e7f46cf68cc6a5ca36fa07959f9bbd9c6bdcc47b6ee76549a590248 \ - --hash=sha256:71b61c5bfe1c806332defc42ad6c780b3c55f661986d7f40283a3a88274b4c00 \ - --hash=sha256:728d8bfd28a8845c8b6bc5dc7ce010453d206396786c0765c2740cb65f37791e \ - --hash=sha256:7b92817338591505f282cf3864c145244b1edcf5381d237038df955001091538 \ - --hash=sha256:7e30b874d341fac767d7df5a0870540541c2c054b80cfaac116e8d367a8a7ff2 \ - --hash=sha256:7e87577720152d2caae19fe2baaf1f8d5ca12091e9e229f03915c37d1e4b9178 \ - --hash=sha256:83d0ee4a57d1c87cb549e195ec300b8f0ec3a82eba66d835e4e2ed8634fe4499 \ - --hash=sha256:8676474c07469d6f33dd1085ca2cd45f65785f32518f2b20e36d9953ca07f994 \ - --hash=sha256:86f40a5d6444db30a125c9c9177e6b25dad981cbc37451fd838f145e6edac92e \ - --hash=sha256:872acc074bd29ffc9913ecdfedf6ea77502312ca44a4aa0d3779089c6069d8de \ - --hash=sha256:8abd33fef90b2a9efac5557d6033ca82d1195ed3a15fea5af15ba7b463c6a63b \ - --hash=sha256:8c6e4218fbdfbcd4f6c19efca40930d24a621bf4b48cb76bc6640543bd28ef20 \ - --hash=sha256:8e76e8161ad00694cfce6767d5dea860c6391ac5b83e5c3a39661e696f11fc7e \ - --hash=sha256:8f3af7a4903c5c04a11a196a5aa75cdd7dd3f8508132f9fb3259d9f5908e3b88 \ - --hash=sha256:91328f1c23d47595ca3ef0a7557fa129c5a23404b775c770697d2f35b33e0107 \ - --hash=sha256:916714069da19329ef7de197dcbc77bb3104145c7c2c864dbfbe318f46b88b14 \ - --hash=sha256:93a7860539414dddaefba2b40f8771765ae17949d4c7182b876ce429e11a8309 \ - --hash=sha256:954cc214c04663ee6d266fc61739cad83054683048de65c5bd1d640ad28098ac \ - --hash=sha256:96f5f58b54a063d7ea9dca08e1cf57bfe10499c4d579ee672da284f57f5f0070 \ - --hash=sha256:97cf3bc1b7d7d2306772ec07366c80d9df00ff79e79cea32898883a646d2fae2 \ - --hash=sha256:98bd73080e8756255137e1bd3f3f00295bbc5aa383c0e0f973920e9134d7c4ad \ - --hash=sha256:992604d02e6d9c6d786c24a706a71ecffe1020fc1ef264044474cd81fa2c3919 \ - --hash=sha256:a24852d3c29ad9e47593593d8a247c44ccc3d0548ef12c822d6ed0810affe676 \ - --hash=sha256:a6a563446a41adc451393dc6b8e6ad87979efaee3c8738690a8d1b08ebead1b4 \ - --hash=sha256:a8234aa23ec39894bfe4a3f1b85616a7032481964a13ac6fc9f10de4f6fca270 \ - --hash=sha256:a8820737949116ffff55fe18f9fc644530063ba6ebfcb8314239416e78f1347c \ - --hash=sha256:a9e1328e17c84c1a5d22ec9f785ecef4a967fab9a42b6a8dc3bcbebd0a0c9e44 \ - --hash=sha256:aa0fbdbac82cb3e4450d0ccde7d7a35607f4cb2dd9fba4b8b69bfaf8c9fa6aed \ - --hash=sha256:b310768746dd314ea6e2ff4cc89ef215426813396ff4e94ee8e6f7096c8b6e03 \ - --hash=sha256:b46b0f094dc1d3b90356c85a0bd2c9bafc4a6a190b9d6f8ddd5a033b6e088ed4 \ - --hash=sha256:b4bb445ff3f725f59df8f6014edb547ee928ec7023a774f6a39a3f953038cbb2 \ - --hash=sha256:b6d189041f15691cfa2b6c4290448ec221244d225b3f5fe9e7771b34ffcdf6e2 \ - --hash=sha256:b96350aa424e79d4fd6b567b344dcbe2b2d6bfc48dfe7717587e1fa6d43da6ff \ - --hash=sha256:be3372b9df6ddecff6486d37e19095a7b4973137caf5512407a89f4455361f41 \ - --hash=sha256:bfe1ce50cbfb569d74e1e4337da6468961f31dbea55fd85aa5de59c0947a805a \ - --hash=sha256:c010eb8caca74bdb40c07498d7ece26b4428fd3f04aa8a72c9ac6f79e8faaac6 \ - --hash=sha256:c8b9b9d294cfea3cd19c718ade7cc93492b2c4991abd9a68d0b3477ae6d8e100 \ - --hash=sha256:c9411dd64ca95477225734a93dfc8583b51916b8d5942f99d6cac21e09965451 \ - --hash=sha256:ca518ed29c46eecba6010b15f1b9a479314d2de409536e71b6a13aa04e3b8a77 \ - --hash=sha256:ccf5249114cc3e772ecdd88a98a86eca0fd74c61ce32a94743758c083fc05d48 \ - --hash=sha256:cd2846168eb9ee3c513902bc8225409cb1caab31d04728b145171fa1625d9621 \ - --hash=sha256:d29eebfc9525db68cad3c97eedd7f754fa265aa5cd0cf4f863b2421e1b48fc9f \ - --hash=sha256:d3d7eb5c9a7f6df82ed3cfac9beb93882a5cbcb5b8b157b56cb2b3b276574ac1 \ - --hash=sha256:d626b84406444b165fc0ba981604edea39f0588ff1f92baa23fe50799ea9afdb \ - --hash=sha256:d641a8c9a61618047796d572a39a79b26167b0411d2c3031937b2fe2d081e2cf \ - --hash=sha256:d659eee77986549c9ea45b861c7567e44d6287c3dc9a4565478853f7b9fe2ff6 \ - --hash=sha256:d6b8a143aca6c39b446ea8092cde25cc8fe9304d4f5fecfbc1a9dbb0282703c2 \ - --hash=sha256:d726ca3f0d76969bf1e8e477d160d3d666bbf999f6860bd314889e5345782046 \ - --hash=sha256:d7bdc0ab8f3dd7e1b4f9ab88634e13374669db86bb3c72e8292f07ae313f539f \ - --hash=sha256:daff2bdbaf1d23e52fdff7c0b7bc2048b68f978df6a4d107ac981f94caef2e66 \ - --hash=sha256:dd2810d22146b6d838acc5ec15602cb6b47920aa4e33015df3868eedfd20bab8 \ - --hash=sha256:ddda5340e6c01a293027dd46232fa79eaff1b48058ce7a98f572b6445b088041 \ - --hash=sha256:dea2e88e1cce4522496cce630e11e67b98b7076620bc4336c3f674bc21a375f4 \ - --hash=sha256:debb893095e944091c16e641a6e33c1b0f4cb61ab945ec5afbf53ce7068834d8 \ - --hash=sha256:dfbe4579b9f08036aa7d101d1835437a20783574ac66327e6b29b4018a138081 \ - --hash=sha256:e1d93bf647916292e8edcec150c07ddf3dc50179ccaf770c04a7f9e452155372 \ - --hash=sha256:e82db382b44d0111b22601c509c89f64434816c9e0eef9d1989cda8cc6ff1c04 \ - --hash=sha256:ea9c8ecfa1b73c73b626534d6626e5340d429630943672b8480724f44e84b962 \ - --hash=sha256:ead4b163ac30a29574510cd4b3e2e985ac5290c05fc7095557d6a5f403fc31b5 \ - --hash=sha256:ecd353045824e4477562a2ac718c25799cdaaa41f7aa925a806a8a3e6848a5b9 \ - --hash=sha256:ed2c9e8068b614c574d8d30e543d617cf5379b0535d46f97ef00e904745a08b5 \ - --hash=sha256:ed457d8e98ae812ed7732bef7bf78de78e834eae0372a74e23ca90ef21d910f9 \ - --hash=sha256:ef31cbfe458e21c6122ba8150ff060e0c7789ed0d26eb423f25472584920b555 \ - --hash=sha256:f079e50a0d3cc3cd5091fa9ff45869a2e6b2cd35895731edafb0327901a8d86d \ - --hash=sha256:f3844f134e834076677dd369976e9f5068679fcb8e50102fdf6b7ac96a3ec127 \ - --hash=sha256:f7a7c26137296beba7784de6eba69c6a93a63ccebc385e4962fe67e267a91225 \ - --hash=sha256:fa411799ca8da32a8d38d020a88faa5b6f91657d284761352940ecf9f7c3bbdd \ - --hash=sha256:fd03c4f0e33280d15cae17159b899245d6b7c53d21def19b263b39655061f5ce \ - --hash=sha256:fd190e88a895a8901325fad284a3f74ea52b1da8525b76cc811fa9b1edf0ce2b \ - --hash=sha256:ff8d372ac2acdc048d1c19916f27ee61bc5722728458ba6ca5052f2c72d51763 -requests==2.33.1 \ - --hash=sha256:18817f8c57c6263968bc123d237e3b8b08ac046f5456bd1e307ee8f4250d3517 \ - --hash=sha256:4e6d1ef462f3626a1f0a0a9c42dd93c63bad33f9f1c1937509b8c5c8718ab56a -rich==15.0.0 \ - --hash=sha256:33bd4ef74232fb73fe9279a257718407f169c09b78a87ad3d296f548e27de0bb \ - --hash=sha256:edd07a4824c6b40189fb7ac9bc4c52536e9780fbbfbddf6f1e2502c31b068c36 -semver==3.0.4 \ - --hash=sha256:9c824d87ba7f7ab4a1890799cec8596f15c1241cb473404ea1cb0c55e4b04746 \ - --hash=sha256:afc7d8c584a5ed0a11033af086e8af226a9c0b206f313e0301f8dd7b6b589602 -sentence-transformers==5.4.1 \ - --hash=sha256:436bcb1182a0ff42a8fb2b1c43498a70d0a75b688d182f2cd0d1dd115af61ddc \ - --hash=sha256:a6d640fc363849b63affb8e140e9d328feabab86f83d58ac3e16b1c28140b790 -sentry-sdk==2.59.0 \ - --hash=sha256:abcf65ee9a9d9cdebf9ad369782408ecca9c1c792686ef06ba34f5ab233527fe \ - --hash=sha256:cd265808ef8bf3f3edf69b527c0a0b2b6b1322762679e55b8987db2e9584aec1 -sse-starlette==3.4.2 \ - --hash=sha256:2f9a7f51ed84395a0427fb9f66cb1ec11f7899d977a72cbc9070b962a2e14489 \ - --hash=sha256:6ea5d35b7ce979a3de5a0db5f77fe886b1616e4b3e1ad93fba502bd9b5fb662f -starlette==1.3.1 \ - --hash=sha256:05d0213193f2fbaae60e2ecb593b4add4262ad4e46536b54abe36f11a71724e0 \ - --hash=sha256:c7372aae11c3c3f26a42df7bd626cec2f47d03483d261d369516a615a53714c6 -tenacity==9.1.4 \ - --hash=sha256:6095a360c919085f28c6527de529e76a06ad89b23659fa881ae0649b867a9d55 \ - --hash=sha256:adb31d4c263f2bd041081ab33b498309a57c77f9acf2db65aadf0898179cf93a -tornado==6.5.7 \ - --hash=sha256:148b2eb15c2c765a50796172c1e499649b35f30d2e3c3d3e15913cfa56bfb163 \ - --hash=sha256:66c513a76cda70d53907bc27cf1447557699c2e95aa48ba27a442ff61c3ddfc2 \ - --hash=sha256:7778b30bef919231265e91c69963ce0f49a1e9c07ac900bbe75b19ce2575ba92 \ - --hash=sha256:8a46347a18f23fb92b396beebe0fb78f61dda0cc302445202c16203d8a18848b \ - --hash=sha256:8d759e71906ee783f8867b93bf26a265743da4c1e2f4a018464c1ba019862972 \ - --hash=sha256:9da38de27f1da3b78a966f0dae12b5a1ea9afe72ca805d84ff06508272ddf100 \ - --hash=sha256:de942f843533a039ef9fa3d9c88c7cd8a7c94553fb5ad0154270989b3d99a2c4 \ - --hash=sha256:e726f0c75da7726eec023aa62751ff8878bd2737e34fbdd33b1ae5897d2200f5 \ - --hash=sha256:f8de3bf12d3efdd0cbe7c8887868198f8a91415e3f29fcf258d9b8eb7b1d9ae4 \ - --hash=sha256:ff934fce95643af5f11efdae618eaa73d469dc588641e5c8d19295a0c65c4796 -trl==1.0.0 \ - --hash=sha256:529f447b77007c8d181a3cf3d8b1b6427888cac9ee1e6d583bd0dbda78165ed4 \ - --hash=sha256:c45700cb6aa8723e5db1dd8773297f642715accab1ca7754b56e6d50a37dfb1d -tzdata==2026.1 \ - --hash=sha256:4b1d2be7ac37ceafd7327b961aa3a54e467efbdb563a23655fbfe0d39cfc42a9 \ - --hash=sha256:67658a1903c75917309e753fdc349ac0efd8c27db7a0cb406a25be4840f87f98 -urllib3==2.7.0 \ - --hash=sha256:231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c \ - --hash=sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897 -uvicorn==0.44.0 \ - --hash=sha256:6c942071b68f07e178264b9152f1f16dfac5da85880c4ce06366a96d70d4f31e \ - --hash=sha256:ce937c99a2cc70279556967274414c087888e8cec9f9c94644dfca11bd3ced89 -wcwidth==0.6.0 \ - --hash=sha256:1a3a1e510b553315f8e146c54764f4fb6264ffad731b3d78088cdb1478ffbdad \ - --hash=sha256:cdc4e4262d6ef9a1a57e018384cbeb1208d8abbc64176027e2c2455c81313159 diff --git a/.konflux/requirements.hashes.wheel.pypi.txt b/.konflux/requirements.hashes.wheel.pypi.txt new file mode 100644 index 000000000..c165e9eca --- /dev/null +++ b/.konflux/requirements.hashes.wheel.pypi.txt @@ -0,0 +1,10 @@ +--index-url https://pypi.org/simple +a2a-sdk==0.3.26 \ + --hash=sha256:44068e2d037afbb07ab899267439e9bc7eaa7ac2af94f1e8b239933c993ad52d \ + --hash=sha256:754e0573f6d33b225c1d8d51f640efa69cbbed7bdfb06ce9c3540ea9f58d4a91 +opentelemetry-distro==0.60b1 \ + --hash=sha256:581104a786f5df252f4dfe725e0ae16337a26da902acb92d8b3e7aee29f0c76e \ + --hash=sha256:8b7326b83a55ff7b17bb92225a86e2736a004f6af7aff00cb5d87b2d8e5bc283 +pydantic-ai-skills==0.11.0 \ + --hash=sha256:af8d78d451ce192dd2ef33abe86ad900bd51d9fd10c81a11abee82f62e8daf30 \ + --hash=sha256:d4040f0b81da34e25b8f14dac5e1895e59d00390db8896448aac1ed1a4d0cf90 diff --git a/.konflux/requirements.hashes.wheel.txt b/.konflux/requirements.hashes.wheel.txt index 02ae2f70f..ec1a6d440 100644 --- a/.konflux/requirements.hashes.wheel.txt +++ b/.konflux/requirements.hashes.wheel.txt @@ -1,257 +1,418 @@ -# This file was autogenerated by uv via the following command: -# uv pip compile requirements.wheel.txt --refresh --generate-hashes --index-url https://console.redhat.com/api/pypi/public-rhai/rhoai/3.3/cpu-ubi9/simple/ --python-version 3.12 --emit-index-url --no-deps --no-annotate --universal ---index-url https://console.redhat.com/api/pypi/public-rhai/rhoai/3.3/cpu-ubi9/simple/ - -aiohappyeyeballs==2.6.1 \ - --hash=sha256:eff0885546faac493fa18997b9e5158ea7a56a36ee3222b744bab31808e3f3f8 +--index-url https://packages.redhat.com/api/pypi/public-rhai/rhoai/3.4/cpu-ubi9/simple/ +ag-ui-protocol==0.1.19 \ + --hash=sha256:e95a42b0668189778f72c8aad99d7b32ec5a3ea95a93b1c3c358738ed8848b94 +aiofile==3.11.1 \ + --hash=sha256:a972865f6ef154c084bda5c525f73ced2d1e5a0c882f30c71d46b83eb013e11c +aiohappyeyeballs==2.6.2 \ + --hash=sha256:6442a34736731d1009c65599056e8d934d058dd8219f79942aee607e1ec3a8da +aiohttp==3.14.1 \ + --hash=sha256:3acb802c339ae082aca8c0f08ba8901087dfdd1bf415ac2ba233072aa6ef5e61 \ + --hash=sha256:6b2069a24c6b9a627aac56d73f18727846757cb0b51968285c421dc4a9ddc24b aiosignal==1.4.0 \ - --hash=sha256:9d5af4742d4552e8a3f2fbd48237e07cab578e7175af2f952c420d2e98b731f0 + --hash=sha256:0894850b54c871dd0365925589ad5dfa70e673059596187e7097e076ea571b1d aiosqlite==0.22.1 \ - --hash=sha256:2e85580d41e992ed45e1aafce66ac4c23b7bd7cf842dc5209a39b95c11497115 + --hash=sha256:6d1ae83321620ec29e2b033ac875b849be78ceecc68c2a35a8d6df22511bfeaa annotated-doc==0.0.4 \ - --hash=sha256:cf904ba25da8611ae3274f2af1d6e82275e452113f7774505e723a21957c10d6 + --hash=sha256:7efd1fef196515821249f7376bb0d7ba66dcbab04a506376c4fd3582b94ec653 annotated-types==0.7.0 \ - --hash=sha256:fcdc578cef2d4fd8770abc0ceb0241c68c992698aa7a5f945ce67651dd585cfb -anyio==4.12.1 \ - --hash=sha256:e18da418b6421e6735231319ea8ae4262f68b52b8dbcb4699a7a14f89cfb2b15 + --hash=sha256:e4e1144fe78e2f54ab359a790d088a55e95caacf44770be1f9b277e91602d6a6 +anthropic==0.109.1 \ + --hash=sha256:cf2bb9c435120c79ab32d0132c68463f5a0e1f00c133b1164fcedc75816e71ec +anyio==4.13.0 \ + --hash=sha256:2d5b8da6df21a1e87f68df768a75f25cd00792b401d6c16e8235bf64642b8316 +argcomplete==3.6.3 \ + --hash=sha256:b73ee29cd4eb3a73872230c5fea6f6440ca801e5e5c1cc63c8ec29633a8762a3 asyncpg==0.31.0 \ - --hash=sha256:30b9415c515d7aeeb78a2973398c110b021bbc8c4b664a50309c8a7a59f850e6 \ - --hash=sha256:d5fcd8eb91e0624dbbd391062d529ec24ac41e0665c6aa4df719f6682856b318 \ - --hash=sha256:fb62c7c0a0ecf71ebb9ba83bd67965dd8c8349c1fdb12225b4f76c11f04dcc46 + --hash=sha256:0bc8a7144ed45aad01e9aae4d607c268de5ffe24df286593082adcf5f8e2cfdc \ + --hash=sha256:bd27352c2cf38a4717585bb5b8fd1c3bd7a7a7bdc67e76f2ca12928b4562c285 +attrs==26.1.0 \ + --hash=sha256:7dbf34c586f6613ef2729b87c361c53883f5c4be5e18e4e4e12bc9f963c13188 +authlib==1.7.2 \ + --hash=sha256:c888b08e47a67a71c41b4c10faf9cffecc699f226e768017fd48b6623e9ac1db +azure-core==1.41.0 \ + --hash=sha256:9de3480f266f6b8ceb6af93f0ffcdebc65f4f996f634e07b02306131102d77ff +azure-identity==1.25.3 \ + --hash=sha256:80bea9a8e0287d69b770d0d840c57ce27a115a544985dab269c20b4f8db6f892 +beartype==0.22.9 \ + --hash=sha256:c8ac72cda0d70cce2163697a2f5845d5a3ea31ddeea3265cef6ac835fe3c6ffd +boto3==1.43.28 \ + --hash=sha256:5034bbe6131912887832a1abe79db02435d410cb87e65a510e0b914df3f3ae9f +botocore==1.43.28 \ + --hash=sha256:5fe9676b342aa3f1aead890420c6325e531f54e5a978c73fabd9debe1c9ebd02 +cachetools==7.1.4 \ + --hash=sha256:0a8f17e64eeba0015fcca95580522f2c88e73d56ebcc217b7c277faf9eb40b36 +caio==0.9.25 \ + --hash=sha256:1b5014a96f58be3ccd36fe229db72f0411c6be6cec0a5ea16c70dc4ccb1e785c \ + --hash=sha256:546d2d74d85e00f2c0c0148bde7ce4096855747da5ce21deb246b260bc0431d5 +certifi==2026.5.20 \ + --hash=sha256:494fd905ded06d68e6d0305da7ea79a2b97c0eecc2ddeeda4c58dc230fc2bdcc cffi==2.0.0 \ - --hash=sha256:257e90f733c1a33b9f5ade4a4f47db6a3984de5c2d2654848feca129888ff9d5 \ - --hash=sha256:34cf2187e399eb7baaa20488d0b78ab20be91060ef9ac531685f37478ca1a12a \ - --hash=sha256:e39d7009b1872abbd91bb17057b48fe24057a1026a20ab06b672fbdd4721d789 \ - --hash=sha256:ffe747cf5e265169ad5bd64b4359368f74e445cf8ea3cfe99045450554fb4e13 -chevron==0.14.0 \ - --hash=sha256:215f5e3e7ac75d150eadfc0f8c651b3815dc36813e122484b1ed68e142e5adfb -click==8.1.8 \ - --hash=sha256:11fa3d5230fee43910d853098461cbb0d9d3f59b70c63629bf237101ada5ee0f + --hash=sha256:51e641fbaafb9e786ee91c957d68a34d27fcdd1c5a790bc4cc73418dba413872 \ + --hash=sha256:9dca0f661e032048781d6ecff83ffd9f1244eddf44542b664564dac2c4fc8a88 +charset-normalizer==3.4.7 \ + --hash=sha256:fedf0c87b67e3fd4fda37c0c64e840bb7e5df197a5d537253632578961a8ce10 +circuitbreaker==2.1.3 \ + --hash=sha256:fb1b38f41ef55a96b9570147326d2d989c5f106276b73666f90095518bf2a606 +click==8.4.1 \ + --hash=sha256:87d40c073274de99dca9f76adc0e2900245554d321b9d738adc6827ff83c38de +cohere==7.0.4 \ + --hash=sha256:b76f16b8512edc97e18d3dfd86c013913db4bc12a84f50d9f46cc93520fa9c69 cryptography==46.0.7 \ - --hash=sha256:0ab2a8e458e087bc69b372b28142bcd6075a00b5a243af5929859dc4bccfaebf \ - --hash=sha256:537fe5301361498d49fef0b7d36d1153bcf6abc81ff993a29c85bb55040e96c7 \ - --hash=sha256:6c984b35f55539b0c2cbb6e09ac5f20e91dcaead8817f1c842af969a1e5f17c7 \ - --hash=sha256:98e8d65c1c97595b0b21ff737b69f3be2cd92f8e437b999c4c38220d376f2e66 + --hash=sha256:3b900c1b09ae2a71c7a1ab5e8f41a030078e82bf4d81e5ade4cfe8ca6784acf2 \ + --hash=sha256:876da9c3a3479d766c4e47d86d274cf7d1caae90784e1be54dca8bae80847948 +cyclopts==4.18.0 \ + --hash=sha256:62eaada540c5abc2856750c47e4a00743d9e45bbfbc38b6d4792ad96dd004dbb +datasets==5.0.0 \ + --hash=sha256:ed4a25ead4679d319da2759345b8858c52ba209266e99370de952275ddfb0570 dill==0.4.1 \ - --hash=sha256:ae5bdc0f88e3a7998df6170245749d3e717f20a42cb982b080f8a98285a5cd8e + --hash=sha256:c0b661182fef68f448210a81dcb55a36c837e18284c5380cf1322a4a5c68b8e8 distro==1.9.0 \ - --hash=sha256:14a63983246dce4a649b0994f909f6e225197c0adb86f68f4be1252309a5c603 + --hash=sha256:c16b1c9f9666bcb3c7faf41118ede743f387834ae00b6452a5e3253baa8f89c2 dnspython==2.8.0 \ - --hash=sha256:a7e8d88ef436501e0c667ff4e7251f20297a0c705b83060868bcb259f9f3f41e -docstring-parser==0.17.0 \ - --hash=sha256:21e00984db7761fc91c701857ce566595ca7b65285f469c8da888b509a9ac714 + --hash=sha256:a46d9ba7ba633e183d4edc6b06d097e88500c0615d37afa0f2525dbf4d5e0468 +docstring-parser==0.18.0 \ + --hash=sha256:ad8ed234ea2dab23080526bd8eaa457a8b1cbabab7c3348723ec5a35a07a0040 durationpy==0.10 \ - --hash=sha256:c0a086dd504baa2364a2da2de6d2bd15b2eca7971c66da3c2695006bebfe93dc + --hash=sha256:ce86a86c56333ed4a1c71ad2f1a0138e6a91ad4144ee31223ac0a08eed8486f3 einops==0.8.2 \ - --hash=sha256:83fed57f4f0858060494b9e7b32f3d08904225b3f1a1a3bc2a47d43bdf72757e + --hash=sha256:e14c8f0f96254e435bb5c38dcc1661f1ea10f60865f7deaabb023e5b6127b539 email-validator==2.3.0 \ - --hash=sha256:3b8ed50b89b305b8e8f5a99e3f7c80e65da28e9c19dff90f4f6d9e5c72f8c081 -faiss-cpu==1.12.0 \ - --hash=sha256:004aa246c589767439e210c275e20f64a5d3e0ee844df7d1ada4612b4c27e348 \ - --hash=sha256:06d06d210105c6769ca1c93c5111ce0a1a7ed2f239b2f666ccb2af7c90f42383 \ - --hash=sha256:4aadb7cfceacda36ff1738fe64af1c16e77f739105bb26246c683572c28db123 \ - --hash=sha256:8a2cc05c9459d0e22d05d1996f2e3a8b25b50cfc0ea9530a5422873048196a83 \ - --hash=sha256:b769fa38427cea3ee56e74af41e04578e5a3bee1389dde6e62116b2a2ac90dda \ - --hash=sha256:d164c65eb35d98f5ea8422b88c9b2645bdc091d3ab9829808699f81fdf7e6c1d + --hash=sha256:3222e63dda823a8552d632f04b6c8ec7c29cbb75dc7dfd74e379c1b681859a73 +eval-type-backport==0.4.0 \ + --hash=sha256:1408d4629751e3bcf45f5e9a679d57e209796b694b37b3b69c23be61d81434fc +exceptiongroup==1.3.1 \ + --hash=sha256:84636262ae354b4f9f470a8654f2a2960fed43ee44b36f89af397f26742dcfc4 +executing==2.2.1 \ + --hash=sha256:647b720dfae442bdc92e65b6e3eaa47f698b80539a0ff3b3766e8027cdae7994 +fastapi==0.136.3 \ + --hash=sha256:7a4d53f0a6638d7ebb0f89ad738493388974431cd7932c13261e2ada1f785c0a +fastavro==1.12.1 \ + --hash=sha256:a49d0014db7894b8a1dfe1f4eb07a5ca1e63ca3878f1b91c3a88d91a81bf538d \ + --hash=sha256:fb8f4caedccafd893526edf2ac9b9f317db2a2ab17fb4e45ae8968932748d9c3 +fastmcp==3.4.2 \ + --hash=sha256:95caff94d40219a3fd0f535ed75ead1616fad5f1ffa3dcee63aa213a2cf8671b +fastmcp-slim==3.4.2 \ + --hash=sha256:7a5a0b0a7320e3ed5b5b069878a61f5b4db11886338900a11d68847aed3a34a6 +fastuuid==0.14.0 \ + --hash=sha256:54ebb6ac8db73de3e1c231800831ca6e223e4845c4a754543e7628b26aa2d67b \ + --hash=sha256:d95db3aad14a915aa47dc4dc3feae43c159106927dfc25ce7b5d855bc738d3d0 +filelock==3.29.3 \ + --hash=sha256:86dea87cdced6530f39276fd455821d8cbd003f5bdf74565322da0086db365a8 fire==0.7.1 \ - --hash=sha256:833e042e12ce8f590b8a557f90fad4977d355534bc034b30185458ffe6acb638 + --hash=sha256:4d2f0321d3d250a399db480d1ff6a04a61a9c9741fb1c16effdfc9025af2993f frozenlist==1.8.0 \ - --hash=sha256:41a5c624d79ec4157746ada9e19a1da4c3d1b3f5fde9e3f8ac85f7eed9126af9 \ - --hash=sha256:89573b85be77e89a114dc8d1983456091f6c01ff482d31aec2585df0c00de2c5 \ - --hash=sha256:b4fdb636be50043b56a9589b8690a104d7d9ddc72d79058171735fe15eadcc39 \ - --hash=sha256:d7bcd7c1b48b3851acba9e7a11f951c117a654e60004adcbe98425b3f4114057 -fsspec==2026.2.0 \ - --hash=sha256:c908a61c953514ce6298cfe13915a3d74728d69da1781c9e0c44acfdefea4276 -google-crc32c==1.8.0 \ - --hash=sha256:aa358fd96bbc33eddfccd794e8bf77b7cd1b02b5b857518139dcc0b328392cf6 -google-genai==1.59.0 \ - --hash=sha256:388b25b31c0c00307a947690f21528a7b652e329feb3a14d49cbb16765012313 -grpcio==1.76.0 \ - --hash=sha256:3f935037cced82c09b0c64db9451608646cfb8bb1842dd17551853e94e3f39bc \ - --hash=sha256:47b8a87e383fd6f63f8ba53b2b5c911893f7cfdf5288eff3a41a0bfe4823f5e3 \ - --hash=sha256:70dfe9f5ab1144bca4f53bd7958fdcaf50b220ed21bd378666d9bd1ac97fd371 \ - --hash=sha256:ff138c9e386a0799d88afa389de77df44d9cd7523ad5ac09c0882058e581e1d4 -grpcio-status==1.76.0 \ - --hash=sha256:257105544721149a1fabeb0465dc622add2a7b6f1be07df4ea9ddcb741113cfa + --hash=sha256:0aa8fc161fbfe3dd6730357dff925e39fe4bde07d1694ed5f26235a8cb225ab4 \ + --hash=sha256:38fc5ff1cc2847d7b36cc48253868269dfbaabed631c3a71e2d5bcb26cc5ff03 +fsspec==2026.4.0 \ + --hash=sha256:57e9e37e877e67c0bdeaa7024c6c70ec149b2c540896b180e765d5301d1459be +genai-prices==0.0.66 \ + --hash=sha256:8ac87671fcb432eb852ac941b4912299b8f5d4248b94501bb52eeda0aadc1f3d +google-api-core==2.31.0 \ + --hash=sha256:13f657cf23fe3623155cc8102545111d68fd7abbb2c5810c864647fa1b421b8c +google-auth==2.53.0 \ + --hash=sha256:a580fd6784815095e84187a6dec1920835fa3e464ad30071c5396f889f51a21d +google-genai==2.8.0 \ + --hash=sha256:3819e597a14afcc4aebb08dcee3110366e4f097f5ba951ee3460612da81065e9 +googleapis-common-protos==1.75.0 \ + --hash=sha256:3a11f37f3626d1a64371ad7807408d226730fa44cb0f2994510d733afd49d8aa +greenlet==3.4.0 \ + --hash=sha256:1242e934103f79cc1576c77797de9636c689265b1e1d5eae8e21968a58c324a9 \ + --hash=sha256:7609a1094ed19fe2842b9f7446920ff248c228b8d3c57e2612f2ebcf34e4fdf6 +griffelib==2.0.2 \ + --hash=sha256:79d665b5da3d3654504f1768491dc189a603dd5791c52fd8f0d655d1422c8205 +groq==1.4.0 \ + --hash=sha256:4e93485f597f842712ca0a78d75bd76e3c1a0f90329ac38ccbc055f3f9f3be04 +grpcio==1.80.0 \ + --hash=sha256:52c678447eb080faf6e8c7cba69badae94edf8314942d53082560c65d2423192 \ + --hash=sha256:9344525580dd86c53ddf1d103a3efa7f7ed137e6dfb4b995e639c8eeb60fc0de h11==0.16.0 \ - --hash=sha256:a485f5bfa77401603f78cff4db5bb4dbaadb947a3da8eae068cd05b6bb4aab66 -hf-xet==1.2.0 \ - --hash=sha256:a14cc5078bf43efc85ad180ec02372e5a84d134de095c0a9740f7e0407df7866 \ - --hash=sha256:acb8669cac4d9aa8e8ad31a92d99353fe2f0d4463b8aaa54f2b93a33e222149d + --hash=sha256:1f57db4e6320f74869f695cb33197f9a2e956128932c4e3221ada214bafa383b +hf-xet==1.4.3 \ + --hash=sha256:203368fb35bd900901725ac4dbb8c9ebac571c091e8edb27817440e71108de9c \ + --hash=sha256:5b80ed759289c31d69aea744be8c2f8b7ec1f1cc761b2c38d599e1ee81b8a639 httpcore==1.0.9 \ - --hash=sha256:5af3f1b09e795d5548d5030be3d4191e65113cfdac21968c82bf0cddf15ec313 + --hash=sha256:73b78c918fb6667168af94c14dcc34e864767cbaad55e25d5cdb4692bedee3e4 +httpcore2==2.4.0 \ + --hash=sha256:f909a078229fad21065383f44fe3b40b41b5c60d7af3854d98c571fcdf67bf23 httpx==0.28.1 \ - --hash=sha256:c75bc8d287ff8e92be7e4359732032ba1b93fa3f920ee1cb179ba09bb613dc7a + --hash=sha256:6e201f022d2d08ff4ad5e08aaed0ba369851ecc696a4f8ecc59bf30140aa439e httpx-sse==0.4.3 \ - --hash=sha256:74d0e4713b33a61ca0083d00841f00f12d6b3dd311edb62ccc85809b607b9fb5 + --hash=sha256:81bf5b6e5b4a82d6e8d3dec046b90a63eaa4185b0ec3e78c56503f609d7b41d5 +httpx2==2.4.0 \ + --hash=sha256:0cf85249b3bcb96e2677ccda092fbd9279734ab8b0b26489cecac95c9e308207 +huggingface-hub==1.13.0 \ + --hash=sha256:a688bb15a69610080d2c6222c148aab69583b7165ad4b9ec8ead01631dbeb103 +idna==3.18 \ + --hash=sha256:c8b8ebcb022a6b5c7925661877d5a5b2d3fffa4747ff09d5355833ac38436f81 +importlib-metadata==8.7.1 \ + --hash=sha256:ce9cf6510da4a20ca70cd44ddf7c4989f2fee60a38822425e0d4c8233634e57a +jaraco-classes==3.4.0 \ + --hash=sha256:a82c2e50bd15d9766165fc31fa56a4def21a12f2cd40b08dc06591c7ada0170b +jaraco-context==6.1.2 \ + --hash=sha256:f1620a1d10ed95d541bb01988013643808fed2cc8aee5301363970d43a4695f9 +jaraco-functools==4.5.0 \ + --hash=sha256:cac004b1150eb2006be8384ef376f0f7aca874227ab9b2f569b239478d62e8de +jeepney==0.9.0 \ + --hash=sha256:959e10a8d7c33bea23aa0320c421afd6303ce469cb68b1fe9a4f00921fe92de1 jinja2==3.1.6 \ - --hash=sha256:961c7281585491fb02ca0027b29e9ffc7a1bd7b52a5e03095f3a4e3afc42336e -jiter==0.12.0 \ - --hash=sha256:3ad7e5a7502b62d032b17c4b1bd71ad3049c810358913642abbf5254f3e5c455 \ - --hash=sha256:64f8bd9b9ced14c62d13e64d198e70f55712a775ac7d112849b4b16b3a884489 \ - --hash=sha256:9c42d9b61ab5d2c9203637a243b4187cc28b0101b28461d35006353d621da292 -joblib==1.5.3 \ - --hash=sha256:40d87a5e80b69104a3b8f1d761fdbc077fc7b97a23b08b9fdaddb7a3821b06d1 + --hash=sha256:61b4b68331c4f1900566fe55e09f6a7ca849ce0a90cd070935b4f6ecefa3b86e +jiter==0.14.0 \ + --hash=sha256:84c1562c21fffbc2484ae9981fcc6831024498f1ebd444172683ff84bc2fff66 \ + --hash=sha256:9d40519aa849502cb4490a550a63b756ca053074fd48c8df4a36ed7650e8eb10 +jmespath==1.1.0 \ + --hash=sha256:5e3529fe01f3870f16072dd7c38dad104c3d13b51e2c1b9e2256e8af56553a3b +joserfc==1.7.1 \ + --hash=sha256:0c2c1148d6372221d9e9532683797231804932a7e36f873b207f690c3647e3a8 +jsonpath-ng==1.8.0 \ + --hash=sha256:5090a8cd15a3afeb65fdd5393e8f1a59e4972bfc06da3f6abe830760516027ad +jsonpath-python==1.1.6 \ + --hash=sha256:3a761d402bf330753b70d3aa934598b75486178f85cab297b0429349dc512880 +jsonref==1.1.0 \ + --hash=sha256:b727621d2b782e50c07ec03158489413aeece8f59695e6e970cf02a15730a4fc +jsonschema==4.26.0 \ + --hash=sha256:6d92fe1a0ae3d61ce1ccf3af5d3616464d7200b39aa8b624c31fe492bff39726 +jsonschema-path==0.5.0 \ + --hash=sha256:732452e012e798e4f7fcd4916baef3ebe3ec74d41d27148a645aaa72077b6282 jsonschema-specifications==2025.9.1 \ - --hash=sha256:065ec57323001f79634013c12250a476952e6ce834a17cfd5227343cec3c4aee -kubernetes==35.0.0 \ - --hash=sha256:2b6649b48b000f7b5b14eb2e6939f0709dddc0a7e4475ed98d4264e191c9f09f -markdown-it-py==4.0.0 \ - --hash=sha256:4ca21586bdc83c96a1318ffc854698e1fdcad60a3e8051d249f10ef210c945c0 + --hash=sha256:10ed21850aa9c5556850aee3cfbb51d51ec74b223b67f893d6a26c960da02ef5 +keyring==25.7.0 \ + --hash=sha256:da79207a9db51e930fe944b784d13cc0ba37b9b1ee774c45d3350bd1d2199c77 +kubernetes==36.0.2 \ + --hash=sha256:8aa7020e9d21f10413c9af009a23620f08565db0faf459d844731b5660a1d250 +litellm==1.84.0 \ + --hash=sha256:0cd97e03255433ec1d9c9e904be7feba14cf1ae94c3a28af3f1fda83c5cafe00 +llama-stack==0.6.0+rhai0 \ + --hash=sha256:3687af5cf15a88d76e548d79ab3022f20438566e0f522a592f75beb3c076479a +llama-stack-api==0.6.0 \ + --hash=sha256:99368f0b294c77481b18aa4decb028bd5724fb648a62ca650c6737393a25bb9d +llama-stack-client==0.6.0 \ + --hash=sha256:646b4b3ce05d953f97fee419078a1dfce702b72f917040ca8e31b183f2cc0e0c +logfire==4.36.0 \ + --hash=sha256:c5811a8c5817e2e646dbff71db0eb12429b3a23e777276d523ec1713b8753b4c +logfire-api==4.36.0 \ + --hash=sha256:54af85d96a51a5f6cccd062b8e349879b4fbd99357664bd43920a6fe44bfff06 +markdown-it-py==4.2.0 \ + --hash=sha256:3e627612fe8f84f223658572974ece386ace011cf06f07c244918a70ac028139 +markupsafe==3.0.3 \ + --hash=sha256:10c0e3022c2cead724cb6e31b1cc368b423b2995a9461d3ab844f1eb894b6ed1 \ + --hash=sha256:3e5e2eda8f7612f1e59c261040e824f4a7a80872df58731ca46f248646d6356b +mcp==1.27.2 \ + --hash=sha256:86a49d49de6ca19b0205950783df36633441eb8930aae707ced24ac786f8e7f7 mdurl==0.1.2 \ - --hash=sha256:fec2de44574adf66cd0d5ec329822fbf05ae011b6ba618c96b178d0eaaf7e249 -mpmath==1.3.0 \ - --hash=sha256:58244de27af87d8fccdb6bc9a17808d4a3f00f5e97152b090272f241f22b1d00 + --hash=sha256:6d8be534d152bbbbd9e3866e8addbacae1fb09801f0436469909c7295ae89f6e +mistralai==2.4.9 \ + --hash=sha256:83df13e065547049c63907ebcbbbf6afa9f9ad9fa100fb8d8c9d8c2026c5e59d +more-itertools==11.1.0 \ + --hash=sha256:967c81d7350ee315542f6071c58631d14c977803fde8c5a3556d30fb16b7f3af +msal==1.37.0 \ + --hash=sha256:0b1b3032a137904a7bc6696c4b3389cf76892bdc4a38002ef9e02f5a86105482 +msal-extensions==1.3.1 \ + --hash=sha256:d4a6b6115008b68ad4fdf846a90ff7f2715beb7bfddfc5d7345bc16e1c8daaef multidict==6.7.1 \ - --hash=sha256:0f590b4e611242eb68916690dd2d0855b05b788bbaeb6e684c88928f3dfcf9a3 \ - --hash=sha256:4edbf9266edceef23b80ab69bfe575349d6a11a396c36bb47f50f5d75cf4b725 -networkx==3.6.1 \ - --hash=sha256:c37e077bdb955f915337b0cbbe4f70303aca085abe728dbae9f400c5d7b3ae91 -numpy==2.3.5 \ - --hash=sha256:3c09803370223ede9f913428680f123a59bfe95bff6bca3625a42c46983cff1f \ - --hash=sha256:496287a2a8698bfb84129d2da985ae9d801ea986a3ab24ce36261dd9641db032 \ - --hash=sha256:9f44732d61a230ec7f3efb9363e6448325c97c2441ff761e74b7315c72ec3859 \ - --hash=sha256:e3ea2175951df3c16ead190bb3b719af8fcf25c19a5ccb15ac3a0c1a18705bdd + --hash=sha256:10baf21a3391c03a4064c51e1bd4929de589f86f3808744f4aeda5a88f39a345 \ + --hash=sha256:913435ce2a574e3a9d9b360051667fd45dcc9bf618daa700a5782bf4209b31f8 +multiprocess==0.70.16 \ + --hash=sha256:9e6258d8ce50f14643ec82b24ffa9956ac93e2ae79560582a707b0d1844b8666 +nexus-rpc==1.4.0 \ + --hash=sha256:84fc7b3e4a8e9f7852e8fbf63b1855fae4ec1fd40f44c5755f85d5a950175e5b +numpy==2.4.4 \ + --hash=sha256:66234d4f159159cd5a90d679988d7b051b4d72851aca0ddffdd2a907a209e07e \ + --hash=sha256:772c1fc3e87b4b95d8ec0c2390541b3c3b04469b31f7991716d0b46758362532 oauthlib==3.3.1 \ - --hash=sha256:df9219023be7c78d77401950592822d1bbc318225d3cd71d02271c549ef1f980 -packaging==26.0 \ - --hash=sha256:76081d1703deb79a44f8c44f23e391b98ab21ea54a2c21b0e8890779e0eaecb7 -pandas==2.3.3 \ - --hash=sha256:308c8ca6262e058136d91a7d4d2bd84dd02e65caf60340fefd20bcf26b97e819 \ - --hash=sha256:6ba245cff03afa84a0bc5e715a11caafab1dc51ca8fe4d827017706c4b62f238 \ - --hash=sha256:cd3d338d360612bed009570e303a59759fb450d163a9d1584c508fa9c22f568a \ - --hash=sha256:e3a18fae723b808514670a4a0172f9939cdbb095abd5eef1f34cf5ae1b99f424 -peft==0.18.1 \ - --hash=sha256:026817e68c93fcc0569360afa0ee4fb74b06b0a4268240f922bc2bc0a691bcc1 -prometheus-client==0.24.1 \ - --hash=sha256:fe601e041eac55bad8f46da2f3c54f2ab6cd8a8272d9595742c83980e95ed5e4 + --hash=sha256:1bf73c8e0aead3761794f6e5b15228bee706cda020facd0df347c145843adf40 +oci==2.171.0 \ + --hash=sha256:5d141bc5fa605f10c46e15723e4c43227a45a9e63d489486e21876d760133b4e +openai==2.41.1 \ + --hash=sha256:ebaf9e2016e193ca5b417619f2b860dd31453e239667711b4f916fdb1c75e04e +openapi-pydantic==0.5.1 \ + --hash=sha256:e8a75bb11a7f9532cbb103570f255729303f2c19b67e61ad0f3cd9c0477c6fd8 +opentelemetry-api==1.39.1 \ + --hash=sha256:0888c1dfc8a76ad5aa27fc7c05bbf225b054468ed85e73488934c79dcd827998 +opentelemetry-exporter-otlp-proto-common==1.39.1 \ + --hash=sha256:06e40feb823b03bbfaa6ca90500c3fbc7f0cec64ca5f57a4541e047810181cdf +opentelemetry-exporter-otlp-proto-http==1.39.1 \ + --hash=sha256:ee3846623fa7ad72dfb2e3ca2a913278aa9be951458f2d5ab57496001dcd7e6f +opentelemetry-instrumentation==0.60b1 \ + --hash=sha256:51e68234000232a07707a87e3ae0387b5ece81b5c2892aa2a2bd912311757a55 +opentelemetry-instrumentation-httpx==0.60b1 \ + --hash=sha256:bf8df4ac9f66101f3f224d98705d26f68cf1773a1e2ea95474c76b42d96016b0 +opentelemetry-proto==1.39.1 \ + --hash=sha256:34d95c66ceae0c0725d2b7927767e935b7fea9b4ded667bda22e95a046ddf7c4 +opentelemetry-sdk==1.39.1 \ + --hash=sha256:786ff247dbf93e752b5ec900627a4900c262d7889ef71126c67107f886d1b2f6 +opentelemetry-semantic-conventions==0.60b1 \ + --hash=sha256:85b1cb6a6e1c7b663f911eeb4891014b4baa9bf4c0e275519e930be840616685 +opentelemetry-util-http==0.60b1 \ + --hash=sha256:47052b9f1a574160921a9f4eada9d026e77a84dae1dca5920837bf5410fce2d8 +oracledb==3.4.2 \ + --hash=sha256:1434930dd13441619c76b06f312c74369d6838a481e7722993b9cced8ad267f6 \ + --hash=sha256:943a42400efc8b005354931353db7bd28e54528c8cd0a2ce5763f36897d26a3a +packaging==25.0 \ + --hash=sha256:ea1dc775c4d009b9af3848d90c8a5252ad652f3ae251439318eb0bb09c3c682f +pandas==3.0.2 \ + --hash=sha256:615bf8c0b5ea16faef2ea2827ec80892232c746cbe2e0d1bbee84c3f68254055 \ + --hash=sha256:adf5d48f0407c277ebf624b35ae45313b4f6def71cb27a786b84c6189dcb93b3 +pathable==0.6.0 \ + --hash=sha256:9761f7c58012808bd3e415f6b33a011c7ebb6ecf6321696a5738a08a5621db59 +platformdirs==4.10.0 \ + --hash=sha256:6f01422809efc392dad2d6981ea17741141c8be68d6582547e7d4345a9592ade +prometheus-client==0.25.0 \ + --hash=sha256:ad5ecb750327dd1002239ec35222a384db45753c87242d48e96f219db05d9591 prompt-toolkit==3.0.52 \ - --hash=sha256:c329e921742d68b12ff8543ca7004be7b4ccd8a69317bea8d9a6e524dd48cdbe + --hash=sha256:2df5dea7ebf2cf3b054ac3f14fa76ab44dda5d9deeb3911a1a27416fc0864c1c propcache==0.4.1 \ - --hash=sha256:10f7bf66817595de6682fd428cf2aa7892c0b0b45475585e8029655ab50c0510 \ - --hash=sha256:3ccf1a18d315e7e234aee592a5dddd10951fa41f8a8658021dbe7ac413cca797 \ - --hash=sha256:3f5189a8cf5fd36f414b4d9bf244e61a1eca49ac57942c7e930250df94b2340a \ - --hash=sha256:42ecf4d140bbc503d90097af47bfc9c7e2a88faaad70694ea2bf50ad3da35c41 + --hash=sha256:2c44e59f67229ce44cd71d778fc1c3c2ada5d98f0e3a383eb65129bbddab6755 \ + --hash=sha256:c926067c28febdef60d1d3eb7992c9ab7a9e14631411492e335a9f6c08c7379a +proto-plus==1.28.0 \ + --hash=sha256:8d5189479a0eb3a1215aa9821c72bf4419b6d430718035d8dc548cbc85541288 +protobuf==6.33.6 \ + --hash=sha256:c6e1ea700f5e031c9669bd535a87f694f09b74e8b83885ab2759ae2bd2cbbd94 \ + --hash=sha256:df80a6563854e01cd6672f462b18d7ffff7f23caca920a972a93ba14cd20af1e psycopg2-binary==2.9.11 \ - --hash=sha256:0badf162b98436fdb9aa273e2901db462a6ffa081904e9d722429b75e01532d9 \ - --hash=sha256:623cff634940e5d248125a1b8d74a19625db0c11c6aecd8db007940ccb409436 \ - --hash=sha256:bf7588449bc9604e13c7fc2a374c359a82784a265776b2975fd013588eba032e + --hash=sha256:0075b19b23dfbe894fd10b060332e157544b333e23416bdc59bea4b634577add \ + --hash=sha256:e87099ce8aa6f5a858258add8eb9d4e971e80d44660a9b06cc0d4e4bc2283512 +py-key-value-aio==0.4.5 \ + --hash=sha256:138f43e584614df71ffe3c5e381f8be3ed562de9507dde787f1f59dbd60d3531 +pyaml==26.2.1 \ + --hash=sha256:faf3687c32c7820003af8562442d1e473fe0a713025162efb8331dc0dfc9d29c pyarrow==23.0.1 \ - --hash=sha256:c00b052ccfb5b904e77f0ca0472723936903d8dc7d1964504a9489c7212a47fc \ - --hash=sha256:c1fb462a14714f87a6c2d56d0ce938769e38206130231af669722f13eda5b612 \ - --hash=sha256:c4302f07a0e9d212d42b5b89be8745b5a22ae970209189271387d91e45b6ec4e \ - --hash=sha256:fb062054b2ba4c84d3b607f64c8e7ae65fced4f20016602773da4b7481d162a9 + --hash=sha256:21855f7fa76d32250847d3f73aefbc6993e6e92b7c48a2651aeedbdc1a25e37a \ + --hash=sha256:317d00a32e92228ad0491105e6e153f09b4f190e1eabc652c17fbbc104ea6324 +pyasn1==0.6.3 \ + --hash=sha256:51194c7b4281edb039247c23e11f5280b4c9713ec246fda1fa9b5d960b860e51 pyasn1-modules==0.4.2 \ - --hash=sha256:cda22a851735d664e92c8354a30405d88c5a1aa7d6313ba6c583bc3034654937 + --hash=sha256:789033a94c5074562252314a4362858e2c173b04c7ae8dc1173ac69ce1f5cd7e pycparser==3.0 \ - --hash=sha256:86072d0cf4bf7e125171d79036c2126a2fa377687520e834987c2de4b4e5a9e9 -pydantic==2.12.5 \ - --hash=sha256:ba78cfc9d85e40047d67d32828da04ddbe9a27bd0718983938629bfca0d3cc6c -pydantic-core==2.41.5 \ - --hash=sha256:280238d34598c8e0eac77c2d96456cb5657f4afc3235d6afa15859a143cc3885 \ - --hash=sha256:2c1462d1bdf9b8b13c8afa43856d7163c5a2567e9f05fcd5d26f54f23f35edf0 \ - --hash=sha256:3713d923ca3dd74e51ad6ce5be8e2bb9b8398cbc3cdbe7bd959282e9e9694fff \ - --hash=sha256:41f74ba1ea18462d7cc27155581a9b23165adc7b009c6d467542274d63db163c + --hash=sha256:abc09eabddd4d1d5d1606f6e113c0176507c75805c97e0e2af2c99c76eefbb9d +pydantic==2.13.1 \ + --hash=sha256:6eab392063f50f266f91bd61d6946ef3e0181c65240f46b91d527b1246097394 +pydantic-ai==1.107.0 \ + --hash=sha256:518fcca91d50d01bf1bbd078087e10e3650867f8d1431fecfa08f6d8cc06216c +pydantic-ai-slim==1.107.0 \ + --hash=sha256:7a19db4cd5b3a31ce49edb32176ce9766765d71ade84e3de6661e693cf8664ba +pydantic-core==2.46.1 \ + --hash=sha256:1c2f8b60e6b8e3443816fb14260499707757e8ab68af11b0a4ebe67ce1839ce2 \ + --hash=sha256:f7a3fa79699060131a7b63c29711198953ed1f96a78b7ee7da9d5ab9e5276863 +pydantic-evals==1.107.0 \ + --hash=sha256:15bd4f0059df0a73116f47c782fa60bf7c8698c92461ee88ff83ce8006a1e1a8 +pydantic-graph==1.107.0 \ + --hash=sha256:d3d3cb83c479829add30f30e114665d5a422a2bbf42b53a896396c993ae1c41f +pydantic-handlebars==0.2.1 \ + --hash=sha256:95cf110cf8d9d8d3ba6a9912111efe9bb6f9147ec285ccf4423b10c8359efc1f +pydantic-settings==2.14.2 \ + --hash=sha256:794c2942e9f6c7f0a3482aebd328cf08213f4770fdc560ac5d5084a0fce81e7f +pygments==2.20.0 \ + --hash=sha256:22eb8865e5accd0fc529e4fdc5cf74db3e6b2b6348b43a089950c8ce671dedb3 +pyjwt==2.13.0 \ + --hash=sha256:43798d73ce4c0a7221087b220935ade361955eeada0b3b4f8622f9b53916ea1c +pyopenssl==26.2.0 \ + --hash=sha256:61a6c16147a7d1fe5bc678a5bfe4e94dd86cd2a2cbceb9dce744df27badcd3ff +pyperclip==1.11.0 \ + --hash=sha256:bc2705cf621ae4c0781b32274e083330bcb152141cb6eb777e2572f278773cc2 python-dateutil==2.9.0.post0 \ - --hash=sha256:c112f3de33b4ef01360132ef116d72df91cdf628f136b70f1fc9a9eb19137cb9 + --hash=sha256:89e5d6f444e51ac0a18370406b265fa1f51c88824476fd08c56db669dd317775 +python-dotenv==1.2.2 \ + --hash=sha256:58bee80c6e48ce9d2b6bcb805bf670d3b45438911bb32e82f9145369b9deaf63 +python-multipart==0.0.32 \ + --hash=sha256:440771a83ee1170ce817dd5a8c4c4a834dbfb92a904dea257e737360259c76c3 +pytz==2026.2 \ + --hash=sha256:18af4c67f35dc7468c3c81338959c687c03f1f921325b55b53d3ebf9ad6581f4 pyyaml==6.0.3 \ - --hash=sha256:84a2acfe1e8dfcf8be95fa61611ea7637f8bfcff49761a6a8c396aaa0b6d94a9 \ - --hash=sha256:bcaf1b152ce8cd6ec4ff56f8ca929f176eb01e6aa472fe10b3ea31f19e15fb39 \ - --hash=sha256:c22e4a0d2bb69fddc73b3b52f1540533df1f206a08f52ea8cae49337615b55d2 \ - --hash=sha256:c99b924c5311933fa398cc53c617f99705cf2d96226d023f75e95e15e753f81f + --hash=sha256:e647b656314603fe964279e192001153683e6a5574a3011f6c4efa6f821a416c \ + --hash=sha256:fc30b3ff55268f3ae334b94073d189f32cded01ccbcd177b7537dff511fbe54b referencing==0.37.0 \ - --hash=sha256:bd019ff74869f84a893b7e50b84ce3d0db1e465ceb3a336403011c6467ffacb0 + --hash=sha256:2848a91042246ed5cb2da615736b66252fb95d7b5385e9d1f889ea2b8ba01e3d +regex==2026.4.4 \ + --hash=sha256:11710cc1f0e40d5e4e2dc019df2be9564bd684027a72cca733f13c28ae2193e5 \ + --hash=sha256:cbaa507ca7cdd187a4e0080296799e98e317e975cd099612f812f532ccb86609 +requests==2.34.2 \ + --hash=sha256:c3028149759c7fa710f2814e499608083a26d88db09369dd4063054373d77487 requests-oauthlib==2.0.0 \ - --hash=sha256:4fd6526c6de7a0bd036e84563b7a1523d92ba1f62e32cad65ccef9b2523bbc33 + --hash=sha256:6fc02f497fb599e42b5811806e49498d26ebb58b6195a37962c8ea1557b44205 +rich==15.0.0 \ + --hash=sha256:b61783d48185f1880510afc6a3774ffbc32a5b9b31cd62dd5c5ff71b9feeea74 +rich-rst==2.0.1 \ + --hash=sha256:affb47e0ee4dfe24d2598f62d19f979e517590c3c12dd8fd785e385a8997a395 rpds-py==0.30.0 \ - --hash=sha256:16a18b2b2566d88ccdabe156c2fd0b6bcc4fb172d084ec7e4c1ab502cb8a5cfd \ - --hash=sha256:613bc173bc12f35e40c3d1c1e6252555eaa48ea9425ee0b01fb151f3ca8a2a05 \ - --hash=sha256:6c94c5f1c2501e50c22b7c993b083aeef4d342974d3058763296fb4646d8a059 \ - --hash=sha256:75a565fc839958562ab5ad648c3a4bd0c46874a5556acb48da423f91c47c355b -safetensors==0.7.0 \ - --hash=sha256:18abcf37ffae5f85a81ca46c440fdc5f38ae0938ff0f4a4de14e37386ed248e7 \ - --hash=sha256:6833f019f20c8f0bb790ae3f0fd088f50c9fe4e051106dc3e59df5a953f68532 \ - --hash=sha256:6aea22e3ce1ed41d56c0e50f1cb504fe47a50ec7a1d50135d76fd233bbe4b1e3 \ - --hash=sha256:bc9d119ad82379f387c1264de35e6d489b7196c431b23e92b2b0959eae8494c7 -scikit-learn==1.8.0 \ - --hash=sha256:4c73965fdde273763f87334dfb0d773cb9196e2eb9dd21a0aabd86cf4da2adb3 \ - --hash=sha256:5641af1f1bcede6f6d894f50418b2d820f3a3b82b3a5cb702621e6a386eef935 \ - --hash=sha256:5d27f41e0a981a58fcc00f09ef9c00fd68a2e13c218768d0ed69c1a247c8855f \ - --hash=sha256:7147bcc3428006a9b5fc0f0934b70c555ddd9f8ebc4b3ee4aaebb44c5e87a3dd -scipy==1.17.0 \ - --hash=sha256:0e35bf4bcd96fb22c9007cb651e3fa7a696bf90986fd220607505f5c2b7f17e7 \ - --hash=sha256:92b4828228173816adc054c97a539c41f396558fbab67dcaae1e4195c6d6253f \ - --hash=sha256:a1b3d25c892207a7626f0634fe768bd71b5f09cbb393be07d82fc44cced109ac \ - --hash=sha256:f1c7b6ff095ed94c422bce52aa0ca8c8aea18922877853bbacaf8b7947e02510 -setuptools==80.9.0 \ - --hash=sha256:3a3c26f9000ab213d87be4efa0f1926fb0975237ae9e8e7cc68c9d7fcba6c294 + --hash=sha256:11729e4f36a649a22271d688f0edf12b4d5a3ea0c6f6d5c2a0adaa659be540a8 \ + --hash=sha256:3cd14f655cf15503309f9e3c021571429331f26686278daeee9793f01187fd43 +s3transfer==0.18.0 \ + --hash=sha256:16eceb300d92c44f1e6966cda53554a9d8ad709d8d4e54a17cbf038ae1640b3f +secretstorage==3.5.0 \ + --hash=sha256:21c92fbc60a5b54888e7c6099f115cda199aabcdd8cc1ee5d6681d2948ad4f17 +semver==3.0.4 \ + --hash=sha256:d493aa9269842671b402c5325f37529f4b86819f18fc4b861e7ebefedb4937ed +sentry-sdk==2.62.0 \ + --hash=sha256:7b6444e23d06e5d8fc657225b67f2c29cf5f1edab7e06c42819938f72a60800e +shellingham==1.5.4 \ + --hash=sha256:1d8fcda93b78926bb91867c60ef1dd91eaccb73695420bdab7c220e2360ca2c6 six==1.17.0 \ - --hash=sha256:33f558442b372864d53b1813933f5d624876f418521b1b89624ea6e3d79f0e97 + --hash=sha256:be25bf700236019335048807404f5f0a00b67b20ce1091ccb7bbd42b7beded23 sniffio==1.3.1 \ - --hash=sha256:79fc97358f9f993658f5285996c92b070d9b2b9cdd789daefd3e0607d518097b -sqlalchemy==2.0.45 \ - --hash=sha256:52a0fb297270ecc4066303762220717240f5e427298345e19835d21319fc9522 \ - --hash=sha256:69ada3936fac5c0c15e765e71fae9b1177c9c957eb7fbd5210f63d7c05aa26c3 \ - --hash=sha256:6ea7264891e42cfdb069a27eefa2438214a54051d8b5b1b00209af9f944c3480 \ - --hash=sha256:7d691e498146a57a54f347385729b57e98b2e548d6fd6e25fdcbdf6e48a08ae4 -sympy==1.14.0 \ - --hash=sha256:92de12bc45a8930ecab22227dea3f4192e15d9f4555c9a9d52d312865748afbd + --hash=sha256:10c13dae10df70efde4ea062208bebf03d9a36cc0b6cf4f8756cbb5c2cac0a05 +sqlalchemy==2.0.49 \ + --hash=sha256:2ae54c222fe9b0076e6c33ad0fd102b73001618408045f56ea6ca9ec4eb3709b \ + --hash=sha256:77bbdc3a1021c44465c1f67326c66af6a07c1ed791b29aa42a1fd23e775e6ec2 +sse-starlette==3.4.4 \ + --hash=sha256:d708ce9dbef3736fb9cf2f0903906848a7521073c86828c62d2fda04ae8c05f6 +starlette==1.3.1 \ + --hash=sha256:1076ce1d57b000b509f126da9bb439b4af3ebd798fe4fa998a02640d4d3fe92f +temporalio==1.25.0 \ + --hash=sha256:3981cdd9a361550d5145e604d6e595b1125cf85811fd7a9ae3d0b6fb4abd2514 \ + --hash=sha256:463dce374ed61d0462563e07b9fc7237c417515cc3f31a9dc2dc1b0bc0f279b0 +tenacity==9.1.4 \ + --hash=sha256:d7a56fc6d3929e363f1771dfb795642c2358d05facbce0a088296e867aecf1e1 termcolor==3.3.0 \ - --hash=sha256:2ed14ed07b1ab932881a26035e8f6a9e6251052289ecf8325e535bc17a03240d -threadpoolctl==3.6.0 \ - --hash=sha256:fc79267be059d5a0aaacf924656a1523599e7fc844c44608db5fe1cb2f152c4f + --hash=sha256:d53f88e05676950850fc95fd0a86c97b672f2ea88aa55928b91146d8cdbdfdce tiktoken==0.12.0 \ - --hash=sha256:019dfefcb4f2899eb8c7fd4d170c3ed335113579de129f55526fcdc3b43ef5ba \ - --hash=sha256:9d341a1e06d325151f05991a0a1616c12918132fda42b7601d25c9d02726e5b3 \ - --hash=sha256:aee67dcabd42538b82abaf27a1d5b74da0eb2da37fa9c9c117ca99d9146e2937 + --hash=sha256:57d67fb66a1f0f679b1d85059f9297777fb5076bfdab1d4bd69e2536d8db035d \ + --hash=sha256:da579c5b4059712fa0bf08a3b31858720407220ed406fc0253be147c3ab741d6 tokenizers==0.22.2 \ - --hash=sha256:109c12a85bc794db2d335e9845198fd4dfbdd25a5e47d944ada5ee28d720a01c \ - --hash=sha256:914385483cfc1f8a38e8141e9370ca315484464afda41eb3959cd4d36ad2217b \ - --hash=sha256:c6123f7e43990992323d4cd8ee0d463383a7dffe3c03e1f4483b446034910faf \ - --hash=sha256:c883273341b96903ddeda79cb247a6f3ea316bd668ee2dd93d86e6fb57fc35b3 -torch==2.9.1 \ - --hash=sha256:28171ed367139717fe7b8d6918c86d0fe328a7faa5704f5951283ae3b01796a1 \ - --hash=sha256:3ebd43c74b5c0833e2d6c842cb5416bacb928184e362c319eb79223d06bb2fa1 \ - --hash=sha256:9920139df4000ea99e1d71742d4bce1d7b807a5f45cf1a7cbff02c8dd8295bdb \ - --hash=sha256:9bd4844a0cf3f199351830697973a168ad2fd3a99e77b150ca4a1582067dc633 \ - --hash=sha256:ccb4a5b3c15819df80d96d2474b053306a2a4eba0301337c4aa56a58cbe45e10 \ - --hash=sha256:e42ab849b64444059f5eda352d61c9c3a078f30797e48e2972857182c9a00cf8 -tqdm==4.67.3 \ - --hash=sha256:d798b33fcc041b9a42c57f462b9c068a5a15c2dbcef1c87695d80c7074770a4d -transformers==4.57.6 \ - --hash=sha256:7c35d073118fad72b1745bd3dad3149d9bf2cacca3b16a7ed8f47f1a0bec119d -tree-sitter==0.25.2 \ - --hash=sha256:05bc490c99a846e0e91d9dd0c5067de48b35b46d4c3f18fc2cc9ac08a4ec71fe \ - --hash=sha256:3aa0cf6b0964495ada302c3eb966bf6f41a01279d8e31c019e4b0129a93d5a55 \ - --hash=sha256:aadac5c0356e824916ca95f8f794a6ef88105748eed6e8fdb7fb4690024d4336 -triton==3.5.1 \ - --hash=sha256:7b1a1b9ab53eafe7a65ae25861ac7df5541ea706b3baebe2306580127825e222 \ - --hash=sha256:f45cd8a990cde562e64b6ef00969dc3751a49e90651216e7f7b44ba997c9e19d \ - --hash=sha256:fce4c06d8e47ccd706790271cc3f2cea42c7e709cfb68e6abe760d2a56baeeb4 + --hash=sha256:1d65c6f9704bc7a0764b5b5b6ec010a4a54a5afa15d7a6573ba564eb77b01c56 \ + --hash=sha256:b9f7cca0fb1d65e2c714c7d296cd6a0e82719826af31a67fdaef33289bab3d27 +tornado==6.5.7 \ + --hash=sha256:145f60cf4a02ca464e093d4ec650c383566ec2a9c72a4baa823a2993fe23efe6 \ + --hash=sha256:682d70fa5baa06d10b90512b066587c785f387bfe0bd9c48d31b39e2bc1d40eb +tqdm==4.68.2 \ + --hash=sha256:2e65c08da81848d2df6dc5c0cae5e53bd64c4e4bd5a34962ca835c530be82485 +truststore==0.10.4 \ + --hash=sha256:affcec31ab8f17f6c1f34fd3f8fddc3a57e37009a2ea33240f484972987a22b9 +typer==0.26.7 \ + --hash=sha256:3d2d387ebed3c751d31cdd86767bbfcc1a117b94bb177885ce42804d5a87a522 +types-protobuf==6.32.1.20260221 \ + --hash=sha256:8de83117ddeb16b082c22d86e46d510c3500b9cb5dda43a58fbb5c7b112d42e6 +types-requests==2.32.4.20260107 \ + --hash=sha256:8c76aa85882055912a2aa94095d3dbf6ee745195c18014668ef28eb5a26c7e41 typing-extensions==4.15.0 \ - --hash=sha256:00877ead43795d4b767026270fa129816363c9a95b6febe68f5ac41d5096114b + --hash=sha256:429f20623a355887563afc68041e782f059f26031a5e00e2dd302d37799f672c typing-inspection==0.4.2 \ - --hash=sha256:4baec0c9a4ad5cc8a85c71c387e98ff9ecc7b85b6e538e204343940090be3b63 + --hash=sha256:14def1455626f831da791382c9c46592418e10462b296b3521ec30c1d28b4d75 +uncalled-for==0.3.2 \ + --hash=sha256:507aa3690eacb54e3a54f0aee465b5f4f567b0704d38a3d3fbe91e8b43515d22 +urllib3==2.7.0 \ + --hash=sha256:fa362060799d5cec112613712db5e3abd6c59c962cf2f532a3bcbb19f52c4750 +uvicorn==0.49.0 \ + --hash=sha256:0d4a19be044c20a4f074656fac90fcdc7759b0fcb2b70df46d061d94235f9be1 +watchfiles==1.1.1 \ + --hash=sha256:96356d42a491025b03b03cd0e8784c89556b4cea92addeddf35b37a27da6d46f \ + --hash=sha256:fa741fa274d6f915a8b88362d5fab78d2e159eb5cc798a28f44522d14ef76f90 +wcwidth==0.8.1 \ + --hash=sha256:80296cda7f1bc552fc39c255d918b1c36f0d1d33010232c99ce60a29dc1b02d3 websocket-client==1.9.0 \ - --hash=sha256:0cb04d0516ad9d4a5941144e68344813f1da89a2270b0634b4b71f1e892f4caf -websockets==15.0.1 \ - --hash=sha256:1ad83cda272b5a5d77faa3c4b43c6cbe6cfa3ec7a386899fefd14df455d8a51c \ - --hash=sha256:734b81ff7d1e22130a20f58af82a69e413025de9804e967cab503fe17332b14c \ - --hash=sha256:933ac176329fedf18d4207defff775829b9de301075bc297c169081ece1e1d9d \ - --hash=sha256:b022c4ed3a5a96300b56e9f0b18a302d266fac0a7819d906cca9e702f93976bf + --hash=sha256:c1370b3fea1c97189614828173ec02a8feaab0004782381f03456e1db4c60f19 +websockets==16.0 \ + --hash=sha256:6d14ef228bb305deeec8e0769304d30ac1f69a4e8b29ca17d6968bbeecf1901f \ + --hash=sha256:72a0963c315c53521f807af0ca4f1d84c0ca378e4125e13c6694120781aef60b wrapt==1.17.3 \ - --hash=sha256:0953273f64ed6dc39821a1d06409958d5d5bf53a699f3931cb1a81c656fdd720 \ - --hash=sha256:15c6bffa4386f4927f1e1c0b4e2e4604c10d709199ecbd3f69ae1e659f2d96d8 \ - --hash=sha256:1649eb282f55f5d90154086a34fef4922aa31b28233e03ce396b7d8a778a5904 + --hash=sha256:6068917402863d0edfdc7e11d8a1da007da471e0817d45ad0fad6175125628a0 \ + --hash=sha256:73cbe345787e767b7576aa8bdee71f67c6d38fafcb31be0d17c5ca64d7e12f63 +xai-sdk==1.17.0 \ + --hash=sha256:43e95f00c0c3677c309a5f30157e55edc319c753f7d24def432ea7f5dc220efb xxhash==3.6.0 \ - --hash=sha256:122ea61c85a8725231030b26650ae35b1ae709f154e1e8f5274b2cd469638a14 \ - --hash=sha256:a426db4666ab784b369beab268f41bd7b2505390b1a6f7ae0bbc295a103c4c83 \ - --hash=sha256:bb363fc4152e194b2f68829da7d783d9b5eee9577c33f6007c78d25517a229ca \ - --hash=sha256:edac8303f5c2d0bec5632a6e6cb9c56f3cd548e94960c5b9468c654d5a73c653 -yarl==1.22.0 \ - --hash=sha256:8e78442a1a40257173cbd3b9ec78a1ded7ab02a1fcb23f3d42686bd5afb184cc \ - --hash=sha256:b59c74a17b24908333ce8e0a348fafe85a1bdb1d524cc74d9c25161674dd358a \ - --hash=sha256:cee8af2825e29b4b31cce0c7272c29b66717ab164e3e2a5dc8dbe173c2901db2 \ - --hash=sha256:eb5d90c48762dd433d86eb6e3c6b4965fc3dff440c472e89047a628dd29271ac -zipp==3.23.0 \ - --hash=sha256:2f6742e089020240e014478d428fd79059270c56a2f7947d37c6f1d2ae639174 + --hash=sha256:c03a08fd89c01fc60763cfe92f93a4b14ec05e110577c2e41640942e504aee38 \ + --hash=sha256:c7948e01ae9e33b691c9531409ecaf7c36f143764ab10171c7c0833c58588a3f +yarl==1.23.0 \ + --hash=sha256:255be9da2dc3317c3333938906d73e55ff830b9b4b4a450a4bcfebbcff872434 \ + --hash=sha256:4cd7f2925038c86bb461a722ce74e964e98bfe80b3a0c3bce3341f549fb3eb6b +zipp==4.1.0 \ + --hash=sha256:8350a43d076f3ce36df498c18cf456f8e1bc81d07cc9b70c56029946fbe0b239 diff --git a/.konflux/requirements.hermetic.txt b/.konflux/requirements.hermetic.txt index d5aba32bb..aeb69c81a 100644 --- a/.konflux/requirements.hermetic.txt +++ b/.konflux/requirements.hermetic.txt @@ -1,2 +1,3 @@ -uv==0.11.15 -pip==26.1 +uv-build==0.11.18 +uv==0.11.18 +pip==26.1.2 diff --git a/.konflux/requirements.overrides.txt b/.konflux/requirements.overrides.txt index cacccf2e1..4d404920f 100644 --- a/.konflux/requirements.overrides.txt +++ b/.konflux/requirements.overrides.txt @@ -1,22 +1,3 @@ # override these package to the version available on RHOAI wheels index: -# https://console.redhat.com/api/pypi/public-rhai/rhoai/3.3/cpu-ubi9/simple -transformers==4.57.6 -tokenizers==0.22.2 -scipy==1.17.0 -# aiohttp==3.13.3 -aiosqlite==0.22.1 -cryptography==46.0.7 -anyio==4.12.1 -# datasets==4.5.0 -pandas==2.3.3 -pyarrow==23.0.1 -faiss-cpu==1.12.0 -sqlalchemy==2.0.45 -setuptools==80.9 -jiter==0.12 -google-genai==1.59.0 -torch==2.9.1 -hf-xet==1.2.0 -yarl==1.22.0 -grpcio==1.76.0 -grpcio-status==1.76.0 +# https://packages.redhat.com/api/pypi/public-rhai/rhoai/3.4/cpu-ubi9/simple +packaging<26 diff --git a/.konflux/rpms.lock.yaml b/.konflux/rpms.lock.yaml index 2ca7ed624..e8864efb5 100644 --- a/.konflux/rpms.lock.yaml +++ b/.konflux/rpms.lock.yaml @@ -32,20 +32,6 @@ arches: name: cmake-rpm-macros evr: 3.26.5-2.el9 sourcerpm: cmake-3.26.5-2.el9.src.rpm - - url: https://cdn.redhat.com/content/eus/rhel9/9.6/aarch64/appstream/os/Packages/g/gcc-c++-11.5.0-5.el9_5.aarch64.rpm - repoid: rhel-9-for-aarch64-appstream-eus-rpms - size: 12999288 - checksum: sha256:a9ff0bd2a2b3483e07dcf87f8137a6358f36f5300c934b90500f119f884e3463 - name: gcc-c++ - evr: 11.5.0-5.el9_5 - sourcerpm: gcc-11.5.0-5.el9_5.src.rpm - - url: https://cdn.redhat.com/content/eus/rhel9/9.6/aarch64/appstream/os/Packages/l/libstdc++-devel-11.5.0-5.el9_5.aarch64.rpm - repoid: rhel-9-for-aarch64-appstream-eus-rpms - size: 2526795 - checksum: sha256:83a2006137335a9b17a05a02a54481abcdfd295b280b924c51caaacd7bf07ad6 - name: libstdc++-devel - evr: 11.5.0-5.el9_5 - sourcerpm: gcc-11.5.0-5.el9_5.src.rpm - url: https://cdn.redhat.com/content/eus/rhel9/9.6/aarch64/appstream/os/Packages/l/libuv-1.42.0-2.el9_4.aarch64.rpm repoid: rhel-9-for-aarch64-appstream-eus-rpms size: 150129 @@ -120,20 +106,6 @@ arches: name: cmake-rpm-macros evr: 3.26.5-2.el9 sourcerpm: cmake-3.26.5-2.el9.src.rpm - - url: https://cdn.redhat.com/content/eus/rhel9/9.6/x86_64/appstream/os/Packages/g/gcc-c++-11.5.0-5.el9_5.x86_64.rpm - repoid: rhel-9-for-x86_64-appstream-eus-rpms - size: 13479598 - checksum: sha256:b8392274e302d665bc132aee4ed023f8a777d9c446531679ede18150d7867189 - name: gcc-c++ - evr: 11.5.0-5.el9_5 - sourcerpm: gcc-11.5.0-5.el9_5.src.rpm - - url: https://cdn.redhat.com/content/eus/rhel9/9.6/x86_64/appstream/os/Packages/l/libstdc++-devel-11.5.0-5.el9_5.x86_64.rpm - repoid: rhel-9-for-x86_64-appstream-eus-rpms - size: 2531717 - checksum: sha256:84695eeeb1daa8ff74baf7efd9fc57fb136bec7e8a2ca56c105be6d83ec22d07 - name: libstdc++-devel - evr: 11.5.0-5.el9_5 - sourcerpm: gcc-11.5.0-5.el9_5.src.rpm - url: https://cdn.redhat.com/content/eus/rhel9/9.6/x86_64/appstream/os/Packages/l/libuv-1.42.0-2.el9_4.x86_64.rpm repoid: rhel-9-for-x86_64-appstream-eus-rpms size: 154427 diff --git a/.tekton/lightspeed-stack-0-6-pull-request.yaml b/.tekton/lightspeed-stack-0-6-pull-request.yaml index 92421698d..e1625465f 100644 --- a/.tekton/lightspeed-stack-0-6-pull-request.yaml +++ b/.tekton/lightspeed-stack-0-6-pull-request.yaml @@ -48,12 +48,13 @@ spec: "path": ".konflux", "requirements_files": [ "requirements.hashes.wheel.txt", + "requirements.hashes.wheel.pypi.txt", "requirements.hashes.source.txt", "requirements.hermetic.txt" ], "requirements_build_files": ["requirements-build.txt"], "binary": { - "packages": "aiohappyeyeballs,aiosignal,aiosqlite,annotated-doc,annotated-types,anyio,asyncpg,cffi,chevron,cryptography,click,dill,distro,dnspython,docstring-parser,durationpy,einops,email-validator,faiss-cpu,fire,frozenlist,fsspec,google-crc32c,google-genai,grpcio,grpcio-status,h11,hf-xet,httpcore,httpx,httpx-sse,importlib-metadata,jinja2,jiter,joblib,jsonschema-specifications,kubernetes,markdown-it-py,mdurl,mpmath,multidict,networkx,numpy,oauthlib,packaging,pandas,peft,pillow,prometheus-client,prompt-toolkit,propcache,psycopg2-binary,pyarrow,pyasn1-modules,pycparser,pydantic,pydantic-core,python-dateutil,pyyaml,referencing,requests-oauthlib,rpds-py,safetensors,scikit-learn,scipy,setuptools,six,sniffio,sqlalchemy,sympy,termcolor,threadpoolctl,tiktoken,tokenizers,torch,tqdm,transformers,tree-sitter,triton,typing-extensions,typing-inspection,websocket-client,websockets,wrapt,xxhash,yarl,zipp,uv,pip,maturin", + "packages": "a2a-sdk,ag-ui-protocol,aiofile,aiohappyeyeballs,aiohttp,aiosignal,aiosqlite,annotated-doc,annotated-types,anthropic,anyio,argcomplete,asyncpg,attrs,authlib,azure-core,azure-identity,beartype,boto3,botocore,cachetools,caio,certifi,cffi,charset-normalizer,circuitbreaker,click,cohere,cryptography,cyclopts,datasets,dill,distro,dnspython,docstring-parser,durationpy,einops,email-validator,eval-type-backport,exceptiongroup,executing,fastapi,fastavro,fastmcp,fastmcp-slim,fastuuid,filelock,fire,frozenlist,fsspec,genai-prices,google-api-core,google-auth,google-genai,googleapis-common-protos,greenlet,griffelib,groq,grpcio,h11,hf-xet,httpcore,httpcore2,httpx,httpx-sse,httpx2,huggingface-hub,idna,importlib-metadata,jaraco-classes,jaraco-context,jaraco-functools,jeepney,jinja2,jiter,jmespath,joserfc,jsonpath-ng,jsonpath-python,jsonref,jsonschema,jsonschema-path,jsonschema-specifications,keyring,kubernetes,litellm,llama-stack,llama-stack-api,llama-stack-client,logfire,logfire-api,markdown-it-py,markupsafe,maturin,mcp,mdurl,mistralai,more-itertools,msal,msal-extensions,multidict,multiprocess,nexus-rpc,numpy,oauthlib,oci,openai,openapi-pydantic,opentelemetry-api,opentelemetry-distro,opentelemetry-exporter-otlp-proto-common,opentelemetry-exporter-otlp-proto-http,opentelemetry-instrumentation,opentelemetry-instrumentation-httpx,opentelemetry-proto,opentelemetry-sdk,opentelemetry-semantic-conventions,opentelemetry-util-http,oracledb,packaging,pandas,pathable,pip,platformdirs,prometheus-client,prompt-toolkit,propcache,proto-plus,protobuf,psycopg2-binary,py-key-value-aio,pyaml,pyarrow,pyasn1,pyasn1-modules,pycparser,pydantic,pydantic-ai,pydantic-ai-skills,pydantic-ai-slim,pydantic-core,pydantic-evals,pydantic-graph,pydantic-handlebars,pydantic-settings,pygments,pyjwt,pyopenssl,pyperclip,python-dateutil,python-dotenv,python-multipart,pytz,pyyaml,referencing,regex,requests,requests-oauthlib,rich,rich-rst,rpds-py,s3transfer,secretstorage,semver,sentry-sdk,shellingham,six,sniffio,sqlalchemy,sse-starlette,starlette,temporalio,tenacity,termcolor,tiktoken,tokenizers,tornado,tqdm,truststore,typer,types-protobuf,types-requests,typing-extensions,typing-inspection,uncalled-for,urllib3,uv,uv-build,uvicorn,watchfiles,wcwidth,websocket-client,websockets,wrapt,xai-sdk,xxhash,yarl,zipp", "os": "linux", "arch": "x86_64,aarch64", "py_version": 312 diff --git a/.tekton/lightspeed-stack-0-6-push.yaml b/.tekton/lightspeed-stack-0-6-push.yaml index c9d748236..98449d547 100644 --- a/.tekton/lightspeed-stack-0-6-push.yaml +++ b/.tekton/lightspeed-stack-0-6-push.yaml @@ -49,12 +49,13 @@ spec: "path": ".konflux", "requirements_files": [ "requirements.hashes.wheel.txt", + "requirements.hashes.wheel.pypi.txt", "requirements.hashes.source.txt", "requirements.hermetic.txt" ], "requirements_build_files": ["requirements-build.txt"], "binary": { - "packages": "aiohappyeyeballs,aiosignal,aiosqlite,annotated-doc,annotated-types,anyio,asyncpg,cffi,chevron,cryptography,click,dill,distro,dnspython,docstring-parser,durationpy,einops,email-validator,faiss-cpu,fire,frozenlist,fsspec,google-crc32c,google-genai,grpcio,grpcio-status,h11,hf-xet,httpcore,httpx,httpx-sse,importlib-metadata,jinja2,jiter,joblib,jsonschema-specifications,kubernetes,markdown-it-py,mdurl,mpmath,multidict,networkx,numpy,oauthlib,packaging,pandas,peft,pillow,prometheus-client,prompt-toolkit,propcache,psycopg2-binary,pyarrow,pyasn1-modules,pycparser,pydantic,pydantic-core,python-dateutil,pyyaml,referencing,requests-oauthlib,rpds-py,safetensors,scikit-learn,scipy,setuptools,six,sniffio,sqlalchemy,sympy,termcolor,threadpoolctl,tiktoken,tokenizers,torch,tqdm,transformers,tree-sitter,triton,typing-extensions,typing-inspection,websocket-client,websockets,wrapt,xxhash,yarl,zipp,uv,pip,maturin", + "packages": "a2a-sdk,ag-ui-protocol,aiofile,aiohappyeyeballs,aiohttp,aiosignal,aiosqlite,annotated-doc,annotated-types,anthropic,anyio,argcomplete,asyncpg,attrs,authlib,azure-core,azure-identity,beartype,boto3,botocore,cachetools,caio,certifi,cffi,charset-normalizer,circuitbreaker,click,cohere,cryptography,cyclopts,datasets,dill,distro,dnspython,docstring-parser,durationpy,einops,email-validator,eval-type-backport,exceptiongroup,executing,fastapi,fastavro,fastmcp,fastmcp-slim,fastuuid,filelock,fire,frozenlist,fsspec,genai-prices,google-api-core,google-auth,google-genai,googleapis-common-protos,greenlet,griffelib,groq,grpcio,h11,hf-xet,httpcore,httpcore2,httpx,httpx-sse,httpx2,huggingface-hub,idna,importlib-metadata,jaraco-classes,jaraco-context,jaraco-functools,jeepney,jinja2,jiter,jmespath,joserfc,jsonpath-ng,jsonpath-python,jsonref,jsonschema,jsonschema-path,jsonschema-specifications,keyring,kubernetes,litellm,llama-stack,llama-stack-api,llama-stack-client,logfire,logfire-api,markdown-it-py,markupsafe,maturin,mcp,mdurl,mistralai,more-itertools,msal,msal-extensions,multidict,multiprocess,nexus-rpc,numpy,oauthlib,oci,openai,openapi-pydantic,opentelemetry-api,opentelemetry-distro,opentelemetry-exporter-otlp-proto-common,opentelemetry-exporter-otlp-proto-http,opentelemetry-instrumentation,opentelemetry-instrumentation-httpx,opentelemetry-proto,opentelemetry-sdk,opentelemetry-semantic-conventions,opentelemetry-util-http,oracledb,packaging,pandas,pathable,pip,platformdirs,prometheus-client,prompt-toolkit,propcache,proto-plus,protobuf,psycopg2-binary,py-key-value-aio,pyaml,pyarrow,pyasn1,pyasn1-modules,pycparser,pydantic,pydantic-ai,pydantic-ai-skills,pydantic-ai-slim,pydantic-core,pydantic-evals,pydantic-graph,pydantic-handlebars,pydantic-settings,pygments,pyjwt,pyopenssl,pyperclip,python-dateutil,python-dotenv,python-multipart,pytz,pyyaml,referencing,regex,requests,requests-oauthlib,rich,rich-rst,rpds-py,s3transfer,secretstorage,semver,sentry-sdk,shellingham,six,sniffio,sqlalchemy,sse-starlette,starlette,temporalio,tenacity,termcolor,tiktoken,tokenizers,tornado,tqdm,truststore,typer,types-protobuf,types-requests,typing-extensions,typing-inspection,uncalled-for,urllib3,uv,uv-build,uvicorn,watchfiles,wcwidth,websocket-client,websockets,wrapt,xai-sdk,xxhash,yarl,zipp", "os": "linux", "arch": "x86_64,aarch64", "py_version": 312 diff --git a/.tekton/lightspeed-stack-pull-request.yaml b/.tekton/lightspeed-stack-pull-request.yaml index 54ed7f0a4..ac7fdf079 100644 --- a/.tekton/lightspeed-stack-pull-request.yaml +++ b/.tekton/lightspeed-stack-pull-request.yaml @@ -53,12 +53,13 @@ spec: "path": ".konflux", "requirements_files": [ "requirements.hashes.wheel.txt", + "requirements.hashes.wheel.pypi.txt", "requirements.hashes.source.txt", "requirements.hermetic.txt" ], "requirements_build_files": ["requirements-build.txt"], "binary": { - "packages": "aiohappyeyeballs,aiosignal,aiosqlite,annotated-doc,annotated-types,anyio,asyncpg,cffi,chevron,cryptography,click,dill,distro,dnspython,docstring-parser,durationpy,einops,email-validator,faiss-cpu,fire,frozenlist,fsspec,google-crc32c,google-genai,grpcio,grpcio-status,h11,hf-xet,httpcore,httpx,httpx-sse,importlib-metadata,jinja2,jiter,joblib,jsonschema-specifications,kubernetes,markdown-it-py,mdurl,mpmath,multidict,networkx,numpy,oauthlib,packaging,pandas,peft,pillow,prometheus-client,prompt-toolkit,propcache,psycopg2-binary,pyarrow,pyasn1-modules,pycparser,pydantic,pydantic-core,python-dateutil,pyyaml,referencing,requests-oauthlib,rpds-py,safetensors,scikit-learn,scipy,setuptools,six,sniffio,sqlalchemy,sympy,termcolor,threadpoolctl,tiktoken,tokenizers,torch,tqdm,transformers,tree-sitter,triton,typing-extensions,typing-inspection,websocket-client,websockets,wrapt,xxhash,yarl,zipp,uv,pip,maturin", + "packages": "a2a-sdk,ag-ui-protocol,aiofile,aiohappyeyeballs,aiohttp,aiosignal,aiosqlite,annotated-doc,annotated-types,anthropic,anyio,argcomplete,asyncpg,attrs,authlib,azure-core,azure-identity,beartype,boto3,botocore,cachetools,caio,certifi,cffi,charset-normalizer,circuitbreaker,click,cohere,cryptography,cyclopts,datasets,dill,distro,dnspython,docstring-parser,durationpy,einops,email-validator,eval-type-backport,exceptiongroup,executing,fastapi,fastavro,fastmcp,fastmcp-slim,fastuuid,filelock,fire,frozenlist,fsspec,genai-prices,google-api-core,google-auth,google-genai,googleapis-common-protos,greenlet,griffelib,groq,grpcio,h11,hf-xet,httpcore,httpcore2,httpx,httpx-sse,httpx2,huggingface-hub,idna,importlib-metadata,jaraco-classes,jaraco-context,jaraco-functools,jeepney,jinja2,jiter,jmespath,joserfc,jsonpath-ng,jsonpath-python,jsonref,jsonschema,jsonschema-path,jsonschema-specifications,keyring,kubernetes,litellm,llama-stack,llama-stack-api,llama-stack-client,logfire,logfire-api,markdown-it-py,markupsafe,maturin,mcp,mdurl,mistralai,more-itertools,msal,msal-extensions,multidict,multiprocess,nexus-rpc,numpy,oauthlib,oci,openai,openapi-pydantic,opentelemetry-api,opentelemetry-distro,opentelemetry-exporter-otlp-proto-common,opentelemetry-exporter-otlp-proto-http,opentelemetry-instrumentation,opentelemetry-instrumentation-httpx,opentelemetry-proto,opentelemetry-sdk,opentelemetry-semantic-conventions,opentelemetry-util-http,oracledb,packaging,pandas,pathable,pip,platformdirs,prometheus-client,prompt-toolkit,propcache,proto-plus,protobuf,psycopg2-binary,py-key-value-aio,pyaml,pyarrow,pyasn1,pyasn1-modules,pycparser,pydantic,pydantic-ai,pydantic-ai-skills,pydantic-ai-slim,pydantic-core,pydantic-evals,pydantic-graph,pydantic-handlebars,pydantic-settings,pygments,pyjwt,pyopenssl,pyperclip,python-dateutil,python-dotenv,python-multipart,pytz,pyyaml,referencing,regex,requests,requests-oauthlib,rich,rich-rst,rpds-py,s3transfer,secretstorage,semver,sentry-sdk,shellingham,six,sniffio,sqlalchemy,sse-starlette,starlette,temporalio,tenacity,termcolor,tiktoken,tokenizers,tornado,tqdm,truststore,typer,types-protobuf,types-requests,typing-extensions,typing-inspection,uncalled-for,urllib3,uv,uv-build,uvicorn,watchfiles,wcwidth,websocket-client,websockets,wrapt,xai-sdk,xxhash,yarl,zipp", "os": "linux", "arch": "x86_64,aarch64", "py_version": 312 diff --git a/.tekton/lightspeed-stack-push.yaml b/.tekton/lightspeed-stack-push.yaml index 263f479e5..c08eb60fb 100644 --- a/.tekton/lightspeed-stack-push.yaml +++ b/.tekton/lightspeed-stack-push.yaml @@ -49,12 +49,13 @@ spec: "path": ".konflux", "requirements_files": [ "requirements.hashes.wheel.txt", + "requirements.hashes.wheel.pypi.txt", "requirements.hashes.source.txt", "requirements.hermetic.txt" ], "requirements_build_files": ["requirements-build.txt"], "binary": { - "packages": "aiohappyeyeballs,aiosignal,aiosqlite,annotated-doc,annotated-types,anyio,asyncpg,cffi,chevron,cryptography,click,dill,distro,dnspython,docstring-parser,durationpy,einops,email-validator,faiss-cpu,fire,frozenlist,fsspec,google-crc32c,google-genai,grpcio,grpcio-status,h11,hf-xet,httpcore,httpx,httpx-sse,importlib-metadata,jinja2,jiter,joblib,jsonschema-specifications,kubernetes,markdown-it-py,mdurl,mpmath,multidict,networkx,numpy,oauthlib,packaging,pandas,peft,pillow,prometheus-client,prompt-toolkit,propcache,psycopg2-binary,pyarrow,pyasn1-modules,pycparser,pydantic,pydantic-core,python-dateutil,pyyaml,referencing,requests-oauthlib,rpds-py,safetensors,scikit-learn,scipy,setuptools,six,sniffio,sqlalchemy,sympy,termcolor,threadpoolctl,tiktoken,tokenizers,torch,tqdm,transformers,tree-sitter,triton,typing-extensions,typing-inspection,websocket-client,websockets,wrapt,xxhash,yarl,zipp,uv,pip,maturin", + "packages": "a2a-sdk,ag-ui-protocol,aiofile,aiohappyeyeballs,aiohttp,aiosignal,aiosqlite,annotated-doc,annotated-types,anthropic,anyio,argcomplete,asyncpg,attrs,authlib,azure-core,azure-identity,beartype,boto3,botocore,cachetools,caio,certifi,cffi,charset-normalizer,circuitbreaker,click,cohere,cryptography,cyclopts,datasets,dill,distro,dnspython,docstring-parser,durationpy,einops,email-validator,eval-type-backport,exceptiongroup,executing,fastapi,fastavro,fastmcp,fastmcp-slim,fastuuid,filelock,fire,frozenlist,fsspec,genai-prices,google-api-core,google-auth,google-genai,googleapis-common-protos,greenlet,griffelib,groq,grpcio,h11,hf-xet,httpcore,httpcore2,httpx,httpx-sse,httpx2,huggingface-hub,idna,importlib-metadata,jaraco-classes,jaraco-context,jaraco-functools,jeepney,jinja2,jiter,jmespath,joserfc,jsonpath-ng,jsonpath-python,jsonref,jsonschema,jsonschema-path,jsonschema-specifications,keyring,kubernetes,litellm,llama-stack,llama-stack-api,llama-stack-client,logfire,logfire-api,markdown-it-py,markupsafe,maturin,mcp,mdurl,mistralai,more-itertools,msal,msal-extensions,multidict,multiprocess,nexus-rpc,numpy,oauthlib,oci,openai,openapi-pydantic,opentelemetry-api,opentelemetry-distro,opentelemetry-exporter-otlp-proto-common,opentelemetry-exporter-otlp-proto-http,opentelemetry-instrumentation,opentelemetry-instrumentation-httpx,opentelemetry-proto,opentelemetry-sdk,opentelemetry-semantic-conventions,opentelemetry-util-http,oracledb,packaging,pandas,pathable,pip,platformdirs,prometheus-client,prompt-toolkit,propcache,proto-plus,protobuf,psycopg2-binary,py-key-value-aio,pyaml,pyarrow,pyasn1,pyasn1-modules,pycparser,pydantic,pydantic-ai,pydantic-ai-skills,pydantic-ai-slim,pydantic-core,pydantic-evals,pydantic-graph,pydantic-handlebars,pydantic-settings,pygments,pyjwt,pyopenssl,pyperclip,python-dateutil,python-dotenv,python-multipart,pytz,pyyaml,referencing,regex,requests,requests-oauthlib,rich,rich-rst,rpds-py,s3transfer,secretstorage,semver,sentry-sdk,shellingham,six,sniffio,sqlalchemy,sse-starlette,starlette,temporalio,tenacity,termcolor,tiktoken,tokenizers,tornado,tqdm,truststore,typer,types-protobuf,types-requests,typing-extensions,typing-inspection,uncalled-for,urllib3,uv,uv-build,uvicorn,watchfiles,wcwidth,websocket-client,websockets,wrapt,xai-sdk,xxhash,yarl,zipp", "os": "linux", "arch": "x86_64,aarch64", "py_version": 312 diff --git a/Makefile b/Makefile index 7a6fda3f0..0943f364d 100644 --- a/Makefile +++ b/Makefile @@ -279,7 +279,7 @@ upload-distribution-archives: ## Upload distribution archives into Python regist uv run python -m twine upload --repository ${PYTHON_REGISTRY} dist/* konflux-requirements: ## Generate hermetic requirements.*.txt file for konflux build - ./scripts/konflux_requirements.sh + python3 scripts/konflux_resolve.py --profile cpu konflux-rpm-lock: ## Generate rpm.lock.yaml file for konflux build ./scripts/generate-rpm-lock.sh diff --git a/deploy/lightspeed-stack/Containerfile b/deploy/lightspeed-stack/Containerfile index 567b5793e..ad6b1e0c0 100644 --- a/deploy/lightspeed-stack/Containerfile +++ b/deploy/lightspeed-stack/Containerfile @@ -70,7 +70,7 @@ RUN if [ -f /cachi2/cachi2.env ]; then \ . /cachi2/cachi2.env && \ uv venv --seed --no-index --find-links ${PIP_FIND_LINKS} && \ . .venv/bin/activate && \ - pip install --no-cache-dir --ignore-installed --no-index --find-links ${PIP_FIND_LINKS} --no-deps -r requirements.hashes.wheel.txt -r requirements.hashes.source.txt && \ + pip install --no-cache-dir --ignore-installed --no-index --find-links ${PIP_FIND_LINKS} --no-deps -r requirements.hashes.wheel.txt -r requirements.hashes.wheel.pypi.txt -r requirements.hashes.source.txt && \ pip check; \ else \ uv sync --locked --no-dev --group llslibdev; \ @@ -137,7 +137,7 @@ ENTRYPOINT ["python3.12", "src/lightspeed_stack.py"] LABEL vendor="Red Hat, Inc." \ name="lightspeed-core/lightspeed-stack-rhel9" \ com.redhat.component="lightspeed-core/lightspeed-stack" \ - cpe="cpe:/a:redhat:lightspeed_core:0.4::el9" \ + cpe="cpe:/a:redhat:lightspeed_core:0.6::el9" \ io.k8s.display-name="Lightspeed Stack" \ summary="A service that provides a REST API for the Lightspeed Core Stack." \ description="Lightspeed Core Stack (LCS) is an AI-powered assistant that provides answers to product questions using backend LLM services, agents, and RAG databases." \ diff --git a/scripts/generate-rpm-lock.sh b/scripts/generate-rpm-lock.sh new file mode 100755 index 000000000..7c22dddf3 --- /dev/null +++ b/scripts/generate-rpm-lock.sh @@ -0,0 +1,149 @@ +#!/bin/bash + +set -e + +DEFAULT_BASE_IMAGE="registry.redhat.io/rhai/base-image-cpu-rhel9:3.4" +BUILD_ARGS_FILE=".konflux/build-args-konflux.conf" +INPUT_FILE=".konflux/rpms.in.yaml" +OUTPUT_FILE=".konflux/rpms.lock.yaml" +CONTAINER_IMAGE="registry.access.redhat.com/ubi9/ubi" +REDHAT_REPO_FILE=".konflux/redhat.repo" + +if command -v podman &>/dev/null; then + CONTAINER_RUNTIME="podman" +elif command -v docker &>/dev/null; then + CONTAINER_RUNTIME="docker" +else + echo "Error: Neither podman nor docker found. Please install one of them." + exit 1 +fi + +if [[ -f "$BUILD_ARGS_FILE" ]]; then + EXTRACTED_BASE_IMAGE=$(grep "^BUILDER_BASE_IMAGE=" "$BUILD_ARGS_FILE" | cut -d'=' -f2) + if [[ -n "$EXTRACTED_BASE_IMAGE" ]]; then + BASE_IMAGE="$EXTRACTED_BASE_IMAGE" + echo "Using base image from $BUILD_ARGS_FILE: $BASE_IMAGE" + else + BASE_IMAGE="$DEFAULT_BASE_IMAGE" + echo "BUILDER_BASE_IMAGE not found in $BUILD_ARGS_FILE, using default: $BASE_IMAGE" + fi +else + BASE_IMAGE="$DEFAULT_BASE_IMAGE" + echo "$BUILD_ARGS_FILE not found, using default base image: $BASE_IMAGE" +fi + +usage() { + echo "Usage: $0 -a ACTIVATION_KEY -g ORG_ID [-i BASE_IMAGE] [-f INPUT_FILE] [-O OUTPUT_FILE]" + echo "" + echo "Required:" + echo " -a ACTIVATION_KEY Red Hat activation key for subscription-manager" + echo " -g ORG_ID Red Hat organization ID for subscription-manager" + echo "" + echo "Options:" + echo " -i BASE_IMAGE Base container image for rpm-lockfile-prototype (default: $BASE_IMAGE)" + echo " -f INPUT_FILE Input RPM specification file (default: $INPUT_FILE)" + echo " -O OUTPUT_FILE Output lock file (default: $OUTPUT_FILE)" + echo " -h Show this help message" + echo "" + echo "Environment variables:" + echo " REGISTRY_USERNAME Username for registry authentication (skopeo login)" + echo " REGISTRY_PASSWORD Password for registry authentication (skopeo login)" + exit 1 +} + +ACTIVATION_KEY="" +ORG_ID="" + +while getopts "a:g:i:f:O:h" opt; do + case $opt in + a) ACTIVATION_KEY="$OPTARG" ;; + g) ORG_ID="$OPTARG" ;; + i) BASE_IMAGE="$OPTARG" ;; + f) INPUT_FILE="$OPTARG" ;; + O) OUTPUT_FILE="$OPTARG" ;; + h) usage ;; + *) usage ;; + esac +done + +if [[ -z "$ACTIVATION_KEY" || -z "$ORG_ID" ]]; then + echo "Error: Both activation key (-a) and organization ID (-g) are required." + usage +fi + +if [[ ! -f "$INPUT_FILE" ]]; then + echo "Error: Input file '$INPUT_FILE' not found." + exit 1 +fi + +if [[ ! -f "$REDHAT_REPO_FILE" ]]; then + echo "Error: Red Hat repo file '$REDHAT_REPO_FILE' not found." + exit 1 +fi + +echo "Using BASE_IMAGE: $BASE_IMAGE" +echo "Using INPUT_FILE: $INPUT_FILE" +echo "Using OUTPUT_FILE: $OUTPUT_FILE" +echo "Using CONTAINER_IMAGE: $CONTAINER_IMAGE" +echo "Using CONTAINER_RUNTIME: $CONTAINER_RUNTIME" + +CONTAINER_NAME="rpm-lockfile-generator-$$" +WORKDIR="/workdir" + +cleanup() { + echo "Cleaning up container..." + $CONTAINER_RUNTIME exec "$CONTAINER_NAME" subscription-manager unregister 2>/dev/null || true + $CONTAINER_RUNTIME rm -f "$CONTAINER_NAME" 2>/dev/null || true +} +trap cleanup EXIT + +echo "Starting container..." +$CONTAINER_RUNTIME run -d --name "$CONTAINER_NAME" "$CONTAINER_IMAGE" sleep infinity + +echo "Registering system with subscription-manager..." +$CONTAINER_RUNTIME exec "$CONTAINER_NAME" subscription-manager register \ + --activationkey="$ACTIVATION_KEY" \ + --org="$ORG_ID" + +echo "Disabling rhel-9-for-x86_64-appstream-eus-rpms repo" +$CONTAINER_RUNTIME exec "$CONTAINER_NAME" subscription-manager repos --disable=rhel-9-for-x86_64-appstream-eus-rpms --disable=codeready-builder-for-rhel-9-x86_64-eus-rpms + +echo "Installing packages..." +$CONTAINER_RUNTIME exec "$CONTAINER_NAME" dnf install -y skopeo git make python3-pip + +if [[ -n "$REGISTRY_USERNAME" && -n "$REGISTRY_PASSWORD" ]]; then + echo "Logging into registry with skopeo..." + REGISTRY_HOST=$(echo "$BASE_IMAGE" | cut -d'/' -f1) + printf '%s\n' "$REGISTRY_PASSWORD" | $CONTAINER_RUNTIME exec -i "$CONTAINER_NAME" skopeo login "$REGISTRY_HOST" \ + --username "$REGISTRY_USERNAME" \ + --password-stdin +fi + +echo "Installing rpm-lockfile-prototype..." +$CONTAINER_RUNTIME exec "$CONTAINER_NAME" python3 -m pip install --user \ + https://github.com/konflux-ci/rpm-lockfile-prototype/archive/refs/tags/v0.21.0.tar.gz + +CONTAINER_INPUT="$(basename "$INPUT_FILE")" +CONTAINER_OUTPUT="$(basename "$OUTPUT_FILE")" + +echo "Creating workdir and copying files..." +$CONTAINER_RUNTIME exec "$CONTAINER_NAME" mkdir -p "$WORKDIR" +$CONTAINER_RUNTIME cp "$INPUT_FILE" "$CONTAINER_NAME:$WORKDIR/$CONTAINER_INPUT" +$CONTAINER_RUNTIME cp "$REDHAT_REPO_FILE" "$CONTAINER_NAME:$WORKDIR/$(basename "$REDHAT_REPO_FILE")" + +echo "Running rpm-lockfile-prototype..." +$CONTAINER_RUNTIME exec -w "$WORKDIR" "$CONTAINER_NAME" bash -c ' + DNF_VAR_SSL_CLIENT_KEY=$(find /etc/pki/entitlement -type f -name "*key.pem" | head -1) + export DNF_VAR_SSL_CLIENT_KEY + DNF_VAR_SSL_CLIENT_CERT="${DNF_VAR_SSL_CLIENT_KEY//-key/}" + export DNF_VAR_SSL_CLIENT_CERT + /root/.local/bin/rpm-lockfile-prototype \ + --image "'"$BASE_IMAGE"'" \ + --outfile "'"$CONTAINER_OUTPUT"'" \ + "'"$CONTAINER_INPUT"'" +' + +echo "Copying output file from container..." +$CONTAINER_RUNTIME cp "$CONTAINER_NAME:$WORKDIR/$CONTAINER_OUTPUT" "$OUTPUT_FILE" + +echo "Successfully generated $OUTPUT_FILE" diff --git a/scripts/konflux_requirements.sh b/scripts/konflux_requirements.sh index 6e788e835..bdd858542 100755 --- a/scripts/konflux_requirements.sh +++ b/scripts/konflux_requirements.sh @@ -13,7 +13,7 @@ WHEEL_FILE="${KONFLUX_DIR}/requirements.wheel.txt" SOURCE_HASH_FILE="${KONFLUX_DIR}/requirements.hashes.source.txt" WHEEL_HASH_FILE="${KONFLUX_DIR}/requirements.hashes.wheel.txt" BUILD_FILE="${KONFLUX_DIR}/requirements-build.txt" -RHOAI_INDEX_URL="https://console.redhat.com/api/pypi/public-rhai/rhoai/3.3/cpu-ubi9/simple/" +RHOAI_INDEX_URL="https://packages.redhat.com/api/pypi/public-rhai/rhoai/3.4/cpu-ubi9/simple/" # extra wheels to be included in the wheel list, often come from build-time dependencies EXTRA_WHEELS="uv,pip,maturin" diff --git a/scripts/konflux_resolve.py b/scripts/konflux_resolve.py new file mode 100644 index 000000000..f8c16ac76 --- /dev/null +++ b/scripts/konflux_resolve.py @@ -0,0 +1,1283 @@ +#!/usr/bin/env python3 +"""Policy-driven dependency resolver for Hermeto/Cachi2 hermetic builds. + +Enforces: RHOAI wheel > PyPI sdist > PyPI wheel (last resort). +Usage: python3 scripts/konflux_resolve.py --profile cpu|cuda [--verbose | --quiet] +""" + +from __future__ import annotations + +import argparse +import json +import logging +import os +import re +import subprocess +import time +import tomllib +import urllib.request +from collections import deque +from html.parser import HTMLParser +from typing import Any, Sequence + +logger = logging.getLogger("konflux_resolve") + +# --------------------------------------------------------------------------- +# Task 2 — Version parsing and constraint matching (PEP 440) +# --------------------------------------------------------------------------- + +_PRE_RELEASE_MAP = { + "a": "a", + "alpha": "a", + "b": "b", + "beta": "b", + "c": "rc", + "rc": "rc", + "dev": "dev", +} + +_PRE_ORDER = {"dev": 0, "a": 1, "b": 2, "rc": 3, "final": 4} + +_VERSION_RE = re.compile( + r"^(\d+)" + r"(?:\.(\d+))?" + r"(?:\.(\d+))?" + r"(?:\.\d+)*" # extra numeric segments (ignored after third) + r"(?:[-.]?" + r"(?P
a|alpha|b|beta|c|rc|dev)"
+    r"(?P\d+)?)?"
+    r"(?:\.post(?P\d+))?"
+    r"$",
+    re.IGNORECASE,
+)
+
+
+def parse_version(
+    version_str: str,
+) -> tuple[int, int, int, tuple[int, int], tuple[int, int]]:
+    """Parse a PEP 440 version string into a comparable tuple.
+
+    Returns ``(major, minor, micro, (pre_label, pre_num), (post_label, post_num))``.
+    *pre_label* is one of ``"dev"``, ``"a"``, ``"b"``, ``"rc"``, ``"final"``
+    (where ``"final"`` means no pre-release suffix); *post_label* is ``"post"``
+    or ``"final"``.  The labels are ordered so that tuple comparison gives the
+    correct PEP 440 ordering.
+    """
+    version_str = version_str.strip()
+    if "+" in version_str:
+        version_str = version_str.split("+", 1)[0]
+    if version_str.endswith(".*"):
+        version_str = version_str[:-2]
+    m = _VERSION_RE.match(version_str)
+    if m is None:
+        raise ValueError(f"Cannot parse version: {version_str!r}")
+
+    major = int(m.group(1))
+    minor = int(m.group(2) or 0)
+    micro = int(m.group(3) or 0)
+
+    pre_raw = m.group("pre")
+    if pre_raw is not None:
+        pre_label = _PRE_RELEASE_MAP[pre_raw.lower()]
+        pre_num = int(m.group("pre_num") or 0)
+    else:
+        pre_label = "final"
+        pre_num = 0
+
+    post_raw = m.group("post")
+    pre_tag: tuple[int, int] = (_PRE_ORDER[pre_label], pre_num)
+    post_tag: tuple[int, int] = (1, int(post_raw)) if post_raw is not None else (0, 0)
+
+    return (major, minor, micro, pre_tag, post_tag)
+
+
+def _parse_specifier(spec: str) -> tuple[str, str]:
+    """Split ``>=1.2.3`` into ``(">=", "1.2.3")``."""
+    spec = spec.strip().strip("()")
+    for op in ("~=", "==", "!=", ">=", "<=", ">", "<"):
+        if spec.startswith(op):
+            return op, spec[len(op) :].strip()
+    if spec and spec[0].isdigit():
+        return "==", spec
+    raise ValueError(f"Unknown version operator in {spec!r}")
+
+
+_CMP_OPS: dict[str, Any] = {
+    "==": lambda v, c: v == c,
+    "!=": lambda v, c: v != c,
+    ">=": lambda v, c: v >= c,
+    "<=": lambda v, c: v <= c,
+    ">": lambda v, c: v > c,
+    "<": lambda v, c: v < c,
+}
+
+
+def _check_single_specifier(
+    version: str,
+    v: tuple[int, int, int, tuple[int, int], tuple[int, int]],
+    op: str,
+    ver_str: str,
+) -> bool:
+    """Return False if *v* violates the single specifier ``op ver_str``."""
+    if op == "==" and ver_str.endswith(".*"):
+        prefix = ver_str[:-2]
+        parts = prefix.split(".")
+        return version.split(".")[: len(parts)] == parts
+
+    if op == "~=":
+        parts = ver_str.split(".")
+        c = parse_version(ver_str)
+        upper_parts = parts[:-1]
+        upper_parts[-1] = str(int(upper_parts[-1]) + 1)
+        upper = parse_version(".".join(upper_parts))
+        return v >= c and v < upper
+
+    c = parse_version(ver_str)
+    check = _CMP_OPS.get(op)
+    if check is not None:
+        return bool(check(v, c))
+    return True
+
+
+def version_satisfies(version: str, constraint: str) -> bool:
+    """Check whether *version* satisfies a comma-separated PEP 440 constraint."""
+    constraint = constraint.strip()
+    if not constraint:
+        return True
+
+    v = parse_version(version)
+    for spec in constraint.split(","):
+        spec = spec.strip()
+        if not spec:
+            continue
+        op, ver_str = _parse_specifier(spec)
+        if not _check_single_specifier(version, v, op, ver_str):
+            return False
+    return True
+
+
+def merge_constraints(existing: str | None, new: str) -> str:
+    """Merge two constraint strings by comma-joining."""
+    if not existing:
+        return new
+    return f"{existing},{new}"
+
+
+# ---------------------------------------------------------------------------
+# Task 3 — Package name normalization and pyproject.toml parsing
+# ---------------------------------------------------------------------------
+
+_NORMALIZE_RE = re.compile(r"[-_.]+")
+
+
+def normalize_name(name: str) -> str:
+    """PEP 503 normalization: lowercase, replace runs of ``-``, ``.``, ``_`` with ``-``."""
+    return _NORMALIZE_RE.sub("-", name).lower()
+
+
+def _parse_dep_string(dep: str) -> tuple[str, str, str]:
+    """Parse ``name[extras]>=1.0; marker`` into ``(normalized_name, version_spec, marker)``."""
+    marker = ""
+    if ";" in dep:
+        dep, marker = dep.split(";", 1)
+        marker = marker.strip()
+
+    dep = dep.strip()
+    # Strip extras: name[extras]>=... → name>=...
+    dep = re.sub(r"\[.*?\]", "", dep)
+
+    match = re.match(r"^([A-Za-z0-9][-A-Za-z0-9_.]*)", dep)
+    if match is None:
+        raise ValueError(f"Cannot parse dependency: {dep!r}")
+
+    name = normalize_name(match.group(1))
+    version_spec = dep[match.end() :].strip()
+
+    return name, version_spec, marker
+
+
+def parse_direct_deps(pyproject_path: str) -> list[tuple[str, str]]:
+    """Parse ``[project].dependencies`` from a TOML file.
+
+    Returns ``[(normalized_name, version_spec), ...]``.
+    """
+    with open(pyproject_path, "rb") as f:
+        data = tomllib.load(f)
+
+    raw_deps: list[str] = data.get("project", {}).get("dependencies", [])
+    result: list[tuple[str, str]] = []
+    for dep_str in raw_deps:
+        name, spec, _marker = _parse_dep_string(dep_str)
+        result.append((name, spec))
+    return result
+
+
+# ---------------------------------------------------------------------------
+# Task 4 — PEP 503 simple index parser
+# ---------------------------------------------------------------------------
+
+
+class _LinkCollector(HTMLParser):
+    """Collect ``href`` attributes from ```` tags."""
+
+    def __init__(self) -> None:
+        super().__init__()
+        self.hrefs: list[str] = []
+        self._texts: list[str] = []
+        self._in_a = False
+        self.link_texts: list[str] = []
+
+    def handle_starttag(self, tag: str, attrs: list[tuple[str, str | None]]) -> None:
+        if tag == "a":
+            for attr_name, attr_val in attrs:
+                if attr_name == "href" and attr_val is not None:
+                    self.hrefs.append(attr_val)
+            self._in_a = True
+            self._texts = []
+
+    def handle_data(self, data: str) -> None:
+        if self._in_a:
+            self._texts.append(data)
+
+    def handle_endtag(self, tag: str) -> None:
+        if tag == "a" and self._in_a:
+            self.link_texts.append("".join(self._texts).strip())
+            self._in_a = False
+
+
+_WHEEL_RE = re.compile(
+    r"^(?P[A-Za-z0-9][-A-Za-z0-9_.]*?)"
+    r"-(?P\d[A-Za-z0-9_.+]*?)"
+    r"(?:-(?P\d[A-Za-z0-9_.]*)?)?"
+    r"-(?P[A-Za-z0-9_.]+)"
+    r"-(?P[A-Za-z0-9_.]+)"
+    r"-(?P[A-Za-z0-9_.]+)"
+    r"\.whl$"
+)
+
+_SDIST_RE = re.compile(
+    r"^(?P[A-Za-z0-9][-A-Za-z0-9_.]*?)"
+    r"-(?P\d[A-Za-z0-9_.]*)"
+    r"(?:\.tar\.gz|\.zip)$"
+)
+
+
+class SimpleIndexParser:
+    """Parse PEP 503 Simple Repository API HTML pages."""
+
+    @staticmethod
+    def parse_root(html: str) -> list[str]:
+        """Return list of package names from root index page."""
+        collector = _LinkCollector()
+        collector.feed(html)
+        return collector.link_texts
+
+    @staticmethod
+    def parse_package_page(html: str) -> list[dict[str, Any]]:
+        """Return list of entry dicts from a per-package page.
+
+        Each dict has keys: ``filename``, ``sha256``, ``version``, ``is_wheel``,
+        and for wheels: ``python_tag``, ``abi_tag``, ``platform_tag``.
+        """
+        collector = _LinkCollector()
+        collector.feed(html)
+        entries: list[dict[str, Any]] = []
+
+        for href, link_text in zip(collector.hrefs, collector.link_texts):
+            filename = link_text.strip()
+            if not filename:
+                filename = href.rsplit("/", 1)[-1].split("#")[0]
+
+            sha256 = ""
+            if "#sha256=" in href:
+                sha256 = href.split("#sha256=", 1)[1]
+
+            whl_m = _WHEEL_RE.match(filename)
+            if whl_m:
+                entries.append(
+                    {
+                        "filename": filename,
+                        "sha256": sha256,
+                        "version": whl_m.group("version"),
+                        "is_wheel": True,
+                        "python_tag": whl_m.group("python"),
+                        "abi_tag": whl_m.group("abi"),
+                        "platform_tag": whl_m.group("platform"),
+                    }
+                )
+                continue
+
+            sdist_m = _SDIST_RE.match(filename)
+            if sdist_m:
+                entries.append(
+                    {
+                        "filename": filename,
+                        "sha256": sha256,
+                        "version": sdist_m.group("version"),
+                        "is_wheel": False,
+                    }
+                )
+
+        return entries
+
+
+# ---------------------------------------------------------------------------
+# Task 5 — Wheel compatibility checker
+# ---------------------------------------------------------------------------
+
+
+def _abi3_compatible(python_tag: str, target_ver: tuple[int, int]) -> bool:
+    """Check if an abi3 wheel's cpXY tag is compatible with *target_ver*."""
+    for sub in python_tag.split("."):
+        if sub.startswith("cp") and len(sub) >= 3:
+            digits = sub[2:]
+            try:
+                tag_major = int(digits[0])
+                tag_minor = int(digits[1:]) if len(digits) > 1 else 0
+                if (tag_major, tag_minor) <= target_ver:
+                    return True
+            except ValueError:
+                pass
+    return False
+
+
+def is_wheel_compatible(
+    python_tag: str,
+    platform_tag: str,
+    target_python: str,
+    target_platforms: Sequence[str],
+    abi_tag: str = "",
+) -> bool:
+    """Check if a wheel's tags match the target environment.
+
+    *target_python* is e.g. ``"3.12"``; *target_platforms* is e.g.
+    ``["linux_x86_64", "linux_aarch64"]``.
+    """
+    major, minor = target_python.split(".")
+    target_ver = (int(major), int(minor))
+    compatible_py = {
+        f"cp{major}{minor}",
+        f"cp{major}",
+        f"py{major}",
+        f"py{major}{minor}",
+    }
+
+    py_ok = any(sub in compatible_py for sub in python_tag.split("."))
+    if not py_ok and abi_tag and "abi3" in abi_tag.split("."):
+        py_ok = _abi3_compatible(python_tag, target_ver)
+    if not py_ok:
+        return False
+
+    # Platform matching: "any" and "none" always match.
+    if platform_tag.lower() in ("any", "none"):
+        return True
+
+    # A compound platform tag like "manylinux_2_17_x86_64.manylinux2014_x86_64"
+    # can contain multiple sub-tags separated by ".". Check each sub-tag and
+    # each target platform for a suffix match (the arch part).
+    sub_tags = platform_tag.split(".")
+    for target in target_platforms:
+        # Extract the arch from the target, e.g. "linux_x86_64" → "x86_64"
+        arch = target.split("_", 1)[1] if "_" in target else target
+        for sub in sub_tags:
+            if sub == target or sub.endswith(f"_{arch}"):
+                return True
+
+    return False
+
+
+# ---------------------------------------------------------------------------
+# Task 6 — RHOAI index loader
+# ---------------------------------------------------------------------------
+
+
+class RhoaiIndex:
+    """RHOAI simple index with lazy per-package fetching.
+
+    The root page is downloaded eagerly (to learn which packages exist),
+    but individual package pages are fetched on-demand and cached.
+    """
+
+    def __init__(self, index_url: str, python_version: str, platforms: Sequence[str]) -> None:
+        """Initialize with the RHOAI simple index URL, target Python version, and platforms."""
+        self.index_url = index_url.rstrip("/") + "/"
+        self.python_version = python_version
+        self.platforms = list(platforms)
+        self._parser = SimpleIndexParser()
+        self._known_packages: set[str] = set()
+        self._packages: dict[str, dict[str, dict[str, tuple[str, str]]]] = {}
+
+    def _fetch_url(self, url: str) -> str:
+        """Fetch *url* with retry (3 attempts, exponential backoff)."""
+        last_exc: Exception | None = None
+        for attempt in range(3):
+            try:
+                with urllib.request.urlopen(url, timeout=30) as resp:
+                    return str(resp.read().decode())
+            except Exception as exc:
+                last_exc = exc
+                logger.debug("Fetch %s attempt %d failed: %s", url, attempt + 1, exc)
+                time.sleep(2**attempt)
+        raise RuntimeError(f"Failed to fetch {url} after 3 attempts") from last_exc
+
+    def load(self) -> None:
+        """Download root page to learn which packages exist on RHOAI."""
+        root_html = self._fetch_url(self.index_url)
+        package_names = self._parser.parse_root(root_html)
+        self._known_packages = {normalize_name(n) for n in package_names}
+        logger.info("RHOAI index: %d packages available", len(self._known_packages))
+
+    def _ensure_loaded(self, name: str) -> None:
+        """Fetch and cache a package page if not already loaded."""
+        norm = normalize_name(name)
+        if norm in self._packages or norm not in self._known_packages:
+            return
+
+        target_platforms = [f"linux_{p}" for p in self.platforms]
+        page_url = f"{self.index_url}{norm}/"
+        try:
+            page_html = self._fetch_url(page_url)
+        except Exception as exc:
+            logger.warning("Failed to fetch RHOAI page for %s: %s", norm, exc)
+            return
+
+        entries = self._parser.parse_package_page(page_html)
+        versions: dict[str, dict[str, tuple[str, str]]] = {}
+        for entry in entries:
+            if not entry["is_wheel"]:
+                continue
+            if not is_wheel_compatible(
+                entry["python_tag"],
+                entry["platform_tag"],
+                self.python_version,
+                target_platforms,
+                abi_tag=entry.get("abi_tag", ""),
+            ):
+                continue
+
+            ver = entry["version"]
+            if ver not in versions:
+                versions[ver] = {}
+
+            plat = entry["platform_tag"]
+            matched_arch = self._match_arch(plat, target_platforms)
+            if matched_arch:
+                versions[ver][matched_arch] = (entry["filename"], entry["sha256"])
+
+        if versions:
+            self._packages[norm] = versions
+
+    def _match_arch(self, platform_tag: str, target_platforms: list[str]) -> str | None:
+        """Determine which target arch a platform tag matches."""
+        if platform_tag.lower() in ("any", "none"):
+            return "any"
+        sub_tags = platform_tag.split(".")
+        for target in target_platforms:
+            arch = target.split("_", 1)[1] if "_" in target else target
+            for sub in sub_tags:
+                if sub == target or sub.endswith(f"_{arch}"):
+                    return target
+        return None
+
+    def has_package(self, name: str) -> bool:
+        """Return whether the RHOAI index lists this package name."""
+        return normalize_name(name) in self._known_packages
+
+    def find_best(self, name: str, constraint: str) -> dict[str, Any] | None:
+        """Find latest version satisfying *constraint*.
+
+        Returns ``{"version": str, "platforms": {arch: (filename, sha256)}}``
+        or ``None``.
+        """
+        norm = normalize_name(name)
+        self._ensure_loaded(norm)
+        versions = self._packages.get(norm)
+        if not versions:
+            return None
+
+        candidates = [v for v in versions if version_satisfies(v, constraint)]
+        if not candidates:
+            return None
+
+        best = max(candidates, key=parse_version)
+        return {"version": best, "platforms": versions[best]}
+
+
+# ---------------------------------------------------------------------------
+# Task 7 — PEP 508 marker evaluation & PyPI client
+# ---------------------------------------------------------------------------
+
+_MARKER_ENV_KEYS = {
+    "sys_platform",
+    "os_name",
+    "platform_system",
+    "implementation_name",
+    "python_version",
+    "platform_machine",
+    "extra",
+}
+
+_MARKER_COMPARE_RE = re.compile(
+    r"""^
+    \s*(?P[A-Za-z_][A-Za-z0-9_.]*|'[^']*'|"[^"]*")
+    \s*(?P~=|===|==|!=|>=|<=|>|<|not\s+in|in)
+    \s*(?P[A-Za-z_][A-Za-z0-9_.]*|'[^']*'|"[^"]*")
+    \s*$
+    """,
+    re.VERBOSE,
+)
+
+
+def _eval_marker(marker: str, python_version: str) -> bool:
+    """Simplified PEP 508 marker evaluation for a Linux CPython target."""
+    env = {
+        "sys_platform": "linux",
+        "os_name": "posix",
+        "platform_system": "Linux",
+        "implementation_name": "cpython",
+        "python_version": python_version,
+    }
+
+    marker = marker.strip()
+    if not marker:
+        return True
+
+    or_parts = re.split(r"\s+or\s+", marker)
+    for or_part in or_parts:
+        and_parts = re.split(r"\s+and\s+", or_part)
+        all_true = True
+        for expr in and_parts:
+            if not _eval_single_marker(expr.strip(), env):
+                all_true = False
+                break
+        if all_true:
+            return True
+    return False
+
+
+_MARKER_CMP_OPS: dict[str, Any] = {
+    "==": lambda lv, rv: lv == rv,
+    "!=": lambda lv, rv: lv != rv,
+    ">=": lambda lv, rv: lv >= rv,
+    "<=": lambda lv, rv: lv <= rv,
+    ">": lambda lv, rv: lv > rv,
+    "<": lambda lv, rv: lv < rv,
+    "in": lambda lv, rv: lv in rv,
+    "not in": lambda lv, rv: lv not in rv,
+}
+
+
+def _eval_single_marker(expr: str, env: dict[str, str]) -> bool:
+    """Evaluate a single marker comparison like ``sys_platform == 'linux'``."""
+    m = _MARKER_COMPARE_RE.match(expr)
+    if m is None:
+        return True
+
+    left_raw = m.group("left").strip("'\"")
+    right_raw = m.group("right").strip("'\"")
+    op = re.sub(r"\s+", " ", m.group("op"))
+
+    if left_raw in env:
+        lval, rval = env[left_raw], right_raw
+    elif right_raw in env:
+        lval, rval = left_raw, env[right_raw]
+    else:
+        return True
+
+    check = _MARKER_CMP_OPS.get(op)
+    return bool(check(lval, rval)) if check else True
+
+
+class PypiClient:
+    """Lazy, per-package PyPI client with caching."""
+
+    def __init__(self, python_version: str, platforms: Sequence[str]) -> None:
+        """Initialize with the target Python version and platforms."""
+        self.python_version = python_version
+        self.platforms = list(platforms)
+        self._parser = SimpleIndexParser()
+        self._info_cache: dict[str, dict[str, Any]] = {}
+        self._requires_cache: dict[str, list[tuple[str, str]]] = {}
+
+    def _fetch_url(self, url: str) -> str:
+        """Fetch *url* with retry (3 attempts, exponential backoff)."""
+        last_exc: Exception | None = None
+        for attempt in range(3):
+            try:
+                with urllib.request.urlopen(url, timeout=30) as resp:
+                    return str(resp.read().decode())
+            except Exception as exc:
+                last_exc = exc
+                logger.debug("Fetch %s attempt %d failed: %s", url, attempt + 1, exc)
+                time.sleep(2**attempt)
+        raise RuntimeError(f"Failed to fetch {url} after 3 attempts") from last_exc
+
+    def get_package_info(self, name: str) -> dict[str, dict[str, Any]]:
+        """Fetch and cache the simple index page for *name*.
+
+        Returns ``{version: {"has_sdist": bool, "sdist_hashes": [...],
+        "wheel_hashes": [...], "wheel_files": [...]}}``.
+        """
+        norm = normalize_name(name)
+        if norm in self._info_cache:
+            return self._info_cache[norm]
+
+        url = f"https://pypi.org/simple/{norm}/"
+        html = self._fetch_url(url)
+        entries = self._parser.parse_package_page(html)
+
+        info: dict[str, dict[str, Any]] = {}
+        for entry in entries:
+            ver = entry["version"]
+            if ver not in info:
+                info[ver] = {
+                    "has_sdist": False,
+                    "sdist_hashes": [],
+                    "wheel_hashes": [],
+                    "wheel_files": [],
+                }
+            if entry["is_wheel"]:
+                if entry["sha256"]:
+                    info[ver]["wheel_hashes"].append(entry["sha256"])
+                info[ver]["wheel_files"].append(entry["filename"])
+            else:
+                info[ver]["has_sdist"] = True
+                if entry["sha256"]:
+                    info[ver]["sdist_hashes"].append(entry["sha256"])
+
+        self._info_cache[norm] = info
+        return info
+
+    def get_requires_dist(self, name: str, version: str) -> list[tuple[str, str]]:
+        """Fetch ``Requires-Dist`` from PyPI JSON API.
+
+        Returns ``[(dep_name, spec), ...]``, filtering out extras and markers
+        that don't match the target environment.
+        """
+        cache_key = f"{normalize_name(name)}=={version}"
+        if cache_key in self._requires_cache:
+            return self._requires_cache[cache_key]
+
+        url = f"https://pypi.org/pypi/{name}/{version}/json"
+        text = self._fetch_url(url)
+        data = json.loads(text)
+
+        requires_dist: list[str] = data.get("info", {}).get("requires_dist") or []
+        result: list[tuple[str, str]] = []
+
+        for dep_str in requires_dist:
+            dep_name, spec, marker = _parse_dep_string(dep_str)
+
+            if marker:
+                stripped = marker.replace(" ", "")
+                if "extra==" in stripped or "extra ==" in marker:
+                    continue
+
+            if marker and not _eval_marker(marker, self.python_version):
+                continue
+
+            result.append((dep_name, spec))
+
+        self._requires_cache[cache_key] = result
+        return result
+
+    def find_best(self, name: str, constraint: str) -> dict[str, Any] | None:
+        """Find latest version on PyPI satisfying *constraint*.
+
+        Returns ``{"version": str, "has_sdist": bool, "sdist_hashes": [...],
+        "wheel_hashes": [...], "wheel_files": [...]}`` or ``None``.
+        """
+        info = self.get_package_info(name)
+        candidates = [v for v in info if version_satisfies(v, constraint)]
+        if not candidates:
+            return None
+
+        best = max(candidates, key=parse_version)
+        return {"version": best, **info[best]}
+
+
+# ---------------------------------------------------------------------------
+# Task 8 — Dependency resolver (BFS graph walk)
+# ---------------------------------------------------------------------------
+
+
+class Resolver:
+    """BFS dependency resolver enforcing RHOAI-first policy."""
+
+    def __init__(
+        self,
+        rhoai: RhoaiIndex,
+        pypi: PypiClient,
+        wheel_only_packages: set[str] | None = None,
+    ) -> None:
+        """Initialize with RHOAI and PyPI clients and the wheel-only package set."""
+        self.rhoai = rhoai
+        self.pypi = pypi
+        self.wheel_only = {normalize_name(p) for p in (wheel_only_packages or set())}
+        self.fallback_reasons: dict[str, str] = {}
+
+    def resolve(  # noqa: C901
+        self, direct_deps: list[tuple[str, str]]
+    ) -> dict[str, dict[str, Any]]:
+        """Resolve all transitive dependencies via BFS.
+
+        Returns ``{name: {"version": str, "source": "rhoai"|"pypi", ...}}``.
+        """
+        resolved: dict[str, dict[str, Any]] = {}
+        constraints: dict[str, str] = {}
+        queue: deque[tuple[str, str]] = deque()
+
+        for name, spec in direct_deps:
+            norm = normalize_name(name)
+            constraints[norm] = (
+                merge_constraints(constraints.get(norm), spec)
+                if spec
+                else constraints.get(norm, "")
+            )
+            queue.append((norm, constraints[norm]))
+
+        visited_queue: set[str] = set()
+
+        while queue:
+            name, _constraint_at_enqueue = queue.popleft()
+            norm = normalize_name(name)
+
+            if norm in resolved:
+                current_ver = resolved[norm]["version"]
+                if version_satisfies(current_ver, constraints.get(norm, "")):
+                    continue
+                if resolved[norm]["source"] == "rhoai":
+                    logger.info(
+                        "Constraint conflict for %s (RHOAI %s); falling back to PyPI",
+                        norm,
+                        current_ver,
+                    )
+                    del resolved[norm]
+                    self.fallback_reasons[norm] = (
+                        f"RHOAI version {current_ver} conflicts with "
+                        f"constraint {constraints.get(norm, '')}"
+                    )
+                else:
+                    raise RuntimeError(
+                        f"Constraint conflict for {norm}: resolved {current_ver} "
+                        f"does not satisfy {constraints.get(norm, '')}"
+                    )
+
+            constraint = constraints.get(norm, "")
+
+            rhoai_result = self.rhoai.find_best(norm, constraint)
+            if rhoai_result is not None:
+                resolved[norm] = {
+                    "version": rhoai_result["version"],
+                    "source": "rhoai",
+                    "platforms": rhoai_result["platforms"],
+                }
+            else:
+                pypi_result = self.pypi.find_best(norm, constraint)
+                if pypi_result is None:
+                    raise RuntimeError(
+                        f"Cannot resolve {norm} with constraint "
+                        f"{constraint!r}: not found on RHOAI or PyPI"
+                    )
+                if norm not in self.fallback_reasons:
+                    if self.rhoai.has_package(norm):
+                        self.fallback_reasons[norm] = (
+                            f"RHOAI has {norm} but no version satisfies {constraint!r}"
+                        )
+                    else:
+                        self.fallback_reasons[norm] = "not in RHOAI index"
+                resolved[norm] = {
+                    "version": pypi_result["version"],
+                    "source": "pypi",
+                    "has_sdist": pypi_result["has_sdist"],
+                    "sdist_hashes": pypi_result["sdist_hashes"],
+                    "wheel_hashes": pypi_result["wheel_hashes"],
+                    "wheel_files": pypi_result["wheel_files"],
+                }
+
+            pinned_version = resolved[norm]["version"]
+            visit_key = f"{norm}=={pinned_version}"
+            if visit_key in visited_queue:
+                continue
+            visited_queue.add(visit_key)
+
+            try:
+                trans_deps = self.pypi.get_requires_dist(norm, pinned_version)
+            except Exception as exc:
+                logger.warning("Could not fetch deps for %s==%s: %s", norm, pinned_version, exc)
+                continue
+
+            for dep_name, dep_spec in trans_deps:
+                dep_norm = normalize_name(dep_name)
+                if dep_spec:
+                    constraints[dep_norm] = merge_constraints(constraints.get(dep_norm), dep_spec)
+                elif dep_norm not in constraints:
+                    constraints[dep_norm] = ""
+                queue.append((dep_norm, constraints[dep_norm]))
+
+        return resolved
+
+
+# ---------------------------------------------------------------------------
+# Task 9 — Classifier
+# ---------------------------------------------------------------------------
+
+
+def classify_packages(
+    resolved: dict[str, dict[str, Any]],
+    wheel_only: set[str],
+) -> dict[str, dict[str, dict[str, Any]]]:
+    """Classify resolved packages into output buckets.
+
+    Returns ``{"rhoai_wheel": {...}, "pypi_sdist": {...}, "pypi_wheel": {...}}``.
+    """
+    wheel_only_norm = {normalize_name(p) for p in wheel_only}
+
+    buckets: dict[str, dict[str, dict[str, Any]]] = {
+        "rhoai_wheel": {},
+        "pypi_sdist": {},
+        "pypi_wheel": {},
+    }
+
+    for name, info in resolved.items():
+        norm = normalize_name(name)
+        if info["source"] == "rhoai":
+            buckets["rhoai_wheel"][norm] = info
+        elif norm in wheel_only_norm:
+            buckets["pypi_wheel"][norm] = info
+        elif info.get("has_sdist", False):
+            buckets["pypi_sdist"][norm] = info
+        else:
+            logger.warning(
+                "Package %s==%s has no sdist on PyPI; auto-promoting to "
+                "pypi_wheel. Consider adding it to pypi_wheel_only.txt.",
+                norm,
+                info["version"],
+            )
+            buckets["pypi_wheel"][norm] = info
+
+    return buckets
+
+
+# ---------------------------------------------------------------------------
+# Task 10 — Output writer: hashed requirements files
+# ---------------------------------------------------------------------------
+
+
+def write_hashed_requirements(
+    packages: dict[str, dict[str, Any]],
+    output_path: str,
+    index_url: str,
+) -> None:
+    """Write a pip-compatible hashed requirements file.
+
+    *packages* maps ``{name: info}`` where *info* has the fields produced by
+    the resolver (``version``, and either ``platforms`` for RHOAI or
+    ``sdist_hashes`` / ``wheel_hashes`` / ``wheel_files`` for PyPI).
+    """
+    lines: list[str] = [f"--index-url {index_url}\n"]
+
+    for name in sorted(packages):
+        info = packages[name]
+        version = info["version"]
+
+        hashes: set[str] = set()
+
+        # RHOAI packages store hashes per platform
+        if "platforms" in info:
+            for _arch, (_, sha) in info["platforms"].items():
+                if sha:
+                    hashes.add(sha)
+
+        # PyPI packages store hashes in flat lists
+        for key in ("sdist_hashes", "wheel_hashes"):
+            for sha in info.get(key, []):
+                if sha:
+                    hashes.add(sha)
+        # wheel_files entries are filenames, not hashes — but the info dict
+        # may carry per-file hashes via wheel_hashes already.  Nothing extra
+        # to extract here.
+
+        sorted_hashes = sorted(hashes)
+        if not sorted_hashes:
+            raise RuntimeError(
+                f"No hashes collected for {name}=={version} while writing {output_path}"
+            )
+        lines.append(f"{name}=={version} \\\n")
+        hash_lines = [f"    --hash=sha256:{h}" for h in sorted_hashes]
+        lines.append(" \\\n".join(hash_lines) + "\n")
+
+    with open(output_path, "w") as f:
+        f.writelines(lines)
+
+
+# ---------------------------------------------------------------------------
+# Task 11 — Tekton YAML patching
+# ---------------------------------------------------------------------------
+
+
+def patch_tekton_packages(yaml_path: str, package_names: list[str]) -> None:
+    """Replace the ``"packages": "..."`` value in a Tekton pipeline YAML."""
+    with open(yaml_path) as f:
+        content = f.read()
+
+    sorted_names = sorted(package_names)
+    replacement = f'"packages": "{",".join(sorted_names)}"'
+    content = re.sub(r'"packages":\s*"[^"]*"', replacement, content)
+
+    with open(yaml_path, "w") as f:
+        f.write(content)
+
+
+# ---------------------------------------------------------------------------
+# Task 12 — Config loading
+# ---------------------------------------------------------------------------
+
+KONFLUX_DIR = ".konflux"
+
+
+def load_config(profiles_path: str, profile_name: str) -> dict[str, Any]:
+    """Load and merge ``[common]`` + ``[profiles.]`` from a TOML file.
+
+    Returns a dict with keys: ``python_version``, ``platforms``,
+    ``bootstrap_packages``, ``rhoai_index_url``, ``output_suffix``,
+    ``tekton_files``.
+    """
+    with open(profiles_path, "rb") as f:
+        data = tomllib.load(f)
+
+    common = dict(data.get("common", {}))
+    profiles = data.get("profiles", {})
+
+    if profile_name not in profiles:
+        raise KeyError(
+            f"Profile {profile_name!r} not found in {profiles_path}. "
+            f"Available: {', '.join(profiles)}"
+        )
+
+    merged = {**common, **profiles[profile_name]}
+    return merged
+
+
+def load_wheel_only(path: str) -> set[str]:
+    """Load ``.konflux/pypi_wheel_only.txt`` — one package name per line.
+
+    Skips blank lines and ``#`` comments.  Returns normalized names.
+    """
+    names: set[str] = set()
+    with open(path) as f:
+        for line in f:
+            line = line.strip()
+            if not line or line.startswith("#"):
+                continue
+            names.add(normalize_name(line))
+    return names
+
+
+# ---------------------------------------------------------------------------
+# Hybrid resolution: uv pip compile + RHOAI reclassification
+# ---------------------------------------------------------------------------
+
+_UV_COMPILED_RE = re.compile(r"^([a-zA-Z0-9][a-zA-Z0-9._-]*)([=<>!~].*)?$")
+
+
+UV_BINARY = os.environ.get(
+    "UV_BINARY",
+    os.path.join(os.path.dirname(__file__), "..", "..", "uv", "target", "release", "uv"),
+)
+
+
+def uv_resolve(
+    python_version: str,
+    rhoai_index_url: str,
+    suffix: str,
+) -> dict[str, dict[str, Any]]:
+    """Run ``uv pip compile --index-strategy prefer-index`` to resolve deps.
+
+    Returns ``{normalized_name: {"version": str, "index": str}}``
+    where *index* is the URL of the index the package was resolved from.
+    """
+    overrides_file = os.path.join(
+        KONFLUX_DIR,
+        f"requirements.overrides{suffix}.txt" if suffix else "requirements.overrides.txt",
+    )
+    uv = UV_BINARY if os.path.isfile(UV_BINARY) else "uv"
+    cmd = [
+        uv,
+        "pip",
+        "compile",
+        "pyproject.toml",
+        "--python-platform",
+        "x86_64-manylinux_2_28",
+        "--python-version",
+        python_version,
+        "--refresh",
+        "--index",
+        rhoai_index_url,
+        "--default-index",
+        "https://pypi.org/simple/",
+        "--index-strategy",
+        "prefer-index",
+        "--emit-index-annotation",
+        "--no-sources",
+    ]
+    if os.path.exists(overrides_file):
+        cmd += ["--override", overrides_file]
+
+    logger.debug("Running: %s", " ".join(cmd))
+    result = subprocess.run(cmd, capture_output=True, text=True, check=True)
+
+    resolved: dict[str, dict[str, Any]] = {}
+    current_package: str | None = None
+
+    for line in result.stdout.splitlines():
+        line = line.strip()
+        if not line or line.startswith("-"):
+            continue
+
+        m = _UV_COMPILED_RE.match(line)
+        if m and not line.startswith("#"):
+            name = normalize_name(m.group(1))
+            version_spec = (m.group(2) or "").strip()
+            if version_spec.startswith("=="):
+                version = version_spec[2:]
+            else:
+                version = version_spec.lstrip("=")
+            if version:
+                current_package = name
+                resolved[name] = {"version": version, "index": ""}
+        elif "# from " in line and current_package:
+            index_url = line.split("# from ", 1)[1].strip()
+            resolved[current_package]["index"] = index_url
+
+    logger.info("uv resolved %d packages", len(resolved))
+    return resolved
+
+
+def reclassify_with_rhoai(
+    uv_resolved: dict[str, str],
+    rhoai: RhoaiIndex,
+) -> dict[str, dict[str, Any]]:
+    """Reclassify uv-resolved packages using RHOAI-first policy.
+
+    For each package, if RHOAI has a compatible wheel at the resolved version,
+    classify as ``source=rhoai``; otherwise ``source=pypi``.
+    """
+    result: dict[str, dict[str, Any]] = {}
+    rhoai_count = 0
+    pypi_count = 0
+
+    for name, version in sorted(uv_resolved.items()):
+        rhoai_match = rhoai.find_best(name, f"=={version}")
+        if rhoai_match and rhoai_match["version"] == version:
+            result[name] = {
+                "version": version,
+                "source": "rhoai",
+                "platforms": rhoai_match["platforms"],
+            }
+            rhoai_count += 1
+            logger.debug("RHOAI: %s==%s", name, version)
+        else:
+            result[name] = {
+                "version": version,
+                "source": "pypi",
+                "has_sdist": True,
+                "sdist_hashes": [],
+                "wheel_hashes": [],
+                "wheel_files": [],
+            }
+            pypi_count += 1
+            if rhoai.has_package(name):
+                logger.info(
+                    "PyPI: %s==%s (RHOAI has package but not version %s)",
+                    name,
+                    version,
+                    version,
+                )
+            else:
+                logger.debug("PyPI: %s==%s (not in RHOAI)", name, version)
+
+    logger.info("Reclassified: %d RHOAI, %d PyPI", rhoai_count, pypi_count)
+    return result
+
+
+def _fetch_hashes_for_pypi_packages(
+    resolved: dict[str, dict[str, Any]],
+    pypi: PypiClient,
+) -> None:
+    """Populate sdist/wheel hashes for PyPI-sourced packages in-place."""
+    for name, info in resolved.items():
+        if info["source"] != "pypi":
+            continue
+        version = info["version"]
+        try:
+            pkg_info = pypi.get_package_info(name)
+        except Exception as exc:
+            logger.warning("Could not fetch PyPI info for %s: %s", name, exc)
+            continue
+        ver_info = pkg_info.get(version, {})
+        info["has_sdist"] = ver_info.get("has_sdist", False)
+        info["sdist_hashes"] = ver_info.get("sdist_hashes", [])
+        info["wheel_hashes"] = ver_info.get("wheel_hashes", [])
+        info["wheel_files"] = ver_info.get("wheel_files", [])
+
+
+# ---------------------------------------------------------------------------
+# Main entrypoint
+# ---------------------------------------------------------------------------
+
+
+def main() -> None:  # noqa: C901
+    """Resolve dependencies with RHOAI-first policy and write Hermeto output files."""
+    parser = argparse.ArgumentParser(
+        description="Policy-driven dependency resolver for Hermeto/Cachi2 builds."
+    )
+    parser.add_argument("--profile", required=True, help="Build profile (cpu|cuda)")
+    verbosity = parser.add_mutually_exclusive_group()
+    verbosity.add_argument("--verbose", action="store_true", help="Verbose logging")
+    verbosity.add_argument("--quiet", action="store_true", help="Errors only")
+    args = parser.parse_args()
+
+    if args.verbose:
+        logging.basicConfig(level=logging.DEBUG)
+    elif args.quiet:
+        logging.basicConfig(level=logging.ERROR)
+    else:
+        logging.basicConfig(level=logging.INFO)
+
+    profiles_path = os.path.join(KONFLUX_DIR, "profiles.toml")
+    config = load_config(profiles_path, args.profile)
+
+    wheel_only_path = os.path.join(KONFLUX_DIR, "pypi_wheel_only.txt")
+    wheel_only = load_wheel_only(wheel_only_path)
+
+    python_version = config["python_version"]
+    platforms = config["platforms"]
+    rhoai_index_url = config["rhoai_index_url"]
+    suffix = config.get("output_suffix", "")
+    tekton_files = config.get("tekton_files", [])
+    bootstrap_packages = config.get("bootstrap_packages", [])
+
+    # Step 1: Resolve via uv with prefer-index strategy
+    logger.info("Running uv pip compile --index-strategy prefer-index …")
+    uv_resolved = uv_resolve(python_version, rhoai_index_url, suffix)
+
+    # Step 2: Build resolved dict from uv output + index annotations
+    resolved: dict[str, dict[str, Any]] = {}
+    for name, info in uv_resolved.items():
+        index = info["index"]
+        is_rhoai = "packages.redhat.com" in index if index else False
+        if is_rhoai:
+            resolved[name] = {
+                "version": info["version"],
+                "source": "rhoai",
+                "platforms": {},
+            }
+        else:
+            resolved[name] = {
+                "version": info["version"],
+                "source": "pypi",
+                "has_sdist": True,
+                "sdist_hashes": [],
+                "wheel_hashes": [],
+                "wheel_files": [],
+            }
+
+    rhoai_count = sum(1 for v in resolved.values() if v["source"] == "rhoai")
+    pypi_count = len(resolved) - rhoai_count
+    logger.info("Classified: %d RHOAI, %d PyPI", rhoai_count, pypi_count)
+
+    # Step 3: Fetch hashes — RHOAI from the RHOAI index, PyPI from PyPI
+    logger.info("Fetching hashes …")
+    rhoai = RhoaiIndex(rhoai_index_url, python_version, platforms)
+    rhoai.load()
+    for name, info in resolved.items():
+        if info["source"] == "rhoai":
+            match = rhoai.find_best(name, f"=={info['version']}")
+            if match:
+                info["platforms"] = match["platforms"]
+
+    pypi = PypiClient(python_version, platforms)
+    _fetch_hashes_for_pypi_packages(resolved, pypi)
+
+    # Step 5: Classify into buckets
+    buckets = classify_packages(resolved, wheel_only)
+
+    # Step 6: Write hashed requirements files
+    write_hashed_requirements(
+        buckets["rhoai_wheel"],
+        os.path.join(KONFLUX_DIR, f"requirements.hashes.wheel{suffix}.txt"),
+        rhoai_index_url,
+    )
+    write_hashed_requirements(
+        buckets["pypi_sdist"],
+        os.path.join(KONFLUX_DIR, f"requirements.hashes.source{suffix}.txt"),
+        "https://pypi.org/simple",
+    )
+    write_hashed_requirements(
+        buckets["pypi_wheel"],
+        os.path.join(KONFLUX_DIR, f"requirements.hashes.wheel.pypi{suffix}.txt"),
+        "https://pypi.org/simple",
+    )
+
+    # Step 7: Build dependencies via pybuild-deps
+    sdist_names = list(buckets["pypi_sdist"].keys())
+    build_output = os.path.join(KONFLUX_DIR, f"requirements-build{suffix}.txt")
+    if sdist_names:
+        tmp_sdist_file = os.path.join(KONFLUX_DIR, f"_tmp_sdist_list{suffix}.txt")
+        try:
+            with open(tmp_sdist_file, "w") as f:
+                for name in sorted(sdist_names):
+                    info = buckets["pypi_sdist"][name]
+                    f.write(f"{name}=={info['version']}\n")
+            subprocess.run(
+                [
+                    "uv",
+                    "run",
+                    "pybuild-deps",
+                    "compile",
+                    f"--output-file={build_output}",
+                    tmp_sdist_file,
+                ],
+                check=True,
+            )
+        finally:
+            if os.path.exists(tmp_sdist_file):
+                os.remove(tmp_sdist_file)
+    else:
+        with open(build_output, "w") as f:
+            f.write("# No sdist packages — no build dependencies needed.\n")
+
+    # Step 9: Patch Tekton pipelines
+    wheel_package_names = (
+        list(buckets["rhoai_wheel"].keys())
+        + list(buckets["pypi_wheel"].keys())
+        + [normalize_name(p) for p in bootstrap_packages]
+    )
+    for tekton_file in tekton_files:
+        if os.path.exists(tekton_file):
+            patch_tekton_packages(tekton_file, wheel_package_names)
+            logger.info("Patched %s", tekton_file)
+        else:
+            logger.warning("Tekton file not found: %s", tekton_file)
+
+    # Summary
+    total = len(resolved)
+    print(f"\n{'='*60}")
+    print(f"Resolution complete ({args.profile} profile)")
+    print(f"{'='*60}")
+    print(f"  RHOAI wheels:          {len(buckets['rhoai_wheel']):>4} packages")
+    print(f"  PyPI sdist:            {len(buckets['pypi_sdist']):>4} packages")
+    print(f"  PyPI wheel (last resort): {len(buckets['pypi_wheel']):>4} packages")
+    print(f"  Total:                 {total:>4} packages")
+    print()
+    print(f"  Hashed wheel (RHOAI):  .konflux/requirements.hashes.wheel{suffix}.txt")
+    print(f"  Hashed source (PyPI):  .konflux/requirements.hashes.source{suffix}.txt")
+    print(f"  Hashed wheel (PyPI):   .konflux/requirements.hashes.wheel.pypi{suffix}.txt")
+    print(f"  Build deps:            {build_output}")
+    print()
+    print("Remember to commit output files and push the changes.")
+
+
+if __name__ == "__main__":
+    main()