diff --git a/.konflux/requirements.hashes.source.txt b/.konflux/requirements.hashes.source.txt index d7eb66756..9a031ad7c 100644 --- a/.konflux/requirements.hashes.source.txt +++ b/.konflux/requirements.hashes.source.txt @@ -1,13 +1,17 @@ # 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 - +# uv pip compile pyproject.toml --generate-hashes --output-file .konflux/requirements.hashes.source.txt a2a-sdk==0.3.26 \ --hash=sha256:44068e2d037afbb07ab899267439e9bc7eaa7ac2af94f1e8b239933c993ad52d \ --hash=sha256:754e0573f6d33b225c1d8d51f640efa69cbbed7bdfb06ce9c3540ea9f58d4a91 -accelerate==1.13.0 \ - --hash=sha256:cf1a3efb96c18f7b152eb0fa7490f3710b19c3f395699358f08decca2b8b62e0 \ - --hash=sha256:d631b4e0f5b3de4aff2d7e9e6857d164810dfc3237d54d017f075122d057b236 + # via lightspeed-stack (pyproject.toml) +aiofile==3.11.1 \ + --hash=sha256:1f91912c6643d2a4e49ca4ae3514f0bf3867ce948a36d99a6411b8f4755f4cf9 \ + --hash=sha256:ce77d14ac07f77bc2b757834a5c129321f3f705c474593deed5ab209079a52c9 + # via py-key-value-aio +aiohappyeyeballs==2.7.1 \ + --hash=sha256:065665c041c42a5938ed220bdcd7230f22527fbec085e1853d2402c8a3615d9d \ + --hash=sha256:9243213661e29250eb41368e5daa826fc017156c3b8a11440826b2e3ed376472 + # via aiohttp aiohttp==3.13.5 \ --hash=sha256:019a67772e034a0e6b9b17c13d0a8fe56ad9fb150fc724b7f3ffd3724288d9e5 \ --hash=sha256:02222e7e233295f40e011c1b00e3b0bd451f22cf853a0304c3595633ee47da4b \ @@ -129,64 +133,284 @@ aiohttp==3.13.5 \ --hash=sha256:fceedde51fbd67ee2bcc8c0b33d0126cc8b51ef3bbde2f86662bd6d5a6f10ec5 \ --hash=sha256:fe6970addfea9e5e081401bcbadf865d2b6da045472f58af08427e108d618540 \ --hash=sha256:fee86b7c4bd29bdaf0d53d14739b08a106fdda809ca5fe032a15f52fae5fe254 + # via + # lightspeed-stack (pyproject.toml) + # fsspec + # kubernetes + # litellm + # llama-stack +aiosignal==1.4.0 \ + --hash=sha256:053243f8b92b990551949e63930a839ff0cf0b0ebbe0597b0f3fb19e1a0fe82e \ + --hash=sha256:f47eecd9468083c2029cc99945502cb7708b082c232f9aca65da147157b251c7 + # via aiohttp +aiosqlite==0.22.1 \ + --hash=sha256:043e0bd78d32888c0a9ca90fc788b38796843360c855a7262a532813133a0650 \ + --hash=sha256:21c002eb13823fad740196c5a2e9d8e62f6243bd9e7e4a1f87fb5e44ecb4fceb + # via + # lightspeed-stack (pyproject.toml) + # llama-stack +annotated-doc==0.0.4 \ + --hash=sha256:571ac1dc6991c450b25a9c2d84a3705e2ae7a53467b5d111c24fa8baabbed320 \ + --hash=sha256:fbcda96e87e9c92ad167c2e53839e57503ecfda18804ea28102353485033faa4 + # via fastapi +annotated-types==0.7.0 \ + --hash=sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53 \ + --hash=sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89 + # via pydantic +anthropic==0.116.0 \ + --hash=sha256:5fc248fbb9fe03ef686f8a774f81586bca31a043260aab88b387ea3660f4a396 \ + --hash=sha256:6c0a7698e8d652455da3499978279bb2588c7264d0a35be3666009a4258c8256 + # via pydantic-ai-slim +anyio==4.14.1 \ + --hash=sha256:4e5533c5b8ff0a24f5d7a176cbe6877129cd183893f66b537f8f227d10527d72 \ + --hash=sha256:8d648a3544c1a700e3ff78615cd679e4c5c3f149904287e73687b2596963629e + # via + # anthropic + # google-genai + # httpx + # httpx2 + # llama-stack-client + # mcp + # openai + # py-key-value-aio + # pydantic-ai-skills + # pydantic-evals + # sse-starlette + # starlette +argcomplete==3.7.0 \ + --hash=sha256:afde224f753f874807b1dc1414e883ab8fe0cda9c04807b6047dcb8e1ac23913 \ + --hash=sha256:d8f0f22d2a8a7caa383be1e22b6caf1ecaf0ebd10d8f83cc125e36540c95830c + # via pydantic-ai-slim +asyncpg==0.31.0 \ + --hash=sha256:027eaa61361ec735926566f995d959ade4796f6a49d3bde17e5134b9964f9ba8 \ + --hash=sha256:04d19392716af6b029411a0264d92093b6e5e8285ae97a39957b9a9c14ea72be \ + --hash=sha256:0b17c89312c2f4ccea222a3a6571f7df65d4ba2c0e803339bfc7bed46a96d3be \ + --hash=sha256:0bfbcc5b7ffcd9b75ab1558f00db2ae07db9c80637ad1b2469c43df79d7a5ae2 \ + --hash=sha256:0c89ccf741c067614c9b5fc7f1fc6f3b61ab05ae4aaa966e6fd6b93097c7d20d \ + --hash=sha256:12b3b2e39dc5470abd5e98c8d3373e4b1d1234d9fbdedf538798b2c13c64460a \ + --hash=sha256:18c83b03bc0d1b23e6230f5bf8d4f217dc9bc08644ce0502a9d91dc9e634a9c7 \ + --hash=sha256:19857a358fc811d82227449b7ca40afb46e75b33eb8897240c3839dd8b744218 \ + --hash=sha256:1b41f1afb1033f2b44f3234993b15096ddc9cd71b21a42dbd87fc6a57b43d65d \ + --hash=sha256:22bc525ebbdc24d1261ecbf6f504998244d4e3be1721784b5f64664d61fbe602 \ + --hash=sha256:22be6e02381bab3101cd502d9297ac71e2f966c86e20e78caead9934c98a8af6 \ + --hash=sha256:2657204552b75f8288de08ca60faf4a99a65deef3a71d1467454123205a88fab \ + --hash=sha256:2d076d42eb583601179efa246c5d7ae44614b4144bc1c7a683ad1222814ed095 \ + --hash=sha256:334dec28cf20d7f5bb9e45b39546ddf247f8042a690bff9b9573d00086e69cb5 \ + --hash=sha256:37a58919cfef2448a920df00d1b2f821762d17194d0dbf355d6dde8d952c04f9 \ + --hash=sha256:37fc6c00a814e18eef51833545d1891cac9aa69140598bb076b4cd29b3e010b9 \ + --hash=sha256:3b1fbcb0e396a5ca435a8826a87e5c2c2cc0c8c68eb6fadf82168056b0e53a8c \ + --hash=sha256:3df118d94f46d85b2e434fd62c84cb66d5834d5a890725fe625f498e72e4d5ec \ + --hash=sha256:3faa62f997db0c9add34504a68ac2c342cfee4d57a0c3062fcf0d86c7f9cb1e8 \ + --hash=sha256:480c4befbdf079c14c9ca43c8c5e1fe8b6296c96f1f927158d4f1e750aacc047 \ + --hash=sha256:54a64f91839ba59008eccf7aad2e93d6e3de688d796f35803235ea1c4898ae1e \ + --hash=sha256:5a4af56edf82a701aece93190cc4e094d2df7d33f6e915c222fb09efbb5afc24 \ + --hash=sha256:6d11b198111a72f47154fa03b85799f9be63701e068b43f84ac25da0bda9cb31 \ + --hash=sha256:72d6bdcbc93d608a1158f17932de2321f68b1a967a13e014998db87a72ed3186 \ + --hash=sha256:795416369c3d284e1837461909f58418ad22b305f955e625a4b3a2521d80a5f3 \ + --hash=sha256:831712dd3cf117eec68575a9b50da711893fd63ebe277fc155ecae1c6c9f0f61 \ + --hash=sha256:8df714dba348efcc162d2adf02d213e5fab1bd9f557e1305633e851a61814a7a \ + --hash=sha256:8ea599d45c361dfbf398cb67da7fd052affa556a401482d3ff1ee99bd68808a1 \ + --hash=sha256:9322b563e2661a52e3cdbc93eed3be7748b289f792e0011cb2720d278b366ce2 \ + --hash=sha256:98cc158c53f46de7bb677fd20c417e264fc02b36d901cc2a43bd6cb0dc6dbfd2 \ + --hash=sha256:9ea33213ac044171f4cac23740bed9a3805abae10e7025314cfbd725ec670540 \ + --hash=sha256:a429e842a3a4b4ea240ea52d7fe3f82d5149853249306f7ff166cb9948faa46c \ + --hash=sha256:a8d758dac9d2e723e173d286ef5e574f0b350ec00e9186fce84d0fc5f6a8e6b8 \ + --hash=sha256:aad7a33913fb8bcb5454313377cc330fbb19a0cd5faa7272407d8a0c4257b671 \ + --hash=sha256:b44c31e1efc1c15188ef183f287c728e2046abb1d26af4d20858215d50d91fad \ + --hash=sha256:ba5f8886e850882ff2c2ace5732300e99193823e8107e2c53ef01c1ebfa1e85d \ + --hash=sha256:bb223567dea5f47c45d347f2bde5486be8d9f40339f27217adb3fb1c3be51298 \ + --hash=sha256:bc2b685f400ceae428f79f78b58110470d7b4466929a7f78d455964b17ad1008 \ + --hash=sha256:bd4107bb7cdd0e9e65fae66a62afd3a249663b844fa34d479f6d5b3bef9c04c3 \ + --hash=sha256:bd5b6efff3c17c3202d4b37189969acf8927438a238c6257f66be3c426beba20 \ + --hash=sha256:bdb957706da132e982cc6856bb2f7b740603472b54c3ebc77fe60ea3e57e1bd2 \ + --hash=sha256:bef056aa502ee34204c161c72ca1f3c274917596877f825968368b2c33f585f4 \ + --hash=sha256:c0807be46c32c963ae40d329b3a686356e417f674c976c07fa49f1b30303f109 \ + --hash=sha256:c0e0822b1038dc7253b337b0f3f676cadc4ac31b126c5d42691c39691962e403 \ + --hash=sha256:c1a9c5b71d2371a2290bc93336cd05ba4ec781683cab292adbddc084f89443c6 \ + --hash=sha256:c1e1ab5bc65373d92dd749d7308c5b26fb2dc0fbe5d3bf68a32b676aa3bcd24a \ + --hash=sha256:c204fab1b91e08b0f47e90a75d1b3c62174dab21f670ad6c5d0f243a228f015b \ + --hash=sha256:c989386c83940bfbd787180f2b1519415e2d3d6277a70d9d0f0145ac73500735 \ + --hash=sha256:cea3a0b2a14f95834cee29432e4ddc399b95700eb1d51bbc5bfee8f31fa07b2b \ + --hash=sha256:dc5f2fa9916f292e5c5c8b2ac2813763bcd7f58e130055b4ad8a0531314201ab \ + --hash=sha256:e009abc333464ff18b8f6fd146addffd9aaf63e79aa3bb40ab7a4c332d0c5e9e \ + --hash=sha256:e5d5098f63beeae93512ee513d4c0c53dc12e9aa2b7a1af5a81cddf93fe4e4da \ + --hash=sha256:e6974f36eb9a224d8fb428bcf66bd411aa12cf57c2967463178149e73d4de366 \ + --hash=sha256:ebb3cde58321a1f89ce41812be3f2a98dddedc1e76d0838aba1d724f1e4e1a95 \ + --hash=sha256:eee690960e8ab85063ba93af2ce128c0f52fd655fdff9fdb1a28df01329f031d \ + --hash=sha256:f6b56b91bb0ffc328c4e3ed113136cddd9deefdf5f79ab448598b9772831df44 \ + --hash=sha256:f890de5e1e4f7e14023619399a471ce4b71f5418cd67a51853b9910fdfa73696 + # via + # lightspeed-stack (pyproject.toml) + # llama-stack attrs==26.1.0 \ --hash=sha256:c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309 \ --hash=sha256:d03ceb89cb322a8fd706d4fb91940737b6642aa36998fe130a9bc96c985eff32 + # via + # aiohttp + # jsonschema + # referencing authlib==1.7.2 \ --hash=sha256:2cea25fefcd4e7173bdf1372c0afc265c8034b23a8cd5dcb6a9164b826c64231 \ --hash=sha256:3e1faedc9d87e7d56a164eca3ccb6ace0d61b94abe83e92242f8dc8bba9b4a9f -autoevals==0.2.0 \ - --hash=sha256:83546e86f716d5bea64de39db2e99f5eaeadd70d3f72481a75b576bc511e21d6 \ - --hash=sha256:dec041989ce85d6043ba30efa959527c213a62f768dc54e77d41364510e1acb6 + # via + # lightspeed-stack (pyproject.toml) + # fastmcp-slim azure-core==1.41.0 \ --hash=sha256:522b4011e8180b1a3dcd2024396a4e7fe9ac37fb8597db47163d230b5efe892d \ --hash=sha256:f46ff5dfcd230f25cf1c19e8a34b8dc08a337b2503e268bb600a16c00db8ad5a + # via + # lightspeed-stack (pyproject.toml) + # azure-identity azure-identity==1.25.3 \ --hash=sha256:ab23c0d63015f50b630ef6c6cf395e7262f439ce06e5d07a64e874c724f8d9e6 \ --hash=sha256:f4d0b956a8146f30333e071374171f3cfa7bdb8073adb8c3814b65567aa7447c + # via lightspeed-stack (pyproject.toml) +beartype==0.22.9 \ + --hash=sha256:8f82b54aa723a2848a56008d18875f91c1db02c32ef6a62319a002e3e25a975f \ + --hash=sha256:d16c9bbc61ea14637596c5f6fbff2ee99cbe3573e46a716401734ef50c3060c2 + # via py-key-value-aio cachetools==7.1.4 \ --hash=sha256:323dc4127934744db5b54eb4924482d7edafbf9554e820d1531c2e08c0e4ef54 \ --hash=sha256:437f55a4e0c1b01a4f3077cc470e6991d47430970e36fbcb77e2be0df4fc1cd6 + # via + # lightspeed-stack (pyproject.toml) + # py-key-value-aio +caio==0.9.25 \ + --hash=sha256:06c0bb02d6b929119b1cfbe1ca403c768b2013a369e2db46bfa2a5761cf82e40 \ + --hash=sha256:0998210a4d5cd5cb565b32ccfe4e53d67303f868a76f212e002a8554692870e6 \ + --hash=sha256:0ba16aa605ccb174665357fc729cf500679c2d94d5f1458a6f0d5ca48f2060a7 \ + --hash=sha256:16498e7f81d1d0f5a4c0ad3f2540e65fe25691376e0a5bd367f558067113ed10 \ + --hash=sha256:1a177d4777141b96f175fe2c37a3d96dec7911ed9ad5f02bac38aaa1c936611f \ + --hash=sha256:44a6b58e52d488c75cfaa5ecaa404b2b41cc965e6c417e03251e868ecd5b6d77 \ + --hash=sha256:4fa69eba47e0f041b9d4f336e2ad40740681c43e686b18b191b6c5f4c5544bfb \ + --hash=sha256:628a630eb7fb22381dd8e3c8ab7f59e854b9c806639811fc3f4310c6bd711d79 \ + --hash=sha256:6bebf6f079f1341d19f7386db9b8b1f07e8cc15ae13bfdaff573371ba0575d69 \ + --hash=sha256:97084e4e30dfa598449d874c4d8e0c8d5ea17d2f752ef5e48e150ff9d240cd64 \ + --hash=sha256:9ed3cfb28c0e99fec5e208c934e5c157d0866aa9c32aa4dc5e9b6034af6286b7 \ + --hash=sha256:ab52e5b643f8bbd64a0605d9412796cd3464cb8ca88593b13e95a0f0b10508ae \ + --hash=sha256:ae3d62587332bce600f861a8de6256b1014d6485cfd25d68c15caf1611dd1f7c \ + --hash=sha256:bf61d7d0c4fd10ffdd98ca47f7e8db4d7408e74649ffaf4bef40b029ada3c21b \ + --hash=sha256:bf84bfa039f25ad91f4f52944452a5f6f405e8afab4d445450978cd6241d1478 \ + --hash=sha256:ca6c8ecda611478b6016cb94d23fd3eb7124852b985bdec7ecaad9f3116b9619 \ + --hash=sha256:d6956d9e4a27021c8bd6c9677f3a59eb1d820cc32d0343cea7961a03b1371965 \ + --hash=sha256:d6c2a3411af97762a2b03840c3cec2f7f728921ff8adda53d7ea2315a8563451 \ + --hash=sha256:db9b5681e4af8176159f0d6598e73b2279bb661e718c7ac23342c550bd78c241 \ + --hash=sha256:fab6078b9348e883c80a5e14b382e6ad6aabbc4429ca034e76e730cf464269db \ + --hash=sha256:fb7ff95af4c31ad3f03179149aab61097a71fd85e05f89b4786de0359dffd044 \ + --hash=sha256:fc220b8533dcf0f238a6b1a4a937f92024c71e7b10b5a2dfc1c73604a25709bc + # via aiofile 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 + # via + # httpcore + # httpx + # kubernetes + # oci + # requests + # sentry-sdk +cffi==2.1.0 \ + --hash=sha256:02cb7ff33ded4f1532476731f89ede53e2e488a8e6205515a82144246ffa7dcc \ + --hash=sha256:03e9810d18c646077e501f661b682fbf5dee4676048527ca3cffe66faa9960dd \ + --hash=sha256:0520e1f4c35f44e209cbbb421b67eec42e6a157f59444dfb6058874ff3610e5d \ + --hash=sha256:0582a58f3051372229ca8e7f5f589f9e5632678208d8636fea3676711fdf7fe5 \ + --hash=sha256:0611e7ebf90573a535ebdc33ae9da222d037853983e13359f580fab781ca017f \ + --hash=sha256:0a42c688d19fca6e095a53c6a6e2295a5b050a8b289f109adab02a9e61a25de6 \ + --hash=sha256:0a96b74cda968eebbad56d973efe5098974f0a9fb323865bf99ea1fd24e3e64c \ + --hash=sha256:10537b1df4967ca26d21e5072d7d54188354483b91dc75058968d3f0cf13fbda \ + --hash=sha256:11b3fb55f4f8ad92274ed26705f65d8f91457de71f5380061eb6d125a768fecd \ + --hash=sha256:15faec4adfff450819f3aee0e2e02c812de6edb88203aa58807955db2003472a \ + --hash=sha256:164bff1657b2a74f0b6d54e11c9b375bc97b931f2ca9c43fcf875838da1570dd \ + --hash=sha256:1854b724d00f6654c742097d5387569021be12d3a0f770eae1df8f8acfcc6acd \ + --hash=sha256:19c54ac121cad98450b4896fa9a43ee0180d57bc4bc911a33db6cab1efab6cd3 \ + --hash=sha256:1b96bfe2c4bd825681b7d311ad6d9b7280a091f43e8f63da5729638083cd3bfb \ + --hash=sha256:1e9f50d192a3e525b15a75ab5114e442d83d657b7ec29182a991bc9a88fd3a66 \ + --hash=sha256:1ff3456eab0d889592d1936d6125bbfbc7ae4d3354a700f8bd80450a66445d4d \ + --hash=sha256:2282cd5e38aa8accd03e99d1256af8411c84cdbee6a89d841b563fdbd1f3e50f \ + --hash=sha256:276f20fffd7b396e12516ba8edf9509210ac248cbbc5acbc39cd512f9f59ebe6 \ + --hash=sha256:2b71d409cccee78310ab5dec549aed052aaea483346e282c7b02362596e01bb0 \ + --hash=sha256:2e9dabb9abcb7ad15938c7196ad5c1718a4e6d33cc79b4c0209bdb64c4a54a5c \ + --hash=sha256:30b65779d598c370374fefabf138d456fd6f3216bfa7bedfab1ba82025b0cd93 \ + --hash=sha256:33eb1ad83ebe8f313e0df035c406227d55a79456704a863fad9842136af5ad7d \ + --hash=sha256:35aaea0c7ee0e58a5cd8c2fd1a48fdf7ece0d2699b7ecdda08194e9ce5dd9b3d \ + --hash=sha256:3681e031db29958a7502f5c0c9d6bbc4c36cb20f7b104086fa642d1799631ff8 \ + --hash=sha256:379de10ce1ba048b1448599d1b37b24caee16309d1ac98d3982fc997f768700b \ + --hash=sha256:37f525a7e7e50c017fdebe58b787be310ad59357ae43a053943a6e1a6c526001 \ + --hash=sha256:3b926723c13eba9f81d2ef3820d63aeceec3b2d4639906047bf675cb8a7a500d \ + --hash=sha256:3d7f118b5adbfdfead90c25822690b02bc8074fba949bb7858bec4ebd55adb43 \ + --hash=sha256:46b1c8db8f6122420f32d02fffb924c2fe9bc772d228c7c711748fff56aabb2b \ + --hash=sha256:47ff3a8bfd8cb9da1af7524b965127095055654c177fcfc7578debcb015eecd0 \ + --hash=sha256:4d433a51f1870e43a13b6732f92aaf540ff77c2015097c78556f75a2d6c030e0 \ + --hash=sha256:4f26194e3d95e06501b942642855aed4f953d55e95d7d01b7c4483db3ecff458 \ + --hash=sha256:510aeeeac94811b138077451da1fb18b308a5feab47dd2b603af55804155e1c8 \ + --hash=sha256:5972433ad71a9e46516584ef60a0fda12d9dc459938d1539c3ddecf9bdc1368d \ + --hash=sha256:5ecbd0499275d57506d397eebe1981cee87b47fcd9ef5c22cab7ed7644a39a94 \ + --hash=sha256:6274dcb2d15cef48daa73ed1be5a40d501d74dccd0cd6db364776d12cb6ba022 \ + --hash=sha256:63960549e4f8dc41e31accb97b975abaecfc44c03e396c093a6436763c2ea7db \ + --hash=sha256:64c753a0f87a256020004f37a1c8c02c480e725f910f0b2a0f3f07debd1b2479 \ + --hash=sha256:6af371f3767faeffc6ac1ef57cdfd25844403e9d3f476c5537caee499de96376 \ + --hash=sha256:6ca4919c6e4f89aa99c42510b42cf54596892c00b3f9077f6bdd1505e24b9c8d \ + --hash=sha256:6d194185eabd279f1c05ebe3504265ddfc5ad2b58d0714f7db9f01da592e9eb6 \ + --hash=sha256:702c436735fbe99d59ada02a1f65cfc0d31c0ee8b7290912f8fbc5cd1e4b16c3 \ + --hash=sha256:716ff8ec22f20b4d988b12884086bcef0fc99737043e503f7a3935a6be99b1ea \ + --hash=sha256:762f99479dcb369f60ab9017ad4ab97a36a1dd7c1ee5a3b15db0f4b8659120cd \ + --hash=sha256:7762faa47e8ff7eb80bd261d9a7d8eea2d8baa69de5e95b70c1f338bbe712f02 \ + --hash=sha256:78474632761faa0fb96f30b1c928c84ebcf68713cbb80d15bab09dfe61640fde \ + --hash=sha256:799416bae98336e400981ff6e532d67d5c709cfb30afb79865a1315f94b0e224 \ + --hash=sha256:7d034dcffa09e9a46c93fa3a3be402096cb5354ac6e41ab8e5cc9cd8b642ad76 \ + --hash=sha256:7d28dff1db6764108bc30788d85d61c876beff416d9a49cb9dd7c5a9f34f5804 \ + --hash=sha256:7d3538f9c0e50670f4deb93dbb696576e60590369cae2faf7de681e597a8a1f1 \ + --hash=sha256:7d5980a3433d4b71a5e120f9dd551403d7824e31e2e67124fe2769c404c06913 \ + --hash=sha256:7ea6b3e2c4250ff1de21c630fe72d0f63eb95c2c32ffbf64a358cf4a8836d714 \ + --hash=sha256:86cf8755a791f72c85dc287128cc62d4f24d392e3f1e15837245623f4a33cccc \ + --hash=sha256:88023dfe18799507b73f1dbb0d14326a17465de1bc9c9c7655c22845e9ddc3a2 \ + --hash=sha256:89095c1968b4ba8285840e131bf2891b09ae137fe2146905acae0354fbce1b5e \ + --hash=sha256:8d35c139744adb3e727cd51b1a18324bbe44b8bd41bf8322bca4d41289f48eda \ + --hash=sha256:8e74a6135550c4748af665b1b1118b6aab33b1fc6a16f9aff630af107c3b4512 \ + --hash=sha256:8f9ec95b8a043d3dfbc74d9abc6f7baf524dd27a8dc160b0a32ff9cdab650c28 \ + --hash=sha256:90bec57cf82089383bd06a605b3eb8daebf7e5a668520beaf6e327a83a947699 \ + --hash=sha256:95f2954c2c9473d892eca6e0409f3568b37ab62a8eedb122461f73cc273476e3 \ + --hash=sha256:961be50688f7fba2fa65f63712d3b9b341a22311f5253460ce933f52f0de1c8c \ + --hash=sha256:98fff996e983a36d3aa2eca83af40c5821202e7e6f32d13ae94e3d2286f10cfe \ + --hash=sha256:9b8f0f26ca4e7513c534d351eca551947d053fac438f2a04ac96d882909b0d3a \ + --hash=sha256:9d72af0cf10a76a600a9690078fe31c63b9588c8e86bf9fd353f713c84b5db0f \ + --hash=sha256:9d8272c0e483b024e1b9ad029821470ed8ec65631dbd90217469da0e7cd89f1c \ + --hash=sha256:a016194dbe13d14ee9556e734b772d8d67b947092b268d757fd4290e3ba2dfc2 \ + --hash=sha256:a5781494d4d400a3f47f8f1da94b324f6e6b440a53387774002890a2a2f4b50f \ + --hash=sha256:a95b05f9baf29b91171b3a8bd2020b028835243e7b0ff6bb23e2a3c228518b1b \ + --hash=sha256:aa7a1b53a2a4452ada2d1b5dade9960b2522f1e61293a811a077439e39029565 \ + --hash=sha256:ac0f1a2d0cfa7eea3f2aaf006ab6e70e8feeb16b75d65b7e5939982ca2f11056 \ + --hash=sha256:af5e2915d41fe6c961694d7bfdc8562942638200f3ce2765dfb8b745cf997629 \ + --hash=sha256:b6422532152adf4e59b110cb2808cee7a033800952f5c036b4af047ee43199e7 \ + --hash=sha256:b65f590ef2a44640f9a05dbb548a429b4ade77913ce683ac8b1480777658a6c0 \ + --hash=sha256:ba00f661f8ba35d075c937174e27c2c421cec3942fd2e0ea3e66996757c0fdd9 \ + --hash=sha256:bccbbb5ee76a61f9d99b5bf3846a51d7fca4b6a732fe46f89295610edaf41853 \ + --hash=sha256:bf01d8c84cbea96b944c73b22182e6c7c432b3475632b8111dbfdc95ddad6e13 \ + --hash=sha256:bf5c6cf48238b0eb4c086978c492ad1cbc22373fc5b2d7353b3a598ce6db887a \ + --hash=sha256:c16914df9fb7f500e440e6875fa23ff5e0b31db01fa9c06af98d59a91f0dc2e4 \ + --hash=sha256:c351efb95e832a853a29361675f33a7ce53de1a109cd73fd47af0712213aa4ce \ + --hash=sha256:c4165821e131d6d4ca444347c2b694e2311bcfa3fe5a861cc72968f28867beac \ + --hash=sha256:c5f5df567f6eb216de69be06ce55c8b714090fae02b18a3b40da8163b8c5fa9c \ + --hash=sha256:c941bb58d5a6e1c3892d86e42927ed6c180302f07e6d395d08c416e594b98b46 \ + --hash=sha256:c97f080ea627e2863524c5af3836e2270b5f5dfff1f104392b959f8df0c5d384 \ + --hash=sha256:cb96698e3c7413d906ce83f8ffd245ec1bd94707541f299d0ce4d6b0193e982b \ + --hash=sha256:cbb7640ce37159548d2147b5b8c241f962143d4c71231431820783f4dc78f210 \ + --hash=sha256:cdf2448aab5f661c9315308ec8b93f4e8a1a67a3c733f8631067a2b67d5913dc \ + --hash=sha256:d2117334c3af3bdcb9a88522b844a2bdb5efdc4f71c6c822df55486ae1c3347a \ + --hash=sha256:d53d10f7da99ae46f7373b9150393e9c5eab9b224909982b43832668de4779f5 \ + --hash=sha256:d9fafc5aa2e2a39aaf7f8cc0c1f044a9b07fca12e558dca53a3cc5c654ad67a7 \ + --hash=sha256:db3eb7d46527159a878ec3460e9d40615bc25ba337d477db681aea6e4f05c5d2 \ + --hash=sha256:dbf7c7a88e2bac086f06d14577332760bdeecc42bdec8ac4077f6260557d9326 \ + --hash=sha256:df2b82571a1b30f58a87bf4e5a9e78d2b1eff6c6ce8fd3aa3757221f93f0863f \ + --hash=sha256:df92f2aba50eb4d96718b68ef76f2e57a57b54f2fa62333496d16c6d585a85ca \ + --hash=sha256:eb4e8997a49aa2c08a3e43c9045d224448b8941d88e7ac163c7d383e560cbf98 \ + --hash=sha256:efc1cdd798b1aaf39b4610bba7aad28c9bea9b910f25c784ccf9ec1fa719d1f9 \ + --hash=sha256:f146d154428a2523f9cc7936c02353c2459b8f6cf07d3cd1ee1c0a611109c5d5 \ + --hash=sha256:f5bce581e6b8c235e566a14768a943b172ada3ed73537bb0c0be1edee312d4e7 \ + --hash=sha256:f9912624a0c0b834b7520d7769b3644453aabc0a7e1c839da7359f050750e9bc \ + --hash=sha256:fb62edb5bb52cca65fab91a63afa7561607120d26090a7e8fda6fb9f064726da \ + --hash=sha256:ff067a8d8d880e7809e4ac88eb009bb848870115317b306666502ccad30b147f + # via cryptography charset-normalizer==3.4.7 \ --hash=sha256:007d05ec7321d12a40227aae9e2bc6dca73f3cb21058999a1df9e193555a9dcc \ --hash=sha256:03853ed82eeebbce3c2abfdbc98c96dc205f32a79627688ac9a27370ea61a49c \ @@ -317,18 +541,138 @@ charset-normalizer==3.4.7 \ --hash=sha256:f59ad4c0e8f6bba240a9bb85504faa1ab438237199d4cce5f622761507b8f6a6 \ --hash=sha256:fbccdc05410c9ee21bbf16a35f4c1d16123dcdeb8a1d38f33654fa21d0234f79 \ --hash=sha256:fea24543955a6a729c45a73fe90e08c743f0b3334bbf3201e6c4bc1b0c7fa464 + # via requests circuitbreaker==2.1.3 \ --hash=sha256:1a4baee510f7bea3c91b194dcce7c07805fe96c4423ed5594b75af438531d084 \ --hash=sha256:87ba6a3ed03fdc7032bc175561c2b04d52ade9d5faf94ca2b035fbdc5e6b1dd1 + # via oci +click==8.4.2 \ + --hash=sha256:9a6cea6e60b17ebe0a44c5cc636d94f09bd66142c1cd7d8b4cd731c4917a15f6 \ + --hash=sha256:e6f9f66136c816745b9d65817da91d61d957fb16e02e4dcd0552553c5a197b76 + # via + # litellm + # llama-stack-client + # uvicorn +cryptography==46.0.7 \ + --hash=sha256:04959522f938493042d595a736e7dbdff6eb6cc2339c11465b3ff89343b65f65 \ + --hash=sha256:128c5edfe5e5938b86b03941e94fac9ee793a94452ad1365c9fc3f4f62216832 \ + --hash=sha256:1d25aee46d0c6f1a501adcddb2d2fee4b979381346a78558ed13e50aa8a59067 \ + --hash=sha256:24402210aa54baae71d99441d15bb5a1919c195398a87b563df84468160a65de \ + --hash=sha256:258514877e15963bd43b558917bc9f54cf7cf866c38aa576ebf47a77ddbc43a4 \ + --hash=sha256:35719dc79d4730d30f1c2b6474bd6acda36ae2dfae1e3c16f2051f215df33ce0 \ + --hash=sha256:397655da831414d165029da9bc483bed2fe0e75dde6a1523ec2fe63f3c46046b \ + --hash=sha256:3986ac1dee6def53797289999eabe84798ad7817f3e97779b5061a95b0ee4968 \ + --hash=sha256:420b1e4109cc95f0e5700eed79908cef9268265c773d3a66f7af1eef53d409ef \ + --hash=sha256:42a1e5f98abb6391717978baf9f90dc28a743b7d9be7f0751a6f56a75d14065b \ + --hash=sha256:462ad5cb1c148a22b2e3bcc5ad52504dff325d17daf5df8d88c17dda1f75f2a4 \ + --hash=sha256:506c4ff91eff4f82bdac7633318a526b1d1309fc07ca76a3ad182cb5b686d6d3 \ + --hash=sha256:5ad9ef796328c5e3c4ceed237a183f5d41d21150f972455a9d926593a1dcb308 \ + --hash=sha256:5d1c02a14ceb9148cc7816249f64f623fbfee39e8c03b3650d842ad3f34d637e \ + --hash=sha256:5e51be372b26ef4ba3de3c167cd3d1022934bc838ae9eaad7e644986d2a3d163 \ + --hash=sha256:60627cf07e0d9274338521205899337c5d18249db56865f943cbe753aa96f40f \ + --hash=sha256:65814c60f8cc400c63131584e3e1fad01235edba2614b61fbfbfa954082db0ee \ + --hash=sha256:73510b83623e080a2c35c62c15298096e2a5dc8d51c3b4e1740211839d0dea77 \ + --hash=sha256:7bbc6ccf49d05ac8f7d7b5e2e2c33830d4fe2061def88210a126d130d7f71a85 \ + --hash=sha256:80406c3065e2c55d7f49a9550fe0c49b3f12e5bfff5dedb727e319e1afb9bf99 \ + --hash=sha256:84d4cced91f0f159a7ddacad249cc077e63195c36aac40b4150e7a57e84fffe7 \ + --hash=sha256:8a469028a86f12eb7d2fe97162d0634026d92a21f3ae0ac87ed1c4a447886c83 \ + --hash=sha256:91bbcb08347344f810cbe49065914fe048949648f6bd5c2519f34619142bbe85 \ + --hash=sha256:935ce7e3cfdb53e3536119a542b839bb94ec1ad081013e9ab9b7cfd478b05006 \ + --hash=sha256:9694078c5d44c157ef3162e3bf3946510b857df5a3955458381d1c7cfc143ddb \ + --hash=sha256:a1529d614f44b863a7b480c6d000fe93b59acee9c82ffa027cfadc77521a9f5e \ + --hash=sha256:abad9dac36cbf55de6eb49badd4016806b3165d396f64925bf2999bcb67837ba \ + --hash=sha256:b36a4695e29fe69215d75960b22577197aca3f7a25b9cf9d165dcfe9d80bc325 \ + --hash=sha256:b7b412817be92117ec5ed95f880defe9cf18a832e8cafacf0a22337dc1981b4d \ + --hash=sha256:c5b1ccd1239f48b7151a65bc6dd54bcfcc15e028c8ac126d3fada09db0e07ef1 \ + --hash=sha256:cbd5fb06b62bd0721e1170273d3f4d5a277044c47ca27ee257025146c34cbdd1 \ + --hash=sha256:cdf1a610ef82abb396451862739e3fc93b071c844399e15b90726ef7470eeaf2 \ + --hash=sha256:cdfbe22376065ffcf8be74dc9a909f032df19bc58a699456a21712d6e5eabfd0 \ + --hash=sha256:d02c738dacda7dc2a74d1b2b3177042009d5cab7c7079db74afc19e56ca1b455 \ + --hash=sha256:d151173275e1728cf7839aaa80c34fe550c04ddb27b34f48c232193df8db5842 \ + --hash=sha256:d23c8ca48e44ee015cd0a54aeccdf9f09004eba9fc96f38c911011d9ff1bd457 \ + --hash=sha256:d3b99c535a9de0adced13d159c5a9cf65c325601aa30f4be08afd680643e9c15 \ + --hash=sha256:d5f7520159cd9c2154eb61eb67548ca05c5774d39e9c2c4339fd793fe7d097b2 \ + --hash=sha256:db0f493b9181c7820c8134437eb8b0b4792085d37dbb24da050476ccb664e59c \ + --hash=sha256:e06acf3c99be55aa3b516397fe42f5855597f430add9c17fa46bf2e0fb34c9bb \ + --hash=sha256:e4cfd68c5f3e0bfdad0d38e023239b96a2fe84146481852dffbcca442c245aa5 \ + --hash=sha256:ea42cbe97209df307fdc3b155f1b6fa2577c0defa8f1f7d3be7d31d189108ad4 \ + --hash=sha256:ebd6daf519b9f189f85c479427bbd6e9c9037862cf8fe89ee35503bd209ed902 \ + --hash=sha256:f247c8c1a1fb45e12586afbb436ef21ff1e80670b2861a90353d9b025583d246 \ + --hash=sha256:fbfd0e5f273877695cb93baf14b185f4878128b250cc9f8e617ea0c025dfb022 \ + --hash=sha256:fc9ab8856ae6cf7c9358430e49b368f3108f050031442eaeb6b9d87e4dcf4e4f \ + --hash=sha256:fcd8eac50d9138c1d7fc53a653ba60a2bee81a505f9f8850b6b2888555a45d0e \ + --hash=sha256:fdd1736fed309b4300346f88f74cd120c27c56852c3838cab416e7a166f67298 \ + --hash=sha256:ffca7aa1d00cf7d6469b988c581598f2259e46215e0140af408966a24cf086ce + # via + # authlib + # azure-identity + # google-auth + # joserfc + # msal + # oci + # oracledb + # pyjwt + # pyopenssl datasets==4.8.5 \ --hash=sha256:0f0c1c3d56ffff2c93b2f4c63c95bac94f3d7e8621aea2a2a576275233bba772 \ --hash=sha256:5079900781719c0e063a8efdd2cd95a31ad0c63209178669cd23cf1b926149ff -emoji==2.15.0 \ - --hash=sha256:205296793d66a89d88af4688fa57fd6496732eb48917a87175a023c8138995eb \ - --hash=sha256:eae4ab7d86456a70a00a985125a03263a5eac54cd55e51d7e184b1ed3b6757e4 + # via lightspeed-stack (pyproject.toml) +dill==0.4.1 \ + --hash=sha256:1e1ce33e978ae97fcfcff5638477032b801c46c7c65cf717f95fbc2248f79a9d \ + --hash=sha256:423092df4182177d4d8ba8290c8a5b640c66ab35ec7da59ccfa00f6fa3eea5fa + # via + # datasets + # multiprocess +distro==1.9.0 \ + --hash=sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed \ + --hash=sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2 + # via + # anthropic + # google-genai + # llama-stack-client + # openai +dnspython==2.8.0 \ + --hash=sha256:01d9bbc4a2d76bf0db7c1f729812ded6d912bd318d3b1cf81d30c0f845dbf3af \ + --hash=sha256:181d3c6996452cb1189c4046c61599b84a5a86e099562ffde77d26984ff26d0f + # via email-validator +docstring-parser==0.18.0 \ + --hash=sha256:292510982205c12b1248696f44959db3cdd1740237a968ea1e2e7a900eeb2015 \ + --hash=sha256:b3fcbed555c47d8479be0796ef7e19c2670d428d72e96da63f3a40122860374b + # via anthropic +durationpy==0.10 \ + --hash=sha256:1fa6893409a6e739c9c72334fc65cca1f355dbdd93405d30f726deb5bde42fba \ + --hash=sha256:3b41e1b601234296b4fb368338fdcd3e13e0b4fb5b67345948f4f2bf9868b286 + # via kubernetes +einops==0.8.2 \ + --hash=sha256:54058201ac7087911181bfec4af6091bb59380360f069276601256a76af08193 \ + --hash=sha256:609da665570e5e265e27283aab09e7f279ade90c4f01bcfca111f3d3e13f2827 + # via lightspeed-stack (pyproject.toml) +email-validator==2.3.0 \ + --hash=sha256:80f13f623413e6b197ae73bb10bf4eb0908faf509ad8362c5edeb0be7fd450b4 \ + --hash=sha256:9fc05c37f2f6cf439ff414f8fc46d917929974a82244c20eb10231ba60c54426 + # via + # lightspeed-stack (pyproject.toml) + # pydantic +exceptiongroup==1.3.1 \ + --hash=sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219 \ + --hash=sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598 + # via fastmcp-slim +executing==2.2.1 \ + --hash=sha256:3632cc370565f6648cc328b32435bd120a1e4ebb20c77e3fdde9a13cd1e533c4 \ + --hash=sha256:760643d3452b4d777d295bb167ccc74c64a81df23fb5e08eff250c425a4b2017 + # via logfire fastapi==0.136.3 \ --hash=sha256:3d2a69bdf04b7e9f3afa292c3bc7a98816bbfafa10bc9b45f3f3700d2f761620 \ --hash=sha256:e487fae93ad408e6f47641ee4dfe389864fd7bec92e547ea8498fc13f43e83ab + # via + # lightspeed-stack (pyproject.toml) + # llama-stack + # llama-stack-api + # sentry-sdk +fastmcp-slim==3.4.4 \ + --hash=sha256:9d3a6327b9ee835188eb7323fc3b5d4cd061631b48da8ece56794bb538972505 \ + --hash=sha256:dcaa3e0be2127d7eacdce592c2ef0039204923dc0ec396454615cb4a3275b078 + # via pydantic-ai-slim fastuuid==0.14.0 \ --hash=sha256:05a8dde1f395e0c9b4be515b7a521403d1e8349443e7641761af07c7ad1624b1 \ --hash=sha256:0737606764b29785566f968bd8005eace73d3666bd0862f33a760796e26d1ede \ @@ -408,36 +752,183 @@ fastuuid==0.14.0 \ --hash=sha256:ec27778c6ca3393ef662e2762dba8af13f4ec1aaa32d08d77f71f2a70ae9feb8 \ --hash=sha256:f54d5b36c56a2d5e1a31e73b950b28a0d83eb0c37b91d10408875a5a29494bad \ --hash=sha256:f74631b8322d2780ebcf2d2d75d58045c3e9378625ec51865fe0b5620800c39d + # via litellm filelock==3.29.0 \ --hash=sha256:69974355e960702e789734cb4871f884ea6fe50bd8404051a3530bc07809cf90 \ --hash=sha256:96f5f6344709aa1572bbf631c640e4ebeeb519e08da902c39a001882f30ac258 + # via + # datasets + # huggingface-hub +fire==0.7.1 \ + --hash=sha256:3b208f05c736de98fb343310d090dcc4d8c78b2a89ea4f32b837c586270a9cbf \ + --hash=sha256:e43fd8a5033a9001e7e2973bab96070694b9f12f2e0ecf96d4683971b5ab1882 + # via + # llama-stack + # llama-stack-client +frozenlist==1.8.0 \ + --hash=sha256:0325024fe97f94c41c08872db482cf8ac4800d80e79222c6b0b7b162d5b13686 \ + --hash=sha256:032efa2674356903cd0261c4317a561a6850f3ac864a63fc1583147fb05a79b0 \ + --hash=sha256:03ae967b4e297f58f8c774c7eabcce57fe3c2434817d4385c50661845a058121 \ + --hash=sha256:06be8f67f39c8b1dc671f5d83aaefd3358ae5cdcf8314552c57e7ed3e6475bdd \ + --hash=sha256:073f8bf8becba60aa931eb3bc420b217bb7d5b8f4750e6f8b3be7f3da85d38b7 \ + --hash=sha256:07cdca25a91a4386d2e76ad992916a85038a9b97561bf7a3fd12d5d9ce31870c \ + --hash=sha256:09474e9831bc2b2199fad6da3c14c7b0fbdd377cce9d3d77131be28906cb7d84 \ + --hash=sha256:0c18a16eab41e82c295618a77502e17b195883241c563b00f0aa5106fc4eaa0d \ + --hash=sha256:0f96534f8bfebc1a394209427d0f8a63d343c9779cda6fc25e8e121b5fd8555b \ + --hash=sha256:102e6314ca4da683dca92e3b1355490fed5f313b768500084fbe6371fddfdb79 \ + --hash=sha256:11847b53d722050808926e785df837353bd4d75f1d494377e59b23594d834967 \ + --hash=sha256:119fb2a1bd47307e899c2fac7f28e85b9a543864df47aa7ec9d3c1b4545f096f \ + --hash=sha256:13d23a45c4cebade99340c4165bd90eeb4a56c6d8a9d8aa49568cac19a6d0dc4 \ + --hash=sha256:154e55ec0655291b5dd1b8731c637ecdb50975a2ae70c606d100750a540082f7 \ + --hash=sha256:168c0969a329b416119507ba30b9ea13688fafffac1b7822802537569a1cb0ef \ + --hash=sha256:17c883ab0ab67200b5f964d2b9ed6b00971917d5d8a92df149dc2c9779208ee9 \ + --hash=sha256:1a7607e17ad33361677adcd1443edf6f5da0ce5e5377b798fba20fae194825f3 \ + --hash=sha256:1a7fa382a4a223773ed64242dbe1c9c326ec09457e6b8428efb4118c685c3dfd \ + --hash=sha256:1aa77cb5697069af47472e39612976ed05343ff2e84a3dcf15437b232cbfd087 \ + --hash=sha256:1b9290cf81e95e93fdf90548ce9d3c1211cf574b8e3f4b3b7cb0537cf2227068 \ + --hash=sha256:20e63c9493d33ee48536600d1a5c95eefc870cd71e7ab037763d1fbb89cc51e7 \ + --hash=sha256:21900c48ae04d13d416f0e1e0c4d81f7931f73a9dfa0b7a8746fb2fe7dd970ed \ + --hash=sha256:229bf37d2e4acdaf808fd3f06e854a4a7a3661e871b10dc1f8f1896a3b05f18b \ + --hash=sha256:2552f44204b744fba866e573be4c1f9048d6a324dfe14475103fd51613eb1d1f \ + --hash=sha256:27c6e8077956cf73eadd514be8fb04d77fc946a7fe9f7fe167648b0b9085cc25 \ + --hash=sha256:28bd570e8e189d7f7b001966435f9dac6718324b5be2990ac496cf1ea9ddb7fe \ + --hash=sha256:294e487f9ec720bd8ffcebc99d575f7eff3568a08a253d1ee1a0378754b74143 \ + --hash=sha256:29548f9b5b5e3460ce7378144c3010363d8035cea44bc0bf02d57f5a685e084e \ + --hash=sha256:2c5dcbbc55383e5883246d11fd179782a9d07a986c40f49abe89ddf865913930 \ + --hash=sha256:2dc43a022e555de94c3b68a4ef0b11c4f747d12c024a520c7101709a2144fb37 \ + --hash=sha256:2f05983daecab868a31e1da44462873306d3cbfd76d1f0b5b69c473d21dbb128 \ + --hash=sha256:33139dc858c580ea50e7e60a1b0ea003efa1fd42e6ec7fdbad78fff65fad2fd2 \ + --hash=sha256:332db6b2563333c5671fecacd085141b5800cb866be16d5e3eb15a2086476675 \ + --hash=sha256:33f48f51a446114bc5d251fb2954ab0164d5be02ad3382abcbfe07e2531d650f \ + --hash=sha256:34187385b08f866104f0c0617404c8eb08165ab1272e884abc89c112e9c00746 \ + --hash=sha256:342c97bf697ac5480c0a7ec73cd700ecfa5a8a40ac923bd035484616efecc2df \ + --hash=sha256:3462dd9475af2025c31cc61be6652dfa25cbfb56cbbf52f4ccfe029f38decaf8 \ + --hash=sha256:39ecbc32f1390387d2aa4f5a995e465e9e2f79ba3adcac92d68e3e0afae6657c \ + --hash=sha256:3e0761f4d1a44f1d1a47996511752cf3dcec5bbdd9cc2b4fe595caf97754b7a0 \ + --hash=sha256:3ede829ed8d842f6cd48fc7081d7a41001a56f1f38603f9d49bf3020d59a31ad \ + --hash=sha256:3ef2d026f16a2b1866e1d86fc4e1291e1ed8a387b2c333809419a2f8b3a77b82 \ + --hash=sha256:405e8fe955c2280ce66428b3ca55e12b3c4e9c336fb2103a4937e891c69a4a29 \ + --hash=sha256:42145cd2748ca39f32801dad54aeea10039da6f86e303659db90db1c4b614c8c \ + --hash=sha256:4314debad13beb564b708b4a496020e5306c7333fa9a3ab90374169a20ffab30 \ + --hash=sha256:433403ae80709741ce34038da08511d4a77062aa924baf411ef73d1146e74faf \ + --hash=sha256:44389d135b3ff43ba8cc89ff7f51f5a0bb6b63d829c8300f79a2fe4fe61bcc62 \ + --hash=sha256:48e6d3f4ec5c7273dfe83ff27c91083c6c9065af655dc2684d2c200c94308bb5 \ + --hash=sha256:494a5952b1c597ba44e0e78113a7266e656b9794eec897b19ead706bd7074383 \ + --hash=sha256:4970ece02dbc8c3a92fcc5228e36a3e933a01a999f7094ff7c23fbd2beeaa67c \ + --hash=sha256:4e0c11f2cc6717e0a741f84a527c52616140741cd812a50422f83dc31749fb52 \ + --hash=sha256:50066c3997d0091c411a66e710f4e11752251e6d2d73d70d8d5d4c76442a199d \ + --hash=sha256:517279f58009d0b1f2e7c1b130b377a349405da3f7621ed6bfae50b10adf20c1 \ + --hash=sha256:54b2077180eb7f83dd52c40b2750d0a9f175e06a42e3213ce047219de902717a \ + --hash=sha256:5500ef82073f599ac84d888e3a8c1f77ac831183244bfd7f11eaa0289fb30714 \ + --hash=sha256:581ef5194c48035a7de2aefc72ac6539823bb71508189e5de01d60c9dcd5fa65 \ + --hash=sha256:59a6a5876ca59d1b63af8cd5e7ffffb024c3dc1e9cf9301b21a2e76286505c95 \ + --hash=sha256:5a3a935c3a4e89c733303a2d5a7c257ea44af3a56c8202df486b7f5de40f37e1 \ + --hash=sha256:5c1c8e78426e59b3f8005e9b19f6ff46e5845895adbde20ece9218319eca6506 \ + --hash=sha256:5d63a068f978fc69421fb0e6eb91a9603187527c86b7cd3f534a5b77a592b888 \ + --hash=sha256:667c3777ca571e5dbeb76f331562ff98b957431df140b54c85fd4d52eea8d8f6 \ + --hash=sha256:6da155091429aeba16851ecb10a9104a108bcd32f6c1642867eadaee401c1c41 \ + --hash=sha256:6dc4126390929823e2d2d9dc79ab4046ed74680360fc5f38b585c12c66cdf459 \ + --hash=sha256:7398c222d1d405e796970320036b1b563892b65809d9e5261487bb2c7f7b5c6a \ + --hash=sha256:74c51543498289c0c43656701be6b077f4b265868fa7f8a8859c197006efb608 \ + --hash=sha256:776f352e8329135506a1d6bf16ac3f87bc25b28e765949282dcc627af36123aa \ + --hash=sha256:778a11b15673f6f1df23d9586f83c4846c471a8af693a22e066508b77d201ec8 \ + --hash=sha256:78f7b9e5d6f2fdb88cdde9440dc147259b62b9d3b019924def9f6478be254ac1 \ + --hash=sha256:799345ab092bee59f01a915620b5d014698547afd011e691a208637312db9186 \ + --hash=sha256:7bf6cdf8e07c8151fba6fe85735441240ec7f619f935a5205953d58009aef8c6 \ + --hash=sha256:8009897cdef112072f93a0efdce29cd819e717fd2f649ee3016efd3cd885a7ed \ + --hash=sha256:80f85f0a7cc86e7a54c46d99c9e1318ff01f4687c172ede30fd52d19d1da1c8e \ + --hash=sha256:8585e3bb2cdea02fc88ffa245069c36555557ad3609e83be0ec71f54fd4abb52 \ + --hash=sha256:878be833caa6a3821caf85eb39c5ba92d28e85df26d57afb06b35b2efd937231 \ + --hash=sha256:8a76ea0f0b9dfa06f254ee06053d93a600865b3274358ca48a352ce4f0798450 \ + --hash=sha256:8b7b94a067d1c504ee0b16def57ad5738701e4ba10cec90529f13fa03c833496 \ + --hash=sha256:8d92f1a84bb12d9e56f818b3a746f3efba93c1b63c8387a73dde655e1e42282a \ + --hash=sha256:908bd3f6439f2fef9e85031b59fd4f1297af54415fb60e4254a95f75b3cab3f3 \ + --hash=sha256:92db2bf818d5cc8d9c1f1fc56b897662e24ea5adb36ad1f1d82875bd64e03c24 \ + --hash=sha256:940d4a017dbfed9daf46a3b086e1d2167e7012ee297fef9e1c545c4d022f5178 \ + --hash=sha256:957e7c38f250991e48a9a73e6423db1bb9dd14e722a10f6b8bb8e16a0f55f695 \ + --hash=sha256:96153e77a591c8adc2ee805756c61f59fef4cf4073a9275ee86fe8cba41241f7 \ + --hash=sha256:96f423a119f4777a4a056b66ce11527366a8bb92f54e541ade21f2374433f6d4 \ + --hash=sha256:97260ff46b207a82a7567b581ab4190bd4dfa09f4db8a8b49d1a958f6aa4940e \ + --hash=sha256:974b28cf63cc99dfb2188d8d222bc6843656188164848c4f679e63dae4b0708e \ + --hash=sha256:9ff15928d62a0b80bb875655c39bf517938c7d589554cbd2669be42d97c2cb61 \ + --hash=sha256:a6483e309ca809f1efd154b4d37dc6d9f61037d6c6a81c2dc7a15cb22c8c5dca \ + --hash=sha256:a88f062f072d1589b7b46e951698950e7da00442fc1cacbe17e19e025dc327ad \ + --hash=sha256:ac913f8403b36a2c8610bbfd25b8013488533e71e62b4b4adce9c86c8cea905b \ + --hash=sha256:adbeebaebae3526afc3c96fad434367cafbfd1b25d72369a9e5858453b1bb71a \ + --hash=sha256:b2a095d45c5d46e5e79ba1e5b9cb787f541a8dee0433836cea4b96a2c439dcd8 \ + --hash=sha256:b3210649ee28062ea6099cfda39e147fa1bc039583c8ee4481cb7811e2448c51 \ + --hash=sha256:b37f6d31b3dcea7deb5e9696e529a6aa4a898adc33db82da12e4c60a7c4d2011 \ + --hash=sha256:b4dec9482a65c54a5044486847b8a66bf10c9cb4926d42927ec4e8fd5db7fed8 \ + --hash=sha256:b4f3b365f31c6cd4af24545ca0a244a53688cad8834e32f56831c4923b50a103 \ + --hash=sha256:b6db2185db9be0a04fecf2f241c70b63b1a242e2805be291855078f2b404dd6b \ + --hash=sha256:b9be22a69a014bc47e78072d0ecae716f5eb56c15238acca0f43d6eb8e4a5bda \ + --hash=sha256:bac9c42ba2ac65ddc115d930c78d24ab8d4f465fd3fc473cdedfccadb9429806 \ + --hash=sha256:bf0a7e10b077bf5fb9380ad3ae8ce20ef919a6ad93b4552896419ac7e1d8e042 \ + --hash=sha256:c23c3ff005322a6e16f71bf8692fcf4d5a304aaafe1e262c98c6d4adc7be863e \ + --hash=sha256:c4c800524c9cd9bac5166cd6f55285957fcfc907db323e193f2afcd4d9abd69b \ + --hash=sha256:c7366fe1418a6133d5aa824ee53d406550110984de7637d65a178010f759c6ef \ + --hash=sha256:c8d1634419f39ea6f5c427ea2f90ca85126b54b50837f31497f3bf38266e853d \ + --hash=sha256:c9a63152fe95756b85f31186bddf42e4c02c6321207fd6601a1c89ebac4fe567 \ + --hash=sha256:cb89a7f2de3602cfed448095bab3f178399646ab7c61454315089787df07733a \ + --hash=sha256:cba69cb73723c3f329622e34bdbf5ce1f80c21c290ff04256cff1cd3c2036ed2 \ + --hash=sha256:cee686f1f4cadeb2136007ddedd0aaf928ab95216e7691c63e50a8ec066336d0 \ + --hash=sha256:cf253e0e1c3ceb4aaff6df637ce033ff6535fb8c70a764a8f46aafd3d6ab798e \ + --hash=sha256:d1eaff1d00c7751b7c6662e9c5ba6eb2c17a2306ba5e2a37f24ddf3cc953402b \ + --hash=sha256:d3bb933317c52d7ea5004a1c442eef86f426886fba134ef8cf4226ea6ee1821d \ + --hash=sha256:d4d3214a0f8394edfa3e303136d0575eece0745ff2b47bd2cb2e66dd92d4351a \ + --hash=sha256:d6a5df73acd3399d893dafc71663ad22534b5aa4f94e8a2fabfe856c3c1b6a52 \ + --hash=sha256:d8b7138e5cd0647e4523d6685b0eac5d4be9a184ae9634492f25c6eb38c12a47 \ + --hash=sha256:db1e72ede2d0d7ccb213f218df6a078a9c09a7de257c2fe8fcef16d5925230b1 \ + --hash=sha256:e25ac20a2ef37e91c1b39938b591457666a0fa835c7783c3a8f33ea42870db94 \ + --hash=sha256:e2de870d16a7a53901e41b64ffdf26f2fbb8917b3e6ebf398098d72c5b20bd7f \ + --hash=sha256:e4a3408834f65da56c83528fb52ce7911484f0d1eaf7b761fc66001db1646eff \ + --hash=sha256:eaa352d7047a31d87dafcacbabe89df0aa506abb5b1b85a2fb91bc3faa02d822 \ + --hash=sha256:eab8145831a0d56ec9c4139b6c3e594c7a83c2c8be25d5bcf2d86136a532287a \ + --hash=sha256:ec3cc8c5d4084591b4237c0a272cc4f50a5b03396a47d9caaf76f5d7b38a4f11 \ + --hash=sha256:edee74874ce20a373d62dc28b0b18b93f645633c2943fd90ee9d898550770581 \ + --hash=sha256:eefdba20de0d938cec6a89bd4d70f346a03108a19b9df4248d3cf0d88f1b0f51 \ + --hash=sha256:ef2b7b394f208233e471abc541cc6991f907ffd47dc72584acee3147899d6565 \ + --hash=sha256:f21f00a91358803399890ab167098c131ec2ddd5f8f5fd5fe9c9f2c6fcd91e40 \ + --hash=sha256:f4be2e3d8bc8aabd566f8d5b8ba7ecc09249d74ba3c9ed52e54dc23a293f0b92 \ + --hash=sha256:f57fb59d9f385710aa7060e89410aeb5058b99e62f4d16b08b91986b9a2140c2 \ + --hash=sha256:f6292f1de555ffcc675941d65fffffb0a5bcd992905015f85d0592201793e0e5 \ + --hash=sha256:f833670942247a14eafbb675458b4e61c82e002a148f49e68257b79296e865c4 \ + --hash=sha256:fa47e444b8ba08fffd1c18e8cdb9a75db1b6a27f17507522834ad13ed5922b93 \ + --hash=sha256:fb30f9626572a76dfe4293c7194a09fb1fe93ba94c7d4f720dfae3b646b45027 \ + --hash=sha256:fe3c58d2f5db5fbd18c2987cba06d51b0529f52bc3a6cdc33d3f4eab725104bd + # via + # aiohttp + # aiosignal +fsspec==2026.2.0 \ + --hash=sha256:6544e34b16869f5aacd5b90bdf1a71acb37792ea3ddf6125ee69a22a53fb8bff \ + --hash=sha256:98de475b5cb3bd66bedd5c4679e87b4fdfe1a3bf4d707b151b3c07e58c9a2437 + # via + # datasets + # huggingface-hub +genai-prices==0.0.70 \ + --hash=sha256:62d495aa867bb360ea359866b01d89932365417ba3bd013e0ba7c1d884e09ef9 \ + --hash=sha256:c7cb9da4944860329450b086dad402f17237b7552165fd3b61b24e291d1ddb88 + # via pydantic-ai-slim google-api-core==2.30.3 \ --hash=sha256:a85761ba72c444dad5d611c2220633480b2b6be2521eca69cca2dbb3ffd6bfe8 \ --hash=sha256:e601a37f148585319b26db36e219df68c5d07b6382cff2d580e83404e44d641b + # via a2a-sdk 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 + # via + # google-api-core + # google-genai +google-genai==2.10.0 \ + --hash=sha256:77912cd558cd7dfd5b75c25fd1c609e78d7954dde583331104022a46ea90f9ee \ + --hash=sha256:d5350311567ae660c24cbc1752aee4b3d660f89c0106d2dcd2a69978c35afe1e + # via pydantic-ai-slim googleapis-common-protos==1.75.0 \ --hash=sha256:53a062ff3c32552fbd62c11fe23768b78e4ddf0494d5e5fd97d3f4689c75fbbd \ --hash=sha256:961ed60399c457ceb0ee8f285a84c870aabc9c6a832b9d37bb281b5bebde43ed + # via + # google-api-core + # opentelemetry-exporter-otlp-proto-http greenlet==3.5.1 \ --hash=sha256:001775efe7b8e758861294c7a27c28af87f3f3f1c20468a2bc618c45b346c061 \ --hash=sha256:00929c98ec525fd9bf075875d8c5f6a983a90906cdf78a66e6de2d8e466c2a19 \ @@ -518,42 +1009,288 @@ greenlet==3.5.1 \ --hash=sha256:f16ba1efc0715b680a18b8123d90dad887c6112ae3555b4b5c32c149540c6b4e \ --hash=sha256:fa4f98af3a528f0c3fd592a26df7f376f93329c8f4d987f6bb979057af8bf5e2 \ --hash=sha256:ffea73584b216150eab159b6d12348fb253e68757974de1e2c40d8a318ac89ed -grpc-google-iam-v1==0.14.4 \ - --hash=sha256:392b3796947ed6334e61171d9ab06bf7eb357f554e5fc7556ad7aab6d0e17038 \ - --hash=sha256:412facc320fcbd94034b4df3d557662051d4d8adfa86e0ddb4dca70a3f739964 + # via sqlalchemy +griffelib==2.1.0 \ + --hash=sha256:762a186d2c6fd6794d4ea20d428d597ffb857cb56b66421651cbba15bdd5e813 \ + --hash=sha256:cc7b3d2d2865ad0b909fcc38086e3f554b5ea7acbaa7bbb7ecaa3f5dfb7d9f00 + # via pydantic-ai-slim +h11==0.16.0 \ + --hash=sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1 \ + --hash=sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86 + # via + # httpcore + # httpcore2 + # llama-stack + # uvicorn +hf-xet==1.5.1 \ + --hash=sha256:0c97106032ef70467b4f6bc2d0ccc266d7613ee076afc56516c502f87ce1c4a6 \ + --hash=sha256:3474760d10e3bb6f92ff3f024fcb00c0b3e4001e9b035c7483e49a5dd17aa70f \ + --hash=sha256:4f561cbbb92f80960772059864b7fb07eae879adde1b2e781ec6f86f6ac26c59 \ + --hash=sha256:51ef4500dab3764b41135ee1381a4b62ce56fc54d4c92b719b59e597d6df5bf6 \ + --hash=sha256:6071d5ccb4d8d2cbd5fea5cc798da4f0ba3f44e25369591c4e89a4987050e61d \ + --hash=sha256:6208adb15d192b90e4c2ad2a27ed864359b2cb0f2494eb6d7c7f3699ac02e2bf \ + --hash=sha256:6762d89b9e3267dfd502b29b2a327b4525f33b17e7b509a78d94e2151a30ce30 \ + --hash=sha256:6abd35c3221eff63836618ddfb954dcf84798603f71d8e33e3ed7b04acfdbe6e \ + --hash=sha256:6f7a04a8ad962422e225bc49fbbac99dc1806764b1f3e54dbd154bffa7593947 \ + --hash=sha256:8298485c1e36e7e67cbd01eeb1376619b7af43d4f1ec245caae306f890a8a32d \ + --hash=sha256:892e3a3a3aecc12aded8b93cf4f9cd059282c7de0732f7d55026f3abdf474350 \ + --hash=sha256:93d090b57b211133f6c0dab0205ef5cb6d89162979ba75a74845045cc3063b8e \ + --hash=sha256:94e761bbd266bf4c03cee73753916062665ce8365aa40ed321f45afcb934b41e \ + --hash=sha256:97f212a88d14bbf573619a74b7fecb238de77d08fc702e54dec6f78276ca3283 \ + --hash=sha256:a93df2039190502835b1db8cd7e178b0b7b889fe9ab51299d5ced26e0dd879a4 \ + --hash=sha256:bf67e6ed10260cef62e852789dc91ebb03f382d5bdc4b1dbeb64763ea275e7d6 \ + --hash=sha256:c6b6cd08ca095058780b50b8ce4d6cbf6787bcf27841705d58a9d32246e3e47a \ + --hash=sha256:d48199c2bf4f8df0adc55d31d1368b6ec0e4d4f45bc86b08038089c23db0bed8 \ + --hash=sha256:dbf48c0d02cf0b2e568944330c60d9120c272dabe013bd892d48e25bc6797577 \ + --hash=sha256:e1af0de8ca6f190d4294a28b88023db64a1e2d1d719cab044baf75bec569e7a9 \ + --hash=sha256:e78e4e5192ad2b674c2e1160b651cb9134db974f8ae1835bdfbfb0166b894a43 \ + --hash=sha256:e7dbb40617410f432182d918e37c12303fe6700fd6aa6c5964e30a535a4461d6 \ + --hash=sha256:f4ad3ebd4c32dd2b27099d69dc7b2df821e30767e46fb6ee6a0713778243b8ff \ + --hash=sha256:f61e3665892a6c8c5e765395838b8ddf36185da835253d4bc4509a81e49fb342 \ + --hash=sha256:f7b3002f95d1c13e24bcb4537baa8f0eb3838957067c91bb4959bc004a6435f5 + # via huggingface-hub +httpcore==1.0.9 \ + --hash=sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55 \ + --hash=sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8 + # via httpx +httpcore2==2.3.0 \ + --hash=sha256:07327e251560960eea8e969d92d4c6a325feb13cca39e25340731336c3baf924 \ + --hash=sha256:477e9e334f74e5240dcac002e890580f36a57d40ff0fb14cc9655731d23b8415 + # via httpx2 +httpx==0.28.1 \ + --hash=sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc \ + --hash=sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad + # via + # a2a-sdk + # anthropic + # datasets + # fastmcp-slim + # google-genai + # litellm + # llama-stack + # llama-stack-client + # mcp + # openai + # pydantic-ai-slim + # pydantic-graph +httpx-sse==0.4.3 \ + --hash=sha256:0ac1c9fe3c0afad2e0ebb25a934a59f4c7823b60792691f779fad2c5568830fc \ + --hash=sha256:9b1ed0127459a66014aec3c56bebd93da3c1bc8bb6618c8082039a44889a755d + # via + # a2a-sdk + # mcp +httpx2==2.3.0 \ + --hash=sha256:227e7c41d95a76d4077a52640564132777215fc3394e07b66a3116c33d668fa9 \ + --hash=sha256:6f393663bdf6dbe7fe90118e3eb5b2bd024a675cae0390ac08cec9198812d8b7 + # via genai-prices huggingface-hub==0.36.2 \ --hash=sha256:1934304d2fb224f8afa3b87007d58501acfda9215b334eed53072dd5e815ff7a \ --hash=sha256:48f0c8eac16145dfce371e9d2d7772854a4f591bcb56c9cf548accf531d54270 + # via + # datasets + # tokenizers idna==3.17 \ --hash=sha256:466e48829084efe2548012b855df21540b96f2e20e51bd124c851536556a592c \ --hash=sha256:5eb0cb53bc467c12eadcf6de83163ad8527cec9416f44b9b61b19caedad2b87f + # via + # anyio + # email-validator + # httpx + # httpx2 + # requests + # yarl importlib-metadata==8.5.0 \ --hash=sha256:45e54197d28b7a7f1559e60b95e7c567032b602131fbd588f1497f47880aa68b \ --hash=sha256:71522656f0abace1d072b9e5481a48f07c138e00f079c38c8f883823f9c26bd7 + # via litellm +jaraco-classes==3.4.0 \ + --hash=sha256:47a024b51d0239c0dd8c8540c6c7f484be3b8fcf0b2d85c13825780d3b3f3acd \ + --hash=sha256:f662826b6bed8cace05e7ff873ce0f9283b5c924470fe664fff1c2f00f581790 + # via keyring +jaraco-context==6.1.2 \ + --hash=sha256:bf8150b79a2d5d91ae48629d8b427a8f7ba0e1097dd6202a9059f29a36379535 \ + --hash=sha256:f1a6c9d391e661cc5b8d39861ff077a7dc24dc23833ccee564b234b81c82dfe3 + # via keyring +jaraco-functools==4.5.0 \ + --hash=sha256:3bb5665ea4a020cf78a7040e89154c77edadb3ca74f366479669c5999aa70b03 \ + --hash=sha256:79ce39246eddbde4b3a03b77ea5f0f7878dc669b166a66cf3fa8e266aa3fa2f4 + # via keyring +jinja2==3.1.6 \ + --hash=sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d \ + --hash=sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67 + # via + # lightspeed-stack (pyproject.toml) + # litellm + # llama-stack +jiter==0.16.0 \ + --hash=sha256:0542a7189c26920778658fc8fcf2af8bae05bae9924577f71804acef37996536 \ + --hash=sha256:0758ab7747a984797cf048e8eedea1d8ef39d7994b25611daf5b48fc903e8873 \ + --hash=sha256:0df91907609837f33341b8e6fe73b95991fdaa57caf1a0fbd343dffe826f386f \ + --hash=sha256:0e2e9efbe042210df657bade597f66d6d75723e3d8f45a12ea6d8167ff8bbce3 \ + --hash=sha256:0fa25b09b13075c46f5bc174f2690525a925a4fc2f7c82969a2bbabff22386ce \ + --hash=sha256:10438939205546132189c8e74a2d536a707841f3a25cd7c74ee91fe503407a26 \ + --hash=sha256:12288303c9844e61e1651d02a9a6f6633e47d39f897d6991d1427161ce6b746e \ + --hash=sha256:17ca7fae79f6d99cd9a042b75f917eaada7b895cfc7dd2ee3a16089dcaec7a85 \ + --hash=sha256:1878349266f8ee36ecb1375cc5ba2f115f35fd9f0a1a4119e725e379126647f7 \ + --hash=sha256:1a0f05e229edb29e68cdd0ccb83cea13b64263416120cf943767a6fd72e6787f \ + --hash=sha256:2577196f4474ef3fc4779a088a23b0897bbf86f9ea3679c372d45b8383b43207 \ + --hash=sha256:26798522707abb47d767db536e4148ceac1b14446bf028ee85e579a2e043cfe5 \ + --hash=sha256:26d122613ada2b708eb714695446f40fce5bdf2edb4b02116dec62faa62dfab3 \ + --hash=sha256:2a0d46ef67cc58d906a6132dd3040ca70ae4f0b0d7c9c052fe432c658a69b3f6 \ + --hash=sha256:2a8e9e39cf083016137aa5cadafe3188adc2ba6ba1fbf1e5d18889ad3e9ad056 \ + --hash=sha256:2c842cbf374a8daf50b2c04212995bee34ca2ac2cdc29a901b4cdb072c9c4131 \ + --hash=sha256:2ed5738ae4af18271a51a528b8811b0cbfa4a1858de9d83359e4169855d6a331 \ + --hash=sha256:3126a5dbad56401989ac769aca0cb56005bfb3e2366eea0ca99d1a91c3c1ee03 \ + --hash=sha256:31aaee5b80f672c1dc21272bcfb9cbdcfc1ea04ff50f00ed5af500b80c44fa93 \ + --hash=sha256:3a23f0e4f957e1be65752d2dfac9a5a06b1917af8dc85deb639c3b9d02e31290 \ + --hash=sha256:3b21b412b899fd8bd51a3046934b59a3bb068b79f70a5c6010053ac77cc53f0c \ + --hash=sha256:3c1fd2dbe1b0af19e987f03fe66c5f5bd105a2229c1aff4ab14890b24f41d21a \ + --hash=sha256:3f4d9e473a5ce7d27fef8b848df4dc16e283893d3f53b4a585e72c9595f3c284 \ + --hash=sha256:3fb7bc819187b56dc48aa5c833aaf92257da8e07efdb9306156667bd2eeb491c \ + --hash=sha256:41977aa5654023948c2dae2a81cbf9c43343954bef1cd59a154dd15a4d84c195 \ + --hash=sha256:44d019fa8cdaf89bf29c71b39e3712143fdd0ac76725c6ef954f9957a5ea8730 \ + --hash=sha256:46add52f4ad47a08bfb1219f3e673da972191489a33016edefdb5ea55bfa8c48 \ + --hash=sha256:49060fd70737fad59d33ba9dcc0d83247dc9e77187de26053a19c16c9f32bd69 \ + --hash=sha256:491e7d072a253b156fff46b78bceac4652a697aa8d7082c9c18c03d7b7917d24 \ + --hash=sha256:4a1d68ff7ca1d3b5dee20a97a3decda7d5f15003823bf6d140c81f8561d3bc5c \ + --hash=sha256:51d7b836acb0108d7c77df1742332cac2a1fa04a74d6dacec46e7091f0e91274 \ + --hash=sha256:560b2cf3fb03240cd34f27409a238547488708f05b7c3924f571a60422251ec7 \ + --hash=sha256:561926e0573ffe4a32498420a76d64b16c513e1ab413b9d28158a8764ac701e5 \ + --hash=sha256:57b37fc887a32d44798e4d8ebfa7c9683ff3da1d5bf38f08d1bb3573ccb39106 \ + --hash=sha256:5a71d0d2014c3275043e1170bf3d4e771493cb0dcf07be54c567155f4d8ee64b \ + --hash=sha256:5ab4f50ff971b611d656554ea10b75f80097392c827bc32923c6eeb6386c8b00 \ + --hash=sha256:5af7780e4a26bd7d0d989592bf9ef12ebf806b74ab709223ecca37c749872ea9 \ + --hash=sha256:5cf109d010b4b05a105afb3d43be36a21322d345ad3111e13d15f680afef0e5b \ + --hash=sha256:5ed466aee31294d7cdcd4d37dfe5c42c97bc29d9a5f00eacf24504358309cb9b \ + --hash=sha256:616e89e008a93c01104161c75b4988e58716b01d62307ebfe161e52a56d2a818 \ + --hash=sha256:62c1b7fe1f77925acf5af68b6140b8810fa87dfd4dc0a9c8568ec2fa2a10429c \ + --hash=sha256:63efadc657488f45db1c676d81e704cac2abf3fdb892def1faea61db053127e2 \ + --hash=sha256:63ffdbdae7d4499f4cda14eadc12ddcabef0fc0c081191bdc2247489cb698077 \ + --hash=sha256:64c0203212098470032aabcde9356fc168f377aade3e43def61dfe17e92f2037 \ + --hash=sha256:64d613743df53199b1aa256a7d328340da6d7078aac7705a7db9d7a791e9cfd2 \ + --hash=sha256:659039cc50b5addcc35fcc87ae2c1833b7c0a8e5326ef631a75e4478447bcf84 \ + --hash=sha256:6722bcef4ffc86c835574b1b2fac6b33b9fb4a889c781e67950e891591f3c55a \ + --hash=sha256:67c3bc1760f8c99d805dcab4e644027142a53b1d5d861f18780ebdbd5d40b72a \ + --hash=sha256:67fddeda1688f0cce2d2ae83ccf8a80f79936f2d2997d6cc2261f82fdb54a4d3 \ + --hash=sha256:6edb63a46e65a82c26800a868e49b2cac30dd5a4218b88d74bc2c848c8ad60bb \ + --hash=sha256:70a490b55634dc0d2606ce8a8e01b1d62459011beb368d15d76e1eaf62460e3d \ + --hash=sha256:710cc51d4ebdcd3c1f70b232c1db1ea1344a075770422bbd4bede5708335acbe \ + --hash=sha256:741eed508c233a76313a1c7b001f8f21b82f14327e9196ae8bd29a2cc164ae84 \ + --hash=sha256:7b24c3492c5f4f84a37946ad9cf504910cf6a782d6a4e0689b6673c5894b4a1c \ + --hash=sha256:7c9610fd25ebccb43fca584136f5c2fbb26802447eccd430dfdbab95a0fd5126 \ + --hash=sha256:850ccb1d7eedb4200f4014b1c0e8a577de114fc3cd88faad646dcc9bc4bb12ad \ + --hash=sha256:8597d23c87f59294f83bcb6229b9ed1fccee13dbba967b46930d2f1759466fee \ + --hash=sha256:8d031aabecc4f1b6276adfb42e3aabb77c89d468bf616600e8d3a11328929053 \ + --hash=sha256:8d30a4a1c87713060c8d1cc59a7b6c8fb6b8ef0a6900368014c76c87922a2929 \ + --hash=sha256:8fb8de1e23a0cb2a7f53c335049c7b72b6db41aa6227cdcc0972a1de5cb39450 \ + --hash=sha256:8fc4d94713c4697347e38faf7d6ef91547c142219bdcfc7220c4870879974244 \ + --hash=sha256:96e38eea538c8ddf853a35727c7be0741c76c13f04148ac5c116222f50ece3b3 \ + --hash=sha256:9acf1b2faec82d998811ecce7ae84d9005e53410773e9d37d61cdc424ba4581b \ + --hash=sha256:9c8a956fd72c2cf1e730d01ea080341f13aa0a97a4a33b51abebe725b7ae9ca9 \ + --hash=sha256:9ec553a99b0987efd7a3645a1a825cf29c224e494db267a83369fcc8da9aeda5 \ + --hash=sha256:a111256a7193bea0759267b10385e5870949c239ed7b6ddbaaf57573edb38734 \ + --hash=sha256:a32d2027a9fa67f109ff245a3252ece3ccc32cc56703e1deab6cc846a59e0585 \ + --hash=sha256:a5c54ef4ff776d9675837ef535b3308d6e31c208d43ebc44a0f7ab8a208c68f7 \ + --hash=sha256:adbb8edeadd431bc4477879d5d371ece7cb1334486584e0f252656dd7ffada29 \ + --hash=sha256:adff21bc78edfe086c15eb495b900306076de378dc2337c132401fc39bd79c91 \ + --hash=sha256:b1e7923093a376d93c6eb507c77045ae258d689ba577392846a1b3f10d0b09a9 \ + --hash=sha256:b2c61484666ad42726029af0c00ef4541f0f3b5cdc550221f56c2343208018ee \ + --hash=sha256:b42e9ff5376819c053da25809a8d4b6fa6e473b4856ebe42e298ac958be3d7f9 \ + --hash=sha256:b72d0b2990ca754a9102779ac98d8597b7cb31678958562214a007f909eab78e \ + --hash=sha256:b7dc85ea77d4abbae8bad0d3538678aedee75bceec4e2f6c8dfb1c74772e5aa5 \ + --hash=sha256:b8a3f9a6008048fe9def7bf465180564a6e458047d2ce499149cfbe73c3ae9db \ + --hash=sha256:baad945ed47f163ad833314f8e3288c396118934f94e7bbb9e243ce4b341a4fd \ + --hash=sha256:bae96332410f866e5900d809298b1ed82735932986c672495f9701daacd80620 \ + --hash=sha256:bc837c1b9631be10abfe0191537fe8009838204cec7e44827401ace390ddb567 \ + --hash=sha256:bf3ea07d9bc8e7d03a9fbc051295462e6dbc295b894fd72457c3136e3e43d898 \ + --hash=sha256:c22a488f7b9218e245a0025a9ba6b100e2e54700831cf4cf16833a27fba3ad01 \ + --hash=sha256:c4b4717bdb35ae456f831a6b08d01880fff399887a6bbc526a583a406e484eea \ + --hash=sha256:c5fc4f8def331036a7b8e981b4347ebe409981edbc8308a5ea842b8c3614fa6c \ + --hash=sha256:c682bea068a90b764577bdb78a60a4c1d1606daf9cd4c893832a37c7cc9d9026 \ + --hash=sha256:c90c0f63df322be920eda6ce622e3083d8906ba267f8220fe7873213b8b4430e \ + --hash=sha256:c9c53be232c2e206ef9cdbad81a48bfa74c3d3f08bcf8124630a8a748aad993e \ + --hash=sha256:cbd18dd5e2df96b580487b5745adf57ef64ad89ba2d9662fc3c19386acce7db8 \ + --hash=sha256:cf0d73f50e7b6935677854f6e8e31d499ca7064dd24734f703e060f5b237d883 \ + --hash=sha256:d284fb8d94d5855d60c44fefcab4bf966f1da6fada73992b01f6f0c9bc0c6702 \ + --hash=sha256:d28bb3c26762358dadf3e5bf0bccd29ae987d65e6988d2e6f49829c76b003c09 \ + --hash=sha256:d5bf78d0e05e45cfdd66558893938d59afe3d1b1a824a202039b20e607d25a72 \ + --hash=sha256:d5f91b1c27fc22a57993d5a5cb8a627cb8ed4b10502716fac1ffbfe1d19d84e8 \ + --hash=sha256:d8f80521644426d451e70f00c7974240cab8f6ee088aedaa9af2697153ab7805 \ + --hash=sha256:da3d7ec75dc83bb18bca888b5edfae0656a26849056c59e05a7728badd17e7af \ + --hash=sha256:dab907db06fc593645e73109acf4581ba5b548897d28b9348dc41ddc8343b2d3 \ + --hash=sha256:de5ba8763e56b793561f43bed197c9ea55776daa5e9a6b91eed68a909bc9cdbf \ + --hash=sha256:e03a5f21a5ce96a9441b8cb32719a8b88ed5388f53e0f339c5bcf54f1317f9d0 \ + --hash=sha256:e34e97bda77eb63242a410243c071e28ac7e0d8c0948c5ee658498690a4b2f2f \ + --hash=sha256:e431cfc9caf44c1d5459ff77d4e64cbf85fddb6a35dad836a15c6a9ec23087c1 \ + --hash=sha256:eab2cd170150e70153de16896a1774e3a1dca80154c56b54d7a812c479a7165e \ + --hash=sha256:ee6162b77d49a9939229df666dfa8af3e656b6701b54c4c84966d740e189264e \ + --hash=sha256:f17d61a28b4b3e0e3e2ba98490c70501403b4d196f78732439160e7fd3678127 \ + --hash=sha256:f3bd327cdfa118bc1ce69c214c2678571d5bd39b8ccd0ebf43a54db00541ba9a \ + --hash=sha256:f4444a83f946605990c98f625cdd3d2725bfb818158760c5748c653170a20e0e \ + --hash=sha256:fb08c276dd02dac3a284acdd02cacc630d2e3cd6572a4b85519f35cbd133c3de + # via + # anthropic + # openai joserfc==1.6.8 \ --hash=sha256:22fb31a69094a5e6f44632002a9df2c30c941fc6c8ce1b037e92c03de954cf9f \ --hash=sha256:878620c553a6ebdd76ccdc356782fee3f735f21a356d079a546b42a4670ace5f + # via authlib jsonpath-ng==1.8.0 \ --hash=sha256:54252968134b5e549ea5b872f1df1168bd7defe1a52fed5a358c194e1943ddc3 \ --hash=sha256:b8dde192f8af58d646fc031fac9c99fe4d00326afc4148f1f043c601a8cfe138 + # via lightspeed-stack (pyproject.toml) 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 + # via + # litellm + # llama-stack + # llama-stack-api + # mcp +jsonschema-specifications==2025.9.1 \ + --hash=sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe \ + --hash=sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d + # via jsonschema +keyring==25.7.0 \ + --hash=sha256:be4a0b195f149690c166e850609a477c532ddbfbaed96a404d4e43f8d5e2689f \ + --hash=sha256:fe01bd85eb3f8fb3dd0405defdeac9a5b4f6f0439edbb3149577f244a2e8245b + # via py-key-value-aio +kubernetes==36.0.2 \ + --hash=sha256:03551fcb49cae1f708f63624041e37403545b7aaed10cbf54e2b01a37a5438e3 \ + --hash=sha256:faf9b5241b58de0c4a5069f2a0ffc8ac06fece7215156cd3d3ba081a78a858b6 + # via lightspeed-stack (pyproject.toml) +litellm==1.91.1 \ + --hash=sha256:49a24593df7e37262c52243a8e07572d451d37c100aa1b1f347d80d501d2e386 \ + --hash=sha256:bf8e3d23cddf0eb4c05714dffcaafd8a944adf0f9c9b01c6c863b2637309de2e + # via lightspeed-stack (pyproject.toml) +llama-stack==0.7.1 \ + --hash=sha256:65b9c827989011af3879ad051db9134163f8e6b3bc3685340328f21f5d07cf5f \ + --hash=sha256:d88dc8430abe1d26f3908ab506f0f6ccd4f3c16ba06ee46ac662f4c896c52da8 + # via lightspeed-stack (pyproject.toml) +llama-stack-api==0.7.1 \ + --hash=sha256:13467639f83ffc87b950513afd2270e6ce0403852442d6214f3f08c087a2d5d5 \ + --hash=sha256:441b0e1c29f7acc0a1d9b697d276f2c352387b719b67926af9983caec95f107e + # via + # lightspeed-stack (pyproject.toml) + # llama-stack +llama-stack-client==0.7.1 \ + --hash=sha256:5cd104779cb96ec1f8c66a8c0f581b096fcb384188ed891c72be31fb75022daa \ + --hash=sha256:90d8a90519cb3ef644bce4566c6a752184fd69b960c579b41886d70fe47cb44f + # via lightspeed-stack (pyproject.toml) +logfire==4.37.0 \ + --hash=sha256:7ee0cb64b59c356a41a1701fb84597037f8db1fa15df7a3715ef363e5a1de06a \ + --hash=sha256:a20823e6dbb3204614a3ea5e79c91df42405c5112393ec9d8e34ef45b60d315f + # via pydantic-ai-slim +logfire-api==4.37.0 \ + --hash=sha256:0f62debd6ed593d51307277bd6d5636b57bda07935b5604b96db10fe64441af4 \ + --hash=sha256:1d756f8ba23aa56d438e0ba2c0f529a00fcac975b8785c561b058267f9465088 + # via + # pydantic-evals + # pydantic-graph +markdown-it-py==4.2.0 \ + --hash=sha256:04a21681d6fbb623de53f6f364d352309d4094dd4194040a10fd51833e418d49 \ + --hash=sha256:9f7ebbcd14fe59494226453aed97c1070d83f8d24b6fc3a3bcf9a38092641c4a + # via rich markupsafe==3.0.3 \ --hash=sha256:0303439a41979d9e74d18ff5e2dd8c43ed6c6001fd40e5bf2e43f7bd9bbc523f \ --hash=sha256:068f375c472b3e7acbe2d5318dea141359e6900156b5b2ba06a30b169086b91a \ @@ -644,15 +1381,183 @@ markupsafe==3.0.3 \ --hash=sha256:f71a396b3bf33ecaa1626c255855702aca4d3d9fea5e051b41ac59a9c1c41edc \ --hash=sha256:f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a \ --hash=sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50 + # via jinja2 mcp==1.27.2 \ --hash=sha256:8e02db104096d1c25b28e64bde29a5c32b31bc241710213e12fd4d84985bdfef \ --hash=sha256:d6ff5160c6ca65d93013626efb3fc249de683c30b2d8570755ceddd490344de5 + # via + # fastmcp-slim + # llama-stack +mdurl==0.1.2 \ + --hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \ + --hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba + # via markdown-it-py +more-itertools==11.1.0 \ + --hash=sha256:48e8f4d9e7e5878571ecf6f2b4e57634f93cd474cc8cfbd2376f2d11b396e30d \ + --hash=sha256:4b65538ae22f6fed0ce4874efd317463a7489796a0939fa66824dd542125a192 + # via + # jaraco-classes + # jaraco-functools msal==1.37.0 \ --hash=sha256:1b1672a33ee467c1d70b341bb16cafd51bb3c817147a95b93263794b03971bec \ --hash=sha256:dd17e95a7c71bce75e8108113438ba7c4a086b3bcad4f57a8c09b7af3d753c2d + # via + # azure-identity + # msal-extensions msal-extensions==1.3.1 \ --hash=sha256:96d3de4d034504e969ac5e85bae8106c8373b5c6568e4c8fa7af2eca9dbe6bca \ --hash=sha256:c5b0fd10f65ef62b5f1d62f4251d51cbcaf003fcedae8c91b040a488614be1a4 + # via azure-identity +multidict==6.7.1 \ + --hash=sha256:026d264228bcd637d4e060844e39cdc60f86c479e463d49075dedc21b18fbbe0 \ + --hash=sha256:03ede2a6ffbe8ef936b92cb4529f27f42be7f56afcdab5ab739cd5f27fb1cbf9 \ + --hash=sha256:0458c978acd8e6ea53c81eefaddbbee9c6c5e591f41b3f5e8e194780fe026581 \ + --hash=sha256:067343c68cd6612d375710f895337b3a98a033c94f14b9a99eff902f205424e2 \ + --hash=sha256:08ccb2a6dc72009093ebe7f3f073e5ec5964cba9a706fa94b1a1484039b87941 \ + --hash=sha256:0b38ebffd9be37c1170d33bc0f36f4f262e0a09bc1aac1c34c7aa51a7293f0b3 \ + --hash=sha256:0b4c48648d7649c9335cf1927a8b87fa692de3dcb15faa676c6a6f1f1aabda43 \ + --hash=sha256:0d17522c37d03e85c8098ec8431636309b2682cf12e58f4dbc76121fb50e4962 \ + --hash=sha256:0e161ddf326db5577c3a4cc2d8648f81456e8a20d40415541587a71620d7a7d1 \ + --hash=sha256:0e697826df7eb63418ee190fd06ce9f1803593bb4b9517d08c60d9b9a7f69d8f \ + --hash=sha256:10ae39c9cfe6adedcdb764f5e8411d4a92b055e35573a2eaa88d3323289ef93c \ + --hash=sha256:121a34e5bfa410cdf2c8c49716de160de3b1dbcd86b49656f5681e4543bcd1a8 \ + --hash=sha256:128441d052254f42989ef98b7b6a6ecb1e6f708aa962c7984235316db59f50fa \ + --hash=sha256:12fad252f8b267cc75b66e8fc51b3079604e8d43a75428ffe193cd9e2195dfd6 \ + --hash=sha256:14525a5f61d7d0c94b368a42cff4c9a4e7ba2d52e2672a7b23d84dc86fb02b0c \ + --hash=sha256:17207077e29342fdc2c9a82e4b306f1127bf1ea91f8b71e02d4798a70bb99991 \ + --hash=sha256:17307b22c217b4cf05033dabefe68255a534d637c6c9b0cc8382718f87be4262 \ + --hash=sha256:1b99af4d9eec0b49927b4402bcbb58dea89d3e0db8806a4086117019939ad3dd \ + --hash=sha256:1d540e51b7e8e170174555edecddbd5538105443754539193e3e1061864d444d \ + --hash=sha256:1e3a8bb24342a8201d178c3b4984c26ba81a577c80d4d525727427460a50c22d \ + --hash=sha256:1fa6609d0364f4f6f58351b4659a1f3e0e898ba2a8c5cac04cb2c7bc556b0bc5 \ + --hash=sha256:21f830fe223215dffd51f538e78c172ed7c7f60c9b96a2bf05c4848ad49921c3 \ + --hash=sha256:233b398c29d3f1b9676b4b6f75c518a06fcb2ea0b925119fb2c1bc35c05e1601 \ + --hash=sha256:24c0cf81544ca5e17cfcb6e482e7a82cd475925242b308b890c9452a074d4505 \ + --hash=sha256:25167cc263257660290fba06b9318d2026e3c910be240a146e1f66dd114af2b0 \ + --hash=sha256:253282d70d67885a15c8a7716f3a73edf2d635793ceda8173b9ecc21f2fb8292 \ + --hash=sha256:273d23f4b40f3dce4d6c8a821c741a86dec62cded82e1175ba3d99be128147ed \ + --hash=sha256:283ddac99f7ac25a4acadbf004cb5ae34480bbeb063520f70ce397b281859362 \ + --hash=sha256:28ca5ce2fd9716631133d0e9a9b9a745ad7f60bac2bccafb56aa380fc0b6c511 \ + --hash=sha256:2b41f5fed0ed563624f1c17630cb9941cf2309d4df00e494b551b5f3e3d67a23 \ + --hash=sha256:2bbd113e0d4af5db41d5ebfe9ccaff89de2120578164f86a5d17d5a576d1e5b2 \ + --hash=sha256:2e1425e2f99ec5bd36c15a01b690a1a2456209c5deed58f95469ffb46039ccbb \ + --hash=sha256:2e2d2ed645ea29f31c4c7ea1552fcfd7cb7ba656e1eafd4134a6620c9f5fdd9e \ + --hash=sha256:3758692429e4e32f1ba0df23219cd0b4fc0a52f476726fff9337d1a57676a582 \ + --hash=sha256:38fb49540705369bab8484db0689d86c0a33a0a9f2c1b197f506b71b4b6c19b0 \ + --hash=sha256:3943debf0fbb57bdde5901695c11094a9a36723e5c03875f87718ee15ca2f4d2 \ + --hash=sha256:398c1478926eca669f2fd6a5856b6de9c0acf23a2cb59a14c0ba5844fa38077e \ + --hash=sha256:3ab8b9d8b75aef9df299595d5388b14530839f6422333357af1339443cff777d \ + --hash=sha256:3bd231490fa7217cc832528e1cd8752a96f0125ddd2b5749390f7c3ec8721b65 \ + --hash=sha256:3d51ff4785d58d3f6c91bdbffcb5e1f7ddfda557727043aa20d20ec4f65e324a \ + --hash=sha256:3fccb473e87eaa1382689053e4a4618e7ba7b9b9b8d6adf2027ee474597128cd \ + --hash=sha256:401c5a650f3add2472d1d288c26deebc540f99e2fb83e9525007a74cd2116f1d \ + --hash=sha256:41f2952231456154ee479651491e94118229844dd7226541788be783be2b5108 \ + --hash=sha256:432feb25a1cb67fe82a9680b4d65fb542e4635cb3166cd9c01560651ad60f177 \ + --hash=sha256:439cbebd499f92e9aa6793016a8acaa161dfa749ae86d20960189f5398a19144 \ + --hash=sha256:4885cb0e817aef5d00a2e8451d4665c1808378dc27c2705f1bf4ef8505c0d2e5 \ + --hash=sha256:497394b3239fc6f0e13a78a3e1b61296e72bf1c5f94b4c4eb80b265c37a131cd \ + --hash=sha256:497bde6223c212ba11d462853cfa4f0ae6ef97465033e7dc9940cdb3ab5b48e5 \ + --hash=sha256:4cfb48c6ea66c83bcaaf7e4dfa7ec1b6bbcf751b7db85a328902796dfde4c060 \ + --hash=sha256:538cec1e18c067d0e6103aa9a74f9e832904c957adc260e61cd9d8cf0c3b3d37 \ + --hash=sha256:55d97cc6dae627efa6a6e548885712d4864b81110ac76fa4e534c03819fa4a56 \ + --hash=sha256:563fe25c678aaba333d5399408f5ec3c383ca5b663e7f774dd179a520b8144df \ + --hash=sha256:57b46b24b5d5ebcc978da4ec23a819a9402b4228b8a90d9c656422b4bdd8a963 \ + --hash=sha256:5884a04f4ff56c6120f6ccf703bdeb8b5079d808ba604d4d53aec0d55dc33568 \ + --hash=sha256:59bc83d3f66b41dac1e7460aac1d196edc70c9ba3094965c467715a70ecb46db \ + --hash=sha256:5a37ca18e360377cfda1d62f5f382ff41f2b8c4ccb329ed974cc2e1643440118 \ + --hash=sha256:5c4b9bfc148f5a91be9244d6264c53035c8a0dcd2f51f1c3c6e30e30ebaa1c84 \ + --hash=sha256:5e01429a929600e7dab7b166062d9bb54a5eed752384c7384c968c2afab8f50f \ + --hash=sha256:5fa6a95dfee63893d80a34758cd0e0c118a30b8dcb46372bf75106c591b77889 \ + --hash=sha256:619e5a1ac57986dbfec9f0b301d865dddf763696435e2962f6d9cf2fdff2bb71 \ + --hash=sha256:65573858d27cdeaca41893185677dc82395159aa28875a8867af66532d413a8f \ + --hash=sha256:6704fa2b7453b2fb121740555fa1ee20cd98c4d011120caf4d2b8d4e7c76eec0 \ + --hash=sha256:6aac4f16b472d5b7dc6f66a0d49dd57b0e0902090be16594dc9ebfd3d17c47e7 \ + --hash=sha256:6b10359683bd8806a200fd2909e7c8ca3a7b24ec1d8132e483d58e791d881048 \ + --hash=sha256:6b83cabdc375ffaaa15edd97eb7c0c672ad788e2687004990074d7d6c9b140c8 \ + --hash=sha256:6d3bc717b6fe763b8be3f2bee2701d3c8eb1b2a8ae9f60910f1b2860c82b6c49 \ + --hash=sha256:6f77ce314a29263e67adadc7e7c1bc699fcb3a305059ab973d038f87caa42ed0 \ + --hash=sha256:749aa54f578f2e5f439538706a475aa844bfa8ef75854b1401e6e528e4937cf9 \ + --hash=sha256:7a7e590ff876a3eaf1c02a4dfe0724b6e69a9e9de6d8f556816f29c496046e59 \ + --hash=sha256:7dfb78d966b2c906ae1d28ccf6e6712a3cd04407ee5088cd276fe8cb42186190 \ + --hash=sha256:7eee46ccb30ff48a1e35bb818cc90846c6be2b68240e42a78599166722cea709 \ + --hash=sha256:7ff981b266af91d7b4b3793ca3382e53229088d193a85dfad6f5f4c27fc73e5d \ + --hash=sha256:841189848ba629c3552035a6a7f5bf3b02eb304e9fea7492ca220a8eda6b0e5c \ + --hash=sha256:844c5bca0b5444adb44a623fb0a1310c2f4cd41f402126bb269cd44c9b3f3e1e \ + --hash=sha256:84e61e3af5463c19b67ced91f6c634effb89ef8bfc5ca0267f954451ed4bb6a2 \ + --hash=sha256:8affcf1c98b82bc901702eb73b6947a1bfa170823c153fe8a47b5f5f02e48e40 \ + --hash=sha256:8be1802715a8e892c784c0197c2ace276ea52702a0ede98b6310c8f255a5afb3 \ + --hash=sha256:8f333ec9c5eb1b7105e3b84b53141e66ca05a19a605368c55450b6ba208cb9ee \ + --hash=sha256:9004d8386d133b7e6135679424c91b0b854d2d164af6ea3f289f8f2761064609 \ + --hash=sha256:90efbcf47dbe33dcf643a1e400d67d59abeac5db07dc3f27d6bdeae497a2198c \ + --hash=sha256:935434b9853c7c112eee7ac891bc4cb86455aa631269ae35442cb316790c1445 \ + --hash=sha256:93b1818e4a6e0930454f0f2af7dfce69307ca03cdcfb3739bf4d91241967b6c1 \ + --hash=sha256:95922cee9a778659e91db6497596435777bd25ed116701a4c034f8e46544955a \ + --hash=sha256:960c83bf01a95b12b08fd54324a4eb1d5b52c88932b5cba5d6e712bb3ed12eb5 \ + --hash=sha256:97231140a50f5d447d3164f994b86a0bed7cd016e2682f8650d6a9158e14fd31 \ + --hash=sha256:974e72a2474600827abaeda71af0c53d9ebbc3c2eb7da37b37d7829ae31232d8 \ + --hash=sha256:97891f3b1b3ffbded884e2916cacf3c6fc87b66bb0dde46f7357404750559f33 \ + --hash=sha256:98655c737850c064a65e006a3df7c997cd3b220be4ec8fe26215760b9697d4d7 \ + --hash=sha256:98bc624954ec4d2c7cb074b8eefc2b5d0ce7d482e410df446414355d158fe4ca \ + --hash=sha256:98c5787b0a0d9a41d9311eae44c3b76e6753def8d8870ab501320efe75a6a5f8 \ + --hash=sha256:9b0d9b91d1aa44db9c1f1ecd0d9d2ae610b2f4f856448664e01a3b35899f3f92 \ + --hash=sha256:9c90fed18bffc0189ba814749fdcc102b536e83a9f738a9003e569acd540a733 \ + --hash=sha256:9d624335fd4fa1c08a53f8b4be7676ebde19cd092b3895c421045ca87895b429 \ + --hash=sha256:9f9af11306994335398293f9958071019e3ab95e9a707dc1383a35613f6abcb9 \ + --hash=sha256:a0543217a6a017692aa6ae5cc39adb75e587af0f3a82288b1492eb73dd6cc2a4 \ + --hash=sha256:a088b62bd733e2ad12c50dad01b7d0166c30287c166e137433d3b410add807a6 \ + --hash=sha256:a407f13c188f804c759fc6a9f88286a565c242a76b27626594c133b82883b5c2 \ + --hash=sha256:a90f75c956e32891a4eda3639ce6dd86e87105271f43d43442a3aedf3cddf172 \ + --hash=sha256:a9fc4caa29e2e6ae408d1c450ac8bf19892c5fca83ee634ecd88a53332c59981 \ + --hash=sha256:aa23b001d968faef416ff70dc0f1ab045517b9b42a90edd3e9bcdb06479e31d5 \ + --hash=sha256:ac1c665bad8b5d762f5f85ebe4d94130c26965f11de70c708c75671297c776de \ + --hash=sha256:af959b9beeb66c822380f222f0e0a1889331597e81f1ded7f374f3ecb0fd6c52 \ + --hash=sha256:b0fa96985700739c4c7853a43c0b3e169360d6855780021bfc6d0f1ce7c123e7 \ + --hash=sha256:b26684587228afed0d50cf804cc71062cc9c1cdf55051c4c6345d372947b268c \ + --hash=sha256:b4938326284c4f1224178a560987b6cf8b4d38458b113d9b8c1db1a836e640a2 \ + --hash=sha256:b8c990b037d2fff2f4e33d3f21b9b531c5745b33a49a7d6dbe7a177266af44f6 \ + --hash=sha256:ba0a9fb644d0c1a2194cf7ffb043bd852cea63a57f66fbd33959f7dae18517bf \ + --hash=sha256:bb08271280173720e9fea9ede98e5231defcbad90f1624bea26f32ec8a956e2f \ + --hash=sha256:bdbf9f3b332abd0cdb306e7c2113818ab1e922dc84b8f8fd06ec89ed2a19ab8b \ + --hash=sha256:bfde23ef6ed9db7eaee6c37dcec08524cb43903c60b285b172b6c094711b3961 \ + --hash=sha256:c0abd12629b0af3cf590982c0b413b1e7395cd4ec026f30986818ab95bfaa94a \ + --hash=sha256:c102791b1c4f3ab36ce4101154549105a53dc828f016356b3e3bcae2e3a039d3 \ + --hash=sha256:c3a32d23520ee37bf327d1e1a656fec76a2edd5c038bf43eddfa0572ec49c60b \ + --hash=sha256:c524c6fb8fc342793708ab111c4dbc90ff9abd568de220432500e47e990c0358 \ + --hash=sha256:c5f0c21549ab432b57dcc82130f388d84ad8179824cc3f223d5e7cfbfd4143f6 \ + --hash=sha256:c6b3228e1d80af737b72925ce5fb4daf5a335e49cd7ab77ed7b9fdfbf58c526e \ + --hash=sha256:c76c4bec1538375dad9d452d246ca5368ad6e1c9039dadcf007ae59c70619ea1 \ + --hash=sha256:c9035dde0f916702850ef66460bc4239d89d08df4d02023a5926e7446724212c \ + --hash=sha256:c93c3db7ea657dd4637d57e74ab73de31bccefe144d3d4ce370052035bc85fb5 \ + --hash=sha256:cb2a55f408c3043e42b40cc8eecd575afa27b7e0b956dfb190de0f8499a57a53 \ + --hash=sha256:cdea2e7b2456cfb6694fb113066fd0ec7ea4d67e3a35e1f4cbeea0b448bf5872 \ + --hash=sha256:ce1bbd7d780bb5a0da032e095c951f7014d6b0a205f8318308140f1a6aba159e \ + --hash=sha256:cf37cbe5ced48d417ba045aca1b21bafca67489452debcde94778a576666a1df \ + --hash=sha256:d4f49cb5661344764e4c7c7973e92a47a59b8fc19b6523649ec9dc4960e58a03 \ + --hash=sha256:d54ecf9f301853f2c5e802da559604b3e95bb7a3b01a9c295c6ee591b9882de8 \ + --hash=sha256:d62b7f64ffde3b99d06b707a280db04fb3855b55f5a06df387236051d0668f4a \ + --hash=sha256:d82dd730a95e6643802f4454b8fdecdf08667881a9c5670db85bc5a56693f122 \ + --hash=sha256:da62917e6076f512daccfbbde27f46fed1c98fee202f0559adec8ee0de67f71a \ + --hash=sha256:dd96c01a9dcd4889dcfcf9eb5544ca0c77603f239e3ffab0524ec17aea9a93ee \ + --hash=sha256:df9f19c28adcb40b6aae30bbaa1478c389efd50c28d541d76760199fc1037c32 \ + --hash=sha256:e1c5988359516095535c4301af38d8a8838534158f649c05dd1050222321bcb3 \ + --hash=sha256:e628ef0e6859ffd8273c69412a2465c4be4a9517d07261b33334b5ec6f3c7489 \ + --hash=sha256:e82d14e3c948952a1a85503817e038cba5905a3352de76b9a465075d072fba23 \ + --hash=sha256:e954b24433c768ce78ab7929e84ccf3422e46deb45a4dc9f93438f8217fa2d34 \ + --hash=sha256:eb0ce7b2a32d09892b3dd6cc44877a0d02a33241fafca5f25c8b6b62374f8b75 \ + --hash=sha256:eb304767bca2bb92fb9c5bd33cedc95baee5bb5f6c88e63706533a1c06ad08c8 \ + --hash=sha256:eb351f72c26dc9abe338ca7294661aa22969ad8ffe7ef7d5541d19f368dc854a \ + --hash=sha256:ec6652a1bee61c53a3e5776b6049172c53b6aaba34f18c9ad04f82712bac623d \ + --hash=sha256:f2a0a924d4c2e9afcd7ec64f9de35fcd96915149b2216e1cb2c10a56df483855 \ + --hash=sha256:f33dc2a3abe9249ea5d8360f969ec7f4142e7ac45ee7014d8f8d5acddf178b7b \ + --hash=sha256:f537b55778cd3cbee430abe3131255d3a78202e0f9ea7ffc6ada893a4bcaeea4 \ + --hash=sha256:f5dd81c45b05518b9aa4da4aa74e1c93d715efa234fd3e8a179df611cc85e5f4 \ + --hash=sha256:f99fe611c312b3c1c0ace793f92464d8cd263cc3b26b5721950d977b006b6c4d \ + --hash=sha256:fa263a02f4f2dd2d11a7b1bb4362aa7cb1049f84a9235d31adf63f30143469a0 \ + --hash=sha256:fc5907494fccf3e7d3f94f95c91d6336b092b5fc83811720fae5e2765890dfba \ + --hash=sha256:fcee94dfbd638784645b066074b338bc9cc155d4b4bffa4adce1615c5a426c19 + # via + # aiohttp + # yarl multiprocess==0.70.19 \ --hash=sha256:02e5c35d7d6cd2bdc89c1858867f7bde4012837411023a4696c148c1bdd7c80e \ --hash=sha256:0d4b4397ed669d371c81dcd1ef33fd384a44d6c3de1bd0ca7ac06d837720d3c5 \ @@ -670,45 +1575,137 @@ multiprocess==0.70.19 \ --hash=sha256:e5e7dc3e3e1732e88c07aaec17eeb9917f9ed1107d9e60d5ab985cdc14bac43a \ --hash=sha256:e6c0674d34b8adac22533f6786576b3de4e396aaeda9e0c15378af9b8ada2702 \ --hash=sha256:e8cc7fbdff15c0613f0a1f1f8744bef961b0a164c0ca29bdff53e9d2d93c5e5f -nltk==3.9.4 \ - --hash=sha256:ed03bc098a40481310320808b2db712d95d13ca65b27372f8a403949c8b523d0 \ - --hash=sha256:f2fa301c3a12718ce4a0e9305c5675299da5ad9e26068218b69d692fda84828f + # via datasets +numpy==2.5.1 \ + --hash=sha256:08d60c810432eb83360958dea0999ac4cfb94531ea8efcbf0b7f277c2068aeb2 \ + --hash=sha256:09e9bfd8d2cf479c7d174804fb3811c53a8e9f20a37444008606b57d6b7a826d \ + --hash=sha256:0bfebd8695f9863592fe744be833a258120b14a9f39da255e8aa8fade2c0ddd1 \ + --hash=sha256:17a25e09640602e10bc8de0e6fa2b3fd68eedd84ba6d7842dc8f32f9ab87bd0b \ + --hash=sha256:1c6759f538fb912fc46de0a6b1758ccf7b57bc7c7ebebc23974fdac3de8db0cd \ + --hash=sha256:224ca51130ef7da85bea2191625181cb4f337f9cb64b471f10c1a12aa8b60077 \ + --hash=sha256:24d0eb82c0541d3415a33425db64ae439dffccd7b4dbcb30e7c35120205c506a \ + --hash=sha256:2ae0ca40bcb22d6ba59c1dfd5446f49940b0f2d821fde133f10dda11f816b84e \ + --hash=sha256:2c889b56fe48b1018f764b0eec8df59ab654e9148aa91faa12596043500de277 \ + --hash=sha256:30b44a6b53a7ae63c54c089a8726e5563ed302716c5b7ccc85afade40b0e7ff6 \ + --hash=sha256:32985c896d897419ef8da6917872d80b78ad0ea26d85b23245c7366ffde76d75 \ + --hash=sha256:3935f3b419b244a02732676fa5317a9193cc596a4c0646db07e5b421229ac9f7 \ + --hash=sha256:4939237038ada79308dda3204ac6462df056b5672b2e25db1149cf873668b3e1 \ + --hash=sha256:4b4ff1608417eb7a59da7b967bbb798cacfe071d2caf526a24281cd562072ed9 \ + --hash=sha256:54ad769f17bc2d833b620851989f62054fb9ab93c969d9e1dc3c8e3d56beea21 \ + --hash=sha256:59fda5e192b570217ec2580c96f00e9a7e12ef6866a900eb089b62c1a32545ca \ + --hash=sha256:5a4c988b38d261deeeaad9954e3deb091ad905c94e8bb6708654ef1d97f286b0 \ + --hash=sha256:5a6db61f9aaa57e369905c67d852045d3c4f7126405b29d09b19dec118e9c9cb \ + --hash=sha256:6165343f81b56ef8f514f396989e529b61d9dc709b99421b07e9f3e698e2287d \ + --hash=sha256:61ac47e772e6b8ea489e1d2f441a34c5c3ac17327e7ce294cbdf535795ad4e75 \ + --hash=sha256:6c3fe51bc6a16453d452997053454f309e8e0ed7b42d6b361ce4ac8c32913d74 \ + --hash=sha256:6eab239876581b2b3c5a242281b6007bbdbcd1c7085d7709bb57c5929b11e6bf \ + --hash=sha256:78798bd5b9ad744056af8efa90e3b9ddaa53272a0848a483084a1cc0a13b2dc0 \ + --hash=sha256:7c786fe9a5bbe360022e584c5a34cf6b54265c71bd7ec8ac3d8fec38968071f8 \ + --hash=sha256:83ce9c80d5b521b0d77ddcbe5447c218d247929b6cc056ca5351342accfff0af \ + --hash=sha256:9726558e8db4a5bf7929a70ae50f63abda4daf0efe810e3bfbab95976f75fc1a \ + --hash=sha256:99d5095fa265a0c4152e7bb12759e14381ef5496152f1ce58f44bdf55c44beb4 \ + --hash=sha256:a33276be12fa045805f477f22482088b66bb758ffbe89a9d21457de863a32e22 \ + --hash=sha256:a48a113e6afea91f5608793bafa7ef2ad481fefbda87ec5069f483de61cb9fa3 \ + --hash=sha256:ab451b59c5643c570974c43aef780703ef1d3b4965d2be07afd530615a9358d1 \ + --hash=sha256:ab84dc6b074fa881cae55bea94cc4f68e285181ba7f32497bf7dee6b1496165b \ + --hash=sha256:ab87a91b3cc3382b8956095bd8f95e00cf679bb81554339be1a2ba404a1473c1 \ + --hash=sha256:c12afb53450fa976d4c681c50a7423729a4c51c0465ed9f32b8a9cabbc472373 \ + --hash=sha256:caf3e317d33d60c37986b452613f4ab51246d0691350c03d0cb4a898627f4a95 \ + --hash=sha256:dc932a65ded7ce9013d120845a2514dcccb1a67bfc8deb8d37633762951904a6 \ + --hash=sha256:e68d8dd1e7eba712948f2053a29ec86917bc70ba1358df869d9f06649ef9cf09 \ + --hash=sha256:e824c2acf8862052246be5a44c15da1777940c60d010dd2aab897824d9c430f9 \ + --hash=sha256:e8c11c405efc5ff6816d5983c96cdfa215bab3428961243af3ff59b228490438 \ + --hash=sha256:efd736408cc97c79b9e6917338dfc8f06013b2274f992e96b1d9a81a71e2a2c2 \ + --hash=sha256:f089d7b00756190aacf1f5d34bdf38c3c430ac82b4f868f8cede73380460fce7 \ + --hash=sha256:f2479a47f8d5932d1718168a681ad6e536a9df484c83cfcf9de365e164537ace \ + --hash=sha256:f7119ebff1a9829e9f431a4f9d28e703023bb6b9fe7c8f724467dbfc27c94ab3 \ + --hash=sha256:f7d60026c0bdb1380e83bfa7a0419c4577ee4b9a08880afcb6dadeb74c649fa2 \ + --hash=sha256:f7feb014281029e628ba2d5a007407443b06e418b6fe451d1e2adcbc8eba0107 + # via + # datasets + # llama-stack + # pandas +oauthlib==3.3.1 \ + --hash=sha256:0f0f8aa759826a193cf66c12ea1af1637f87b9b4622d46e866952bb022e538c9 \ + --hash=sha256:88119c938d2b8fb88561af5f6ee0eec8cc8d552b7bb1f712743136eb7523b7a1 + # via requests-oauthlib oci==2.170.0 \ --hash=sha256:1e205a395e856b6514501d34595dd1e8e261415aaaab2c97f77fd2fc9618dcc3 \ --hash=sha256:49adf0ffaf754c07c43194d19d2e11f5e1b602a95bb365bb384d939ff365b1b4 + # via llama-stack openai==2.30.0 \ --hash=sha256:92f7661c990bda4b22a941806c83eabe4896c3094465030dd882a71abe80c885 \ --hash=sha256:9a5ae616888eb2748ec5e0c5b955a51592e0b201a11f4262db920f2a78c5231d + # via + # lightspeed-stack (pyproject.toml) + # litellm + # llama-stack + # llama-stack-api + # pydantic-ai-slim opentelemetry-api==1.42.1 \ --hash=sha256:51a69edacadbc03a8950ace1c4c21099cacc538820ac2c9e36277e78cebba714 \ --hash=sha256:56c63bea9f77b62856be8c47600474acad853b2924b99b1687c4cb6297166716 + # via + # fastmcp-slim + # opentelemetry-distro + # opentelemetry-exporter-otlp-proto-http + # opentelemetry-instrumentation + # opentelemetry-instrumentation-httpx + # opentelemetry-sdk + # opentelemetry-semantic-conventions + # pydantic-ai-slim opentelemetry-distro==0.63b1 \ --hash=sha256:b405b04ad70e430390265eb38e82e067a84ca1f49a21429eaadb930c13330d66 \ --hash=sha256:f435098abc7953f58226e8bf79e4c90bc6b32e50aa75d6fa074201db8243b577 -opentelemetry-exporter-otlp==1.42.1 \ - --hash=sha256:2d9ebaed714377a67d224d46795ddcc11d2c877fa5de35fda70b6f3b010729a9 \ - --hash=sha256:aedd54545bb0587cd45210abdc8be545af9c01413f3307786e276df1e3c83bee + # via llama-stack 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 + # via opentelemetry-exporter-otlp-proto-http opentelemetry-exporter-otlp-proto-http==1.42.1 \ --hash=sha256:00a16da1b312a1d6c7233d600d557c91df71125af73020f3b9a7765bd699d59d \ --hash=sha256:bf142a21035d7571ac3a09cb2e5639f49886f243972883cfe777ed3bf02b734d + # via + # llama-stack + # llama-stack-api + # logfire opentelemetry-instrumentation==0.63b1 \ --hash=sha256:32368d6ae52c8de20aa790a6ad86b10a76f09956092337ae37d675773990e541 \ --hash=sha256:f1986716d52cc316ea5f60189098726a9071d8ecc0eee96c9ed110be08bade9c + # via + # logfire + # opentelemetry-distro + # opentelemetry-instrumentation-httpx +opentelemetry-instrumentation-httpx==0.63b1 \ + --hash=sha256:14df6e99d81be9a8cd238f6639b6fa52404c4d3ce219058fcb5dc8c0f2211f86 \ + --hash=sha256:f41ec82f25c3abcdada621052db3e5fd648e3b43d55eec4b9c0c5d3ecb7b4ff4 + # via logfire opentelemetry-proto==1.42.1 \ --hash=sha256:c6a51e6b4f05ae63565f3a113217f3d2bfaec68f78c02d7a6c85f9010d1cfca6 \ --hash=sha256:dedb74cba2886c59c7789b227a7a670613025a07489040050aedff6e5c0fb43c + # via + # opentelemetry-exporter-otlp-proto-common + # opentelemetry-exporter-otlp-proto-http opentelemetry-sdk==1.42.1 \ --hash=sha256:083cd4bbfaa5aa7b5a9e552430d9951219967cfb27aa61feb13a77aba1fc839d \ --hash=sha256:8c834e8f8c9ba4171d4ec843d0cb8a67e4c7394d3f9e9297e582cbd9456ddbf7 + # via + # llama-stack + # llama-stack-api + # logfire + # opentelemetry-distro + # opentelemetry-exporter-otlp-proto-http opentelemetry-semantic-conventions==0.63b1 \ --hash=sha256:3daf963611334b365e98a57438183eb012d3bfb40b2d931a9af613476b8701a9 \ --hash=sha256:dfe5ef4dee82586b746f522b818ceb298d00b3d59f660042bd79404bff8d0682 + # via + # opentelemetry-instrumentation + # opentelemetry-instrumentation-httpx + # opentelemetry-sdk +opentelemetry-util-http==0.63b1 \ + --hash=sha256:6284194028c59cd439f8acfe388145069a6127f11dc077e1344a2094adacc3f8 \ + --hash=sha256:ba1268f00922ee522dba2ae38458060f99486e7385a8056985901ca9685adfff + # via opentelemetry-instrumentation-httpx oracledb==4.0.1 \ --hash=sha256:032ca4f558b05f03fa1bef1b04e59ec350ae0b22e6d85c47f4ac62ae98315823 \ --hash=sha256:03afeda85bec3eca983ebf3ad9910d0f217d99300258366d287e015a041d6c13 \ @@ -757,82 +1754,210 @@ oracledb==4.0.1 \ --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 + # via llama-stack +packaging==26.2 \ + --hash=sha256:5fc45236b9446107ff2415ce77c807cee2862cb6fac22b8a73826d0693b0980e \ + --hash=sha256:ff452ff5a3e828ce110190feff1178bb1f2ea2281fa2075aadb987c2fb221661 + # via + # datasets + # huggingface-hub + # opentelemetry-instrumentation +pandas==3.0.3 \ + --hash=sha256:0383c72c75cdcca61a9e116e611143902dbfd08bff356829c2f6d1cf40a9ca8c \ + --hash=sha256:05f1f1752b8533ea03f7f39a9c15b1a058d067bb48f4748948e7a8691e0510f2 \ + --hash=sha256:08d789b41f87e0905880e293cedf6197ce71fe67cc081358b1e148a491b9bd13 \ + --hash=sha256:0d589105b3c14645af1738ff279b2995102d8f7a03b0a66dc8d95550eb513e04 \ + --hash=sha256:13fc1e853d9e04743d11ba75a985ccbc2a317fe07d8af61e445a6fd24dacd6a6 \ + --hash=sha256:14da8316da4d0c5a77618425996bfb1248ca87fc2c1486e6fde4652bd18b5824 \ + --hash=sha256:1928e07221f82db493cd4af1e23c1bfca524a19a4699887975bff68f49a72bfb \ + --hash=sha256:261e308dfb22448384b7580cf719d2f998fe2966c92893c3e77d14008af1f066 \ + --hash=sha256:275c14e0fce14a2ec20eee474aecd305478ea3c1e6f6a9d8fe219a165542717e \ + --hash=sha256:335f62418ed562cfc3c49e9e196375c28b729dcef8543abf4f9438e381bf3c76 \ + --hash=sha256:3650109c0f22879df8bd6179ab9ee3d7f1d1d4e7e0094a3f0032d9f51e2e64ac \ + --hash=sha256:39436b377d56d2a2e52d0395bdbee171f01068e99af5250509aceeb929f765c7 \ + --hash=sha256:3c20a521bbb85902f79f7270c80a59e1b5452d96d170c034f207181870f97ac5 \ + --hash=sha256:3e91cec1879ada0624fc3dc9953c5cbd60208e59c0db28f540c5d6d47502422f \ + --hash=sha256:455f6f8139d4282188f526868dbc3c828470e88a3d9d59a891bd46a455f21b98 \ + --hash=sha256:46997386d528eb40376ecd6b033cf4a8a1e5282580f68f43de875b78cba2199d \ + --hash=sha256:4db8c527972a821cf5286b40ccc57642a39bc62e62022b42f99f8a67fca8c3a1 \ + --hash=sha256:4e15135e2ee5df1063313e2425ceef8ac0f4ae775893815b0923651b806a5639 \ + --hash=sha256:51b1fe551acb77dac643c6fda86084d8d446c10fe64b06a9cc29c4cc8540e7f2 \ + --hash=sha256:557409bc4178e70ee8d9ddb494798e51ebf6ea59330f6be22c51bab2a7db6c49 \ + --hash=sha256:5cc09a68b3120e0f54870dede8287a7bb1fa463907e4fcec1ea77cab6179bf7a \ + --hash=sha256:60ae316d3fd75d1858d450d0db0103ea2be3e7d4a95ec2f064f7e2ae63f7b028 \ + --hash=sha256:6674ab18ad8c57802867264b00e15e7bb904700cdd9046e3b2fa1fce237439ea \ + --hash=sha256:67b3b64c11910cfa29f4e94a14d3bff9ee693b6fc76055e7cad549cee0aec5fa \ + --hash=sha256:696a4a00a2a2a35d4e5deb3fc946641b96c944f02230e4f76137fe35d806c4fc \ + --hash=sha256:6dc0b3fd2169c9157deed50b4d519553a3655c8c6a96027136d654592be973a9 \ + --hash=sha256:7e65d5407dc0b394f509699650e4a2ec01c0514f21850f453fa60f3be79a5dbf \ + --hash=sha256:819959dab7bbd0049c15623fbac4e29a191b9528160a61fb1032242d8ced2d9c \ + --hash=sha256:8a1e45c80cceb3b4a21bc5939d52e8cbd8d9b7305309219d59e9754d9ce09e27 \ + --hash=sha256:9c39be2d709d01fa972a0cabc522389fceca4f3969332ba25a7d6c5802cf976a \ + --hash=sha256:9d71c63ae4ebdbf70209742096f1fc46a83a0613c99d4b23766cced9ff8cd62a \ + --hash=sha256:a2d2dff8a04f3917b55ab3910c32990f8ddf7eceba114947838cefa976a68977 \ + --hash=sha256:a4eeb6830daf35a71cc09649bd823e2b542dac246cdee9614c6e4bd65028cd6a \ + --hash=sha256:a55066a0505dae0ba2b50a46637db34b46f9094c65c5d4800794ef6335010938 \ + --hash=sha256:a82d532a3351d435432cd913edbccaf8b8e01d4dd0e5ced5a8d2e8ecd94c7e44 \ + --hash=sha256:b168fc218fd80a6cbdbdbc1a97ddc7889ed057d7eb45f50d866ceab5f39904c4 \ + --hash=sha256:b2c95f8bfc1ee412bf482605d7bfd30c12d1d26bd59fdd91efeef1d4718decb1 \ + --hash=sha256:ba7e08b9ac1d54569cd1e256e3668975ed624d6826f7b68df0342b012007bddb \ + --hash=sha256:bab900348131a7db1f69a7309ef141fd5680f1487094193bcbbb61791573bf8f \ + --hash=sha256:bd3a518890b400d32f9023722dc9a9a5c969f00b415419a3c06c043f09bb5d7d \ + --hash=sha256:c7be265b62cef88e253a941e4698604973736dcfe242fdb5198f0f7bc473cdcc \ + --hash=sha256:d26cbe1fcfc12e8fd900e2454163e466b2d3af84f7c75481df7683ffc073d870 \ + --hash=sha256:d4be06d68f9ddcfc645b87534911da79a8fbffc7573c80e0edcf42a5020624d8 \ + --hash=sha256:d72828c20c6d6e83e1e22a6a3b47b326b71664112fa9705dcbccfd7a39b62085 \ + --hash=sha256:dd1a5d1def6a46002e964510bdc67c368aa0951df5d1d9f8365336f5a1f490cd \ + --hash=sha256:e3a2ec42c98ffa2565a67e08e218d06d72576d758d90facb7c00805194d8f360 \ + --hash=sha256:f8894dc474d648fe7b6ff0ca9b0bd73950d19952bc1a6534540762c5d79d305c \ + --hash=sha256:fed2ff7fd9779120e388e285fc029bd5cf9490cdd2e4166a9ee22c0e49a9ab09 + # via + # datasets + # llama-stack-client +platformdirs==4.10.0 \ + --hash=sha256:31e761a6a0ca04faf7353ea759bdba55652be214725111e5aac52dfa29d4bef7 \ + --hash=sha256:fb516cdb12eb0d857d0cd85a7c57cea4d060bee4578d6cf5a14dfdf8cbf8784a + # via fastmcp-slim +prometheus-client==0.25.0 \ + --hash=sha256:5e373b75c31afb3c86f1a52fa1ad470c9aace18082d39ec0d2f918d11cc9ba28 \ + --hash=sha256:d5aec89e349a6ec230805d0df882f3807f74fd6c1a2fa86864e3c2279059fed1 + # via lightspeed-stack (pyproject.toml) +prompt-toolkit==3.0.52 \ + --hash=sha256:28cde192929c8e7321de85de1ddbe736f1375148b02f2e17edd840042b1be855 \ + --hash=sha256:9aac639a3bbd33284347de5ad8d68ecc044b91a762dc39b7c21095fcd6a19955 + # via + # llama-stack + # llama-stack-client + # pydantic-ai-slim +propcache==0.5.2 \ + --hash=sha256:01c4fc7480cd0598bb4b57022df55b9ca296da7fc5a8760bd8451a7e63a7d427 \ + --hash=sha256:04dc2390d9edbbaef7461f33322555976ffddf0b650a038649d026358714e6c5 \ + --hash=sha256:06187263ddad280d05b4d8a8b3bb7d164cbebd469236544a42e6d9b28ac6a4fa \ + --hash=sha256:0958834041a0166d343b8d2cedcd8bcbaeb4fdbe0cf08320c5379f143c3be6e7 \ + --hash=sha256:099aaf4b4d1a02265b92a977edf00b5c4f63b3b17ac6de39b0d637c9cac0188a \ + --hash=sha256:0d2c9bf8528f135dbb805ce027567e09164f7efa51a2be07458a2c0420f292d0 \ + --hash=sha256:0fd59b5af35f74da48d905dcbad55449ba13be91823cb05a9bd590bbf5b61660 \ + --hash=sha256:10734b5484ea113152ee25a91dccedf81631791805d2c9ccb054958e51842c94 \ + --hash=sha256:13fef48778b5a2a756523fdb781326b028ca75e32858b04f2cdd19f394564917 \ + --hash=sha256:178b4a2cdaac1818e2bf1c5a99b94383fa73ea5382e032a48dec07dc5668dc42 \ + --hash=sha256:196913dea116aeb5a2ba95af4ddcb7ea85559ae07d8eee8751688310d09168c3 \ + --hash=sha256:1b31822f4474c4036bae62de9402710051d431a606d6a0f907fec79935a071aa \ + --hash=sha256:1ca071adabaab6e9219924bbe00af821f1ee7de113a9eca1cdc292de3d120f4d \ + --hash=sha256:1d1ad32d9d4355e2be65574fd0bfd3677e7066b009cd5b9b2dee8aa6a6393b33 \ + --hash=sha256:1dbcf7675229b35d31abb6547d8ebc8c27a830ac3f9a794edff6254873ec7c0a \ + --hash=sha256:2293949b855ce597f2826452d17c2d545fb5622379c4ea6fdf525e9b8e8a2511 \ + --hash=sha256:26a4dca084132874e639895c3135dfad5eb20bae209f62d1aeb31b03e601c3c0 \ + --hash=sha256:2800a4a8ead6b28cccd1ec54b59346f0def7922ee1c7598e8499c733cfbb7c84 \ + --hash=sha256:29cbaac5ea0212663e6845e04b5e188d5a6ae6dd919810ac835bf1d3b42c3f4c \ + --hash=sha256:29f9309a2e42b0d273be006fdb4be2d6c39a47f6f57d8fb1cf9f81481df81b66 \ + --hash=sha256:2d7aa89ebca5acc98cba9d1472d976e394782f587bad6661003602a619fd1821 \ + --hash=sha256:2f22cbbac9e26a8e864c0985ff1268d5d939d53d9d9411a9824279097e03a2cb \ + --hash=sha256:2f8ea531c794b9d6274acd4e8d2c2ebcac590a4361d27482edd3010b79f1325e \ + --hash=sha256:3115559b8effafd63b142ea5ed53d63a16ea6469cbc63dce4ee194b42db5d853 \ + --hash=sha256:32775082acd2d807ee3db715c7770d38767b817870acfa08c29e057f3c4d5b56 \ + --hash=sha256:3430bb2bfe1331885c427745a751e774ee679fd4344f80b97bf879815fe8fa55 \ + --hash=sha256:3b199b9b2b3d6a7edf3183ba8a9a137a22b97f7df525feb5ae1eccf026d2a9c6 \ + --hash=sha256:40314bca9ac559716fe374094fc81c11dcc34b64fd6c585360f5775690505704 \ + --hash=sha256:44e488ef40dbb452700b2b1f8188934121f6648f52c295055662d2191959ff82 \ + --hash=sha256:452b5065457eb9991ec5eb38ff41d6cd4c991c9ac7c531c4d5849ae473a9a13f \ + --hash=sha256:45f11346f884bc47444f6e6647131055844134c3175b629f84952e2b5cd62b64 \ + --hash=sha256:46088abff4cba581dea21ae0467a480526cb25aa5f3c269e909f800328bc3999 \ + --hash=sha256:4621064bbf28fa77ff64dd5d94367c04684c67d3a5bf1dff25f0cd0d98a38f3b \ + --hash=sha256:4bc8ff1feffc6a61c7002ffe84634c41b822e104990ae009f44a0834430070bb \ + --hash=sha256:4db0ba63d693afd40d249bd93f842b5f144f8fcbb83de05660373bcf30517b1d \ + --hash=sha256:51f96d685ab16e88cab128cd37a52c5da540809c8b879fa047731bfcb4ad35a4 \ + --hash=sha256:54adaa85a22078d1e306304a40984dc5be99d599bf3dc0a24dc98f7daeab89ab \ + --hash=sha256:552ffadf6ad409844bc5919c42a0a83d88314cedddaea0e41e80a8b8fffe881f \ + --hash=sha256:5538d2c13d93e4698af7e092b57bc7298fd35d1d58e656ae18f23ee0d0378e03 \ + --hash=sha256:5570dbcc97571c15f68068e529c92715a12f8d54030e272d264b377e22bd17a5 \ + --hash=sha256:5671d09a36b06d0fd4a3da0fccbcae360e9b1570924171a15e9e0997f0249fba \ + --hash=sha256:583c19759d9eec1e5b69e2fbef36a7d9c326041be9746cb822d335c8cedc2979 \ + --hash=sha256:5aaa2b923c1944ac8febd6609cb373540a5563e7cbcb0fd770f75dace2eb817b \ + --hash=sha256:5dbc581d2814337da56222fab8dc5f161cd798a434e49bac27930aaef798e144 \ + --hash=sha256:5fcb98e7598b1ee0addab320d90f65b530297a867dbfe9de52ea838077e16e3d \ + --hash=sha256:6041d31504dc1779d700e1edcfb08eea334b357620b06681a4eabb57a74e574e \ + --hash=sha256:66ea454f095ddf5b6b14f56c064c0941c4788be11e18d2464cf643bf7203ff67 \ + --hash=sha256:68ce1c44c7a813a7f71ea04315a8c7b330b63db99d059a797a4651bb6f69f117 \ + --hash=sha256:6a997d0489e9668a384fcfd5061b857aa5361de73191cac204d04b889cfbbafa \ + --hash=sha256:6bf3be92233808fcd338eba0fb4d0b59ec5772af4f4ecfcec450d1bfc0f8b5eb \ + --hash=sha256:6de8bd93ddde9b992cf2b2e0d796d501a19026b5b9fd87356d7d0779531a8d96 \ + --hash=sha256:6e7b8719005dd1175be4ab1cd25e9b98659a5e0347331506ec6760d2773a7fb5 \ + --hash=sha256:6f328175a2cde1f0ff2c4ed8ce968b9dcfb55f3a7153f39e2957ed994da13476 \ + --hash=sha256:72d61e16dd78228b58c5d47be830ff3da7e5f139abdf0aef9d86cde1c5cf2191 \ + --hash=sha256:74b70780220e2dd89175ca24b81b68b67c83db499ae611e7f2313cb329801c78 \ + --hash=sha256:79aa3ff0a9b566633b642fa9caf7e21ed1c13d6feca718187873f199e1514078 \ + --hash=sha256:7afa37062e6650640e932e4cc9297d81f9f42d9944029cc386b8247dea4da837 \ + --hash=sha256:80168e2ebe4d3ec6599d10ad8f520304ae1cad9b6c5a95372aef1b66b7bfb53a \ + --hash=sha256:806719138ecd720339a12410fb9614ac9b2b2d3a5fdf8235d56981c36f4039ba \ + --hash=sha256:8114f28879e0904748e831c3a7774261bd9e75f49be089f389a76f959dcd13fe \ + --hash=sha256:81e3a30b0bb60caa22033dd0f8a3618d1d67356212514f62c57db75cb0ef410c \ + --hash=sha256:823581fd5cb08b12a48bfa11fe962a7916766b6170c17b028fbdf762b85eb9bf \ + --hash=sha256:85341b12b9d55bad0bded24cac341bb34289469e03a11f3f583ea1cc1db0326c \ + --hash=sha256:857187f381f88c8e2fa2fe56ab94879d011b883d5a2ee5a1b60a8cd2a06846d9 \ + --hash=sha256:8a90efd5777e996e42d568db9ac740b944d691e565cbfd31b2f7832f9184b2b8 \ + --hash=sha256:8b73ab70f1a3351fbc71f663b3e645af6dd0329100c353081cf69c37433fc6fe \ + --hash=sha256:8c7972d8f193740d9175f0998ab38717e6cd322d5935c5b0fef8c0d323fd9031 \ + --hash=sha256:8e778ebd44ef4f66ed60a0416b06b489687db264a9c0b3620362f26489492913 \ + --hash=sha256:9282fb1a3bccd038da9f768b927b24a0c753e466c086b7c4f3c6982851eefb2d \ + --hash=sha256:949c91d1a990cf3b2e8188dfcfb25005e0b834a06c63fa4ef9f360878ce21ecf \ + --hash=sha256:95f1e3f4760d404b13c9976c0229b2b49a3c8e2c62a9ce92efdd2b11ada75e3f \ + --hash=sha256:97797ebb098e670a2f92dd66f32897e30d7615b14e7f59711de23e30a9072539 \ + --hash=sha256:a0e399a2eccb91ed18721f86aa85757727400b6865c89e88934781deb9c8498b \ + --hash=sha256:a473b3440261e0c60706e732b2ed2f517857344fc21bf48fdfe211e2d98eb285 \ + --hash=sha256:a4840ab0ae0216d952f4b53dc6d0b992bfc2bedbfe360bdd9b548bc184c08959 \ + --hash=sha256:a592f5f3da71c8691c788c13cb6734b6d17663d2e1cb8caddf0673d01ef8847d \ + --hash=sha256:a6ae2198be502c10f09b2516e7b5d019816924bc3183a43ce792a7bd6625e6f4 \ + --hash=sha256:a6ddc6ac9e25de626c1f129c1b467d7ecd33ce2237d3fd0c4e429feef0a7ee1f \ + --hash=sha256:acd2c8edba48e31e58a363b8cf4e5c7db3b04b3f9e371f601df30d9b0d244836 \ + --hash=sha256:b05d643f944a8c3c4bd86d65ffd87bf3264b617f87791940302bc474d2ff5274 \ + --hash=sha256:b96db7141a592cbc968daf1feea83a118e6ab378af4abbc72b248c895414c22d \ + --hash=sha256:ba338430e87ceb9c8f0cf754de38a9860560261e56c00376debd628698a7364f \ + --hash=sha256:ba57fffe4ac99c5d30076161b5866336d97600769bad35cc68f7774b15298a4e \ + --hash=sha256:be1ddfcbb376e3de5d2e2db1d58d6d67463e6b4f9f040c000de8e300295465fe \ + --hash=sha256:c0cb9ed24c8964e172768d455a38254c2dd8a552905729ce006cad3d3dda59b1 \ + --hash=sha256:c60462af8e6dc30c35407c7237ea908d777b22862bbee27bc4699c0d8bcdc45a \ + --hash=sha256:c66afea89b1e43725731d2004732a046fe6fe955d51f952c3e95a7314a284a39 \ + --hash=sha256:c6844ba6364fb12f403928a82cfd295ab103a2b315c77c747b2dbe4a41894ea7 \ + --hash=sha256:c80f4ba3e8f00189165999a742ee526ebeccedf6c3f7beb0c7df821e9772435a \ + --hash=sha256:cafca7e56c12bb02ae16d283742bef25a61122e9dab2b5b3f2ccbe589ce32164 \ + --hash=sha256:cc1177027eda740fdb152706bd215a3f124e3eea15afc39f2cb9fe351b50619e \ + --hash=sha256:cc49723e2f60d6b32a0f0b08a3fd6d13203c07f1cd9566cfce0f12a917c967a2 \ + --hash=sha256:cc6fc3cc62e8501d3ed62894425040d2728ecddb1ed072737a5c70bd537aa9f0 \ + --hash=sha256:cd416c1de191973c52ff1a12a57446bfc7642797b282d7caf2162d7d1b8aa9a0 \ + --hash=sha256:cd645f03898405cabe694fb8bc35241e3a9c332ec85627584fe3de201452b335 \ + --hash=sha256:cef6cea3922890dd6c9654971001fa797b526c16ab5e1e46c05fd6f877be7568 \ + --hash=sha256:cfa21e036ce1e1db2be04ba3b85d2df1bb1702fa01932d984c5464c665228ff4 \ + --hash=sha256:d0326e2e5e1f3163fa306c834e48e8d490e5fae607a097a40c0648109b47ba80 \ + --hash=sha256:d310c013aad2c72f1c3f2f8dd3279d460a858c551f97aeb8c63e4693cca7b4d2 \ + --hash=sha256:d447bb0b3054be5818458fbb171208b1d9ff11eba14e18ca18b90cbb45767370 \ + --hash=sha256:d4dc37dec6c6cdad0b57881a5658fd14fbf53e333b1a86cf86559f190e1d9ec4 \ + --hash=sha256:d5a81be28596d6559f6131ef33e10200de6e17643b3c74ce03f9eb103be6ae8b \ + --hash=sha256:d9ee8826a7d47863a08ac44e1a5f611a462eefc3a194b492da242128bec75b42 \ + --hash=sha256:db2b80ea58eab4f86b2beec3cc8b39e8ff9276ac20e96b7cce43c8ae84cd6b5a \ + --hash=sha256:decfca4c79dd53ebab484b00cc4b6717d8c369f86e74aa4ca395a64ac651495e \ + --hash=sha256:dfed59d0a5aeb01e242e66ff0300bc4a265a7c05f612d30016f0b60b1017d757 \ + --hash=sha256:e00820e192c8dbebcafb383ebbf99030895f09905e7a0eb2e0340a0bcc2bc825 \ + --hash=sha256:e4294d04a94dcab1b3bccd8b66d962dcad411a1d19414b2a41d1445f1de32ad0 \ + --hash=sha256:e59bc9e66329185b93dab73f210f1a37f81cb40f321501db8017c9aea15dba27 \ + --hash=sha256:e5cbfac9f61484f7e9f3597775500cd3ebe8274e9b050c38f9525c77c97520bf \ + --hash=sha256:f064f8d2b59177878b7615df1735cd8fe3462ed6be8c7b217d17a276489c2b7f \ + --hash=sha256:f156a3529f38063b6dbaf356e15602a7f95f8055b1295a438433a6386f10463d \ + --hash=sha256:f19bb891234d72535764d703bfed1153cc34f4214d5bd7150aee1eec9e8f4366 \ + --hash=sha256:f7467da8a9822bf1a55336f877340c5bcbd3c482afc43a99771169f74a26dedc \ + --hash=sha256:f78abfa8dfc32376fd1aacf597b2f2fbbe0ea751419aee718af5d4f82537ef8c \ + --hash=sha256:f7eabc04151c78a9f4d5bbb5f1faf571e4defeb4b585e0fe95b60ff2dbe4d3d7 \ + --hash=sha256:f814362777a9f841adddb200ecdf8f5cb1e5a3c4b7a86378edbd6ccb26edd702 \ + --hash=sha256:fc299c129490f55f254cd90be0deca4764e36e9a7c08b4aa588479a3bbed3098 \ + --hash=sha256:fc76378c62a0f04d0cd82fbb1a2cd2d7e28fcb40d5873f28a6c44e388aaa2751 \ + --hash=sha256:fc88b26f08d634f7bc819a7852e5214f5802641ab8d9fd5326892292eee1993e \ + --hash=sha256:fe67a3d11cd9b4efabfa45c3d00ffba2b26811442a73a581a94b67c2b5faccf6 + # via + # aiohttp + # yarl proto-plus==1.27.2 \ --hash=sha256:6432f75893d3b9e70b9c412f1d2f03f65b11fb164b793d14ae2ca01821d22718 \ --hash=sha256:b2adde53adadf75737c44d3dcb0104fde65250dfc83ad59168b4aa3e574b6a24 + # via google-api-core protobuf==6.33.6 \ --hash=sha256:0cd27b587afca21b7cfa59a74dcbd48a50f0a6400cfb59391340ad729d91d326 \ --hash=sha256:77179e006c476e69bf8e8ce866640091ec42e1beb80b213c3900006ecfba6901 \ @@ -844,103 +1969,464 @@ protobuf==6.33.6 \ --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 + # via + # a2a-sdk + # google-api-core + # googleapis-common-protos + # logfire + # opentelemetry-proto + # proto-plus +psycopg2-binary==2.9.12 \ + --hash=sha256:00814e40fa23c2b37ef0a1e3c749d89982c73a9cb5046137f0752a22d432e82f \ + --hash=sha256:049366c6d884bdcd65d66e6ca1fdbebe670b56c6c9ba46f164e6667e90881964 \ + --hash=sha256:0dc9228d47c46bda253d2ecd6bb93b56a9f2d7ad33b684a1fa3622bf74ffe30c \ + --hash=sha256:1006fb62f0f0bc5ce256a832356c6262e91be43f5e4eb15b5eaf38079464caf2 \ + --hash=sha256:127467c6e476dd876634f17c3d870530e73ff454ff99bff73d36e80af28e1115 \ + --hash=sha256:1c8ad4c08e00f7679559eaed7aff1edfffc60c086b976f93972f686384a95e2c \ + --hash=sha256:29d4d134bd0ab46ffb04e94aa3c5fa3ef582e9026609165e2f758ff76fc3a3be \ + --hash=sha256:3471336e1acfd9c7fe507b8bad5af9317b6a89294f9eb37bd9a030bb7bebcdc6 \ + --hash=sha256:36512911ebb2b60a0c3e44d0bb5048c1980aced91235d133b7874f3d1d93487c \ + --hash=sha256:398fcd4db988c7d7d3713e2b8e18939776fd3fb447052daae4f24fa39daede4c \ + --hash=sha256:3d999bd982a723113c1a45b55a7a6a90d64d0ed2278020ed625c490ff7bef96c \ + --hash=sha256:40e7b28b63aaf737cb3a1edc3a9bbc9a9f4ad3dcb7152e8c1130e4050eddcb7d \ + --hash=sha256:411e85815652d13560fbe731878daa5d92378c4995a22302071890ec3397d019 \ + --hash=sha256:4413d0caef93c5cf50b96863df4c2efe8c269bf2267df353225595e7e15e8df7 \ + --hash=sha256:4766ab678563054d3f1d064a4db19cc4b5f9e3a8d9018592a8285cf200c248f3 \ + --hash=sha256:4dfcf8e45ebb0c663be34a3442f65e17311f3367089cd4e5e3a3e8e62c978777 \ + --hash=sha256:527e6342b3e44c2f0544f6b8e927d60de7f163f5723b8f1dfa7d2a84298738cd \ + --hash=sha256:54a0dfecab1b48731f934e06139dfe11e24219fb6d0ceb32177cf0375f14c7b5 \ + --hash=sha256:5a0253224780c978746cb9be55a946bcdaf40fe3519c0f622924cdabdafe2c39 \ + --hash=sha256:5ac9444edc768c02a6b6a591f070b8aae28ff3a99be57560ac996001580f294c \ + --hash=sha256:5c7cb4cbf894a1d36c720d713de507952c7c58f66d30834708f03dbe5c822ccf \ + --hash=sha256:5c8ce6c61bd1b1f6b9c24ee32211599f6166af2c55abb19456090a21fd16554b \ + --hash=sha256:5cdc05117180c5fa9c40eea8ea559ce64d73824c39d928b7da9fb5f6a9392433 \ + --hash=sha256:612b965daee295ae2da8f8218ce1d274645dc76ef3f1abf6a0a94fd57eff876d \ + --hash=sha256:63a3ebbd543d3d1eda088ac99164e8c5bac15293ee91f20281fd17d050aee1c4 \ + --hash=sha256:66a7685d7e548f10fb4ce32fb01a7b7f4aa702134de92a292c7bd9e0d3dbd290 \ + --hash=sha256:6f3b3de8a74ef8db215f22edffb19e32dc6fa41340456de7ec99efdc8a7b3ec2 \ + --hash=sha256:6f9cae1f848779b5b01f417e762c40d026ea93eb0648249a604728cda991dde3 \ + --hash=sha256:718e1fc18edf573b02cb8aea868de8d8d33f99ce9620206aa9144b67b0985e94 \ + --hash=sha256:77b348775efd4cdab410ec6609d81ccecd1139c90265fa583a7255c8064bc03d \ + --hash=sha256:7af18183109e23502c8b2ae7f6926c0882766f35b5175a4cd737ad825e4d7a1b \ + --hash=sha256:7c729a73c7b1b84de3582f73cdd27d905121dc2c531f3d9a3c32a3011033b965 \ + --hash=sha256:83946ba43979ebfdc99a3cd0ee775c89f221df026984ba19d46133d8d75d3cd9 \ + --hash=sha256:840066105706cd2eb29b9a1c2329620056582a4bf3e8169dec5c447042d0869f \ + --hash=sha256:863f5d12241ebe1c76a72a04c2113b6dc905f90b9cef0e9be0efd994affd9354 \ + --hash=sha256:864c261b3690e1207d14bbfe0a61e27567981b80c47a778561e49f676f7ce433 \ + --hash=sha256:89d19a9f7899e8eb0656a2b3a08e0da04c720a06db6e0033eab5928aabe60fa9 \ + --hash=sha256:8ffdb59fe88f99589e34354a130217aa1fd2d615612402d6edc8b3dbc7a44463 \ + --hash=sha256:96937c9c5d891f772430f418a7a8b4691a90c3e6b93cf72b5bd7cad8cbca32a5 \ + --hash=sha256:98062447aebc20ed20add1f547a364fd0ef8933640d5372ff1873f8deb9b61be \ + --hash=sha256:995ce929eede89db6254b50827e2b7fd61e50d11f0b116b29fffe4a2e53c4580 \ + --hash=sha256:9b818ceff717f98851a64bffd4c5eb5b3059ae280276dcecc52ac658dcf006a4 \ + --hash=sha256:9fe06d93e72f1c048e731a2e3e7854a5bfaa58fc736068df90b352cefe66f03f \ + --hash=sha256:a46fe069b65255df410f856d842bc235f90e22ffdf532dda625fd4213d3fd9b1 \ + --hash=sha256:a7e39a65b7d2a20e4ba2e0aaad1960b61cc2888d6ab047769f8347bd3c9ad915 \ + --hash=sha256:a99eaab34a9010f1a086b126de467466620a750634d114d20455f3a824aae033 \ + --hash=sha256:ab29414b25dcb698bf26bf213e3348abdcd07bbd5de032a5bec15bd75b298b03 \ + --hash=sha256:ace94261f43850e9e79f6c56636c5e0147978ab79eda5e5e5ebf13ae146fc8fe \ + --hash=sha256:b4a9eaa6e7f4ff91bec10aa3fb296878e75187bced5cc4bafe17dc40915e1326 \ + --hash=sha256:b6937f5fe4e180aeee87de907a2fa982ded6f7f15d7218f78a083e4e1d68f2a0 \ + --hash=sha256:b9a339b79d37c1b45f3235265f07cdeb0cb5ad7acd2ac7720a5920989c17c24e \ + --hash=sha256:ba3df2fc42a1cfa45b72cf096d4acb2b885937eedc61461081d53538d4a82a86 \ + --hash=sha256:c41321a14dd74aceb6a9a643b9253a334521babfa763fa873e33d89cfa122fb5 \ + --hash=sha256:c5ee5213445dd45312459029b8c4c0a695461eb517b753d2582315bd07995f5e \ + --hash=sha256:c6528cefc8e50fcc6f4a107e27a672058b36cc5736d665476aeb413ba88dbb06 \ + --hash=sha256:cb4a1dacdd48077150dc762a9e5ddbf32c256d66cb46f80839391aa458774936 \ + --hash=sha256:cfa2517c94ea3af6deb46f81e1bbd884faa63e28481eb2f889989dd8d95e5f03 \ + --hash=sha256:d2fa0d7caca8635c56e373055094eeda3208d901d55dd0ff5abc1d4e47f82b56 \ + --hash=sha256:d3227a3bc228c10d21011a99245edca923e4e8bf461857e869a507d9a41fe9f6 \ + --hash=sha256:d6fcbba8c9fed08a73b8ac61ea79e4821e45b1e92bb466230c5e746bbf3d5256 \ + --hash=sha256:e4e184b1fb6072bf05388aa41c697e1b2d01b3473f107e7ec44f186a32cfd0b8 \ + --hash=sha256:ee2d84ef5eb6c04702d2e9c372ad557fb027f26a5d82804f749dfb14c7fdd2ab \ + --hash=sha256:f12ae41fcafadb39b2785e64a40f9db05d6de2ac114077457e0e7c597f3af980 \ + --hash=sha256:f625abb7020e4af3432d95342daa1aa0db3fa369eed19807aa596367ba791b10 \ + --hash=sha256:f921f3cd87035ef7df233383011d7a53ea1d346224752c1385f1edfd790ceb6a \ + --hash=sha256:fb1828cf3da68f99e45ebce1355d65d2d12b6a78fb5dfb16247aad6bdef5f5d2 \ + --hash=sha256:ffdd7dc5463ccd61845ac37b7012d0f35a1548df9febe14f8dd549be4a0bc81e + # via + # lightspeed-stack (pyproject.toml) + # llama-stack +py-key-value-aio==0.4.5 \ + --hash=sha256:ab862adbcb8c72547d1c57821f22cbbb71ab86509039c96f36e914e0336c8dd7 \ + --hash=sha256:c6563a2c6abe5da5e20f4f9e875c2a9b425a2244a54fadbf46cf140a9eea45d7 + # via fastmcp-slim pyaml==26.2.1 \ --hash=sha256:489dd82997235d4cfcf76a6287fce2f075487d77a6567c271e8d790583690c68 \ --hash=sha256:6261c2f0a2f33245286c794ad6ec234be33a73d2b05427079fd343e2812a87cf + # via llama-stack-client +pyarrow==24.0.0 \ + --hash=sha256:02b001b3ed4723caa44f6cd1af2d5c86aa2cf9971dacc2ffa55b21237713dfba \ + --hash=sha256:04920d6a71aabd08a0417709efce97d45ea8e6fb733d9ca9ecffb13c67839f68 \ + --hash=sha256:0b3537c00fb8d384f15ac1e79b6eb6db04a16514c8c1d22e59a9b95c8ba42868 \ + --hash=sha256:1183baeb14c5f587b1ec52831e665718ce632caab84b7cd6b85fd44f96114495 \ + --hash=sha256:14e31a3c9e35f1ab6356c6378f6f72830e6d2d5f1791df3774a7b097d18a6a1e \ + --hash=sha256:1617043b99bd33e5318ae18eb2919af09c71322ef1ca46566cdafc6e6712fb66 \ + --hash=sha256:1a4e45017efbf115032e4475ee876d525e0e36c742214fbe405332480ecd6275 \ + --hash=sha256:1b2fe7f9a5566401a0ef2571f197eb92358925c1f0c8dba305d6e43ea0871bb3 \ + --hash=sha256:1cc9057f0319e26333b357e17f3c2c022f1a83739b48a88b25bfd5fa2dc18838 \ + --hash=sha256:2392d954fcb920f42d230284b677605e4e2fbb11f2821e823e642abd67fbb491 \ + --hash=sha256:25ea65d868eb04015cd18e6df2fbe98f07e5bda2abefabcb88fce39a947716f6 \ + --hash=sha256:295f0a7f2e242dabd513737cf076007dc5b2d59237e3eca37b05c0c6446f3826 \ + --hash=sha256:2f16197705a230a78270cdd4ea8a1d57e86b2fdcbc34a1f6aebc72e65c986f9a \ + --hash=sha256:35405aecb474e683fb36af650618fd5340ee5471fc65a21b36076a18bbc6c981 \ + --hash=sha256:38be1808cdd068605b787e6ca9119b27eb275a0234e50212c3492331680c3b1e \ + --hash=sha256:3a577bd840ca83f646f0a625dbc571dba7044c43c2d1503afc378b570954345c \ + --hash=sha256:3b13dedfe76a0ad2d1d859b0811b53827a4e9d93a0bcb05cf59333ab4980cc7e \ + --hash=sha256:418e48ce50a45a6a6c73c454677203a9c75c966cb1e92ca3370959185f197a05 \ + --hash=sha256:55a3bc1e3df3b5567b7d27ef551b2283f0c68a5e86f1cd56abc569da4f31335b \ + --hash=sha256:6165461f55ef6314f026de6638d661188e3455d3ec49834556a0ebbdbace18bb \ + --hash=sha256:61a3d7eaa97a14768b542f3d284dc6400dd2470d9f080708b13cd46b6ae18136 \ + --hash=sha256:6233c9ed9ab9d1db47de57d9753256d9dcffbf42db341576099f0fd9f6bf4810 \ + --hash=sha256:641f795b361874ac9da5294f8f443dfdbee355cf2bd9e3b8d97aaac2306b9b37 \ + --hash=sha256:644a246325b8c69c595ad1dd4b463eba4b0cdb731370e4a86137d433208d6147 \ + --hash=sha256:6f066b179d68c413374294bc1735f68475457c933258df594443bb9d88ddc2a0 \ + --hash=sha256:7986f1fa71cee060ad00758bcc79d3a93bab8559bf978fab9e53472a2e25a17b \ + --hash=sha256:7c2b98645d576a0b9616892ead22b64a83a5f043c5e2ca15ebcefcb5b70c80cb \ + --hash=sha256:806f24b4085453c197a5078218d1ee08783ebbba271badd153d1ae22a3ee804f \ + --hash=sha256:85fe721a14dd823aca09127acbb06c3ca723efbd436c004f16bca601b04dcc83 \ + --hash=sha256:8adc8e6ce5fccf5dc707046ae4914fd537def529709cc0d285d37a7f9cd442ca \ + --hash=sha256:9700ebd9a51f5895ce75ff4ac4b3c47a7d4b42bc618be8e713e5d56bacf5f931 \ + --hash=sha256:9b18371ad2f44044b81a8d23bc2d8a9b6a6226dca775e8e16cfee640473d6c5d \ + --hash=sha256:a964266397740257f16f7bb2e4f08a0c81454004beab8ff59dd531b73610e9f2 \ + --hash=sha256:adbbedc55506cbdabb830890444fb856bfb0060c46c6f8026c6c2f2cf86ae795 \ + --hash=sha256:ae8a1145af31d903fa9bb166824d7abe9b4681a000b0159c9fb99c11bc11ad26 \ + --hash=sha256:b0e131f880cda8d04e076cee175a46fc0e8bc8b65c99c6c09dff6669335fde74 \ + --hash=sha256:b196eb3f931862af3fa84c2a253514d859c08e0d8fe020e07be12e75a5a9780c \ + --hash=sha256:b7d9a514e73bc42711e6a35aaccf3587c520024fe0a25d830a1a8a27c15f4f57 \ + --hash=sha256:bec9373df11544592b0ba7ec2af0e35059e5f0e7647c6183a854dedd193298f1 \ + --hash=sha256:c42ab9439498270139cc63e18847a02afe5c8b3ed9c931266533cfe378bd3591 \ + --hash=sha256:c91d00057f23b8d353039520dc3a6c09d8608164c692e9f59a175a42b2ae0c19 \ + --hash=sha256:d3e0b61e8efb24ed38898e5cdc5fffa9124be480008d401a1f8071500494ae42 \ + --hash=sha256:d7027eba1df3b2069e2e8d80f644fa0918b68c46432af3d088ddd390d063ecde \ + --hash=sha256:d8ddd2768da81d3ee08cfea9b597f4abb4e8e1dc8ae7e204b608d23a0d3ab699 \ + --hash=sha256:e3268e43984d0b1a185c89b4cfff282a7ead12fc93f56cfd7088bdbcbe727041 \ + --hash=sha256:e4505fc6583f7b05ab854934896bcac8253b04ac1171a77dfb73efef92076d91 \ + --hash=sha256:e56a1ffe9bf7b727432b89104cc0849c21582949dd7bdcb34f17b2001a351a76 \ + --hash=sha256:e6f1278ee4785b6db21229374a1c9e54ec7c549de5d1efc9630b6207de7e170b \ + --hash=sha256:f7616236ec1bc2b15bfdec22a71ab38851c86f8f05ff64f379e1278cf20c634a \ + --hash=sha256:fb24ac194bfc5e86839d7dcd52092ee31e5fe6733fe11f5e3b06ef0812b20072 + # via datasets 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 + # via + # lightspeed-stack (pyproject.toml) + # pyasn1-modules +pyasn1-modules==0.4.2 \ + --hash=sha256:29253a9207ce32b64c3ac6600edc75368f98473906e8fd1043bd6b5b1de2c14a \ + --hash=sha256:677091de870a80aae844b1ca6134f54652fa2c8c5a52aa396440ac3106e941e6 + # via google-auth +pycparser==3.0 \ + --hash=sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29 \ + --hash=sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992 + # via cffi +pydantic==2.13.4 \ + --hash=sha256:45a282cde31d808236fd7ea9d919b128653c8b38b393d1c4ab335c62924d9aba \ + --hash=sha256:c40756b57adaa8b1efeeced5c196f3f3b7c435f90e84ea7f443901bec8099ef6 + # via + # a2a-sdk + # anthropic + # fastapi + # fastmcp-slim + # genai-prices + # google-genai + # litellm + # llama-stack + # llama-stack-api + # llama-stack-client + # mcp + # openai + # pydantic-ai-slim + # pydantic-evals + # pydantic-graph + # pydantic-settings +pydantic-ai==2.7.0 \ + --hash=sha256:8ec88dd3c55b32529b98f5ed296b5abcd3c74522d40dc2d82794906a6e0e6366 \ + --hash=sha256:deda625b79168a11bc86f1d67eb55e0a28bd421e3c587bd233b03947c966cf31 + # via lightspeed-stack (pyproject.toml) +pydantic-ai-skills==1.1.0 \ + --hash=sha256:66f85a63088a30863a3363a36830beedf60c32517473663c3da6557f1a838006 \ + --hash=sha256:72a0d9099f4562c96ed7f882f6b3e77589cd5e7d4c6d48c550904931ca56df1d + # via lightspeed-stack (pyproject.toml) +pydantic-ai-slim==2.7.0 \ + --hash=sha256:4b04442314de4394547b331e57d588d7dca06ed5394acc26cff34bd885002116 \ + --hash=sha256:cee9a1d40f8d1de1326603ce1c2818d37768c8fb8043b513c4473684bef3d2ca + # via + # pydantic-ai + # pydantic-ai-skills + # pydantic-evals +pydantic-core==2.46.4 \ + --hash=sha256:00c603d540afdd6b80eb39f078f33ebd46211f02f33e34a32d9f053bba711de0 \ + --hash=sha256:0186750b482eefa11d7f435892b09c5c606193ef3375bcf94aa00ae6bfb66262 \ + --hash=sha256:041bde0a48fd37cf71cab1c9d56d3e8625a3793fef1f7dd232b3ff37e978ecda \ + --hash=sha256:0c563b08bca408dc7f65f700633d8442fffb2421fc47b8101377e9fd65051ff0 \ + --hash=sha256:0cbe8b01f948de4286c74cdd6c667aceb38f5c1e26f0693b3983d9d74887c65e \ + --hash=sha256:0ce40cd7b21210e99342afafbd4d0f76d784eb5b1d60f3bdc566be4983c6c73b \ + --hash=sha256:0e96592440881c74a213e5ad528e2b24d3d4f940de2766bed9010ab1d9e51594 \ + --hash=sha256:10e17cbb10a330363733efc4d7c4d0dd827ac0909b8f6a6542298fed1ea62f29 \ + --hash=sha256:133878133d271ade3d41d1bfb2a45ec38dbdbda40bc065921c6b04e4630127e2 \ + --hash=sha256:14d4edf427bdcf950a8a02d7cb44a08614388dd6e1bdcbf4f67504fa7887da9c \ + --hash=sha256:14f4c5d6db102bd796a627bbb3a17b4cf4574b9ae861d8b7c9a9661c6dd3362d \ + --hash=sha256:17299feefe090f2caa5b8e37222bb5f663e4935a8bfa6931d4102e5df1a9f398 \ + --hash=sha256:184c081504d17f1c1066e430e117142b2c77d9448a97f7b65c6ac9fd9aee238d \ + --hash=sha256:18e5ceec2ab67e6d5f1a9085e5a24c9c4e2ac4545730bfe668680bca05e555f3 \ + --hash=sha256:19e51f073cd3df251856a8a4189fbdf1de4012c3ebacfb1884f94f1eb406079f \ + --hash=sha256:1a7dd0b3ee80d90150e3495a3a13ac34dbcbfd4f012996a6a1d8900e91b5c0fb \ + --hash=sha256:1d8ba486450b14f3b1d63bc521d410ec7565e52f887b9fb671791886436a42f7 \ + --hash=sha256:2108ba5c1c1eca18030634489dc544844144ee36357f2f9f780b93e7ddbb44b5 \ + --hash=sha256:228ee9bae8bef5b1e97ec58302f80357c37199e0d0a99174e138d28e6957b9d9 \ + --hash=sha256:23ace664830ee0bfe014a0c7bc248b1f7f25ed7ad103852c317624a1083af462 \ + --hash=sha256:2412e734dcb48da14d4e4006b82b46b74f2518b8a26ee7e58c6844a6cd6d03c4 \ + --hash=sha256:29c61fc04a3d840155ff08e475a04809278972fe6aef51e2720554e96367e34b \ + --hash=sha256:2f84c03c8607173d16b5a854ec68a2f9079ae03237a54fb506d13af47e1d018d \ + --hash=sha256:3009f12e4e90b7f88b4f9adb1b0c4a3d58fe7820f3238c190047209d148026df \ + --hash=sha256:3245406455a5d98187ec35530fd772b1d799b26667980872c8d4614991e2c4a2 \ + --hash=sha256:3447661d99f75a3683a4cf5c87da72f2161964611864dbbeac7fbb118bb4bfc0 \ + --hash=sha256:372429a130e469c9cd698925ce5fc50940b7a1336b0d82038e63d5bbc4edc519 \ + --hash=sha256:395aebd9183f9d112f569aeb5b2214d1a10a33bec8456447f7fbdfa51d38d4cd \ + --hash=sha256:3a233125ac121aa3ffba9a2b59edfc4a985a76092dc8279586ab4b71390875e7 \ + --hash=sha256:3be77f45df024d789a672ae34f8b06fb346c4f9f46ea714956660ea4862e89ac \ + --hash=sha256:3bf92c5d0e00fefaab325a4d27828fe6b6e2a21848686b5b60d2d9eeb09d76c6 \ + --hash=sha256:3ecbc122d18468d06ca279dc26a8c2e2d5acb10943bb35e36ae92096dc3b5565 \ + --hash=sha256:3fb702cd90b0446a3a1c5e470bfa0dd23c0233b676a9099ddcc964fa6ca13898 \ + --hash=sha256:428e04521a40150c85216fc8b85e8d39fece235a9cf5e383761238c7fa9b96fb \ + --hash=sha256:432c179df7874eeb73307aad2df0755e1ae0efa61ff0ea89b93e194411ae3928 \ + --hash=sha256:4a05d69cba51d852c5c3e92758653245a50c0b646ced0cf05bd793ed592839d6 \ + --hash=sha256:4c63ebc82684aa89d9a3bcbd13d515b3be44250dc68dd3bd81526c1cb31286c3 \ + --hash=sha256:4fc73cb559bdb54b1134a706a2802a4cddd27a0633f5abb7e53056268751ac6a \ + --hash=sha256:4fcbe087dbc2068af7eda3aa87634eba216dbda64d1ae73c8684b621d33f6596 \ + --hash=sha256:56cb4851bcaf3d117eddcef4fe66afd750a50274b0da8e22be256d10e5611987 \ + --hash=sha256:5855698a4856556d86e8e6cd8434bc3ac0314ee8e12089ae0e143f64c6256e4e \ + --hash=sha256:5a4330cdbc57162e4b3aa303f588ba752257694c9c9be3e7ebb11b4aca659b5d \ + --hash=sha256:5b712b53160b79a5850310b912a5ef8e57e56947c8ad690c227f5c9d7e561712 \ + --hash=sha256:5d5902252db0d3cedf8d4a1bc68f70eeb430f7e4c7104c8c476753519b423008 \ + --hash=sha256:617d7e2ca7dcb8c5cf6bcb8c59b8832c94b36196bbf1cbd1bfb56ed341905edd \ + --hash=sha256:62f875393d7f270851f20523dd2e29f082bcc82292d66db2b64ea71f64b6e1c1 \ + --hash=sha256:633147d34cf4550417f12e2b1a0383973bdf5cdfde212cb09e9a581cf10820be \ + --hash=sha256:66ce7632c22d837c95301830e111ad0128a32b8207533b60896a96c4915192ea \ + --hash=sha256:6b3ace8194b0e5204818c92802dcdca7fc6d88aabbb799d7c795540d9cd6d292 \ + --hash=sha256:6f2eeda33a839975441c86a4119e1383c50b47faf0cbb5176985565c6bb02c33 \ + --hash=sha256:7027560ee92211647d0d34e3f7cd6f50da56399d26a9c8ad0da286d3869a53f3 \ + --hash=sha256:7283d57845ecf5a163403eb0702dfc220cc4fbdd18919cb5ccea4f95ee1cdab4 \ + --hash=sha256:7a5f930472650a82629163023e630d160863fce524c616f4e5186e5de9d9a49b \ + --hash=sha256:7bfb192b3f4b9e8a89b6277b6ce787564f62cfd272055f6e685726b111dc7826 \ + --hash=sha256:811ff8e9c313ab425368bcbb36e5c4ebd7108c2bbf4e4089cfbb0b01eff63fac \ + --hash=sha256:8233f2947cf85404441fd7e0085f53b10c93e0ee78611099b5c7237e36aacbf7 \ + --hash=sha256:82cf5301172168103724d49a1444d3378cb20cdee30b116a1bd6031236298a5d \ + --hash=sha256:8358a950c8909158e3df31538a7e4edc2d7265a7c54b47f0864d9e5bae9dcebf \ + --hash=sha256:85bb3611ff1802f3ee7fdd7dbff26b56f343fb432d57a4728fdd49b6ef35e2f4 \ + --hash=sha256:86e1a4418c6cd97d60c95c71164158eaf7324fae7b0923264016baa993eba6fc \ + --hash=sha256:8b9bab013d1c7a79d3501ff86d0bc9c31bf587db4551677b96bec07df78c6b15 \ + --hash=sha256:8c5dac79fa1614d1e06ca695109c6105923bd9c7d1d6c918d4e637b7e6b32fd3 \ + --hash=sha256:8d0820e8192167f80d88d64038e609c31452eeca865b4e1d9950a27a4609b00b \ + --hash=sha256:8daafc69c93ee8a0204506a3b6b30f586ef54028f52aeeeb5c4cfc5184fd5914 \ + --hash=sha256:9037063db01f09b09e237c282b6792bd4da634b5402c4e7f0c61effed7701a04 \ + --hash=sha256:905a0ed8ea6f2d61c1738835f99b699348d7857379083e5fc497fa0c967a407c \ + --hash=sha256:90884113d8b48f760e9587002789ddd741e76ab9f89518cd1e43b1f1a52ec44b \ + --hash=sha256:91a06d2e259ecfbd8c901d70c3c507900458498142b3026a296b7de4d1322cc9 \ + --hash=sha256:926c9541b14b12b1681dca8a0b75feb510b06c6341b70a8e500c2fdcff837cce \ + --hash=sha256:9401557acd873c3a7f3eb9383edef8ac4968f9510e340f4808d427e75667e7b4 \ + --hash=sha256:9551187363ffc0de2a00b2e47c25aeaeb1020b69b668762966df15fc5659dd5a \ + --hash=sha256:962ccbab7b642487b1d8b7df90ef677e03134cf1fd8880bf698649b22a69371f \ + --hash=sha256:97e7cf2be5c77b7d1a9713a05605d49460d02c6078d38d8bef3cbe323c548424 \ + --hash=sha256:9aa768456404a8bf48a4406685ac2bec8e72b62c69313734fa3b73cf33b3a894 \ + --hash=sha256:9bc519fbf2b7578398853d815009ae5e4d4603d12f4e3f91da8c06852d3da3e9 \ + --hash=sha256:9d56801be94b86a9da183e5f3766e6310752b99ff647e38b09a9500d88e46e76 \ + --hash=sha256:9f444c499b3eefd3a92e348059471ea0c3a6e303d9c1cec09fa748fd9f895201 \ + --hash=sha256:9fa8ae11da9e2b3126c6426f147e0fba88d96d65921799bb30c6abd1cb2c97fb \ + --hash=sha256:a0f62d0a58f4e7da165457e995725421e0064f2255d8eccebc49f41bbc23b109 \ + --hash=sha256:a396dcc17e5a0b164dbe026896245a4fa9ff402edca1dff0be3d53a517f74de4 \ + --hash=sha256:aaa2a54443eff1950ba5ddc6b6ccda0d9c84a364276a62f969bdf2a390650848 \ + --hash=sha256:ad785e92e6dc634c21555edc8bd6b64957ab844541bcb96a1366c202951ae526 \ + --hash=sha256:af8244b2bef6aaad6d92cda81372de7f8c8d36c9f0c3ea36e827c60e7d9467a0 \ + --hash=sha256:b078afbc25f3a1436c7a1d2cd3e322497ee99615ba97c563566fdf46aff1ee01 \ + --hash=sha256:b2f69dec1725e79a012d920df1707de5caf7ed5e08f3be4435e25803efc47458 \ + --hash=sha256:b8458003118a712e66286df6a707db01c52c0f52f7db8e4a38f0da1d3b94fc4e \ + --hash=sha256:bb63e0198ca18aad131c089b9204c23079c3afa95487e561f4c522d519e55aba \ + --hash=sha256:bfec22eab3c8cc2ceec0248aec886624116dc079afa027ecc8ad4a7e62010f8a \ + --hash=sha256:c1747f85cee84c26985853c6f3d9bd3e75da5212912443fa111c113b9c246f39 \ + --hash=sha256:c1b3f518abeca3aa13c712fd202306e145abf59a18b094a6bafb2d2bbf59192c \ + --hash=sha256:c50f2528cf200c5eed56faf3f4e22fcd5f38c157a8b78576e6ba3168ec35f000 \ + --hash=sha256:c68fcd102d71ea85c5b2dfac3f4f8476eff42a9e078fd5faefff6d145063536b \ + --hash=sha256:c7a7bd4e39e8e4c12c39cd480356842b6a8a06e41b23a55a5e3e191718838ddf \ + --hash=sha256:c94f0688e7b8d0a67abf40e57a7eaaecd17cc9586706a31b76c031f63df052b4 \ + --hash=sha256:cbaf13819775b7f769bf4a1f066cb6df7a28d4480081a589828ef190226881cd \ + --hash=sha256:cd2213145bcc2ba85884d0ac63d222fece9209678f77b9b4d76f054c561adb28 \ + --hash=sha256:ce5c1d2a8b27468f433ca974829c44060b8097eedc39933e3c206a90ee49c4a9 \ + --hash=sha256:d396ec2b979760aaf3218e76c24e65bd0aca24983298653b3a9d7a45f9e47b30 \ + --hash=sha256:d51026d73fcfd93610abc7b27789c26b313920fcfb20e27462d74a7f8b06e983 \ + --hash=sha256:d80ee3d731373b24cebbc10d689ca4ee1875caf0d5703a245db18efd4dd37fc1 \ + --hash=sha256:d995260fdf4e1db774581b4900e0f832abe3c7c84996726bbc161b19c8f29e76 \ + --hash=sha256:da4b951fe36dc7c3a1ccb4e3cd1747c3542b8c9ceede8fc86cae054e764485f5 \ + --hash=sha256:daa27d92c36f24388fe3ad306b174781c747627f134452e4f128ea00ce1fe8c4 \ + --hash=sha256:db06ffe51636ffe9ca531fe9023dd64bdd794be8754cb5df57c5498ae5b518a7 \ + --hash=sha256:e0d65b8c354be7fb5f720c3caa8bc940bc2d20ce749c8e06135f07f8ed95dd7c \ + --hash=sha256:e68b7a074f65a2fd746c52a7ce6142ab7006074ac269ace0c25cd8ba171f8066 \ + --hash=sha256:e739fee756ba1010f8bcccb534252e85a35fe45ae92c295a06059ce58b74ccd3 \ + --hash=sha256:e846ae7835bf0703ae43f534ab79a867146dadd59dc9ca5c8b53d5c8f7c9ef02 \ + --hash=sha256:e9c26f834c65f5752f3f06cb08cb86a913ceb7274d0db6e267808a708b46bc89 \ + --hash=sha256:ea793e075b70290d89d8142074262885d3f7da19634845135751bd6344f73b50 \ + --hash=sha256:f027324c56cd5406ca49c124b0db10e56c69064fec039acc571c29020cc87c76 \ + --hash=sha256:f13a646d65d09fbf1bc6b3a9635d30095c8e7e5cc419ff35ecc563c5fd04cd49 \ + --hash=sha256:f47286a97f0bc9b8859519809077b91b2cefe4ae47fcbf5e466a009c1c5d742b \ + --hash=sha256:f747929cf940cddb5b3668a390056ddd5ba2e5010615ea2dcf4f9c4f3ab8791d \ + --hash=sha256:f99626688942fb746e545232e7726926f3be91b5975f8b55327665fafda991c7 \ + --hash=sha256:f9fa868638bf362d3d138ea55829cefb3d5f4b0d7f142234382a15e2485dbec4 \ + --hash=sha256:fbdb89b3e1c94a30cc5edfce477c6e6a5dc4d8f84665b455c27582f211a1c72c \ + --hash=sha256:fc010ab034c8c7452522748bf937df58020d256ccae0874463d1f4d01758af8e \ + --hash=sha256:fc3e9034a63de20e15e8ade85358bc6efc614008cab72898b4b4952bea0509ff \ + --hash=sha256:fd8b3d9fd264be37976686c7f65cd52a83f5e84f4bfd2adf9c1d469676bbb6ae + # via pydantic +pydantic-evals==2.7.0 \ + --hash=sha256:61cde423e9b784a8a8a9f0ca127af3d254be7ac57cecd2eabebdff8f4e53e7c6 \ + --hash=sha256:c043052a347f781d3702c65defff03fef9588c49c072c7f48f6cf94c480ec3c5 + # via pydantic-ai-slim +pydantic-graph==2.7.0 \ + --hash=sha256:4e5816dba4389c18c799748479754052f624bd3ca613c391c3a418475733cd40 \ + --hash=sha256:7ce75e8b5533f7af438b10ce6e9dbb51cf26a5a68cb5f5311325adffa75f45da + # via pydantic-ai-slim pydantic-settings==2.14.2 \ --hash=sha256:a20c97b37910b6550d5ea50fbcc2d4187defe58cd57070b73863d069419c9440 \ --hash=sha256:c19dd64b19097f1de80184f0cc7b0272a13ae6e170cbf240a3e27e381ed14a5f + # via + # fastmcp-slim + # mcp pygments==2.20.0 \ --hash=sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f \ --hash=sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176 + # via rich pyjwt==2.13.0 \ --hash=sha256:41571c89ca91598c79e8ef18a2d07367d4810fbbd6f637794879baf1b7703423 \ --hash=sha256:66adcc2aff09b3f1bbd95fc1e1577df8ac8723c978552fd43304c8a290ac5728 + # via + # llama-stack + # mcp + # msal 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 + # via oci +pyperclip==1.11.0 \ + --hash=sha256:244035963e4428530d9e3a6101a1ef97209c6825edab1567beac148ccc1db1b6 \ + --hash=sha256:299403e9ff44581cb9ba2ffeed69c7aa96a008622ad0c46cb575ca75b5b84273 + # via pydantic-ai-slim +python-dateutil==2.9.0.post0 \ + --hash=sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3 \ + --hash=sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427 + # via + # kubernetes + # oci + # pandas +python-dotenv==1.2.2 \ + --hash=sha256:1d8214789a24de455a8b8bd8ae6fe3c6b69a5e3d64aa8a8e5d68e694bbcb285a \ + --hash=sha256:2c371a91fbd7ba082c2c1dc1f8bf89ca22564a087c2c287cd9b662adde799cf3 + # via + # lightspeed-stack (pyproject.toml) + # fastmcp-slim + # litellm + # llama-stack + # pydantic-settings python-multipart==0.0.32 \ --hash=sha256:be54b7f3fa167bb83e4fcd936b887b708f4e57fe75911c02aebf53efaf8d938e \ --hash=sha256:ff6d3f776f16878c894e52e107296ffc890e913c611b1a4ec6c44e2821fe2e23 + # via + # llama-stack + # mcp pytz==2026.1.post1 \ --hash=sha256:3378dde6a0c3d26719182142c56e60c7f9af7e968076f31aae569d72a0358ee1 \ --hash=sha256:f2fd16142fda348286a75e1a524be810bb05d444e5a081f37f7affc635035f7a + # via oci +pyyaml==6.0.3 \ + --hash=sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c \ + --hash=sha256:0150219816b6a1fa26fb4699fb7daa9caf09eb1999f3b70fb6e786805e80375a \ + --hash=sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3 \ + --hash=sha256:02ea2dfa234451bbb8772601d7b8e426c2bfa197136796224e50e35a78777956 \ + --hash=sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6 \ + --hash=sha256:10892704fc220243f5305762e276552a0395f7beb4dbf9b14ec8fd43b57f126c \ + --hash=sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65 \ + --hash=sha256:1d37d57ad971609cf3c53ba6a7e365e40660e3be0e5175fa9f2365a379d6095a \ + --hash=sha256:1ebe39cb5fc479422b83de611d14e2c0d3bb2a18bbcb01f229ab3cfbd8fee7a0 \ + --hash=sha256:214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b \ + --hash=sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1 \ + --hash=sha256:22ba7cfcad58ef3ecddc7ed1db3409af68d023b7f940da23c6c2a1890976eda6 \ + --hash=sha256:27c0abcb4a5dac13684a37f76e701e054692a9b2d3064b70f5e4eb54810553d7 \ + --hash=sha256:28c8d926f98f432f88adc23edf2e6d4921ac26fb084b028c733d01868d19007e \ + --hash=sha256:2e71d11abed7344e42a8849600193d15b6def118602c4c176f748e4583246007 \ + --hash=sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310 \ + --hash=sha256:37503bfbfc9d2c40b344d06b2199cf0e96e97957ab1c1b546fd4f87e53e5d3e4 \ + --hash=sha256:3c5677e12444c15717b902a5798264fa7909e41153cdf9ef7ad571b704a63dd9 \ + --hash=sha256:3ff07ec89bae51176c0549bc4c63aa6202991da2d9a6129d7aef7f1407d3f295 \ + --hash=sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea \ + --hash=sha256:418cf3f2111bc80e0933b2cd8cd04f286338bb88bdc7bc8e6dd775ebde60b5e0 \ + --hash=sha256:44edc647873928551a01e7a563d7452ccdebee747728c1080d881d68af7b997e \ + --hash=sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac \ + --hash=sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9 \ + --hash=sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7 \ + --hash=sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35 \ + --hash=sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb \ + --hash=sha256:5cf4e27da7e3fbed4d6c3d8e797387aaad68102272f8f9752883bc32d61cb87b \ + --hash=sha256:5e0b74767e5f8c593e8c9b5912019159ed0533c70051e9cce3e8b6aa699fcd69 \ + --hash=sha256:5ed875a24292240029e4483f9d4a4b8a1ae08843b9c54f43fcc11e404532a8a5 \ + --hash=sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b \ + --hash=sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c \ + --hash=sha256:6344df0d5755a2c9a276d4473ae6b90647e216ab4757f8426893b5dd2ac3f369 \ + --hash=sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd \ + --hash=sha256:652cb6edd41e718550aad172851962662ff2681490a8a711af6a4d288dd96824 \ + --hash=sha256:66291b10affd76d76f54fad28e22e51719ef9ba22b29e1d7d03d6777a9174198 \ + --hash=sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065 \ + --hash=sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c \ + --hash=sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c \ + --hash=sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764 \ + --hash=sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196 \ + --hash=sha256:8098f252adfa6c80ab48096053f512f2321f0b998f98150cea9bd23d83e1467b \ + --hash=sha256:850774a7879607d3a6f50d36d04f00ee69e7fc816450e5f7e58d7f17f1ae5c00 \ + --hash=sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac \ + --hash=sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8 \ + --hash=sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e \ + --hash=sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28 \ + --hash=sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3 \ + --hash=sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5 \ + --hash=sha256:9c57bb8c96f6d1808c030b1687b9b5fb476abaa47f0db9c0101f5e9f394e97f4 \ + --hash=sha256:9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b \ + --hash=sha256:9f3bfb4965eb874431221a3ff3fdcddc7e74e3b07799e0e84ca4a0f867d449bf \ + --hash=sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5 \ + --hash=sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702 \ + --hash=sha256:b30236e45cf30d2b8e7b3e85881719e98507abed1011bf463a8fa23e9c3e98a8 \ + --hash=sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788 \ + --hash=sha256:b865addae83924361678b652338317d1bd7e79b1f4596f96b96c77a5a34b34da \ + --hash=sha256:b8bb0864c5a28024fac8a632c443c87c5aa6f215c0b126c449ae1a150412f31d \ + --hash=sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc \ + --hash=sha256:bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c \ + --hash=sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba \ + --hash=sha256:c2514fceb77bc5e7a2f7adfaa1feb2fb311607c9cb518dbc378688ec73d8292f \ + --hash=sha256:c3355370a2c156cffb25e876646f149d5d68f5e0a3ce86a5084dd0b64a994917 \ + --hash=sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5 \ + --hash=sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26 \ + --hash=sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f \ + --hash=sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b \ + --hash=sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be \ + --hash=sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c \ + --hash=sha256:efd7b85f94a6f21e4932043973a7ba2613b059c4a000551892ac9f1d11f5baf3 \ + --hash=sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6 \ + --hash=sha256:fa160448684b4e94d80416c0fa4aac48967a969efe22931448d853ada8baf926 \ + --hash=sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0 + # via + # lightspeed-stack (pyproject.toml) + # datasets + # huggingface-hub + # kubernetes + # llama-stack + # pyaml + # pydantic-ai-skills + # pydantic-ai-slim + # pydantic-evals +referencing==0.37.0 \ + --hash=sha256:381329a9f99628c9069361716891d34ad94af76e461dcb0335825aecc7692231 \ + --hash=sha256:44aefc3142c5b842538163acb373e24cce6632bd54bdb01b21ad5863489f50d8 + # via + # jsonschema + # jsonschema-specifications regex==2026.5.9 \ --hash=sha256:002205cafd2a9e78c6290c7d1df277bf3277b3b7a30e0b4bb0dac2e2e3f7cb2d \ --hash=sha256:01f0f5f55f4b64dacec85dc116d3c05fd23ad3ff037bbc73a2085775953c2611 \ @@ -1056,30 +2542,357 @@ regex==2026.5.9 \ --hash=sha256:fd03c4f0e33280d15cae17159b899245d6b7c53d21def19b263b39655061f5ce \ --hash=sha256:fd190e88a895a8901325fad284a3f74ea52b1da8525b76cc811fa9b1edf0ce2b \ --hash=sha256:ff8d372ac2acdc048d1c19916f27ee61bc5722728458ba6ca5052f2c72d51763 + # via tiktoken requests==2.33.1 \ --hash=sha256:18817f8c57c6263968bc123d237e3b8b08ac046f5456bd1e307ee8f4250d3517 \ --hash=sha256:4e6d1ef462f3626a1f0a0a9c42dd93c63bad33f9f1c1937509b8c5c8718ab56a + # via + # lightspeed-stack (pyproject.toml) + # azure-core + # datasets + # google-api-core + # google-auth + # google-genai + # huggingface-hub + # kubernetes + # llama-stack-client + # msal + # opentelemetry-exporter-otlp-proto-http + # requests-oauthlib + # tiktoken +requests-oauthlib==2.0.0 \ + --hash=sha256:7dd8a5c40426b779b0868c404bdef9768deccf22749cde15852df527e6269b36 \ + --hash=sha256:b3dffaebd884d8cd778494369603a9e7b58d29111bf6b41bdc2dcd87203af4e9 + # via kubernetes rich==15.0.0 \ --hash=sha256:33bd4ef74232fb73fe9279a257718407f169c09b78a87ad3d296f548e27de0bb \ --hash=sha256:edd07a4824c6b40189fb7ac9bc4c52536e9780fbbfbddf6f1e2502c31b068c36 + # via + # lightspeed-stack (pyproject.toml) + # fastmcp-slim + # llama-stack + # llama-stack-client + # logfire + # pydantic-ai-slim + # pydantic-evals +rpds-py==2026.6.3 \ + --hash=sha256:0be972be84cfcaf46c8c6edf690ca0f154ac17babf1f6a955a51579b34ad2dc5 \ + --hash=sha256:127565fead0a10943b282957bd5447804ff3160ad79f2ad2635e6d249e380680 \ + --hash=sha256:127e08c0642d880cf32ca47ec2a4a77b901f7e2dd1ad9762adb13955d72ffcc9 \ + --hash=sha256:166cf54d9f44fc6ceb53c7860258dde44a81406646de79f8ed3234fca3b6e538 \ + --hash=sha256:168c733a7112e071bb7a66460e667edfcff06c017a3c523f7a8a8e08d0140804 \ + --hash=sha256:1967debc37f64f2c4dc90a7f563aec558b471966e12adcac4e1c4240496b6ebf \ + --hash=sha256:1cebd1337c242e4ec2293e541f712b2da849b29f48f0c293684b71c0632625d4 \ + --hash=sha256:1cf01971c4f2c5553b772a542e4aaf191789cd331bc2cd4ff0e6e65ba49e1e97 \ + --hash=sha256:1e5822dfc2f0d4ab7e745eaa6d85945069329beeccef965af3f3bb26058fcab6 \ + --hash=sha256:22bffe6042b9bcb0822bcd1955ec00e245daf17b4344e4ed8e9551b976b63e96 \ + --hash=sha256:23a439f31ccbeff1574e24889128821d1f7917470e830cf6544dced1c662262a \ + --hash=sha256:24e9c5386e16669b674a69c156c8eeefcb578f3b3397b713b08e6d60f3c7b187 \ + --hash=sha256:270b293dae9058fc9fcedab50f13cebf46fb8ed1d1d54e0521a9da5d6b211975 \ + --hash=sha256:29dfa0533a5d4c94d4dfa1b694fcb56c9c63aad8330ffdd816fd225d0a7a162f \ + --hash=sha256:2a9c6f195058cb45335e8cc3802745c603d716eb96bc9625950c1aac71c0c703 \ + --hash=sha256:2bfd04c19ddbd6640de0b51894d764bd2758854d5b75bd102d2ef10cb9c293a9 \ + --hash=sha256:2c54a076ca4d370980ab57bc0e31df57bbe8d41340436a90ef8b1219a3cbb127 \ + --hash=sha256:2c958bf94822e9290a40aaf2a822d4bc5c88099093e3948ad6c571eca9272e5f \ + --hash=sha256:2c99f7e8ccb3dd6e3e4bfeac657a7b208c9bac8075f4b078c02d7404c34107fa \ + --hash=sha256:2f7c26fbc5acd2522b95d4177fe4710ffd8e9b20529e703ffbf8db4d93903f05 \ + --hash=sha256:30c6dc199b24a5e3e81d50da0f00858c5bbdb2617a750395687f4339c5818171 \ + --hash=sha256:38a2fea2787428f811719ceb9114cb78964a3138838320c29ac39526c79c16ba \ + --hash=sha256:3a83ae6c67b7676b9878378547ca8e93ed77a580037bcbcd1d32f739e1e6089c \ + --hash=sha256:3cfe765c1da0072636ca06628261e0ea05688e160d5c8a03e0217c3854037223 \ + --hash=sha256:421aba32367055614287a4292b6a17f1939c9452299f7a0209c117e990b646d4 \ + --hash=sha256:425560c6fa0415f27261727bb20bd097568485e5eb0c121f1949417d1c516885 \ + --hash=sha256:4470ce197d4090875cf6affbf1f853338387428df97c4fb7b7106317b8214698 \ + --hash=sha256:4cf2d36a2357e4d07bb5a4f98801265327b48256867816cfd2ceb001e9754a8f \ + --hash=sha256:4f4bca01b63096f606e095734dd56e74e175f94cfbf24ff3d63281cec61f7bb7 \ + --hash=sha256:501f9f04a588d6a09179368c57071301445191767c64e4b52a6aa9871f1ef5ed \ + --hash=sha256:536bceea4fa4acf7e1c61da2b5786304367c816c8895be71b8f537c480b0ea1f \ + --hash=sha256:538949e262e46caa31ac01bdb3c1e8f642622922cacbabbae6a8445d9dc33eaf \ + --hash=sha256:539d75de9e0d536c84ff18dfeb805398e58227001ce09231a26a08b9aed1ee0e \ + --hash=sha256:54f45a148e28767bf343d33a684693c70e451c6f4c0e9904709a723fafbdfc1f \ + --hash=sha256:55927d532399c2c646100ff7feb48eaa940ad70f42cd68e1328f3ded9f81ca24 \ + --hash=sha256:58eadac9cd119677b60e1cf8ac4052f35949d71b8a9e5556efccbe82533cf22a \ + --hash=sha256:5e8d07bddee435a2ff6f1920e18feff28d0bc4533e42f4bf6927fbd073312c41 \ + --hash=sha256:62698275682bf121181861295c9181e789030a2d516071f5b8f3c23c170cd0fc \ + --hash=sha256:639c8929aa0afe81be836b04de888460d6bed38b9c54cfc18da8f6bfabf5af5d \ + --hash=sha256:67e3a721ffc5d8d2210d3671872298c4a84e4b8035cfe42ffd7cde35d772b146 \ + --hash=sha256:6de4744d05bd1aa1be4ed7ea1189e3979196808008113bbbf899a460966b925e \ + --hash=sha256:6e84adbcf4bf841aed8116a8264b9f50b4cb3e7bd89b516122e616ac56ca269e \ + --hash=sha256:7491ee23305ac3eb59e492b6945881f5cd77a6f731061a3f25b77fd40f9e99a4 \ + --hash=sha256:79486287de1730dbaff3dbd124d0ca4d2ef7f9d29bf2544f1f93c09b5bcbbd12 \ + --hash=sha256:7b689145a1485c335569bd056464f3243a29af7ed3871c7be31ad624ba239bc7 \ + --hash=sha256:7f88d653e7b3b779d71ae7454e20dcc9b6bae903f33c269db9f2be41bda3f261 \ + --hash=sha256:8020133a74bd81b4572dd8e4be028a6b1ebcd70e6726edc3918008c08bee6ee6 \ + --hash=sha256:808345f53cb952433ca2816f1604ff3515608a81784954f38d4452acfe8e61d5 \ + --hash=sha256:83e35b57523816c8613fd0776b40cd8bb9f596b37ddd2692eb4a6bb5ab2f8c93 \ + --hash=sha256:842e7b070435622248c7a2c44ae53fa1440e073cc3023bc919fed570884097a7 \ + --hash=sha256:847927daf4cffbd4e90e42bc890069897101edd015f956cb8721b3473372edda \ + --hash=sha256:882076c00c0a608b131187055ddc5ae29f2e7eaf870d6168980420d58528a5c8 \ + --hash=sha256:8b95977e7211527ab0ba576e286d023389fbeeb32a6b7b771665d333c60e5342 \ + --hash=sha256:8bb68f03f395eb793220b45c097bd4d8c32944393da0fad8b999efac0868fc8c \ + --hash=sha256:8c2642a7603ec0b16ed77da4555db3b4b472341904873788327c0b0d7b95f1bb \ + --hash=sha256:8c3d1e9c15b9d51ca0391e13da1a25a0a4df3c58a37c9dc368e0736cf7f69df0 \ + --hash=sha256:8c6e5a2f750cc71c3e3b11d71661f21d6f9bc6cebc6564b1466417a1ec03ec77 \ + --hash=sha256:8d2294a31386bfa251d8c8a39472beee17db67d4f1a6eabea665d35c9a4461c3 \ + --hash=sha256:8e4320744c1ffdd95a603def63344bfab2d33edeab301c5007e7de9f9f5b3885 \ + --hash=sha256:8e65860d238379ed982fd9ba690579b5e95af2f4840f99c772816dbe573cb826 \ + --hash=sha256:8f2e5c5ee828d42cb11760761c0af6507927bec42d0ad5458f97c9203b054617 \ + --hash=sha256:900a67df3fd1660b035a4761c4ce73c382ea6b35f90f9863c36c6fd8bf8b09bb \ + --hash=sha256:913ca42ccad3f8cc6e292b587ae8ae49c8c823e5dce51a736252fc7c7cdfa577 \ + --hash=sha256:9250a9a0a6fd4648b3f868da8d91a4c52b5811a62df58e753d50ae4454a36f80 \ + --hash=sha256:931908d9fc855d8f74783377822be318edb6dcb19e47169dc038f9a1bf60b06e \ + --hash=sha256:9826217f048f620d9a712672818bf231442c1b35d96b227a07eabd11b4bb6945 \ + --hash=sha256:9891e594296ab9dada6551c8e7b387b2721f27a67eecd528412e8906247a7b90 \ + --hash=sha256:9c1255b302953c86a486b81d330d5ee1d5bd937691ce271b6be0ef0e299eaab7 \ + --hash=sha256:a0811d33247c3d6128a3001d763f2aa056bb3425204335400ac54f89eec3a0d0 \ + --hash=sha256:a136d453475ac0fcbda502ef1e6504bd28d6d904700915d278deeab0d00fe140 \ + --hash=sha256:a214c993455f99a89aaeadc9b21241900037adc9d97203e374d75513c5911822 \ + --hash=sha256:a3086b538543802f84c843911242db20447de00d8752dd0efc936dbcf02218ba \ + --hash=sha256:a3450b693fde92133e9f51060568a4c31fcca76d5e53bbd611e689ca446517e9 \ + --hash=sha256:a550fb4950a06dde3beb4721f5ad4b25bf4513784665b0a8522c792e2bd822a4 \ + --hash=sha256:a9f4645593036b81bbdb36b9c8e0ea0d1c3fee968c4d59db0344c14087ef143a \ + --hash=sha256:aca6c1ef08a82bfe327cc156da694660f599923e2e6665b6d81c9c2d0ac9ffc8 \ + --hash=sha256:acac386b453c2516111b50985d60ce46e7fadb5ea71ae7b25f4c946935bf27cf \ + --hash=sha256:acc992ab27b15f852c76755eb2ab7dce86585ddadba6fa5946e58556088845b4 \ + --hash=sha256:ae3d4fe8c0b9213624fdce7279d70e3b148b682ca20719ebd193a23ebfa47324 \ + --hash=sha256:ae50181a047c871561212bb97f7932a2d45fb53e947bd9b57ebad85b529cbc53 \ + --hash=sha256:ae6dd8f10bd17aad820876d24caec9efdafd80a318d16c0a48edb5e136902c6b \ + --hash=sha256:af05d726809bff6b141be124d4c7ce998f9c9c7f30edb1f46c07aa103d540b41 \ + --hash=sha256:afd70d95892096cdb26f15a00c45907b17817577aa8d1c76b2dcc2788391f9e9 \ + --hash=sha256:b5c2dc92304aa48a4a60443b548bb12f12e119d4b72f314015e67b9e1be97fca \ + --hash=sha256:bc0011654b91cc4fb2ae701bec0a0ba1e552c0714247fa7af6c59e0ccfa3a4e1 \ + --hash=sha256:bcfbcf66006befb9fd2aeaa9e01feaf881b4dc330a02ba07d2322b1c11be7b5d \ + --hash=sha256:bdbd97738551fca3917c1bd7188bec1920bb520104f28e7e1007f9ceb17b7690 \ + --hash=sha256:c60924535c75f1566b6eb75b5c31a48a43fef04fa2d0d201acbad8a9969c6107 \ + --hash=sha256:c7b9a2f8f4d8e90af72571d3d495deebdd7e3c75451f5b41719aee166e940fc2 \ + --hash=sha256:ca6546b66be9dc4738b1b043d5ebd5488c66c578c5ff0fd0e8065313fe3afb76 \ + --hash=sha256:ccffae9a092a00deb7efd545fe5e2c33c33b88e7c054337e9a74c179347d0b7d \ + --hash=sha256:cdc7e35386f3847df728fbcb5e887e2d79c19e2fa1eba9e51b6621d23e3243af \ + --hash=sha256:d15fde0e6fb0d88a60d221204873743e5d9f0b7d29165e62cd86d0413ad74ba6 \ + --hash=sha256:d34c20167764fbcf927194d532dd7e0c56772f0a5f943fa5ef9e9afbba8fb9db \ + --hash=sha256:d483fe17f01ad64b7bf7cc38fcefff1ca9fb83f8c2b2542b68f97ffe0611b369 \ + --hash=sha256:d7469697dce35be237db177d42e2a2ee26e6dcc5fc052078a6fefabd288c6edd \ + --hash=sha256:db08f45aecde626498fb3df07bcf6d2ec040af42e859a4f5040d79c200342911 \ + --hash=sha256:dc319e5a1de4b6913aac94bf6a2f9e847371e0a140a43dd4991db1a09bc2d504 \ + --hash=sha256:de3eceba0b683bcbb1ab93da016d0270df1f9ae7be716b40214c5dafac6ea45a \ + --hash=sha256:dfcc8b909769d19db55c7cc9541eb64b9b774b1057ffffb4f1048070475bb9f9 \ + --hash=sha256:e059c5dde6452b44424bd1834557556c226b57781dee1227af23518459722b13 \ + --hash=sha256:e4316bf32babbed84e691e352faf967ce2f0f024174a8643c37c94a1080374fc \ + --hash=sha256:e52655eaf81e32593abedaa4bfe33170c8cfedf3365ed9be6e11e07f148f0278 \ + --hash=sha256:e55d236be29255554da47abe5c577637db7c24a02b8b46f0ca9524c855801868 \ + --hash=sha256:ea7bb13b7c9a29791f87a0387ba7d3ad3a6d783d827e4d3f27b40a0ff44495e2 \ + --hash=sha256:ea964164cc9afa72d4d9b23cc28dafae93693c0a53e0b42acbff15b22c3f9ddd \ + --hash=sha256:ec829541c45bca16e61c7ae50c20501f213605beb75d1aba91a6ee37fbbb56a4 \ + --hash=sha256:ecabd69db66de867690f9797f2f8fa27ba501bbc24540cbdbdc649cd15888ba6 \ + --hash=sha256:ed0c1e5d10cdc7135537988c74a0188da68e2f3c30813ba3744ab1e42e0480f9 \ + --hash=sha256:f0840b5b17057f7fd918b76183a4b5a0635f43e14eb2ce60dce1d4ee4707ea00 \ + --hash=sha256:f4d78253f6996be4901669ad25319f842f740eccf4d58e3c7f3dd39e6dde1d8f \ + --hash=sha256:f56f1695bc5c0871cbc33dc0130fcf503aab0c57dcc5a6700a4f49eba4f2652e \ + --hash=sha256:f826877d462181e5eb1c26a0026b8d0cab05d99844ecb6d8bf3627a2ca0c0442 \ + --hash=sha256:f8f23ead891a3b762f35ab3b04623da7056545b48aa60d59957e6789914545da \ + --hash=sha256:f90938e92afda60266da758ee7d363447f7f0138c9559f9e1811629580582d90 \ + --hash=sha256:faa679d19a6696fd54259ad321251ad77a13e70e03dd834daa762a44fb6196ef + # via + # jsonschema + # referencing semver==3.0.4 \ --hash=sha256:9c824d87ba7f7ab4a1890799cec8596f15c1241cb473404ea1cb0c55e4b04746 \ --hash=sha256:afc7d8c584a5ed0a11033af086e8af226a9c0b206f313e0301f8dd7b6b589602 -sentence-transformers==5.4.1 \ - --hash=sha256:436bcb1182a0ff42a8fb2b1c43498a70d0a75b688d182f2cd0d1dd115af61ddc \ - --hash=sha256:a6d640fc363849b63affb8e140e9d328feabab86f83d58ac3e16b1c28140b790 + # via lightspeed-stack (pyproject.toml) sentry-sdk==2.59.0 \ --hash=sha256:abcf65ee9a9d9cdebf9ad369782408ecca9c1c792686ef06ba34f5ab233527fe \ --hash=sha256:cd265808ef8bf3f3edf69b527c0a0b2b6b1322762679e55b8987db2e9584aec1 + # via lightspeed-stack (pyproject.toml) +six==1.17.0 \ + --hash=sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274 \ + --hash=sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81 + # via + # kubernetes + # python-dateutil +sniffio==1.3.1 \ + --hash=sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2 \ + --hash=sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc + # via + # anthropic + # google-genai + # llama-stack-client + # openai +sqlalchemy==2.0.51 \ + --hash=sha256:0378d055e9e8cd6ce4d8dff683bdd3d7d413533c4ee51d67a2b1e0f9eacc0f23 \ + --hash=sha256:0592bdadf86ddcabfd72d9ab66ea8a5d8d2cc6be1cc51fa7e66c03868ac5eac1 \ + --hash=sha256:08a204d8b5638717c26a24df18fcf40af45a6b22e35b70b1d62f0113c2e278e8 \ + --hash=sha256:0c2c62877097e1a0db401fba5cb4debee33265e5b2a55c4ccb489c02c53b4f72 \ + --hash=sha256:0e8203d2fbd5c6254692ef0a72c740d75b2f3c7ca345404f4c1a4604813c77c0 \ + --hash=sha256:0f053118c30e53161857a953e4de667d90e274980dccbe5dd3829bbbeece72a5 \ + --hash=sha256:0f6bcad487aee1c638d707235682fc96f741de00663619881ab235400d03289e \ + --hash=sha256:111604e637da87031255ddc26c7d7bc22bc6af6f5d459ccff3af1b4660233a85 \ + --hash=sha256:1181256e0f16479691b5616d36375dc2620ad8332b25978763c3d206ad3f3f1d \ + --hash=sha256:159bb6ba32059f57ad7375a8f50d844dd2f19d14954ecf820cd33e20debd46b2 \ + --hash=sha256:1aa10c0daee6705294d181daadaa793221e1a59ed55000a3fab1d42b088ce4ba \ + --hash=sha256:1af05726b3d0cdba1c55284bf408fd3b792e690fe2399bfb8304565551cda652 \ + --hash=sha256:1bed1ee8b01da6088210aa9412023326fb98a599ba502e6118308601dcbef77f \ + --hash=sha256:1d21ce524ab86c23046e992a5b81cb54c21079c6df6e78b8fc77d77cac70a6b9 \ + --hash=sha256:1e47b1199c2e832e325eacabc8d32d2487f58c9358f97e9a00f5eb93c5680d84 \ + --hash=sha256:247acaa29ccef6250dfd6a3eedf8f94ddf23564180a39fe362e32ae9dbdbde46 \ + --hash=sha256:2a97eaad21c84b4ef8010b11eeba9fe6153eb0b3df3ff8b6abc309df1b978ef7 \ + --hash=sha256:2cf39aabdf48e87c1c2c2ed6d20d33ffa0733b3071ce9c5f66357947dd009080 \ + --hash=sha256:2e54ff2dd657f2e3e0fbf2b097db1182f7bfea263eca4353f00065bae2a67c3d \ + --hash=sha256:39a76529db6305693d8d4affa58ad5b5e2e18edd62daea628b29b97930b3513d \ + --hash=sha256:4004ada0aafe8ae1991b2cd1d99c6d9146126e123bd6f883c260d974aa012e54 \ + --hash=sha256:436728ce18a80f6951a1e11cc6112c2ede9faf20766f1a26195a7c441ca12dbd \ + --hash=sha256:483b11bd46bf35fc14c52faf338b04300c9e6ce554bce9b11be85bfec3bc3195 \ + --hash=sha256:4a011ea4510683319ce4ed274b56ee05194b39b6da9d09ca7a39388f0fa84dcc \ + --hash=sha256:581921d849d6e6f994d560389192955e80e2950e18fcdfe2ccea863e01158e6e \ + --hash=sha256:59cab3686b1bc039dd9cded2f8d0c08a246e84e76bd4ab5b4f18c7cdae293825 \ + --hash=sha256:6b588fd681ddf0c196b8df1ea49a8913514894b2b8f945a9511b4b48871f99c8 \ + --hash=sha256:6e46fc36029eff666391e0531e5387b62ce6c4f1d8e50b3fb3099eaca1b42522 \ + --hash=sha256:6ea306caaae6bd5afd0a46050003c88f6bf33227377a49298c498c3cb88ff491 \ + --hash=sha256:72ca54c952107ba5cd58854b67a5a6268631289d21651a1235396f3b98b47400 \ + --hash=sha256:740cf6f35351b1ac3d82369152acf1d51d37e3dcf85d4dc0a22ca01410eabe2a \ + --hash=sha256:7c2056838b6685b72fdb36c99996cf862753461a62f2e84f4196371d3b2d6a07 \ + --hash=sha256:7c6b36ed71f41942bdcd2ad2522be46bfce09d5705be5640ecf19bbc7660e4b7 \ + --hash=sha256:7d78702b26ba1c18b2d0fb2ea940ba7f17a9581b42e8361ff93920ebbee1235a \ + --hash=sha256:804dccd8a4a6242c4e30ad961e540e18a588f6527202f2d6791b01845d59fdc9 \ + --hash=sha256:9161cfc9efce70d1715f47d6ff40f79c6778c00d53be4fbc09d70301e4b83ba7 \ + --hash=sha256:96747bfbadb055466e5b46d572618170046b45ce5a4879167f50d70a5319a499 \ + --hash=sha256:9f380393be5abeb6815f68fd39271b95127173511b6706b0a630a9995d53f8f5 \ + --hash=sha256:a42ad6afcbaaa777241e347aa2e29155993045a0d6b7db74da61053ffe875fe0 \ + --hash=sha256:a5b2ed6d828f1f09bd812861f4f59ca3bc3803f9df871f4555187f0faf018604 \ + --hash=sha256:a6d26094615306d116dd5e4a51b0304c99dd2356fc569eed6922a80a6bd3b265 \ + --hash=sha256:aa18ae738b5170e253ad0bb6c4b0f07585081e8a6e50893e4d911d47b39a0904 \ + --hash=sha256:ad30ae663711786303fbcd46a47516302d201ee49a877cb3fac61f672895110a \ + --hash=sha256:b21f0e7efc7a5c509e953784e9d1575ebb8b4318960e7e7d7a93bb803626cf64 \ + --hash=sha256:b3e693d15533a45cd5906f0589f9c35090bef6ef45bf1e8195c424aa0ae06a8d \ + --hash=sha256:b7f08588854bbb724041d9ae9d980d40040c922382e1d9a2ecb390edc4fd5032 \ + --hash=sha256:b93ab07b5292dbe7e6b8da89475275e7042744283921344b56105f3eeb0f828b \ + --hash=sha256:bb024d8b621d0be75f4f44ecc7c950450026e76d66dc8f791bb5331d7fed59d5 \ + --hash=sha256:bb1f5062f98b0b3290e72b707747fdd7e0f22d6956b236ba7ca7f5c9971d2da2 \ + --hash=sha256:c45a496d6bc05dec41dcd4c3a2b183723f47473255c159cd80b503c8f246424d \ + --hash=sha256:c5d98a2709840027f5a347c3af0a7c3d5f6c1ff93af2ca1c54494e23cba8f389 \ + --hash=sha256:c68568f3facf8f66fa76c60e0ced69b67666ffa9941d1d0a3756fda196049080 \ + --hash=sha256:c95ef01f53233a305a874a44a63fbfb1d81cd79b49de0f8529b3548cde437e37 \ + --hash=sha256:ca216e8af5c05e326efc7e28716ac2381a7cf9791749f5ee1849dccdc99c9b00 \ + --hash=sha256:ca8435d13829b92f4a97362d91975154a4015db3a2634154e1754e9a915e6b86 \ + --hash=sha256:dc261707bf5739aea8a541593f3cc1d463c2701fb05fbcbba0ce031b69a21260 \ + --hash=sha256:e5ea1a213be1fcd5e49d9904c3b9939211ded90bc2a64e93f4c01963474285de \ + --hash=sha256:fa268106c8987639a17a18514cfe0cd9bf17420ab887e1e1bf486da8836135b1 + # via + # lightspeed-stack (pyproject.toml) + # llama-stack sse-starlette==3.4.2 \ --hash=sha256:2f9a7f51ed84395a0427fb9f66cb1ec11f7899d977a72cbc9070b962a2e14489 \ --hash=sha256:6ea5d35b7ce979a3de5a0db5f77fe886b1616e4b3e1ad93fba502bd9b5fb662f + # via mcp starlette==1.3.1 \ --hash=sha256:05d0213193f2fbaae60e2ecb593b4add4262ad4e46536b54abe36f11a71724e0 \ --hash=sha256:c7372aae11c3c3f26a42df7bd626cec2f47d03483d261d369516a615a53714c6 + # via + # lightspeed-stack (pyproject.toml) + # fastapi + # fastmcp-slim + # llama-stack + # mcp + # pydantic-ai-slim + # sse-starlette +structlog==26.1.0 \ + --hash=sha256:e081a26d6c373e6d201eca24eede26d8ffab07f88f477822e679183428d3d91e \ + --hash=sha256:f63a716cbd1b1291cf7661de7794b455acfa4c43c5bcf1630e6ad5ddc1adb3b7 + # via llama-stack tenacity==9.1.4 \ --hash=sha256:6095a360c919085f28c6527de529e76a06ad89b23659fa881ae0649b867a9d55 \ --hash=sha256:adb31d4c263f2bd041081ab33b498309a57c77f9acf2db65aadf0898179cf93a + # via + # google-genai + # pydantic-ai-slim +termcolor==3.3.0 \ + --hash=sha256:348871ca648ec6a9a983a13ab626c0acce02f515b9e1983332b17af7979521c5 \ + --hash=sha256:cf642efadaf0a8ebbbf4bc7a31cec2f9b5f21a9f726f4ccbb08192c9c26f43a5 + # via + # fire + # llama-stack + # llama-stack-client +tiktoken==0.13.0 \ + --hash=sha256:059c8ecf554eb5b41e6e054ba467b871b03277d267dee7244380aca4359747d4 \ + --hash=sha256:115c4f26ffa11caac8b54eea35c2ad38c612c20a48d35dd15d70a02ac6f51f58 \ + --hash=sha256:125bc05005e747f993a83dc67934249932d6e4209854452cd4c0b1d53fba3ba2 \ + --hash=sha256:165cf1820ea4a354985c2490a5205d4cc74661c934aca79dd0368232fff94e0f \ + --hash=sha256:2a3b536c55802fe42f4b4644d2be4f04bf788506b48de0a0a658cb58f8bce232 \ + --hash=sha256:2b920b35805cd64585a37c3dc7ce65fba4d2d36016be01e1d7942482ca29093a \ + --hash=sha256:2c397ddda233208345b01bd30f2fca79ff730e55731d0108a603f9bc57f6af3b \ + --hash=sha256:303f7d91b4fce3baddbcde05c139091d4caa5026ac7214c1dc7ff7a71ee429ff \ + --hash=sha256:32ac870a806cfb260a02d0cb70426aef02e038297f8ad50df5040bb5af360791 \ + --hash=sha256:32e0c12305105002c047b3bb1070b0dd9a73b0cb3b2856a8972b810e7a4f5881 \ + --hash=sha256:35e1ea1e0631c04f551297284a1ab7e1f65a3c55a9a48728d5e0f66b4527c04a \ + --hash=sha256:36217497eaffc158607a3b26f065300db2aefd43b115263f3b9688ce38146173 \ + --hash=sha256:3f277ebea5edd7b8bf03c6f9431e1d67d517530115572b2dc1d465326e8f88c7 \ + --hash=sha256:43cee3e5400573b2046fbf092cc7a5bc30164f9e4c95ce20714da929df48737a \ + --hash=sha256:44733b99bfd72b590cd0936b1c01b3b4dd73122db2d544bc1ceeb18a7678c910 \ + --hash=sha256:472527e9132952f2fbf77cd290658bacf003d4d5a3fabc18e5fbd407cbae4d9b \ + --hash=sha256:477c9a38e20d0ed248090509acf1e839ad3967a4f00b4b0f958210049f656dee \ + --hash=sha256:47b1df8d73390a24f94980c75158cdd5c56d256f16d55f30cb49c230caba9ba4 \ + --hash=sha256:493af3aa28a4aaf2e3d2600a2ee717252c9bf5ab38fff94eb5a02db5ab77e5ad \ + --hash=sha256:4d9980f11429ed2d737c463bb1fb78cf330caa026adf002f714aced7849a687b \ + --hash=sha256:4e2f67d27c9626cdd25fe33d9313c5cdb3d8d82da646b68d6eb8e7e9c20e6448 \ + --hash=sha256:51384448aa508e4df84c0f7c1dc3211c7f7b8096325660ee5fc82f3e11b381ce \ + --hash=sha256:5ba5fd62507a932d1241346179e3b39bc7bf7408f03c272652d93b3bedf5db24 \ + --hash=sha256:5cb65b60b9408563676d874a3a4ee573370066f0dc4e29d84e82e989c6517424 \ + --hash=sha256:5d48843bee149630eb735a99e1f4a85b47308d21868ea63163f6e87768d3cfed \ + --hash=sha256:5df5d1507bd245f1ccad4a074698240021239e455eb0bb4ced4e3d7181872154 \ + --hash=sha256:5e6358911cab4adee6712da27d65573496a4f68cf8a2b5fca6a4ad10fc5748cf \ + --hash=sha256:6644c9c2b5cf3916f5a3641d7d12fdb3f006a7b3d9ff6acdaec44e29ab1ff91e \ + --hash=sha256:6b1615f0ff71953d19729ceb18865429c185b0a23c5353f1bbca34a394bf60f7 \ + --hash=sha256:6c43a675ca14f6f2749ba7f12075d37456015a24b859f2517b9beb4ef30807ec \ + --hash=sha256:6eb4a5bfbc6426938026b1a334e898ac53541360d62d8c689870160cc80abd67 \ + --hash=sha256:75ab9bc99fa020a4c283424590ecd7f3afd70c1c281cb3fa3192a6c3af9f9615 \ + --hash=sha256:7ab10f4a21c2999846940113f6dbd72e0fa06a24119feddd74cc47e85818e06d \ + --hash=sha256:7bfe1849caa65d1e1d9871817170ec497bbb7984e182012e1bdce72f66608cdb \ + --hash=sha256:7d40c6c5aab171dcd6eb8455bc567bde404bb9def60cdb8c1299cc782b242bb9 \ + --hash=sha256:7de52e3f566d19b3b11bd37eea552c6c305ad74081f736882bd44d148ed4c48d \ + --hash=sha256:85b78cc3a2c3d48723ca751fa981f1fedccd54194ca0471b957364353a898b07 \ + --hash=sha256:8f2d16e7a7c783ad81f36e457d046d1f1c8af70b22aec8a13238efe531977c41 \ + --hash=sha256:8fe806a50664e83a6ffd56cbd1e4f5dcc6cd32a3e7538f70dc38b1a271384545 \ + --hash=sha256:91c180fe255bd5a86d8316210d2833a1d4d33d026cd86a67812f4773743c8d26 \ + --hash=sha256:95097e4f89b06403976e498abf61a0ee73a7497e73fb599cb211d8197a054d91 \ + --hash=sha256:975cbd78d085d75d26b59660e262736dcaed1e35f8f142cd6291025c01d25486 \ + --hash=sha256:9b842981fa91accdffd48ff6408a977b7a91c3fbda55d353c3c68114d5c9d69e \ + --hash=sha256:9b8858b29804b3a0add25ce9e62fb00f89f621dc754d75d03ca419d17e8ddf67 \ + --hash=sha256:a116178fa7e1b4065bff05214360373a65cac22f965be7b3f73d00a0dbfe7649 \ + --hash=sha256:a2937ad042d49d50eac6e1ba07c5661d4bd3942a5b1e0c0d08475c4df83676e1 \ + --hash=sha256:b8ac2d6420ff05841a89ba5205c6d45f56c4f6843454f3c884b7eb1a2a8dddb2 \ + --hash=sha256:b967dfb9d0adf9a631953b1b40717684f04478270fc51bbccdd2f838d67a2f00 \ + --hash=sha256:c9435714c3a84c2319499de9a300c0e604449dd0799ff246458b3bb6a7f433c1 \ + --hash=sha256:ca8b310bd93b3772cb1b7922d915446864860f562bdfe4825c63a0aed3fb28cd \ + --hash=sha256:cb99cb5127449f58d0a2d5f5ccfb390d8dbdfd919c221246caaee29d8725ed51 \ + --hash=sha256:d108bc2d470fc53c8ecd24f2c0fd2b5f98c33e87cdb6aa2e9b8c5dced703d273 \ + --hash=sha256:da86f8c96ac1c235d7a3b3eebff1eacfdbcfb8ad792706943268d4d2938fbafe \ + --hash=sha256:e28157350f7ebf35008dd8e9e0fdb621f976e4230c881099c85e8cf07eaa50e2 \ + --hash=sha256:eaaaef47c2406277181d2086484c317bf7fc433e2d5d03ff94f56b0dcec87471 \ + --hash=sha256:ed5a30027cb4d8c7ca8b273d4766f3db3cf58fad9e9f3b1a68a351ffb54873d5 \ + --hash=sha256:fc1c44cd37b43fc46bae593129164f4f281e82ea116b57a85aa81bda57eafc94 + # via + # lightspeed-stack (pyproject.toml) + # litellm + # llama-stack + # pydantic-ai-slim +tokenizers==0.23.1 \ + --hash=sha256:120468fb4c24faf0543c835a4fabafa4deb3f20a035c9b6e83d0b553a97615d4 \ + --hash=sha256:1974288a609c343774f1b897c8b482c791ab17b75ab5c8c2b1737565c1d82288 \ + --hash=sha256:1bf13402aff9bc533c89cb849ec3b412dc3fbeacc9744840e423d7bf3f7dc0e3 \ + --hash=sha256:1feeeadf865a7915adc25445dea30e9933e593c31bb96c277cee36de227c8bfa \ + --hash=sha256:5075b405006415ea148a992d093699c66eb01952bf59f4d5727089a98bda45a4 \ + --hash=sha256:53b09e85775d5187941e7bab30e941b4134ab4a7dd8c68e783d231fb7ca27c51 \ + --hash=sha256:56f3a77de629917652f876294dc9fe6bad4a0c43bc229dc72e59bb23a0f4729a \ + --hash=sha256:93120a930b919416da7cd10a2f606ac9919cc69cacae7980fa2140e277660948 \ + --hash=sha256:9d10a6d957ef01896dc274e890eee27d41bd0e74ef31e60616f0fc311345184e \ + --hash=sha256:a26197957d8e4425dfba746315f3c425ea00cfa8367c5fbc4ec73447893dcea9 \ + --hash=sha256:ae848657742035523fdf261773630cb819a26995fcd3d9ecae0c1daf6e5a4959 \ + --hash=sha256:e03d6ffcbe0d56ee9c1ccd070e70a13fa750727c0277e138152acbc0252c2224 \ + --hash=sha256:e0948bbb1ac1d7cdfc9fb6d62c596e3b7550036ad60ecd654a66ad273326324e \ + --hash=sha256:e3d8f40ea6268047de7046906326abed5134f27d4e8447b23763afe5808c8a96 \ + --hash=sha256:e7bfaf995c1bdbbd21d13539decb6650967013759318627d85daeb7881af16b7 \ + --hash=sha256:ea5a0ce170074329faaa8ea3f6400ecde604b6678192688533af80980daae71a \ + --hash=sha256:f836ca703b89ae07919a309f9651f7a88fd5a33d5f718ba5ad0870ec0256bad6 + # via litellm tornado==6.5.7 \ --hash=sha256:148b2eb15c2c765a50796172c1e499649b35f30d2e3c3d3e15913cfa56bfb163 \ --hash=sha256:66c513a76cda70d53907bc27cf1447557699c2e95aa48ba27a442ff61c3ddfc2 \ @@ -1091,18 +2904,535 @@ tornado==6.5.7 \ --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 + # via llama-stack +tqdm==4.68.4 \ + --hash=sha256:19829c9673638f2a0b8617da4cdcb927e831cd88bcfcb6e78d42a4d1af131520 \ + --hash=sha256:5168118b2368f48c561afda8020fd79195b1bdb0bdf8086b88442c267a315dc2 + # via + # datasets + # huggingface-hub + # llama-stack-client + # openai +truststore==0.10.4 \ + --hash=sha256:9d91bd436463ad5e4ee4aba766628dd6cd7010cf3e2461756b3303710eebc301 \ + --hash=sha256:adaeaecf1cbb5f4de3b1959b42d41f6fab57b2b1666adb59e89cb0b53361d981 + # via + # httpcore2 + # httpx2 +typing-extensions==4.16.0 \ + --hash=sha256:481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8 \ + --hash=sha256:dc983d19a509c94dba722ee6abd33940f7c05a89e243c47e907eb4db6f1a43e5 + # via + # anthropic + # azure-core + # azure-identity + # fastapi + # fastmcp-slim + # google-genai + # huggingface-hub + # llama-stack-client + # logfire + # mcp + # openai + # opentelemetry-api + # opentelemetry-exporter-otlp-proto-http + # opentelemetry-sdk + # opentelemetry-semantic-conventions + # oracledb + # py-key-value-aio + # pydantic + # pydantic-core + # sqlalchemy + # typing-inspection +typing-inspection==0.4.2 \ + --hash=sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7 \ + --hash=sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464 + # via + # fastapi + # mcp + # pydantic + # pydantic-ai-slim + # pydantic-graph + # pydantic-settings urllib3==2.7.0 \ --hash=sha256:231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c \ --hash=sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897 + # via + # lightspeed-stack (pyproject.toml) + # kubernetes + # llama-stack + # oci + # requests + # sentry-sdk uvicorn==0.44.0 \ --hash=sha256:6c942071b68f07e178264b9152f1f16dfac5da85880c4ce06366a96d70d4f31e \ --hash=sha256:ce937c99a2cc70279556967274414c087888e8cec9f9c94644dfca11bd3ced89 + # via + # lightspeed-stack (pyproject.toml) + # llama-stack + # mcp + # pydantic-ai-slim wcwidth==0.6.0 \ --hash=sha256:1a3a1e510b553315f8e146c54764f4fb6264ffad731b3d78088cdb1478ffbdad \ --hash=sha256:cdc4e4262d6ef9a1a57e018384cbeb1208d8abbc64176027e2c2455c81313159 + # via prompt-toolkit +websocket-client==1.9.0 \ + --hash=sha256:9e813624b6eb619999a97dc7958469217c3176312b3a16a4bd1bc7e08a46ec98 \ + --hash=sha256:af248a825037ef591efbf6ed20cc5faa03d3b47b9e5a2230a529eeee1c1fc3ef + # via kubernetes +websockets==16.0 \ + --hash=sha256:0298d07ee155e2e9fda5be8a9042200dd2e3bb0b8a38482156576f863a9d457c \ + --hash=sha256:04cdd5d2d1dacbad0a7bf36ccbcd3ccd5a30ee188f2560b7a62a30d14107b31a \ + --hash=sha256:08d7af67b64d29823fed316505a89b86705f2b7981c07848fb5e3ea3020c1abe \ + --hash=sha256:152284a83a00c59b759697b7f9e9cddf4e3c7861dd0d964b472b70f78f89e80e \ + --hash=sha256:1637db62fad1dc833276dded54215f2c7fa46912301a24bd94d45d46a011ceec \ + --hash=sha256:19c4dc84098e523fd63711e563077d39e90ec6702aff4b5d9e344a60cb3c0cb1 \ + --hash=sha256:1c1b30e4f497b0b354057f3467f56244c603a79c0d1dafce1d16c283c25f6e64 \ + --hash=sha256:2b9f1e0d69bc60a4a87349d50c09a037a2607918746f07de04df9e43252c77a3 \ + --hash=sha256:31a52addea25187bde0797a97d6fc3d2f92b6f72a9370792d65a6e84615ac8a8 \ + --hash=sha256:32da954ffa2814258030e5a57bc73a3635463238e797c7375dc8091327434206 \ + --hash=sha256:335c23addf3d5e6a8633f9f8eda77efad001671e80b95c491dd0924587ece0b3 \ + --hash=sha256:3425ac5cf448801335d6fdc7ae1eb22072055417a96cc6b31b3861f455fbc156 \ + --hash=sha256:349f83cd6c9a415428ee1005cadb5c2c56f4389bc06a9af16103c3bc3dcc8b7d \ + --hash=sha256:37b31c1623c6605e4c00d466c9d633f9b812ea430c11c8a278774a1fde1acfa9 \ + --hash=sha256:417b28978cdccab24f46400586d128366313e8a96312e4b9362a4af504f3bbad \ + --hash=sha256:485c49116d0af10ac698623c513c1cc01c9446c058a4e61e3bf6c19dff7335a2 \ + --hash=sha256:4a1aba3340a8dca8db6eb5a7986157f52eb9e436b74813764241981ca4888f03 \ + --hash=sha256:50f23cdd8343b984957e4077839841146f67a3d31ab0d00e6b824e74c5b2f6e8 \ + --hash=sha256:52a0fec0e6c8d9a784c2c78276a48a2bdf099e4ccc2a4cad53b27718dbfd0230 \ + --hash=sha256:52ac480f44d32970d66763115edea932f1c5b1312de36df06d6b219f6741eed8 \ + --hash=sha256:5569417dc80977fc8c2d43a86f78e0a5a22fee17565d78621b6bb264a115d4ea \ + --hash=sha256:569d01a4e7fba956c5ae4fc988f0d4e187900f5497ce46339c996dbf24f17641 \ + --hash=sha256:583b7c42688636f930688d712885cf1531326ee05effd982028212ccc13e5957 \ + --hash=sha256:5a4b4cc550cb665dd8a47f868c8d04c8230f857363ad3c9caf7a0c3bf8c61ca6 \ + --hash=sha256:5f451484aeb5cafee1ccf789b1b66f535409d038c56966d6101740c1614b86c6 \ + --hash=sha256:5f6261a5e56e8d5c42a4497b364ea24d94d9563e8fbd44e78ac40879c60179b5 \ + --hash=sha256:6e5a82b677f8f6f59e8dfc34ec06ca6b5b48bc4fcda346acd093694cc2c24d8f \ + --hash=sha256:71c989cbf3254fbd5e84d3bff31e4da39c43f884e64f2551d14bb3c186230f00 \ + --hash=sha256:781caf5e8eee67f663126490c2f96f40906594cb86b408a703630f95550a8c3e \ + --hash=sha256:7be95cfb0a4dae143eaed2bcba8ac23f4892d8971311f1b06f3c6b78952ee70b \ + --hash=sha256:7d837379b647c0c4c2355c2499723f82f1635fd2c26510e1f587d89bc2199e72 \ + --hash=sha256:86890e837d61574c92a97496d590968b23c2ef0aeb8a9bc9421d174cd378ae39 \ + --hash=sha256:878b336ac47938b474c8f982ac2f7266a540adc3fa4ad74ae96fea9823a02cc9 \ + --hash=sha256:8b6e209ffee39ff1b6d0fa7bfef6de950c60dfb91b8fcead17da4ee539121a79 \ + --hash=sha256:8cc451a50f2aee53042ac52d2d053d08bf89bcb31ae799cb4487587661c038a0 \ + --hash=sha256:8d7f0659570eefb578dacde98e24fb60af35350193e4f56e11190787bee77dac \ + --hash=sha256:8e1dab317b6e77424356e11e99a432b7cb2f3ec8c5ab4dabbcee6add48f72b35 \ + --hash=sha256:8ff32bb86522a9e5e31439a58addbb0166f0204d64066fb955265c4e214160f0 \ + --hash=sha256:95724e638f0f9c350bb1c2b0a7ad0e83d9cc0c9259f3ea94e40d7b02a2179ae5 \ + --hash=sha256:9b5aca38b67492ef518a8ab76851862488a478602229112c4b0d58d63a7a4d5c \ + --hash=sha256:a069d734c4a043182729edd3e9f247c3b2a4035415a9172fd0f1b71658a320a8 \ + --hash=sha256:a0b31e0b424cc6b5a04b8838bbaec1688834b2383256688cf47eb97412531da1 \ + --hash=sha256:a35539cacc3febb22b8f4d4a99cc79b104226a756aa7400adc722e83b0d03244 \ + --hash=sha256:a5e18a238a2b2249c9a9235466b90e96ae4795672598a58772dd806edc7ac6d3 \ + --hash=sha256:a653aea902e0324b52f1613332ddf50b00c06fdaf7e92624fbf8c77c78fa5767 \ + --hash=sha256:abf050a199613f64c886ea10f38b47770a65154dc37181bfaff70c160f45315a \ + --hash=sha256:af80d74d4edfa3cb9ed973a0a5ba2b2a549371f8a741e0800cb07becdd20f23d \ + --hash=sha256:b14dc141ed6d2dde437cddb216004bcac6a1df0935d79656387bd41632ba0bbd \ + --hash=sha256:b784ca5de850f4ce93ec85d3269d24d4c82f22b7212023c974c401d4980ebc5e \ + --hash=sha256:bc59589ab64b0022385f429b94697348a6a234e8ce22544e3681b2e9331b5944 \ + --hash=sha256:c0204dc62a89dc9d50d682412c10b3542d748260d743500a85c13cd1ee4bde82 \ + --hash=sha256:c0ee0e63f23914732c6d7e0cce24915c48f3f1512ec1d079ed01fc629dab269d \ + --hash=sha256:caab51a72c51973ca21fa8a18bd8165e1a0183f1ac7066a182ff27107b71e1a4 \ + --hash=sha256:d6297ce39ce5c2e6feb13c1a996a2ded3b6832155fcfc920265c76f24c7cceb5 \ + --hash=sha256:daa3b6ff70a9241cf6c7fc9e949d41232d9d7d26fd3522b1ad2b4d62487e9904 \ + --hash=sha256:df57afc692e517a85e65b72e165356ed1df12386ecb879ad5693be08fac65dde \ + --hash=sha256:e0334872c0a37b606418ac52f6ab9cfd17317ac26365f7f65e203e2d0d0d359f \ + --hash=sha256:e6578ed5b6981005df1860a56e3617f14a6c307e6a71b4fff8c48fdc50f3ed2c \ + --hash=sha256:eaded469f5e5b7294e2bdca0ab06becb6756ea86894a47806456089298813c89 \ + --hash=sha256:f4a32d1bd841d4bcbffdcb3d2ce50c09c3909fbead375ab28d0181af89fd04da \ + --hash=sha256:fd3cb4adb94a2a6e2b7c0d8d05cb94e6f1c81a0cf9dc2694fb65c7e8d94c42e4 + # via google-genai +wrapt==2.2.2 \ + --hash=sha256:0065a3b657cec06813b4241d2462ccec287f6863103d7445b725fb3a889736f9 \ + --hash=sha256:055e6fcfaa28e58c6a8c247d48b92be9d56f818b7068aa4f22b15b3343a09931 \ + --hash=sha256:0788e321027c999bf221b667bd4a54aaefd1a36283749a860ac3eb77daed0302 \ + --hash=sha256:07fdcb012821859168641acf68afad61ef9783cf37100af85f152550e9677194 \ + --hash=sha256:09f811d43f6f33ec7515f0be76b159569f4057ab54d3e079c3204dddb90afa2a \ + --hash=sha256:0abfd648dac9ac9c5b3aa9b523d27f1789046640b58dcd5652a720ddb325e1fc \ + --hash=sha256:0ad520e6daa9bbf136f14de735474dbec7dcc0891f718e1d274ce8dc92e645af \ + --hash=sha256:0e64826f920c42d9d9f87e8cc09ffae66c51ede12d59061a5a426deb9aa71745 \ + --hash=sha256:0e7070c7472582e31af3dfc2622b2381a0df7435110a9388ed8db5ffbce67efb \ + --hash=sha256:10adb01371408c6de504a6658b9886480f1a4919a83752748a387a504a21df79 \ + --hash=sha256:11d95fc2fbad3163596c39d440e6f21ca9fccece74b56e30a37ac2fca786a07c \ + --hash=sha256:173e5bb5ca350a6e0abab60b7ec7cdd7992a814cb14b4de670a28f067f105663 \ + --hash=sha256:1fc7691f070220215cccb2a20836b9adbaecb8ff22ad47abe63de5f110994fac \ + --hash=sha256:209112cafd963710a05d199aae431d79a28bc76eb8e6d1bbbb8ad24340722cae \ + --hash=sha256:2252f77663651b89255895f58cc6ac08fcb206d4371813e5af61bb62d4f7689c \ + --hash=sha256:25904acb9475f46c24fe0423dbc8fda8cc5fbc282ab3dc6e72e919748c53f4e9 \ + --hash=sha256:26fc73a1b15e0946d2942b9a4426d162b51676338327dc067ccd8d2d76385f94 \ + --hash=sha256:2cb07f414fab25dbe6b5c7398e1491423a5c81a6209533639969a6c928d474a4 \ + --hash=sha256:2cd7181ab1c31192ff5219269830744b5a62020b3a6d433588c4f1c95b8f8bff \ + --hash=sha256:2e096c9d39a59b35b63c9aacfbbbec2088ff51ff1fc31051acc60a07f42f273a \ + --hash=sha256:305d4c247d61c4115794a169141823c62f719525ddb90b23aa332741c77d2c28 \ + --hash=sha256:30f7424af5c5c345b7f26490e097f74a2ef45b3d08b664dc33571aee3bd3b56c \ + --hash=sha256:3179a4db066b53d40562e368b12895440c8f0953b6543b89d6acc41c0273996e \ + --hash=sha256:3442eee2a5798f9b451f1b2cd7518ce8b7e28a2a364696c414460a0e295c012a \ + --hash=sha256:385cb1866f20479e83299af585375bfa0a4b0c6c9907a981483ea782ea8ae406 \ + --hash=sha256:3a4eb7964ff4643d333c84f880bcf554652b2a1050aebc54ae696327f61acfaf \ + --hash=sha256:3b686cfc008776a3952d6213cb296ed7f45d782a8453936406faa89eac0835ab \ + --hash=sha256:3c4095803491f6ef72128914c28ec05bbad9758433bb35f6715a3e9c8e46fb2d \ + --hash=sha256:3dc3dcfc2da95d501905f10dc11a0dc622e91d8cdd8bbfcb63ca54afd131e556 \ + --hash=sha256:4250b43d1a129d947e083c4dc6baf333c9bb34edd26f912d5b0457841fc858ab \ + --hash=sha256:4402f57c5f0d0579599858ffbdd9bf4e3f0972f51096f2bd6cc7dab6b76ee49e \ + --hash=sha256:45c2f2768e790c9f8db90f239ef23a2af8e7570f25a35619ef902df4a738447f \ + --hash=sha256:4b481fb0c40d9fd90a5809911208da700987d373a20a4709dc9e3944af7a6bec \ + --hash=sha256:4bccea5cdecffa9dd70e343741f0e41e0a16619313d04b72f78bb525162ebcd0 \ + --hash=sha256:518b0c5e323511ec56a38894802ddd5e1222626484e68efe63f201854ad788e5 \ + --hash=sha256:5499236ad1dc116012e2a5dd943f3f31af12fce452128e2bbcbd55a7d3d4d14c \ + --hash=sha256:55b9a899e6fff5444f229d30aa6e9ac92d2216d9d60f33c771b5d76a760d5f8e \ + --hash=sha256:58f9f8d637c9a6e245c6ef5b109b67ec187d2faed23d1405656b51d96e0a5b56 \ + --hash=sha256:5bad217350f19ce99ca5b5e71d406765ea86fe541628426772b657375ee1c048 \ + --hash=sha256:5d0a142f7af07caeb5e5da87493162a7b8efa19ba919e550a746f7446e13fb30 \ + --hash=sha256:62415fd095bc590b842b6d092f2b5d9ccbaeb7e0b28535c03dcea2718b48636b \ + --hash=sha256:656593bb3f5529f03d27af4136c4d7b11990e470bcbc6fefa5ef218695bece55 \ + --hash=sha256:6c99012a22f735a85eed7c4b86a3e99c30fdd57d9e115b2b45f796264b58d0bf \ + --hash=sha256:6d1a6050405bf334be33bf66296f113563622972a34900ae6fa60fd283a1a900 \ + --hash=sha256:6e7e45b43d3c774d244fe7264378f5a3f0f383bc55a54a9866434e524540110f \ + --hash=sha256:6fe35fd51b74867d8b80174c277bd6bbf6a73e443f908129dc531c4b688a20d5 \ + --hash=sha256:7d2f6573561fa05002e5ee71529f4ab0a7dffed3e45b51013fe6298fe2723c02 \ + --hash=sha256:814f1bf3e0a7035f67a1db0cdaf5e2bbcaa4d7092db96673cfa467adeaab8591 \ + --hash=sha256:8374eb6b1a58809211e84ff835a182bb17ab2807a5bfef23204c8cff38178a00 \ + --hash=sha256:8417fd3c674d3c8023d080292d29301531a12daf8bd938dd419710dd2f464f2b \ + --hash=sha256:8636809939152be6ae20a6cef0fed9fe60f411b47847d0426a826884b469e971 \ + --hash=sha256:8ffbeaea6771a6eba6e6eeb09767864995726bc8240bb54baf88a9bb1db34d5c \ + --hash=sha256:94b00b00f806eb3ef2abe9049ed45994a81ee9284884d96e6b8314927c6cea3d \ + --hash=sha256:955f1d6e72a352e478de8d8b503abe301c5e139a141b62eb0923bd694995025f \ + --hash=sha256:9e8b648270c613720a202d9a45ebabc33261b22c3a839b115ac5bce8c0bb0d69 \ + --hash=sha256:9ee098171b07edba66ab69a9bf0251d3cbef654107e800feb24c0c6f30592728 \ + --hash=sha256:a28287413351cb198b8c5ddd045c56fac1d195808642cd264d1ab50426146650 \ + --hash=sha256:a2d78c363f97d8bd718ee40432c66395685e9e98528ccaa423c3355d1715a26d \ + --hash=sha256:a41e758d80dc0ab8c210f641ac892009d356cf1f955d97db544c8dd317b4d14c \ + --hash=sha256:a795d3c06e5fbf9ea2f13196180b77aeab1b4685917256ee0d014cc163d90063 \ + --hash=sha256:aa14b01804bce36c6d63d7b6a4f55df390f29f8648cc13a1f40b166f4d54680d \ + --hash=sha256:abf033b7e4542357659cd83ed6cd5033c43aaa1887044045ceb571528837f72f \ + --hash=sha256:abf8c20a2d72ee69e16328b3c91342c446e723bfe48bfcc4dded3b9722ac027f \ + --hash=sha256:b84cd4058001c9727b0e9980b7a9e66325b5ca748b1b578e822cade1bc6b304f \ + --hash=sha256:b89d8d73c82db2bb7e6090b3afd7973f980d24e905cc34394eab60b884b3bf67 \ + --hash=sha256:bbf00ee0cb55ec24e2b0995a71942b85b21a066db8f3f46e1dbfdb9433ffba81 \ + --hash=sha256:c20279cd1a29800815d7b2d6338b60a6c6e78263f9d6e62e0eda251ba9cae2d0 \ + --hash=sha256:c38510a21d5b9cf3e84c460d909e9f2a098667439fd42841bb081cab45835d68 \ + --hash=sha256:c427c9d06d859848a69f0d928fe28b5c33a941b2265d10a0e1f15cd244f1ee33 \ + --hash=sha256:c5d7825491bfa2d08b97e9557768987952c7b9ae687d06c3320b40a37ccb7f20 \ + --hash=sha256:c6c64c5d02578bc4c4bca4f0aef1504de933c1d5b4ac2710b9131111459506c8 \ + --hash=sha256:cd385a48b055bdc3630ab30e0c7fd8514a36904ec23f9cee7a65d887334a3cea \ + --hash=sha256:d01d8e0afc55823245a3b97a79c7c77464e31ea7a7b629a4bf26f9441dc1f18e \ + --hash=sha256:d09db0f7e8357060d3c38fc22a018aba683a796bf184360fd1a58f6fc180dc77 \ + --hash=sha256:d619e1eed9bd4f6ed9f24cd61971aa086fa86505289628d464bcf8a2c2e3f328 \ + --hash=sha256:d8a15813215f33fa83667bfc978b300e35669ea8bb424e970a1426bcb7bc6cca \ + --hash=sha256:dcaa5e1451bd8751d7bd1568dfa3321c78092a52a7ecb5d1a0f18a5791e1fd00 \ + --hash=sha256:dfb00cb7bb22099e2f64b7340fb96113639aa7260c0972af3797ace2297b936c \ + --hash=sha256:e542b7c5af91e2123a8aabf19894319d5ec4268d2a9ffd2f239386133fc47746 \ + --hash=sha256:e5a5290e4bf2f332fc29ce72ffb9a2fff678aaac047e2e9f5f7165cd7792e099 \ + --hash=sha256:e6fb7e94e8fe3e4c3067bb1653a91cce7c5e83acc119fdd41501b1bf74654617 \ + --hash=sha256:e7f10ee0bd53673bfd52b67cbce83336fe6cad90d2377b03baf66491d2bbfb91 \ + --hash=sha256:ec8f83949028366531383603139403cac7a826e4011955813cdd640017845ce5 \ + --hash=sha256:ef2cce266b5b0b07e19fa82e59673b81142b7a3607c8ed1254113d048ed668da \ + --hash=sha256:f1a2ff355ece6a111ca7a20dc86df6659c9205d3fcee674ca34f2a2854fd4e73 \ + --hash=sha256:f32fe639c39561ccc187bcae17e9271be0eb45f1c2952510d2f29b33ab577347 \ + --hash=sha256:f4bfd8d1eb438153eff8b8cfe87f032ba65731e1ce06138b5090f745a33f6f95 \ + --hash=sha256:f90038ab58fafb584801ca62d72384d7d5225d93c76f7b773c22fae545bd8066 \ + --hash=sha256:fa81c5b5fe8cd6c41e3a798533b81288279e5fdbde2128f21071922764281c99 \ + --hash=sha256:fb18fc51e813df0d9c98049e3bf2298a5495a648602040e21fa3c7329371159e + # via + # opentelemetry-instrumentation + # opentelemetry-instrumentation-httpx +xxhash==3.8.1 \ + --hash=sha256:000435984a0469b0f822fe76f35bddea0f96a4d6521b3339a60a6428cdee1edc \ + --hash=sha256:00de40f3b42240db23a82a5c682b55d7263d84a26a953240c1aee463409660e3 \ + --hash=sha256:01cab782f8a0a05ecad2c63d7ef10f7ab475f660e0d6419d069418c14d88de7c \ + --hash=sha256:0204701e6d01f64254e0e5ff4255812b1febe027ddd7dda63372e27f98b5e91f \ + --hash=sha256:027dee4355f3fcc41481650d846cf6cfc895c85a1ab7acd063063821a0df5b4c \ + --hash=sha256:036a024d8b9c01f70782e09ed98d532e76fd23f950ae7154bd950fe94e90ebec \ + --hash=sha256:0418ec8b2331b9d4d575fc9284427e8e69449d7172e99e1a86fcdd1f51a0a937 \ + --hash=sha256:08ea2081f5e88615fec8622a9f87fbe21b8ea58d88cfc02163ca11026ee62a92 \ + --hash=sha256:095e1323fa108be1292c54c86da3ef3c7a7dc015b105a52133973bc07a6ad11a \ + --hash=sha256:09a204dd4bb0823daf938cdd0dc8057d5f1e14fe3cbde929424255f23f9de872 \ + --hash=sha256:0dfdf19b0d5433a75d61f19dc85737af0f0b95e445c1ad69c855115d05efed45 \ + --hash=sha256:0fe37f72a207223d22a4eddc3149d4298993385aa9daef25c039246ca5a309f3 \ + --hash=sha256:10e4393ec33633c2f05ad01869e546ad080b1a18f2650503731f153774608b31 \ + --hash=sha256:1153265daa10750a9bf8e9b01753d7618024a300925591efaf16b1b7fa536699 \ + --hash=sha256:115772daeb71b2f3b9381177017f53e6cf3f3439c840737fdabd21aba6e54920 \ + --hash=sha256:12a3cf79dadbab9631230ebc4c51c7c60f1e9cdfb890c15fb733eaafe2e7713c \ + --hash=sha256:12eaeaa9ab8b9e6033a1fa5f6b338aaf55ff4df4bee11b59fd6ee03b19186ee4 \ + --hash=sha256:131324f719957b988861714de7d6ddf57b47abec3b0cc691302ffeaba0e05e10 \ + --hash=sha256:15790b686f8723b845fec6f612a343beb815a25c83117a7fa408d7c8ee5aa8fd \ + --hash=sha256:1731407102b9332cd3c9dadee07db498bc3d437b95d752b5b1a5f7eb730a3738 \ + --hash=sha256:1b86ae798a976ccbc1d02af6ccb98f5b4d24756b1f65e995f11d10fe071f486f \ + --hash=sha256:1c332dd48b8cb050da2bb2a3c96d72b1664168650a250ef9718e423df7989e05 \ + --hash=sha256:1da930bbcac3e8fbe2191850e2abb57977a99348c12c4b385e1058ac1b0a9ecc \ + --hash=sha256:1f44275ddb0978b67a58a951501903f04d49335a91f7681c9ce122ecb8ccb329 \ + --hash=sha256:1ffcc98d8878e449e86dec008cea6f44cfd3a954d2ef24ae7d1cc9f725beec7d \ + --hash=sha256:220d68130f83f7cc86d6edfdeab176adc73d7200bf3a8ec10c629e8cf605c215 \ + --hash=sha256:2256e80e4960ee282f63428adb349cb7f8bd8efe4db770d88eb815f4b9860724 \ + --hash=sha256:23e710118a5778a45db740b431943a3f2a82a571a052c2768cce6544d9c8c62e \ + --hash=sha256:264710bd335016f303763ce1275c6486df30bb57c2245c91b224c983d7ac39b8 \ + --hash=sha256:2666f059a1588a99267e33605365ed89cea92f424b3522806a9f4bd8ad2e3d62 \ + --hash=sha256:27a9e475157f7315826118e3f3127909a0fe25f1b43d3d3be9c584f9d265f937 \ + --hash=sha256:27cfc2f1ed76f956f36dfe0c56e5f5a3e94cd91eb78b893f63e2ef2ae404fcdf \ + --hash=sha256:2bc7113e6f2b6b3922dd61796ca9f36af09da3773898e7003038dc992fc83b8d \ + --hash=sha256:2e32855b6f9e5b18f449e59d45e3d5778bdeb660632ef2693cca267a11246c75 \ + --hash=sha256:2f1c68394818e0595569c2ff3cbc1e6d5a36a434e796f5c526b987b80c8a8c62 \ + --hash=sha256:2f8c25a7061d952de589bd0ea0eaadee32378ff83dd6a677b267f9cd86f401f8 \ + --hash=sha256:314d05fbc55719ae2438eaaba77bf2508ca4f030b26fa4c9c8c380e81c48fa33 \ + --hash=sha256:32a94ad2763e0263d9102037d349002c3d3c401e42770542c3eeb4801f311661 \ + --hash=sha256:32ab1e5432690276e71192be7401b55f96db2d0eedea5d44eb1f164505669cc0 \ + --hash=sha256:345b07b78e2bf583d71682aa34ae5b5fab575f7a1cb31e10263ebbc6f89f8c42 \ + --hash=sha256:3557bec8fcb11738a8920eeb68974bc76b75262f6947998d3147954ce0a4b893 \ + --hash=sha256:358650d5bda9c635da699c53adf4e8134af492ecc79c960f917eebf088bb6799 \ + --hash=sha256:36fc69160465ae75c6ec4ac9f781bb2aa16ae7ff869e73c26fee85fbb11b9887 \ + --hash=sha256:37d5a56c36dcc0b9a87b814cd992598d33863ff683749de6c86081f278d5e629 \ + --hash=sha256:38c887aedb696ef8bca19983206d270848558cfae4a91afa6a2fb05dde58ffc5 \ + --hash=sha256:39c9d5b61508b0bb68f29e54546de0ed2a74943c6a18585535a7e37356f1dd12 \ + --hash=sha256:3a800912a2e5e975d4128969d645c4a2a80aa886ccd6c9b1c6f44529e327e8cf \ + --hash=sha256:3bc0fa90830df1e1277f33cc6e55de9990b83c0319fd8c7412866cfde38b025e \ + --hash=sha256:3c0d84c5f2e086b120bae4e7f551cbda804c1deb10d958478bed4f89ba286dfe \ + --hash=sha256:3c682fcd96eb4bf64be32a4d95f96107e1588005831bd8a741b324fdda01b913 \ + --hash=sha256:402db908ea70eaf9800d9182a66596fc86f36655df8f63fdecf7c11da741d86f \ + --hash=sha256:445e0f5a31f2f3546ae0895d4811e159518cdc9d824c11419898d40cfadb677e \ + --hash=sha256:4482380b462ca9e59994d072a877ecadd1cf51102daeeab2db696f96ab763723 \ + --hash=sha256:44c89d915a75c11d2547eaee9098fcd80398987c4bff2974a0497a925bf92c07 \ + --hash=sha256:454d78e786602278a2a4383d08048482052f4f0c61fa677ca590af08914d9bca \ + --hash=sha256:460261045936975193bfd20549a0de1cd52a33b405cbb972f0d80940c42266cd \ + --hash=sha256:46b39976d008e2a845758650f0ff7136bca004f40da0c8798bd37ac37860154f \ + --hash=sha256:498017fbf2d13a768b3110d084bde39f2bd8664c1de0b8084f8ccc84425b7c88 \ + --hash=sha256:49aa8692507835dcc1e8ad8021f20c74c2dc13d83b5112e87877faa2a0035b20 \ + --hash=sha256:4b512261801b1e5fde7b6ebf2fef7977339c620cbbca88a0040ad9ad134f4d02 \ + --hash=sha256:4bec8b2c909bcfae9a0dc702346007e02a8c9ba5bbde83ffb224aa194f4f9efc \ + --hash=sha256:4d365ee1892c1fa803536f8c6ce21d24b29c9718ec75eb856095c07830f8c478 \ + --hash=sha256:4d6e88ddb3c741fbf29e1e7faf429880f8cd1d7aff4303247435a549726b4fb1 \ + --hash=sha256:4df57c0b161ec1b3ed0526a67b0db0914b557e86ee8aae51887aec941b261542 \ + --hash=sha256:4e0e1b0fb0259c1b75d1251ac0bb4d7ab675d36f7a6bf4ba6aa630dae94f9ffa \ + --hash=sha256:4ef09bbc2519a93cd0f95f2ceb5f7b85919dffea643278e02362bf40e3c4bed1 \ + --hash=sha256:5013be3bea7612852c62a7437f3302c1cfb91ca7e703b194459db0b2b2e0d792 \ + --hash=sha256:5177aa44eddaa97c6ef0cc00c6d540edb64d51781d2f8fb941612ec61a92c9ed \ + --hash=sha256:51f71a6e2ad071e70c937e41fcb6c19f82c3f9f49831eba850ed4a106ffbb647 \ + --hash=sha256:538f5f865df6cd8c32dd63158a0e5b4f5dd08d732a7da8b7228a5a0776c8ce55 \ + --hash=sha256:53f3ed9118397074ff63a79b66b7fec1c84c782eecde35c5bc94e420a971c231 \ + --hash=sha256:559e3cabe522231909f9de98ef06929edbd53782046bd21aae0c72db6f2a0775 \ + --hash=sha256:57189a69c0891e4818853feaa521c972d22c880a001453addea015f48e3c3398 \ + --hash=sha256:57f80a898544db78ec6b0be6183bd1bc008933193d4199f5cde36b0e6bd5e062 \ + --hash=sha256:58346024d47e84f7d8b3e7f5d6faa1d58acbbe49a8771497872059f58c1d8ea5 \ + --hash=sha256:594131ce1aad18db3689781f806db1b065cdaa04f4df36b4c038d2013aefd0bf \ + --hash=sha256:5b96f0024e9840f449bd91b2d005c921a4b666055a0d1b6492463799f32aae22 \ + --hash=sha256:5c566b123dce7e4867ca518434cdfb9f84e5023771235b2e3107a26c9a41cbd8 \ + --hash=sha256:5d3dfb1f0ff146da7952867a9414f0c7a29762f8825a84879592612fd6139342 \ + --hash=sha256:5da703225374e3a4c8d4fd90e26fe7213a52004ec77f88b42b42e9e86d8c6d57 \ + --hash=sha256:5db43f249b4be9f99ef4b967863f37094fb40e67effafb78ba4f0356b6396104 \ + --hash=sha256:5eed32dad81d6ba8e62dc7b9ffa0500199385d7810a8dd9d4eafaceb8c6e20bb \ + --hash=sha256:602efcad4a42c184e81d43a2b7e6e4f524d619878f2b6ee2ba469011f47c8147 \ + --hash=sha256:614bca2c7cfa87ec95b703e691c3c5eb6c448b6dabbe9776ac53883152951729 \ + --hash=sha256:632a34590c090d1285ed5efa5a02be919f3f9a56a64bd25f693fe1e2d27a27fb \ + --hash=sha256:64af54dd1c3a45a27c04942f9a1a4683322bdd127f4745cca4e02549c1d2d2bb \ + --hash=sha256:6536d8677d2fff7e64cd0b98b976df9de7aee0e69590044c2af5f51b76b7a170 \ + --hash=sha256:656256c9f9303e47f07d5cb8ae4468285370adfafd7ba48aea33a458e7697626 \ + --hash=sha256:6696c8752aded28ff3b16f33ef28ce28fb5d209b80c206746f943199fcf5fd65 \ + --hash=sha256:6c7574528bc922f8757f34dd78ed60ab52b1c7973b630f5eae7ba33ec133ce71 \ + --hash=sha256:6cee733fe4ccb1737e0997135283c82341e5cfa9cf214b165f9087fb663aaf4f \ + --hash=sha256:6cf633fe83b1d4e6519d7259b33afe40fbba5d3f438730156971dd0cf7730610 \ + --hash=sha256:714503083a1f2065c9ad15340dd49ac8a8e948a505a705ffa1750cb951519113 \ + --hash=sha256:717b12fdc51819833704e85e6926d76981ffa3f780ef92e33ebb8b26d46bb230 \ + --hash=sha256:7258ee276e8772599bc19e14b36f6260306e21b637190cd7cb489a2449d48684 \ + --hash=sha256:72eb5ae575cc7ae2b23f6f8064a8b10f638c7149819ae9cc6d20ebd4d37a1629 \ + --hash=sha256:7345007c12780985de4fd740148776d1eee18c0d41407c6fa1e48c5450304fe5 \ + --hash=sha256:747476436f6891b9773374ce8d48edcc8b12cb5b61b67c6fb6289633747d088f \ + --hash=sha256:77f74e45a1e5574bbbf80181c8027b3a4c65c2248fffbd557bd596fff13102f9 \ + --hash=sha256:7801b7223db017b9c0c9ccf37e44524edb35a1544a1c032add22c061c6af0276 \ + --hash=sha256:78c794b643d214f1522e7a288bcf5a2de120d26cd170516749a4009dc92722c9 \ + --hash=sha256:7b5f97ecfede10d5b2870383620e2d25c8561e217c7bf9081073802b54248d2b \ + --hash=sha256:7dc4bdf008f77c88d544849c48c1a40faf25a5eff6cc466de2e8edc37c191fce \ + --hash=sha256:81f4ed9ca9644bc95cd976bfe10f7a4cafab8ffdc3aed52877d4600e445be7ef \ + --hash=sha256:82c0cedd280eab2e8291270e6c04894dbc096f8159a39dcf1807429f026ca3cc \ + --hash=sha256:8304be0982130954b7fd3aad18e2c6f8ee40254bc3d2e635991c16d77c91e2bd \ + --hash=sha256:83697b0ea1f10e7f5d8b26a4906fa851393c61546c63839643a2b7fe2d868061 \ + --hash=sha256:836f11d4474d3228e9909d97216faa4f7505df41cfaf3927eb29809de785a78d \ + --hash=sha256:83b9130b80b216d56fdf9e87131946b353c9627930c061955a101ea82b09fed9 \ + --hash=sha256:83d879362ddd0fedd3f2ab8ce7cce3da2049a6d51d16da8af73011c6edf4752f \ + --hash=sha256:848182a391fffdc25605443e832f5b443f25498edeccf9a64343fd84421ca04b \ + --hash=sha256:852bfe059720632e2f16a6a4745e41d20937b2bf2a42a401e2412046bb6971cc \ + --hash=sha256:868a8dcaff1a84ba78038e1cef14fc88ccf84d9b4d12ea604696e0693296aa56 \ + --hash=sha256:89b11a5cdd441aa463f6d34ca0241602bc09b001a76994b6059828494108c673 \ + --hash=sha256:89df64c10adfe340fb00330042537cdd6bf0d8d78bad73f29cfe5427eed7b084 \ + --hash=sha256:8ea8a141eeced4f6262ab6dd71c681ac546a558c30bb586abe087d814b5f85ea \ + --hash=sha256:8f454166c2ffed45636c8d501741e649851ba2f346c4eb73a64c07ac00428f20 \ + --hash=sha256:8f759eed402448c2bdbb492e4fba1f20668ffe29688605ea61f0f67f9e4e386d \ + --hash=sha256:9043877a917be88ccf230aa5667c1bd059bce80f4c2727e4defa1b29b7f48b08 \ + --hash=sha256:942bc86e9be6fdd6e1175048f5fe8f8fdaaf2309dd1323ef1e155a69cd346780 \ + --hash=sha256:947a585bcaa235702b7c59433b485489397f9a163b3f56058b9463a46fd9b74c \ + --hash=sha256:950ac754d16daea42038f38e7465eb84cda4d08d7343c1c915771b29470f065a \ + --hash=sha256:98d8ac1129b4dd39098cffed94d1284aceb61c3aa396757ccc736ac392e4cee5 \ + --hash=sha256:98ee81b4b7f3023c9cb04a78cc67610baffcb5812d92f2096cb5a5efc6f19437 \ + --hash=sha256:9b2ce44bf8f4a1d01f418b3110ff8dff32fd3f3e836c0e06333c3725f243fa6c \ + --hash=sha256:9d45eee3a95a8b61e5b568580caac91f1502ddb731aaf8f4aa448a98660b2fb4 \ + --hash=sha256:9db455cb649dcfe4504d6d68a6d83a7315a99a3ca59871dc3ff840671f99adba \ + --hash=sha256:9df56e6df96a60590935e22373041cccc91fd55858763dcffb55bf63b3a2b396 \ + --hash=sha256:9e80238259655bf69d7bcd08226a970d7f42605f3157786bfa76dd13472d7fa0 \ + --hash=sha256:9f23083e1bd9d901f844af7a126727c486e7eada9a1a6791c8f7e73f94fac656 \ + --hash=sha256:a2489d3a776fa380cb8e71f54c7fda268a9baf3de9b1395093fd280f95735907 \ + --hash=sha256:a5cd96f6dcdf4fa657b2d95668d71d58455248f98712ecffaa9c528edf40ccae \ + --hash=sha256:a5eed9d41995a83f3332b4e3396abb7f433cac584222bd7e305b606d8353861e \ + --hash=sha256:a6617f30641ba0d8baa1635fbefb1dffc5165ec36d26921bd5cee13497cd937a \ + --hash=sha256:a6e088bd7870775624256a0d84c2a6714afd223b2eeb56b0ca58398e52a32fda \ + --hash=sha256:a98b2f95cab589e0f5e92c48431afb4d56238b8bf6668edcc66166180e9b509b \ + --hash=sha256:ad52a0e4bcc0ba956a953a169d1feec2734a64981d689e4fc8f490f7bf91af60 \ + --hash=sha256:af0c9fedc4a2c24e8664953882fe8185f3790b8338c9c700f76f5ad660817711 \ + --hash=sha256:afe6380a0e9653a87aa1e6e88fb47718113e5563c7a1cb2bcc23c1d8e17e3961 \ + --hash=sha256:affb37f152e55b5e4494bb9d0107f7bb08515c6704fbed82d9f61214d74adc17 \ + --hash=sha256:b0093cf7eeb91b84776e8742113afa4bdf47533d36cf719179aaaf1f56f6f8bf \ + --hash=sha256:b0de4bf3aa66363552d52c6a89003c479911f12098cd48a53d44a0f7a25f7c46 \ + --hash=sha256:b30e01a0b97a4bc3f519a4d7a82da3dc53251fb0de5eeea8660dcd4ff094c0c2 \ + --hash=sha256:b3ba794c3d885803db6c3116686923f1ec13bc86e621e169a375282b63ea1cc6 \ + --hash=sha256:b3e1107fe5ca030f946dfa59fdbb66b5df121c8432f14b0bdd282d17b297f4eb \ + --hash=sha256:b5196cc2574cfec572a5f3fb7cfa5ade27305ae3d06516a082132441aff4c83a \ + --hash=sha256:b6fa3116e40e14e7782fb1a9f872f94b5997de21127c95545ce40196ac1351c5 \ + --hash=sha256:bb70573d2995d23932e2871120f78d798ebc3572e54c09e694a18ced95c5f8d9 \ + --hash=sha256:bbcdf9c92d21c65bc75426eecea724c8fa0d35a6e201fdf1630011d4cc3aa685 \ + --hash=sha256:bcab50a389cc04d87f90092af78a6adba2ab3deca63175a3344ca83514045315 \ + --hash=sha256:bf28f55e427e0483acb1f666bd0d869b6d5e5a716680c216ad7befe3d4cfba2e \ + --hash=sha256:bfcd82852c62a60e314670a9602de354c4460f8adad916e2e42a20860c7870bc \ + --hash=sha256:c240939e963653054fc7e4a17c382829cda4aa88a7daf0af841715dbded1b497 \ + --hash=sha256:c31a2649bcf1fe97cf11c79848d761df33ac46b3896942d31b640557b486ff6b \ + --hash=sha256:c4ed42965c2cd9081f011be22f69d0e65d3b6165fe7734072fd0c232840bbd4e \ + --hash=sha256:c73b6f652f0745425aa6378319c331293b5341756262e9408ed3d45f183375e6 \ + --hash=sha256:c85949d02c85adf6d786eb94858e124989a632a4e65739835b2fc5761827fac3 \ + --hash=sha256:c919f38cd3f0b5e8d30b81fd6cac688cf9221560340f0c35cbbb8b2bd77ad6ac \ + --hash=sha256:c959f88160b13b4e730b0d75b459b7929fc0d2225c284c9683ac95d6feeeac6a \ + --hash=sha256:cb3fe820c27593f170770d6c8d791936cf6275d9269405fbb7b30a55363c10c8 \ + --hash=sha256:cf399fac542a1c7a4734a435b93df2c55e858c7d31abf6c1bdf46f9ae67fbfd0 \ + --hash=sha256:d0b48cdf690a64cedf7258c3dc9506cc41fc86edd7739c40e3098952265dc068 \ + --hash=sha256:d247b34bf433c92b41689318fd25d246313cab2275a6a47e2efac178b80d6efe \ + --hash=sha256:d48acabb1e5cb0071009f80d71d7f01b6ba2c1d4b869b1352bb5df3f11bf7dfd \ + --hash=sha256:d5006c65ec507a333479e76e00e2c368781f16c24ededa764763956b32a0e93e \ + --hash=sha256:d58ce8b6cfa9c4d2f230557f69caf7c06369e318015d0b19485095bc2c5963ab \ + --hash=sha256:d59e71153fe9ff85648d00e18649b07e9b22c797291abb7e27274fa06df8b838 \ + --hash=sha256:d6a5c0bce213b23b0166fe0d35bcbbe23ce4b968f257cc7eb6fd57cb8e1e6297 \ + --hash=sha256:daa86e4b68221d38e669bb236ba112d0335353829fb627c82e5909e4bbe8694c \ + --hash=sha256:db77278a6eddadbf44ce5aae2fee5ebb4d061f026b1ce2130d058cd4d7a7b670 \ + --hash=sha256:dfe0580fbfd5e4af87d0cc52d2044f155d55ebd8c8a93568758a2ea7d8e15975 \ + --hash=sha256:e14800b9b10bb39d7a60ad4a310e403164d7b8988a27ae933d4e40618a44088e \ + --hash=sha256:e2a845687219ba3214126f14a8a5861f97c9e065a7d0b8252adb6df13eea86fb \ + --hash=sha256:e3b87cbd974512c0c5fc7b469c36b2cdc9ee6d76e4ec78bccb2c7184611c49b0 \ + --hash=sha256:e4a6443968c4e8dc69967e12776776a5952c119cc1bd94168ad1c5ad667c2be1 \ + --hash=sha256:e605e0b8abca9457abd5bee737e086ab145a20c25083ef1113013612268872ff \ + --hash=sha256:e6e49370822c1f4d8d90e678b06dbcb08b51a026a7c4b55479e7d467f2e813bc \ + --hash=sha256:e710ad822c493fb80a4fbc1e3d0a807b1422cb90adbe64378f98291b7fa48fef \ + --hash=sha256:ea6a3e734b0fd41b82784a400be946821900daebe610c050a5e0760838a34f99 \ + --hash=sha256:ec55d80e9b8a519d742669e0b49e8ce9e6747be42bf3c138158b6543a9c8e489 \ + --hash=sha256:ed8bcdab6692fd4ad0dd6241807a24a640a376764460023b8d462d745e6b7b27 \ + --hash=sha256:f377012b86c0a23a1df0cf5a1b05aa7187649e472f71c7892e5f2c2815bbe74f \ + --hash=sha256:f6114692261eff4266386cdec0f7d87eee24e317ab397c218b7ae6a76b4c6339 \ + --hash=sha256:f8044cf4c77f37968b8c4cbcbf7a0f355d8a437877ae18eba23e3aad953a6cc7 \ + --hash=sha256:f8ed8940435834141061da26d27c4dd0d18fb69777bf431f5c6cc46b43349113 \ + --hash=sha256:f93e408255ddce525189bf11feaa1be7ee35e55f486c299c97d9caa68d724a5b \ + --hash=sha256:fb9e256a357dfcede7818c6d34e70db2d6b664394803d1de4b6984d2de76c0f1 + # via datasets +yarl==1.24.2 \ + --hash=sha256:0063adad533e57171b79db3943b229d40dfafeeee579767f96541f106bac5f1b \ + --hash=sha256:044a09d8401fcf8681977faef6d286b8ade1e2d2e9dceda175d1cfa5ca496f30 \ + --hash=sha256:081c2bf54efe03774d0311172bc04fedf9ca01e644d4cd8c805688e527209bdc \ + --hash=sha256:08d3a33218e0c64393e7610284e770409a9c31c429b078bcb24096ed0a783b8f \ + --hash=sha256:0a6377060e7927187a42b7eb202090cbe2b34933a4eeaf90e3bd9e33432e5cae \ + --hash=sha256:0c3063e5c0a8e8e62fae6c2596fa01da1561e4cd1da6fec5789f5cf99a8aefd8 \ + --hash=sha256:15c0b5e49d3c44e2a0b93e6a49476c5edad0a7686b92c395765a7ea775572a75 \ + --hash=sha256:17076578bce0049a5ce57d14ad1bded391b68a3b213e9b81b0097b090244999a \ + --hash=sha256:1a97e42c8a2233f2f279ecadd9e4a037bcb5d813b78435e8eedd4db5a9e9708c \ + --hash=sha256:1e831894be7c2954240e49791fa4b50c05a0dc881de2552cfe3ffd8631c7f461 \ + --hash=sha256:204e7a61ce99919c0de1bf904ab5d7aa188a129ea8f690a8f76cfb6e2844dc44 \ + --hash=sha256:221ce1dd921ac4f603957f17d7c18c5cc0797fbb52f156941f92e04605d1d67b \ + --hash=sha256:246d32a53a947c8f0189f5d699cbd4c7036de45d9359e13ba238d1239678c727 \ + --hash=sha256:2783d9226db8797636cd6896e4de81feed252d1db72265686c9558d97a4d94b9 \ + --hash=sha256:297a2fe352ecf858b30a98f87948746ec16f001d279f84aebdbd3bd965e2f1bd \ + --hash=sha256:2a263e76b97bc42bdcd7c5f4953dec1f7cd62a1112fa7f869e57255229390d67 \ + --hash=sha256:2d07d21d0bc4b17558e8de0b02fbfdf1e347d3bb3699edd00bb92e7c57925420 \ + --hash=sha256:3065657c80a2321225e804048597ad55658a7e76b32d6f5ee4074d04c50401db \ + --hash=sha256:310fc687f7b2044ec54e372c8cbe923bb88f5c37bded0d3079e5791c2fc3cf50 \ + --hash=sha256:33a29b5d00ccbf3219bb3e351d7875739c19481e030779f48cc46a7a71681a9b \ + --hash=sha256:34263e2fa8fb5bb63a0d97706cda38edbad62fddb58c7f12d6acbc092812aa50 \ + --hash=sha256:349de4701dc3760b6e876628423a8f147ef4f5599d10aba1e10702075d424ed9 \ + --hash=sha256:36348bebb147b83818b9d7e673ea4debc75970afc6ffdc7e3975ad05ce5a58c1 \ + --hash=sha256:374423f70754a2c96942ede36a29d37dc6b0cb8f92f8d009ddf3ed78d3da5488 \ + --hash=sha256:3b075301a2836a0e297b1b658cb6d6135df535d62efefdd60366bd589c2c82f2 \ + --hash=sha256:3f6d2c216318f8f32038ca3f72501ba08536f0fd18a36e858836b121b2deed9f \ + --hash=sha256:47a55d6cf6db2f401017a9e96e5288844e5051911fb4e0c8311a3980f5e59a7d \ + --hash=sha256:49016d82f032b1bd1e10b01078a7d29ae71bf468eeae0ea22df8bab691e60003 \ + --hash=sha256:491ac9141decf49ee8030199e1ee251cdff0e131f25678817ff6aa5f837a3536 \ + --hash=sha256:4b156914620f0b9d78dc1adb3751141daee561cfec796088abb89ed49d220f1a \ + --hash=sha256:4b85b8825e631295ff4bc8943f7471d54c533a9360bbe15ebb38e018b555bb8a \ + --hash=sha256:4da31a5512ed1729ca8d8aacde3f7faeb8843cde3165d6bcf7f88f74f17bb8aa \ + --hash=sha256:4fb1ac3fc5fecd8ae7453ea237e4d22b49befa70266dfe1629924245c21a0c7f \ + --hash=sha256:50713f1d4d6be6375bb178bb43d140ee1acb8abe589cd723320b7925a275be1e \ + --hash=sha256:507cc19f0b45454e2d6dcd62ff7d062b9f77a2812404e62dbdaec05b50faa035 \ + --hash=sha256:5249a113065c2b7a958bc699759e359cd61cfc81e3069662208f48f191b7ed12 \ + --hash=sha256:533ded4dceb5f1f3da7906244f4e82cf46cfd40d84c69a1faf5ac506aa65ecbe \ + --hash=sha256:5cb0f995a901c36be096ccbf4c673591c2faabbe96279598ffaec8c030f85bf4 \ + --hash=sha256:5d699376c4ca3cba49bbfae3a05b5b70ded572937171ce1e0b8d87118e2ba294 \ + --hash=sha256:5ec8356b8a6afcf81fc7aeeef13b1ff7a49dec00f313394bbb9e83830d32ccd7 \ + --hash=sha256:5f3224db28173a00d7afacdee07045cc4673dfab2b15492c7ae10deddbece761 \ + --hash=sha256:60de6742447fbbf697f16f070b8a443f1b5fe6ca3826fbef9fe70ecd5328e643 \ + --hash=sha256:64480fb3e4d4ed9ed71c48a91a477384fc342a50ca30071d2f8a88d51d9c9413 \ + --hash=sha256:68cf6eacd6028ef1142bc4b48376b81566385ca6f9e7dde3b0fa91be08ffcb57 \ + --hash=sha256:6b208bb939099b4b297438da4e9b25357f0b1c791888669b963e45b203ea9f36 \ + --hash=sha256:73e68edf6dfd5f73f9ca127d84e2a6f9213c65bdffb736bda19524c0564fcd14 \ + --hash=sha256:7b3a85525f6e7eeabcfdd372862b21ee1915db1b498a04e8bf0e389b607ff0bd \ + --hash=sha256:7b54b9c67c2b06bd7b9a77253d242124b9c95d2c02def5a1144001ee547dd9d5 \ + --hash=sha256:7d37fb7c38f2b6edab0f845c4f85148d4c44204f52bc127021bd2bc9fdbf1656 \ + --hash=sha256:7dafe10c12ddd4d120d528c4b5599c953bd7b12845347d507b95451195bb6cad \ + --hash=sha256:7e7ebcdef69dec6c6451e616f32b622a6d4a2e92b445c992f7c8e5274a6bbc4c \ + --hash=sha256:7f4425fa244fbf530b006d0c5f79ce920114cfff5b4f5f6056e669f8e160fdc0 \ + --hash=sha256:810e19b685c8c3c5862f6a38160a1f4e4c0916c9390024ec347b6157a45a0992 \ + --hash=sha256:819ca24f8eafcfb683c1bd5f44f2f488cea1274eb8944731ffd2e1f10f619342 \ + --hash=sha256:822519b64cf0b474f1a0aaef1dc621438ea46bb77c94df97a5b4d213a7d8a8b1 \ + --hash=sha256:8372a2b976cf70654b2be6619ab6068acabb35f724c0fda7b277fbf53d66a5cf \ + --hash=sha256:84f9670b89f34db07f81e53aee83e0b938a3412329d51c8f922488be7fcc4024 \ + --hash=sha256:863297ddede92ee49024e9a9b11ecb59f310ca85b60d8537f56bed9bbb5b1986 \ + --hash=sha256:86746bef442aa479107fe28132e1277237f9c24c2f00b0b0cf22b3ee0904f2bb \ + --hash=sha256:8ae44649b00947634ab0dab2a374a638f52923a6e67083f2c156cd5cbd1a881d \ + --hash=sha256:8cec2a38d70edc10e0e856ceda886af5327a017ccbde8e1de1bd44d300357543 \ + --hash=sha256:8d027d56f1035e339d1001ac33eceab5b2ec8e42e449787bb75e289fb9a5cd1d \ + --hash=sha256:904065e6e85b1fa54d0d87438bd58c14c0bad97aad654ad1077fd9d87e8478ed \ + --hash=sha256:91e72cf093fd833483a97ee648e0c053c7c629f51ff4a0e7edd84f806b0c5617 \ + --hash=sha256:990de4f680b1c217e77ff0d6aa0029f9eb79889c11fb3e9a3942c7eba29c1996 \ + --hash=sha256:9ac374123c6fd7abf64d1fec93962b0bd4ee2c19751755a762a72dd96c0378f8 \ + --hash=sha256:a1cab588b4fa14bea2e55ebea27478adfb05372f47573738e1acc4a36c0b05d2 \ + --hash=sha256:a296ca617f2d25fbceafb962b88750d627e5984e75732c712154d058ae8d79a3 \ + --hash=sha256:a46d1ab4ba4d32e6dc80daf8a28ce0bd83d08df52fbc32f3e288663427734535 \ + --hash=sha256:a4f4d6cd615823bfc7fb7e9b5987c3f41666371d870d51058f77e2680fbe9630 \ + --hash=sha256:a7624b1ca46ca5d7b864ef0d2f8efe3091454085ee1855b4e992314529972215 \ + --hash=sha256:a9532c57211730c515341af11fef6e9b61d157487272a096d0c04da445642592 \ + --hash=sha256:abb2759733d63a28b4956500a5dd57140f26486c92b2caedfb964ab7d9b79dbf \ + --hash=sha256:abb8ec0323b80161e3802da3150ef660b41d0e9be2048b76a363d93eee992c2b \ + --hash=sha256:acf93187c3710e422368eb768aee98db551ec7c85adc250207a95c16548ab7ac \ + --hash=sha256:afb00d7fd8e0f285ca29a44cc50df2d622ff2f7a6d933fa641577b5f9d5f3db0 \ + --hash=sha256:b3177bc0a768ef3bacceb4f272632990b7bea352f1b2f1eee9d6d6ff16516f92 \ + --hash=sha256:b32c37a7a337e90822c45797bf3d79d60875cfcccd3ecc80e9f453d87026c122 \ + --hash=sha256:b6067060d9dc594899ba83e6db6c48c68d1e494a6dab158156ed86977ca7bcb1 \ + --hash=sha256:b975866c184564c827e0877380f0dae57dcca7e52782128381b72feff6dfceb8 \ + --hash=sha256:c4c17bad5a530912d2111825d3f05e89bab2dd376aaa8cbc77e449e6db63e576 \ + --hash=sha256:c557165320d6244ebe3a02431b2a201a20080e02f41f0cfa0ccc47a183765da8 \ + --hash=sha256:cb84b80d88e19ede158619b80813968713d8d008b0e2497a576e6a0557d50712 \ + --hash=sha256:cdfcce633b4a4bb8281913c57fcafd4b5933fbc19111a5e3930bbd299d6102f1 \ + --hash=sha256:d162677af8d5d3d6ebab8394b021f4d041ac107a4b705873148a77a49dc9e1b2 \ + --hash=sha256:d1dd47a22843b212baa8d74f37796815d43bd046b42a0f41e9da433386c3136b \ + --hash=sha256:e196952aacaf3b232e265ff02980b64d483dc0972bd49bcb061171ff22ac203a \ + --hash=sha256:e26acf20c26cb4fefc631fdb75aca2a6b8fa8b7b5d7f204fb6a8f1e63c706f53 \ + --hash=sha256:e30dd55825dc554ec5b66a94953b8eda8745926514c5089dfcacecb9c99b5bd1 \ + --hash=sha256:e434a45ce2e7a947f951fc5a8944c8cc080b7e59f9c50ae80fd39107cf88126d \ + --hash=sha256:e51b2cf5ec89a8b8470177641ed62a3ba22d74e1e898e06ad53aa77972487208 \ + --hash=sha256:e7484b9361ed222ee1ca5b4337aa4cbdcc4618ce5aff57d9ef1582fd95893fc0 \ + --hash=sha256:e7977781f83638a4c73e0f88425563d70173e0dfd90ac006a45c65036293ee3c \ + --hash=sha256:e89418f65eda18f99030386305bd44d7d504e328a7945db1ead514fbe03a0607 \ + --hash=sha256:ec87ccc31bd21db7ad009d8572c127c1000f268517618a4cc09adba3c2a7f21c \ + --hash=sha256:ee8e3fb34513e8dc082b586ef4910c98335d43a6fab688cd44d4851bacfce3e8 \ + --hash=sha256:f408eace7e22a68b467a0562e0d27d322f91fe3eaaa6f466b962c6cfaea9fa39 \ + --hash=sha256:f4b0352fd41fd34b6651934606268816afd6914d09626f9bcbbf018edb0afb3f \ + --hash=sha256:f5f0cbb112838a4a293985b6ed73948a547dadcc1ba6d2089938e7abdedceef8 \ + --hash=sha256:f5f5c6ec23a9043f2d139cc072f53dd23168d202a334b9b2fda8de4c3e890d90 \ + --hash=sha256:f8fdbcff8b2c7c9284e60c196f693588598ddcee31e11c18e14949ce44519d45 \ + --hash=sha256:f9312b3c02d9b3d23840f67952913c9c8721d7f1b7db305289faefa878f364c2 \ + --hash=sha256:f9a1e9b622ca284143aab5d885848686dcd85453bb1ca9abcdb7503e64dc0056 \ + --hash=sha256:fecd17873a096036c1c87ab3486f1aef7f269ada7f23f7f856f93b1cc7744f14 + # via aiohttp +zipp==4.1.0 \ + --hash=sha256:25ad4e16390cd314347dd8f1de67a2ac538ae658ed4ab9db16029c07c188e97f \ + --hash=sha256:4cb57381f544315db7688e976e922a2b18cdb513d21cc194eb42232ba2a3e602 + # via importlib-metadata diff --git a/examples/azure-run.yaml b/examples/azure-run.yaml index 91cc92bdf..e5842acec 100644 --- a/examples/azure-run.yaml +++ b/examples/azure-run.yaml @@ -2,7 +2,7 @@ version: 2 image_name: azure-configuration apis: -- agents +- responses - batches - datasetio - eval @@ -11,6 +11,8 @@ apis: - safety - scoring - tool_runtime +- tool_groups +- conversations - vector_io benchmarks: [] @@ -51,8 +53,8 @@ providers: provider_type: inline::basic tool_runtime: - config: {} # Enable the RAG tool - provider_id: rag-runtime - provider_type: inline::rag-runtime + provider_id: file-search + provider_type: inline::file-search - config: {} # Enable MCP (Model Context Protocol) support provider_id: model-context-protocol provider_type: remote::model-context-protocol @@ -63,7 +65,7 @@ providers: backend: kv_rag provider_id: faiss provider_type: inline::faiss - agents: + responses: - config: persistence: agent_state: @@ -72,8 +74,8 @@ providers: responses: table_name: agents_responses backend: sql_default - provider_id: meta-reference - provider_type: inline::meta-reference + provider_id: builtin + provider_type: inline::builtin batches: - config: kvstore: @@ -99,8 +101,8 @@ providers: kvstore: namespace: eval_store backend: kv_default - provider_id: meta-reference - provider_type: inline::meta-reference + provider_id: builtin + provider_type: inline::builtin scoring_fns: [] server: port: 8321 @@ -155,8 +157,8 @@ registered_resources: scoring_fns: [] benchmarks: [] tool_groups: - - toolgroup_id: builtin::rag - provider_id: rag-runtime + - toolgroup_id: builtin::file_search + provider_id: file-search vector_stores: default_provider_id: faiss default_embedding_model: diff --git a/examples/bedrock-run.yaml b/examples/bedrock-run.yaml index b793da3e9..c5eff0431 100644 --- a/examples/bedrock-run.yaml +++ b/examples/bedrock-run.yaml @@ -1,7 +1,7 @@ version: 2 apis: -- agents +- responses - batches - datasetio - eval @@ -10,6 +10,8 @@ apis: - safety - scoring - tool_runtime +- tool_groups +- conversations - vector_io benchmarks: [] @@ -57,8 +59,8 @@ providers: openai_api_key: '********' tool_runtime: - config: {} # Enable the RAG tool - provider_id: rag-runtime - provider_type: inline::rag-runtime + provider_id: file-search + provider_type: inline::file-search - config: {} # Enable MCP (Model Context Protocol) support provider_id: model-context-protocol provider_type: remote::model-context-protocol @@ -69,7 +71,7 @@ providers: backend: kv_default provider_id: faiss provider_type: inline::faiss - agents: + responses: - config: persistence: agent_state: @@ -78,8 +80,8 @@ providers: responses: table_name: agents_responses backend: sql_default - provider_id: meta-reference - provider_type: inline::meta-reference + provider_id: builtin + provider_type: inline::builtin batches: - config: kvstore: @@ -105,8 +107,8 @@ providers: kvstore: namespace: eval_store backend: kv_default - provider_id: meta-reference - provider_type: inline::meta-reference + provider_id: builtin + provider_type: inline::builtin scoring_fns: [] server: port: 8321 @@ -154,8 +156,8 @@ registered_resources: scoring_fns: [] benchmarks: [] tool_groups: - - toolgroup_id: builtin::rag # Register the RAG tool - provider_id: rag-runtime + - toolgroup_id: builtin::file_search # Register the RAG tool + provider_id: file-search vector_stores: default_provider_id: faiss default_embedding_model: diff --git a/examples/run.yaml b/examples/run.yaml index 5b330b2fc..a28d58e19 100644 --- a/examples/run.yaml +++ b/examples/run.yaml @@ -7,7 +7,7 @@ version: 2 apis: -- agents +- responses - batches - datasetio - eval @@ -16,6 +16,8 @@ apis: - safety - scoring - tool_runtime +- tool_groups +- conversations - vector_io benchmarks: [] @@ -59,12 +61,12 @@ providers: openai_api_key: '********' tool_runtime: - config: {} # Enable the RAG tool - provider_id: rag-runtime - provider_type: inline::rag-runtime + provider_id: file-search + provider_type: inline::file-search - config: {} # Enable the MCP tool provider_id: model-context-protocol provider_type: remote::model-context-protocol - agents: + responses: - config: persistence: agent_state: @@ -73,8 +75,8 @@ providers: responses: table_name: agents_responses backend: sql_default - provider_id: meta-reference - provider_type: inline::meta-reference + provider_id: builtin + provider_type: inline::builtin batches: - config: kvstore: @@ -100,8 +102,8 @@ providers: kvstore: namespace: eval_store backend: kv_default - provider_id: meta-reference - provider_type: inline::meta-reference + provider_id: builtin + provider_type: inline::builtin scoring_fns: [] server: port: 8321 @@ -142,8 +144,8 @@ registered_resources: scoring_fns: [] benchmarks: [] tool_groups: - - toolgroup_id: builtin::rag # Register the RAG tool - provider_id: rag-runtime + - toolgroup_id: builtin::file_search # Register the RAG tool + provider_id: file-search vector_stores: annotation_prompt_params: # Override the default Llama Stack annotation that adds <| file-xyz |> to responses enable_annotations: true diff --git a/examples/vertexai-run.yaml b/examples/vertexai-run.yaml index 6a49e350f..c5d8a9792 100644 --- a/examples/vertexai-run.yaml +++ b/examples/vertexai-run.yaml @@ -2,7 +2,7 @@ version: 2 image_name: vertexai-configuration apis: -- agents +- responses - batches - datasetio - eval @@ -11,6 +11,8 @@ apis: - safety - scoring - tool_runtime +- tool_groups +- conversations - vector_io benchmarks: [] @@ -51,8 +53,8 @@ providers: provider_type: inline::basic tool_runtime: - config: {} # Enable the RAG tool - provider_id: rag-runtime - provider_type: inline::rag-runtime + provider_id: file-search + provider_type: inline::file-search - config: {} # Enable MCP (Model Context Protocol) support provider_id: model-context-protocol provider_type: remote::model-context-protocol @@ -63,7 +65,7 @@ providers: backend: kv_rag provider_id: faiss provider_type: inline::faiss - agents: + responses: - config: persistence: agent_state: @@ -72,8 +74,8 @@ providers: responses: table_name: agents_responses backend: sql_default - provider_id: meta-reference - provider_type: inline::meta-reference + provider_id: builtin + provider_type: inline::builtin batches: - config: kvstore: @@ -99,8 +101,8 @@ providers: kvstore: namespace: eval_store backend: kv_default - provider_id: meta-reference - provider_type: inline::meta-reference + provider_id: builtin + provider_type: inline::builtin scoring_fns: [] server: port: 8321 @@ -151,8 +153,8 @@ registered_resources: scoring_fns: [] benchmarks: [] tool_groups: - - toolgroup_id: builtin::rag - provider_id: rag-runtime + - toolgroup_id: builtin::file_search + provider_id: file-search vector_stores: default_provider_id: faiss default_embedding_model: diff --git a/examples/watsonx-run.yaml b/examples/watsonx-run.yaml index ec7c988c4..34252da47 100644 --- a/examples/watsonx-run.yaml +++ b/examples/watsonx-run.yaml @@ -1,7 +1,7 @@ version: 2 apis: -- agents +- responses - batches - datasetio - eval @@ -10,6 +10,8 @@ apis: - safety - scoring - tool_runtime +- tool_groups +- conversations - vector_io benchmarks: [] @@ -59,8 +61,8 @@ providers: openai_api_key: '********' tool_runtime: - config: {} # Enable the RAG tool - provider_id: rag-runtime - provider_type: inline::rag-runtime + provider_id: file-search + provider_type: inline::file-search - config: {} # Enable MCP (Model Context Protocol) support provider_id: model-context-protocol provider_type: remote::model-context-protocol @@ -71,7 +73,7 @@ providers: backend: kv_rag provider_id: faiss provider_type: inline::faiss - agents: + responses: - config: persistence: agent_state: @@ -80,8 +82,8 @@ providers: responses: table_name: agents_responses backend: sql_default - provider_id: meta-reference - provider_type: inline::meta-reference + provider_id: builtin + provider_type: inline::builtin batches: - config: kvstore: @@ -107,8 +109,8 @@ providers: kvstore: namespace: eval_store backend: kv_default - provider_id: meta-reference - provider_type: inline::meta-reference + provider_id: builtin + provider_type: inline::builtin scoring_fns: [] server: port: 8321 @@ -163,8 +165,8 @@ registered_resources: scoring_fns: [] benchmarks: [] tool_groups: - - toolgroup_id: builtin::rag # Register the RAG tool - provider_id: rag-runtime + - toolgroup_id: builtin::file_search # Register the RAG tool + provider_id: file-search vector_stores: default_provider_id: faiss default_embedding_model: # Define the default embedding model for RAG diff --git a/providers b/providers index 9ab872996..537fab985 160000 --- a/providers +++ b/providers @@ -1 +1 @@ -Subproject commit 9ab872996b1b95448a9332bc3b468fe27b4ee2e6 +Subproject commit 537fab9854b1b6013bab30d0f295685979c2b803 diff --git a/pyproject.toml b/pyproject.toml index bca928217..0726738ad 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -28,9 +28,9 @@ dependencies = [ # Used by authentication/k8s integration "kubernetes>=30.1.0", # Used to call Llama Stack APIs - "llama-stack==0.6.0", - "llama-stack-client==0.6.0", - "llama-stack-api==0.6.0", + "llama-stack==0.7.1", + "llama-stack-client==0.7.1", + "llama-stack-api==0.7.1", # Used by Logger "rich>=14.0.0", # Used by JWK token auth handler diff --git a/run.yaml b/run.yaml index e9bd5ef75..10ae69067 100644 --- a/run.yaml +++ b/run.yaml @@ -1,7 +1,7 @@ version: 2 apis: -- agents +- responses - batches - datasetio - eval @@ -10,6 +10,8 @@ apis: - safety - scoring - tool_runtime +- tool_groups +- conversations - vector_io benchmarks: [] @@ -52,8 +54,8 @@ providers: openai_api_key: '********' tool_runtime: - config: {} # Enable the RAG tool - provider_id: rag-runtime - provider_type: inline::rag-runtime + provider_id: file-search + provider_type: inline::file-search vector_io: - config: persistence: @@ -61,7 +63,7 @@ providers: backend: kv_default provider_id: faiss provider_type: inline::faiss - agents: + responses: - config: persistence: agent_state: @@ -70,8 +72,8 @@ providers: responses: table_name: agents_responses backend: sql_default - provider_id: meta-reference - provider_type: inline::meta-reference + provider_id: builtin + provider_type: inline::builtin batches: - config: kvstore: @@ -97,8 +99,8 @@ providers: kvstore: namespace: eval_store backend: kv_default - provider_id: meta-reference - provider_type: inline::meta-reference + provider_id: builtin + provider_type: inline::builtin scoring_fns: [] server: port: 8321 @@ -136,8 +138,8 @@ registered_resources: scoring_fns: [] benchmarks: [] tool_groups: - - toolgroup_id: builtin::rag # Register the RAG tool - provider_id: rag-runtime + - toolgroup_id: builtin::file_search # Register the RAG tool + provider_id: file-search # REQUIRED: This section is necessary for file_search tool calls to work. # Without it, llama-stack's rag-runtime silently fails all file_search operations # with no error logged. diff --git a/src/app/endpoints/tools.py b/src/app/endpoints/tools.py index f0941a6a6..33596ce62 100644 --- a/src/app/endpoints/tools.py +++ b/src/app/endpoints/tools.py @@ -19,7 +19,7 @@ UnauthorizedResponse, ) from models.api.responses.successful import ToolsResponse -from models.config import Action +from models.config import Action, ModelContextProtocolServer from utils.endpoints import check_configuration_loaded from utils.mcp_headers import ( McpHeaders, @@ -69,14 +69,51 @@ def _input_schema_to_parameters( ] -def _normalize_tool_dict(tool_dict: dict[str, Any], toolgroup: Any) -> None: - """Normalize a ToolDef dict to the endpoint's response format. +def _normalize_and_enrich_tool_dict( + tool_dict: dict[str, Any], + mcp_server: ModelContextProtocolServer, +) -> dict[str, Any]: + """Normalize and enrich a single tool definition from llama-stack /v1/tools endpoint. - Remaps field names (``name`` -> ``identifier``, ``input_schema`` -> - ``parameters``) and propagates ``provider_id``/``type`` from the - parent toolgroup. Handles both missing keys and empty legacy - placeholders. + Normalizes field names from llama-stack format and enriches the tool + dictionary with metadata from the MCP server configuration. + + Field transformations: + - ``name`` -> ``identifier`` + - ``input_schema`` -> ``parameters`` (converted to OpenAPI format) + + Metadata additions: + - ``provider_id``: From mcp_server.provider_id if not present in tool + - ``type``: Set to "tool" if not present in tool + - ``server_source``: MCP server URL or name as fallback + + Args: + tool_dict: Raw tool dictionary from /v1/tools response. + mcp_server: MCP server configuration containing provider_id and URL. + + Returns: + Normalized and enriched tool dictionary. + + Example: + >>> tool = { + ... "name": "search_web", + ... "description": "Search the web", + ... "input_schema": {"type": "object", "properties": {"query": {...}}} + ... } + >>> server = ModelContextProtocolServer( + ... name="brave-search", + ... provider_id="model-context-protocol", + ... url="http://localhost:8401/sse" + ... ) + >>> result = _normalize_and_enrich_tool_dict(tool, server) + >>> result["identifier"] + 'search_web' + >>> result["server_source"] + 'http://localhost:8401/sse' + >>> result["provider_id"] + 'model-context-protocol' """ + # Normalize field names if "name" in tool_dict and not tool_dict.get("identifier"): tool_dict["identifier"] = tool_dict["name"] tool_dict.pop("name", None) @@ -85,10 +122,16 @@ def _normalize_tool_dict(tool_dict: dict[str, Any], toolgroup: Any) -> None: tool_dict["parameters"] = _input_schema_to_parameters(tool_dict["input_schema"]) tool_dict.pop("input_schema", None) + # Add metadata from MCP server configuration if not tool_dict.get("provider_id"): - tool_dict["provider_id"] = toolgroup.provider_id + tool_dict["provider_id"] = mcp_server.provider_id + if not tool_dict.get("type"): - tool_dict["type"] = getattr(toolgroup, "type", None) or "tool" + tool_dict["type"] = "tool" + + tool_dict["server_source"] = mcp_server.url or mcp_server.name + + return tool_dict tools_responses: dict[int | str, dict[str, Any]] = { @@ -149,60 +192,42 @@ async def tools_endpoint_handler( # pylint: disable=too-many-locals,too-many-st # Check MCP Auth await check_mcp_auth(configuration, mcp_headers, token, request.headers) - toolgroups_response = [] - try: - client = AsyncLlamaStackClientHolder().get_client() - logger.debug("Retrieving tools from all toolgroups") - toolgroups_response = await client.toolgroups.list() - except APIConnectionError as e: - logger.error("Unable to connect to Llama Stack: %s", e) - response = ServiceUnavailableResponse(backend_name="Llama Stack", cause=str(e)) - raise HTTPException(**response.model_dump()) from e - + client = AsyncLlamaStackClientHolder().get_client() consolidated_tools = [] - mcp_server_names = ( - {mcp_server.name for mcp_server in configuration.mcp_servers} - if configuration.mcp_servers - else set() - ) - for toolgroup in toolgroups_response: - mcp_server = None - if toolgroup.identifier in mcp_server_names: - mcp_server = next( - ( - s - for s in configuration.mcp_servers - if s.name == toolgroup.identifier - ), - None, - ) - - headers = complete_mcp_headers.get(toolgroup.identifier, {}) - if mcp_server is not None: - unresolved = find_unresolved_auth_headers( - mcp_server.authorization_headers, headers + # Query tools for each configured MCP server + for mcp_server in configuration.mcp_servers or []: + headers = complete_mcp_headers.get(mcp_server.name, {}) + unresolved = find_unresolved_auth_headers( + mcp_server.authorization_headers, headers + ) + if unresolved: + logger.warning( + "Skipping MCP server %s: required %d auth headers " + "but only resolved %d", + mcp_server.name, + len(mcp_server.authorization_headers), + len(mcp_server.authorization_headers) - len(unresolved), ) - if unresolved: - logger.warning( - "Skipping MCP server %s: required %d auth headers " - "but only resolved %d", - mcp_server.name, - len(mcp_server.authorization_headers), - len(mcp_server.authorization_headers) - len(unresolved), - ) - continue + continue try: authorization = headers.pop("Authorization", None) - tools_response = await client.tools.list( - toolgroup_id=toolgroup.identifier, - extra_headers=headers, - extra_query={"authorization": authorization}, + # Use /v1/tools endpoint with toolgroup_id filter + # Note: client.toolgroups and client.tools were removed in v0.7.0 + params = {"toolgroup_id": mcp_server.name} + if authorization: + params["authorization"] = authorization + + tools_data = await client.get( + "/v1/tools", + cast_to=dict, # type: ignore[arg-type] + options={"params": params, "headers": headers}, ) + tools_response = tools_data.get("tools", []) # type: ignore[union-attr] except BadRequestError: - logger.error("Toolgroup %s is not found", toolgroup.identifier) + logger.error("Toolgroup %s is not found", mcp_server.name) continue except APIConnectionError as e: logger.error("Unable to connect to Llama Stack: %s", e) @@ -211,38 +236,23 @@ async def tools_endpoint_handler( # pylint: disable=too-many-locals,too-many-st ) raise HTTPException(**response.model_dump()) from e - # Convert tools to dict format - tools_count = 0 - server_source = "unknown" - + # Process and normalize tools from this MCP server for tool in tools_response: - tool_dict = dict(tool) - - _normalize_tool_dict(tool_dict, toolgroup) - - # Determine server source based on toolgroup type - if mcp_server: - tool_dict["server_source"] = mcp_server.url or toolgroup.identifier - else: - # This is a built-in toolgroup - tool_dict["server_source"] = "builtin" - - consolidated_tools.append(tool_dict) - tools_count += 1 - server_source = tool_dict["server_source"] + tool_dict = dict(tool) if not isinstance(tool, dict) else tool + normalized_tool = _normalize_and_enrich_tool_dict(tool_dict, mcp_server) + consolidated_tools.append(normalized_tool) logger.debug( - "Retrieved %d tools from toolgroup %s (source: %s)", - tools_count, - toolgroup.identifier, - server_source, + "Retrieved %d tools from MCP server %s (source: %s)", + len(tools_response), + mcp_server.name, + mcp_server.url or mcp_server.name, ) logger.info( - "Retrieved total of %d tools (%d from built-in toolgroups, %d from MCP servers)", + "Retrieved total of %d tools from %d configured MCP servers", len(consolidated_tools), - len([t for t in consolidated_tools if t.get("server_source") == "builtin"]), - len([t for t in consolidated_tools if t.get("server_source") != "builtin"]), + len(configuration.mcp_servers or []), ) # Format tools with structured description parsing diff --git a/src/app/main.py b/src/app/main.py index e54c730bc..19db38db9 100644 --- a/src/app/main.py +++ b/src/app/main.py @@ -26,7 +26,6 @@ from metrics.utils import setup_model_metrics from models.api.responses.error import InternalServerErrorResponse from sentry import initialize_sentry -from utils.common import register_mcp_servers_async from utils.degraded_mode import DegradedModeTracker from utils.llama_stack_version import check_llama_stack_version @@ -118,8 +117,6 @@ async def lifespan(_app: FastAPI) -> AsyncIterator[None]: AzureEntraIDManager().set_config(azure_entra_id_config) azure_base_url = await AsyncLlamaStackClientHolder().get_azure_base_url() AzureEntraIDManager().set_base_url(azure_base_url) - logger.info("Registering MCP servers") - await register_mcp_servers_async(logger, configuration.configuration) # Set up model metrics if in healthy mode if not degraded_tracker.is_degraded(): diff --git a/src/constants.py b/src/constants.py index 697d15554..3a703a9eb 100644 --- a/src/constants.py +++ b/src/constants.py @@ -7,7 +7,7 @@ # Minimal and maximal supported Llama Stack version MINIMAL_SUPPORTED_LLAMA_STACK_VERSION: Final[str] = "0.2.17" -MAXIMAL_SUPPORTED_LLAMA_STACK_VERSION: Final[str] = "0.6.0" +MAXIMAL_SUPPORTED_LLAMA_STACK_VERSION: Final[str] = "0.7.1" # Path to the lightspeed-stack.yaml, exported so uvicorn workers (separate # processes) can reload the configuration that the parent process selected. diff --git a/src/models/common/responses/types.py b/src/models/common/responses/types.py index 33e0e91ab..cdebfad7c 100644 --- a/src/models/common/responses/types.py +++ b/src/models/common/responses/types.py @@ -36,6 +36,9 @@ from llama_stack_api.openai_responses import ( OpenAIResponseOutputMessageMCPListTools as McpListTools, ) +from llama_stack_api.openai_responses import ( + OpenAIResponseOutputMessageReasoningItem as ReasoningItem, +) from llama_stack_api.openai_responses import ( OpenAIResponseOutputMessageWebSearchToolCall as WebSearchToolCall, ) @@ -60,7 +63,6 @@ class InputToolMCP(OpenAIResponseInputToolMCP): "file_search_call.results", "message.input_image.image_url", "message.output_text.logprobs", - "reasoning.encrypted_content", ] type ResponseItem = ( @@ -73,6 +75,7 @@ class InputToolMCP(OpenAIResponseInputToolMCP): | McpApprovalRequest | FunctionToolCall | McpApprovalResponse + | ReasoningItem ) type ResponseInput = str | list[ResponseItem] diff --git a/src/pydantic_ai_lightspeed/llamastack/_model.py b/src/pydantic_ai_lightspeed/llamastack/_model.py index 2338d241e..13afef605 100644 --- a/src/pydantic_ai_lightspeed/llamastack/_model.py +++ b/src/pydantic_ai_lightspeed/llamastack/_model.py @@ -12,6 +12,9 @@ This module provides ``LlamaStackResponsesModel`` which wraps the event stream to buffer those early delta events and replay them correctly once the item is announced. + +Additionally overrides ``_responses_create`` to filter out ``reasoning.encrypted_content`` +from the include parameter, which llama-stack v0.7.1 doesn't support. """ from __future__ import annotations as _annotations @@ -179,8 +182,99 @@ class LlamaStackResponsesModel(OpenAIResponsesModel): Overrides the streaming response processing to buffer and replay ``ResponseFunctionCallArgumentsDeltaEvent`` events that Llama Stack emits before the corresponding ``McpCall`` or ``ResponseFunctionToolCall`` item. + + Also filters ``reasoning.encrypted_content`` from the include parameter since + llama-stack v0.7.1 doesn't support it. """ + async def _responses_create( + self, + messages: list[ModelMessage], + stream: bool, + model_settings: OpenAIResponsesModelSettings, + model_request_parameters: ModelRequestParameters, + ) -> Any: + """Call parent's _responses_create, then filter reasoning.encrypted_content from include. + + Llama Stack v0.7.1 doesn't support reasoning.encrypted_content in the include + parameter. pydantic-ai adds it automatically based on the model profile, so we + intercept the prepared request parameters and remove it before sending. + + Args: + messages: Model messages for the request. + stream: Whether this is a streaming request. + model_settings: Model-specific settings. + model_request_parameters: Request parameters for the model. + + Returns: + Response from the Responses API. + """ + # Build request via parent, but intercept to filter include parameter + profile = self.profile + include: list[responses.ResponseIncludable] = [] + + # Explicitly skip reasoning.encrypted_content - llama-stack v0.7.1 doesn't support it + # if profile.get('openai_supports_encrypted_reasoning_content', False): + # include.append('reasoning.encrypted_content') # REMOVED + + if model_settings.get("openai_include_code_execution_outputs"): + include.append("code_interpreter_call.outputs") + if model_settings.get("openai_include_web_search_sources"): + include.append("web_search_call.action.sources") + if model_settings.get("openai_include_file_search_results"): + include.append("file_search_call.results") + if model_settings.get("openai_logprobs"): + include.append("message.output_text.logprobs") + + # Build request parameters using parent's helper + request_params = await self._build_responses_request_params( + messages, + model_settings, + model_request_parameters, + profile, + ) + + # Import helpers needed for the rest of the request building + from pydantic_ai.models.openai import ( + _drop_sampling_params_for_reasoning, + _drop_unsupported_params, + ) + + _drop_sampling_params_for_reasoning( + profile, model_settings, model_request_parameters + ) + _drop_unsupported_params(profile, model_settings) + extra_headers, timeout = self._build_request_options(model_settings) + + prompt_cache_retention: Any = model_settings.get( + "openai_prompt_cache_retention", None + ) + + # Map max_tokens to max_output_tokens for Responses API + max_output_tokens = model_settings.get("max_tokens") + + with _map_api_errors(self.model_name): + return await self.client.responses.create( + model=request_params.model, + input=request_params.input, + instructions=request_params.instructions, + parallel_tool_calls=request_params.parallel_tool_calls, + tools=request_params.tools, + tool_choice=request_params.tool_choice, + previous_response_id=request_params.previous_response_id, + reasoning=request_params.reasoning, + text=request_params.text, + stream=stream, + temperature=model_settings.get("temperature"), + top_p=model_settings.get("top_p"), + max_output_tokens=max_output_tokens, + include=include or None, + extra_headers=extra_headers, + timeout=timeout, + prompt_cache_retention=prompt_cache_retention, + extra_body=model_settings.get("extra_body"), + ) + async def request( # pylint: disable=unused-argument self, messages: list[ModelMessage], diff --git a/src/utils/common.py b/src/utils/common.py index ef07cb6df..e558e0e6f 100644 --- a/src/utils/common.py +++ b/src/utils/common.py @@ -3,105 +3,7 @@ import asyncio from collections.abc import Callable from functools import wraps -from logging import Logger -from typing import Any, cast - -from llama_stack.core.library_client import AsyncLlamaStackAsLibraryClient -from llama_stack_client import AsyncLlamaStackClient - -from client import AsyncLlamaStackClientHolder -from models.config import Configuration, ModelContextProtocolServer - - -async def register_mcp_servers_async( - logger: Logger, configuration: Configuration -) -> None: - """Register Model Context Protocol (MCP) servers with the LlamaStack client (async). - - If no MCP servers are present in the provided configuration this function returns immediately. - Selects between a library client (initializes it) and a service client based on - configuration.llama_stack.use_as_library_client, then registers any MCP servers not already - present in the client's toolgroups. - - Parameters: - ---------- - logger: Logger instance. - configuration: Configuration containing the `mcp_servers` list and - `llama_stack` client mode. - - Notes: - ----- - - The `logger` parameter is used for debug/info logging and is - intentionally undocumented as a common service. - - Exceptions from the LlamaStack client (network/errors during - initialization or registration) are not caught here and will - propagate to the caller. - """ - # Skip MCP registration if no MCP servers are configured - if not configuration.mcp_servers: - logger.debug("No MCP servers configured, skipping registration") - return - - if configuration.llama_stack.use_as_library_client: - # Library client - use async interface - client = cast( - AsyncLlamaStackAsLibraryClient, AsyncLlamaStackClientHolder().get_client() - ) - await client.initialize() - await _register_mcp_toolgroups_async(client, configuration.mcp_servers, logger) - else: - # Service client - also use async interface - client = AsyncLlamaStackClientHolder().get_client() - await _register_mcp_toolgroups_async(client, configuration.mcp_servers, logger) - - -async def _register_mcp_toolgroups_async( - client: AsyncLlamaStackClient, - mcp_servers: list[ModelContextProtocolServer], - logger: Logger, -) -> None: - """ - Register MCP (Model Context Protocol) toolgroups with a LlamaStack async client. - - Checks the client's existing toolgroups and registers any servers from `mcp_servers` - whose `name` is not present in the client's `provider_resource_id` list. For each - new server it calls the client's toolgroups.register with parameters: - `toolgroup_id`=`mcp.name`, `provider_id`=`mcp.provider_id`, and - `mcp_endpoint` containing the server `url`. - - This function performs network calls against the provided async client and does not - catch exceptions raised by those calls — any exceptions from the client (e.g., RPC - or HTTP errors) will propagate to the caller. - - Parameters: - ---------- - client (AsyncLlamaStackClient): The LlamaStack async client used to - query and register toolgroups. - mcp_servers (List[ModelContextProtocolServer]): MCP server descriptors - to ensure are registered. - logger (Logger): Logger used for debug messages about registration - progress. - """ - # Get registered tools - registered_toolgroups = await client.toolgroups.list() - registered_toolgroups_ids = [ - tool_group.provider_resource_id for tool_group in registered_toolgroups - ] - logger.debug("Registered toolgroups: %s", registered_toolgroups_ids) - - # Register toolgroups for MCP servers if not already registered - for mcp in mcp_servers: - if mcp.name not in registered_toolgroups_ids: - logger.debug("Registering MCP server: %s, %s", mcp.name, mcp.url) - - registration_params = { - "toolgroup_id": mcp.name, - "provider_id": mcp.provider_id, - "mcp_endpoint": {"uri": mcp.url}, - } - - await client.toolgroups.register(**registration_params) - logger.debug("MCP server %s registered successfully", mcp.name) +from typing import Any def run_once_async(func: Callable[..., Any]) -> Callable[..., Any]: diff --git a/src/utils/conversations.py b/src/utils/conversations.py index ac2659688..c3d7afc6b 100644 --- a/src/utils/conversations.py +++ b/src/utils/conversations.py @@ -254,12 +254,24 @@ def _build_tool_call_summary_from_item( # pylint: disable=too-many-return-state if item_type == "function_call_output": function_output = cast(FunctionToolCallOutput, item) + # In llama-stack v0.7.1+, output can be str or list of content items + output_content = function_output.output + if isinstance(output_content, list): + # Extract text from content items (skip images and files) + text_parts = [] + for content_item in output_content: + if getattr(content_item, "type", None) == "text": + text_parts.append(getattr(content_item, "text", "")) + output_str = " ".join(text_parts) if text_parts else "" + else: + output_str = output_content + return ( None, ToolResultSummary( id=function_output.call_id, status=function_output.status or "success", - content=function_output.output, + content=output_str, type="function_call_output", round=1, ), diff --git a/tests/configuration/run.yaml b/tests/configuration/run.yaml index a0668bb90..dbfffcce8 100644 --- a/tests/configuration/run.yaml +++ b/tests/configuration/run.yaml @@ -17,9 +17,9 @@ datasets: [] external_providers_dir: null logging: null providers: - agents: - - provider_id: meta-reference - provider_type: inline::meta-reference + responses: + - provider_id: builtin + provider_type: inline::builtin config: persistence: agent_state: @@ -42,8 +42,8 @@ providers: namespace: localfs_datasetio backend: kv_default eval: - - provider_id: meta-reference - provider_type: inline::meta-reference + - provider_id: builtin + provider_type: inline::builtin config: kvstore: namespace: eval_store @@ -85,11 +85,11 @@ providers: service_name: '' sinks: sqlite sqlite_db_path: .llama/distributions/ollama/trace_store.db - provider_id: meta-reference - provider_type: inline::meta-reference + provider_id: builtin + provider_type: inline::builtin tool_runtime: - - provider_id: rag-runtime - provider_type: inline::rag-runtime + - provider_id: file-search + provider_type: inline::file-search config: {} - provider_id: model-context-protocol provider_type: remote::model-context-protocol @@ -139,8 +139,8 @@ registered_resources: scoring_fns: [] benchmarks: [] tool_groups: - - toolgroup_id: builtin::rag - provider_id: rag-runtime + - toolgroup_id: builtin::file_search + provider_id: file-search telemetry: enabled: true vector_stores: diff --git a/tests/e2e-prow/rhoai/configs/run.yaml b/tests/e2e-prow/rhoai/configs/run.yaml index 935ae206f..4eb186373 100644 --- a/tests/e2e-prow/rhoai/configs/run.yaml +++ b/tests/e2e-prow/rhoai/configs/run.yaml @@ -2,7 +2,7 @@ version: 2 image_name: starter apis: -- agents +- responses - batches - datasetio - eval @@ -11,6 +11,8 @@ apis: - safety - scoring - tool_runtime +- tool_groups +- conversations - vector_io benchmarks: [] @@ -54,8 +56,8 @@ providers: openai_api_key: '********' tool_runtime: - config: {} # Enable the RAG tool - provider_id: rag-runtime - provider_type: inline::rag-runtime + provider_id: file-search + provider_type: inline::file-search - config: {} # Enable MCP (Model Context Protocol) support provider_id: model-context-protocol provider_type: remote::model-context-protocol @@ -66,7 +68,7 @@ providers: backend: kv_rag provider_id: faiss provider_type: inline::faiss - agents: + responses: - config: persistence: agent_state: @@ -75,8 +77,8 @@ providers: responses: table_name: agents_responses backend: sql_default - provider_id: meta-reference - provider_type: inline::meta-reference + provider_id: builtin + provider_type: inline::builtin batches: - config: kvstore: @@ -102,8 +104,8 @@ providers: kvstore: namespace: eval_store backend: kv_default - provider_id: meta-reference - provider_type: inline::meta-reference + provider_id: builtin + provider_type: inline::builtin scoring_fns: [] server: port: 8321 @@ -158,8 +160,8 @@ registered_resources: scoring_fns: [] benchmarks: [] tool_groups: - - provider_id: rag-runtime - toolgroup_id: builtin::rag + - provider_id: file-search + toolgroup_id: builtin::file_search vector_stores: default_provider_id: faiss default_embedding_model: # Define the default embedding model for RAG diff --git a/tests/e2e/configs/run-azure.yaml b/tests/e2e/configs/run-azure.yaml index 6f627ba8b..3502ee0ec 100644 --- a/tests/e2e/configs/run-azure.yaml +++ b/tests/e2e/configs/run-azure.yaml @@ -2,7 +2,7 @@ version: 2 image_name: azure-configuration apis: -- agents +- responses - batches - datasetio - eval @@ -11,6 +11,8 @@ apis: - safety - scoring - tool_runtime +- tool_groups +- conversations - vector_io benchmarks: [] @@ -60,13 +62,13 @@ providers: openai_api_key: '********' tool_runtime: - config: {} # Enable the RAG tool - provider_id: rag-runtime - provider_type: inline::rag-runtime + provider_id: file-search + provider_type: inline::file-search - config: {} # Enable MCP (Model Context Protocol) support provider_id: model-context-protocol provider_type: remote::model-context-protocol vector_io: [] - agents: + responses: - config: persistence: agent_state: @@ -75,8 +77,8 @@ providers: responses: table_name: agents_responses backend: sql_default - provider_id: meta-reference - provider_type: inline::meta-reference + provider_id: builtin + provider_type: inline::builtin batches: - config: kvstore: @@ -102,8 +104,8 @@ providers: kvstore: namespace: eval_store backend: kv_default - provider_id: meta-reference - provider_type: inline::meta-reference + provider_id: builtin + provider_type: inline::builtin scoring_fns: [] server: port: 8321 @@ -151,8 +153,8 @@ registered_resources: scoring_fns: [] benchmarks: [] tool_groups: - - toolgroup_id: builtin::rag # Register the RAG tool - provider_id: rag-runtime + - toolgroup_id: builtin::file_search # Register the RAG tool + provider_id: file-search vector_stores: default_provider_id: faiss default_embedding_model: diff --git a/tests/e2e/configs/run-bedrock.yaml b/tests/e2e/configs/run-bedrock.yaml index 02f902b2d..b2b46149f 100644 --- a/tests/e2e/configs/run-bedrock.yaml +++ b/tests/e2e/configs/run-bedrock.yaml @@ -2,7 +2,7 @@ version: 2 image_name: starter apis: -- agents +- responses - batches - datasetio - eval @@ -11,6 +11,8 @@ apis: - safety - scoring - tool_runtime +- tool_groups +- conversations - vector_io benchmarks: [] @@ -58,13 +60,13 @@ providers: openai_api_key: '********' tool_runtime: - config: {} # Enable the RAG tool - provider_id: rag-runtime - provider_type: inline::rag-runtime + provider_id: file-search + provider_type: inline::file-search - config: {} # Enable MCP (Model Context Protocol) support provider_id: model-context-protocol provider_type: remote::model-context-protocol vector_io: [] - agents: + responses: - config: persistence: agent_state: @@ -73,8 +75,8 @@ providers: responses: table_name: agents_responses backend: sql_default - provider_id: meta-reference - provider_type: inline::meta-reference + provider_id: builtin + provider_type: inline::builtin batches: - config: kvstore: @@ -100,8 +102,8 @@ providers: kvstore: namespace: eval_store backend: kv_default - provider_id: meta-reference - provider_type: inline::meta-reference + provider_id: builtin + provider_type: inline::builtin scoring_fns: [] server: port: 8321 @@ -149,8 +151,8 @@ registered_resources: scoring_fns: [] benchmarks: [] tool_groups: - - toolgroup_id: builtin::rag # Register the RAG tool - provider_id: rag-runtime + - toolgroup_id: builtin::file_search # Register the RAG tool + provider_id: file-search vector_stores: default_provider_id: faiss default_embedding_model: # Define the default embedding model for RAG diff --git a/tests/e2e/configs/run-ci.yaml b/tests/e2e/configs/run-ci.yaml index 5c9dd8cb1..ae4a20ee2 100644 --- a/tests/e2e/configs/run-ci.yaml +++ b/tests/e2e/configs/run-ci.yaml @@ -2,7 +2,7 @@ version: 2 image_name: starter apis: -- agents +- responses - batches - datasetio - eval @@ -11,6 +11,8 @@ apis: - safety - scoring - tool_runtime +- tool_groups +- conversations - vector_io benchmarks: [] @@ -53,13 +55,13 @@ providers: openai_api_key: '********' tool_runtime: - config: {} # Enable the RAG tool - provider_id: rag-runtime - provider_type: inline::rag-runtime + provider_id: file-search + provider_type: inline::file-search - config: {} # Enable MCP (Model Context Protocol) support provider_id: model-context-protocol provider_type: remote::model-context-protocol vector_io: [] - agents: + responses: - config: persistence: agent_state: @@ -68,8 +70,8 @@ providers: responses: table_name: agents_responses backend: sql_default - provider_id: meta-reference - provider_type: inline::meta-reference + provider_id: builtin + provider_type: inline::builtin batches: - config: kvstore: @@ -95,8 +97,8 @@ providers: kvstore: namespace: eval_store backend: kv_default - provider_id: meta-reference - provider_type: inline::meta-reference + provider_id: builtin + provider_type: inline::builtin scoring_fns: [] server: port: 8321 @@ -140,8 +142,8 @@ registered_resources: scoring_fns: [] benchmarks: [] tool_groups: - - toolgroup_id: builtin::rag # Register the RAG tool - provider_id: rag-runtime + - toolgroup_id: builtin::file_search # Register the RAG tool + provider_id: file-search vector_stores: default_provider_id: faiss default_embedding_model: # Define the default embedding model for RAG diff --git a/tests/e2e/configs/run-rhaiis.yaml b/tests/e2e/configs/run-rhaiis.yaml index 74c0b654b..5586e3da4 100644 --- a/tests/e2e/configs/run-rhaiis.yaml +++ b/tests/e2e/configs/run-rhaiis.yaml @@ -2,7 +2,7 @@ version: 2 image_name: rhaiis-configuration apis: -- agents +- responses - batches - datasetio - eval @@ -11,6 +11,8 @@ apis: - safety - scoring - tool_runtime +- tool_groups +- conversations - vector_io benchmarks: [] @@ -60,13 +62,13 @@ providers: openai_api_key: '********' tool_runtime: - config: {} # Enable the RAG tool - provider_id: rag-runtime - provider_type: inline::rag-runtime + provider_id: file-search + provider_type: inline::file-search - config: {} # Enable MCP (Model Context Protocol) support provider_id: model-context-protocol provider_type: remote::model-context-protocol vector_io: [] - agents: + responses: - config: persistence: agent_state: @@ -75,8 +77,8 @@ providers: responses: table_name: agents_responses backend: sql_default - provider_id: meta-reference - provider_type: inline::meta-reference + provider_id: builtin + provider_type: inline::builtin batches: - config: kvstore: @@ -102,8 +104,8 @@ providers: kvstore: namespace: eval_store backend: kv_default - provider_id: meta-reference - provider_type: inline::meta-reference + provider_id: builtin + provider_type: inline::builtin scoring_fns: [] server: port: 8321 @@ -151,8 +153,8 @@ registered_resources: scoring_fns: [] benchmarks: [] tool_groups: - - toolgroup_id: builtin::rag # Register the RAG tool - provider_id: rag-runtime + - toolgroup_id: builtin::file_search # Register the RAG tool + provider_id: file-search vector_stores: default_provider_id: faiss default_embedding_model: # Define the default embedding model for RAG diff --git a/tests/e2e/configs/run-rhelai.yaml b/tests/e2e/configs/run-rhelai.yaml index 0edbb4d76..37446dacd 100644 --- a/tests/e2e/configs/run-rhelai.yaml +++ b/tests/e2e/configs/run-rhelai.yaml @@ -2,7 +2,7 @@ version: 2 image_name: rhelai-configuration apis: -- agents +- responses - batches - datasetio - eval @@ -11,6 +11,8 @@ apis: - safety - scoring - tool_runtime +- tool_groups +- conversations - vector_io benchmarks: [] @@ -60,13 +62,13 @@ providers: openai_api_key: '********' tool_runtime: - config: {} # Enable the RAG tool - provider_id: rag-runtime - provider_type: inline::rag-runtime + provider_id: file-search + provider_type: inline::file-search - config: {} # Enable MCP (Model Context Protocol) support provider_id: model-context-protocol provider_type: remote::model-context-protocol vector_io: [] - agents: + responses: - config: persistence: agent_state: @@ -75,8 +77,8 @@ providers: responses: table_name: agents_responses backend: sql_default - provider_id: meta-reference - provider_type: inline::meta-reference + provider_id: builtin + provider_type: inline::builtin batches: - config: kvstore: @@ -102,8 +104,8 @@ providers: kvstore: namespace: eval_store backend: kv_default - provider_id: meta-reference - provider_type: inline::meta-reference + provider_id: builtin + provider_type: inline::builtin scoring_fns: [] server: port: 8321 @@ -151,8 +153,8 @@ registered_resources: scoring_fns: [] benchmarks: [] tool_groups: - - toolgroup_id: builtin::rag # Register the RAG tool - provider_id: rag-runtime + - toolgroup_id: builtin::file_search # Register the RAG tool + provider_id: file-search vector_stores: default_provider_id: faiss default_embedding_model: # Define the default embedding model for RAG diff --git a/tests/e2e/configs/run-vertexai.yaml b/tests/e2e/configs/run-vertexai.yaml index aa5f4925e..cb950bc89 100644 --- a/tests/e2e/configs/run-vertexai.yaml +++ b/tests/e2e/configs/run-vertexai.yaml @@ -2,7 +2,7 @@ version: 2 image_name: vertexai-configuration apis: -- agents +- responses - batches - datasetio - eval @@ -11,6 +11,8 @@ apis: - safety - scoring - tool_runtime +- tool_groups +- conversations - vector_io benchmarks: [] @@ -59,13 +61,13 @@ providers: openai_api_key: '********' tool_runtime: - config: {} # Enable the RAG tool - provider_id: rag-runtime - provider_type: inline::rag-runtime + provider_id: file-search + provider_type: inline::file-search - config: {} # Enable MCP (Model Context Protocol) support provider_id: model-context-protocol provider_type: remote::model-context-protocol vector_io: [] - agents: + responses: - config: persistence: agent_state: @@ -74,8 +76,8 @@ providers: responses: table_name: agents_responses backend: sql_default - provider_id: meta-reference - provider_type: inline::meta-reference + provider_id: builtin + provider_type: inline::builtin batches: - config: kvstore: @@ -101,8 +103,8 @@ providers: kvstore: namespace: eval_store backend: kv_default - provider_id: meta-reference - provider_type: inline::meta-reference + provider_id: builtin + provider_type: inline::builtin scoring_fns: [] server: port: 8321 @@ -146,8 +148,8 @@ registered_resources: scoring_fns: [] benchmarks: [] tool_groups: - - toolgroup_id: builtin::rag # Register the RAG tool - provider_id: rag-runtime + - toolgroup_id: builtin::file_search # Register the RAG tool + provider_id: file-search vector_stores: default_provider_id: faiss default_embedding_model: # Define the default embedding model for RAG diff --git a/tests/e2e/configs/run-watsonx.yaml b/tests/e2e/configs/run-watsonx.yaml index a472471b6..bd54fd68c 100644 --- a/tests/e2e/configs/run-watsonx.yaml +++ b/tests/e2e/configs/run-watsonx.yaml @@ -2,7 +2,7 @@ version: 2 image_name: watsonx-configuration apis: -- agents +- responses - batches - datasetio - eval @@ -11,6 +11,8 @@ apis: - safety - scoring - tool_runtime +- tool_groups +- conversations - vector_io benchmarks: [] @@ -60,13 +62,13 @@ providers: openai_api_key: '********' tool_runtime: - config: {} # Enable the RAG tool - provider_id: rag-runtime - provider_type: inline::rag-runtime + provider_id: file-search + provider_type: inline::file-search - config: {} # Enable MCP (Model Context Protocol) support provider_id: model-context-protocol provider_type: remote::model-context-protocol vector_io: [] - agents: + responses: - config: persistence: agent_state: @@ -75,8 +77,8 @@ providers: responses: table_name: agents_responses backend: sql_default - provider_id: meta-reference - provider_type: inline::meta-reference + provider_id: builtin + provider_type: inline::builtin batches: - config: kvstore: @@ -102,8 +104,8 @@ providers: kvstore: namespace: eval_store backend: kv_default - provider_id: meta-reference - provider_type: inline::meta-reference + provider_id: builtin + provider_type: inline::builtin scoring_fns: [] server: port: 8321 @@ -147,8 +149,8 @@ registered_resources: scoring_fns: [] benchmarks: [] tool_groups: - - toolgroup_id: builtin::rag # Register the RAG tool - provider_id: rag-runtime + - toolgroup_id: builtin::file_search # Register the RAG tool + provider_id: file-search vector_stores: default_provider_id: faiss default_embedding_model: # Define the default embedding model for RAG diff --git a/tests/e2e/utils/llama_stack_utils.py b/tests/e2e/utils/llama_stack_utils.py index 70b444170..b57a1173e 100644 --- a/tests/e2e/utils/llama_stack_utils.py +++ b/tests/e2e/utils/llama_stack_utils.py @@ -1,9 +1,12 @@ -"""E2E test utilities for Llama Stack (toolgroups and shields). +"""E2E test utilities for Llama Stack shields. -This module provides functions to manage MCP toolgroups and shields on a running -Llama Stack instance during end-to-end tests: unregister MCP toolgroups when -switching configurations or testing MCP auth, and unregister/re-register shields -(e.g. from the ``Given shields are disabled for this scenario`` step). +This module provides functions to manage shields on a running Llama Stack instance +during end-to-end tests: unregister/re-register shields (e.g. from the +``Given shields are disabled for this scenario`` step). + +NOTE: Toolgroup management functions were removed in llama-stack v0.7.1 since +toolgroups are now auto-registered from run.yaml provider specs and cannot be +dynamically registered/unregistered at runtime. Only applies when running Llama Stack as a separate service (server mode). Requires E2E_LLAMA_STACK_URL or E2E_LLAMA_HOSTNAME and E2E_LLAMA_PORT. @@ -38,46 +41,25 @@ def _get_llama_stack_client() -> AsyncLlamaStackClient: # ----------------------------------------------------------------------------- -# Toolgroups +# Toolgroups (REMOVED in llama-stack v0.7.1) # ----------------------------------------------------------------------------- +# The client.toolgroups API was removed in llama-stack v0.7.1. Toolgroups are now +# auto-registered from run.yaml provider specs and cannot be dynamically managed. +# The unregister_mcp_toolgroups() function is kept as a no-op stub for backward +# compatibility with existing e2e test steps. -async def _unregister_toolgroup_async(identifier: str) -> None: - """Unregister a toolgroup by identifier.""" - client = _get_llama_stack_client() - try: - await client.toolgroups.unregister(identifier) - except APIConnectionError: - raise - except APIStatusError as e: - # 400 "not found": toolgroup already absent, scenario can proceed - if e.status_code == 400 and "not found" in str(e).lower(): - return None - raise - finally: - await client.close() - - -async def _unregister_mcp_toolgroups_async() -> None: - """Unregister all MCP toolgroups.""" - client = _get_llama_stack_client() - try: - toolgroups = await client.toolgroups.list() - for toolgroup in toolgroups: - if ( - toolgroup.identifier - and toolgroup.provider_id == "model-context-protocol" - ): - await _unregister_toolgroup_async(toolgroup.identifier) - except APIConnectionError: - raise - finally: - await client.close() +def unregister_mcp_toolgroups() -> None: + """No-op stub - toolgroups are auto-registered in llama-stack v0.7.1+. + In llama-stack v0.7.0+, the client.toolgroups API was removed and toolgroups + are automatically registered from provider specs in run.yaml at startup. + Dynamic registration/unregistration is no longer supported. -def unregister_mcp_toolgroups() -> None: - """Unregister all MCP toolgroups.""" - asyncio.run(_unregister_mcp_toolgroups_async()) + This function is retained as a no-op for backward compatibility with e2e tests + that call it in scenario setup steps. + """ + pass # No-op: toolgroups auto-registered from run.yaml # ----------------------------------------------------------------------------- diff --git a/tests/unit/app/endpoints/test_mcp_servers.py b/tests/unit/app/endpoints/test_mcp_servers.py deleted file mode 100644 index ce868c869..000000000 --- a/tests/unit/app/endpoints/test_mcp_servers.py +++ /dev/null @@ -1,542 +0,0 @@ -# pylint: disable=protected-access,redefined-outer-name - -"""Unit tests for the MCP servers dynamic registration endpoint.""" - -from pathlib import Path -from typing import Any - -import pytest -from fastapi import HTTPException, status -from llama_stack_client import APIConnectionError, NotFoundError -from pydantic import AnyHttpUrl, SecretStr -from pytest_mock import MockerFixture - -from app.endpoints import mcp_servers -from authentication.interface import AuthTuple -from configuration import AppConfig -from models.api.requests import MCPServerRegistrationRequest -from models.api.responses.successful import ( - MCPServerDeleteResponse, - MCPServerListResponse, - MCPServerRegistrationResponse, -) -from models.config import ( - Configuration, - CORSConfiguration, - LlamaStackConfiguration, - ModelContextProtocolServer, - ServiceConfiguration, - TLSConfiguration, - UserDataCollection, -) - -MOCK_AUTH: AuthTuple = ("mock_user_id", "mock_username", False, "mock_token") - - -@pytest.fixture -def mock_configuration() -> Configuration: - """Create a mock configuration with MCP servers.""" - return Configuration( - name="test", - service=ServiceConfiguration( - tls_config=TLSConfiguration( - tls_certificate_path=Path("tests/configuration/server.crt"), - tls_key_path=Path("tests/configuration/server.key"), - tls_key_password=Path("tests/configuration/password"), - ), - cors=CORSConfiguration( - allow_origins=["*"], - allow_credentials=False, - allow_methods=["*"], - allow_headers=["*"], - ), - host="localhost", - port=1234, - base_url=".", - auth_enabled=False, - workers=1, - color_log=True, - access_log=True, - root_path="/.", - ), - llama_stack=LlamaStackConfiguration( - url=AnyHttpUrl("http://localhost:8321"), - api_key=SecretStr("xyzzy"), - use_as_library_client=False, - library_client_config_path=".", - timeout=10, - ), - user_data_collection=UserDataCollection( - transcripts_enabled=False, - feedback_enabled=False, - transcripts_storage=".", - feedback_storage=".", - ), - mcp_servers=[ - ModelContextProtocolServer( - name="static-mcp", - provider_id="model-context-protocol", - url="http://localhost:3000", - ), - ], - customization=None, - authorization=None, - deployment_environment=".", - ) - - -def _make_app_config(mocker: MockerFixture, config: Configuration) -> AppConfig: - """Create an AppConfig with the given configuration and patch it.""" - app_config = AppConfig() - app_config._configuration = config - app_config._dynamic_mcp_server_names = set() - mocker.patch("app.endpoints.mcp_servers.configuration", app_config) - mocker.patch("app.endpoints.mcp_servers.authorize", lambda _: lambda func: func) - return app_config - - -def _mock_client(mocker: MockerFixture) -> Any: - """Create and patch a mock Llama Stack client.""" - mock_holder = mocker.patch("app.endpoints.mcp_servers.AsyncLlamaStackClientHolder") - mock_client = mocker.AsyncMock() - mock_holder.return_value.get_client.return_value = mock_client - return mock_client - - -@pytest.mark.asyncio -async def test_register_mcp_server_success( - mocker: MockerFixture, - mock_configuration: Configuration, -) -> None: - """Test successful MCP server registration.""" - app_config = _make_app_config(mocker, mock_configuration) - client = _mock_client(mocker) - client.toolgroups.register.return_value = None - - body = MCPServerRegistrationRequest( - name="new-mcp-server", - url="http://localhost:8888/mcp", - provider_id="MCP provider ID", - ) - - result = await mcp_servers.register_mcp_server_handler( - request=mocker.Mock(), body=body, auth=MOCK_AUTH - ) - - assert isinstance(result, MCPServerRegistrationResponse) - assert result.name == "new-mcp-server" - assert result.url == "http://localhost:8888/mcp" - assert result.provider_id == "MCP provider ID" - assert "registered successfully" in result.message - - client.toolgroups.register.assert_called_once_with( - toolgroup_id="new-mcp-server", - provider_id="MCP provider ID", - mcp_endpoint={"uri": "http://localhost:8888/mcp"}, - ) - - assert app_config.is_dynamic_mcp_server("new-mcp-server") - assert any(s.name == "new-mcp-server" for s in app_config.mcp_servers) - - -@pytest.mark.asyncio -async def test_register_mcp_server_duplicate_name( - mocker: MockerFixture, - mock_configuration: Configuration, -) -> None: - """Test registration fails when name already exists.""" - _make_app_config(mocker, mock_configuration) - _mock_client(mocker) - - body = MCPServerRegistrationRequest( - name="static-mcp", - url="http://localhost:9999/mcp", - provider_id="MCP provider ID", - ) - - with pytest.raises(HTTPException) as exc_info: - await mcp_servers.register_mcp_server_handler( - request=mocker.Mock(), body=body, auth=MOCK_AUTH - ) - assert exc_info.value.status_code == 409 - - -@pytest.mark.asyncio -async def test_register_mcp_server_llama_stack_failure( - mocker: MockerFixture, - mock_configuration: Configuration, -) -> None: - """Test registration rolls back on Llama Stack connection failure.""" - app_config = _make_app_config(mocker, mock_configuration) - client = _mock_client(mocker) - client.toolgroups.register.side_effect = APIConnectionError(request=mocker.Mock()) - - body = MCPServerRegistrationRequest( - name="failing-server", - url="http://localhost:8888/mcp", - provider_id="MCP provider ID", - ) - - with pytest.raises(HTTPException) as exc_info: - await mcp_servers.register_mcp_server_handler( - request=mocker.Mock(), body=body, auth=MOCK_AUTH - ) - assert exc_info.value.status_code == 503 - - assert not app_config.is_dynamic_mcp_server("failing-server") - assert not any(s.name == "failing-server" for s in app_config.mcp_servers) - - -@pytest.mark.asyncio -async def test_register_mcp_server_toolgroup_failure_returns_500( - mocker: MockerFixture, - mock_configuration: Configuration, -) -> None: - """Registration returns generic 500 without leaking toolgroup exception text.""" - app_config = _make_app_config(mocker, mock_configuration) - client = _mock_client(mocker) - client.toolgroups.register.side_effect = RuntimeError("upstream secret detail") - - body = MCPServerRegistrationRequest( - name="boom-server", - url="http://localhost:8888/mcp", - provider_id="MCP provider ID", - ) - - with pytest.raises(HTTPException) as exc_info: - await mcp_servers.register_mcp_server_handler( - request=mocker.Mock(), body=body, auth=MOCK_AUTH - ) - assert exc_info.value.status_code == 500 - raw_detail = exc_info.value.detail - assert isinstance(raw_detail, dict) - detail: dict[str, Any] = raw_detail - assert detail["response"] == "Failed to register MCP server" - - assert not app_config.is_dynamic_mcp_server("boom-server") - assert not any(s.name == "boom-server" for s in app_config.mcp_servers) - - -@pytest.mark.asyncio -async def test_register_mcp_server_with_all_fields( - mocker: MockerFixture, - mock_configuration: Configuration, -) -> None: - """Test registration with all optional fields provided.""" - _make_app_config(mocker, mock_configuration) - client = _mock_client(mocker) - client.toolgroups.register.return_value = None - - body = MCPServerRegistrationRequest( - name="full-mcp-server", - url="https://mcp.example.com/api", - provider_id="custom-provider", - authorization_headers={"Authorization": "client"}, - headers=["x-rh-identity"], - timeout=30, - ) - - result = await mcp_servers.register_mcp_server_handler( - request=mocker.Mock(), body=body, auth=MOCK_AUTH - ) - - assert result.name == "full-mcp-server" - assert result.provider_id == "custom-provider" - - -@pytest.mark.asyncio -async def test_list_mcp_servers_empty( - mocker: MockerFixture, - mock_configuration: Configuration, -) -> None: - """Test listing servers returns static servers.""" - _make_app_config(mocker, mock_configuration) - - result = await mcp_servers.list_mcp_servers_handler( - request=mocker.Mock(), auth=MOCK_AUTH - ) - - assert isinstance(result, MCPServerListResponse) - assert len(result.servers) == 1 - assert result.servers[0].name == "static-mcp" - assert result.servers[0].source == "config" - - -@pytest.mark.asyncio -async def test_list_mcp_servers_with_dynamic( - mocker: MockerFixture, - mock_configuration: Configuration, -) -> None: - """Test listing shows both static and dynamic servers.""" - _make_app_config(mocker, mock_configuration) - client = _mock_client(mocker) - client.toolgroups.register.return_value = None - - body = MCPServerRegistrationRequest( - name="dynamic-server", - url="http://localhost:9999/mcp", - provider_id="MCP provider ID", - ) - await mcp_servers.register_mcp_server_handler( - request=mocker.Mock(), body=body, auth=MOCK_AUTH - ) - - result = await mcp_servers.list_mcp_servers_handler( - request=mocker.Mock(), auth=MOCK_AUTH - ) - - assert len(result.servers) == 2 - sources = {s.name: s.source for s in result.servers} - assert sources["static-mcp"] == "config" - assert sources["dynamic-server"] == "api" - - -@pytest.mark.asyncio -async def test_delete_dynamic_mcp_server_success( - mocker: MockerFixture, - mock_configuration: Configuration, -) -> None: - """Test successful deletion of a dynamically registered server.""" - app_config = _make_app_config(mocker, mock_configuration) - client = _mock_client(mocker) - client.toolgroups.register.return_value = None - client.toolgroups.unregister.return_value = None - - body = MCPServerRegistrationRequest( - name="to-delete", - url="http://localhost:7777/mcp", - provider_id="MCP provider ID", - ) - await mcp_servers.register_mcp_server_handler( - request=mocker.Mock(), body=body, auth=MOCK_AUTH - ) - assert app_config.is_dynamic_mcp_server("to-delete") - - result = await mcp_servers.delete_mcp_server_handler( - request=mocker.Mock(), name="to-delete", auth=MOCK_AUTH - ) - - assert isinstance(result, MCPServerDeleteResponse) - assert result.name == "to-delete" - assert result.deleted is True - assert result.response == "MCP server deleted successfully" - - assert not app_config.is_dynamic_mcp_server("to-delete") - assert not any(s.name == "to-delete" for s in app_config.mcp_servers) - - client.toolgroups.unregister.assert_called_once_with(toolgroup_id="to-delete") - - -@pytest.mark.asyncio -async def test_delete_static_mcp_server_forbidden( - mocker: MockerFixture, - mock_configuration: Configuration, -) -> None: - """Test that deleting a statically configured server is forbidden.""" - _make_app_config(mocker, mock_configuration) - _mock_client(mocker) - - with pytest.raises(HTTPException) as exc_info: - await mcp_servers.delete_mcp_server_handler( - request=mocker.Mock(), name="static-mcp", auth=MOCK_AUTH - ) - assert exc_info.value.status_code == 403 - - -@pytest.mark.asyncio -async def test_delete_nonexistent_mcp_server( - mocker: MockerFixture, - mock_configuration: Configuration, -) -> None: - """Deleting an unknown name returns 200 with deleted=False (idempotent delete).""" - _make_app_config(mocker, mock_configuration) - client = _mock_client(mocker) - - result = await mcp_servers.delete_mcp_server_handler( - request=mocker.Mock(), name="no-such-server", auth=MOCK_AUTH - ) - - assert isinstance(result, MCPServerDeleteResponse) - assert result.name == "no-such-server" - assert result.deleted is False - assert result.response == "MCP server not found" - client.toolgroups.unregister.assert_called_once_with(toolgroup_id="no-such-server") - - -@pytest.mark.asyncio -async def test_delete_mcp_server_llama_stack_failure( - mocker: MockerFixture, - mock_configuration: Configuration, -) -> None: - """Test deletion handles Llama Stack connection failure gracefully.""" - _make_app_config(mocker, mock_configuration) - client = _mock_client(mocker) - client.toolgroups.register.return_value = None - client.toolgroups.unregister.side_effect = APIConnectionError(request=mocker.Mock()) - - body = MCPServerRegistrationRequest( - name="to-delete-fail", - url="http://localhost:7777/mcp", - provider_id="MCP provider ID", - ) - await mcp_servers.register_mcp_server_handler( - request=mocker.Mock(), body=body, auth=MOCK_AUTH - ) - - with pytest.raises(HTTPException) as exc_info: - await mcp_servers.delete_mcp_server_handler( - request=mocker.Mock(), name="to-delete-fail", auth=MOCK_AUTH - ) - assert exc_info.value.status_code == 503 - - -@pytest.mark.asyncio -async def test_delete_mcp_server_toolgroup_not_found_is_idempotent( - mocker: MockerFixture, - mock_configuration: Configuration, -) -> None: - """Deleting a dynamic server succeeds when Llama Stack toolgroup is already gone.""" - app_config = _make_app_config(mocker, mock_configuration) - client = _mock_client(mocker) - client.toolgroups.register.return_value = None - client.toolgroups.unregister.side_effect = NotFoundError( - message="Toolgroup not found", - response=mocker.Mock(request=None), - body=None, - ) - - body = MCPServerRegistrationRequest( - name="orphan-server", - url="http://localhost:7777/mcp", - provider_id="MCP provider ID", - ) - await mcp_servers.register_mcp_server_handler( - request=mocker.Mock(), body=body, auth=MOCK_AUTH - ) - assert app_config.is_dynamic_mcp_server("orphan-server") - - result = await mcp_servers.delete_mcp_server_handler( - request=mocker.Mock(), name="orphan-server", auth=MOCK_AUTH - ) - - assert isinstance(result, MCPServerDeleteResponse) - assert result.name == "orphan-server" - assert result.deleted is True - assert not app_config.is_dynamic_mcp_server("orphan-server") - assert not any(s.name == "orphan-server" for s in app_config.mcp_servers) - - -@pytest.mark.asyncio -async def test_list_mcp_servers_configuration_not_loaded( - mocker: MockerFixture, -) -> None: - """Test listing MCP servers returns 500 when configuration is not loaded.""" - mock_config = AppConfig() - mock_config._configuration = None # pylint: disable=protected-access - mocker.patch("app.endpoints.mcp_servers.configuration", mock_config) - mocker.patch("app.endpoints.mcp_servers.authorize", lambda _: lambda func: func) - - with pytest.raises(HTTPException) as exc_info: - await mcp_servers.list_mcp_servers_handler( - request=mocker.Mock(), auth=MOCK_AUTH - ) - - assert exc_info.value.status_code == status.HTTP_500_INTERNAL_SERVER_ERROR - raw_detail = exc_info.value.detail - assert isinstance(raw_detail, dict) - detail: dict[str, Any] = raw_detail - assert detail["response"] == "Configuration is not loaded" - - -def test_mcp_server_registration_request_validation() -> None: - """Test request model validation.""" - with pytest.raises(Exception): - MCPServerRegistrationRequest( - name="test", - url="ftp://invalid-scheme", - provider_id="MCP provider ID", - ) - - with pytest.raises(Exception): - MCPServerRegistrationRequest( - name="", - url="http://valid.url", - provider_id="MCP provider ID", - ) - - req = MCPServerRegistrationRequest( - name="valid-server", - url="http://localhost:8080/mcp", - ) # pyright: ignore[reportCallIssue] - assert req.provider_id == "model-context-protocol" - - -def test_mcp_server_registration_auth_keywords() -> None: - """Test that all three supported auth keywords are accepted.""" - for keyword in ("client", "kubernetes", "oauth"): - req = MCPServerRegistrationRequest( - name=f"server-{keyword}", - url="http://localhost:8080/mcp", - authorization_headers={"Authorization": keyword}, - provider_id="MCP provider ID", - ) - assert req.authorization_headers is not None - assert req.authorization_headers["Authorization"] == keyword - - -def test_mcp_server_registration_rejects_file_path() -> None: - """Test that file-path based auth headers are rejected for dynamic registration.""" - with pytest.raises(Exception, match="unsupported value"): - MCPServerRegistrationRequest( - name="bad-server", - url="http://localhost:8080/mcp", - authorization_headers={"Authorization": "/var/secrets/token"}, - provider_id="MCP provider ID", - ) - - -def test_mcp_server_registration_rejects_arbitrary_value() -> None: - """Test that arbitrary auth header values are rejected.""" - with pytest.raises(Exception, match="unsupported value"): - MCPServerRegistrationRequest( - name="bad-server", - url="http://localhost:8080/mcp", - authorization_headers={"Authorization": "Bearer my-static-token"}, - provider_id="MCP provider ID", - ) - - -@pytest.mark.asyncio -async def test_register_and_delete_roundtrip( - mocker: MockerFixture, - mock_configuration: Configuration, -) -> None: - """Test full register -> list -> delete -> list cycle.""" - _make_app_config(mocker, mock_configuration) - client = _mock_client(mocker) - client.toolgroups.register.return_value = None - client.toolgroups.unregister.return_value = None - - body = MCPServerRegistrationRequest( - name="roundtrip-server", - url="http://localhost:5555/mcp", - provider_id="MCP provider ID", - ) - await mcp_servers.register_mcp_server_handler( - request=mocker.Mock(), body=body, auth=MOCK_AUTH - ) - - list_result = await mcp_servers.list_mcp_servers_handler( - request=mocker.Mock(), auth=MOCK_AUTH - ) - assert len(list_result.servers) == 2 - - await mcp_servers.delete_mcp_server_handler( - request=mocker.Mock(), name="roundtrip-server", auth=MOCK_AUTH - ) - - list_result = await mcp_servers.list_mcp_servers_handler( - request=mocker.Mock(), auth=MOCK_AUTH - ) - assert len(list_result.servers) == 1 - assert list_result.servers[0].name == "static-mcp" diff --git a/tests/unit/app/endpoints/test_tools.py b/tests/unit/app/endpoints/test_tools.py index 436fda75a..09b3123b7 100644 --- a/tests/unit/app/endpoints/test_tools.py +++ b/tests/unit/app/endpoints/test_tools.py @@ -88,178 +88,88 @@ def mock_configuration() -> Configuration: ) -def _make_tool_def_mock(mocker: MockerFixture, fields: dict[str, Any]) -> MockType: - """Create a mock ToolDef object matching Llama Stack's tools.list() output. - - The mock supports ``dict()`` conversion so the endpoint can do - ``tool_dict = dict(tool)`` and get a plain dict back. - """ - mock = mocker.Mock() - mock.__dict__.update(fields) - mock.keys.return_value = fields.keys() - mock.__getitem__ = lambda self, key: self.__dict__[key] - mock.__iter__ = lambda self: iter(self.__dict__) - return mock - - -@pytest.fixture -def mock_tools_response(mocker: MockerFixture) -> list[MockType]: - """Create mock tools response matching Llama Stack ToolDef format. - - Each mock uses ToolDef field names: ``name`` (not ``identifier``), - ``input_schema`` (not ``parameters``), and no ``provider_id`` or ``type`` - (those live on the toolgroup, not on individual tools). - - Returns: - list[MockType]: Two mock ToolDef objects for filesystem and git tools. - """ - tool1 = _make_tool_def_mock( - mocker, - { - "name": "filesystem_read", - "description": "Read contents of a file from the filesystem", - "input_schema": { - "type": "object", - "properties": { - "path": { - "type": "string", - "description": "Path to the file to read", - } - }, - "required": ["path"], - }, - "toolgroup_id": "filesystem-tools", - "metadata": {}, - "output_schema": None, - }, - ) - - tool2 = _make_tool_def_mock( - mocker, - { - "name": "git_status", - "description": "Get the status of a git repository", - "input_schema": { - "type": "object", - "properties": { - "repository_path": { - "type": "string", - "description": "Path to the git repository", - } - }, - "required": ["repository_path"], - }, - "toolgroup_id": "git-tools", - "metadata": {}, - "output_schema": None, - }, - ) - - return [tool1, tool2] - - @pytest.mark.asyncio async def test_tools_endpoint_success( - mocker: MockerFixture, - mock_configuration: Configuration, # pylint: disable=redefined-outer-name - mock_tools_response: list[MockType], # pylint: disable=redefined-outer-name + mocker: MockerFixture, mock_configuration: Configuration ) -> None: - """Test successful tools endpoint response.""" - # Mock configuration - wrap in AppConfig + """Test successful tools endpoint response with multiple MCP servers.""" + # Mock configuration app_config = AppConfig() app_config._configuration = mock_configuration mocker.patch("app.endpoints.tools.configuration", app_config) - - # Mock authorization decorator to bypass i mocker.patch("app.endpoints.tools.authorize", lambda _: lambda func: func) - # Mock client holder and clien + # Mock Llama Stack client mock_client_holder = mocker.patch("app.endpoints.tools.AsyncLlamaStackClientHolder") mock_client = mocker.AsyncMock() - mock_client_holder.return_value.get_client.return_value = mock_client - - # Mock toolgroups.list response (toolgroups carry provider_id and type) - mock_toolgroup1 = mocker.Mock() - mock_toolgroup1.identifier = "filesystem-tools" - mock_toolgroup1.provider_id = "model-context-protocol" - mock_toolgroup1.type = "tool_group" - mock_toolgroup2 = mocker.Mock() - mock_toolgroup2.identifier = "git-tools" - mock_toolgroup2.provider_id = "model-context-protocol" - mock_toolgroup2.type = "tool_group" - mock_client.toolgroups.list.return_value = [mock_toolgroup1, mock_toolgroup2] + mock_client_holder.get_client.return_value = mock_client + + # Mock HTTP GET /v1/tools response for each MCP server + async def mock_get(path: str, **kwargs: Any) -> dict[str, Any]: + params = kwargs.get("options", {}).get("params", {}) + toolgroup_id = params.get("toolgroup_id") + + if toolgroup_id == "filesystem-tools": + return { + "tools": [ + { + "name": "filesystem_read", + "description": "Read file contents", + "input_schema": { + "type": "object", + "properties": { + "path": {"type": "string", "description": "File path"} + }, + "required": ["path"], + }, + } + ] + } + if toolgroup_id == "git-tools": + return { + "tools": [ + { + "name": "git_status", + "description": "Get git status", + "input_schema": { + "type": "object", + "properties": { + "repo": {"type": "string", "description": "Repo path"} + }, + "required": ["repo"], + }, + } + ] + } + return {"tools": []} - # Mock tools.list responses for each MCP server - mock_client.tools.list.side_effect = [ - [mock_tools_response[0]], # filesystem-tools response - [mock_tools_response[1]], # git-tools response - ] + mock_client.get.side_effect = mock_get - # Mock request and auth + # Mock request mock_request = mocker.Mock() - mock_auth = MOCK_AUTH + mock_mcp_headers = mocker.Mock() + mock_mcp_headers.authorization = None + mock_mcp_headers.x_api_key = None - # Call the endpoint - response = await tools.tools_endpoint_handler.__wrapped__( # pyright: ignore - mock_request, mock_auth, {} + # Call endpoint + response = await tools.tools_endpoint_handler( + request=mock_request, auth=MOCK_AUTH, mcp_headers=mock_mcp_headers ) # Verify response assert isinstance(response, ToolsResponse) assert len(response.tools) == 2 - - # Verify first tool - tool1 = response.tools[0] - assert tool1["identifier"] == "filesystem_read" - assert tool1["description"] == "Read contents of a file from the filesystem" - assert tool1["server_source"] == "http://localhost:3000" - assert tool1["toolgroup_id"] == "filesystem-tools" - assert tool1["provider_id"] == "model-context-protocol" - assert tool1["type"] == "tool_group" - assert len(tool1["parameters"]) == 1 - assert tool1["parameters"][0]["name"] == "path" - assert tool1["parameters"][0]["required"] is True - - # Verify second tool - tool2 = response.tools[1] - assert tool2["identifier"] == "git_status" - assert tool2["description"] == "Get the status of a git repository" - assert tool2["server_source"] == "http://localhost:3001" - assert tool2["toolgroup_id"] == "git-tools" - assert tool2["provider_id"] == "model-context-protocol" - - # Verify client calls - assert mock_client.tools.list.call_count == 2 - mock_client.tools.list.assert_any_call( - toolgroup_id="filesystem-tools", - extra_headers={}, - extra_query={"authorization": None}, - ) - mock_client.tools.list.assert_any_call( - toolgroup_id="git-tools", - extra_headers={}, - extra_query={"authorization": None}, - ) + assert response.tools[0]["identifier"] == "filesystem_read" + assert response.tools[1]["identifier"] == "git_status" @pytest.mark.asyncio async def test_tools_endpoint_no_mcp_servers(mocker: MockerFixture) -> None: """Test tools endpoint with no MCP servers configured.""" - # Mock configuration with no MCP servers - wrap in AppConfig - mock_config = Configuration( + # Mock configuration with empty MCP servers + config = Configuration( name="test", service=ServiceConfiguration( - tls_config=TLSConfiguration( - tls_certificate_path=Path("tests/configuration/server.crt"), - tls_key_path=Path("tests/configuration/server.key"), - tls_key_password=Path("tests/configuration/password"), - ), - cors=CORSConfiguration( - allow_origins=["foo_origin", "bar_origin", "baz_origin"], - allow_credentials=False, - allow_methods=["foo_method", "bar_method", "baz_method"], - allow_headers=["foo_header", "bar_header", "baz_header"], - ), host="localhost", port=1234, base_url=".", @@ -271,7 +181,6 @@ async def test_tools_endpoint_no_mcp_servers(mocker: MockerFixture) -> None: ), llama_stack=LlamaStackConfiguration( url=AnyHttpUrl("http://localhost:8321"), - api_key=SecretStr("xyzzy"), use_as_library_client=False, library_client_config_path=".", timeout=10, @@ -284,854 +193,174 @@ async def test_tools_endpoint_no_mcp_servers(mocker: MockerFixture) -> None: ), mcp_servers=[], customization=None, - authorization=None, - deployment_environment=".", - ) + ) # pyright: ignore[reportCallIssue] + app_config = AppConfig() - app_config._configuration = mock_config + app_config._configuration = config mocker.patch("app.endpoints.tools.configuration", app_config) - - # Mock authorization decorator to bypass i mocker.patch("app.endpoints.tools.authorize", lambda _: lambda func: func) - # Mock client holder and clien - mock_client_holder = mocker.patch("app.endpoints.tools.AsyncLlamaStackClientHolder") - mock_client = mocker.AsyncMock() - mock_client_holder.return_value.get_client.return_value = mock_client - - # Mock toolgroups.list response - empty for no MCP servers - mock_client.toolgroups.list.return_value = [] - - # Mock request and auth + # Mock request mock_request = mocker.Mock() - mock_auth = MOCK_AUTH + mock_mcp_headers = mocker.Mock() + mock_mcp_headers.authorization = None + mock_mcp_headers.x_api_key = None - # Call the endpoint - response = await tools.tools_endpoint_handler.__wrapped__( # pyright: ignore - mock_request, mock_auth, {} + # Call endpoint + response = await tools.tools_endpoint_handler( + request=mock_request, auth=MOCK_AUTH, mcp_headers=mock_mcp_headers ) - # Verify response + # Verify empty response assert isinstance(response, ToolsResponse) assert len(response.tools) == 0 @pytest.mark.asyncio async def test_tools_endpoint_api_connection_error( - mocker: MockerFixture, # pylint: disable=redefined-outer-name - mock_configuration: Configuration, # pylint: disable=redefined-outer-name -) -> None: - """Test tools endpoint with API connection error from individual servers.""" - # Mock configuration - wrap in AppConfig - app_config = AppConfig() - app_config._configuration = mock_configuration - mocker.patch("app.endpoints.tools.configuration", app_config) - - # Mock authorization decorator to bypass i - mocker.patch("app.endpoints.tools.authorize", lambda _: lambda func: func) - - # Mock client holder and clien - mock_client_holder = mocker.patch("app.endpoints.tools.AsyncLlamaStackClientHolder") - mock_client = mocker.AsyncMock() - mock_client_holder.return_value.get_client.return_value = mock_client - - # Mock toolgroups.list response - mock_toolgroup1 = mocker.Mock() - mock_toolgroup1.identifier = "filesystem-tools" - mock_toolgroup1.provider_id = "model-context-protocol" - mock_toolgroup1.type = "tool_group" - mock_toolgroup2 = mocker.Mock() - mock_toolgroup2.identifier = "git-tools" - mock_toolgroup2.provider_id = "model-context-protocol" - mock_toolgroup2.type = "tool_group" - mock_client.toolgroups.list.return_value = [mock_toolgroup1, mock_toolgroup2] - - # Mock API connection error - create a proper APIConnectionError - api_error = APIConnectionError(request=mocker.Mock()) - mock_client.tools.list.side_effect = api_error - - # Mock request and auth - mock_request = mocker.Mock() - mock_auth = MOCK_AUTH - - # Call the endpoint - should raise HTTPException when APIConnectionError occurs - with pytest.raises(HTTPException) as exc_info: - await tools.tools_endpoint_handler.__wrapped__( # pyright: ignore - mock_request, mock_auth, {} - ) - - assert exc_info.value.status_code == 503 - detail = exc_info.value.detail - assert isinstance(detail, dict) - assert detail["response"] == "Unable to connect to Llama Stack" # type: ignore - - -@pytest.mark.asyncio -async def test_tools_endpoint_partial_failure( # pylint: disable=redefined-outer-name - mocker: MockerFixture, - mock_configuration: Configuration, -) -> None: - """Test tools endpoint with one MCP server failing with APIConnectionError.""" - app_config = AppConfig() - app_config._configuration = mock_configuration - mocker.patch("app.endpoints.tools.configuration", app_config) - - mocker.patch("app.endpoints.tools.authorize", lambda _: lambda func: func) - mock_client_holder = mocker.patch("app.endpoints.tools.AsyncLlamaStackClientHolder") - mock_client = mocker.AsyncMock() - mock_client_holder.return_value.get_client.return_value = mock_client - - mock_toolgroup1 = mocker.Mock() - mock_toolgroup1.identifier = "filesystem-tools" - mock_toolgroup1.provider_id = "model-context-protocol" - mock_toolgroup1.type = "tool_group" - mock_toolgroup2 = mocker.Mock() - mock_toolgroup2.identifier = "git-tools" - mock_toolgroup2.provider_id = "model-context-protocol" - mock_toolgroup2.type = "tool_group" - mock_client.toolgroups.list.return_value = [mock_toolgroup1, mock_toolgroup2] - - api_error = APIConnectionError(request=mocker.Mock()) - mock_client.tools.list.side_effect = api_error - - mock_request = mocker.Mock() - mock_auth = MOCK_AUTH - - with pytest.raises(HTTPException) as exc_info: - await tools.tools_endpoint_handler.__wrapped__( # pyright: ignore - mock_request, mock_auth, {} - ) - - assert exc_info.value.status_code == 503 - detail = exc_info.value.detail - assert isinstance(detail, dict) - assert detail["response"] == "Unable to connect to Llama Stack" # type: ignore - - -@pytest.mark.asyncio -async def test_tools_endpoint_toolgroup_not_found( # pylint: disable=redefined-outer-name - mocker: MockerFixture, - mock_configuration: Configuration, - mock_tools_response: list[MockType], + mocker: MockerFixture, mock_configuration: Configuration ) -> None: - """Test tools endpoint when a toolgroup is not found (BadRequestError).""" - # Mock configuration - wrap in AppConfig + """Test tools endpoint when Llama Stack is unreachable.""" app_config = AppConfig() app_config._configuration = mock_configuration mocker.patch("app.endpoints.tools.configuration", app_config) - - # Mock authorization decorator to bypass i mocker.patch("app.endpoints.tools.authorize", lambda _: lambda func: func) - # Mock client holder and clien + # Mock client to raise APIConnectionError mock_client_holder = mocker.patch("app.endpoints.tools.AsyncLlamaStackClientHolder") mock_client = mocker.AsyncMock() - mock_client_holder.return_value.get_client.return_value = mock_client + mock_client.get.side_effect = APIConnectionError(request=mocker.Mock()) + mock_client_holder.get_client.return_value = mock_client - # Mock toolgroups.list response - mock_toolgroup1 = mocker.Mock() - mock_toolgroup1.identifier = "filesystem-tools" - mock_toolgroup1.provider_id = "model-context-protocol" - mock_toolgroup1.type = "tool_group" - mock_toolgroup2 = mocker.Mock() - mock_toolgroup2.identifier = "git-tools" - mock_toolgroup2.provider_id = "model-context-protocol" - mock_toolgroup2.type = "tool_group" - mock_client.toolgroups.list.return_value = [mock_toolgroup1, mock_toolgroup2] - - # Mock tools.list responses - first succeeds, second raises BadRequestError - bad_request_error = BadRequestError( - message="Toolgroup not found", - response=mocker.Mock(request=None), - body=None, - ) - mock_client.tools.list.side_effect = [ - [mock_tools_response[0]], # filesystem-tools response - bad_request_error, # git-tools not found - ] - - # Mock request and auth mock_request = mocker.Mock() - mock_auth = MOCK_AUTH + mock_mcp_headers = mocker.Mock() + mock_mcp_headers.authorization = None + mock_mcp_headers.x_api_key = None - # Call the endpoint - should continue processing and return tools from successful toolgroups - response = await tools.tools_endpoint_handler.__wrapped__( # pyright: ignore - mock_request, mock_auth, {} + # Should still succeed but with empty tools list + response = await tools.tools_endpoint_handler( + request=mock_request, auth=MOCK_AUTH, mcp_headers=mock_mcp_headers ) - # Verify response - should have only one tool from the first successful toolgroup assert isinstance(response, ToolsResponse) - assert len(response.tools) == 1 - assert response.tools[0]["identifier"] == "filesystem_read" - assert response.tools[0]["server_source"] == "http://localhost:3000" - assert response.tools[0]["provider_id"] == "model-context-protocol" - - # Verify that tools.list was called for both toolgroups - assert mock_client.tools.list.call_count == 2 - mock_client.tools.list.assert_any_call( - toolgroup_id="filesystem-tools", - extra_headers={}, - extra_query={"authorization": None}, - ) - mock_client.tools.list.assert_any_call( - toolgroup_id="git-tools", - extra_headers={}, - extra_query={"authorization": None}, - ) + assert len(response.tools) == 0 @pytest.mark.asyncio -async def test_tools_endpoint_builtin_toolgroup( - mocker: MockerFixture, - mock_configuration: Configuration, # pylint: disable=redefined-outer-name +async def test_tools_endpoint_toolgroup_not_found( + mocker: MockerFixture, mock_configuration: Configuration ) -> None: - """Test tools endpoint with built-in toolgroups.""" - # Mock configuration - wrap in AppConfig + """Test tools endpoint when a toolgroup is not found (400 error).""" app_config = AppConfig() app_config._configuration = mock_configuration mocker.patch("app.endpoints.tools.configuration", app_config) - - # Mock authorization decorator to bypass i mocker.patch("app.endpoints.tools.authorize", lambda _: lambda func: func) - # Mock client holder and clien mock_client_holder = mocker.patch("app.endpoints.tools.AsyncLlamaStackClientHolder") mock_client = mocker.AsyncMock() - mock_client_holder.return_value.get_client.return_value = mock_client - - # Mock toolgroups.list response with built-in toolgroup - mock_toolgroup = mocker.Mock() - mock_toolgroup.identifier = "builtin-tools" # Not in MCP server names - mock_toolgroup.provider_id = "rag-runtime" - mock_toolgroup.type = "tool_group" - mock_client.toolgroups.list.return_value = [mock_toolgroup] - # Mock tools.list response for built-in toolgroup (ToolDef format) - mock_tool = _make_tool_def_mock( - mocker, - { - "name": "builtin_tool", - "description": "A built-in tool", - "input_schema": None, - "toolgroup_id": "builtin-tools", - "metadata": {}, - "output_schema": None, - }, - ) + # First toolgroup not found, second succeeds + call_count = 0 + + async def mock_get(path: str, **kwargs: Any) -> dict[str, Any]: + nonlocal call_count + call_count += 1 + if call_count == 1: + raise BadRequestError( + "Toolgroup not found", response=mocker.Mock(), body={} + ) + return { + "tools": [ + { + "name": "git_status", + "description": "Get git status", + "input_schema": {"type": "object", "properties": {}}, + } + ] + } - mock_client.tools.list.return_value = [mock_tool] + mock_client.get.side_effect = mock_get + mock_client_holder.get_client.return_value = mock_client - # Mock request and auth mock_request = mocker.Mock() - mock_auth = MOCK_AUTH + mock_mcp_headers = mocker.Mock() + mock_mcp_headers.authorization = None + mock_mcp_headers.x_api_key = None - # Call the endpoint - response = await tools.tools_endpoint_handler.__wrapped__( # pyright: ignore - mock_request, mock_auth, {} + response = await tools.tools_endpoint_handler( + request=mock_request, auth=MOCK_AUTH, mcp_headers=mock_mcp_headers ) - # Verify response — identifier mapped from name, provider_id from toolgroup + # Should get tools from the second server only assert isinstance(response, ToolsResponse) assert len(response.tools) == 1 - assert response.tools[0]["identifier"] == "builtin_tool" - assert response.tools[0]["server_source"] == "builtin" - assert response.tools[0]["provider_id"] == "rag-runtime" - assert response.tools[0]["type"] == "tool_group" - assert response.tools[0]["parameters"] == [] - - -@pytest.mark.asyncio -async def test_tools_endpoint_mixed_toolgroups(mocker: MockerFixture) -> None: - """Test tools endpoint with both MCP and built-in toolgroups.""" - # Mock configuration with MCP servers - wrap in AppConfig - mock_config = Configuration( - name="test", - service=ServiceConfiguration( - tls_config=TLSConfiguration( - tls_certificate_path=Path("tests/configuration/server.crt"), - tls_key_path=Path("tests/configuration/server.key"), - tls_key_password=Path("tests/configuration/password"), - ), - cors=CORSConfiguration( - allow_origins=["foo_origin", "bar_origin", "baz_origin"], - allow_credentials=False, - allow_methods=["foo_method", "bar_method", "baz_method"], - allow_headers=["foo_header", "bar_header", "baz_header"], - ), - host="localhost", - port=1234, - base_url=".", - auth_enabled=False, - workers=1, - color_log=True, - access_log=True, - root_path="/.", - ), - llama_stack=LlamaStackConfiguration( - url=AnyHttpUrl("http://localhost:8321"), - api_key=SecretStr("xyzzy"), - use_as_library_client=False, - library_client_config_path=".", - timeout=10, - ), - user_data_collection=UserDataCollection( - transcripts_enabled=False, - feedback_enabled=False, - transcripts_storage=".", - feedback_storage=".", - ), - mcp_servers=[ - ModelContextProtocolServer( - name="filesystem-tools", - provider_id="model-context-protocol", - url="http://localhost:3000", - ), - ], - customization=None, - authorization=None, - deployment_environment=".", - ) - app_config = AppConfig() - app_config._configuration = mock_config - mocker.patch("app.endpoints.tools.configuration", app_config) - - # Mock authorization decorator to bypass i - mocker.patch("app.endpoints.tools.authorize", lambda _: lambda func: func) - - # Mock client holder and clien - mock_client_holder = mocker.patch("app.endpoints.tools.AsyncLlamaStackClientHolder") - mock_client = mocker.AsyncMock() - mock_client_holder.return_value.get_client.return_value = mock_client - - # Mock toolgroups.list response with both MCP and built-in toolgroups - mock_toolgroup1 = mocker.Mock() - mock_toolgroup1.identifier = "filesystem-tools" # MCP server toolgroup - mock_toolgroup1.provider_id = "model-context-protocol" - mock_toolgroup1.type = "tool_group" - mock_toolgroup2 = mocker.Mock() - mock_toolgroup2.identifier = "builtin-tools" # Built-in toolgroup - mock_toolgroup2.provider_id = "rag-runtime" - mock_toolgroup2.type = "tool_group" - mock_client.toolgroups.list.return_value = [mock_toolgroup1, mock_toolgroup2] - - # Mock tools.list responses (ToolDef format) - mock_tool1 = _make_tool_def_mock( - mocker, - { - "name": "filesystem_read", - "description": "Read file", - "input_schema": None, - "toolgroup_id": "filesystem-tools", - "metadata": {}, - "output_schema": None, - }, - ) - - mock_tool2 = _make_tool_def_mock( - mocker, - { - "name": "builtin_tool", - "description": "Built-in tool", - "input_schema": None, - "toolgroup_id": "builtin-tools", - "metadata": {}, - "output_schema": None, - }, - ) - - mock_client.tools.list.side_effect = [[mock_tool1], [mock_tool2]] - - # Mock request and auth - mock_request = mocker.Mock() - mock_auth = MOCK_AUTH - - # Call the endpoint - response = await tools.tools_endpoint_handler.__wrapped__( # pyright: ignore - mock_request, mock_auth, {} - ) - - # Verify response - should have both tools with correct server sources - assert isinstance(response, ToolsResponse) - assert len(response.tools) == 2 - - # Find tools by identifier to avoid order dependency - mcp_tool = next(t for t in response.tools if t["identifier"] == "filesystem_read") - builtin_tool = next(t for t in response.tools if t["identifier"] == "builtin_tool") - - assert mcp_tool["server_source"] == "http://localhost:3000" - assert mcp_tool["provider_id"] == "model-context-protocol" - assert builtin_tool["server_source"] == "builtin" - assert builtin_tool["provider_id"] == "rag-runtime" - - -@pytest.mark.asyncio -async def test_tools_endpoint_value_attribute_error( - mocker: MockerFixture, - mock_configuration: Configuration, # pylint: disable=redefined-outer-name -) -> None: - """Test tools endpoint with ValueError/AttributeError in toolgroups.list.""" - # Mock configuration - wrap in AppConfig - app_config = AppConfig() - app_config._configuration = mock_configuration - mocker.patch("app.endpoints.tools.configuration", app_config) - - # Mock authorization decorator to bypass i - mocker.patch("app.endpoints.tools.authorize", lambda _: lambda func: func) - - # Mock client holder and clien - mock_client_holder = mocker.patch("app.endpoints.tools.AsyncLlamaStackClientHolder") - mock_client = mocker.AsyncMock() - mock_client_holder.return_value.get_client.return_value = mock_client - - # Mock toolgroups.list to raise ValueError - mock_client.toolgroups.list.side_effect = ValueError("Invalid response format") - - # Mock request and auth - mock_request = mocker.Mock() - mock_auth = MOCK_AUTH - - # Call the endpointt - should raise exception since toolgroups.list failed - with pytest.raises(ValueError, match="Invalid response format"): - await tools.tools_endpoint_handler.__wrapped__(mock_request, mock_auth, {}) # type: ignore - - -@pytest.mark.asyncio -async def test_tools_endpoint_apiconnection_error_toolgroups( # pylint: disable=redefined-outer-name - mocker: MockerFixture, mock_configuration: Configuration -) -> None: - """Test tools endpoint with APIConnectionError in toolgroups.list.""" - # Mock configuration - wrap in AppConfig - app_config = AppConfig() - app_config._configuration = mock_configuration - mocker.patch("app.endpoints.tools.configuration", app_config) - - # Mock authorization decorator to bypass i - mocker.patch("app.endpoints.tools.authorize", lambda _: lambda func: func) - - # Mock client holder and clien - mock_client_holder = mocker.patch("app.endpoints.tools.AsyncLlamaStackClientHolder") - mock_client = mocker.AsyncMock() - mock_client_holder.return_value.get_client.return_value = mock_client - - # Mock toolgroups.list to raise APIConnectionError - api_error = APIConnectionError(request=mocker.Mock()) - mock_client.toolgroups.list.side_effect = api_error - - # Mock request and auth - mock_request = mocker.Mock() - mock_auth = MOCK_AUTH - - # Call the endpointt and expect HTTPException - with pytest.raises(HTTPException) as exc_info: - await tools.tools_endpoint_handler.__wrapped__(mock_request, mock_auth, {}) # type: ignore - - assert exc_info.value.status_code == 503 - - detail = exc_info.value.detail - assert isinstance(detail, dict) - assert detail["response"] == "Unable to connect to Llama Stack" # type: ignore - - -@pytest.mark.asyncio -async def test_tools_endpoint_client_holder_apiconnection_error( # pylint: disable=redefined-outer-name - mocker: MockerFixture, mock_configuration: Configuration -) -> None: - """Test tools endpoint with APIConnectionError in client holder.""" - # Mock configuration - wrap in AppConfig - app_config = AppConfig() - app_config._configuration = mock_configuration - mocker.patch("app.endpoints.tools.configuration", app_config) - - # Mock authorization decorator to bypass i - mocker.patch("app.endpoints.tools.authorize", lambda _: lambda func: func) - - # Mock client holder to raise APIConnectionError - mock_client_holder = mocker.patch("app.endpoints.tools.AsyncLlamaStackClientHolder") - api_error = APIConnectionError(request=None) # type: ignore - mock_client_holder.return_value.get_client.side_effect = api_error - - # Mock request and auth - mock_request = mocker.Mock() - mock_auth = MOCK_AUTH - - # Call the endpointt and expect HTTPException - with pytest.raises(HTTPException) as exc_info: - await tools.tools_endpoint_handler.__wrapped__(mock_request, mock_auth, {}) # type: ignore - - assert exc_info.value.status_code == 503 - - detail = exc_info.value.detail - assert isinstance(detail, dict) - assert detail["response"] == "Unable to connect to Llama Stack" # type: ignore - - -@pytest.mark.asyncio -async def test_tools_endpoint_general_exception( - mocker: MockerFixture, - mock_configuration: Configuration, # pylint: disable=redefined-outer-name -) -> None: - """Test tools endpoint with general exception.""" - # Mock configuration - wrap in AppConfig - app_config = AppConfig() - app_config._configuration = mock_configuration - mocker.patch("app.endpoints.tools.configuration", app_config) - - # Mock authorization decorator to bypass i - mocker.patch("app.endpoints.tools.authorize", lambda _: lambda func: func) - - # Mock client holder to raise exception - mock_client_holder = mocker.patch("app.endpoints.tools.AsyncLlamaStackClientHolder") - mock_client_holder.return_value.get_client.side_effect = Exception( - "Unexpected error" - ) - - # Mock request and auth - mock_request = mocker.Mock() - mock_auth = MOCK_AUTH - - # Call the endpointt and expect the exception to propagate (not caught) - with pytest.raises(Exception, match="Unexpected error"): - await tools.tools_endpoint_handler.__wrapped__(mock_request, mock_auth, {}) # type: ignore - - -@pytest.mark.asyncio -async def test_tools_endpoint_authentication_error_with_mcp_endpoint( - mocker: MockerFixture, - mock_configuration: Configuration, # pylint: disable=redefined-outer-name -) -> None: - """Test tools endpoint raises 401 with WWW-Authenticate when check_mcp_auth requires OAuth.""" - app_config = AppConfig() - app_config._configuration = mock_configuration - mocker.patch("app.endpoints.tools.configuration", app_config) - mocker.patch("app.endpoints.tools.authorize", lambda _: lambda func: func) - - mocker.patch("app.endpoints.tools.AsyncLlamaStackClientHolder") - - expected_headers = {"WWW-Authenticate": 'Bearer error="invalid_token"'} - probe_exception = HTTPException( - status_code=401, - detail={"cause": "MCP server at http://localhost:3000 requires OAuth"}, - headers=expected_headers, - ) - mocker.patch( - "app.endpoints.tools.check_mcp_auth", - new_callable=mocker.AsyncMock, - side_effect=probe_exception, - ) - - mock_request = mocker.Mock() - mock_auth = MOCK_AUTH - - with pytest.raises(HTTPException) as exc_info: - await tools.tools_endpoint_handler.__wrapped__( # pyright: ignore - mock_request, mock_auth, {} - ) - - assert exc_info.value.status_code == 401 - assert exc_info.value.headers is not None - assert ( - exc_info.value.headers.get("WWW-Authenticate") == 'Bearer error="invalid_token"' - ) + assert response.tools[0]["identifier"] == "git_status" class TestInputSchemaToParameters: - """Tests for _input_schema_to_parameters conversion.""" + """Test suite for _input_schema_to_parameters function.""" def test_none_schema(self) -> None: - """Test that None schema returns empty list.""" - assert _input_schema_to_parameters(None) == [] + """Test conversion with None input schema.""" + assert _input_schema_to_parameters(None) is None def test_empty_schema(self) -> None: - """Test that empty dict returns empty list.""" - assert _input_schema_to_parameters({}) == [] + """Test conversion with empty schema.""" + result = _input_schema_to_parameters({}) + assert result == {"type": "object", "properties": {}} def test_schema_without_properties(self) -> None: - """Test that schema without properties returns empty list.""" - assert _input_schema_to_parameters({"type": "object"}) == [] + """Test conversion with schema without properties.""" + schema = {"type": "object"} + result = _input_schema_to_parameters(schema) + assert result == {"type": "object", "properties": {}} def test_single_required_param(self) -> None: - """Test conversion of a single required parameter.""" + """Test conversion with single required parameter.""" schema = { "type": "object", - "properties": { - "query": { - "type": "string", - "description": "The search query", - } - }, - "required": ["query"], + "properties": {"path": {"type": "string", "description": "File path"}}, + "required": ["path"], } result = _input_schema_to_parameters(schema) - assert len(result) == 1 - assert result[0]["name"] == "query" - assert result[0]["description"] == "The search query" - assert result[0]["parameter_type"] == "string" - assert result[0]["required"] is True - assert result[0]["default"] is None + assert result == { + "type": "object", + "properties": {"path": {"type": "string", "description": "File path"}}, + "required": ["path"], + } def test_optional_param_with_default(self) -> None: - """Test conversion of an optional parameter with a default value.""" + """Test conversion with optional parameter.""" schema = { "type": "object", "properties": { - "limit": { - "type": "integer", - "description": "Max results", - "default": 10, - } + "timeout": {"type": "number", "description": "Timeout", "default": 30} }, - "required": [], } result = _input_schema_to_parameters(schema) - assert len(result) == 1 - assert result[0]["name"] == "limit" - assert result[0]["parameter_type"] == "integer" - assert result[0]["required"] is False - assert result[0]["default"] == 10 + assert result == { + "type": "object", + "properties": { + "timeout": {"type": "number", "description": "Timeout", "default": 30} + }, + } def test_multiple_params_mixed_required(self) -> None: - """Test conversion with a mix of required and optional parameters.""" + """Test conversion with multiple parameters, some required.""" schema = { "type": "object", "properties": { - "query": {"type": "string", "description": "Search query"}, - "limit": {"type": "integer", "description": "Max results"}, + "path": {"type": "string"}, + "mode": {"type": "string", "default": "read"}, }, - "required": ["query"], + "required": ["path"], } result = _input_schema_to_parameters(schema) - assert len(result) == 2 - by_name = {p["name"]: p for p in result} - assert by_name["query"]["required"] is True - assert by_name["limit"]["required"] is False - - -@pytest.mark.asyncio -async def test_tools_endpoint_rag_builtin_toolgroup(mocker: MockerFixture) -> None: - """Test that builtin::rag tools have correct fields (LCORE-1211 regression). - - Reproduces the exact scenario from LCORE-1211: Llama Stack returns RAG - tools via the builtin::rag toolgroup using the ToolDef format. - Previously, identifier, provider_id, parameters, and type were all - returned as empty strings/lists. - """ - mock_config = Configuration( - name="test", - service=ServiceConfiguration( - tls_config=TLSConfiguration( - tls_certificate_path=Path("tests/configuration/server.crt"), - tls_key_path=Path("tests/configuration/server.key"), - tls_key_password=Path("tests/configuration/password"), - ), - cors=CORSConfiguration( - allow_origins=["*"], - allow_credentials=False, - allow_methods=["*"], - allow_headers=["*"], - ), - host="localhost", - port=8080, - base_url=".", - auth_enabled=False, - workers=1, - color_log=True, - access_log=True, - root_path="/.", - ), - llama_stack=LlamaStackConfiguration( - url=AnyHttpUrl("http://localhost:8321"), - api_key=SecretStr("xyzzy"), - use_as_library_client=False, - library_client_config_path=".", - timeout=10, - ), - user_data_collection=UserDataCollection( - transcripts_enabled=False, - feedback_enabled=False, - transcripts_storage=".", - feedback_storage=".", - ), - mcp_servers=[], - customization=None, - authorization=None, - deployment_environment=".", - ) - app_config = AppConfig() - app_config._configuration = mock_config - mocker.patch("app.endpoints.tools.configuration", app_config) - mocker.patch("app.endpoints.tools.authorize", lambda _: lambda func: func) - - mock_client_holder = mocker.patch("app.endpoints.tools.AsyncLlamaStackClientHolder") - mock_client = mocker.AsyncMock() - mock_client_holder.return_value.get_client.return_value = mock_client - - # Toolgroup matching the real Llama Stack builtin::rag - mock_toolgroup = mocker.Mock() - mock_toolgroup.identifier = "builtin::rag" - mock_toolgroup.provider_id = "rag-runtime" - mock_toolgroup.type = "tool_group" - mock_client.toolgroups.list.return_value = [mock_toolgroup] - - # Tools matching real Llama Stack ToolDef output - rag_tool = _make_tool_def_mock( - mocker, - { - "name": "knowledge_search", - "description": "Search for information in a database.", - "input_schema": { - "type": "object", - "properties": { - "query": { - "type": "string", - "description": "The query to search for.", - } - }, - "required": ["query"], - }, - "toolgroup_id": "builtin::rag", - "metadata": None, - "output_schema": None, - }, - ) - mock_client.tools.list.return_value = [rag_tool] - - mock_request = mocker.Mock() - mock_auth = MOCK_AUTH - - response = await tools.tools_endpoint_handler.__wrapped__( # pyright: ignore - mock_request, mock_auth, {} - ) - - assert isinstance(response, ToolsResponse) - assert len(response.tools) == 1 - - tool = response.tools[0] - assert tool["identifier"] == "knowledge_search" - assert tool["provider_id"] == "rag-runtime" - assert tool["type"] == "tool_group" - assert tool["server_source"] == "builtin" - assert tool["toolgroup_id"] == "builtin::rag" - - # Parameters converted from input_schema - assert len(tool["parameters"]) == 1 - assert tool["parameters"][0]["name"] == "query" - assert tool["parameters"][0]["parameter_type"] == "string" - assert tool["parameters"][0]["required"] is True - - -@pytest.mark.asyncio -async def test_tools_endpoint_empty_legacy_fields_overridden( - mocker: MockerFixture, -) -> None: - """Test that empty legacy fields are overridden by ToolDef fields. - - Regression variant: when a tool dict contains both new fields (name, - input_schema) AND empty legacy fields (identifier="", parameters=[], - provider_id="", type=""), the endpoint must populate from the new sources. - """ - mock_config = Configuration( - name="test", - service=ServiceConfiguration( - tls_config=TLSConfiguration( - tls_certificate_path=Path("tests/configuration/server.crt"), - tls_key_path=Path("tests/configuration/server.key"), - tls_key_password=Path("tests/configuration/password"), - ), - cors=CORSConfiguration( - allow_origins=["*"], - allow_credentials=False, - allow_methods=["*"], - allow_headers=["*"], - ), - host="localhost", - port=8080, - base_url=".", - auth_enabled=False, - workers=1, - color_log=True, - access_log=True, - root_path="/.", - ), - llama_stack=LlamaStackConfiguration( - url=AnyHttpUrl("http://localhost:8321"), - api_key=SecretStr("xyzzy"), - use_as_library_client=False, - library_client_config_path=".", - timeout=10, - ), - user_data_collection=UserDataCollection( - transcripts_enabled=False, - feedback_enabled=False, - transcripts_storage=".", - feedback_storage=".", - ), - mcp_servers=[], - customization=None, - authorization=None, - deployment_environment=".", - ) - app_config = AppConfig() - app_config._configuration = mock_config - mocker.patch("app.endpoints.tools.configuration", app_config) - mocker.patch("app.endpoints.tools.authorize", lambda _: lambda func: func) - - mock_client_holder = mocker.patch("app.endpoints.tools.AsyncLlamaStackClientHolder") - mock_client = mocker.AsyncMock() - mock_client_holder.return_value.get_client.return_value = mock_client - - mock_toolgroup = mocker.Mock() - mock_toolgroup.identifier = "builtin::rag" - mock_toolgroup.provider_id = "rag-runtime" - mock_toolgroup.type = "tool_group" - mock_client.toolgroups.list.return_value = [mock_toolgroup] - - # Tool with both new fields AND empty legacy fields - rag_tool = _make_tool_def_mock( - mocker, - { - "name": "knowledge_search", - "identifier": "", - "description": "Search for information in a database.", - "input_schema": { - "type": "object", - "properties": { - "query": { - "type": "string", - "description": "The query to search for.", - } - }, - "required": ["query"], + assert result == { + "type": "object", + "properties": { + "path": {"type": "string"}, + "mode": {"type": "string", "default": "read"}, }, - "parameters": [], - "provider_id": "", - "type": "", - "toolgroup_id": "builtin::rag", - "metadata": None, - "output_schema": None, - }, - ) - mock_client.tools.list.return_value = [rag_tool] - - mock_request = mocker.Mock() - mock_auth = MOCK_AUTH - - response = await tools.tools_endpoint_handler.__wrapped__( # pyright: ignore - mock_request, mock_auth, {} - ) - - assert isinstance(response, ToolsResponse) - assert len(response.tools) == 1 - - tool = response.tools[0] - # Empty legacy fields must be overridden by new sources - assert tool["identifier"] == "knowledge_search" - assert tool["provider_id"] == "rag-runtime" - assert tool["type"] == "tool_group" - assert tool["server_source"] == "builtin" - assert tool["toolgroup_id"] == "builtin::rag" - - # Parameters populated from input_schema, not empty legacy list - assert len(tool["parameters"]) == 1 - assert tool["parameters"][0]["name"] == "query" - assert tool["parameters"][0]["parameter_type"] == "string" - assert tool["parameters"][0]["required"] is True + "required": ["path"], + } diff --git a/tests/unit/utils/test_common.py b/tests/unit/utils/test_common.py deleted file mode 100644 index f902b541f..000000000 --- a/tests/unit/utils/test_common.py +++ /dev/null @@ -1,414 +0,0 @@ -"""Test module for utils/common.py.""" - -from logging import Logger - -import pytest -from pydantic import AnyHttpUrl -from pytest_mock import MockerFixture - -from models.config import ( - Configuration, - LlamaStackConfiguration, - ModelContextProtocolServer, - ServiceConfiguration, - UserDataCollection, -) -from utils.common import ( - register_mcp_servers_async, -) - - -@pytest.mark.asyncio -async def test_register_mcp_servers_empty_list(mocker: MockerFixture) -> None: - """Test register_mcp_servers with empty MCP servers list.""" - mock_logger = mocker.Mock(spec=Logger) - - # Mock the LlamaStack client (shouldn't be called since no MCP servers) - mock_lsc = mocker.patch("client.AsyncLlamaStackClientHolder.get_client") - - # Create configuration with empty MCP servers - config = Configuration( - name="test", - service=ServiceConfiguration( - host="localhost", - port=1234, - base_url=None, - auth_enabled=True, - workers=10, - color_log=True, - access_log=True, - root_path="/.", - ), - llama_stack=LlamaStackConfiguration( - use_as_library_client=False, - url=AnyHttpUrl("http://localhost:8321"), - library_client_config_path=None, - api_key=None, - timeout=60, - ), - user_data_collection=UserDataCollection( - feedback_enabled=False, - feedback_storage=None, - transcripts_enabled=False, - transcripts_storage=None, - ), - mcp_servers=[], - customization=None, - ) # pyright: ignore[reportCallIssue] - # Call the function - await register_mcp_servers_async(mock_logger, config) - - # Verify get_llama_stack_client was NOT called since no MCP servers - mock_lsc.assert_not_called() - # Verify debug message was logged - mock_logger.debug.assert_called_with( - "No MCP servers configured, skipping registration" - ) - - -@pytest.mark.asyncio -async def test_register_mcp_servers_single_server_not_registered( - mocker: MockerFixture, -) -> None: - """Test register_mcp_servers with single MCP server that is not yet registered.""" - # Mock the logger - mock_logger = mocker.Mock(spec=Logger) - - # Mock the LlamaStack client - mock_client = mocker.AsyncMock() - mock_lsc = mocker.patch("client.AsyncLlamaStackClientHolder.get_client") - mock_lsc.return_value = mock_client - mock_tool = mocker.Mock() - mock_tool.provider_resource_id = "existing-server" - mock_client.toolgroups.list.return_value = [mock_tool] - mock_client.toolgroups.register.return_value = None - - # Create configuration with one MCP server - mcp_server = ModelContextProtocolServer( - name="new-server", - url="http://localhost:8080", - provider_id="model-context-protocol", - ) - config = Configuration( - name="test", - service=ServiceConfiguration( - host="localhost", - port=1234, - base_url=None, - auth_enabled=True, - workers=10, - color_log=True, - access_log=True, - root_path="/.", - ), - llama_stack=LlamaStackConfiguration( - use_as_library_client=False, - url=AnyHttpUrl("http://localhost:8321"), - library_client_config_path=None, - api_key=None, - timeout=60, - ), - user_data_collection=UserDataCollection( - feedback_enabled=False, - feedback_storage=None, - transcripts_enabled=False, - transcripts_storage=None, - ), - mcp_servers=[mcp_server], - customization=None, - ) # pyright: ignore[reportCallIssue] - - # Call the function - await register_mcp_servers_async(mock_logger, config) - - # Verify client.toolgroups.list was called - mock_client.toolgroups.list.assert_called_once() - # Verify client.toolgroups.register was called with correct parameters - mock_client.toolgroups.register.assert_called_once_with( - toolgroup_id="new-server", - provider_id="model-context-protocol", - mcp_endpoint={"uri": "http://localhost:8080"}, - ) - # Verify debug logging was called - mock_logger.debug.assert_called() - - -@pytest.mark.asyncio -async def test_register_mcp_servers_single_server_already_registered( - mocker: MockerFixture, -) -> None: - """Test register_mcp_servers with single MCP server that is already registered.""" - # Mock the logger - mock_logger = mocker.Mock(spec=Logger) - - # Mock the LlamaStack client - mock_client = mocker.AsyncMock() - mock_tool = mocker.Mock() - mock_tool.provider_resource_id = "existing-server" - mock_client.toolgroups.list.return_value = [mock_tool] - mock_lsc = mocker.patch("client.AsyncLlamaStackClientHolder.get_client") - mock_lsc.return_value = mock_client - - # Create configuration with MCP server that matches existing toolgroup - mcp_server = ModelContextProtocolServer( - name="existing-server", url="http://localhost:8080", provider_id="qwe" - ) - config = Configuration( - name="test", - service=ServiceConfiguration( - host="localhost", - port=1234, - base_url=None, - auth_enabled=True, - workers=10, - color_log=True, - access_log=True, - root_path="/.", - ), - llama_stack=LlamaStackConfiguration( - use_as_library_client=False, - url=AnyHttpUrl("http://localhost:8321"), - library_client_config_path=None, - api_key=None, - timeout=60, - ), - user_data_collection=UserDataCollection( - feedback_enabled=False, - feedback_storage=None, - transcripts_enabled=False, - transcripts_storage=None, - ), - mcp_servers=[mcp_server], - customization=None, - ) # pyright: ignore[reportCallIssue] - - # Call the function - await register_mcp_servers_async(mock_logger, config) - - # Verify client.tools.list was called - mock_client.toolgroups.list.assert_called_once() - # Verify client.toolgroups.register was NOT called since server already registered - assert not mock_client.toolgroups.register.called - - -@pytest.mark.asyncio -async def test_register_mcp_servers_multiple_servers_mixed_registration( - mocker: MockerFixture, -) -> None: - """Test register_mcp_servers with multiple MCP servers - some registered, some not.""" - # Mock the logger - mock_logger = mocker.Mock(spec=Logger) - - # Mock the LlamaStack client - mock_client = mocker.AsyncMock() - mock_lsc = mocker.patch("client.AsyncLlamaStackClientHolder.get_client") - mock_lsc.return_value = mock_client - mock_tool1 = mocker.Mock() - mock_tool1.provider_resource_id = "existing-server" - mock_tool2 = mocker.Mock() - mock_tool2.provider_resource_id = "another-existing" - mock_client.toolgroups.list.return_value = [mock_tool1, mock_tool2] - mock_client.toolgroups.register.return_value = None - - # Create configuration with multiple MCP servers - mcp_servers = [ - ModelContextProtocolServer( - name="existing-server", - url="http://localhost:8080", - ), # pyright: ignore[reportCallIssue] - ModelContextProtocolServer( - name="new-server", - url="http://localhost:8081", - ), # pyright: ignore[reportCallIssue] - ModelContextProtocolServer( - name="another-new-server", - provider_id="custom-provider", - url="https://api.example.com", - ), - ] - config = Configuration( - name="test", - service=ServiceConfiguration( - host="localhost", - port=1234, - base_url=None, - auth_enabled=True, - workers=10, - color_log=True, - access_log=True, - root_path="/.", - ), - llama_stack=LlamaStackConfiguration( - use_as_library_client=False, - url=AnyHttpUrl("http://localhost:8321"), - library_client_config_path=None, - api_key=None, - timeout=60, - ), - user_data_collection=UserDataCollection( - feedback_enabled=False, - feedback_storage=None, - transcripts_enabled=False, - transcripts_storage=None, - ), - mcp_servers=mcp_servers, - customization=None, - ) # pyright: ignore[reportCallIssue] - - # Call the function - await register_mcp_servers_async(mock_logger, config) - - # Verify client.tools.list was called - mock_client.toolgroups.list.assert_called_once() - # Verify client.toolgroups.register was called twice (for the two new servers) - assert mock_client.toolgroups.register.call_count == 2 - - # Check the specific calls - expected_calls = [ - mocker.call( - toolgroup_id="new-server", - provider_id="model-context-protocol", - mcp_endpoint={"uri": "http://localhost:8081"}, - ), - mocker.call( - toolgroup_id="another-new-server", - provider_id="custom-provider", - mcp_endpoint={"uri": "https://api.example.com"}, - ), - ] - mock_client.toolgroups.register.assert_has_calls(expected_calls, any_order=True) - - -@pytest.mark.asyncio -async def test_register_mcp_servers_with_custom_provider(mocker: MockerFixture) -> None: - """Test register_mcp_servers with MCP server using custom provider.""" - # Mock the logger - mock_logger = mocker.Mock(spec=Logger) - - # Mock the LlamaStack client - mock_client = mocker.AsyncMock() - mock_client.toolgroups.list.return_value = [] - mock_client.toolgroups.register.return_value = None - mock_lsc = mocker.patch("client.AsyncLlamaStackClientHolder.get_client") - mock_lsc.return_value = mock_client - - # Create configuration with MCP server using custom provider - mcp_server = ModelContextProtocolServer( - name="custom-server", - provider_id="my-custom-provider", - url="https://custom.example.com/mcp", - ) - config = Configuration( - name="test", - service=ServiceConfiguration( - host="localhost", - port=1234, - base_url=None, - auth_enabled=True, - workers=10, - color_log=True, - access_log=True, - root_path="/.", - ), - llama_stack=LlamaStackConfiguration( - use_as_library_client=False, - url=AnyHttpUrl("http://localhost:8321"), - library_client_config_path=None, - api_key=None, - timeout=60, - ), - user_data_collection=UserDataCollection( - feedback_enabled=False, - feedback_storage=None, - transcripts_enabled=False, - transcripts_storage=None, - ), - mcp_servers=[mcp_server], - customization=None, - ) # pyright: ignore[reportCallIssue] - - # Call the function - await register_mcp_servers_async(mock_logger, config) - - # Verify client.toolgroups.register was called with custom provider - mock_client.toolgroups.register.assert_called_once_with( - toolgroup_id="custom-server", - provider_id="my-custom-provider", - mcp_endpoint={"uri": "https://custom.example.com/mcp"}, - ) - - -@pytest.mark.asyncio -async def test_register_mcp_servers_async_with_library_client( - mocker: MockerFixture, -) -> None: - """ - Test that `register_mcp_servers_async` correctly registers MCP - servers when using the library client configuration. - - This test verifies that the function initializes the async - client, checks for existing toolgroups, and registers new MCP - servers as needed when the configuration specifies the use of a - library client. - """ - # Mock the logger - mock_logger = mocker.Mock(spec=Logger) - - # Mock the LlamaStackAsLibraryClient - mock_async_client = mocker.AsyncMock() - mock_async_client.initialize = mocker.AsyncMock() - mock_lsc = mocker.patch("client.AsyncLlamaStackClientHolder.get_client") - mock_lsc.return_value = mock_async_client - - # Mock tools.list to return empty list - mock_tool = mocker.Mock() - mock_tool.provider_resource_id = "existing-tool" - mock_async_client.toolgroups.list = mocker.AsyncMock(return_value=[mock_tool]) - mock_async_client.toolgroups.register = mocker.AsyncMock() - - # Create configuration with library client enabled - mcp_server = ModelContextProtocolServer( - name="test-server", url="http://localhost:8080" - ) # pyright: ignore[reportCallIssue] - config = Configuration( - name="test", - service=ServiceConfiguration( - host="localhost", - port=1234, - base_url=None, - auth_enabled=True, - workers=10, - color_log=True, - access_log=True, - root_path="/.", - ), - llama_stack=LlamaStackConfiguration( - use_as_library_client=True, - library_client_config_path="tests/configuration/run.yaml", - url=None, - api_key=None, - timeout=60, - ), - user_data_collection=UserDataCollection( - feedback_enabled=False, - feedback_storage=None, - transcripts_enabled=False, - transcripts_storage=None, - ), - mcp_servers=[mcp_server], - customization=None, - ) # pyright: ignore[reportCallIssue] - - # Call the async function - await register_mcp_servers_async(mock_logger, config) - - # Verify initialization was called - mock_async_client.initialize.assert_called_once() - # Verify tools.list was called - mock_async_client.toolgroups.list.assert_called_once() - # Verify toolgroups.register was called for the new server - mock_async_client.toolgroups.register.assert_called_once_with( - toolgroup_id="test-server", - provider_id="model-context-protocol", - mcp_endpoint={"uri": "http://localhost:8080"}, - ) diff --git a/uv.lock b/uv.lock index 7c090d162..0f1b75960 100644 --- a/uv.lock +++ b/uv.lock @@ -1883,9 +1883,9 @@ requires-dist = [ { name = "jsonpath-ng", specifier = ">=1.6.1" }, { name = "kubernetes", specifier = ">=30.1.0" }, { name = "litellm", specifier = ">=1.83.7" }, - { name = "llama-stack", specifier = "==0.6.0" }, - { name = "llama-stack-api", specifier = "==0.6.0" }, - { name = "llama-stack-client", specifier = "==0.6.0" }, + { name = "llama-stack", specifier = "==0.7.1" }, + { name = "llama-stack-api", specifier = "==0.7.1" }, + { name = "llama-stack-client", specifier = "==0.7.1" }, { name = "openai", specifier = ">=1.99.9" }, { name = "prometheus-client", specifier = ">=0.22.1" }, { name = "psycopg2-binary", specifier = ">=2.9.10" }, @@ -1998,7 +1998,7 @@ wheels = [ [[package]] name = "llama-stack" -version = "0.6.0" +version = "0.7.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "aiohttp" }, @@ -2029,20 +2029,21 @@ dependencies = [ { name = "rich" }, { name = "sqlalchemy", extra = ["asyncio"] }, { name = "starlette" }, + { name = "structlog" }, { name = "termcolor" }, { name = "tiktoken" }, { name = "tornado" }, { name = "urllib3" }, { name = "uvicorn" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/f4/53/5bc3ae19e9a42475b42682456898ced5a0b48e43f918920fc790b665f223/llama_stack-0.6.0.tar.gz", hash = "sha256:d92711791633f5505a4473ffba3f3e26acb700716fddab5aec419d99e614c802", size = 13631563, upload-time = "2026-03-11T15:06:13.071Z" } +sdist = { url = "https://files.pythonhosted.org/packages/84/9b/a8577f0761b02be4d45d625cf5870ab64859dbbe219088d6c8a39e9cb79d/llama_stack-0.7.1.tar.gz", hash = "sha256:d88dc8430abe1d26f3908ab506f0f6ccd4f3c16ba06ee46ac662f4c896c52da8", size = 15857581, upload-time = "2026-04-08T14:21:12.036Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/9d/17/b4427e1db7409f698c95b6f8b2b9e662bbcf1f819beb1af180bab55ddfb5/llama_stack-0.6.0-py3-none-any.whl", hash = "sha256:b804830664dc91e54c7225a7a081cb1874c48fc18573569c19fac4a9397e8076", size = 770027, upload-time = "2026-03-11T15:06:10.649Z" }, + { url = "https://files.pythonhosted.org/packages/be/41/f57aedebba533bf5e8b7c5f3f2ee1edb88409e1aa5c83fa7ddc5f85b3c48/llama_stack-0.7.1-py3-none-any.whl", hash = "sha256:65b9c827989011af3879ad051db9134163f8e6b3bc3685340328f21f5d07cf5f", size = 782710, upload-time = "2026-04-08T14:21:10.031Z" }, ] [[package]] name = "llama-stack-api" -version = "0.6.0" +version = "0.7.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "fastapi" }, @@ -2052,14 +2053,14 @@ dependencies = [ { name = "opentelemetry-sdk" }, { name = "pydantic" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/f3/4f/0c6fbc861fb9f6074f877f9c39ea40b02ad1fc81c9a455b020b32dcc471f/llama_stack_api-0.6.0.tar.gz", hash = "sha256:f0f3a1a6239a5d3b8c7ef02cefdf817c96c6461dcd8a82c1689ac67ec3107270", size = 136402, upload-time = "2026-03-11T15:05:30.843Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f3/d0/a320b11eec0db00c05ad22525f5ef8825b512215d7d138964caddb50dea2/llama_stack_api-0.7.1.tar.gz", hash = "sha256:441b0e1c29f7acc0a1d9b697d276f2c352387b719b67926af9983caec95f107e", size = 135479, upload-time = "2026-04-08T14:20:31.64Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/4d/44/3c7a8dc82ddcc45a375681051450979837f28b27250ee057cabcfb8421f3/llama_stack_api-0.6.0-py3-none-any.whl", hash = "sha256:b99a03aba3659736b6b540c9e5e674b1daac2bf5eeb2a68795113d62b8250672", size = 161069, upload-time = "2026-03-11T15:05:29.072Z" }, + { url = "https://files.pythonhosted.org/packages/e7/0b/0ca3d5cc63bdd51327a051907e97916232dfa786d7758cec989277dbec19/llama_stack_api-0.7.1-py3-none-any.whl", hash = "sha256:13467639f83ffc87b950513afd2270e6ce0403852442d6214f3f08c087a2d5d5", size = 159662, upload-time = "2026-04-08T14:20:30.351Z" }, ] [[package]] name = "llama-stack-client" -version = "0.6.0" +version = "0.7.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "anyio" }, @@ -2078,9 +2079,9 @@ dependencies = [ { name = "tqdm" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/b7/e9/62dc71e7d6003d9b56a1e632445065f55687c891e62eff1636e10b5dd629/llama_stack_client-0.6.0.tar.gz", hash = "sha256:3290aac36dcafbd1bc0baaf995522e2037f57056672b5a1516af112a4210f3ea", size = 368695, upload-time = "2026-03-11T15:04:19.267Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f3/c5/b1d631b8fe032120b10a9adc88413c8d9fe400e5a8acc3131401647c016e/llama_stack_client-0.7.1.tar.gz", hash = "sha256:90d8a90519cb3ef644bce4566c6a752184fd69b960c579b41886d70fe47cb44f", size = 374261, upload-time = "2026-04-02T13:39:22.238Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/83/a3/33d3e066a320a993b6f9cca9c8efe8da7deb2045df61235d327d0a05b25f/llama_stack_client-0.6.0-py3-none-any.whl", hash = "sha256:7e514a6ffd92f237aceb062dadc4db44e24a3cd9c4ea35e25173d1e0739beb8e", size = 392001, upload-time = "2026-03-11T15:04:17.772Z" }, + { url = "https://files.pythonhosted.org/packages/a4/fe/e2f17a3d6775f25e668746fd7105dd3e8b30b9e78570f76cde92417f0b57/llama_stack_client-0.7.1-py3-none-any.whl", hash = "sha256:5cd104779cb96ec1f8c66a8c0f581b096fcb384188ed891c72be31fb75022daa", size = 378796, upload-time = "2026-04-02T13:39:20.324Z" }, ] [[package]] @@ -4164,6 +4165,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/f5/ac/19f9941c74add59d17694930ec8105d5eddeee4ce56dd8632b765ca16d6c/stevedore-5.8.0-py3-none-any.whl", hash = "sha256:88eede9e66ca80e34085b9174e2327da2c61ac91f24f70e41c3ad76e4bb4872b", size = 54553, upload-time = "2026-05-18T09:15:25.82Z" }, ] +[[package]] +name = "structlog" +version = "26.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5e/89/b4a0bcfdf4f71a3dea31379f095929613d7e4528a0996bca6aa964cd0dca/structlog-26.1.0.tar.gz", hash = "sha256:f63a716cbd1b1291cf7661de7794b455acfa4c43c5bcf1630e6ad5ddc1adb3b7", size = 1459881, upload-time = "2026-06-06T07:33:39.348Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a9/18/489c97b834dfff9cf2fc2507cede4bcd4b11e67f84bc462acd1992496f86/structlog-26.1.0-py3-none-any.whl", hash = "sha256:e081a26d6c373e6d201eca24eede26d8ffab07f88f477822e679183428d3d91e", size = 73764, upload-time = "2026-06-06T07:33:38.046Z" }, +] + [[package]] name = "sympy" version = "1.14.0"