diff --git a/.github/wheel-constraints/nemo-platform-services.txt b/.github/wheel-constraints/nemo-platform-services.txt index 416c0f0dd7..6782e0ab24 100644 --- a/.github/wheel-constraints/nemo-platform-services.txt +++ b/.github/wheel-constraints/nemo-platform-services.txt @@ -42,10 +42,10 @@ langchain-openai==1.5.0 lark==1.3.1 matplotlib==3.11.1 nemo-anonymizer==0.3.3 -nemo-fabric==0.1.1 -nemo-fabric-adapters-hermes==0.1.1 +nemo-fabric==0.2.0 +nemo-fabric-adapters-hermes==0.2.0 nemoguardrails==0.23.0 -nemo-relay==0.6.0 +nemo-relay==0.7.2 nemo-safe-synthesizer==0.1.7 ngcsdk==4.34.10 numpy==2.5.2 diff --git a/agents/nemo-studio-assistant/Dockerfile.fabric-local b/agents/nemo-studio-assistant/Dockerfile.fabric-local index 236d175ebc..3125602040 100644 --- a/agents/nemo-studio-assistant/Dockerfile.fabric-local +++ b/agents/nemo-studio-assistant/Dockerfile.fabric-local @@ -26,7 +26,7 @@ RUN apt-get update && \ # pinned release binary before placing it on the global runtime PATH. RUN curl -fsSL https://raw.githubusercontent.com/NVIDIA/NeMo-Relay/40c5990361afc26ae8b901ff1f49c2b03ddd9ede/install.sh -o /tmp/install-nemo-relay.sh && \ echo "ba2585a32e568643819992fa66b750004328351fce422b979d8c11cfc8bbfadb /tmp/install-nemo-relay.sh" | sha256sum -c - && \ - NEMO_RELAY_VERSION=0.6.0 sh /tmp/install-nemo-relay.sh --install-dir /usr/local/bin && \ + NEMO_RELAY_VERSION=0.7.3 sh /tmp/install-nemo-relay.sh --install-dir /usr/local/bin && \ rm /tmp/install-nemo-relay.sh && \ nemo-relay --version @@ -51,7 +51,7 @@ RUN --mount=type=cache,id=uv_cache,target=/root/.cache/uv,sharing=locked \ . /workspace/.venv/bin/activate && \ uv pip install --no-sources --constraint /workspace/constraints.fabric-local.txt \ "/workspace/wheelhouse/nemo_platform-0.3.0.post277.dev0+095b19918-py3-none-any.whl[nemo-agents-plugin]" \ - "nemo-fabric==0.1.1" . && \ + "nemo-fabric==0.2.0" . && \ chmod -R a+rX /opt/uv /workspace/.venv diff --git a/agents/nemo-studio-assistant/constraints.fabric-local.txt b/agents/nemo-studio-assistant/constraints.fabric-local.txt index 29e10796d4..16efd22c49 100644 --- a/agents/nemo-studio-assistant/constraints.fabric-local.txt +++ b/agents/nemo-studio-assistant/constraints.fabric-local.txt @@ -1,2 +1,2 @@ # Keep the Fabric runtime aligned with the packaged agent contract. -nemo-fabric==0.1.1 +nemo-fabric==0.2.0 diff --git a/agents/nemo-studio-assistant/uv.lock b/agents/nemo-studio-assistant/uv.lock index 39b2acfc50..097ccae04f 100644 --- a/agents/nemo-studio-assistant/uv.lock +++ b/agents/nemo-studio-assistant/uv.lock @@ -248,19 +248,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/71/cc/18245721fa7747065ab478316c7fea7c74777d07f37ae60db2e84f8172e8/beartype-0.22.9-py3-none-any.whl", hash = "sha256:d16c9bbc61ea14637596c5f6fbff2ee99cbe3573e46a716401734ef50c3060c2", size = 1333658, upload-time = "2025-12-13T06:50:28.266Z" }, ] -[[package]] -name = "beautifulsoup4" -version = "4.15.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "soupsieve" }, - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/43/65/318323f98dbee45d42dff61d8f047181bc6f2268a9068cfad035a46be5af/beautifulsoup4-4.15.0.tar.gz", hash = "sha256:288e3ca7d54b06f2ac191970bc275c1939cb46d450b255bf6718b04aa37ab4f7", size = 632571, upload-time = "2026-06-07T16:44:20.453Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/88/c6/92fcd42f1ba33e1184263f25bfabf3d27c383410470f169e4b8163bf9c17/beautifulsoup4-4.15.0-py3-none-any.whl", hash = "sha256:d6f88de62e1d4e38ecb1077eb9724cd0eff29d2a08ca16a401e9b9e93f117cf9", size = 109924, upload-time = "2026-06-07T16:44:21.566Z" }, -] - [[package]] name = "boto3" version = "1.40.61" @@ -408,15 +395,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/98/2b/f97f1c193fb855c345d678f5077d6926034db0722df74c8f057020e05a25/charset_normalizer-3.4.9-py3-none-any.whl", hash = "sha256:68e5f26a1ad57ded6d1cfb85331d1c1a195314756471d97758c48498bb4dcdf5", size = 64538, upload-time = "2026-07-07T14:34:56.993Z" }, ] -[[package]] -name = "circuitbreaker" -version = "2.1.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/df/ac/de7a92c4ed39cba31fe5ad9203b76a25ca67c530797f6bb420fff5f65ccb/circuitbreaker-2.1.3.tar.gz", hash = "sha256:1a4baee510f7bea3c91b194dcce7c07805fe96c4423ed5594b75af438531d084", size = 10787, upload-time = "2025-03-31T08:12:08.963Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ae/34/15f08edd4628f65217de1fc3c1a27c82e46fe357d60c217fc9881e12ebcc/circuitbreaker-2.1.3-py3-none-any.whl", hash = "sha256:87ba6a3ed03fdc7032bc175561c2b04d52ade9d5faf94ca2b035fbdc5e6b1dd1", size = 7737, upload-time = "2025-03-31T08:12:07.802Z" }, -] - [[package]] name = "claude-agent-sdk" version = "0.2.120" @@ -512,78 +490,43 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/80/99/2adc7d8ffead633234817ef8e9a87115c8a11927a94478f6bb3d3f4d4f7d/contourpy-1.3.3-cp313-cp313t-win_arm64.whl", hash = "sha256:3c30273eb2a55024ff31ba7d052dde990d7d8e5450f4bbb6e913558b3d6c2301", size = 199713, upload-time = "2025-07-26T12:02:14.4Z" }, ] -[[package]] -name = "crc32c" -version = "2.8" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e3/66/7e97aa77af7cf6afbff26e3651b564fe41932599bc2d3dce0b2f73d4829a/crc32c-2.8.tar.gz", hash = "sha256:578728964e59c47c356aeeedee6220e021e124b9d3e8631d95d9a5e5f06e261c", size = 48179, upload-time = "2025-10-17T06:20:13.61Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b6/36/fd18ef23c42926b79c7003e16cb0f79043b5b179c633521343d3b499e996/crc32c-2.8-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:572ffb1b78cce3d88e8d4143e154d31044a44be42cb3f6fbbf77f1e7a941c5ab", size = 66379, upload-time = "2025-10-17T06:19:10.115Z" }, - { url = "https://files.pythonhosted.org/packages/7f/b8/c584958e53f7798dd358f5bdb1bbfc97483134f053ee399d3eeb26cca075/crc32c-2.8-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:cf827b3758ee0c4aacd21ceca0e2da83681f10295c38a10bfeb105f7d98f7a68", size = 63042, upload-time = "2025-10-17T06:19:10.946Z" }, - { url = "https://files.pythonhosted.org/packages/62/e6/6f2af0ec64a668a46c861e5bc778ea3ee42171fedfc5440f791f470fd783/crc32c-2.8-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:106fbd79013e06fa92bc3b51031694fcc1249811ed4364ef1554ee3dd2c7f5a2", size = 61528, upload-time = "2025-10-17T06:19:11.768Z" }, - { url = "https://files.pythonhosted.org/packages/17/8b/4a04bd80a024f1a23978f19ae99407783e06549e361ab56e9c08bba3c1d3/crc32c-2.8-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:6dde035f91ffbfe23163e68605ee5a4bb8ceebd71ed54bb1fb1d0526cdd125a2", size = 80028, upload-time = "2025-10-17T06:19:12.554Z" }, - { url = "https://files.pythonhosted.org/packages/21/8f/01c7afdc76ac2007d0e6a98e7300b4470b170480f8188475b597d1f4b4c6/crc32c-2.8-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e41ebe7c2f0fdcd9f3a3fd206989a36b460b4d3f24816d53e5be6c7dba72c5e1", size = 81531, upload-time = "2025-10-17T06:19:13.406Z" }, - { url = "https://files.pythonhosted.org/packages/32/2b/8f78c5a8cc66486be5f51b6f038fc347c3ba748d3ea68be17a014283c331/crc32c-2.8-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ecf66cf90266d9c15cea597d5cc86c01917cd1a238dc3c51420c7886fa750d7e", size = 80608, upload-time = "2025-10-17T06:19:14.223Z" }, - { url = "https://files.pythonhosted.org/packages/db/86/fad1a94cdeeeb6b6e2323c87f970186e74bfd6fbfbc247bf5c88ad0873d5/crc32c-2.8-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:59eee5f3a69ad0793d5fa9cdc9b9d743b0cd50edf7fccc0a3988a821fef0208c", size = 79886, upload-time = "2025-10-17T06:19:15.345Z" }, - { url = "https://files.pythonhosted.org/packages/d5/db/1a7cb6757a1e32376fa2dfce00c815ea4ee614a94f9bff8228e37420c183/crc32c-2.8-cp312-cp312-win32.whl", hash = "sha256:a73d03ce3604aa5d7a2698e9057a0eef69f529c46497b27ee1c38158e90ceb76", size = 64896, upload-time = "2025-10-17T06:19:16.457Z" }, - { url = "https://files.pythonhosted.org/packages/bf/8e/2024de34399b2e401a37dcb54b224b56c747b0dc46de4966886827b4d370/crc32c-2.8-cp312-cp312-win_amd64.whl", hash = "sha256:56b3b7d015247962cf58186e06d18c3d75a1a63d709d3233509e1c50a2d36aa2", size = 66645, upload-time = "2025-10-17T06:19:17.235Z" }, - { url = "https://files.pythonhosted.org/packages/e8/d8/3ae227890b3be40955a7144106ef4dd97d6123a82c2a5310cdab58ca49d8/crc32c-2.8-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:36f1e03ee9e9c6938e67d3bcb60e36f260170aa5f37da1185e04ef37b56af395", size = 66380, upload-time = "2025-10-17T06:19:18.009Z" }, - { url = "https://files.pythonhosted.org/packages/bd/8b/178d3f987cd0e049b484615512d3f91f3d2caeeb8ff336bb5896ae317438/crc32c-2.8-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b2f3226b94b85a8dd9b3533601d7a63e9e3e8edf03a8a169830ee8303a199aeb", size = 63048, upload-time = "2025-10-17T06:19:18.853Z" }, - { url = "https://files.pythonhosted.org/packages/f2/a1/48145ae2545ebc0169d3283ebe882da580ea4606bfb67cf4ca922ac3cfc3/crc32c-2.8-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6e08628bc72d5b6bc8e0730e8f142194b610e780a98c58cb6698e665cb885a5b", size = 61530, upload-time = "2025-10-17T06:19:19.974Z" }, - { url = "https://files.pythonhosted.org/packages/06/4b/cf05ed9d934cc30e5ae22f97c8272face420a476090e736615d9a6b53de0/crc32c-2.8-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:086f64793c5ec856d1ab31a026d52ad2b895ac83d7a38fce557d74eb857f0a82", size = 80001, upload-time = "2025-10-17T06:19:20.784Z" }, - { url = "https://files.pythonhosted.org/packages/15/ab/4b04801739faf36345f6ba1920be5b1c70282fec52f8280afd3613fb13e2/crc32c-2.8-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bcf72ee7e0135b3d941c34bb2c26c3fc6bc207106b49fd89aaafaeae223ae209", size = 81543, upload-time = "2025-10-17T06:19:21.557Z" }, - { url = "https://files.pythonhosted.org/packages/a9/1b/6e38dde5bfd2ea69b7f2ab6ec229fcd972a53d39e2db4efe75c0ac0382ce/crc32c-2.8-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:8a717dd9c3fd777d9bc6603717eae172887d402c4ab589d124ebd0184a83f89e", size = 80644, upload-time = "2025-10-17T06:19:22.325Z" }, - { url = "https://files.pythonhosted.org/packages/ce/45/012176ffee90059ae8ec7131019c71724ea472aa63e72c0c8edbd1fad1d7/crc32c-2.8-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:0450bb845b3c3c7b9bdc0b4e95620ec9a40824abdc8c86d6285c919a90743c1a", size = 79919, upload-time = "2025-10-17T06:19:23.101Z" }, - { url = "https://files.pythonhosted.org/packages/f0/2b/f557629842f9dec2b3461cb3a0d854bb586ec45b814cea58b082c32f0dde/crc32c-2.8-cp313-cp313-win32.whl", hash = "sha256:765d220bfcbcffa6598ac11eb1e10af0ee4802b49fe126aa6bf79f8ddb9931d1", size = 64896, upload-time = "2025-10-17T06:19:23.88Z" }, - { url = "https://files.pythonhosted.org/packages/d0/db/fd0f698c15d1e21d47c64181a98290665a08fcbb3940cd559e9c15bda57e/crc32c-2.8-cp313-cp313-win_amd64.whl", hash = "sha256:171ff0260d112c62abcce29332986950a57bddee514e0a2418bfde493ea06bb3", size = 66646, upload-time = "2025-10-17T06:19:24.702Z" }, - { url = "https://files.pythonhosted.org/packages/db/b9/8e5d7054fe8e7eecab10fd0c8e7ffb01439417bdb6de1d66a81c38fc4a20/crc32c-2.8-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b977a32a3708d6f51703c8557008f190aaa434d7347431efb0e86fcbe78c2a50", size = 66203, upload-time = "2025-10-17T06:19:25.872Z" }, - { url = "https://files.pythonhosted.org/packages/55/5f/cc926c70057a63cc0c98a3c8a896eb15fc7e74d3034eadd53c94917c6cc3/crc32c-2.8-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:7399b01db4adaf41da2fb36fe2408e75a8d82a179a9564ed7619412e427b26d6", size = 62956, upload-time = "2025-10-17T06:19:26.652Z" }, - { url = "https://files.pythonhosted.org/packages/a1/8a/0660c44a2dd2cb6ccbb529eb363b9280f5c766f1017bc8355ed8d695bd94/crc32c-2.8-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:4379f73f9cdad31958a673d11a332ec725ca71572401ca865867229f5f15e853", size = 61442, upload-time = "2025-10-17T06:19:27.74Z" }, - { url = "https://files.pythonhosted.org/packages/f5/5a/6108d2dfc0fe33522ce83ba07aed4b22014911b387afa228808a278e27cd/crc32c-2.8-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2e68264555fab19bab08331550dab58573e351a63ed79c869d455edd3b0aa417", size = 79109, upload-time = "2025-10-17T06:19:28.535Z" }, - { url = "https://files.pythonhosted.org/packages/84/1e/c054f9e390090c197abf3d2936f4f9effaf0c6ee14569ae03d6ddf86958a/crc32c-2.8-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b48f2486727b8d0e7ccbae4a34cb0300498433d2a9d6b49cb13cb57c2e3f19cb", size = 80987, upload-time = "2025-10-17T06:19:29.305Z" }, - { url = "https://files.pythonhosted.org/packages/c8/ad/1650e5c3341e4a485f800ea83116d72965030c5d48ccc168fcc685756e4d/crc32c-2.8-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:ecf123348934a086df8c8fde7f9f2d716d523ca0707c5a1367b8bb00d8134823", size = 79994, upload-time = "2025-10-17T06:19:30.109Z" }, - { url = "https://files.pythonhosted.org/packages/d7/3b/f2ed924b177729cbb2ab30ca2902abff653c31d48c95e7b66717a9ca9fcc/crc32c-2.8-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e636ac60f76de538f7a2c0d0f3abf43104ee83a8f5e516f6345dc283ed1a4df7", size = 79046, upload-time = "2025-10-17T06:19:30.894Z" }, - { url = "https://files.pythonhosted.org/packages/4b/80/413b05ee6ace613208b31b3670c3135ee1cf451f0e72a9c839b4946acc04/crc32c-2.8-cp313-cp313t-win32.whl", hash = "sha256:8dd4a19505e0253892e1b2f1425cc3bd47f79ae5a04cb8800315d00aad7197f2", size = 64837, upload-time = "2025-10-17T06:19:32.03Z" }, - { url = "https://files.pythonhosted.org/packages/3b/1b/85eddb6ac5b38496c4e35c20298aae627970c88c3c624a22ab33e84f16c7/crc32c-2.8-cp313-cp313t-win_amd64.whl", hash = "sha256:4bb18e4bd98fb266596523ffc6be9c5b2387b2fa4e505ec56ca36336f49cb639", size = 66574, upload-time = "2025-10-17T06:19:33.143Z" }, -] - [[package]] name = "cryptography" -version = "46.0.7" +version = "48.0.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cffi", marker = "platform_python_implementation != 'PyPy'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/47/93/ac8f3d5ff04d54bc814e961a43ae5b0b146154c89c61b47bb07557679b18/cryptography-46.0.7.tar.gz", hash = "sha256:e4cfd68c5f3e0bfdad0d38e023239b96a2fe84146481852dffbcca442c245aa5", size = 750652, upload-time = "2026-04-08T01:57:54.692Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/0b/5d/4a8f770695d73be252331e60e526291e3df0c9b27556a90a6b47bccca4c2/cryptography-46.0.7-cp311-abi3-macosx_10_9_universal2.whl", hash = "sha256:ea42cbe97209df307fdc3b155f1b6fa2577c0defa8f1f7d3be7d31d189108ad4", size = 7179869, upload-time = "2026-04-08T01:56:17.157Z" }, - { url = "https://files.pythonhosted.org/packages/5f/45/6d80dc379b0bbc1f9d1e429f42e4cb9e1d319c7a8201beffd967c516ea01/cryptography-46.0.7-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b36a4695e29fe69215d75960b22577197aca3f7a25b9cf9d165dcfe9d80bc325", size = 4275492, upload-time = "2026-04-08T01:56:19.36Z" }, - { url = "https://files.pythonhosted.org/packages/4a/9a/1765afe9f572e239c3469f2cb429f3ba7b31878c893b246b4b2994ffe2fe/cryptography-46.0.7-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5ad9ef796328c5e3c4ceed237a183f5d41d21150f972455a9d926593a1dcb308", size = 4426670, upload-time = "2026-04-08T01:56:21.415Z" }, - { url = "https://files.pythonhosted.org/packages/8f/3e/af9246aaf23cd4ee060699adab1e47ced3f5f7e7a8ffdd339f817b446462/cryptography-46.0.7-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:73510b83623e080a2c35c62c15298096e2a5dc8d51c3b4e1740211839d0dea77", size = 4280275, upload-time = "2026-04-08T01:56:23.539Z" }, - { url = "https://files.pythonhosted.org/packages/0f/54/6bbbfc5efe86f9d71041827b793c24811a017c6ac0fd12883e4caa86b8ed/cryptography-46.0.7-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:cbd5fb06b62bd0721e1170273d3f4d5a277044c47ca27ee257025146c34cbdd1", size = 4928402, upload-time = "2026-04-08T01:56:25.624Z" }, - { url = "https://files.pythonhosted.org/packages/2d/cf/054b9d8220f81509939599c8bdbc0c408dbd2bdd41688616a20731371fe0/cryptography-46.0.7-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:420b1e4109cc95f0e5700eed79908cef9268265c773d3a66f7af1eef53d409ef", size = 4459985, upload-time = "2026-04-08T01:56:27.309Z" }, - { url = "https://files.pythonhosted.org/packages/f9/46/4e4e9c6040fb01c7467d47217d2f882daddeb8828f7df800cb806d8a2288/cryptography-46.0.7-cp311-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:24402210aa54baae71d99441d15bb5a1919c195398a87b563df84468160a65de", size = 3990652, upload-time = "2026-04-08T01:56:29.095Z" }, - { url = "https://files.pythonhosted.org/packages/36/5f/313586c3be5a2fbe87e4c9a254207b860155a8e1f3cca99f9910008e7d08/cryptography-46.0.7-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:8a469028a86f12eb7d2fe97162d0634026d92a21f3ae0ac87ed1c4a447886c83", size = 4279805, upload-time = "2026-04-08T01:56:30.928Z" }, - { url = "https://files.pythonhosted.org/packages/69/33/60dfc4595f334a2082749673386a4d05e4f0cf4df8248e63b2c3437585f2/cryptography-46.0.7-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:9694078c5d44c157ef3162e3bf3946510b857df5a3955458381d1c7cfc143ddb", size = 4892883, upload-time = "2026-04-08T01:56:32.614Z" }, - { url = "https://files.pythonhosted.org/packages/c7/0b/333ddab4270c4f5b972f980adef4faa66951a4aaf646ca067af597f15563/cryptography-46.0.7-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:42a1e5f98abb6391717978baf9f90dc28a743b7d9be7f0751a6f56a75d14065b", size = 4459756, upload-time = "2026-04-08T01:56:34.306Z" }, - { url = "https://files.pythonhosted.org/packages/d2/14/633913398b43b75f1234834170947957c6b623d1701ffc7a9600da907e89/cryptography-46.0.7-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:91bbcb08347344f810cbe49065914fe048949648f6bd5c2519f34619142bbe85", size = 4410244, upload-time = "2026-04-08T01:56:35.977Z" }, - { url = "https://files.pythonhosted.org/packages/10/f2/19ceb3b3dc14009373432af0c13f46aa08e3ce334ec6eff13492e1812ccd/cryptography-46.0.7-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:5d1c02a14ceb9148cc7816249f64f623fbfee39e8c03b3650d842ad3f34d637e", size = 4674868, upload-time = "2026-04-08T01:56:38.034Z" }, - { url = "https://files.pythonhosted.org/packages/1a/bb/a5c213c19ee94b15dfccc48f363738633a493812687f5567addbcbba9f6f/cryptography-46.0.7-cp311-abi3-win32.whl", hash = "sha256:d23c8ca48e44ee015cd0a54aeccdf9f09004eba9fc96f38c911011d9ff1bd457", size = 3026504, upload-time = "2026-04-08T01:56:39.666Z" }, - { url = "https://files.pythonhosted.org/packages/2b/02/7788f9fefa1d060ca68717c3901ae7fffa21ee087a90b7f23c7a603c32ae/cryptography-46.0.7-cp311-abi3-win_amd64.whl", hash = "sha256:397655da831414d165029da9bc483bed2fe0e75dde6a1523ec2fe63f3c46046b", size = 3488363, upload-time = "2026-04-08T01:56:41.893Z" }, - { url = "https://files.pythonhosted.org/packages/a7/7f/cd42fc3614386bc0c12f0cb3c4ae1fc2bbca5c9662dfed031514911d513d/cryptography-46.0.7-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:462ad5cb1c148a22b2e3bcc5ad52504dff325d17daf5df8d88c17dda1f75f2a4", size = 7165618, upload-time = "2026-04-08T01:57:10.645Z" }, - { url = "https://files.pythonhosted.org/packages/a5/d0/36a49f0262d2319139d2829f773f1b97ef8aef7f97e6e5bd21455e5a8fb5/cryptography-46.0.7-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:84d4cced91f0f159a7ddacad249cc077e63195c36aac40b4150e7a57e84fffe7", size = 4270628, upload-time = "2026-04-08T01:57:12.885Z" }, - { url = "https://files.pythonhosted.org/packages/8a/6c/1a42450f464dda6ffbe578a911f773e54dd48c10f9895a23a7e88b3e7db5/cryptography-46.0.7-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:128c5edfe5e5938b86b03941e94fac9ee793a94452ad1365c9fc3f4f62216832", size = 4415405, upload-time = "2026-04-08T01:57:14.923Z" }, - { url = "https://files.pythonhosted.org/packages/9a/92/4ed714dbe93a066dc1f4b4581a464d2d7dbec9046f7c8b7016f5286329e2/cryptography-46.0.7-cp38-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:5e51be372b26ef4ba3de3c167cd3d1022934bc838ae9eaad7e644986d2a3d163", size = 4272715, upload-time = "2026-04-08T01:57:16.638Z" }, - { url = "https://files.pythonhosted.org/packages/b7/e6/a26b84096eddd51494bba19111f8fffe976f6a09f132706f8f1bf03f51f7/cryptography-46.0.7-cp38-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:cdf1a610ef82abb396451862739e3fc93b071c844399e15b90726ef7470eeaf2", size = 4918400, upload-time = "2026-04-08T01:57:19.021Z" }, - { url = "https://files.pythonhosted.org/packages/c7/08/ffd537b605568a148543ac3c2b239708ae0bd635064bab41359252ef88ed/cryptography-46.0.7-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:1d25aee46d0c6f1a501adcddb2d2fee4b979381346a78558ed13e50aa8a59067", size = 4450634, upload-time = "2026-04-08T01:57:21.185Z" }, - { url = "https://files.pythonhosted.org/packages/16/01/0cd51dd86ab5b9befe0d031e276510491976c3a80e9f6e31810cce46c4ad/cryptography-46.0.7-cp38-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:cdfbe22376065ffcf8be74dc9a909f032df19bc58a699456a21712d6e5eabfd0", size = 3985233, upload-time = "2026-04-08T01:57:22.862Z" }, - { url = "https://files.pythonhosted.org/packages/92/49/819d6ed3a7d9349c2939f81b500a738cb733ab62fbecdbc1e38e83d45e12/cryptography-46.0.7-cp38-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:abad9dac36cbf55de6eb49badd4016806b3165d396f64925bf2999bcb67837ba", size = 4271955, upload-time = "2026-04-08T01:57:24.814Z" }, - { url = "https://files.pythonhosted.org/packages/80/07/ad9b3c56ebb95ed2473d46df0847357e01583f4c52a85754d1a55e29e4d0/cryptography-46.0.7-cp38-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:935ce7e3cfdb53e3536119a542b839bb94ec1ad081013e9ab9b7cfd478b05006", size = 4879888, upload-time = "2026-04-08T01:57:26.88Z" }, - { url = "https://files.pythonhosted.org/packages/b8/c7/201d3d58f30c4c2bdbe9b03844c291feb77c20511cc3586daf7edc12a47b/cryptography-46.0.7-cp38-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:35719dc79d4730d30f1c2b6474bd6acda36ae2dfae1e3c16f2051f215df33ce0", size = 4449961, upload-time = "2026-04-08T01:57:29.068Z" }, - { url = "https://files.pythonhosted.org/packages/a5/ef/649750cbf96f3033c3c976e112265c33906f8e462291a33d77f90356548c/cryptography-46.0.7-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:7bbc6ccf49d05ac8f7d7b5e2e2c33830d4fe2061def88210a126d130d7f71a85", size = 4401696, upload-time = "2026-04-08T01:57:31.029Z" }, - { url = "https://files.pythonhosted.org/packages/41/52/a8908dcb1a389a459a29008c29966c1d552588d4ae6d43f3a1a4512e0ebe/cryptography-46.0.7-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a1529d614f44b863a7b480c6d000fe93b59acee9c82ffa027cfadc77521a9f5e", size = 4664256, upload-time = "2026-04-08T01:57:33.144Z" }, - { url = "https://files.pythonhosted.org/packages/4b/fa/f0ab06238e899cc3fb332623f337a7364f36f4bb3f2534c2bb95a35b132c/cryptography-46.0.7-cp38-abi3-win32.whl", hash = "sha256:f247c8c1a1fb45e12586afbb436ef21ff1e80670b2861a90353d9b025583d246", size = 3013001, upload-time = "2026-04-08T01:57:34.933Z" }, - { url = "https://files.pythonhosted.org/packages/d2/f1/00ce3bde3ca542d1acd8f8cfa38e446840945aa6363f9b74746394b14127/cryptography-46.0.7-cp38-abi3-win_amd64.whl", hash = "sha256:506c4ff91eff4f82bdac7633318a526b1d1309fc07ca76a3ad182cb5b686d6d3", size = 3472985, upload-time = "2026-04-08T01:57:36.714Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/12/45/870e7f4bef50e5f53b9f51d4428aee5290eedf58ba443f16b1ebb7ab8e66/cryptography-48.0.1.tar.gz", hash = "sha256:266f4ee051abb2f725b74ef8072b521ce1feacf685a3364fa6a6b45548db791a", size = 832989, upload-time = "2026-06-09T22:32:31.8Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1b/bc/ee4137cbbe105652c0ee4252792b78fc8e7afa4b8e61d9d5dc05a7f45731/cryptography-48.0.1-cp311-abi3-macosx_10_9_universal2.whl", hash = "sha256:3e4a1a3232eef2e6c732827d5722db29a0cc8b27af2a4d865b094cf954be9ca1", size = 8008324, upload-time = "2026-06-09T22:31:00.702Z" }, + { url = "https://files.pythonhosted.org/packages/d5/85/6379d42181bfc713094f081360fc5784d6c816b599d45e7f082502d173ce/cryptography-48.0.1-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:32143b24adb918f078134e1e230f1eb8cc04886b92c28b5f0041aaf3e5699225", size = 4696243, upload-time = "2026-06-09T22:32:33.446Z" }, + { url = "https://files.pythonhosted.org/packages/9c/87/c85d147b53323c7eb4d850920c8901377323c2a0ff8d79c262d4fee89aa2/cryptography-48.0.1-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f0d27a5696721ef7a672b8c810f6aded391058e0b9486e63e6d93baf765da691", size = 4713235, upload-time = "2026-06-09T22:31:40.141Z" }, + { url = "https://files.pythonhosted.org/packages/79/58/67cbf8cf1ee7c54b439ca07bbecf8362c07afc11a3724fea70f745784add/cryptography-48.0.1-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:eb86ce1af36fe65041b6db9a8bb064ee621a7e5fded0f80d475ec243477cd242", size = 4702323, upload-time = "2026-06-09T22:31:42.191Z" }, + { url = "https://files.pythonhosted.org/packages/89/c6/24266ac10c47f6cd2a865f4446062b466da1d1f10b27189eac00e61bf0c9/cryptography-48.0.1-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:b024e784ad6c077ee0147b35ea9cbfc1e34e1fd4c1dcca214c2794d73a12df08", size = 5300085, upload-time = "2026-06-09T22:31:58.703Z" }, + { url = "https://files.pythonhosted.org/packages/d2/bb/cc4b78784f97efc8c5874c2a9743708d172be6663024b34a0467885ae0c8/cryptography-48.0.1-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:3752f2dbc8f07a30aad2932c986cea495b03bb554887828225da104f732852b6", size = 4746137, upload-time = "2026-06-09T22:31:31.01Z" }, + { url = "https://files.pythonhosted.org/packages/1f/52/0c44de3f5267f8fbe8e835138017522a333436166e406f0db9b9e6e3033f/cryptography-48.0.1-cp311-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:bd81490cd5801d755cf97bb68ac191f14b708470b1c7cf4580f669b9c9264cd8", size = 4333867, upload-time = "2026-06-09T22:32:28.096Z" }, + { url = "https://files.pythonhosted.org/packages/9a/2e/772d7adbfa931537bc401640b7cac9976bff689bda187833e5d63b428e49/cryptography-48.0.1-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:66fd0771e7b9c6dcd44cf1120690d2338d16d72795cf40cae2786a39eba65429", size = 4701805, upload-time = "2026-06-09T22:31:38.284Z" }, + { url = "https://files.pythonhosted.org/packages/f8/a3/b06844f303873493c963caf581c04df31c7035e0c1b0f02c4814d319ec80/cryptography-48.0.1-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:3fd2ca57062b241c856670b073487d2e86c4637937ca5601e48f97bf8e11fc8f", size = 5258461, upload-time = "2026-06-09T22:31:04.187Z" }, + { url = "https://files.pythonhosted.org/packages/9f/13/8b765e2e12b07c74941caadb9d1c8fdc006c4dfbf2b8f2d610519758954d/cryptography-48.0.1-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:0ee6ea481db1ab889cba043ec1eda17bb9c1ea79db6722f779c3667f9f70322f", size = 4745488, upload-time = "2026-06-09T22:32:30.07Z" }, + { url = "https://files.pythonhosted.org/packages/2e/aa/48972bce55049b32a94f4907eda4d75fa385aad8a39506cc2fc72196ecf0/cryptography-48.0.1-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:f2ceef93cb096aa3c4cc4b5c94ca6131f9196d28c64d6111533402a9b2054d41", size = 4830256, upload-time = "2026-06-09T22:31:43.868Z" }, + { url = "https://files.pythonhosted.org/packages/47/a2/e5079a032fb85cf6005046ca92bbd78b0c82dad2b5751ab8c311659da06f/cryptography-48.0.1-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:9bd3f92d76217892b15df84ca256c2c113d386fdda7a7d8691aeeced976507c6", size = 4979117, upload-time = "2026-06-09T22:31:05.845Z" }, + { url = "https://files.pythonhosted.org/packages/b7/a0/8f50cae9c74e718ed769d63ed5c74bd0ea830c9550a74629cebd1b9c7bc7/cryptography-48.0.1-cp311-abi3-win32.whl", hash = "sha256:b9a32b876490d66c8bcc9963ef220199569748434ab01a9d6aaeabf88e7f5158", size = 3304154, upload-time = "2026-06-09T22:32:16.845Z" }, + { url = "https://files.pythonhosted.org/packages/c5/69/0572c77dbace6fef72f33755bd52ea399c71367250d366237f8691826b9e/cryptography-48.0.1-cp311-abi3-win_amd64.whl", hash = "sha256:39489bfca54c7a1f6b297efcd8bc608ab92d16c4ca631b0cad4da46724588b24", size = 3817138, upload-time = "2026-06-09T22:32:00.388Z" }, + { url = "https://files.pythonhosted.org/packages/ca/6c/00fa2a95997164c8b2072ce327c23d4ab20809ccc323ea5fab91e53a4bba/cryptography-48.0.1-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:4fdc69f8e4316bcf0c8c8ec1f26f285d12e8142d88d96c876a59a03be3f6ae67", size = 7987408, upload-time = "2026-06-09T22:32:20.777Z" }, + { url = "https://files.pythonhosted.org/packages/b0/d9/45f309a7e4e5f3f8f121d6d3be9e94024a7726ec598d6e08ae04edb2f04d/cryptography-48.0.1-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:48fe40804d4caa2288f24e70ca8c64c42dd826da0ad7e4f1b41b2128d679e6c8", size = 4690196, upload-time = "2026-06-09T22:31:54.74Z" }, + { url = "https://files.pythonhosted.org/packages/5f/9f/a1bc8bcc798811b8527eb374bbccf30a3f3e806829d967118222bf1125eb/cryptography-48.0.1-cp39-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:86be3b1b0b6bf09482fb50a979c508d2950ed95f5621ec77f4e385962006b83a", size = 4696782, upload-time = "2026-06-09T22:31:45.615Z" }, + { url = "https://files.pythonhosted.org/packages/66/c2/81a4fb4e4373c500bb526bc337ac5719dd31dd15b970b84a238168c6aa08/cryptography-48.0.1-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:4ab0a343c807bbcd90c971cd1ecf072937cd01847a9e002bef88fb47ac6be577", size = 4696618, upload-time = "2026-06-09T22:31:11.564Z" }, + { url = "https://files.pythonhosted.org/packages/e5/0b/aa68b221dde92d09cb29a024ede17550ee21e77a404e59fc093c82bb51e1/cryptography-48.0.1-cp39-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:9621de99d2da096006b629979efd8ae7eb2d8b822488d0c89ee4000c306c59b1", size = 5289970, upload-time = "2026-06-09T22:31:20.368Z" }, + { url = "https://files.pythonhosted.org/packages/78/13/fba657f958d2af66ea959a4ba01212632089249d34af1ae48054136344d7/cryptography-48.0.1-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:88c852a0ae366e262e5a1744b685e6a433dc8788dd2a277e418bf4904203609d", size = 4731873, upload-time = "2026-06-09T22:31:22.253Z" }, + { url = "https://files.pythonhosted.org/packages/4c/4c/9a964756d24a26b3e34dfcb16f961b89838786e6700b635b0d1e3adff4b6/cryptography-48.0.1-cp39-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:43c5835e2cb98c8733d86f57d6fc879b613f5c3478607281c3e36daffc6dd8a6", size = 4330804, upload-time = "2026-06-09T22:31:36.56Z" }, + { url = "https://files.pythonhosted.org/packages/4b/0f/a10f3a6eb12950a10e3a874070283aa2dd5875b2bfd15fad8a3e17b3f13e/cryptography-48.0.1-cp39-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:fe0180af5bf9236518a087e35bf2d9a347d5f5f51e63c579d683ddff424e3d46", size = 4696217, upload-time = "2026-06-09T22:31:13.351Z" }, + { url = "https://files.pythonhosted.org/packages/f3/6f/5cd12f951165ea73ef85266775d97e4c763b2474ccfd816dd69d3a18d6f8/cryptography-48.0.1-cp39-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:b7a2d1a937a738a881737cec135a38bb61470589b17515b9f73f571d0ae10401", size = 5245252, upload-time = "2026-06-09T22:32:02.193Z" }, + { url = "https://files.pythonhosted.org/packages/68/ab/8aaa12e4516ec4464033ab79b6f3b592bd5a92102467c4ace8a0d970203f/cryptography-48.0.1-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:b74ca3b8e5ecdd833bf6a002ca41b4793bb27fb8f1c06ffaf2643c9e9140e31b", size = 4731388, upload-time = "2026-06-09T22:32:04.019Z" }, + { url = "https://files.pythonhosted.org/packages/1b/24/50027ea4dca85ec1f40688f3c24fb32ccacd520583c9592c3cc95628e6fb/cryptography-48.0.1-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:2c37f2461406063b417837f5f3daab668652acd82423efcd7f0a9f04be972de1", size = 4824186, upload-time = "2026-06-09T22:32:18.707Z" }, + { url = "https://files.pythonhosted.org/packages/52/41/04cb5eb17085ade6f50cc611fb657df6a0f5885350de8764ece89c050197/cryptography-48.0.1-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:86fe77abb1bd87afb251d4d02ada7ecf53a32cee9b67d976abb2e45a13297475", size = 4964539, upload-time = "2026-06-09T22:31:18.793Z" }, + { url = "https://files.pythonhosted.org/packages/36/bf/ed70785c496e89d7e73b7cda2d21f2447fd6d4e821714b8d04ff217fed92/cryptography-48.0.1-cp39-abi3-win32.whl", hash = "sha256:6b2c0c3e6ccf3ade7750f836ef3ee36eea250cc467d45c256895573ac08cc6f1", size = 3282307, upload-time = "2026-06-09T22:30:53.162Z" }, + { url = "https://files.pythonhosted.org/packages/b3/ff/371ea7d252656ee1eb6d83eeeef3d1d0c6baf1d6497687d081ea03814670/cryptography-48.0.1-cp39-abi3-win_amd64.whl", hash = "sha256:9a49ca6c81417f6a5edb50375a60cccdd70fa0a91a5211829dbea74eba94d2ac", size = 3793408, upload-time = "2026-06-09T22:32:15.191Z" }, ] [[package]] @@ -764,24 +707,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/de/15/545e2b6cf2e3be84bc1ed85613edd75b8aea69807a71c26f4ca6a9258e82/email_validator-2.3.0-py3-none-any.whl", hash = "sha256:80f13f623413e6b197ae73bb10bf4eb0908faf509ad8362c5edeb0be7fd450b4", size = 35604, upload-time = "2025-08-26T13:09:05.858Z" }, ] -[[package]] -name = "exa-py" -version = "1.16.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "httpcore" }, - { name = "httpx" }, - { name = "openai" }, - { name = "pydantic" }, - { name = "python-dotenv" }, - { name = "requests" }, - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/4e/b0/d035d8e56ca7d9192daf4a3bf4d4fc4a64d427d29df700868dd91ffc0a69/exa_py-1.16.2.tar.gz", hash = "sha256:1808a82ef9f25271ffd238d7b9e2ed279a96de89f140de401887866fc8b54ced", size = 41380, upload-time = "2026-04-24T19:08:07.982Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/98/27/934d9750e4f3c888a0cc8e702c2424069abb7d86b67602229c44083c3d25/exa_py-1.16.2-py3-none-any.whl", hash = "sha256:7a574e978a50dd458b07e8bbb8b1da9543b8f8e57191b7bd1086546414686689", size = 56642, upload-time = "2026-04-24T19:08:09.052Z" }, -] - [[package]] name = "exceptiongroup" version = "1.3.1" @@ -975,36 +900,6 @@ server = [ { name = "websockets" }, ] -[[package]] -name = "fastuuid" -version = "0.14.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c3/7d/d9daedf0f2ebcacd20d599928f8913e9d2aea1d56d2d355a93bfa2b611d7/fastuuid-0.14.0.tar.gz", hash = "sha256:178947fc2f995b38497a74172adee64fdeb8b7ec18f2a5934d037641ba265d26", size = 18232, upload-time = "2025-10-19T22:19:22.402Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/02/a2/e78fcc5df65467f0d207661b7ef86c5b7ac62eea337c0c0fcedbeee6fb13/fastuuid-0.14.0-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:77e94728324b63660ebf8adb27055e92d2e4611645bf12ed9d88d30486471d0a", size = 510164, upload-time = "2025-10-19T22:31:45.635Z" }, - { url = "https://files.pythonhosted.org/packages/2b/b3/c846f933f22f581f558ee63f81f29fa924acd971ce903dab1a9b6701816e/fastuuid-0.14.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:caa1f14d2102cb8d353096bc6ef6c13b2c81f347e6ab9d6fbd48b9dea41c153d", size = 261837, upload-time = "2025-10-19T22:38:38.53Z" }, - { url = "https://files.pythonhosted.org/packages/54/ea/682551030f8c4fa9a769d9825570ad28c0c71e30cf34020b85c1f7ee7382/fastuuid-0.14.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d23ef06f9e67163be38cece704170486715b177f6baae338110983f99a72c070", size = 251370, upload-time = "2025-10-19T22:40:26.07Z" }, - { url = "https://files.pythonhosted.org/packages/14/dd/5927f0a523d8e6a76b70968e6004966ee7df30322f5fc9b6cdfb0276646a/fastuuid-0.14.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0c9ec605ace243b6dbe3bd27ebdd5d33b00d8d1d3f580b39fdd15cd96fd71796", size = 277766, upload-time = "2025-10-19T22:37:23.779Z" }, - { url = "https://files.pythonhosted.org/packages/16/6e/c0fb547eef61293153348f12e0f75a06abb322664b34a1573a7760501336/fastuuid-0.14.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:808527f2407f58a76c916d6aa15d58692a4a019fdf8d4c32ac7ff303b7d7af09", size = 278105, upload-time = "2025-10-19T22:26:56.821Z" }, - { url = "https://files.pythonhosted.org/packages/2d/b1/b9c75e03b768f61cf2e84ee193dc18601aeaf89a4684b20f2f0e9f52b62c/fastuuid-0.14.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2fb3c0d7fef6674bbeacdd6dbd386924a7b60b26de849266d1ff6602937675c8", size = 301564, upload-time = "2025-10-19T22:30:31.604Z" }, - { url = "https://files.pythonhosted.org/packages/fc/fa/f7395fdac07c7a54f18f801744573707321ca0cee082e638e36452355a9d/fastuuid-0.14.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ab3f5d36e4393e628a4df337c2c039069344db5f4b9d2a3c9cea48284f1dd741", size = 459659, upload-time = "2025-10-19T22:31:32.341Z" }, - { url = "https://files.pythonhosted.org/packages/66/49/c9fd06a4a0b1f0f048aacb6599e7d96e5d6bc6fa680ed0d46bf111929d1b/fastuuid-0.14.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:b9a0ca4f03b7e0b01425281ffd44e99d360e15c895f1907ca105854ed85e2057", size = 478430, upload-time = "2025-10-19T22:26:22.962Z" }, - { url = "https://files.pythonhosted.org/packages/be/9c/909e8c95b494e8e140e8be6165d5fc3f61fdc46198c1554df7b3e1764471/fastuuid-0.14.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3acdf655684cc09e60fb7e4cf524e8f42ea760031945aa8086c7eae2eeeabeb8", size = 450894, upload-time = "2025-10-19T22:27:01.647Z" }, - { url = "https://files.pythonhosted.org/packages/90/eb/d29d17521976e673c55ef7f210d4cdd72091a9ec6755d0fd4710d9b3c871/fastuuid-0.14.0-cp312-cp312-win32.whl", hash = "sha256:9579618be6280700ae36ac42c3efd157049fe4dd40ca49b021280481c78c3176", size = 154374, upload-time = "2025-10-19T22:29:19.879Z" }, - { url = "https://files.pythonhosted.org/packages/cc/fc/f5c799a6ea6d877faec0472d0b27c079b47c86b1cdc577720a5386483b36/fastuuid-0.14.0-cp312-cp312-win_amd64.whl", hash = "sha256:d9e4332dc4ba054434a9594cbfaf7823b57993d7d8e7267831c3e059857cf397", size = 156550, upload-time = "2025-10-19T22:27:49.658Z" }, - { url = "https://files.pythonhosted.org/packages/a5/83/ae12dd39b9a39b55d7f90abb8971f1a5f3c321fd72d5aa83f90dc67fe9ed/fastuuid-0.14.0-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:77a09cb7427e7af74c594e409f7731a0cf887221de2f698e1ca0ebf0f3139021", size = 510720, upload-time = "2025-10-19T22:42:34.633Z" }, - { url = "https://files.pythonhosted.org/packages/53/b0/a4b03ff5d00f563cc7546b933c28cb3f2a07344b2aec5834e874f7d44143/fastuuid-0.14.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:9bd57289daf7b153bfa3e8013446aa144ce5e8c825e9e366d455155ede5ea2dc", size = 262024, upload-time = "2025-10-19T22:30:25.482Z" }, - { url = "https://files.pythonhosted.org/packages/9c/6d/64aee0a0f6a58eeabadd582e55d0d7d70258ffdd01d093b30c53d668303b/fastuuid-0.14.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:ac60fc860cdf3c3f327374db87ab8e064c86566ca8c49d2e30df15eda1b0c2d5", size = 251679, upload-time = "2025-10-19T22:36:14.096Z" }, - { url = "https://files.pythonhosted.org/packages/60/f5/a7e9cda8369e4f7919d36552db9b2ae21db7915083bc6336f1b0082c8b2e/fastuuid-0.14.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ab32f74bd56565b186f036e33129da77db8be09178cd2f5206a5d4035fb2a23f", size = 277862, upload-time = "2025-10-19T22:36:23.302Z" }, - { url = "https://files.pythonhosted.org/packages/f0/d3/8ce11827c783affffd5bd4d6378b28eb6cc6d2ddf41474006b8d62e7448e/fastuuid-0.14.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33e678459cf4addaedd9936bbb038e35b3f6b2061330fd8f2f6a1d80414c0f87", size = 278278, upload-time = "2025-10-19T22:29:43.809Z" }, - { url = "https://files.pythonhosted.org/packages/a2/51/680fb6352d0bbade04036da46264a8001f74b7484e2fd1f4da9e3db1c666/fastuuid-0.14.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1e3cc56742f76cd25ecb98e4b82a25f978ccffba02e4bdce8aba857b6d85d87b", size = 301788, upload-time = "2025-10-19T22:36:06.825Z" }, - { url = "https://files.pythonhosted.org/packages/fa/7c/2014b5785bd8ebdab04ec857635ebd84d5ee4950186a577db9eff0fb8ff6/fastuuid-0.14.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:cb9a030f609194b679e1660f7e32733b7a0f332d519c5d5a6a0a580991290022", size = 459819, upload-time = "2025-10-19T22:35:31.623Z" }, - { url = "https://files.pythonhosted.org/packages/01/d2/524d4ceeba9160e7a9bc2ea3e8f4ccf1ad78f3bde34090ca0c51f09a5e91/fastuuid-0.14.0-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:09098762aad4f8da3a888eb9ae01c84430c907a297b97166b8abc07b640f2995", size = 478546, upload-time = "2025-10-19T22:26:03.023Z" }, - { url = "https://files.pythonhosted.org/packages/bc/17/354d04951ce114bf4afc78e27a18cfbd6ee319ab1829c2d5fb5e94063ac6/fastuuid-0.14.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:1383fff584fa249b16329a059c68ad45d030d5a4b70fb7c73a08d98fd53bcdab", size = 450921, upload-time = "2025-10-19T22:31:02.151Z" }, - { url = "https://files.pythonhosted.org/packages/fb/be/d7be8670151d16d88f15bb121c5b66cdb5ea6a0c2a362d0dcf30276ade53/fastuuid-0.14.0-cp313-cp313-win32.whl", hash = "sha256:a0809f8cc5731c066c909047f9a314d5f536c871a7a22e815cc4967c110ac9ad", size = 154559, upload-time = "2025-10-19T22:36:36.011Z" }, - { url = "https://files.pythonhosted.org/packages/22/1d/5573ef3624ceb7abf4a46073d3554e37191c868abc3aecd5289a72f9810a/fastuuid-0.14.0-cp313-cp313-win_amd64.whl", hash = "sha256:0df14e92e7ad3276327631c9e7cec09e32572ce82089c55cb1bb8df71cf394ed", size = 156539, upload-time = "2025-10-19T22:33:35.898Z" }, -] - [[package]] name = "filelock" version = "3.32.0" @@ -1179,7 +1074,9 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/f3/04/81bd731d6d1e3a469d9a4c36f5eb069bcf0cbb2d5d342c9fec22245b91fc/greenlet-3.5.4-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:3d66250e8b09f182ede05490998c818b5961f7a3640332d44c4927caec7bbfe4", size = 295909, upload-time = "2026-07-22T11:38:09.261Z" }, { url = "https://files.pythonhosted.org/packages/cc/dd/f5f22903a6ae70f5ea328ed0beaec92ad903f0e3b7d2845133b354abc4b8/greenlet-3.5.4-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c90e930c9c192e5b3ee9fb8bcd920ea3926155e2e3ded39fc697323addecee17", size = 612011, upload-time = "2026-07-22T12:26:40.69Z" }, { url = "https://files.pythonhosted.org/packages/8e/10/92a4a88d12b915d74ea5b6d288e4afefda4771647caa34442c156f7a454f/greenlet-3.5.4-cp312-cp312-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:791fdfeeb9c6e0c7b10fa151bf110d2a6974866f13dcb5b1c7efae698245893a", size = 624299, upload-time = "2026-07-22T12:29:02.089Z" }, + { url = "https://files.pythonhosted.org/packages/6c/f9/03e26be3487c5238e81f2b84714959a86ea8515a869828cf41f4fc54b34e/greenlet-3.5.4-cp312-cp312-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b7c895310363f310361e0fe2072af85269d2a2a285cd04c0c59e79a5e3670dcf", size = 629603, upload-time = "2026-07-22T12:43:43.456Z" }, { url = "https://files.pythonhosted.org/packages/50/6d/0b14bb9db2989f32cd9fe7f76afedea01ee8bee3f87c07e69f24adfe7e63/greenlet-3.5.4-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f88193799d43dbf8c8a806d6405c9c52fe2af40bf75072a606357b33cc336c7f", size = 621541, upload-time = "2026-07-22T11:51:09.464Z" }, + { url = "https://files.pythonhosted.org/packages/57/6b/7c55ca72ef80d57c16c4a55210f82582622462dc4485799a30f4ec6f3372/greenlet-3.5.4-cp312-cp312-manylinux_2_39_riscv64.whl", hash = "sha256:13b980043cb1b3134e81ea469da1250ddcc6bfe6d245bbaa59168d9cdc8f228f", size = 432554, upload-time = "2026-07-22T12:39:51.379Z" }, { url = "https://files.pythonhosted.org/packages/48/3d/25e9a2d9eb6b2e8b7ca4e80a3a26cb887cce6c8e0a87c921164f11bc5574/greenlet-3.5.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b7a5f095767c4493afcd06067f2bb3b8716e3f3f9e92b99c88e7e99f885b3d4d", size = 1581444, upload-time = "2026-07-22T12:25:03.818Z" }, { url = "https://files.pythonhosted.org/packages/b9/96/4c9bf2e2c408dcc0556edce69efa9f802e82223573c53240136a086821f1/greenlet-3.5.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:42afdc1ab5f66da8c586c32af9224a74a706b4f0ea0dc3a4188a0860a09c65c9", size = 1645842, upload-time = "2026-07-22T11:51:12.295Z" }, { url = "https://files.pythonhosted.org/packages/b5/41/303ecb26a3a56122c0f4d4073ee078881847bd6b6f463ae0ec57ec20223b/greenlet-3.5.4-cp312-cp312-win_amd64.whl", hash = "sha256:60149df8f462d1b230038e6590c23c3b4768bb5d6c022b3b6e82532b34b0b8a3", size = 247169, upload-time = "2026-07-22T11:38:19.893Z" }, @@ -1187,7 +1084,9 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/c0/9a/e51225dcd58713f16ccbdcc501a8da21098ea14515b7870f1f94459e5ff5/greenlet-3.5.4-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:24e61b88cb7e1b1d794b32a10cc346ac779681d6d74ff137a3e0a444d2bf1f02", size = 294831, upload-time = "2026-07-22T11:38:53.389Z" }, { url = "https://files.pythonhosted.org/packages/9f/ea/de50a50fadf979713ab18b46f22ad5ff5f2dcfc637a3ebdecf669801e1a5/greenlet-3.5.4-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:870d730fec833f5a06906a32596cc099b9161594642a92a520b7a88911c95356", size = 614619, upload-time = "2026-07-22T12:26:42.282Z" }, { url = "https://files.pythonhosted.org/packages/db/c7/2aae27fea41205b8650294c301f042a2a4bb6155eea48c995b890a92f2c1/greenlet-3.5.4-cp313-cp313-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ec5ff0d1878df6af3bf9b638a5a92a7d5693291de77c91bff10fa48519c604ef", size = 627021, upload-time = "2026-07-22T12:29:03.445Z" }, + { url = "https://files.pythonhosted.org/packages/1b/80/fb4d4788bbc8e54761f1fc88533af9523a6e86299fa113d6e8a8503ed9fc/greenlet-3.5.4-cp313-cp313-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:07bd44616608d873d06735b63ef1a88191d6ca57c8d291d6559c71bc14c0893c", size = 632845, upload-time = "2026-07-22T12:43:45.19Z" }, { url = "https://files.pythonhosted.org/packages/eb/56/79fd826f9ccaae0b84e1b4ef68dabba5e105bb044ffcd448a0b782fcba9a/greenlet-3.5.4-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d84d993f6e575c950d91a23c1345d18fe1a4310d447bf630849d7809196b52f0", size = 624002, upload-time = "2026-07-22T11:51:11.391Z" }, + { url = "https://files.pythonhosted.org/packages/42/e3/6086fa578ebb72772722cdc4bcd628459814b42e0c2db1e3cbd6552b3271/greenlet-3.5.4-cp313-cp313-manylinux_2_39_riscv64.whl", hash = "sha256:3529a8a933582ad19e224792cac7372489526576b75b4c124e8e4f29948f4861", size = 435053, upload-time = "2026-07-22T12:39:52.715Z" }, { url = "https://files.pythonhosted.org/packages/0a/1a/27319f97e731298513dcba1a2e91b63e9d8811d9de22130f960b129b1bf1/greenlet-3.5.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:58023945f421093de5e6fa108c0985a8659d43f49e0216da25099369a121bcbd", size = 1581533, upload-time = "2026-07-22T12:25:05.322Z" }, { url = "https://files.pythonhosted.org/packages/b1/6d/24240bf562e9786dd2799ee0a4a4dadb4ded22510f41b20245099159ac8c/greenlet-3.5.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:bae2728e1897aa8df8cb1af38cd48b3a743aefe29372de7b8b7a9f532501e69f", size = 1645781, upload-time = "2026-07-22T11:51:14.805Z" }, { url = "https://files.pythonhosted.org/packages/c1/5a/442ab1a9ef7ca6bf7210e5397a95972206a91a31033a03c8900866a10039/greenlet-3.5.4-cp313-cp313-win_amd64.whl", hash = "sha256:ca5726c0b08ca35ae873557266a78b2c3f3b2b7d7401aa5ff886c2045dd0111c", size = 247133, upload-time = "2026-07-22T11:39:20.661Z" }, @@ -1359,18 +1258,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/1e/5e/d4e9f1a599fb8e573b7b87160658329fbf28d19eac2718f51fc3def3aa5a/idna-3.18-py3-none-any.whl", hash = "sha256:7f952cbe720b688055e3f87de14f5c3e5fdaa8bc3928985c4077ca689de849a2", size = 65455, upload-time = "2026-06-02T14:34:06.319Z" }, ] -[[package]] -name = "importlib-metadata" -version = "8.9.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "zipp" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/e7/72/c600ae4f68c28fc19f9c31b9403053e5dbb8cace2e6842c7b7c3e4d42fe9/importlib_metadata-8.9.0.tar.gz", hash = "sha256:58850626cef4bd2df100378b0f2aea9724a7b92f10770d547725b047078f99ee", size = 56140, upload-time = "2026-03-20T16:56:26.362Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/7d/f9/97f2ca8bb3ec6e4b1d64f983ebe98b9a192faddff67fac3d6303a537e670/importlib_metadata-8.9.0-py3-none-any.whl", hash = "sha256:e0f761b6ea91ced3b0844c14c9d955224d538105921f8e6754c00f6ca79fba7f", size = 27220, upload-time = "2026-03-20T16:56:25.07Z" }, -] - [[package]] name = "iniconfig" version = "2.3.0" @@ -1819,19 +1706,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/36/e6/c7c39efe0bc7e1b7c3d8f54f85846e04c901913c3d3e99068b218558c6f1/langchain_core-1.5.3-py3-none-any.whl", hash = "sha256:48b56fa580277209594dd7baf837f5b9a2a3651613f34ff9fb1728b429df015f", size = 561687, upload-time = "2026-07-30T14:55:54.419Z" }, ] -[[package]] -name = "langchain-exa" -version = "1.1.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "exa-py" }, - { name = "langchain-core" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/94/69/f956c20fb8a73185063f8c54b559fc65562939a25bb58a16ad97ec8640d3/langchain_exa-1.1.0.tar.gz", hash = "sha256:25a782c310b55475d4b40d50c2ed15a9d7b1e6c413fb958ebb570bba372bee7e", size = 107388, upload-time = "2026-03-26T17:00:10.059Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/5d/d0/cfce61b53b79974a4883ff7675fe516192ae715e0f925e063e5869b6a929/langchain_exa-1.1.0-py3-none-any.whl", hash = "sha256:7eb4e1b6004f74fe278467470a4e76ba3b74a17df13f64e64745f0780f63d845", size = 7972, upload-time = "2026-03-26T17:00:09.239Z" }, -] - [[package]] name = "langchain-google-genai" version = "4.3.2" @@ -1847,35 +1721,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/01/cb/4a2eb187b108a240d57cf8dcf67e818ca75365f769444bf5716e2823cd98/langchain_google_genai-4.3.2-py3-none-any.whl", hash = "sha256:f3b1c09b264612fd1735a9590987bfa0cccca0bc0111691543decb5a03b8667d", size = 72770, upload-time = "2026-07-27T16:27:38.052Z" }, ] -[[package]] -name = "langchain-huggingface" -version = "1.2.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "huggingface-hub" }, - { name = "langchain-core" }, - { name = "tokenizers" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/2c/e8/4068ad02179253f55958e59e442e5b6e8cb95ffc5e805cc4db0b1ef61d4e/langchain_huggingface-1.2.2.tar.gz", hash = "sha256:1dd91ec415190d2704e93ec149618e3145075863ba37e74afc9080d685dc2743", size = 255513, upload-time = "2026-04-16T19:57:41.046Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/0a/ed/648b87f9b67153ade616f360bf4145b76ed428b4adb89525938f611e9828/langchain_huggingface-1.2.2-py3-none-any.whl", hash = "sha256:f94944b0c0d5afc687568d426c87ed5236907464c41e72108ed76eee1a690f6d", size = 31926, upload-time = "2026-04-16T19:57:40.079Z" }, -] - -[[package]] -name = "langchain-litellm" -version = "0.7.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "cryptography" }, - { name = "httpx" }, - { name = "langchain-core" }, - { name = "litellm" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/72/24/473283e69791fb35e11126c11e7347ffbf110c2dfcebebe90bd974bc7348/langchain_litellm-0.7.0.tar.gz", hash = "sha256:d3b8d0e6f65132f048fbe9d706e5334d45830e3c49aa033d32c37c6683ad2ceb", size = 345959, upload-time = "2026-06-15T10:00:36.437Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9b/d7/73ffd47f1e4bfe4649f25a58229fca4e0162c2f946c9f8f9ae5eb44e5c3c/langchain_litellm-0.7.0-py3-none-any.whl", hash = "sha256:5f67e456bc4e14e1247aa5a30e9da08d61d390aee66ff97e0113bfcb4334ff42", size = 25465, upload-time = "2026-06-15T10:00:37.428Z" }, -] - [[package]] name = "langchain-mcp-adapters" version = "0.2.2" @@ -1890,19 +1735,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/7d/2f/15d5e6c1765d8404a9cce38d8c81d7b33fb3392f9db5b992c000dddbd2a3/langchain_mcp_adapters-0.2.2-py3-none-any.whl", hash = "sha256:d08e64954e86281002653071b7430e0377c9a577cb4ac3143abfeb3e24ef8797", size = 23288, upload-time = "2026-03-16T17:13:29.073Z" }, ] -[[package]] -name = "langchain-milvus" -version = "0.3.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "langchain-core" }, - { name = "pymilvus" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/09/21/ecce785a24e61ba2c0f6249a5a68b969ccc053342f933aeab31a3f885f5e/langchain_milvus-0.3.3.tar.gz", hash = "sha256:406c2d88da133741f5cc3e2fea4b36386182b35500205c70d003382ded210e41", size = 35577, upload-time = "2026-01-05T10:01:16.386Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/be/5d/6a0dac51ca2343332d5de9c79686d54f905d225b173a8e1b03ae6d35982a/langchain_milvus-0.3.3-py3-none-any.whl", hash = "sha256:6e12f15453372dd48836978faa4a149de79c721df3322229ad732a5e628e8e97", size = 38962, upload-time = "2026-01-05T10:01:15.186Z" }, -] - [[package]] name = "langchain-nvidia-ai-endpoints" version = "1.4.3" @@ -1917,27 +1749,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/64/de/1f0a9a7b464a212c5f8e761f445f7c539c38956fe4e178e19a4a9a27c745/langchain_nvidia_ai_endpoints-1.4.3-py3-none-any.whl", hash = "sha256:f71966a079f1800ae292b4add953509481d149dc3bc4a3f60b9c09742642d043", size = 64484, upload-time = "2026-07-02T00:38:04.983Z" }, ] -[[package]] -name = "langchain-oci" -version = "0.3.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "aiohttp" }, - { name = "langchain" }, - { name = "langchain-core" }, - { name = "langchain-openai" }, - { name = "langgraph" }, - { name = "numpy" }, - { name = "oci" }, - { name = "oci-openai" }, - { name = "openai" }, - { name = "pydantic" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/06/48/fe638fdc55fd78b40a5017a0da8f52844f100003f86a7656406fab1f5f3d/langchain_oci-0.3.1.tar.gz", hash = "sha256:9a6bec356dab1b082b3c3d826fe0c9f28fb6b755831621493c1262e423d564d0", size = 113641, upload-time = "2026-07-17T19:35:26.391Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/6c/6c/ecc94beebd38e5f9380ea8a4ce83edd5ef2d073e4b257009cd1c5b2b6353/langchain_oci-0.3.1-py3-none-any.whl", hash = "sha256:27a5eddfded365ac39e76008833c7e25a7da61424f969d6c8a1b02ad924ce2bc", size = 141912, upload-time = "2026-07-17T19:35:25.017Z" }, -] - [[package]] name = "langchain-openai" version = "1.4.1" @@ -2083,34 +1894,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/82/3d/14ce75ef66813643812f3093ab17e46d3a206942ce7376d31ec2d36229e7/lark-1.3.1-py3-none-any.whl", hash = "sha256:c629b661023a014c37da873b4ff58a817398d12635d3bbb2c5a03be7fe5d1e12", size = 113151, upload-time = "2025-10-27T18:25:54.882Z" }, ] -[[package]] -name = "litellm" -version = "1.95.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "aiohttp" }, - { name = "click" }, - { name = "fastuuid" }, - { name = "httpx" }, - { name = "importlib-metadata" }, - { name = "jinja2" }, - { name = "jsonschema" }, - { name = "openai" }, - { name = "pydantic" }, - { name = "python-dotenv" }, - { name = "tiktoken" }, - { name = "tokenizers" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/0e/96/8cdfb9aaf584b57af35a0423c111a1c1264a78b548cebbb5ed96defacdab/litellm-1.95.0.tar.gz", hash = "sha256:0ef126d52c7a559f8353e50d60fd0d5e7e6c8767ad54df25ddaf79b9edca1afc", size = 17513577, upload-time = "2026-08-02T02:52:49.465Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/33/d0/ad0272853cc450f8bb4a40a93d206e767e18ac2ff3f91870374e1d9fc090/litellm-1.95.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:cb667f84f08520f32b076e03c7a3fa51bf3f7e8b641dade34ab046bf00314d6b", size = 26421359, upload-time = "2026-08-02T02:52:16.048Z" }, - { url = "https://files.pythonhosted.org/packages/02/c1/4301aa8ef6d2fb0e4a2b8dec973d7c4499f680b26d2e1b77643864235a4b/litellm-1.95.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:1bdf7153557cc0851fa9477b137fde476c56d5de92a5778ecfc6c3a75439a4e1", size = 26300401, upload-time = "2026-08-02T02:52:19.501Z" }, - { url = "https://files.pythonhosted.org/packages/7c/3d/6cd087bd541f18d924f17bd8e1bb68a7f9d73d03274c5339f9de563bc992/litellm-1.95.0-cp312-cp312-win_amd64.whl", hash = "sha256:62cc5d834e8223dbd16c9ad0b46c73354b6d67cc7fa0eba2764ce65b3b8c474f", size = 24917446, upload-time = "2026-08-02T02:52:23.119Z" }, - { url = "https://files.pythonhosted.org/packages/fd/47/719785f65b01779cf7568c329430c93b2e7832498deb3deec53bdd106f8d/litellm-1.95.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:9d80a9adc506bfce48145621d6649e3fd428407811eb00211bcce33344054701", size = 26422310, upload-time = "2026-08-02T02:52:26.626Z" }, - { url = "https://files.pythonhosted.org/packages/55/48/06447e1125d7ae31bd24d34d2af2833b15aed79dc5f7e8b45862c1d06af8/litellm-1.95.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:cf014ff515825ad49937b4cdf95616270789311db7841d16702e0a5b1ac5b067", size = 26300935, upload-time = "2026-08-02T02:52:30.032Z" }, - { url = "https://files.pythonhosted.org/packages/45/6f/388f85ebcb4e239dc738cab99307051d5a8a69d907023b0dbb200ee95226/litellm-1.95.0-cp313-cp313-win_amd64.whl", hash = "sha256:c73df441153e585832d4e90e3717d17ae888b269daa71d723336369e81ef884b", size = 24917355, upload-time = "2026-08-02T02:52:33.593Z" }, -] - [[package]] name = "lxml" version = "6.1.1" @@ -2414,8 +2197,8 @@ dependencies = [ [package.metadata] requires-dist = [ - { name = "nvidia-nat-core", specifier = ">=1.8.0,<1.9" }, - { name = "nvidia-nat-langchain", specifier = ">=1.8.0,<1.9" }, + { name = "nvidia-nat-core", specifier = ">=1.9.0a20260811,<1.10" }, + { name = "nvidia-nat-langchain", specifier = ">=1.9.0a20260811,<1.10" }, ] [[package]] @@ -2427,7 +2210,7 @@ dependencies = [ ] [package.metadata] -requires-dist = [{ name = "nvidia-nat-core", specifier = ">=1.8.0,<1.9" }] +requires-dist = [{ name = "nvidia-nat-core", specifier = ">=1.9.0a20260811,<1.10" }] [[package]] name = "nemo-agents-example-email-security" @@ -2438,7 +2221,7 @@ dependencies = [ ] [package.metadata] -requires-dist = [{ name = "nvidia-nat-core", specifier = ">=1.8.0,<1.9" }] +requires-dist = [{ name = "nvidia-nat-core", specifier = ">=1.9.0a20260811,<1.10" }] [[package]] name = "nemo-agents-plugin" @@ -2459,8 +2242,12 @@ dependencies = [ { name = "nemo-optimization-plugin" }, { name = "nemo-platform" }, { name = "nemo-platform-plugin" }, + { name = "nvidia-nat-atif" }, + { name = "nvidia-nat-config-optimizer" }, { name = "nvidia-nat-core" }, + { name = "nvidia-nat-eval" }, { name = "nvidia-nat-langchain" }, + { name = "nvidia-nat-opentelemetry" }, { name = "pyyaml" }, { name = "rich" }, ] @@ -2480,13 +2267,17 @@ requires-dist = [ { name = "nemo-agents-example-email-phishing", editable = "../../plugins/nemo-agents/examples/email-phishing-analyzer" }, { name = "nemo-agents-example-email-security", editable = "../../plugins/nemo-agents/examples/email-security-analyst" }, { name = "nemo-deployments-plugin", editable = "../../plugins/nemo-deployments" }, - { name = "nemo-fabric", extras = ["claude", "codex", "deepagents", "relay"], git = "https://github.com/NVIDIA/NeMo-Fabric.git?rev=55450ffb7c16f895316c5acc91fc23b36f4427b2" }, - { name = "nemo-fabric-adapters-hermes", marker = "python_full_version < '3.14'", git = "https://github.com/NVIDIA/NeMo-Fabric.git?subdirectory=adapters%2Fhermes&rev=55450ffb7c16f895316c5acc91fc23b36f4427b2" }, + { name = "nemo-fabric", extras = ["claude", "codex", "deepagents", "relay"], specifier = ">=0.2.0,<0.3.0" }, + { name = "nemo-fabric-adapters-hermes", marker = "python_full_version < '3.14'", specifier = ">=0.2.0,<0.3.0" }, { name = "nemo-optimization-plugin", editable = "../../plugins/nemo-optimization" }, { name = "nemo-platform", editable = "../../packages/nemo_platform" }, { name = "nemo-platform-plugin", editable = "../../packages/nemo_platform_plugin" }, - { name = "nvidia-nat-core", specifier = ">=1.8.0,<1.9" }, - { name = "nvidia-nat-langchain", specifier = ">=1.8.0,<1.9" }, + { name = "nvidia-nat-atif", specifier = ">=1.9.0a20260811,<1.10" }, + { name = "nvidia-nat-config-optimizer", specifier = ">=1.9.0a20260811,<1.10" }, + { name = "nvidia-nat-core", specifier = ">=1.9.0a20260811,<1.10" }, + { name = "nvidia-nat-eval", specifier = ">=1.9.0a20260811,<1.10" }, + { name = "nvidia-nat-langchain", specifier = ">=1.9.0a20260811,<1.10" }, + { name = "nvidia-nat-opentelemetry", specifier = ">=1.9.0a20260811,<1.10" }, { name = "pytest", marker = "extra == 'test'", specifier = ">=8.0" }, { name = "pytest-asyncio", marker = "extra == 'test'", specifier = ">=0.23" }, { name = "python-on-whales", marker = "extra == 'container'", specifier = ">=0.60" }, @@ -2539,6 +2330,7 @@ name = "nemo-evaluator-sdk" version = "0.0.0" source = { editable = "../../packages/nemo_evaluator_sdk" } dependencies = [ + { name = "httpx" }, { name = "jinja2" }, { name = "jsonpath-ng" }, { name = "jsonschema" }, @@ -2558,16 +2350,17 @@ dependencies = [ [package.metadata] requires-dist = [ { name = "harbor", marker = "python_full_version >= '3.12' and extra == 'harbor'", specifier = ">=0.16.1" }, + { name = "httpx", specifier = ">=0.27.0,<1" }, { name = "jinja2", specifier = ">=3.1.6" }, { name = "jsonpath-ng", specifier = ">=1.7.0" }, { name = "jsonschema", specifier = ">=4.23.0" }, { name = "langchain-nvidia-ai-endpoints", specifier = ">=1.4.3,<2.0.0" }, { name = "langchain-openai", specifier = ">=1.3.5" }, - { name = "nemo-fabric", git = "https://github.com/NVIDIA/NeMo-Fabric.git?rev=55450ffb7c16f895316c5acc91fc23b36f4427b2" }, - { name = "nemo-fabric", extras = ["claude", "codex"], marker = "extra == 'fabric'", git = "https://github.com/NVIDIA/NeMo-Fabric.git?rev=55450ffb7c16f895316c5acc91fc23b36f4427b2" }, - { name = "nemo-fabric-adapters-hermes", marker = "python_full_version < '3.14' and extra == 'fabric'", git = "https://github.com/NVIDIA/NeMo-Fabric.git?subdirectory=adapters%2Fhermes&rev=55450ffb7c16f895316c5acc91fc23b36f4427b2" }, + { name = "nemo-fabric", specifier = ">=0.2.0,<0.3.0" }, + { name = "nemo-fabric", extras = ["claude", "codex"], marker = "extra == 'fabric'", specifier = ">=0.2.0,<0.3.0" }, + { name = "nemo-fabric-adapters-hermes", marker = "python_full_version < '3.14' and extra == 'fabric'", specifier = ">=0.2.0,<0.3.0" }, { name = "nemo-platform-sdk", marker = "extra == 'nemo-platform'", editable = "../../sdk/python/nemo-platform" }, - { name = "nemo-relay", specifier = ">=0.6.0,<0.7" }, + { name = "nemo-relay", specifier = ">=0.7.2,<0.8" }, { name = "openai", specifier = ">=1.61.0" }, { name = "openai-agents", extras = ["docker"], marker = "extra == 'agent-runtimes'", specifier = ">=0.17.3,<0.18" }, { name = "pandas", specifier = ">=1.5.3" }, @@ -2588,10 +2381,13 @@ dev = [ [[package]] name = "nemo-fabric" version = "0.2.0" -source = { git = "https://github.com/NVIDIA/NeMo-Fabric.git?rev=55450ffb7c16f895316c5acc91fc23b36f4427b2#55450ffb7c16f895316c5acc91fc23b36f4427b2" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "nemo-fabric-runtime" }, ] +wheels = [ + { url = "https://files.pythonhosted.org/packages/56/f5/56ef95985c1edb884a997af31d00e6a4626e4dc58af9f3d0cca36d1c37f6/nemo_fabric-0.2.0-py3-none-any.whl", hash = "sha256:7b9805b02e71d37505ed2ae4f16af264dc20dac5ed2739b5efa0b677721f440e", size = 7692, upload-time = "2026-08-19T21:41:38.814Z" }, +] [package.optional-dependencies] claude = [ @@ -2607,49 +2403,77 @@ relay = [ { name = "nemo-relay" }, ] +[[package]] +name = "nemo-fabric-adapter-contract" +version = "0.2.0" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/43/98/d5abfa762254670684b19054ce3e3e8cd19df708464fdc2901a7b7aca166/nemo_fabric_adapter_contract-0.2.0-py3-none-any.whl", hash = "sha256:3783f781432382adb2d782384dc1ab367093d0bcf7ff33c2857a93f831dd5921", size = 15736, upload-time = "2026-08-19T21:41:31.986Z" }, +] + [[package]] name = "nemo-fabric-adapters-claude" version = "0.2.0" -source = { git = "https://github.com/NVIDIA/NeMo-Fabric.git?subdirectory=adapters%2Fclaude&rev=55450ffb7c16f895316c5acc91fc23b36f4427b2#55450ffb7c16f895316c5acc91fc23b36f4427b2" } +source = { registry = "https://pypi.org/simple" } dependencies = [ + { name = "nemo-fabric-adapter-contract" }, { name = "nemo-fabric-adapters-common" }, { name = "tomli-w" }, ] +wheels = [ + { url = "https://files.pythonhosted.org/packages/f0/6e/770d9e3e56d5fad8afce3075cedbb9e93b6ea1cb4811f0035eefc8c33a13/nemo_fabric_adapters_claude-0.2.0-py3-none-any.whl", hash = "sha256:cf3f6feb6a65652c0b0aeeafa264e89ae24104cda1d5f60ab8e8b495d0492d9b", size = 18562, upload-time = "2026-08-19T21:41:41.405Z" }, +] [package.optional-dependencies] harness = [ { name = "claude-agent-sdk" }, + { name = "nemo-relay-cli-bin" }, ] [[package]] name = "nemo-fabric-adapters-codex" version = "0.2.0" -source = { git = "https://github.com/NVIDIA/NeMo-Fabric.git?subdirectory=adapters%2Fcodex&rev=55450ffb7c16f895316c5acc91fc23b36f4427b2#55450ffb7c16f895316c5acc91fc23b36f4427b2" } +source = { registry = "https://pypi.org/simple" } dependencies = [ + { name = "nemo-fabric-adapter-contract" }, { name = "nemo-fabric-adapters-common" }, { name = "tomli-w" }, ] +wheels = [ + { url = "https://files.pythonhosted.org/packages/02/25/7e799d8a511cc62b7538fef3210b132c32487d0678fbc1f123080cabed98/nemo_fabric_adapters_codex-0.2.0-py3-none-any.whl", hash = "sha256:86a21640ae7b3c31e8b123c2872a9a43113b91df4a87e8a81200acdc45af925b", size = 19880, upload-time = "2026-08-19T21:41:35.346Z" }, +] [package.optional-dependencies] harness = [ + { name = "nemo-relay-cli-bin" }, { name = "openai-codex" }, ] [[package]] name = "nemo-fabric-adapters-common" version = "0.2.0" -source = { git = "https://github.com/NVIDIA/NeMo-Fabric.git?subdirectory=adapters%2Fcommon&rev=55450ffb7c16f895316c5acc91fc23b36f4427b2#55450ffb7c16f895316c5acc91fc23b36f4427b2" } +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "nemo-fabric-adapter-contract" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/e5/4f/d43966b62b77a60df4650d308c96cdd0bdfcc18fa5cb9e1bf8b51fe70129/nemo_fabric_adapters_common-0.2.0-py3-none-any.whl", hash = "sha256:b11448e83236a71ee0dfc1b7421ebf80cf9fca4ee8fc5414daf547c1859dfd5a", size = 24506, upload-time = "2026-08-19T21:41:40.505Z" }, +] [[package]] name = "nemo-fabric-adapters-deepagents" version = "0.2.0" -source = { git = "https://github.com/NVIDIA/NeMo-Fabric.git?subdirectory=adapters%2Fdeepagents&rev=55450ffb7c16f895316c5acc91fc23b36f4427b2#55450ffb7c16f895316c5acc91fc23b36f4427b2" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "langchain-mcp-adapters" }, { name = "langchain-openai" }, { name = "langgraph-checkpoint-sqlite" }, + { name = "nemo-fabric-adapter-contract" }, { name = "nemo-fabric-adapters-common" }, ] +wheels = [ + { url = "https://files.pythonhosted.org/packages/52/70/d87a61abe89dbd0b4162d84aec3da22670bb6750b72c44025e04d92aea8e/nemo_fabric_adapters_deepagents-0.2.0-py3-none-any.whl", hash = "sha256:9638f57a0815148296c2c7ff7201d6b9455fd80307cc8b8181b380e77a81db60", size = 21189, upload-time = "2026-08-19T21:41:25.422Z" }, +] [package.optional-dependencies] harness = [ @@ -2661,19 +2485,29 @@ harness = [ [[package]] name = "nemo-fabric-adapters-hermes" version = "0.2.0" -source = { git = "https://github.com/NVIDIA/NeMo-Fabric.git?subdirectory=adapters%2Fhermes&rev=55450ffb7c16f895316c5acc91fc23b36f4427b2#55450ffb7c16f895316c5acc91fc23b36f4427b2" } +source = { registry = "https://pypi.org/simple" } dependencies = [ + { name = "nemo-fabric-adapter-contract" }, { name = "nemo-fabric-adapters-common" }, ] +wheels = [ + { url = "https://files.pythonhosted.org/packages/79/f2/b1230a2e0af9969ce42425b3acc29aa930199595e63cf20526c731d4d726/nemo_fabric_adapters_hermes-0.2.0-py3-none-any.whl", hash = "sha256:d7c0c522a069545b6a0e49e3e84b320caddb11db02584a992486a8d938ac0ae0", size = 17582, upload-time = "2026-08-19T21:41:32.456Z" }, +] [[package]] name = "nemo-fabric-runtime" version = "0.2.0" -source = { git = "https://github.com/NVIDIA/NeMo-Fabric.git?subdirectory=python&rev=55450ffb7c16f895316c5acc91fc23b36f4427b2#55450ffb7c16f895316c5acc91fc23b36f4427b2" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pydantic" }, { name = "typing-extensions" }, ] +wheels = [ + { url = "https://files.pythonhosted.org/packages/03/f2/a42cc99737fd6927e98091f1856f757c785e6b5055c5e5d1ad22fddd8d56/nemo_fabric_runtime-0.2.0-cp311-abi3-macosx_11_0_arm64.whl", hash = "sha256:2bfac9275c6f9ef1c5e34c647f1744fb0000bd0a0e86448441b8d6b38ae3a3c7", size = 2796801, upload-time = "2026-08-19T21:41:30.743Z" }, + { url = "https://files.pythonhosted.org/packages/70/92/6a96475e8f0bcfed0332c587bf77835dd957953240729604b6794d71d9ab/nemo_fabric_runtime-0.2.0-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:689ded0bec073290fe80c847ec0549e596d2d7cf8747db29263d3ed7bbc969ad", size = 2681438, upload-time = "2026-08-19T21:41:55.521Z" }, + { url = "https://files.pythonhosted.org/packages/f1/1d/1fa9522134a6e5c0a9461e73d3ecdb28ea6df86b64d0bace4122bf5f9cf3/nemo_fabric_runtime-0.2.0-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df15419ccaec59fc35f1f68720e771b2588b2c69d658cae05289d8e597064c33", size = 2876665, upload-time = "2026-08-19T21:42:16.305Z" }, + { url = "https://files.pythonhosted.org/packages/f9/4c/1b3c159d6a98f0650ec169025bc712c7e2374dfeda8e57cc9b09382d81d7/nemo_fabric_runtime-0.2.0-cp311-abi3-win_amd64.whl", hash = "sha256:79ff5f982bd1c551623d366902527e0254ad5efa0dc2f237168d386258109041", size = 2823868, upload-time = "2026-08-19T21:42:42.73Z" }, +] [[package]] name = "nemo-optimization-plugin" @@ -2790,12 +2624,12 @@ requires-dist = [ { name = "cloudpickle", marker = "extra == 'nemo-evaluator-plugin'", specifier = ">=3.1.1" }, { name = "cloudpickle", marker = "extra == 'plugins'", specifier = ">=3.1.1" }, { name = "cloudpickle", marker = "extra == 'services'", specifier = ">=3.1.1" }, - { name = "data-designer", marker = "extra == 'all'", specifier = "==0.8.0" }, - { name = "data-designer", marker = "extra == 'data-designer-nemo'", specifier = "==0.8.0" }, - { name = "data-designer", marker = "extra == 'nemo-anonymizer-plugin'", specifier = "==0.8.0" }, - { name = "data-designer", marker = "extra == 'nemo-data-designer-plugin'", specifier = "==0.8.0" }, - { name = "data-designer", marker = "extra == 'plugins'", specifier = "==0.8.0" }, - { name = "data-designer", marker = "extra == 'services'", specifier = "==0.8.0" }, + { name = "data-designer", marker = "extra == 'all'", specifier = "==0.9.1" }, + { name = "data-designer", marker = "extra == 'data-designer-nemo'", specifier = "==0.9.1" }, + { name = "data-designer", marker = "extra == 'nemo-anonymizer-plugin'", specifier = "==0.9.1" }, + { name = "data-designer", marker = "extra == 'nemo-data-designer-plugin'", specifier = "==0.9.1" }, + { name = "data-designer", marker = "extra == 'plugins'", specifier = "==0.9.1" }, + { name = "data-designer", marker = "extra == 'services'", specifier = "==0.9.1" }, { name = "data-designer-nemo", marker = "extra == 'all'", editable = "../../packages/data_designer_nemo" }, { name = "data-designer-nemo", marker = "extra == 'nemo-anonymizer-plugin'", editable = "../../packages/data_designer_nemo" }, { name = "data-designer-nemo", marker = "extra == 'nemo-data-designer-plugin'", editable = "../../packages/data_designer_nemo" }, @@ -2808,6 +2642,7 @@ requires-dist = [ { name = "distro", marker = "extra == 'nemo-platform-sdk'", specifier = ">=1.7.0,<2" }, { name = "docker", marker = "extra == 'all'", specifier = ">=7.1.0" }, { name = "docker", marker = "extra == 'core-service'", specifier = ">=7.1.0" }, + { name = "docker", marker = "extra == 'intake-service'", specifier = ">=7.1.0" }, { name = "docker", marker = "extra == 'jobs-service'", specifier = ">=7.1.0" }, { name = "docker", marker = "extra == 'nemo-platform-sdk'", specifier = ">=7.0.0" }, { name = "docker", marker = "extra == 'services'", specifier = ">=7.1.0" }, @@ -2823,6 +2658,7 @@ requires-dist = [ { name = "fastapi", marker = "extra == 'all'" }, { name = "fastapi", marker = "extra == 'all'", specifier = ">=0.100.0" }, { name = "fastapi", marker = "extra == 'all'", specifier = ">=0.109.0" }, + { name = "fastapi", marker = "extra == 'all'", specifier = ">=0.115" }, { name = "fastapi", marker = "extra == 'all'", specifier = ">=0.115.5,<1.0.0" }, { name = "fastapi", marker = "extra == 'all'", specifier = ">=0.115.8" }, { name = "fastapi", marker = "extra == 'core-service'", specifier = ">=0.100.0" }, @@ -2836,14 +2672,18 @@ requires-dist = [ { name = "fastapi", marker = "extra == 'models-service'", specifier = ">=0.115.8" }, { name = "fastapi", marker = "extra == 'nemo-anonymizer-plugin'" }, { name = "fastapi", marker = "extra == 'nemo-data-designer-plugin'" }, + { name = "fastapi", marker = "extra == 'nemo-deployments-plugin'", specifier = ">=0.115" }, + { name = "fastapi", marker = "extra == 'nemo-insights-plugin'", specifier = ">=0.115" }, { name = "fastapi", marker = "extra == 'nemo-platform-plugin'", specifier = ">=0.115.4" }, { name = "fastapi", marker = "extra == 'nemo-safe-synthesizer-plugin'", specifier = ">=0.115.8" }, { name = "fastapi", marker = "extra == 'plugins'" }, + { name = "fastapi", marker = "extra == 'plugins'", specifier = ">=0.115" }, { name = "fastapi", marker = "extra == 'plugins'", specifier = ">=0.115.8" }, { name = "fastapi", marker = "extra == 'secrets-service'", specifier = ">=0.115.8" }, { name = "fastapi", marker = "extra == 'services'" }, { name = "fastapi", marker = "extra == 'services'", specifier = ">=0.100.0" }, { name = "fastapi", marker = "extra == 'services'", specifier = ">=0.109.0" }, + { name = "fastapi", marker = "extra == 'services'", specifier = ">=0.115" }, { name = "fastapi", marker = "extra == 'services'", specifier = ">=0.115.5,<1.0.0" }, { name = "fastapi", marker = "extra == 'services'", specifier = ">=0.115.8" }, { name = "fastapi", extras = ["standard"], marker = "extra == 'all'", specifier = ">=0.115.4" }, @@ -2876,6 +2716,15 @@ requires-dist = [ { name = "gunicorn", marker = "extra == 'nemo-safe-synthesizer-plugin'", specifier = ">=23.0.0" }, { name = "gunicorn", marker = "extra == 'plugins'", specifier = ">=23.0.0" }, { name = "gunicorn", marker = "extra == 'services'", specifier = ">=23.0.0" }, + { name = "harbor", marker = "extra == 'all'", specifier = ">=0.16" }, + { name = "harbor", marker = "extra == 'all'", specifier = ">=0.18" }, + { name = "harbor", marker = "extra == 'nemo-eval-author-plugin'", specifier = ">=0.18" }, + { name = "harbor", marker = "extra == 'nemo-experimentalist-plugin'", specifier = ">=0.16" }, + { name = "harbor", marker = "extra == 'plugins'", specifier = ">=0.16" }, + { name = "harbor", marker = "extra == 'plugins'", specifier = ">=0.18" }, + { name = "harbor", marker = "extra == 'services'", specifier = ">=0.16" }, + { name = "harbor", marker = "extra == 'services'", specifier = ">=0.18" }, + { name = "httpx", marker = "extra == 'all'" }, { name = "httpx", marker = "extra == 'all'", specifier = ">=0.27.0" }, { name = "httpx", marker = "extra == 'all'", specifier = ">=0.27.2" }, { name = "httpx", marker = "extra == 'auditor-service'", specifier = ">=0.28.1,<1.0.0" }, @@ -2886,10 +2735,16 @@ requires-dist = [ { name = "httpx", marker = "extra == 'nemo-anonymizer-plugin'", specifier = ">=0.27" }, { name = "httpx", marker = "extra == 'nemo-auditor-plugin'", specifier = ">=0.27" }, { name = "httpx", marker = "extra == 'nemo-data-designer-plugin'", specifier = ">=0.27" }, + { name = "httpx", marker = "extra == 'nemo-deployments-plugin'", specifier = ">=0.27" }, + { name = "httpx", marker = "extra == 'nemo-evaluator-sdk'", specifier = ">=0.27.0,<1" }, + { name = "httpx", marker = "extra == 'nemo-experimentalist-plugin'" }, + { name = "httpx", marker = "extra == 'nemo-insights-plugin'" }, { name = "httpx", marker = "extra == 'nemo-platform-sdk'", specifier = ">=0.23.0,<1" }, { name = "httpx", marker = "extra == 'nemo-safe-synthesizer-plugin'", specifier = ">=0.27.2" }, + { name = "httpx", marker = "extra == 'plugins'" }, { name = "httpx", marker = "extra == 'plugins'", specifier = ">=0.27" }, { name = "httpx", marker = "extra == 'plugins'", specifier = ">=0.27.2" }, + { name = "httpx", marker = "extra == 'services'" }, { name = "httpx", marker = "extra == 'services'", specifier = ">=0.27.0" }, { name = "httpx", marker = "extra == 'services'", specifier = ">=0.27.2" }, { name = "httpx", marker = "extra == 'switchyard-vendored'", specifier = ">=0.28.1,<1.0" }, @@ -2951,27 +2806,41 @@ requires-dist = [ { name = "nemo-agents-example-calculator", marker = "extra == 'nemo-agents-plugin'", editable = "../../plugins/nemo-agents/examples/calculator-agent" }, { name = "nemo-agents-example-calculator", marker = "extra == 'plugins'", editable = "../../plugins/nemo-agents/examples/calculator-agent" }, { name = "nemo-agents-example-calculator", marker = "extra == 'services'", editable = "../../plugins/nemo-agents/examples/calculator-agent" }, - { name = "nemo-anonymizer", marker = "extra == 'all'", specifier = ">=0.3.1" }, - { name = "nemo-anonymizer", marker = "extra == 'nemo-anonymizer-plugin'", specifier = ">=0.3.1" }, - { name = "nemo-anonymizer", marker = "extra == 'plugins'", specifier = ">=0.3.1" }, - { name = "nemo-anonymizer", marker = "extra == 'services'", specifier = ">=0.3.1" }, + { name = "nemo-anonymizer", marker = "extra == 'all'", specifier = "==0.3.3" }, + { name = "nemo-anonymizer", marker = "extra == 'nemo-anonymizer-plugin'", specifier = "==0.3.3" }, + { name = "nemo-anonymizer", marker = "extra == 'plugins'", specifier = "==0.3.3" }, + { name = "nemo-anonymizer", marker = "extra == 'services'", specifier = "==0.3.3" }, { name = "nemo-auditor-plugin", marker = "extra == 'all'", editable = "../../plugins/nemo-auditor" }, { name = "nemo-auditor-plugin", marker = "extra == 'platform-seed-service'", editable = "../../plugins/nemo-auditor" }, { name = "nemo-auditor-plugin", marker = "extra == 'services'", editable = "../../plugins/nemo-auditor" }, + { name = "nemo-deployments-plugin", marker = "extra == 'all'", editable = "../../plugins/nemo-deployments" }, + { name = "nemo-deployments-plugin", marker = "extra == 'nemo-agents-plugin'", editable = "../../plugins/nemo-deployments" }, + { name = "nemo-deployments-plugin", marker = "extra == 'plugins'", editable = "../../plugins/nemo-deployments" }, + { name = "nemo-deployments-plugin", marker = "extra == 'services'", editable = "../../plugins/nemo-deployments" }, { name = "nemo-evaluator-sdk", marker = "extra == 'all'", editable = "../../packages/nemo_evaluator_sdk" }, { name = "nemo-evaluator-sdk", marker = "extra == 'nemo-evaluator-plugin'", editable = "../../packages/nemo_evaluator_sdk" }, + { name = "nemo-evaluator-sdk", marker = "extra == 'nemo-experimentalist-plugin'", editable = "../../packages/nemo_evaluator_sdk" }, { name = "nemo-evaluator-sdk", marker = "extra == 'nemo-optimization-plugin'", editable = "../../packages/nemo_evaluator_sdk" }, { name = "nemo-evaluator-sdk", marker = "extra == 'plugins'", editable = "../../packages/nemo_evaluator_sdk" }, { name = "nemo-evaluator-sdk", marker = "extra == 'services'", editable = "../../packages/nemo_evaluator_sdk" }, - { name = "nemo-fabric", marker = "extra == 'nemo-evaluator-sdk'", git = "https://github.com/NVIDIA/NeMo-Fabric.git?rev=55450ffb7c16f895316c5acc91fc23b36f4427b2" }, - { name = "nemo-fabric", extras = ["claude", "codex", "deepagents", "relay"], marker = "extra == 'all'", git = "https://github.com/NVIDIA/NeMo-Fabric.git?rev=55450ffb7c16f895316c5acc91fc23b36f4427b2" }, - { name = "nemo-fabric", extras = ["claude", "codex", "deepagents", "relay"], marker = "extra == 'nemo-agents-plugin'", git = "https://github.com/NVIDIA/NeMo-Fabric.git?rev=55450ffb7c16f895316c5acc91fc23b36f4427b2" }, - { name = "nemo-fabric", extras = ["claude", "codex", "deepagents", "relay"], marker = "extra == 'plugins'", git = "https://github.com/NVIDIA/NeMo-Fabric.git?rev=55450ffb7c16f895316c5acc91fc23b36f4427b2" }, - { name = "nemo-fabric", extras = ["claude", "codex", "deepagents", "relay"], marker = "extra == 'services'", git = "https://github.com/NVIDIA/NeMo-Fabric.git?rev=55450ffb7c16f895316c5acc91fc23b36f4427b2" }, - { name = "nemo-fabric-adapters-hermes", marker = "python_full_version < '3.14' and extra == 'all'", git = "https://github.com/NVIDIA/NeMo-Fabric.git?subdirectory=adapters%2Fhermes&rev=55450ffb7c16f895316c5acc91fc23b36f4427b2" }, - { name = "nemo-fabric-adapters-hermes", marker = "python_full_version < '3.14' and extra == 'nemo-agents-plugin'", git = "https://github.com/NVIDIA/NeMo-Fabric.git?subdirectory=adapters%2Fhermes&rev=55450ffb7c16f895316c5acc91fc23b36f4427b2" }, - { name = "nemo-fabric-adapters-hermes", marker = "python_full_version < '3.14' and extra == 'plugins'", git = "https://github.com/NVIDIA/NeMo-Fabric.git?subdirectory=adapters%2Fhermes&rev=55450ffb7c16f895316c5acc91fc23b36f4427b2" }, - { name = "nemo-fabric-adapters-hermes", marker = "python_full_version < '3.14' and extra == 'services'", git = "https://github.com/NVIDIA/NeMo-Fabric.git?subdirectory=adapters%2Fhermes&rev=55450ffb7c16f895316c5acc91fc23b36f4427b2" }, + { name = "nemo-experimentalist-plugin", marker = "extra == 'all'", editable = "../../plugins/nemo-experimentalist" }, + { name = "nemo-experimentalist-plugin", marker = "extra == 'nemo-eval-author-plugin'", editable = "../../plugins/nemo-experimentalist" }, + { name = "nemo-experimentalist-plugin", marker = "extra == 'plugins'", editable = "../../plugins/nemo-experimentalist" }, + { name = "nemo-experimentalist-plugin", marker = "extra == 'services'", editable = "../../plugins/nemo-experimentalist" }, + { name = "nemo-fabric", marker = "extra == 'nemo-evaluator-sdk'", specifier = ">=0.2.0,<0.3.0" }, + { name = "nemo-fabric", extras = ["claude", "codex", "deepagents", "relay"], marker = "extra == 'all'", specifier = ">=0.2.0,<0.3.0" }, + { name = "nemo-fabric", extras = ["claude", "codex", "deepagents", "relay"], marker = "extra == 'nemo-agents-plugin'", specifier = ">=0.2.0,<0.3.0" }, + { name = "nemo-fabric", extras = ["claude", "codex", "deepagents", "relay"], marker = "extra == 'plugins'", specifier = ">=0.2.0,<0.3.0" }, + { name = "nemo-fabric", extras = ["claude", "codex", "deepagents", "relay"], marker = "extra == 'services'", specifier = ">=0.2.0,<0.3.0" }, + { name = "nemo-fabric-adapters-hermes", marker = "python_full_version < '3.14' and extra == 'all'", specifier = ">=0.2.0,<0.3.0" }, + { name = "nemo-fabric-adapters-hermes", marker = "python_full_version < '3.14' and extra == 'nemo-agents-plugin'", specifier = ">=0.2.0,<0.3.0" }, + { name = "nemo-fabric-adapters-hermes", marker = "python_full_version < '3.14' and extra == 'plugins'", specifier = ">=0.2.0,<0.3.0" }, + { name = "nemo-fabric-adapters-hermes", marker = "python_full_version < '3.14' and extra == 'services'", specifier = ">=0.2.0,<0.3.0" }, + { name = "nemo-insights-plugin", marker = "extra == 'all'", editable = "../../plugins/nemo-insights" }, + { name = "nemo-insights-plugin", marker = "extra == 'nemo-eval-author-plugin'", editable = "../../plugins/nemo-insights" }, + { name = "nemo-insights-plugin", marker = "extra == 'nemo-experimentalist-plugin'", editable = "../../plugins/nemo-insights" }, + { name = "nemo-insights-plugin", marker = "extra == 'plugins'", editable = "../../plugins/nemo-insights" }, + { name = "nemo-insights-plugin", marker = "extra == 'services'", editable = "../../plugins/nemo-insights" }, { name = "nemo-optimization-plugin", marker = "extra == 'all'", editable = "../../plugins/nemo-optimization" }, { name = "nemo-optimization-plugin", marker = "extra == 'nemo-agents-plugin'", editable = "../../plugins/nemo-optimization" }, { name = "nemo-optimization-plugin", marker = "extra == 'plugins'", editable = "../../plugins/nemo-optimization" }, @@ -2980,13 +2849,18 @@ requires-dist = [ { name = "nemo-platform-plugin", marker = "extra == 'all'", editable = "../../packages/nemo_platform_plugin" }, { name = "nemo-platform-plugin", marker = "extra == 'core-service'", editable = "../../packages/nemo_platform_plugin" }, { name = "nemo-platform-plugin", marker = "extra == 'inference-gateway-service'", editable = "../../packages/nemo_platform_plugin" }, + { name = "nemo-platform-plugin", marker = "extra == 'jobs-service'", editable = "../../packages/nemo_platform_plugin" }, { name = "nemo-platform-plugin", marker = "extra == 'models-service'", editable = "../../packages/nemo_platform_plugin" }, { name = "nemo-platform-plugin", marker = "extra == 'nemo-agents-plugin'", editable = "../../packages/nemo_platform_plugin" }, { name = "nemo-platform-plugin", marker = "extra == 'nemo-anonymizer-plugin'", editable = "../../packages/nemo_platform_plugin" }, { name = "nemo-platform-plugin", marker = "extra == 'nemo-auditor-plugin'", editable = "../../packages/nemo_platform_plugin" }, { name = "nemo-platform-plugin", marker = "extra == 'nemo-data-designer-plugin'", editable = "../../packages/nemo_platform_plugin" }, + { name = "nemo-platform-plugin", marker = "extra == 'nemo-deployments-plugin'", editable = "../../packages/nemo_platform_plugin" }, + { name = "nemo-platform-plugin", marker = "extra == 'nemo-eval-author-plugin'", editable = "../../packages/nemo_platform_plugin" }, { name = "nemo-platform-plugin", marker = "extra == 'nemo-evaluator-plugin'", editable = "../../packages/nemo_platform_plugin" }, + { name = "nemo-platform-plugin", marker = "extra == 'nemo-experimentalist-plugin'", editable = "../../packages/nemo_platform_plugin" }, { name = "nemo-platform-plugin", marker = "extra == 'nemo-guardrails-plugin'", editable = "../../packages/nemo_platform_plugin" }, + { name = "nemo-platform-plugin", marker = "extra == 'nemo-insights-plugin'", editable = "../../packages/nemo_platform_plugin" }, { name = "nemo-platform-plugin", marker = "extra == 'nemo-optimization-plugin'", editable = "../../packages/nemo_platform_plugin" }, { name = "nemo-platform-plugin", marker = "extra == 'nemo-platform-sdk'", editable = "../../packages/nemo_platform_plugin" }, { name = "nemo-platform-plugin", marker = "extra == 'nemo-safe-synthesizer-plugin'", editable = "../../packages/nemo_platform_plugin" }, @@ -2998,12 +2872,13 @@ requires-dist = [ { name = "nemo-platform-sdk", marker = "extra == 'all'", editable = "../../sdk/python/nemo-platform" }, { name = "nemo-platform-sdk", marker = "extra == 'core-service'", editable = "../../sdk/python/nemo-platform" }, { name = "nemo-platform-sdk", marker = "extra == 'entities-service'", editable = "../../sdk/python/nemo-platform" }, + { name = "nemo-platform-sdk", marker = "extra == 'nemo-deployments-plugin'", editable = "../../sdk/python/nemo-platform" }, { name = "nemo-platform-sdk", marker = "extra == 'nemo-evaluator-plugin'", editable = "../../sdk/python/nemo-platform" }, { name = "nemo-platform-sdk", marker = "extra == 'nemo-platform-plugin'", editable = "../../sdk/python/nemo-platform" }, { name = "nemo-platform-sdk", marker = "extra == 'nmp-common'", editable = "../../sdk/python/nemo-platform" }, { name = "nemo-platform-sdk", marker = "extra == 'plugins'", editable = "../../sdk/python/nemo-platform" }, { name = "nemo-platform-sdk", marker = "extra == 'services'", editable = "../../sdk/python/nemo-platform" }, - { name = "nemo-relay", marker = "extra == 'nemo-evaluator-sdk'", specifier = ">=0.6.0,<0.7" }, + { name = "nemo-relay", marker = "extra == 'nemo-evaluator-sdk'", specifier = ">=0.7.2,<0.8" }, { name = "nemo-safe-synthesizer", marker = "extra == 'all'", specifier = "==0.1.7" }, { name = "nemo-safe-synthesizer", marker = "extra == 'nemo-safe-synthesizer-plugin'", specifier = "==0.1.7" }, { name = "nemo-safe-synthesizer", marker = "extra == 'plugins'", specifier = "==0.1.7" }, @@ -3040,22 +2915,43 @@ requires-dist = [ { name = "nmp-guardrails", marker = "extra == 'all'", editable = "../../services/guardrails" }, { name = "nmp-guardrails", marker = "extra == 'platform-seed-service'", editable = "../../services/guardrails" }, { name = "nmp-guardrails", marker = "extra == 'services'", editable = "../../services/guardrails" }, + { name = "nooa", marker = "extra == 'all'", specifier = ">=0.0.9" }, + { name = "nooa", marker = "extra == 'nemo-experimentalist-plugin'", specifier = ">=0.0.9" }, + { name = "nooa", marker = "extra == 'nemo-insights-plugin'", specifier = ">=0.0.9" }, + { name = "nooa", marker = "extra == 'plugins'", specifier = ">=0.0.9" }, + { name = "nooa", marker = "extra == 'services'", specifier = ">=0.0.9" }, { name = "numpy", marker = "extra == 'all'", specifier = ">=1.26.0" }, { name = "numpy", marker = "extra == 'nemo-optimization-plugin'", specifier = ">=1.26.0" }, { name = "numpy", marker = "extra == 'plugins'", specifier = ">=1.26.0" }, { name = "numpy", marker = "extra == 'services'", specifier = ">=1.26.0" }, { name = "nvidia-ml-py", marker = "extra == 'nemo-platform-sdk'", specifier = ">=13.0.0" }, { name = "nvidia-ml-py", marker = "extra == 'nmp-common'", specifier = ">=13.0.0" }, - { name = "nvidia-nat-core", marker = "extra == 'all'", specifier = ">=1.8.0,<1.9" }, - { name = "nvidia-nat-core", marker = "extra == 'nemo-agents-example-calculator'", specifier = ">=1.8.0,<1.9" }, - { name = "nvidia-nat-core", marker = "extra == 'nemo-agents-plugin'", specifier = ">=1.8.0,<1.9" }, - { name = "nvidia-nat-core", marker = "extra == 'plugins'", specifier = ">=1.8.0,<1.9" }, - { name = "nvidia-nat-core", marker = "extra == 'services'", specifier = ">=1.8.0,<1.9" }, - { name = "nvidia-nat-langchain", marker = "extra == 'all'", specifier = ">=1.8.0,<1.9" }, - { name = "nvidia-nat-langchain", marker = "extra == 'nemo-agents-example-calculator'", specifier = ">=1.8.0,<1.9" }, - { name = "nvidia-nat-langchain", marker = "extra == 'nemo-agents-plugin'", specifier = ">=1.8.0,<1.9" }, - { name = "nvidia-nat-langchain", marker = "extra == 'plugins'", specifier = ">=1.8.0,<1.9" }, - { name = "nvidia-nat-langchain", marker = "extra == 'services'", specifier = ">=1.8.0,<1.9" }, + { name = "nvidia-nat-atif", marker = "extra == 'all'", specifier = ">=1.9.0a20260811,<1.10" }, + { name = "nvidia-nat-atif", marker = "extra == 'nemo-agents-plugin'", specifier = ">=1.9.0a20260811,<1.10" }, + { name = "nvidia-nat-atif", marker = "extra == 'plugins'", specifier = ">=1.9.0a20260811,<1.10" }, + { name = "nvidia-nat-atif", marker = "extra == 'services'", specifier = ">=1.9.0a20260811,<1.10" }, + { name = "nvidia-nat-config-optimizer", marker = "extra == 'all'", specifier = ">=1.9.0a20260811,<1.10" }, + { name = "nvidia-nat-config-optimizer", marker = "extra == 'nemo-agents-plugin'", specifier = ">=1.9.0a20260811,<1.10" }, + { name = "nvidia-nat-config-optimizer", marker = "extra == 'plugins'", specifier = ">=1.9.0a20260811,<1.10" }, + { name = "nvidia-nat-config-optimizer", marker = "extra == 'services'", specifier = ">=1.9.0a20260811,<1.10" }, + { name = "nvidia-nat-core", marker = "extra == 'all'", specifier = ">=1.9.0a20260811,<1.10" }, + { name = "nvidia-nat-core", marker = "extra == 'nemo-agents-example-calculator'", specifier = ">=1.9.0a20260811,<1.10" }, + { name = "nvidia-nat-core", marker = "extra == 'nemo-agents-plugin'", specifier = ">=1.9.0a20260811,<1.10" }, + { name = "nvidia-nat-core", marker = "extra == 'plugins'", specifier = ">=1.9.0a20260811,<1.10" }, + { name = "nvidia-nat-core", marker = "extra == 'services'", specifier = ">=1.9.0a20260811,<1.10" }, + { name = "nvidia-nat-eval", marker = "extra == 'all'", specifier = ">=1.9.0a20260811,<1.10" }, + { name = "nvidia-nat-eval", marker = "extra == 'nemo-agents-plugin'", specifier = ">=1.9.0a20260811,<1.10" }, + { name = "nvidia-nat-eval", marker = "extra == 'plugins'", specifier = ">=1.9.0a20260811,<1.10" }, + { name = "nvidia-nat-eval", marker = "extra == 'services'", specifier = ">=1.9.0a20260811,<1.10" }, + { name = "nvidia-nat-langchain", marker = "extra == 'all'", specifier = ">=1.9.0a20260811,<1.10" }, + { name = "nvidia-nat-langchain", marker = "extra == 'nemo-agents-example-calculator'", specifier = ">=1.9.0a20260811,<1.10" }, + { name = "nvidia-nat-langchain", marker = "extra == 'nemo-agents-plugin'", specifier = ">=1.9.0a20260811,<1.10" }, + { name = "nvidia-nat-langchain", marker = "extra == 'plugins'", specifier = ">=1.9.0a20260811,<1.10" }, + { name = "nvidia-nat-langchain", marker = "extra == 'services'", specifier = ">=1.9.0a20260811,<1.10" }, + { name = "nvidia-nat-opentelemetry", marker = "extra == 'all'", specifier = ">=1.9.0a20260811,<1.10" }, + { name = "nvidia-nat-opentelemetry", marker = "extra == 'nemo-agents-plugin'", specifier = ">=1.9.0a20260811,<1.10" }, + { name = "nvidia-nat-opentelemetry", marker = "extra == 'plugins'", specifier = ">=1.9.0a20260811,<1.10" }, + { name = "nvidia-nat-opentelemetry", marker = "extra == 'services'", specifier = ">=1.9.0a20260811,<1.10" }, { name = "openai", marker = "extra == 'all'", specifier = ">=1.61.0" }, { name = "openai", marker = "extra == 'guardrails-service'", specifier = ">=1.61.0" }, { name = "openai", marker = "extra == 'nemo-evaluator-sdk'", specifier = ">=1.61.0" }, @@ -3067,8 +2963,12 @@ requires-dist = [ { name = "opentelemetry-distro", marker = "extra == 'guardrails-service'", specifier = ">=0.64b0" }, { name = "opentelemetry-distro", marker = "extra == 'services'", specifier = ">=0.64b0" }, { name = "opentelemetry-exporter-otlp", marker = "extra == 'all'", specifier = ">=1.22.0" }, + { name = "opentelemetry-exporter-otlp", marker = "extra == 'all'", specifier = ">=1.42.1" }, { name = "opentelemetry-exporter-otlp", marker = "extra == 'guardrails-service'", specifier = ">=1.22.0" }, + { name = "opentelemetry-exporter-otlp", marker = "extra == 'nemo-insights-plugin'", specifier = ">=1.42.1" }, + { name = "opentelemetry-exporter-otlp", marker = "extra == 'plugins'", specifier = ">=1.42.1" }, { name = "opentelemetry-exporter-otlp", marker = "extra == 'services'", specifier = ">=1.22.0" }, + { name = "opentelemetry-exporter-otlp", marker = "extra == 'services'", specifier = ">=1.42.1" }, { name = "opentelemetry-exporter-otlp-proto-grpc", marker = "extra == 'nmp-common'", specifier = ">=1.38.0" }, { name = "opentelemetry-exporter-otlp-proto-http", marker = "extra == 'nmp-common'", specifier = ">=1.38.0" }, { name = "opentelemetry-exporter-prometheus", marker = "extra == 'nmp-common'", specifier = ">=0.64b0" }, @@ -3088,15 +2988,23 @@ requires-dist = [ { name = "opentelemetry-processor-baggage", marker = "extra == 'nmp-common'", specifier = ">=0.64b0" }, { name = "opentelemetry-proto", marker = "extra == 'all'", specifier = ">=1.27.0" }, { name = "opentelemetry-proto", marker = "extra == 'all'", specifier = ">=1.28.2" }, + { name = "opentelemetry-proto", marker = "extra == 'all'", specifier = ">=1.42.1" }, { name = "opentelemetry-proto", marker = "extra == 'core-service'", specifier = ">=1.28.2" }, { name = "opentelemetry-proto", marker = "extra == 'files-service'", specifier = ">=1.28.2" }, { name = "opentelemetry-proto", marker = "extra == 'intake-service'", specifier = ">=1.27.0" }, + { name = "opentelemetry-proto", marker = "extra == 'nemo-experimentalist-plugin'", specifier = ">=1.42.1" }, + { name = "opentelemetry-proto", marker = "extra == 'plugins'", specifier = ">=1.42.1" }, { name = "opentelemetry-proto", marker = "extra == 'services'", specifier = ">=1.27.0" }, { name = "opentelemetry-proto", marker = "extra == 'services'", specifier = ">=1.28.2" }, + { name = "opentelemetry-proto", marker = "extra == 'services'", specifier = ">=1.42.1" }, { name = "opentelemetry-sdk", marker = "extra == 'all'", specifier = ">=1.27.0,<2.0.0" }, + { name = "opentelemetry-sdk", marker = "extra == 'all'", specifier = ">=1.42.1" }, { name = "opentelemetry-sdk", marker = "extra == 'guardrails-service'", specifier = ">=1.27.0,<2.0.0" }, + { name = "opentelemetry-sdk", marker = "extra == 'nemo-insights-plugin'", specifier = ">=1.42.1" }, { name = "opentelemetry-sdk", marker = "extra == 'nmp-common'", specifier = ">=1.38.0" }, + { name = "opentelemetry-sdk", marker = "extra == 'plugins'", specifier = ">=1.42.1" }, { name = "opentelemetry-sdk", marker = "extra == 'services'", specifier = ">=1.27.0,<2.0.0" }, + { name = "opentelemetry-sdk", marker = "extra == 'services'", specifier = ">=1.42.1" }, { name = "optuna", marker = "extra == 'all'", specifier = ">=4.0.0" }, { name = "optuna", marker = "extra == 'nemo-optimization-plugin'", specifier = ">=4.0.0" }, { name = "optuna", marker = "extra == 'plugins'", specifier = ">=4.0.0" }, @@ -3115,6 +3023,10 @@ requires-dist = [ { name = "prometheus-client", marker = "extra == 'nmp-common'", specifier = ">=0.23.0" }, { name = "prometheus-fastapi-instrumentator", marker = "extra == 'nmp-common'", specifier = ">=8.0.2" }, { name = "prompt-toolkit", marker = "extra == 'nemo-platform-sdk'", specifier = ">=3.0.0" }, + { name = "protobuf", marker = "extra == 'all'", specifier = ">=6.0.0" }, + { name = "protobuf", marker = "extra == 'nemo-experimentalist-plugin'", specifier = ">=6.0.0" }, + { name = "protobuf", marker = "extra == 'plugins'", specifier = ">=6.0.0" }, + { name = "protobuf", marker = "extra == 'services'", specifier = ">=6.0.0" }, { name = "psutil", marker = "extra == 'nemo-platform-sdk'", specifier = ">=5.9.0" }, { name = "psycopg2-binary", marker = "extra == 'all'", specifier = ">=2.9.10" }, { name = "psycopg2-binary", marker = "extra == 'core-service'", specifier = ">=2.9.10" }, @@ -3125,6 +3037,7 @@ requires-dist = [ { name = "pydantic", marker = "extra == 'all'", specifier = ">=2.9.2,<3.0.0" }, { name = "pydantic", marker = "extra == 'all'", specifier = ">=2.10.3" }, { name = "pydantic", marker = "extra == 'all'", specifier = ">=2.10.6" }, + { name = "pydantic", marker = "extra == 'all'", specifier = ">=2.12.0" }, { name = "pydantic", marker = "extra == 'auth-service'", specifier = ">=2.10.3" }, { name = "pydantic", marker = "extra == 'core-service'", specifier = ">=2.0.0" }, { name = "pydantic", marker = "extra == 'core-service'", specifier = ">=2.10.3" }, @@ -3137,17 +3050,24 @@ requires-dist = [ { name = "pydantic", marker = "extra == 'jobs-service'", specifier = ">=2.10.6" }, { name = "pydantic", marker = "extra == 'models-service'", specifier = ">=2.10.6" }, { name = "pydantic", marker = "extra == 'nemo-auditor-plugin'", specifier = ">=2.10.6" }, - { name = "pydantic", marker = "extra == 'nemo-evaluator-plugin'", specifier = ">=2.10.6" }, + { name = "pydantic", marker = "extra == 'nemo-deployments-plugin'", specifier = ">=2.10.6" }, + { name = "pydantic", marker = "extra == 'nemo-eval-author-plugin'", specifier = ">=2" }, + { name = "pydantic", marker = "extra == 'nemo-evaluator-plugin'", specifier = ">=2.12.0" }, { name = "pydantic", marker = "extra == 'nemo-evaluator-sdk'", specifier = ">=2.10.6" }, + { name = "pydantic", marker = "extra == 'nemo-experimentalist-plugin'", specifier = ">=2" }, + { name = "pydantic", marker = "extra == 'nemo-insights-plugin'", specifier = ">=2.12.0" }, { name = "pydantic", marker = "extra == 'nemo-optimization-plugin'", specifier = ">=2.10.6" }, - { name = "pydantic", marker = "extra == 'nemo-platform-plugin'", specifier = ">=2.10.3" }, + { name = "pydantic", marker = "extra == 'nemo-platform-plugin'", specifier = ">=2.12.0" }, { name = "pydantic", marker = "extra == 'nemo-platform-sdk'", specifier = ">=2.0.0,<3" }, { name = "pydantic", marker = "extra == 'nmp-common'", specifier = ">=2.10.3" }, + { name = "pydantic", marker = "extra == 'plugins'", specifier = ">=2" }, { name = "pydantic", marker = "extra == 'plugins'", specifier = ">=2.10.6" }, + { name = "pydantic", marker = "extra == 'plugins'", specifier = ">=2.12.0" }, { name = "pydantic", marker = "extra == 'services'", specifier = ">=2.0.0" }, { name = "pydantic", marker = "extra == 'services'", specifier = ">=2.9.2,<3.0.0" }, { name = "pydantic", marker = "extra == 'services'", specifier = ">=2.10.3" }, { name = "pydantic", marker = "extra == 'services'", specifier = ">=2.10.6" }, + { name = "pydantic", marker = "extra == 'services'", specifier = ">=2.12.0" }, { name = "pydantic", marker = "extra == 'switchyard-vendored'", specifier = ">=2.13.3,<3.0" }, { name = "pydantic", extras = ["email"], marker = "extra == 'all'", specifier = ">=2.9.2" }, { name = "pydantic", extras = ["email"], marker = "extra == 'nemo-safe-synthesizer-plugin'", specifier = ">=2.9.2" }, @@ -3190,6 +3110,7 @@ requires-dist = [ { name = "python-multipart", marker = "extra == 'services'", specifier = "~=0.0.9" }, { name = "pyyaml", marker = "extra == 'all'", specifier = ">=6.0.0" }, { name = "pyyaml", marker = "extra == 'all'", specifier = ">=6.0.2" }, + { name = "pyyaml", marker = "extra == 'all'", specifier = ">=6.0.3" }, { name = "pyyaml", marker = "extra == 'auditor-service'", specifier = ">=6.0.2" }, { name = "pyyaml", marker = "extra == 'auth-service'", specifier = ">=6.0.0" }, { name = "pyyaml", marker = "extra == 'core-service'", specifier = ">=6.0.0" }, @@ -3201,14 +3122,20 @@ requires-dist = [ { name = "pyyaml", marker = "extra == 'nemo-agents-plugin'", specifier = ">=6.0" }, { name = "pyyaml", marker = "extra == 'nemo-anonymizer-plugin'", specifier = ">=6.0.2" }, { name = "pyyaml", marker = "extra == 'nemo-auditor-plugin'", specifier = ">=6.0.2" }, + { name = "pyyaml", marker = "extra == 'nemo-deployments-plugin'", specifier = ">=6.0" }, + { name = "pyyaml", marker = "extra == 'nemo-eval-author-plugin'", specifier = ">=6.0.3" }, + { name = "pyyaml", marker = "extra == 'nemo-experimentalist-plugin'", specifier = ">=6.0.3" }, + { name = "pyyaml", marker = "extra == 'nemo-insights-plugin'", specifier = ">=6.0.3" }, { name = "pyyaml", marker = "extra == 'nemo-optimization-plugin'", specifier = ">=6.0" }, { name = "pyyaml", marker = "extra == 'nemo-platform-plugin'", specifier = ">=6.0.2" }, { name = "pyyaml", marker = "extra == 'nemo-platform-sdk'", specifier = ">=6.0.0" }, { name = "pyyaml", marker = "extra == 'nmp-common'", specifier = ">=6.0.2" }, { name = "pyyaml", marker = "extra == 'plugins'", specifier = ">=6.0" }, { name = "pyyaml", marker = "extra == 'plugins'", specifier = ">=6.0.2" }, + { name = "pyyaml", marker = "extra == 'plugins'", specifier = ">=6.0.3" }, { name = "pyyaml", marker = "extra == 'services'", specifier = ">=6.0.0" }, { name = "pyyaml", marker = "extra == 'services'", specifier = ">=6.0.2" }, + { name = "pyyaml", marker = "extra == 'services'", specifier = ">=6.0.3" }, { name = "ragas", marker = "extra == 'nemo-evaluator-sdk'", specifier = "==0.4.3" }, { name = "requests", marker = "extra == 'all'", specifier = ">=2.31.0" }, { name = "requests", marker = "extra == 'auditor-service'", specifier = ">=2.32.3,<3.0.0" }, @@ -3250,11 +3177,16 @@ requires-dist = [ { name = "tenacity", marker = "extra == 'core-service'", specifier = ">=8.5.0" }, { name = "tenacity", marker = "extra == 'models-service'", specifier = ">=8.5.0" }, { name = "tenacity", marker = "extra == 'services'", specifier = ">=8.5.0" }, + { name = "tomlkit", marker = "extra == 'all'", specifier = ">=0.13.3" }, + { name = "tomlkit", marker = "extra == 'nemo-experimentalist-plugin'", specifier = ">=0.13.3" }, + { name = "tomlkit", marker = "extra == 'plugins'", specifier = ">=0.13.3" }, + { name = "tomlkit", marker = "extra == 'services'", specifier = ">=0.13.3" }, { name = "typer", marker = "extra == 'all'", specifier = ">=0.9.0" }, { name = "typer", marker = "extra == 'all'", specifier = ">=0.12.5" }, { name = "typer", marker = "extra == 'all'", specifier = ">=0.20.0" }, { name = "typer", marker = "extra == 'nemo-auditor-plugin'", specifier = ">=0.20.0" }, { name = "typer", marker = "extra == 'nemo-evaluator-plugin'", specifier = ">=0.20.0" }, + { name = "typer", marker = "extra == 'nemo-insights-plugin'", specifier = ">=0.20.0" }, { name = "typer", marker = "extra == 'nemo-optimization-plugin'", specifier = ">=0.12.5" }, { name = "typer", marker = "extra == 'nemo-platform-plugin'", specifier = ">=0.20.0,<0.26" }, { name = "typer", marker = "extra == 'nemo-platform-sdk'", specifier = ">=0.20.0" }, @@ -3270,6 +3202,10 @@ requires-dist = [ { name = "types-aioboto3", extras = ["s3"], marker = "extra == 'files-service'", specifier = ">=15.5.0" }, { name = "types-aioboto3", extras = ["s3"], marker = "extra == 'services'", specifier = ">=15.5.0" }, { name = "typing-extensions", marker = "extra == 'nemo-platform-sdk'", specifier = ">=4.14,<5" }, + { name = "tzdata", marker = "extra == 'all'", specifier = "==2026.2" }, + { name = "tzdata", marker = "extra == 'nemo-insights-plugin'", specifier = "==2026.2" }, + { name = "tzdata", marker = "extra == 'plugins'", specifier = "==2026.2" }, + { name = "tzdata", marker = "extra == 'services'", specifier = "==2026.2" }, { name = "urllib3", marker = "extra == 'all'", specifier = ">=2.7.0" }, { name = "urllib3", marker = "extra == 'core-service'", specifier = ">=2.7.0" }, { name = "urllib3", marker = "extra == 'models-service'", specifier = ">=2.7.0" }, @@ -3309,7 +3245,7 @@ requires-dist = [ { name = "yara-python", marker = "extra == 'guardrails-service'", specifier = "==4.5.1" }, { name = "yara-python", marker = "extra == 'services'", specifier = "==4.5.1" }, ] -provides-extras = ["aiohttp", "all", "auditor-service", "auth-service", "core-service", "data-designer-nemo", "entities-service", "files-service", "guardrails-service", "hello-world-service", "inference-gateway-service", "intake-service", "jobs-service", "models-service", "nemo-agents-example-calculator", "nemo-agents-plugin", "nemo-anonymizer-plugin", "nemo-auditor-plugin", "nemo-data-designer-plugin", "nemo-evaluator-plugin", "nemo-evaluator-sdk", "nemo-guardrails-plugin", "nemo-optimization-plugin", "nemo-platform-plugin", "nemo-platform-sdk", "nemo-safe-synthesizer-plugin", "nemo-switchyard", "nmp-common", "platform-seed-service", "plugins", "secrets-service", "services", "studio-service", "switchyard-vendored"] +provides-extras = ["aiohttp", "all", "auditor-service", "auth-service", "core-service", "data-designer-nemo", "entities-service", "files-service", "guardrails-service", "hello-world-service", "inference-gateway-service", "intake-service", "jobs-service", "models-service", "nemo-agents-example-calculator", "nemo-agents-plugin", "nemo-anonymizer-plugin", "nemo-auditor-plugin", "nemo-data-designer-plugin", "nemo-deployments-plugin", "nemo-eval-author-plugin", "nemo-evaluator-plugin", "nemo-evaluator-sdk", "nemo-experimentalist-plugin", "nemo-guardrails-plugin", "nemo-insights-plugin", "nemo-optimization-plugin", "nemo-platform-plugin", "nemo-platform-sdk", "nemo-safe-synthesizer-plugin", "nemo-switchyard", "nmp-common", "platform-seed-service", "plugins", "secrets-service", "services", "studio-service", "switchyard-vendored"] [[package]] name = "nemo-platform-plugin" @@ -3345,7 +3281,7 @@ requires-dist = [ { name = "openai", marker = "extra == 'nemo-platform-sdk'" }, { name = "prompt-toolkit", marker = "extra == 'nemo-platform-sdk'", specifier = ">=3.0.0" }, { name = "psutil", marker = "extra == 'nemo-platform-sdk'", specifier = ">=5.9.0" }, - { name = "pydantic", specifier = ">=2.10.3" }, + { name = "pydantic", specifier = ">=2.12.0" }, { name = "pydantic", marker = "extra == 'nemo-platform-sdk'", specifier = ">=2.0.0,<3" }, { name = "pydantic-settings", specifier = ">=2.8.1" }, { name = "pyyaml", specifier = ">=6.0.2" }, @@ -3391,15 +3327,16 @@ requires-dist = [ { name = "docker", specifier = ">=7.0.0" }, { name = "fsspec", specifier = ">=2023.1.0" }, { name = "httpx", specifier = ">=0.23.0,<1" }, + { name = "httpx", marker = "extra == 'nemo-evaluator-sdk'", specifier = ">=0.27.0,<1" }, { name = "httpx-aiohttp", marker = "extra == 'aiohttp'", specifier = ">=0.1.9" }, { name = "jinja2", marker = "extra == 'nemo-evaluator-sdk'", specifier = ">=3.1.6" }, { name = "jsonpath-ng", marker = "extra == 'nemo-evaluator-sdk'", specifier = ">=1.7.0" }, { name = "jsonschema", marker = "extra == 'nemo-evaluator-sdk'", specifier = ">=4.23.0" }, { name = "langchain-nvidia-ai-endpoints", marker = "extra == 'nemo-evaluator-sdk'", specifier = ">=1.4.3,<2.0.0" }, { name = "langchain-openai", marker = "extra == 'nemo-evaluator-sdk'", specifier = ">=1.3.5" }, - { name = "nemo-fabric", marker = "extra == 'nemo-evaluator-sdk'", git = "https://github.com/NVIDIA/NeMo-Fabric.git?rev=55450ffb7c16f895316c5acc91fc23b36f4427b2" }, + { name = "nemo-fabric", marker = "extra == 'nemo-evaluator-sdk'", specifier = ">=0.2.0,<0.3.0" }, { name = "nemo-platform-plugin", editable = "../../packages/nemo_platform_plugin" }, - { name = "nemo-relay", marker = "extra == 'nemo-evaluator-sdk'", specifier = ">=0.6.0,<0.7" }, + { name = "nemo-relay", marker = "extra == 'nemo-evaluator-sdk'", specifier = ">=0.7.2,<0.8" }, { name = "ngcsdk", specifier = ">=4.8.2" }, { name = "nvidia-ml-py", specifier = ">=13.0.0" }, { name = "openai" }, @@ -3443,17 +3380,31 @@ pydantic-v2 = [ [[package]] name = "nemo-relay" -version = "0.6.0" +version = "0.7.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/16/db/44d7258ee620c5cce6dc588983fcb11be3ee03ae71089a65686c14d9ee02/nemo_relay-0.6.0.tar.gz", hash = "sha256:f3d3088019609bc953357b5598a47481dc3e7dc8f11ecf27002ede251f37eb7b", size = 1071046, upload-time = "2026-08-03T14:55:49.702Z" } +sdist = { url = "https://files.pythonhosted.org/packages/cd/e5/a259aac8df4aa78c0b3a6f3ad0fbf6305666bfaad5c29d9adc26db0f9e27/nemo_relay-0.7.3.tar.gz", hash = "sha256:ea5a1bb52e25e001dcbf6af1830616be181845e978cc848df58562556bba5604", size = 1299430, upload-time = "2026-08-14T14:40:44.832Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/25/65/d320016505457cc30971f575e8dadffb923b7cfc780ab8bb25a4ce9d305c/nemo_relay-0.6.0-cp311-abi3-macosx_11_0_arm64.whl", hash = "sha256:ad5dae6febf6532d7b113abc2a404679c8feffc499df3034b93d9a078185d2bb", size = 9917779, upload-time = "2026-07-22T20:07:48.961Z" }, - { url = "https://files.pythonhosted.org/packages/ae/c0/f33250e71c4206da1b339072893f9a1e39295fe1aceb9a2fef4b8620a0f2/nemo_relay-0.6.0-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c0cd9570f64c6956fe3bfb82af1cdb3ee70cb50b51098cdb0de831c3f9b4e904", size = 8888375, upload-time = "2026-07-22T20:07:51.049Z" }, - { url = "https://files.pythonhosted.org/packages/a3/f4/d1dfaed022da0f6f14765a122867f976a69cc520fe1faaf99757f5719d1f/nemo_relay-0.6.0-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:849daa9e45158ac581e54506e0fcc7a24f557d1ed06dbdc074f5de7a00393cbc", size = 9336372, upload-time = "2026-07-22T20:07:53.224Z" }, - { url = "https://files.pythonhosted.org/packages/60/9e/f8b80509eef5e05702b940a3d1e2f60c962548d87dec2d712fd3804e6cd4/nemo_relay-0.6.0-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:8c80e534b76bb0455cfc222aaf5c10fa064c088b3c0d5e137eb3c97db46dbc47", size = 10578834, upload-time = "2026-07-30T15:44:44.726Z" }, - { url = "https://files.pythonhosted.org/packages/f0/a0/84ee49d45a1a874457f2f9260d30fd573af30c9be360d9d97b8bb7835ad9/nemo_relay-0.6.0-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:c8bc4a792a2f8c35ddef1b900cc43be2b2bbbfcd5e7cf65aa0829c04d25eb77f", size = 10849651, upload-time = "2026-07-30T15:44:40.48Z" }, - { url = "https://files.pythonhosted.org/packages/3a/b0/908d77f75b9054e1e403da78f7d9430249a45939070d4298abbb41a04b5b/nemo_relay-0.6.0-cp311-abi3-win_amd64.whl", hash = "sha256:bfbbedfd130fa95c9b8c04643c30910df850e0ed3500beeab82b00ca2d94e7ea", size = 9613425, upload-time = "2026-07-22T20:07:55.175Z" }, - { url = "https://files.pythonhosted.org/packages/cd/71/c438b9d746303ff7f270d99f13b250bf947cdac3e52de2a83fd132cbca0b/nemo_relay-0.6.0-cp311-abi3-win_arm64.whl", hash = "sha256:82fe132943399d89e6ec34dc28df0be7bbe41b84f6698c545928b8816b6010f6", size = 9034810, upload-time = "2026-07-22T20:07:57.467Z" }, + { url = "https://files.pythonhosted.org/packages/ed/9e/4eb80d2307cadcbb839dad2212a8d888667cd8c531ad0d8c0c1afc841181/nemo_relay-0.7.3-cp311-abi3-macosx_11_0_arm64.whl", hash = "sha256:301dfc8334032ac52c09cc0b1421181e7c4df601abe7c82dfe51aa74ddbb3732", size = 9251369, upload-time = "2026-08-14T14:40:07.668Z" }, + { url = "https://files.pythonhosted.org/packages/c7/a9/9fb77f7142b1381d8c3c81fdbb76782a02dcff1ee403ac6c93b13fa46b24/nemo_relay-0.7.3-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:49c70c0a94cebb6cba3dd7521be11f63eac4cd9386881eb29827ac91b1bd780b", size = 8458046, upload-time = "2026-08-14T14:40:10.181Z" }, + { url = "https://files.pythonhosted.org/packages/ae/ab/b2f246f971f561a982d234d9f3ec1b29dfa4c72bf4882f3e32ce6db54dfa/nemo_relay-0.7.3-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8eeaaf8c6a18440e473dd14eb1bb82e56c6514e70adee7456eddf9ce217cff89", size = 8957931, upload-time = "2026-08-14T14:40:12.547Z" }, + { url = "https://files.pythonhosted.org/packages/8f/d8/d8c25ba915467bab457d175b84a3af5c33291655867d472c49eada3b77e6/nemo_relay-0.7.3-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:90ff984a89c42ebd0cfe26a0af3f180b1970e2ebcd743d19a960e547949ad2ef", size = 10325640, upload-time = "2026-08-14T14:40:15.722Z" }, + { url = "https://files.pythonhosted.org/packages/7d/fd/6ec48f47eb5ca4cca566b197ade8514baf183dddf53d6de3a296b8bc1102/nemo_relay-0.7.3-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:d4895a4df39a92ecbac3633fb4ec59cf1f83286c0369f433760ab28fb8d6dddf", size = 10706736, upload-time = "2026-08-14T14:40:18.377Z" }, + { url = "https://files.pythonhosted.org/packages/6b/cb/8a6f8d5f9922e75100f135c1dc4451bafc15f5d51608081f72b894e0caf4/nemo_relay-0.7.3-cp311-abi3-win_amd64.whl", hash = "sha256:f123cd45a27fca3d570559f2c26850138763411f66f387559d757e5d88bfa3c1", size = 8807604, upload-time = "2026-08-14T14:40:20.98Z" }, + { url = "https://files.pythonhosted.org/packages/f1/ac/558a05e6b9e28464b64fee8327d9e8a2aab3fb356363b8b82597b6b35b2a/nemo_relay-0.7.3-cp311-abi3-win_arm64.whl", hash = "sha256:6d5444e9a03b8b5d4bba2409105a121349580cb51481d441c6b5e699713a8763", size = 8442944, upload-time = "2026-08-14T14:40:23.433Z" }, +] + +[[package]] +name = "nemo-relay-cli-bin" +version = "0.7.3" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c5/c8/0ddaa75f3a6047d2e26c9604cc33b08aac52c52bf8d8edfc67d4553f4178/nemo_relay_cli_bin-0.7.3-py3-none-macosx_11_0_arm64.whl", hash = "sha256:73a12cf7556ff9df7aeab137ae393bcf8a16375b84d7f20ca980b7401647aaaf", size = 11363529, upload-time = "2026-08-14T14:40:26.275Z" }, + { url = "https://files.pythonhosted.org/packages/a2/d4/37663a8e2203d642e12db9d24386351e6e2bfb69bfa411f27e554a629897/nemo_relay_cli_bin-0.7.3-py3-none-manylinux_2_17_aarch64.whl", hash = "sha256:1821c95a23b6615834551bffb24f2ac40ccfcbd414da6c0f550bbfdb62d9d7ad", size = 11707631, upload-time = "2026-08-14T14:40:28.861Z" }, + { url = "https://files.pythonhosted.org/packages/0f/1b/096083dc567ec4ced22f51a473d1cb4f43e3458a79e88bf7a54be21321e9/nemo_relay_cli_bin-0.7.3-py3-none-manylinux_2_17_x86_64.whl", hash = "sha256:b3cb9d39695c2d09c8380a0e1e5e9e39bed66618c5b85affba7ec0cef0161893", size = 11756104, upload-time = "2026-08-14T14:40:31.356Z" }, + { url = "https://files.pythonhosted.org/packages/d6/b4/5d2f53dea87236dc4ca260061bcd5e47372ce6b6b1aff8b419df9bc5b1ce/nemo_relay_cli_bin-0.7.3-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:e8f0d804ebadf892e16d567a9d693d87f830d38dab6cf7badf5cd186ab4697d7", size = 11686305, upload-time = "2026-08-14T14:40:34.065Z" }, + { url = "https://files.pythonhosted.org/packages/e1/e4/f449fa586b72b612e26ab30dcc4ce0ebb0b9191c336512c7e1534825fa0f/nemo_relay_cli_bin-0.7.3-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:af187f9ce77c715f704fb044c1787384fc547ca0fd575e1289c8c33ad2db351b", size = 12342866, upload-time = "2026-08-14T14:40:36.736Z" }, + { url = "https://files.pythonhosted.org/packages/d5/ba/b965baa4920f58923bcc02ebcc613f675ba825d76aec485796a9d1908c04/nemo_relay_cli_bin-0.7.3-py3-none-win_amd64.whl", hash = "sha256:e69f3e7608575a2f91088f4ee61b516f3c66cb442532c0985f20b06736dcfa29", size = 9949847, upload-time = "2026-08-14T14:40:39.131Z" }, + { url = "https://files.pythonhosted.org/packages/2a/9f/69bf79f6816102cd696dd7a6051fe20b894ee50ce861e32f81b63adfc78b/nemo_relay_cli_bin-0.7.3-py3-none-win_arm64.whl", hash = "sha256:3cc4ba58ab1cc05bf39abcc6e3c26cc50f61bb08bbfba5c41affbf76869c5658", size = 9431754, upload-time = "2026-08-14T14:40:41.492Z" }, ] [[package]] @@ -3667,18 +3618,31 @@ wheels = [ [[package]] name = "nvidia-nat-atif" -version = "1.8.0" +version = "1.9.0a20260811" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pydantic" }, ] -wheels = [ - { url = "https://files.pythonhosted.org/packages/f1/ee/a22d1b5d5d6f3d625f451f5185b7e32a6464058f2c7899f6d98c68f46aef/nvidia_nat_atif-1.8.0-py3-none-any.whl", hash = "sha256:38c97d6e506e8cc151a997bfd6cafa08b969e181b50b9302f28d2229a3b37829", size = 105633, upload-time = "2026-06-17T00:25:16.624Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/9e/6d/3888e0d9e8c2b29d08c4f1662b6845cfa2bebf0dfacef0ded09c80f0f726/nvidia_nat_atif-1.9.0a20260811.tar.gz", hash = "sha256:0d88971a99e0f24b04949392e4df94c3971abee7e7ac95d9d7e15b83a5ae9661", size = 41832, upload-time = "2026-08-11T10:08:05.953Z" } + +[[package]] +name = "nvidia-nat-config-optimizer" +version = "1.9.0a20260811" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, + { name = "nvidia-nat-core" }, + { name = "nvidia-nat-eval" }, + { name = "optuna" }, + { name = "pandas" }, + { name = "pydantic" }, + { name = "pyyaml" }, ] +sdist = { url = "https://files.pythonhosted.org/packages/96/22/e21d4be22a645f7c3f2ddc7fd42dd548b3e29e11c41081556817a618d20a/nvidia_nat_config_optimizer-1.9.0a20260811.tar.gz", hash = "sha256:38306fe2a096128c2af405c21c3a5fa39e096ba79ab73a4d7635b833fa676567", size = 1452, upload-time = "2026-08-11T10:07:15.481Z" } [[package]] name = "nvidia-nat-core" -version = "1.8.0" +version = "1.9.0a20260811" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "aiofiles" }, @@ -3713,54 +3677,37 @@ dependencies = [ { name = "urllib3" }, { name = "uvicorn", extra = ["standard"] }, ] -wheels = [ - { url = "https://files.pythonhosted.org/packages/10/17/46f8bb24ba9789064ab6a90a905f31218bca802346adace079256db82c72/nvidia_nat_core-1.8.0-py3-none-any.whl", hash = "sha256:645bcc995f73598016b750f7849decb24bea857549f96f5fcbbd8ff37f0c3fc5", size = 779726, upload-time = "2026-06-17T00:21:24.556Z" }, -] +sdist = { url = "https://files.pythonhosted.org/packages/dd/97/44b5e486474d7dd7f5036fec0a51c2cb2e483be406a2499687ef6b03d392/nvidia_nat_core-1.9.0a20260811.tar.gz", hash = "sha256:3c2ee4cd30591929ade7ce37ffc9c9da820e0187f2918c0b364d7d1f93c82e7d", size = 3003, upload-time = "2026-08-11T10:07:35.864Z" } [[package]] name = "nvidia-nat-eval" -version = "1.8.0" +version = "1.9.0a20260811" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "nvidia-nat-atif" }, ] -wheels = [ - { url = "https://files.pythonhosted.org/packages/7a/25/0fd8109c653d967d82f8ef6fc729c41504e3b4ec51dcfd39c952275d4e67/nvidia_nat_eval-1.8.0-py3-none-any.whl", hash = "sha256:4baebf66289040708c22bfd57f6edb37728409795a260bd0f07b894c9ec8b110", size = 69649, upload-time = "2026-06-17T00:23:20.109Z" }, -] +sdist = { url = "https://files.pythonhosted.org/packages/96/fa/b5341795a70df753e4efdfca4e3f597ee304626ee777f6e66b49aab5b4cf/nvidia_nat_eval-1.9.0a20260811.tar.gz", hash = "sha256:89f54970fa9bbac3a609e89a4d85c9dc7e401b50f0a6f447f3656935bd34906f", size = 1401, upload-time = "2026-08-11T10:07:40.084Z" } [[package]] name = "nvidia-nat-langchain" -version = "1.8.0" +version = "1.9.0a20260811" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "langchain" }, - { name = "langchain-aws" }, { name = "langchain-classic" }, - { name = "langchain-community" }, { name = "langchain-core" }, - { name = "langchain-exa" }, - { name = "langchain-huggingface" }, - { name = "langchain-litellm" }, - { name = "langchain-milvus" }, - { name = "langchain-nvidia-ai-endpoints" }, - { name = "langchain-oci" }, - { name = "langchain-openai" }, { name = "langgraph" }, { name = "langsmith" }, { name = "nvidia-nat-core" }, { name = "nvidia-nat-eval" }, { name = "nvidia-nat-opentelemetry" }, - { name = "openevals" }, { name = "pyopenssl" }, - { name = "wikipedia" }, -] -wheels = [ - { url = "https://files.pythonhosted.org/packages/f0/49/eee7d8f68568e4c994a67ee0def4070e8fdeb0d603a7ef580050b3ee3d34/nvidia_nat_langchain-1.8.0-py3-none-any.whl", hash = "sha256:8120ad2b972ce2d90fae1e7f95b3daf6b463310e0105fc330896bfb069a5d403", size = 197395, upload-time = "2026-06-17T00:27:13.69Z" }, ] +sdist = { url = "https://files.pythonhosted.org/packages/7f/58/8797ba298ce3eed248fcedb33c2195da67fd88c6809caa6a431a2fd1f772/nvidia_nat_langchain-1.9.0a20260811.tar.gz", hash = "sha256:d55c2d81161c1ce57845b9eceac94c46df977e832e5d9b2000a7c71773de1659", size = 42183, upload-time = "2026-08-11T10:07:51.214Z" } [[package]] name = "nvidia-nat-opentelemetry" -version = "1.8.0" +version = "1.9.0a20260811" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "nvidia-nat-core" }, @@ -3769,9 +3716,7 @@ dependencies = [ { name = "opentelemetry-exporter-otlp" }, { name = "opentelemetry-sdk" }, ] -wheels = [ - { url = "https://files.pythonhosted.org/packages/df/df/33cba1fb316f720b075dac2330b588b1a62d9d991cd6e1d5bc8f795b3bba/nvidia_nat_opentelemetry-1.8.0-py3-none-any.whl", hash = "sha256:2ef2de28a1d07029126ae1c13ff39b9dd61a6985e43199e6fe80968b465b1eec", size = 68449, upload-time = "2026-06-17T00:39:23.758Z" }, -] +sdist = { url = "https://files.pythonhosted.org/packages/fd/ac/87b9f93da62d85984576bd872b6610db24a05babc6adc73fc562abd68905/nvidia_nat_opentelemetry-1.9.0a20260811.tar.gz", hash = "sha256:6b600a7d5bab52b21d77f771f400602c7dcae470f94821c6398907bc02f0c8f0", size = 41891, upload-time = "2026-08-11T10:07:34.786Z" } [[package]] name = "oauthlib" @@ -3782,41 +3727,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/be/9c/92789c596b8df838baa98fa71844d84283302f7604ed565dafe5a6b5041a/oauthlib-3.3.1-py3-none-any.whl", hash = "sha256:88119c938d2b8fb88561af5f6ee0eec8cc8d552b7bb1f712743136eb7523b7a1", size = 160065, upload-time = "2025-06-19T22:48:06.508Z" }, ] -[[package]] -name = "oci" -version = "2.184.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "certifi" }, - { name = "circuitbreaker" }, - { name = "crc32c" }, - { name = "cryptography" }, - { name = "pyjwt" }, - { name = "pyopenssl" }, - { name = "python-dateutil" }, - { name = "pytz" }, - { name = "urllib3" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/a7/97/d204a71489b8c685818f596f2082c78b52fe70a934dc52d9dbd81345da47/oci-2.184.0.tar.gz", hash = "sha256:19742d0fdd27947daafd2cfea4db31ad585fde379094f41ddb7280109939210e", size = 17818751, upload-time = "2026-08-04T04:39:08.473Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/fe/3a/08cf20553974b702c53ebaa37f12e81d6293eb1001032939138279e3116a/oci-2.184.0-py3-none-any.whl", hash = "sha256:1737deb49604658308abef1b91e9039111637f75f4fd112cfd92d8e73871476c", size = 36213396, upload-time = "2026-08-04T04:38:56.099Z" }, -] - -[[package]] -name = "oci-openai" -version = "1.1.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "httpx" }, - { name = "oci" }, - { name = "openai" }, - { name = "requests" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/f7/93/c395a92c8019dec50bd5760a9fcfd718cedb416824f8ebba0b26568ab6f4/oci_openai-1.1.0.tar.gz", hash = "sha256:1819ef7d17c1fdbe05c5c0653301fdca0d2fa99f6f8b1b7bd7667da9704d62a1", size = 199961, upload-time = "2026-02-03T05:15:12.486Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/28/a5/48aa98c4b68f3cc55bf74ef7a8d691d230ff09d5fab521e17ffd8b155ac4/oci_openai-1.1.0-py3-none-any.whl", hash = "sha256:a028ee3e1a1b1ad4e0495b10ef70b81b5e6cd50e7f13cf485a112762641a9160", size = 11449, upload-time = "2026-02-03T05:15:10.957Z" }, -] - [[package]] name = "openai" version = "2.49.0" @@ -3876,21 +3786,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/12/cf/03675d8bd8ecbf4445504d8071adab19f5f993676795708e36402ab38263/openapi_pydantic-0.5.1-py3-none-any.whl", hash = "sha256:a3a09ef4586f5bd760a8df7f43028b60cafb6d9f61de2acba9574766255ab146", size = 96381, upload-time = "2025-01-08T19:29:25.275Z" }, ] -[[package]] -name = "openevals" -version = "0.2.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "langchain" }, - { name = "langchain-openai" }, - { name = "langsmith" }, - { name = "rich" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/b0/b1/028a05846136805b29b7a3afb58a940c2d213fa2c3d0a7d7003c7fbaa115/openevals-0.2.0.tar.gz", hash = "sha256:7e95fa64625be53eaa8c657d7f69b842a52bda10bdf3bb91781c7d09a385b069", size = 140711, upload-time = "2026-04-07T19:45:22.749Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/4a/8b/00f402b7f3475e235c339a9bc82d2eaf46cc08b53ecd85d4a117850170d3/openevals-0.2.0-py3-none-any.whl", hash = "sha256:2bce5964be9d162e3d38c2dfd026739156e1ac521536ade6b8e2f0a89b632f2c", size = 106958, upload-time = "2026-04-07T19:45:21.575Z" }, -] - [[package]] name = "openinference-semantic-conventions" version = "0.1.31" @@ -4145,7 +4040,7 @@ wheels = [ [[package]] name = "optuna" -version = "4.9.0" +version = "4.4.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "alembic" }, @@ -4156,9 +4051,9 @@ dependencies = [ { name = "sqlalchemy" }, { name = "tqdm" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/f4/aa/05f5e3f662cc96a4c478fc3446b8ed6359825a2b504ecb614a9ac84e4a4d/optuna-4.9.0.tar.gz", hash = "sha256:b322e5cbdf1655fb84c37646c4a7a1f391de1b47806bbe222e015825d0a82b87", size = 485834, upload-time = "2026-06-01T06:23:30.424Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a5/e0/b303190ae8032d12f320a24c42af04038bacb1f3b17ede354dd1044a5642/optuna-4.4.0.tar.gz", hash = "sha256:a9029f6a92a1d6c8494a94e45abd8057823b535c2570819072dbcdc06f1c1da4", size = 467708, upload-time = "2025-06-16T05:13:00.024Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ab/f3/e5fcd5d9b15771ed6dc10e3a7eeddc672e418f4f4c4653d216cc1d857e2d/optuna-4.9.0-py3-none-any.whl", hash = "sha256:f52f3be6148654850c92a5860d398fd88ec6b2c84ab68d9c3d07dcff02e7afee", size = 425553, upload-time = "2026-06-01T06:23:28.804Z" }, + { url = "https://files.pythonhosted.org/packages/5c/5e/068798a8c7087863e7772e9363a880ab13fe55a5a7ede8ec42fab8a1acbb/optuna-4.4.0-py3-none-any.whl", hash = "sha256:fad8d9c5d5af993ae1280d6ce140aecc031c514a44c3b639d8c8658a8b7920ea", size = 395949, upload-time = "2025-06-16T05:12:58.37Z" }, ] [[package]] @@ -5281,15 +5176,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2", size = 10235, upload-time = "2024-02-25T23:20:01.196Z" }, ] -[[package]] -name = "soupsieve" -version = "2.9.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d9/38/e12680bbe6b4f8f3d17adcaf38d26850aa756c85cf4a80e79fc12a018fe8/soupsieve-2.9.1.tar.gz", hash = "sha256:c33e6605bbc71dd628b00c632d58ae607c22bade247e52553928f83bbb75b4ba", size = 122261, upload-time = "2026-07-21T16:57:17.452Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/0f/2c/437fe806897c2d6cfdc3ee43a18da8bf8e568530a4ae9bac781541ca9896/soupsieve-2.9.1-py3-none-any.whl", hash = "sha256:4f4477399246b7a0c720a88ca2454b11cd6bb9ae4c9d170140786e916776c14c", size = 37404, upload-time = "2026-07-21T16:57:16.421Z" }, -] - [[package]] name = "sqlalchemy" version = "2.0.51" @@ -5415,33 +5301,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b7/4d/bc07d1f1635d4897a202acc0ae11c2886eaa7325c359ba4741b47bf8e225/tiktoken-0.13.0-cp313-cp313t-win_amd64.whl", hash = "sha256:6c43a675ca14f6f2749ba7f12075d37456015a24b859f2517b9beb4ef30807ec", size = 873820, upload-time = "2026-05-15T04:50:59.528Z" }, ] -[[package]] -name = "tokenizers" -version = "0.23.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "huggingface-hub" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/c1/60/21f715d9faba5f5407ff759472ade058ec4a507ad62bcea47cb847239a73/tokenizers-0.23.1.tar.gz", hash = "sha256:1feeeadf865a7915adc25445dea30e9933e593c31bb96c277cee36de227c8bfa", size = 365748, upload-time = "2026-04-27T14:43:25.606Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/87/39/b87a87d5bb9470610b80a2d31df42fcffeaf35118b8b97952b2aff598cc7/tokenizers-0.23.1-cp310-abi3-macosx_10_12_x86_64.whl", hash = "sha256:e03d6ffcbe0d56ee9c1ccd070e70a13fa750727c0277e138152acbc0252c2224", size = 3146732, upload-time = "2026-04-27T14:43:15.427Z" }, - { url = "https://files.pythonhosted.org/packages/e2/6a/068ed9f6e444c9d7e9d55ce134181325700f3d7f30410721bdc8f848d727/tokenizers-0.23.1-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:e0948bbb1ac1d7cdfc9fb6d62c596e3b7550036ad60ecd654a66ad273326324e", size = 3054954, upload-time = "2026-04-27T14:43:13.745Z" }, - { url = "https://files.pythonhosted.org/packages/6c/36/e006edf031154cba92b8416057d92c3abe3635e4c4b0aa0b5b9bb39dde70/tokenizers-0.23.1-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1bf13402aff9bc533c89cb849ec3b412dc3fbeacc9744840e423d7bf3f7dc0e3", size = 3374081, upload-time = "2026-04-27T14:43:01.241Z" }, - { url = "https://files.pythonhosted.org/packages/a2/ef/7735d226f9c7f874a6bee5e3f27fb25ecabdf207d37b8cf45286d0795893/tokenizers-0.23.1-cp310-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f836ca703b89ae07919a309f9651f7a88fd5a33d5f718ba5ad0870ec0256bad6", size = 3247641, upload-time = "2026-04-27T14:43:03.856Z" }, - { url = "https://files.pythonhosted.org/packages/b9/d9/24827036f6e21297bfffda0768e58eb6096a4f411e932964a01707857931/tokenizers-0.23.1-cp310-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae848657742035523fdf261773630cb819a26995fcd3d9ecae0c1daf6e5a4959", size = 3585624, upload-time = "2026-04-27T14:43:10.664Z" }, - { url = "https://files.pythonhosted.org/packages/0c/9a/22f3582b3a4f49358293a5206e25317621ee4526bfe9cdaa0f07a12e770e/tokenizers-0.23.1-cp310-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:53b09e85775d5187941e7bab30e941b4134ab4a7dd8c68e783d231fb7ca27c51", size = 3844062, upload-time = "2026-04-27T14:43:05.643Z" }, - { url = "https://files.pythonhosted.org/packages/7e/65/b8f8814eef95800f20721384136d9a1d22241d50b2874357cb70542c392f/tokenizers-0.23.1-cp310-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea5a0ce170074329faaa8ea3f6400ecde604b6678192688533af80980daae71a", size = 3460098, upload-time = "2026-04-27T14:43:08.854Z" }, - { url = "https://files.pythonhosted.org/packages/0d/d5/1353e5f677ec27c2494fb6a6725e82d56c985f53e90ec511369e7e4f02c6/tokenizers-0.23.1-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5075b405006415ea148a992d093699c66eb01952bf59f4d5727089a98bda45a4", size = 3346235, upload-time = "2026-04-27T14:43:12.377Z" }, - { url = "https://files.pythonhosted.org/packages/71/89/39b6b8fc073fb6d413d0147aa333dc7eff7be65639ac9d19930a0b21bf33/tokenizers-0.23.1-cp310-abi3-manylinux_2_31_riscv64.whl", hash = "sha256:56f3a77de629917652f876294dc9fe6bad4a0c43bc229dc72e59bb23a0f4729a", size = 3426398, upload-time = "2026-04-27T14:43:07.264Z" }, - { url = "https://files.pythonhosted.org/packages/0f/80/127c854da64827e5b79264ce524993a90dddcb320e5cd42412c5c02f9e8a/tokenizers-0.23.1-cp310-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:9d10a6d957ef01896dc274e890eee27d41bd0e74ef31e60616f0fc311345184e", size = 9823279, upload-time = "2026-04-27T14:43:17.222Z" }, - { url = "https://files.pythonhosted.org/packages/fe/ba/44c2502feb1a058f096ddfb4e0996ef3225a01a388e1a9b094e91689fe93/tokenizers-0.23.1-cp310-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:1974288a609c343774f1b897c8b482c791ab17b75ab5c8c2b1737565c1d82288", size = 9644986, upload-time = "2026-04-27T14:43:19.45Z" }, - { url = "https://files.pythonhosted.org/packages/9e/c1/464019a9fb059870bfe4eebb4ba12208f3042035e258bf5e782906bd3847/tokenizers-0.23.1-cp310-abi3-musllinux_1_2_i686.whl", hash = "sha256:120468fb4c24faf0543c835a4fabafa4deb3f20a035c9b6e83d0b553a97615d4", size = 9976181, upload-time = "2026-04-27T14:43:21.463Z" }, - { url = "https://files.pythonhosted.org/packages/79/94/3ac1432bda31626071e9b6a12709b97ae05131c804b94c8f3ac622c5da32/tokenizers-0.23.1-cp310-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:e3d8f40ea6268047de7046906326abed5134f27d4e8447b23763afe5808c8a96", size = 10113853, upload-time = "2026-04-27T14:43:23.617Z" }, - { url = "https://files.pythonhosted.org/packages/6a/dd/631b21433c771b1382535326f0eca80b9c9cee2e64961dd993bc9ac4669e/tokenizers-0.23.1-cp310-abi3-win32.whl", hash = "sha256:93120a930b919416da7cd10a2f606ac9919cc69cacae7980fa2140e277660948", size = 2536263, upload-time = "2026-04-27T14:43:29.888Z" }, - { url = "https://files.pythonhosted.org/packages/97/c9/2553f72aaf65a2797d4229e37fa7fbe38ffbf3e32912d31bdd78b3323e59/tokenizers-0.23.1-cp310-abi3-win_amd64.whl", hash = "sha256:e7bfaf995c1bdbbd21d13539decb6650967013759318627d85daeb7881af16b7", size = 2798223, upload-time = "2026-04-27T14:43:28.51Z" }, - { url = "https://files.pythonhosted.org/packages/cd/2b/2be299bab55fc595e3d38567edb1a87f86e594842968fa9515a07bdcf422/tokenizers-0.23.1-cp310-abi3-win_arm64.whl", hash = "sha256:a26197957d8e4425dfba746315f3c425ea00cfa8367c5fbc4ec73447893dcea9", size = 2664127, upload-time = "2026-04-27T14:43:26.949Z" }, -] - [[package]] name = "tomli-w" version = "1.2.0" @@ -5751,16 +5610,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/fa/a8/5b41e0da817d64113292ab1f8247140aac61cbf6cfd085d6a0fa77f4984f/websockets-15.0.1-py3-none-any.whl", hash = "sha256:f7a866fbc1e97b5c617ee4116daaa09b722101d4a3c170c787450ba409f9736f", size = 169743, upload-time = "2025-03-05T20:03:39.41Z" }, ] -[[package]] -name = "wikipedia" -version = "1.4.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "beautifulsoup4" }, - { name = "requests" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/67/35/25e68fbc99e672127cc6fbb14b8ec1ba3dfef035bf1e4c90f78f24a80b7d/wikipedia-1.4.0.tar.gz", hash = "sha256:db0fad1829fdd441b1852306e9856398204dc0786d2996dd2e0c8bb8e26133b2", size = 27748, upload-time = "2014-11-15T15:59:49.808Z" } - [[package]] name = "wrapt" version = "2.3.0" @@ -5921,15 +5770,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/61/02/962c1cbfc401a30c1d034dc67ff395f64b52302c6d62de556c1fca99acc0/yarl-1.24.5-py3-none-any.whl", hash = "sha256:a33700d13d9b7d84fd10947b09ff69fb9a792e519c8cb9764a3ca70baa6c23a7", size = 58612, upload-time = "2026-07-20T02:07:43.461Z" }, ] -[[package]] -name = "zipp" -version = "4.1.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b9/d8/eab98a517c14134c0b2eb4e2387bc5f457334293ec5d2dd3857ec2966802/zipp-4.1.0.tar.gz", hash = "sha256:4cb57381f544315db7688e976e922a2b18cdb513d21cc194eb42232ba2a3e602", size = 26214, upload-time = "2026-05-18T20:08:57.967Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/3a/13/547360d81e6d88d58492968ffda9f9542854f11310ee556fef14260cc886/zipp-4.1.0-py3-none-any.whl", hash = "sha256:25ad4e16390cd314347dd8f1de67a2ac538ae658ed4ab9db16029c07c188e97f", size = 10238, upload-time = "2026-05-18T20:08:57.045Z" }, -] - [[package]] name = "zstandard" version = "0.25.0" diff --git a/e2e/test_nemo_agents_execute_job.py b/e2e/test_nemo_agents_execute_job.py index 31e770e8a1..6995ff67ce 100644 --- a/e2e/test_nemo_agents_execute_job.py +++ b/e2e/test_nemo_agents_execute_job.py @@ -356,7 +356,9 @@ def test_fabric_agent_invocation_job_saves_failed_run_result_and_partial_outputs assert run_result["request_id"] == job_name assert run_result["runtime_id"].startswith("runtime-") assert run_result["invocation_id"] - assert run_result["error"]["code"] == "adapter_reported_failure" - assert run_result["error"]["message"] == "adapter reported an invocation failure" + assert run_result["error"]["code"] == "deepagents_invocation_failed" + error_message = run_result["error"]["message"] + assert "InternalServerError" in error_message + assert "Error code: 500" in error_message finally: delete_agent_if_exists(sdk, workspace=workspace, name=agent_name) diff --git a/packages/nemo_evaluator_sdk/examples/fabric_container/run_e2e.py b/packages/nemo_evaluator_sdk/examples/fabric_container/run_e2e.py index 5ef3d0980f..0be1c90c83 100644 --- a/packages/nemo_evaluator_sdk/examples/fabric_container/run_e2e.py +++ b/packages/nemo_evaluator_sdk/examples/fabric_container/run_e2e.py @@ -42,15 +42,13 @@ async def main() -> int: # requirements.env); it resolves via the default LocalSecretResolver (from the host env) and injects # the value into the container. No raw credential on the API surface. runtime = FabricContainerRuntime( - # Typed hermes-SDK agent config: in-library transport, model-only (no codex/node). The harness is - # chosen by harness.adapter_id, never inferred from the model. + # Typed Hermes agent config: model-only (no codex/node). The harness is chosen by + # harness.adapter_id, never inferred from the model; Fabric owns its execution mechanism. FabricConfig( metadata=MetadataConfig(name="hermes-eval"), harness=HarnessConfig(adapter_id="nvidia.fabric.hermes", resolution="preinstalled"), models={"default": {"provider": "nvidia", "model": model}}, - runtime=RuntimeConfig.from_mapping( - {"mode": "oneshot", "transport": "library", "input_schema": "chat", "output_schema": "message"} - ), + runtime=RuntimeConfig(input_schema="chat", output_schema="message"), ), provider=DockerSandboxProvider(), secrets={"NVIDIA_API_KEY": SecretRef(root="NVIDIA_API_KEY")}, diff --git a/packages/nemo_evaluator_sdk/examples/fabric_harness_runtimes.py b/packages/nemo_evaluator_sdk/examples/fabric_harness_runtimes.py index a499f4fe61..cfb9ba6b8a 100644 --- a/packages/nemo_evaluator_sdk/examples/fabric_harness_runtimes.py +++ b/packages/nemo_evaluator_sdk/examples/fabric_harness_runtimes.py @@ -6,15 +6,17 @@ The same :class:`~nemo_evaluator_sdk.agent_eval.runtimes.fabric.runtime.FabricAgentRuntime` targets different agent harnesses purely via the Fabric config — the harness is selected by its ``harness.adapter_id``, never inferred from a model. Across harnesses the shape differs mainly in that -``adapter_id``, ``runtime.transport``, and any harness-specific ``harness.settings``: +``adapter_id``, optional input/output schemas, and any harness-specific ``harness.settings``: -* **Codex CLI** (``nvidia.fabric.codex``) runs the agent as a subprocess — ``transport="cli"`` — - and takes codex-specific ``harness.settings`` such as sandbox and approval modes. -* **Hermes SDK** (``nvidia.fabric.hermes``) runs in-library — ``transport="library"`` — and - declares its ``input``/``output`` schemas instead. +* **Codex** (``nvidia.fabric.codex``) takes codex-specific ``harness.settings`` such as sandbox and + approval modes. +* **Hermes** (``nvidia.fabric.hermes``) declares its ``input``/``output`` schemas. + +Fabric owns each adapter's execution mechanism; callers select the adapter rather than configuring a +CLI-versus-library transport. An optional ``model=`` slug (e.g. ``"openai/gpt-5.4"``) can be passed to ``FabricAgentRuntime`` to -overlay the model as a final profile, mirroring Fabric's own Harbor integration. +apply the model to each task config, mirroring Fabric's own Harbor integration. The configs are built from ``nemo_fabric``'s typed config objects (``FabricConfig`` etc.), which validate structure at construction. That makes this module — like any real Fabric use — require the @@ -36,7 +38,7 @@ RuntimeConfig, ) -#: Codex CLI harness — subprocess transport, codex-specific harness settings. +#: Codex harness with codex-specific settings. CODEX_CLI_CONFIG = FabricConfig( metadata=MetadataConfig(name="codex-eval"), harness=HarnessConfig( @@ -44,17 +46,14 @@ settings={"sandbox": "read-only"}, ), models={"default": ModelConfig(provider="openai", model="gpt-5.4")}, - runtime=RuntimeConfig.from_mapping({"mode": "oneshot", "transport": "cli"}), ) -#: Hermes SDK harness — in-library transport, explicit chat/message schemas. +#: Hermes harness with explicit chat/message schemas. HERMES_SDK_CONFIG = FabricConfig( metadata=MetadataConfig(name="hermes-eval"), harness=HarnessConfig(adapter_id="nvidia.fabric.hermes", resolution="preinstalled"), models={"default": ModelConfig(provider="nvidia", model="qwen2.5-coder-32b")}, - runtime=RuntimeConfig.from_mapping( - {"mode": "oneshot", "transport": "library", "input_schema": "chat", "output_schema": "message"} - ), + runtime=RuntimeConfig(input_schema="chat", output_schema="message"), ) #: Named Fabric configs, one per harness, keyed by a short label. diff --git a/packages/nemo_evaluator_sdk/examples/legal_agent_bench_fabric/run_legal_agent_bench_fabric.py b/packages/nemo_evaluator_sdk/examples/legal_agent_bench_fabric/run_legal_agent_bench_fabric.py index 338839079d..9801438eec 100644 --- a/packages/nemo_evaluator_sdk/examples/legal_agent_bench_fabric/run_legal_agent_bench_fabric.py +++ b/packages/nemo_evaluator_sdk/examples/legal_agent_bench_fabric/run_legal_agent_bench_fabric.py @@ -59,15 +59,14 @@ def _fabric_config(harness: str, *, provider: str, model: str, api_key_env: str) "metadata": {"name": "lab-fabric-eval"}, "models": {"default": {"provider": provider, "model": model, "api_key_env": api_key_env}}, } - # Adapter ids are the base harness name; transport is set separately in `runtime` (newer nemo-fabric - # dropped the `.cli`/`.sdk` suffix from adapter ids). + # Adapter ids select the harness implementation directly; Fabric owns its execution mechanism. if harness == "deepagents": # LangChain Deep Agents — provider-agnostic; for provider=nvidia it targets NVIDIA's # OpenAI-compatible endpoint. The recommended harness for NVIDIA-hosted models. return { **common, "harness": {"adapter_id": "nvidia.fabric.langchain.deepagents"}, - "runtime": {"mode": "oneshot", "transport": "library", "input_schema": "chat", "output_schema": "message"}, + "runtime": {"input_schema": "chat", "output_schema": "message"}, } if harness == "codex-cli": # codex runs as the SDK adapter here; CLI-only settings (e.g. skip_git_repo_check) are rejected. @@ -85,12 +84,11 @@ def _fabric_config(harness: str, *, provider: str, model: str, api_key_env: str) "config_overrides": {"web_search": "disabled", "sandbox_workspace_write.network_access": False}, }, }, - "runtime": {"mode": "oneshot", "transport": "cli"}, } return { # hermes-sdk **common, "harness": {"adapter_id": "nvidia.fabric.hermes", "resolution": "preinstalled"}, - "runtime": {"mode": "oneshot", "transport": "library", "input_schema": "chat", "output_schema": "message"}, + "runtime": {"input_schema": "chat", "output_schema": "message"}, } diff --git a/packages/nemo_evaluator_sdk/examples/skill_eval/README.md b/packages/nemo_evaluator_sdk/examples/skill_eval/README.md index 9fa1285177..5c9933f6fd 100644 --- a/packages/nemo_evaluator_sdk/examples/skill_eval/README.md +++ b/packages/nemo_evaluator_sdk/examples/skill_eval/README.md @@ -101,7 +101,7 @@ emitted only by the index task and the gcd task respectively.) *obey* the injected skill: weaker models read the guidelines but ignore them, producing a flat A/B (a valid, if undramatic, result). `nvidia/nemotron-3-super-120b-a12b` produces the lift shown above. -- The Hermes agent loop budget is `harness.settings.max_iterations` (set to 50 +- The Hermes agent loop budget is `runtime.max_turns` (set to 50 here). The Fabric Hermes adapter defaults it to **1**, which starves any multi-step task — leave it set. - The guidelines metrics score the **parsed function signature** (`ast`, with a diff --git a/packages/nemo_evaluator_sdk/examples/skill_eval/run_skill_eval.py b/packages/nemo_evaluator_sdk/examples/skill_eval/run_skill_eval.py index 5927eada8c..2bffb2c384 100644 --- a/packages/nemo_evaluator_sdk/examples/skill_eval/run_skill_eval.py +++ b/packages/nemo_evaluator_sdk/examples/skill_eval/run_skill_eval.py @@ -244,10 +244,9 @@ async def _main() -> int: "harness": { "adapter_id": "nvidia.fabric.hermes", "resolution": "preinstalled", - "settings": {"max_iterations": 50}, }, "models": {"default": {"provider": "nvidia", "model": MODEL}}, - "runtime": {"mode": "oneshot", "transport": "library", "input_schema": "chat", "output_schema": "message"}, + "runtime": {"input_schema": "chat", "output_schema": "message", "max_turns": 50}, } baseline_runtime = FabricAgentRuntime(config=fabric_config) diff --git a/packages/nemo_evaluator_sdk/pyproject.toml b/packages/nemo_evaluator_sdk/pyproject.toml index 7441fe268f..4eaac9d8bf 100644 --- a/packages/nemo_evaluator_sdk/pyproject.toml +++ b/packages/nemo_evaluator_sdk/pyproject.toml @@ -34,15 +34,12 @@ dependencies = [ "ragas==0.4.3", "langchain-openai>=1.3.5", "langchain-nvidia-ai-endpoints>=1.4.3,<2.0.0", - "nemo-relay>=0.6.0,<0.7", + "nemo-relay>=0.7.2,<0.8", # Fabric's typed config surface (FabricConfig/RuntimeConfig/ModelConfig/the relay models) — what the - # agent-eval runtimes compose against. The metapackage alone is ~2 MB / 3 packages; it requires - # nemo-fabric-runtime unconditionally as of rc4, which is why the `runtime` extra it used to expose - # is gone. The harness adapters are the weight (codex ~299 MB, claude ~231 MB) and stay in the - # `fabric` extra below, so only *resolving and running* a harness pulls them. - # Floor 0.1.1 requires the ATIF finalization fix (NVBug 6562649 / Fabric #181). - # Workspace uv.sources may still override to a git SHA until PyPI ships 0.2.0. - "nemo-fabric>=0.1.1,<0.3.0", + # agent-eval runtimes compose against. The metapackage includes nemo-fabric-runtime; the harness + # adapters are the weight (codex ~299 MB, claude ~231 MB) and stay in the `fabric` extra below, so + # only *resolving and running* a harness pulls them. + "nemo-fabric>=0.2.0,<0.3.0", ] version = "0.0.0" @@ -82,24 +79,19 @@ nemo-platform = [ # adapters: []`. Adapter descriptors install as wheel data under # /share/nemo-fabric/adapters, which is where Fabric discovers them — so an # ephemeral overlay env (`uv run --with ...`) hides them; install into the venv instead. -# * Fabric has not cut a final 0.1.0 yet, so the explicit prerelease in the specifier scopes uv's -# prerelease allowance to just this package (workspace prerelease = "if-necessary-or-explicit"). -# The floor stays at the oldest rc whose API this runtime targets; the lock tracks the newest. -# * claude/codex go through the metapackage extras, which pin `nemo-fabric-adapters-*==`. -# That keeps the adapters and the SDK we type against on one version by construction — they were -# pinned directly through rc5 only because rc4's extras required `nemo-fabric-adapters-*==0.1.0`, -# a version that was never published. Fixed in rc6. +# * claude/codex go through the metapackage extras, which keep the adapters and the Fabric SDK on +# compatible versions. # * hermes stays direct because it must omit `[harness]`, and the metapackage's `hermes-agent` # extra applies it. `[harness]` pulls `hermes-agent`, which pins `requests==2.33.0` exactly and # conflicts with the workspace's `requests>=2.33.1` floor; the adapter alone is what the runtime # needs. It cannot drift from the others regardless: every adapter pins -# `nemo-fabric-adapters-common==`, so one shared common forces one shared rc. +# `nemo-fabric-adapters-common==`, so one shared common forces compatible versions. # Python<3.14-gated upstream, which the lock's own <3.14 ceiling already satisfies. # * deepagents is omitted to match plugins/nemo-agents (AIRCORE-952: its adapter does not support # the Relay observability v2 config Fabric streaming generates). Nothing here exercises it. fabric = [ - "nemo-fabric[claude,codex]>=0.1.1,<0.3.0", - "nemo-fabric-adapters-hermes>=0.1.1,<0.3.0; python_version < '3.14'", + "nemo-fabric[claude,codex]>=0.2.0,<0.3.0", + "nemo-fabric-adapters-hermes>=0.2.0,<0.3.0; python_version < '3.14'", ] [project.entry-points."nemo.fabric.task_hooks"] diff --git a/packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/runtimes/fabric/container_runtime.py b/packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/runtimes/fabric/container_runtime.py index 2af24ecefb..456523450b 100644 --- a/packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/runtimes/fabric/container_runtime.py +++ b/packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/runtimes/fabric/container_runtime.py @@ -285,7 +285,7 @@ def _resolve_skill_mode(self) -> SkillMode | None: probe_config = FabricConfig.from_mapping(self._config) probe_config.add_skill_path(_SKILL_PROBE_PATH) plan = Fabric().plan(probe_config) - return resolve_skill_mode(capability_plan=plan.capability_plan, harness=plan.adapter.harness) + return resolve_skill_mode(capability_plan=plan.capability_plan, adapter_id=self._adapter_id()) def _adapter_id(self) -> str: """The harness adapter id declared by the config mapping (for provenance + error messages).""" @@ -348,7 +348,7 @@ def _composed_config(self, skill_paths: Sequence[str] = ()) -> dict[str, Any]: config = dict(self._config) # Each section is spread over the caller's, so sibling keys survive — pinning - # ``runtime.artifacts`` must not drop a configured ``runtime.transport``. + # ``runtime.artifacts`` must not drop configured input/output schemas or timeouts. config["runtime"] = {**_section(config, "runtime"), "artifacts": _ARTIFACTS_DIR} # ``provider: local`` is required by the native planner in the container (it does not inject the # Python default), and the workspace pins the harness cwd to the retrievable /out subtree. diff --git a/packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/runtimes/fabric/runtime.py b/packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/runtimes/fabric/runtime.py index 381f42849d..29285d2626 100644 --- a/packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/runtimes/fabric/runtime.py +++ b/packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/runtimes/fabric/runtime.py @@ -117,10 +117,9 @@ class FabricAgentRuntime: """AgentTaskRunner that generates trials by running tasks through NeMo Fabric. The harness is selected entirely by ``config["harness"]["adapter_id"]``. Across harnesses the - config shape differs mainly in that ``adapter_id``, ``runtime.transport``, and any harness-specific - ``harness.settings`` — e.g. Codex runs as a subprocess (``transport="cli"``) while the Hermes SDK - harness runs in-library (``transport="library"``). See - ``examples/fabric_harness_runtimes.py`` for full Codex-CLI and Hermes-SDK config examples. + config shape differs mainly in that ``adapter_id``, optional input/output schemas, and any + harness-specific ``harness.settings``. Fabric owns each adapter's execution mechanism. See + ``examples/fabric_harness_runtimes.py`` for full Codex and Hermes config examples. """ def __init__( @@ -271,7 +270,10 @@ def _resolve_skill_mode(self, client: Fabric, agent_config: FabricConfig) -> Ski probe_config = agent_config.model_copy(deep=True) probe_config.add_skill_path(_SKILL_PROBE_PATH) plan = client.plan(probe_config, base_dir=self._base_dir) - return resolve_skill_mode(capability_plan=plan.capability_plan, harness=plan.adapter.harness) + return resolve_skill_mode( + capability_plan=plan.capability_plan, + adapter_id=agent_config.harness.adapter_id, + ) async def _run_task( self, diff --git a/packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/runtimes/fabric/skills.py b/packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/runtimes/fabric/skills.py index 4e1a912315..cfe5d7a71a 100644 --- a/packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/runtimes/fabric/skills.py +++ b/packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/runtimes/fabric/skills.py @@ -73,9 +73,9 @@ # runtime plans a probe skill path and reads these to decide the injection mode (see resolve_skill_mode). _SKILLS_ROUTE_KIND = "skills" _SKILLS_TARGET_NATIVE = "harness_native" -# Fabric harness name of the Codex CLI adapter, which self-discovers ``.agents/skills/`` rather than +# Fabric adapter id of Codex, which self-discovers ``.agents/skills/`` rather than # accepting the native ``skills`` config. -_CODEX_HARNESS = "codex" +_CODEX_ADAPTER_ID = "nvidia.fabric.codex" class SkillInjectionError(ValueError): @@ -165,7 +165,7 @@ def native_skills_route(capability_plan: Mapping[str, object]) -> bool: ) -def resolve_skill_mode(*, capability_plan: Mapping[str, object], harness: str) -> SkillMode | None: +def resolve_skill_mode(*, capability_plan: Mapping[str, object], adapter_id: str) -> SkillMode | None: """Resolve how a skill would reach the selected harness, or ``None`` if it can't. Driven by Fabric's own capability routing (queried at runtime via ``Fabric.plan``) rather than a @@ -178,7 +178,7 @@ def resolve_skill_mode(*, capability_plan: Mapping[str, object], harness: str) - """ if native_skills_route(capability_plan): return SKILL_MODE_NATIVE - if harness.strip().lower() == _CODEX_HARNESS: + if adapter_id.strip().lower() == _CODEX_ADAPTER_ID: return SKILL_MODE_CODEX_SKILLS_DIR return None diff --git a/packages/nemo_evaluator_sdk/tests/agent_eval/test_fabric_container_runtime.py b/packages/nemo_evaluator_sdk/tests/agent_eval/test_fabric_container_runtime.py index 1ef7e2b764..0cc51b8b7a 100644 --- a/packages/nemo_evaluator_sdk/tests/agent_eval/test_fabric_container_runtime.py +++ b/packages/nemo_evaluator_sdk/tests/agent_eval/test_fabric_container_runtime.py @@ -328,7 +328,7 @@ def test_trajectory_telemetry_built_from_relay_types() -> None: assert component["kind"] == "observability" and component["enabled"] is True cfg = component["config"] # The ATIF/ATOF file exporter is configured with the names both runtimes agree on. Since - # nemo-relay 0.6 the ATOF destination lives in a typed sink list rather than flat on the config. + # Since nemo-relay 0.6 the ATOF destination lives in a typed sink list rather than flat on the config. assert cfg["atif"]["enabled"] is True assert cfg["atif"]["filename_template"] == crt._common.ATIF_FILENAME_TEMPLATE assert cfg["atof"]["enabled"] is True diff --git a/packages/nemo_evaluator_sdk/tests/agent_eval/test_fabric_integration.py b/packages/nemo_evaluator_sdk/tests/agent_eval/test_fabric_integration.py index 4e55ec16f7..169f630657 100644 --- a/packages/nemo_evaluator_sdk/tests/agent_eval/test_fabric_integration.py +++ b/packages/nemo_evaluator_sdk/tests/agent_eval/test_fabric_integration.py @@ -270,8 +270,6 @@ def test_fabric_codex_live_eval_captures_atif_trajectory(tmp_path: Path) -> None "settings": {"sandbox": "workspace-write"}, }, "runtime": { - "mode": "oneshot", - "transport": "cli", "input_schema": "text", "output_schema": "message", "timeout_seconds": 180, diff --git a/packages/nemo_evaluator_sdk/tests/agent_eval/test_fabric_skills.py b/packages/nemo_evaluator_sdk/tests/agent_eval/test_fabric_skills.py index a9cb672f38..db36101dea 100644 --- a/packages/nemo_evaluator_sdk/tests/agent_eval/test_fabric_skills.py +++ b/packages/nemo_evaluator_sdk/tests/agent_eval/test_fabric_skills.py @@ -79,22 +79,22 @@ def test_native_skills_route(capability_plan: dict[str, object], expected: bool) @pytest.mark.parametrize( - ("capability_plan", "harness", "expected"), + ("capability_plan", "adapter_id", "expected"), [ - # Native routing wins regardless of harness name (e.g. Hermes, or an end-user adapter). - (_plan(native=True), "hermes", SKILL_MODE_NATIVE), - (_plan(native=True), "acme-custom", SKILL_MODE_NATIVE), - # Not native, but a codex harness -> self-discovered .agents/skills dir. - (_plan(native=False), "codex", SKILL_MODE_CODEX_SKILLS_DIR), - (_plan(native=None), "codex", SKILL_MODE_CODEX_SKILLS_DIR), - (_plan(native=False), "CODEX", SKILL_MODE_CODEX_SKILLS_DIR), # case-insensitive + # Native routing wins regardless of adapter id (e.g. Hermes, or an end-user adapter). + (_plan(native=True), "nvidia.fabric.hermes", SKILL_MODE_NATIVE), + (_plan(native=True), "acme.custom", SKILL_MODE_NATIVE), + # Not native, but the Codex adapter -> self-discovered .agents/skills dir. + (_plan(native=False), "nvidia.fabric.codex", SKILL_MODE_CODEX_SKILLS_DIR), + (_plan(native=None), "nvidia.fabric.codex", SKILL_MODE_CODEX_SKILLS_DIR), + (_plan(native=False), "NVIDIA.FABRIC.CODEX", SKILL_MODE_CODEX_SKILLS_DIR), # case-insensitive # Neither native nor codex -> unsupported (runtime fails fast). - (_plan(native=False), "hermes", None), - (_plan(native=None), "some-other", None), + (_plan(native=False), "nvidia.fabric.hermes", None), + (_plan(native=None), "acme.other", None), ], ) -def test_resolve_skill_mode(capability_plan: dict[str, object], harness: str, expected: str | None) -> None: - assert resolve_skill_mode(capability_plan=capability_plan, harness=harness) == expected +def test_resolve_skill_mode(capability_plan: dict[str, object], adapter_id: str, expected: str | None) -> None: + assert resolve_skill_mode(capability_plan=capability_plan, adapter_id=adapter_id) == expected def test_install_native_stages_named_dir_and_overlay(tmp_path: Path) -> None: diff --git a/packages/nemo_evaluator_sdk/tests/agent_eval/test_fabric_surface.py b/packages/nemo_evaluator_sdk/tests/agent_eval/test_fabric_surface.py index 96eb7b8e41..0ea3589504 100644 --- a/packages/nemo_evaluator_sdk/tests/agent_eval/test_fabric_surface.py +++ b/packages/nemo_evaluator_sdk/tests/agent_eval/test_fabric_surface.py @@ -79,13 +79,13 @@ def _codex_adapter_installed() -> bool: _HERMES_CONFIG = { "metadata": {"name": "fabric-surface-hermes"}, "harness": {"adapter_id": _HERMES_ADAPTER_ID, "resolution": "preinstalled"}, - "runtime": {"mode": "oneshot", "transport": "library", "input_schema": "chat", "output_schema": "message"}, + "runtime": {"input_schema": "chat", "output_schema": "message"}, "environment": {"provider": "local"}, } _CODEX_CONFIG = { "metadata": {"name": "fabric-surface"}, "harness": {"adapter_id": _CODEX_ADAPTER_ID, "resolution": "preinstalled"}, - "runtime": {"mode": "oneshot", "transport": "cli", "input_schema": "text", "output_schema": "message"}, + "runtime": {"input_schema": "text", "output_schema": "message"}, "environment": {"provider": "local"}, } @@ -203,7 +203,10 @@ def test_hermes_routes_skills_natively_per_the_real_planner() -> None: plan = Fabric().plan(probe) assert plan.adapter.adapter_id == _HERMES_ADAPTER_ID - assert resolve_skill_mode(capability_plan=plan.capability_plan, harness=plan.adapter.harness) == SKILL_MODE_NATIVE + assert ( + resolve_skill_mode(capability_plan=plan.capability_plan, adapter_id=plan.adapter.adapter_id) + == SKILL_MODE_NATIVE + ) @requires_harness_adapters @@ -225,4 +228,7 @@ def test_codex_also_routes_skills_natively_so_the_workspace_branch_is_a_fallback plan = Fabric().plan(probe) assert "skills" in plan.capability_plan.get("routes", [])[0].get("kind", "") - assert resolve_skill_mode(capability_plan=plan.capability_plan, harness=plan.adapter.harness) == SKILL_MODE_NATIVE + assert ( + resolve_skill_mode(capability_plan=plan.capability_plan, adapter_id=plan.adapter.adapter_id) + == SKILL_MODE_NATIVE + ) diff --git a/packages/nemo_platform/pyproject.toml b/packages/nemo_platform/pyproject.toml index 89335cf6d3..08030d4c2c 100644 --- a/packages/nemo_platform/pyproject.toml +++ b/packages/nemo_platform/pyproject.toml @@ -245,8 +245,8 @@ nemo-agents-plugin = [ "pyyaml>=6.0", "anthropic>=0.88.0", "rich>=13.7.1", - "nemo-fabric[claude,codex,deepagents,relay]>=0.1.0,<0.3.0", - "nemo-fabric-adapters-hermes>=0.1.0,<0.3.0; python_version < '3.14'", + "nemo-fabric[claude,codex,deepagents,relay]>=0.2.0,<0.3.0", + "nemo-fabric-adapters-hermes>=0.2.0,<0.3.0; python_version < '3.14'", ] # Generated from [tool.bundle-package]; do not edit by hand. @@ -326,8 +326,8 @@ nemo-evaluator-sdk = [ "ragas==0.4.3", "langchain-openai>=1.3.5", "langchain-nvidia-ai-endpoints>=1.4.3,<2.0.0", - "nemo-relay>=0.6.0,<0.7", - "nemo-fabric>=0.1.1,<0.3.0", + "nemo-relay>=0.7.2,<0.8", + "nemo-fabric>=0.2.0,<0.3.0", ] # Generated from [tool.bundle-package]; do not edit by hand. diff --git a/plugins/nemo-agents/README.md b/plugins/nemo-agents/README.md index 6314a56da1..9dcec1c016 100644 --- a/plugins/nemo-agents/README.md +++ b/plugins/nemo-agents/README.md @@ -383,10 +383,11 @@ installation differs: | Config-only | No `--pyproject` | Install the release-matched `nemo-platform[nemo-agents-plugin]` runtime | | Project | `--pyproject` provided | Install the release-matched runtime and the project together | -The image includes the supported harness adapters and dependencies, pinned NeMo -Relay CLI `0.6.0`, a non-root `agent` user, and the packaged agent server on -port `8000`. The Hermes adapter is installed, but the Hermes harness runtime -remains excluded until its Python dependency constraint is resolved. +The image includes the supported harness adapters and dependencies, matching +NeMo Relay CLI and Python binding version `0.7.3`, a non-root `agent` user, and +the packaged agent server on port `8000`. The Hermes adapter is installed, but +the Hermes harness runtime remains excluded until its Python dependency +constraint is resolved. #### Deploy the packaged calculator image diff --git a/plugins/nemo-agents/examples/nemo-agent-config/README.md b/plugins/nemo-agents/examples/nemo-agent-config/README.md index 36708e3166..d9107346ce 100644 --- a/plugins/nemo-agents/examples/nemo-agent-config/README.md +++ b/plugins/nemo-agents/examples/nemo-agent-config/README.md @@ -133,8 +133,8 @@ install it with the Fabric adapter in a separate Python 3.12 environment: uvx uv@0.9.14 venv --python 3.12 .venv-hermes uvx uv@0.9.14 --no-config pip install \ --python .venv-hermes/bin/python \ - "nemo-fabric[relay]>=0.1.0rc6,<0.2.0" \ - "nemo-fabric-adapters-hermes>=0.1.0rc6,<0.2.0" \ + "nemo-fabric[relay]>=0.2.0,<0.3.0" \ + "nemo-fabric-adapters-hermes>=0.2.0,<0.3.0" \ "hermes-agent==0.19.0" export ADAPTER_PYTHON="$PWD/.venv-hermes/bin/python" diff --git a/plugins/nemo-agents/pyproject.toml b/plugins/nemo-agents/pyproject.toml index 61aace2021..e633ac9feb 100644 --- a/plugins/nemo-agents/pyproject.toml +++ b/plugins/nemo-agents/pyproject.toml @@ -35,13 +35,11 @@ dependencies = [ # improvement/ subpackage — agent-improvement workflow (POC). "anthropic>=0.88.0", "rich>=13.7.1", - # Floor stays at 0.1.0 so published wheels remain PyPI-resolvable (wheelcheck / consumers). - # Workspace uv.sources pins the mid-Aug main SHA (0.2.0 content) until PyPI ships 0.2.0. - "nemo-fabric[claude,codex,deepagents,relay]>=0.1.0,<0.3.0", + "nemo-fabric[claude,codex,deepagents,relay]>=0.2.0,<0.3.0", # TODO(AIRCORE-952): Switch to the metapackage's `hermes-agent` extra once hermes-agent # relaxes its vulnerable exact dependency pins — that extra applies [harness], which # pins requests==2.33.0. - "nemo-fabric-adapters-hermes>=0.1.0,<0.3.0; python_version < '3.14'", + "nemo-fabric-adapters-hermes>=0.2.0,<0.3.0; python_version < '3.14'", ] version = "0.0.0" diff --git a/plugins/nemo-agents/src/nemo_agents_plugin/container/template.py b/plugins/nemo-agents/src/nemo_agents_plugin/container/template.py index ce754aba5f..5514eaabbb 100644 --- a/plugins/nemo-agents/src/nemo_agents_plugin/container/template.py +++ b/plugins/nemo-agents/src/nemo_agents_plugin/container/template.py @@ -89,7 +89,7 @@ def is_plugin_managed(path: Path) -> bool: "uv_version": "NEMO_AGENTS_UV_VERSION", } -PINNED_NEMO_RELAY_CLI_VERSION = "0.6.0" +PINNED_NEMO_RELAY_CLI_VERSION = "0.7.3" PINNED_NEMO_RELAY_INSTALLER_COMMIT = "40c5990361afc26ae8b901ff1f49c2b03ddd9ede" PINNED_NEMO_RELAY_INSTALLER_SHA256 = "ba2585a32e568643819992fa66b750004328351fce422b979d8c11cfc8bbfadb" @@ -238,14 +238,16 @@ def is_plugin_managed(path: Path) -> bool: RUN --mount=type=cache,id=uv_cache,target=/root/.cache/uv,sharing=locked \\ uv venv --python ${PYTHON_VERSION} /workspace/.venv && \\ . /workspace/.venv/bin/activate && \\ - uv pip install "nemo-platform[nemo-agents-plugin]=={{ contract_version }}" . && \\ + uv pip install "nemo-platform[nemo-agents-plugin]=={{ contract_version }}" \\ + "nemo-relay=={{ pinned_nemo_relay_cli_version }}" . && \\ chmod -R a+rX /opt/uv /workspace/.venv {% else %} # The plugin owns the supported Fabric adapter and harness dependency set. RUN --mount=type=cache,id=uv_cache,target=/root/.cache/uv,sharing=locked \\ uv venv --python ${PYTHON_VERSION} /workspace/.venv && \\ . /workspace/.venv/bin/activate && \\ - uv pip install "nemo-platform[nemo-agents-plugin]=={{ contract_version }}" && \\ + uv pip install "nemo-platform[nemo-agents-plugin]=={{ contract_version }}" \\ + "nemo-relay=={{ pinned_nemo_relay_cli_version }}" && \\ chmod -R a+rX /opt/uv /workspace/.venv {% endif %} diff --git a/plugins/nemo-agents/src/nemo_agents_plugin/fabric/translator.py b/plugins/nemo-agents/src/nemo_agents_plugin/fabric/translator.py index e510ad6bc5..2d57b4e8ff 100644 --- a/plugins/nemo-agents/src/nemo_agents_plugin/fabric/translator.py +++ b/plugins/nemo-agents/src/nemo_agents_plugin/fabric/translator.py @@ -6,10 +6,10 @@ from __future__ import annotations import os +from pathlib import Path from typing import Any -# CI type-checks this plugin via ty extra-paths without installing nemo-agents deps. -import nemo_fabric as fabric # ty: ignore[unresolved-import] +import nemo_fabric as fabric from nemo_agents_plugin.agent_config import AgentConfig, HarnessConfig, ModelConfig from nemo_agents_plugin.fabric.gateway_credentials import ( bind_platform_gateway_model_credential, @@ -133,7 +133,9 @@ def _instructions_config(config: AgentConfig) -> Any: def _skills_config(config: AgentConfig) -> Any: if config.skills is None: return None - return fabric.SkillConfig(paths=config.skills.paths) + paths: list[str | Path] = [] + paths.extend(config.skills.paths) + return fabric.SkillConfig(paths=paths) def _mcp_config(config: AgentConfig) -> Any: @@ -168,7 +170,7 @@ def _apply_telemetry(fabric_config: Any, config: AgentConfig, model: ModelConfig def _relay_observability_config(config: AgentConfig, model: ModelConfig) -> dict[str, Any]: telemetry = config.telemetry - observability: dict[str, Any] = {"version": 2} + observability: dict[str, Any] = {"version": 3} if telemetry.atif is not None: atif = dict(telemetry.atif) diff --git a/plugins/nemo-agents/tests/unit/test_container.py b/plugins/nemo-agents/tests/unit/test_container.py index c77f859425..c28c4b1595 100644 --- a/plugins/nemo-agents/tests/unit/test_container.py +++ b/plugins/nemo-agents/tests/unit/test_container.py @@ -394,7 +394,7 @@ def _render(**overrides: object) -> str: params = FabricRenderParams(contract_version="1.2.3", **overrides) return _jinja_env().from_string(FABRIC_DOCKERFILE_TEMPLATE).render(**asdict(params)) - def test_installs_pinned_relay_cli_globally(self) -> None: + def test_installs_matching_relay_cli_and_python_binding(self) -> None: from nemo_agents_plugin.container.template import ( PINNED_NEMO_RELAY_CLI_VERSION, PINNED_NEMO_RELAY_INSTALLER_COMMIT, @@ -407,6 +407,7 @@ def test_installs_pinned_relay_cli_globally(self) -> None: assert f'echo "{PINNED_NEMO_RELAY_INSTALLER_SHA256} /tmp/install-nemo-relay.sh"' in result assert result.index("sha256sum -c -") < result.index("NEMO_RELAY_VERSION=") assert f"NEMO_RELAY_VERSION={PINNED_NEMO_RELAY_CLI_VERSION}" in result + assert f'"nemo-relay=={PINNED_NEMO_RELAY_CLI_VERSION}"' in result assert "--install-dir /usr/local/bin" in result assert "nemo-relay --version" in result assert "ARG NEMO_RELAY" not in result @@ -475,7 +476,11 @@ def test_renders_platform_agent_oci_labels(self, tmp_path: Path) -> None: assert f'com.nemo.agent.contract-version="{get_contract_version()}"' in result def test_project_mode_preserves_relative_config_path(self, tmp_path: Path) -> None: - from nemo_agents_plugin.container.template import get_contract_version, render_fabric_dockerfile + from nemo_agents_plugin.container.template import ( + PINNED_NEMO_RELAY_CLI_VERSION, + get_contract_version, + render_fabric_dockerfile, + ) configs = tmp_path / "configs" configs.mkdir() @@ -486,10 +491,10 @@ def test_project_mode_preserves_relative_config_path(self, tmp_path: Path) -> No result = render_fabric_dockerfile(agent_config, pyproject) - assert f'uv pip install "nemo-platform[nemo-agents-plugin]=={get_contract_version()}" .' in result + assert f'uv pip install "nemo-platform[nemo-agents-plugin]=={get_contract_version()}"' in result + assert f'"nemo-relay=={PINNED_NEMO_RELAY_CLI_VERSION}" .' in result install_line = next(line for line in result.splitlines() if "uv pip install" in line) assert "--prerelease" not in install_line - assert '" .' in install_line assert "ENV AGENT_CONFIG_PATH=/workspace/configs/agent.yaml" in result def test_unresolved_contract_version_is_rejected( @@ -1789,8 +1794,9 @@ def test_fabric_no_build_project_mode_uses_project_root(self, package_cli, tmp_p assert output.exists() rendered = output.read_text() assert "ENV AGENT_CONFIG_PATH=/workspace/configs/agent.yaml" in rendered - install_line = next(line for line in rendered.splitlines() if "uv pip install" in line) - assert '" .' in install_line + from nemo_agents_plugin.container.template import PINNED_NEMO_RELAY_CLI_VERSION + + assert f'"nemo-relay=={PINNED_NEMO_RELAY_CLI_VERSION}" .' in rendered assert not (configs / "Dockerfile").exists() def test_no_build_project_mode_writes_dockerfile_next_to_pyproject( diff --git a/plugins/nemo-agents/tests/unit/test_fabric_package_validation.py b/plugins/nemo-agents/tests/unit/test_fabric_package_validation.py index cb0296989a..c3e5b8709f 100644 --- a/plugins/nemo-agents/tests/unit/test_fabric_package_validation.py +++ b/plugins/nemo-agents/tests/unit/test_fabric_package_validation.py @@ -236,7 +236,7 @@ def test_extracts_metadata_and_derives_default_tag(self, tmp_path: Path, monkeyp build_env={ "agent_framework": "nemo_platform_agent", "contract_version": "1.0.0", - "nemo_relay_cli_version": "0.6.0", + "nemo_relay_cli_version": template.PINNED_NEMO_RELAY_CLI_VERSION, "base_image_url": "registry.example/base", "base_image_tag": "release", "python_version": "3.13", diff --git a/plugins/nemo-agents/tests/unit/test_fabric_translator.py b/plugins/nemo-agents/tests/unit/test_fabric_translator.py index fe0e3f0ee0..92ae791463 100644 --- a/plugins/nemo-agents/tests/unit/test_fabric_translator.py +++ b/plugins/nemo-agents/tests/unit/test_fabric_translator.py @@ -84,33 +84,49 @@ def test_repository_example_uses_current_codex_and_isolated_hermes_adapters(self deepagents_config = translate_agent_config(config, harness_name="deepagents") hermes_config = translate_agent_config(config, harness_name="hermes") - assert codex_config.harness.adapter_id == "nvidia.fabric.codex" - assert "skip_git_repo_check" not in codex_config.harness.settings - assert claude_config.harness.adapter_id == "nvidia.fabric.claude" - assert claude_config.harness.settings["permission_mode"] == "dontAsk" - assert deepagents_config.harness.adapter_id == "nvidia.fabric.langchain.deepagents" - assert deepagents_config.harness.settings["deepagents"] == {} - assert hermes_config.harness.adapter_id == "nvidia.fabric.hermes" - assert hermes_config.harness.settings["max_tokens"] == 512 + codex_harness = codex_config.harness + claude_harness = claude_config.harness + deepagents_harness = deepagents_config.harness + hermes_harness = hermes_config.harness + assert codex_harness is not None + assert claude_harness is not None + assert deepagents_harness is not None + assert hermes_harness is not None + assert codex_harness.adapter_id == "nvidia.fabric.codex" + assert "skip_git_repo_check" not in codex_harness.settings + assert claude_harness.adapter_id == "nvidia.fabric.claude" + assert claude_harness.settings["permission_mode"] == "dontAsk" + assert deepagents_harness.adapter_id == "nvidia.fabric.langchain.deepagents" + assert deepagents_harness.settings["deepagents"] == {} + assert hermes_harness.adapter_id == "nvidia.fabric.hermes" + assert hermes_harness.settings["max_tokens"] == 512 def test_translates_default_harness(self) -> None: config = AgentConfig.model_validate(_example_yaml_config()) fabric_config = translate_agent_config(config) + harness = fabric_config.harness + instructions = fabric_config.instructions + environment = fabric_config.environment + assert harness is not None + assert instructions is not None + system_instruction = instructions.system + assert system_instruction is not None + assert environment is not None assert fabric_config.metadata.name == "example-agent" assert fabric_config.metadata.description == "Example Agent" - assert fabric_config.harness.adapter_id == "nvidia.fabric.hermes" - assert fabric_config.harness.resolution == "preinstalled" - assert fabric_config.harness.settings["max_tokens"] == 512 - assert fabric_config.instructions.system.content == "You are a concise assistant." - assert fabric_config.instructions.system.mode == "replace" + assert harness.adapter_id == "nvidia.fabric.hermes" + assert harness.resolution == "preinstalled" + assert harness.settings["max_tokens"] == 512 + assert system_instruction.content == "You are a concise assistant." + assert system_instruction.mode == "replace" assert fabric_config.models["default"].provider == "nvidia" assert fabric_config.models["default"].model == "nvidia/nemotron-3-nano-30b-a3b" assert fabric_config.models["default"].base_url == "https://integrate.api.nvidia.com/v1" - assert fabric_config.environment.provider == "local" - assert fabric_config.environment.workspace == "./workspace" - assert fabric_config.environment.artifacts == "./artifacts" + assert environment.provider == "local" + assert environment.workspace == "./workspace" + assert environment.artifacts == "./artifacts" assert fabric_config.relay is None def test_selected_harness_uses_default_model(self, monkeypatch: pytest.MonkeyPatch) -> None: @@ -121,8 +137,12 @@ def test_selected_harness_uses_default_model(self, monkeypatch: pytest.MonkeyPat fabric_config = translate_agent_config(config, harness_name="codex") - assert fabric_config.harness.adapter_id == "nvidia.fabric.codex" - assert fabric_config.harness.settings["sandbox"] == "workspace-write" + harness = fabric_config.harness + environment = fabric_config.environment + assert harness is not None + assert environment is not None + assert harness.adapter_id == "nvidia.fabric.codex" + assert harness.settings["sandbox"] == "workspace-write" assert fabric_config.models["default"].provider == "openai" assert fabric_config.models["default"].model == "openai/gpt-5.4" assert ( @@ -130,7 +150,7 @@ def test_selected_harness_uses_default_model(self, monkeypatch: pytest.MonkeyPat == "http://platform:8080/apis/inference-gateway/v2/workspaces/default/openai/-/v1" ) assert fabric_config.models["default"].api_key_env == PLATFORM_IGW_API_KEY_ENV - assert fabric_config.environment.env == {PLATFORM_IGW_API_KEY_ENV: PLATFORM_IGW_API_KEY_PLACEHOLDER} + assert environment.env == {PLATFORM_IGW_API_KEY_ENV: PLATFORM_IGW_API_KEY_PLACEHOLDER} assert config.models["default"].api_key_env is None def test_forwards_platform_runtime_environment_to_child_tools(self, monkeypatch: pytest.MonkeyPatch) -> None: @@ -141,7 +161,9 @@ def test_forwards_platform_runtime_environment_to_child_tools(self, monkeypatch: fabric_config = translate_agent_config(config, harness_name="codex") - assert fabric_config.environment.env == { + environment = fabric_config.environment + assert environment is not None + assert environment.env == { "NEMO_BASE_URL": "http://command-platform:8080", "NMP_BASE_URL": "http://shared-platform:8080", "NMP_WORKSPACE": "request-workspace", @@ -182,11 +204,17 @@ def test_translates_shared_capability_sections(self) -> None: fabric_config = translate_agent_config(config) - assert fabric_config.skills.paths == ["skills/review"] - assert fabric_config.mcp.servers["repo"].transport == "stdio" - assert fabric_config.mcp.servers["repo"].url == "repo-mcp --root ." - assert fabric_config.mcp.servers["repo"].exposure == "fabric_managed" - assert fabric_config.tools.blocked == ["shell", "browser"] + skills = fabric_config.skills + mcp = fabric_config.mcp + tools = fabric_config.tools + assert skills is not None + assert mcp is not None + assert tools is not None + assert skills.paths == ["skills/review"] + assert mcp.servers["repo"].transport == "stdio" + assert mcp.servers["repo"].url == "repo-mcp --root ." + assert mcp.servers["repo"].exposure == "fabric_managed" + assert tools.blocked == ["shell", "browser"] def test_top_level_prompts_rejected_until_shared_prompt_contract_exists(self) -> None: payload = copy.deepcopy(_example_yaml_config()) @@ -217,7 +245,9 @@ def test_supported_harness_kinds_translate_to_adapter_ids( fabric_config = translate_agent_config(config) - assert fabric_config.harness.adapter_id == adapter_id + harness = fabric_config.harness + assert harness is not None + assert harness.adapter_id == adapter_id def test_unknown_selected_harness_rejected(self) -> None: config = AgentConfig.model_validate(_example_yaml_config()) @@ -250,11 +280,20 @@ def test_relay_telemetry_uses_latest_fabric_shape(self) -> None: fabric_config = translate_agent_config(config) - assert fabric_config.telemetry.providers["relay"].config is None - assert fabric_config.relay.project == "example-agent" - assert fabric_config.relay.output_dir == "./artifacts/relay" - assert fabric_config.relay.observability.model_dump(exclude_none=True) == { - "version": 2, + telemetry = fabric_config.telemetry + assert telemetry is not None + relay_provider = telemetry.providers["relay"] + assert not isinstance(relay_provider, dict) + relay = fabric_config.relay + assert relay is not None + observability = relay.observability + assert observability is not None + assert relay_provider.config is None + assert relay.project == "example-agent" + assert relay.output_dir == "./artifacts/relay" + assert observability.model_dump(exclude_none=True) == { + "version": 3, + "enable_full_payloads": False, "atif": { "enabled": True, "filename_template": "trajectory-{session_id}.atif.json", @@ -292,7 +331,11 @@ def test_relay_atof_endpoint_sinks_translate_to_stream_sinks(self) -> None: fabric_config = translate_agent_config(config) - assert fabric_config.relay.observability.model_dump(exclude_none=True)["atof"]["sinks"] == [ + relay = fabric_config.relay + assert relay is not None + observability = relay.observability + assert observability is not None + assert observability.model_dump(exclude_none=True)["atof"]["sinks"] == [ { "type": "file", "output_directory": "./artifacts/relay", diff --git a/pyproject.toml b/pyproject.toml index 62676be44b..91a5ec96c3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -308,6 +308,13 @@ constraint-dependencies = [ "mistune>=3.3.2", "mcp>=1.28.1", "msgpack>=1.2.1", + "nemo-fabric-adapter-contract>=0.2.0,<0.3.0", + "nemo-fabric-adapters-claude>=0.2.0,<0.3.0", + "nemo-fabric-adapters-codex>=0.2.0,<0.3.0", + "nemo-fabric-adapters-common>=0.2.0,<0.3.0", + "nemo-fabric-adapters-deepagents>=0.2.0,<0.3.0", + "nemo-fabric-adapters-hermes>=0.2.0,<0.3.0", + "nemo-fabric-runtime>=0.2.0,<0.3.0", "nbconvert>=7.17.1", "nltk>=3.10.0", "pillow>=12.3.0", @@ -397,21 +404,6 @@ nemo-insights-plugin = { workspace = true } nemo-eval-author-plugin = { workspace = true } nemo-experimentalist-plugin = { workspace = true } -# Temporary until Fabric 0.2.0 publishes (mid-Aug): pin the monorepo SHA that lands -# FABRIC-167 (Hermes MCP discover + preserve mcp.servers.*.env). Override every -# package — git subdirectory sources do not inherit Fabric's own path mappings, -# and the metapackage pins runtime/adapters to ==0.2.0. -# Declared dep floors stay >=0.1.0 so wheelcheck / PyPI installs of the published -# wheel still resolve (uv.sources do not apply outside this workspace). -# Remove these entries once PyPI has 0.2.0. -nemo-fabric = { git = "https://github.com/NVIDIA/NeMo-Fabric.git", rev = "e7353383024523179be6a009ef16dea223bea8c0" } -nemo-fabric-runtime = { git = "https://github.com/NVIDIA/NeMo-Fabric.git", rev = "e7353383024523179be6a009ef16dea223bea8c0", subdirectory = "python" } -nemo-fabric-adapters-common = { git = "https://github.com/NVIDIA/NeMo-Fabric.git", rev = "e7353383024523179be6a009ef16dea223bea8c0", subdirectory = "adapters/common" } -nemo-fabric-adapters-claude = { git = "https://github.com/NVIDIA/NeMo-Fabric.git", rev = "e7353383024523179be6a009ef16dea223bea8c0", subdirectory = "adapters/claude" } -nemo-fabric-adapters-codex = { git = "https://github.com/NVIDIA/NeMo-Fabric.git", rev = "e7353383024523179be6a009ef16dea223bea8c0", subdirectory = "adapters/codex" } -nemo-fabric-adapters-deepagents = { git = "https://github.com/NVIDIA/NeMo-Fabric.git", rev = "e7353383024523179be6a009ef16dea223bea8c0", subdirectory = "adapters/deepagents" } -nemo-fabric-adapters-hermes = { git = "https://github.com/NVIDIA/NeMo-Fabric.git", rev = "e7353383024523179be6a009ef16dea223bea8c0", subdirectory = "adapters/hermes" } - nemo-evaluator-plugin = { workspace = true } nemo-guardrails-plugin = { workspace = true } nemo-auditor-plugin = { workspace = true } diff --git a/script/dev-install-fabric.sh b/script/dev-install-fabric.sh index 422a1da797..1c9523a729 100755 --- a/script/dev-install-fabric.sh +++ b/script/dev-install-fabric.sh @@ -28,7 +28,7 @@ # # Usage: # script/dev-install-fabric.sh # version matching the installed bindings -# NEMO_RELAY_VERSION=0.6.0-rc.4 script/dev-install-fabric.sh # pin a specific gateway release +# NEMO_RELAY_VERSION=0.7.3 script/dev-install-fabric.sh # pin a specific gateway release set -euo pipefail VENV_PY=".venv/bin/python" @@ -38,7 +38,7 @@ if [ ! -x "$VENV_PY" ]; then fi # NeMo-Relay tags releases with the version PyPI publishes, but PyPI normalizes prereleases -# (0.6.0rc4) while the git tag is semver (0.6.0-rc.4), so convert. +# (for example, 0.7.0rc1) while the git tag is semver (0.7.0-rc.1), so convert. if [ -z "${NEMO_RELAY_VERSION:-}" ]; then bindings_version="$("$VENV_PY" -c 'import importlib.metadata as m; print(m.version("nemo-relay"))' 2>/dev/null || true)" if [ -z "$bindings_version" ]; then diff --git a/sdk/python/nemo-platform/pyproject.toml b/sdk/python/nemo-platform/pyproject.toml index a8abf0ac54..27d96b9f5e 100644 --- a/sdk/python/nemo-platform/pyproject.toml +++ b/sdk/python/nemo-platform/pyproject.toml @@ -63,8 +63,8 @@ nemo-evaluator-sdk = [ "ragas==0.4.3", "langchain-openai>=1.3.5", "langchain-nvidia-ai-endpoints>=1.4.3,<2.0.0", - "nemo-relay>=0.6.0,<0.7", - "nemo-fabric>=0.1.1,<0.3.0", + "nemo-relay>=0.7.2,<0.8", + "nemo-fabric>=0.2.0,<0.3.0", ] [project.entry-points."nemo.skills"] diff --git a/sdk/python/nemo-platform/src/nemo_platform/beta/evaluator/agent_eval/runtimes/fabric/container_runtime.py b/sdk/python/nemo-platform/src/nemo_platform/beta/evaluator/agent_eval/runtimes/fabric/container_runtime.py index 882919befc..8668998dd3 100644 --- a/sdk/python/nemo-platform/src/nemo_platform/beta/evaluator/agent_eval/runtimes/fabric/container_runtime.py +++ b/sdk/python/nemo-platform/src/nemo_platform/beta/evaluator/agent_eval/runtimes/fabric/container_runtime.py @@ -285,7 +285,7 @@ def _resolve_skill_mode(self) -> SkillMode | None: probe_config = FabricConfig.from_mapping(self._config) probe_config.add_skill_path(_SKILL_PROBE_PATH) plan = Fabric().plan(probe_config) - return resolve_skill_mode(capability_plan=plan.capability_plan, harness=plan.adapter.harness) + return resolve_skill_mode(capability_plan=plan.capability_plan, adapter_id=self._adapter_id()) def _adapter_id(self) -> str: """The harness adapter id declared by the config mapping (for provenance + error messages).""" @@ -348,7 +348,7 @@ def _composed_config(self, skill_paths: Sequence[str] = ()) -> dict[str, Any]: config = dict(self._config) # Each section is spread over the caller's, so sibling keys survive — pinning - # ``runtime.artifacts`` must not drop a configured ``runtime.transport``. + # ``runtime.artifacts`` must not drop configured input/output schemas or timeouts. config["runtime"] = {**_section(config, "runtime"), "artifacts": _ARTIFACTS_DIR} # ``provider: local`` is required by the native planner in the container (it does not inject the # Python default), and the workspace pins the harness cwd to the retrievable /out subtree. diff --git a/sdk/python/nemo-platform/src/nemo_platform/beta/evaluator/agent_eval/runtimes/fabric/runtime.py b/sdk/python/nemo-platform/src/nemo_platform/beta/evaluator/agent_eval/runtimes/fabric/runtime.py index 8e0bf51275..8195b9f2fe 100644 --- a/sdk/python/nemo-platform/src/nemo_platform/beta/evaluator/agent_eval/runtimes/fabric/runtime.py +++ b/sdk/python/nemo-platform/src/nemo_platform/beta/evaluator/agent_eval/runtimes/fabric/runtime.py @@ -117,10 +117,9 @@ class FabricAgentRuntime: """AgentTaskRunner that generates trials by running tasks through NeMo Fabric. The harness is selected entirely by ``config["harness"]["adapter_id"]``. Across harnesses the - config shape differs mainly in that ``adapter_id``, ``runtime.transport``, and any harness-specific - ``harness.settings`` — e.g. Codex runs as a subprocess (``transport="cli"``) while the Hermes SDK - harness runs in-library (``transport="library"``). See - ``examples/fabric_harness_runtimes.py`` for full Codex-CLI and Hermes-SDK config examples. + config shape differs mainly in that ``adapter_id``, optional input/output schemas, and any + harness-specific ``harness.settings``. Fabric owns each adapter's execution mechanism. See + ``examples/fabric_harness_runtimes.py`` for full Codex and Hermes config examples. """ def __init__( @@ -271,7 +270,10 @@ def _resolve_skill_mode(self, client: Fabric, agent_config: FabricConfig) -> Ski probe_config = agent_config.model_copy(deep=True) probe_config.add_skill_path(_SKILL_PROBE_PATH) plan = client.plan(probe_config, base_dir=self._base_dir) - return resolve_skill_mode(capability_plan=plan.capability_plan, harness=plan.adapter.harness) + return resolve_skill_mode( + capability_plan=plan.capability_plan, + adapter_id=agent_config.harness.adapter_id, + ) async def _run_task( self, diff --git a/sdk/python/nemo-platform/src/nemo_platform/beta/evaluator/agent_eval/runtimes/fabric/skills.py b/sdk/python/nemo-platform/src/nemo_platform/beta/evaluator/agent_eval/runtimes/fabric/skills.py index 4e1a912315..cfe5d7a71a 100644 --- a/sdk/python/nemo-platform/src/nemo_platform/beta/evaluator/agent_eval/runtimes/fabric/skills.py +++ b/sdk/python/nemo-platform/src/nemo_platform/beta/evaluator/agent_eval/runtimes/fabric/skills.py @@ -73,9 +73,9 @@ # runtime plans a probe skill path and reads these to decide the injection mode (see resolve_skill_mode). _SKILLS_ROUTE_KIND = "skills" _SKILLS_TARGET_NATIVE = "harness_native" -# Fabric harness name of the Codex CLI adapter, which self-discovers ``.agents/skills/`` rather than +# Fabric adapter id of Codex, which self-discovers ``.agents/skills/`` rather than # accepting the native ``skills`` config. -_CODEX_HARNESS = "codex" +_CODEX_ADAPTER_ID = "nvidia.fabric.codex" class SkillInjectionError(ValueError): @@ -165,7 +165,7 @@ def native_skills_route(capability_plan: Mapping[str, object]) -> bool: ) -def resolve_skill_mode(*, capability_plan: Mapping[str, object], harness: str) -> SkillMode | None: +def resolve_skill_mode(*, capability_plan: Mapping[str, object], adapter_id: str) -> SkillMode | None: """Resolve how a skill would reach the selected harness, or ``None`` if it can't. Driven by Fabric's own capability routing (queried at runtime via ``Fabric.plan``) rather than a @@ -178,7 +178,7 @@ def resolve_skill_mode(*, capability_plan: Mapping[str, object], harness: str) - """ if native_skills_route(capability_plan): return SKILL_MODE_NATIVE - if harness.strip().lower() == _CODEX_HARNESS: + if adapter_id.strip().lower() == _CODEX_ADAPTER_ID: return SKILL_MODE_CODEX_SKILLS_DIR return None diff --git a/third_party/licenses.jsonl b/third_party/licenses.jsonl index 703400bc46..09a73f6dad 100644 --- a/third_party/licenses.jsonl +++ b/third_party/licenses.jsonl @@ -218,8 +218,15 @@ {"name": "mypy-extensions", "license": "MIT", "compatible": true} {"name": "nemo-anonymizer", "license": "APACHE-2.0", "compatible": true} {"name": "nemo-fabric", "license": "APACHE-2.0", "compatible": true} +{"name": "nemo-fabric-adapter-contract", "license": "APACHE-2.0", "compatible": true} +{"name": "nemo-fabric-adapters-claude", "license": "APACHE-2.0", "compatible": true} +{"name": "nemo-fabric-adapters-codex", "license": "APACHE-2.0", "compatible": true} +{"name": "nemo-fabric-adapters-common", "license": "APACHE-2.0", "compatible": true} +{"name": "nemo-fabric-adapters-deepagents", "license": "APACHE-2.0", "compatible": true} +{"name": "nemo-fabric-adapters-hermes", "license": "APACHE-2.0", "compatible": true} {"name": "nemo-fabric-runtime", "license": "APACHE-2.0", "compatible": true} {"name": "nemo-relay", "license": "APACHE-2.0", "compatible": true} +{"name": "nemo-relay-cli-bin", "license": "APACHE-2.0", "compatible": true} {"name": "nemo-safe-synthesizer", "license": "APACHE-2.0", "compatible": true} {"name": "nemoguardrails", "license": "APACHE-2.0", "compatible": true} {"name": "nest-asyncio", "license": "BSD-3-CLAUSE", "compatible": true} diff --git a/third_party/osv-licenses-callouts.json b/third_party/osv-licenses-callouts.json index 7fa535be3e..c7cd52426c 100644 --- a/third_party/osv-licenses-callouts.json +++ b/third_party/osv-licenses-callouts.json @@ -404,72 +404,31 @@ "version": "0.38.0", "ecosystem": "Go" }, - "vulnerabilities": [ + "groups": [ { - "modified": "2026-08-07T10:42:58Z", - "published": "2026-07-14T17:29:56Z", - "schema_version": "1.7.5", - "id": "GO-2026-5970", - "aliases": [ - "CVE-2026-56852" + "ids": [ + "GO-2026-5970" ], - "related": [ - "CGA-jjqc-qfr4-frh9", - "RHSA-2026:40964", - "RHSA-2026:41020", - "RHSA-2026:42083", - "RHSA-2026:42230", - "RHSA-2026:42241", - "RHSA-2026:43015", - "RHSA-2026:43119", - "RHSA-2026:43311", - "RHSA-2026:43554", - "RHSA-2026:43581", - "RHSA-2026:43716", - "RHSA-2026:43797", - "RHSA-2026:43799", - "RHSA-2026:43801", - "RHSA-2026:43803", - "RHSA-2026:43852", - "RHSA-2026:43866", - "RHSA-2026:43873", - "RHSA-2026:43906", - "RHSA-2026:44151", - "RHSA-2026:44152", - "RHSA-2026:44162", - "RHSA-2026:44430", - "RHSA-2026:44451", - "RHSA-2026:44479", - "RHSA-2026:46953", - "RHSA-2026:46960", - "RHSA-2026:46988", - "RHSA-2026:48306", - "RHSA-2026:49317", - "RHSA-2026:49360", - "RHSA-2026:51065" + "aliases": [ + "CVE-2026-56852", + "GO-2026-5970" ], - "summary": "Infinite loop on invalid input in golang.org/x/text", - "details": "A norm.Iter can enter an infinite loop when handling input containing invalid UTF-8 bytes.", + "experimental_analysis": { + "GO-2026-5970": { + "called": false, + "unimportant": false + } + }, + "max_severity": "" + } + ], + "licenses": [ + "BSD-3-Clause" + ], + "vulnerabilities": [ + { "affected": [ { - "package": { - "ecosystem": "Go", - "name": "golang.org/x/text", - "purl": "pkg:golang/golang.org/x/text" - }, - "ranges": [ - { - "type": "SEMVER", - "events": [ - { - "introduced": "0" - }, - { - "fixed": "0.39.0" - } - ] - } - ], "database_specific": { "source": "https://vuln.go.dev/ID/GO-2026-5970.json" }, @@ -506,9 +465,43 @@ ] } ] - } + }, + "package": { + "ecosystem": "Go", + "name": "golang.org/x/text", + "purl": "pkg:golang/golang.org/x/text" + }, + "ranges": [ + { + "events": [ + { + "introduced": "0" + }, + { + "fixed": "0.39.0" + } + ], + "type": "SEMVER" + } + ] + } + ], + "aliases": [ + "CVE-2026-56852" + ], + "credits": [ + { + "name": "Viky Choi (\"vikychoi\" on GitHub)" } ], + "database_specific": { + "review_status": "REVIEWED", + "url": "https://pkg.go.dev/vuln/GO-2026-5970" + }, + "details": "A norm.Iter can enter an infinite loop when handling input containing invalid UTF-8 bytes.", + "id": "GO-2026-5970", + "modified": "2026-08-14T10:42:20.494473428Z", + "published": "2026-07-14T17:29:56Z", "references": [ { "type": "REPORT", @@ -519,32 +512,47 @@ "url": "https://go.dev/cl/794100" } ], - "database_specific": { - "review_status": "REVIEWED", - "url": "https://pkg.go.dev/vuln/GO-2026-5970" - } - } - ], - "groups": [ - { - "ids": [ - "GO-2026-5970" - ], - "aliases": [ - "CVE-2026-56852", - "GO-2026-5970" + "related": [ + "CGA-jjqc-qfr4-frh9", + "RHSA-2026:40964", + "RHSA-2026:41020", + "RHSA-2026:42083", + "RHSA-2026:42230", + "RHSA-2026:42241", + "RHSA-2026:43015", + "RHSA-2026:43119", + "RHSA-2026:43311", + "RHSA-2026:43554", + "RHSA-2026:43581", + "RHSA-2026:43716", + "RHSA-2026:43797", + "RHSA-2026:43799", + "RHSA-2026:43801", + "RHSA-2026:43803", + "RHSA-2026:43852", + "RHSA-2026:43866", + "RHSA-2026:43873", + "RHSA-2026:43906", + "RHSA-2026:44151", + "RHSA-2026:44152", + "RHSA-2026:44162", + "RHSA-2026:44430", + "RHSA-2026:44451", + "RHSA-2026:44479", + "RHSA-2026:46953", + "RHSA-2026:46960", + "RHSA-2026:46988", + "RHSA-2026:48306", + "RHSA-2026:49317", + "RHSA-2026:49360", + "RHSA-2026:51065", + "RHSA-2026:52912", + "RHSA-2026:54364", + "RHSA-2026:54549" ], - "experimental_analysis": { - "GO-2026-5970": { - "called": false, - "unimportant": false - } - }, - "max_severity": "" + "schema_version": "1.8.0", + "summary": "Infinite loop on invalid input in golang.org/x/text" } - ], - "licenses": [ - "BSD-3-Clause" ] }, { @@ -616,103 +624,1084 @@ "version": "1.25.8", "ecosystem": "Go" }, - "vulnerabilities": [ + "groups": [ { - "modified": "2026-08-03T10:45:58Z", - "published": "2026-04-07T22:53:49Z", - "schema_version": "1.7.5", - "id": "GO-2026-4864", + "ids": [ + "GO-2026-4864" + ], "aliases": [ "BIT-golang-2026-32282", - "CVE-2026-32282" - ], - "related": [ - "CGA-3x3m-j3x7-3f6w", - "RHSA-2026:10217", - "RHSA-2026:10219", - "RHSA-2026:10704", - "RHSA-2026:11507", - "RHSA-2026:11514", - "RHSA-2026:11704", - "RHSA-2026:11711", - "RHSA-2026:11712", - "RHSA-2026:11863", - "RHSA-2026:14200", - "RHSA-2026:15980", - "RHSA-2026:16021", - "RHSA-2026:16024", - "RHSA-2026:16101", - "RHSA-2026:16875", - "RHSA-2026:17075", - "RHSA-2026:17084", - "RHSA-2026:18027", - "RHSA-2026:18032", - "RHSA-2026:19132", - "RHSA-2026:19133", - "RHSA-2026:19134", - "RHSA-2026:19135", - "RHSA-2026:19136", - "RHSA-2026:19144", - "RHSA-2026:19156", - "RHSA-2026:19350", - "RHSA-2026:19351", - "RHSA-2026:19352", - "RHSA-2026:19353", - "RHSA-2026:19369", - "RHSA-2026:19450", - "RHSA-2026:19550", - "RHSA-2026:19714", - "RHSA-2026:19715", - "RHSA-2026:19719", - "RHSA-2026:19720", - "RHSA-2026:19721", - "RHSA-2026:19722", - "RHSA-2026:19750", - "RHSA-2026:19839", - "RHSA-2026:20556", - "RHSA-2026:22141", - "RHSA-2026:22326", - "RHSA-2026:22450", - "RHSA-2026:22709", - "RHSA-2026:22713", - "RHSA-2026:22714", - "RHSA-2026:22937", - "RHSA-2026:23228", - "RHSA-2026:24337", - "RHSA-2026:24716", - "RHSA-2026:24761", - "RHSA-2026:24762", - "RHSA-2026:25999", - "RHSA-2026:27076", - "RHSA-2026:27732", - "RHSA-2026:28038", - "RHSA-2026:28046", - "RHSA-2026:28047", - "RHSA-2026:28385", - "RHSA-2026:34365", - "RHSA-2026:34366", - "RHSA-2026:34368", - "RHSA-2026:36796", - "RHSA-2026:39810", - "RHSA-2026:41019", - "RHSA-2026:47712", - "RHSA-2026:47714", - "RHSA-2026:47716", - "RHSA-2026:47719", - "RHSA-2026:47721", - "RHSA-2026:47722", - "RHSA-2026:47910", - "RHSA-2026:48036", - "RHSA-2026:48790", - "RHSA-2026:49509", - "RHSA-2026:49600", - "RHSA-2026:7291", - "RHSA-2026:7385" + "CVE-2026-32282", + "GO-2026-4864" ], - "summary": "TOCTOU permits root escape on Linux via Root.Chmod in os in internal/syscall/unix", - "details": "On Linux, if the target of Root.Chmod is replaced with a symlink while the chmod operation is in progress, Chmod can operate on the target of the symlink, even when the target lies outside the root.\n\nThe Linux fchmodat syscall silently ignores the AT_SYMLINK_NOFOLLOW flag, which Root.Chmod uses to avoid symlink traversal. Root.Chmod checks its target before acting and returns an error if the target is a symlink lying outside the root, so the impact is limited to cases where the target is replaced with a symlink between the check and operation.", + "experimental_analysis": { + "GO-2026-4864": { + "called": false, + "unimportant": false + } + }, + "max_severity": "" + }, + { + "ids": [ + "GO-2026-4865" + ], + "aliases": [ + "BIT-golang-2026-32289", + "CVE-2026-32289", + "GO-2026-4865" + ], + "experimental_analysis": { + "GO-2026-4865": { + "called": true, + "unimportant": false + } + }, + "max_severity": "" + }, + { + "ids": [ + "GO-2026-4869" + ], + "aliases": [ + "BIT-golang-2026-32288", + "CVE-2026-32288", + "GO-2026-4869" + ], + "experimental_analysis": { + "GO-2026-4869": { + "called": false, + "unimportant": false + } + }, + "max_severity": "" + }, + { + "ids": [ + "GO-2026-4870" + ], + "aliases": [ + "BIT-golang-2026-32283", + "CVE-2026-32283", + "GO-2026-4870" + ], + "experimental_analysis": { + "GO-2026-4870": { + "called": true, + "unimportant": false + } + }, + "max_severity": "" + }, + { + "ids": [ + "GO-2026-4918" + ], + "aliases": [ + "BIT-golang-2026-33814", + "CVE-2026-33814", + "GO-2026-4918" + ], + "experimental_analysis": { + "GO-2026-4918": { + "called": true, + "unimportant": false + } + }, + "max_severity": "" + }, + { + "ids": [ + "GO-2026-4946" + ], + "aliases": [ + "BIT-golang-2026-32281", + "CVE-2026-32281", + "GO-2026-4946" + ], + "experimental_analysis": { + "GO-2026-4946": { + "called": true, + "unimportant": false + } + }, + "max_severity": "" + }, + { + "ids": [ + "GO-2026-4947" + ], + "aliases": [ + "BIT-golang-2026-32280", + "CVE-2026-32280", + "GO-2026-4947" + ], + "experimental_analysis": { + "GO-2026-4947": { + "called": true, + "unimportant": false + } + }, + "max_severity": "" + }, + { + "ids": [ + "GO-2026-4970" + ], + "aliases": [ + "BIT-golang-2026-39822", + "CVE-2026-39822", + "GO-2026-4970" + ], + "experimental_analysis": { + "GO-2026-4970": { + "called": false, + "unimportant": false + } + }, + "max_severity": "" + }, + { + "ids": [ + "GO-2026-4971" + ], + "aliases": [ + "BIT-golang-2026-39836", + "CVE-2026-39836", + "GO-2026-4971" + ], + "experimental_analysis": { + "GO-2026-4971": { + "called": true, + "unimportant": false + } + }, + "max_severity": "" + }, + { + "ids": [ + "GO-2026-4976" + ], + "aliases": [ + "BIT-golang-2026-39825", + "CVE-2026-39825", + "GO-2026-4976" + ], + "experimental_analysis": { + "GO-2026-4976": { + "called": false, + "unimportant": false + } + }, + "max_severity": "" + }, + { + "ids": [ + "GO-2026-4977" + ], + "aliases": [ + "BIT-golang-2026-42499", + "CVE-2026-42499", + "GO-2026-4977" + ], + "experimental_analysis": { + "GO-2026-4977": { + "called": false, + "unimportant": false + } + }, + "max_severity": "" + }, + { + "ids": [ + "GO-2026-4980" + ], + "aliases": [ + "BIT-golang-2026-39826", + "CVE-2026-39826", + "GO-2026-4980" + ], + "experimental_analysis": { + "GO-2026-4980": { + "called": true, + "unimportant": false + } + }, + "max_severity": "" + }, + { + "ids": [ + "GO-2026-4981" + ], + "aliases": [ + "BIT-golang-2026-33811", + "CVE-2026-33811", + "GO-2026-4981" + ], + "experimental_analysis": { + "GO-2026-4981": { + "called": false, + "unimportant": false + } + }, + "max_severity": "" + }, + { + "ids": [ + "GO-2026-4982" + ], + "aliases": [ + "BIT-golang-2026-39823", + "CVE-2026-39823", + "GO-2026-4982" + ], + "experimental_analysis": { + "GO-2026-4982": { + "called": true, + "unimportant": false + } + }, + "max_severity": "" + }, + { + "ids": [ + "GO-2026-4986" + ], + "aliases": [ + "BIT-golang-2026-39820", + "CVE-2026-39820", + "GO-2026-4986" + ], + "experimental_analysis": { + "GO-2026-4986": { + "called": false, + "unimportant": false + } + }, + "max_severity": "" + }, + { + "ids": [ + "GO-2026-5026" + ], + "aliases": [ + "CVE-2026-39821", + "GO-2026-5026" + ], + "experimental_analysis": { + "GO-2026-5026": { + "called": true, + "unimportant": false + } + }, + "max_severity": "" + }, + { + "ids": [ + "GO-2026-5037" + ], + "aliases": [ + "BIT-golang-2026-27145", + "CVE-2026-27145", + "GO-2026-5037" + ], + "experimental_analysis": { + "GO-2026-5037": { + "called": true, + "unimportant": false + } + }, + "max_severity": "" + }, + { + "ids": [ + "GO-2026-5038" + ], + "aliases": [ + "BIT-golang-2026-42504", + "CVE-2026-42504", + "GO-2026-5038" + ], + "experimental_analysis": { + "GO-2026-5038": { + "called": false, + "unimportant": false + } + }, + "max_severity": "" + }, + { + "ids": [ + "GO-2026-5039" + ], + "aliases": [ + "BIT-golang-2026-42507", + "CVE-2026-42507", + "GO-2026-5039" + ], + "experimental_analysis": { + "GO-2026-5039": { + "called": true, + "unimportant": false + } + }, + "max_severity": "" + }, + { + "ids": [ + "GO-2026-5856" + ], + "aliases": [ + "BIT-golang-2026-42505", + "CVE-2026-42505", + "GO-2026-5856" + ], + "experimental_analysis": { + "GO-2026-5856": { + "called": true, + "unimportant": false + } + }, + "max_severity": "" + }, + { + "ids": [ + "GO-2026-5972" + ], + "aliases": [ + "BIT-golang-2026-33818", + "CVE-2026-33818", + "GO-2026-5972" + ], + "experimental_analysis": { + "GO-2026-5972": { + "called": true, + "unimportant": false + } + }, + "max_severity": "" + }, + { + "ids": [ + "GO-2026-6088" + ], + "aliases": [ + "BIT-golang-2026-56859", + "CVE-2026-56859", + "GO-2026-6088" + ], + "experimental_analysis": { + "GO-2026-6088": { + "called": false, + "unimportant": false + } + }, + "max_severity": "" + }, + { + "ids": [ + "GO-2026-6089" + ], + "aliases": [ + "BIT-golang-2026-56853", + "CVE-2026-56853", + "GO-2026-6089" + ], + "experimental_analysis": { + "GO-2026-6089": { + "called": true, + "unimportant": false + } + }, + "max_severity": "" + }, + { + "ids": [ + "GO-2026-6090" + ], + "aliases": [ + "BIT-golang-2026-56862", + "CVE-2026-56862", + "GO-2026-6090" + ], + "experimental_analysis": { + "GO-2026-6090": { + "called": true, + "unimportant": false + } + }, + "max_severity": "" + }, + { + "ids": [ + "GO-2026-6091" + ], + "aliases": [ + "BIT-golang-2026-56858", + "CVE-2026-56858", + "GO-2026-6091" + ], + "experimental_analysis": { + "GO-2026-6091": { + "called": true, + "unimportant": false + } + }, + "max_severity": "" + }, + { + "ids": [ + "GO-2026-6218" + ], + "aliases": [ + "BIT-golang-2026-56860", + "CVE-2026-56860", + "GO-2026-6218" + ], + "experimental_analysis": { + "GO-2026-6218": { + "called": true, + "unimportant": false + } + }, + "max_severity": "" + } + ], + "licenses": [ + "UNKNOWN" + ], + "vulnerabilities": [ + { + "affected": [ + { + "database_specific": { + "source": "https://vuln.go.dev/ID/GO-2026-4864.json" + }, + "ecosystem_specific": { + "imports": [ + { + "goos": [ + "linux" + ], + "path": "internal/syscall/unix", + "symbols": [ + "Fchmodat" + ] + } + ] + }, + "package": { + "ecosystem": "Go", + "name": "stdlib", + "purl": "pkg:golang/stdlib" + }, + "ranges": [ + { + "events": [ + { + "introduced": "0" + }, + { + "fixed": "1.25.9" + }, + { + "introduced": "1.26.0-0" + }, + { + "fixed": "1.26.2" + } + ], + "type": "SEMVER" + } + ] + } + ], + "aliases": [ + "BIT-golang-2026-32282", + "CVE-2026-32282" + ], + "credits": [ + { + "name": "Uuganbayar Lkhamsuren (https://github.com/uug4na)" + } + ], + "database_specific": { + "review_status": "REVIEWED", + "url": "https://pkg.go.dev/vuln/GO-2026-4864" + }, + "details": "On Linux, if the target of Root.Chmod is replaced with a symlink while the chmod operation is in progress, Chmod can operate on the target of the symlink, even when the target lies outside the root.\n\nThe Linux fchmodat syscall silently ignores the AT_SYMLINK_NOFOLLOW flag, which Root.Chmod uses to avoid symlink traversal. Root.Chmod checks its target before acting and returns an error if the target is a symlink lying outside the root, so the impact is limited to cases where the target is replaced with a symlink between the check and operation.", + "id": "GO-2026-4864", + "modified": "2026-08-14T10:42:12.639761490Z", + "published": "2026-04-07T22:53:49Z", + "references": [ + { + "type": "FIX", + "url": "https://go.dev/cl/763761" + }, + { + "type": "REPORT", + "url": "https://go.dev/issue/78293" + }, + { + "type": "WEB", + "url": "https://groups.google.com/g/golang-announce/c/0uYbvbPZRWU" + } + ], + "related": [ + "CGA-3x3m-j3x7-3f6w", + "RHSA-2026:10217", + "RHSA-2026:10219", + "RHSA-2026:10704", + "RHSA-2026:11507", + "RHSA-2026:11514", + "RHSA-2026:11704", + "RHSA-2026:11711", + "RHSA-2026:11712", + "RHSA-2026:11863", + "RHSA-2026:14200", + "RHSA-2026:15980", + "RHSA-2026:16021", + "RHSA-2026:16024", + "RHSA-2026:16101", + "RHSA-2026:16875", + "RHSA-2026:17075", + "RHSA-2026:17084", + "RHSA-2026:18027", + "RHSA-2026:18032", + "RHSA-2026:19132", + "RHSA-2026:19133", + "RHSA-2026:19134", + "RHSA-2026:19135", + "RHSA-2026:19136", + "RHSA-2026:19144", + "RHSA-2026:19156", + "RHSA-2026:19350", + "RHSA-2026:19351", + "RHSA-2026:19352", + "RHSA-2026:19353", + "RHSA-2026:19369", + "RHSA-2026:19450", + "RHSA-2026:19550", + "RHSA-2026:19714", + "RHSA-2026:19715", + "RHSA-2026:19719", + "RHSA-2026:19720", + "RHSA-2026:19721", + "RHSA-2026:19722", + "RHSA-2026:19750", + "RHSA-2026:19839", + "RHSA-2026:20556", + "RHSA-2026:22141", + "RHSA-2026:22326", + "RHSA-2026:22450", + "RHSA-2026:22709", + "RHSA-2026:22713", + "RHSA-2026:22714", + "RHSA-2026:22937", + "RHSA-2026:23228", + "RHSA-2026:24337", + "RHSA-2026:24716", + "RHSA-2026:24761", + "RHSA-2026:24762", + "RHSA-2026:25999", + "RHSA-2026:27076", + "RHSA-2026:27732", + "RHSA-2026:28038", + "RHSA-2026:28046", + "RHSA-2026:28047", + "RHSA-2026:28385", + "RHSA-2026:34365", + "RHSA-2026:34366", + "RHSA-2026:34368", + "RHSA-2026:36796", + "RHSA-2026:39810", + "RHSA-2026:41019", + "RHSA-2026:47712", + "RHSA-2026:47714", + "RHSA-2026:47716", + "RHSA-2026:47719", + "RHSA-2026:47721", + "RHSA-2026:47722", + "RHSA-2026:47910", + "RHSA-2026:48036", + "RHSA-2026:48790", + "RHSA-2026:49509", + "RHSA-2026:49600", + "RHSA-2026:54191", + "RHSA-2026:54757", + "RHSA-2026:7291", + "RHSA-2026:7385" + ], + "schema_version": "1.7.5", + "summary": "TOCTOU permits root escape on Linux via Root.Chmod in os in internal/syscall/unix" + }, + { + "affected": [ + { + "database_specific": { + "source": "https://vuln.go.dev/ID/GO-2026-4865.json" + }, + "ecosystem_specific": { + "imports": [ + { + "path": "html/template", + "symbols": [ + "Error.Error", + "HTMLEscaper", + "JSEscape", + "JSEscapeString", + "JSEscaper", + "ParseFS", + "ParseFiles", + "ParseGlob", + "Template.AddParseTree", + "Template.Clone", + "Template.DefinedTemplates", + "Template.Execute", + "Template.ExecuteTemplate", + "Template.Funcs", + "Template.Parse", + "Template.ParseFS", + "Template.ParseFiles", + "Template.ParseGlob", + "URLQueryEscaper", + "context.String", + "context.mangle", + "escaper.escapeBranch" + ] + } + ] + }, + "package": { + "ecosystem": "Go", + "name": "stdlib", + "purl": "pkg:golang/stdlib" + }, + "ranges": [ + { + "events": [ + { + "introduced": "0" + }, + { + "fixed": "1.25.9" + }, + { + "introduced": "1.26.0-0" + }, + { + "fixed": "1.26.2" + } + ], + "type": "SEMVER" + } + ] + } + ], + "aliases": [ + "BIT-golang-2026-32289", + "CVE-2026-32289" + ], + "database_specific": { + "review_status": "REVIEWED", + "url": "https://pkg.go.dev/vuln/GO-2026-4865" + }, + "details": "Context was not properly tracked across template branches for JS template literals, leading to possibly incorrect escaping of content when branches were used. Additionally template actions within JS template literals did not properly track the brace depth, leading to incorrect escaping being applied.\n\nThese issues could cause actions within JS template literals to be incorrectly or improperly escaped, leading to XSS vulnerabilities.", + "id": "GO-2026-4865", + "modified": "2026-07-10T10:44:23.724783758Z", + "published": "2026-04-07T22:53:49Z", + "references": [ + { + "type": "FIX", + "url": "https://go.dev/cl/763762" + }, + { + "type": "REPORT", + "url": "https://go.dev/issue/78331" + }, + { + "type": "WEB", + "url": "https://groups.google.com/g/golang-announce/c/0uYbvbPZRWU" + } + ], + "related": [ + "CGA-w5jp-g3cv-wvfm", + "RHSA-2026:19181", + "RHSA-2026:7291", + "RHSA-2026:7385" + ], + "schema_version": "1.7.5", + "summary": "JsBraceDepth Context Tracking Bugs (XSS) in html/template" + }, + { + "affected": [ + { + "database_specific": { + "source": "https://vuln.go.dev/ID/GO-2026-4869.json" + }, + "ecosystem_specific": { + "imports": [ + { + "path": "archive/tar", + "symbols": [ + "Reader.Next", + "Reader.readOldGNUSparseMap", + "readGNUSparseMap1x0" + ] + } + ] + }, + "package": { + "ecosystem": "Go", + "name": "stdlib", + "purl": "pkg:golang/stdlib" + }, + "ranges": [ + { + "events": [ + { + "introduced": "0" + }, + { + "fixed": "1.25.9" + }, + { + "introduced": "1.26.0-0" + }, + { + "fixed": "1.26.2" + } + ], + "type": "SEMVER" + } + ] + } + ], + "aliases": [ + "BIT-golang-2026-32288", + "CVE-2026-32288" + ], + "credits": [ + { + "name": "Colin Walters (walters@verbum.org)" + }, + { + "name": "Uuganbayar Lkhamsuren (https://github.com/uug4na)" + }, + { + "name": "Jakub Ciolek" + } + ], + "database_specific": { + "review_status": "REVIEWED", + "url": "https://pkg.go.dev/vuln/GO-2026-4869" + }, + "details": "tar.Reader can allocate an unbounded amount of memory when reading a maliciously-crafted archive containing a large number of sparse regions encoded in the \"old GNU sparse map\" format.", + "id": "GO-2026-4869", + "modified": "2026-05-15T10:59:23.054049848Z", + "published": "2026-04-07T22:53:49Z", + "references": [ + { + "type": "FIX", + "url": "https://go.dev/cl/763766" + }, + { + "type": "REPORT", + "url": "https://go.dev/issue/78301" + }, + { + "type": "WEB", + "url": "https://groups.google.com/g/golang-announce/c/0uYbvbPZRWU" + } + ], + "related": [ + "CGA-6f85-jvrm-qq3w", + "RHSA-2026:7291", + "RHSA-2026:7385" + ], + "schema_version": "1.7.5", + "summary": "Unbounded allocation for old GNU sparse in archive/tar" + }, + { + "affected": [ + { + "database_specific": { + "source": "https://vuln.go.dev/ID/GO-2026-4870.json" + }, + "ecosystem_specific": { + "imports": [ + { + "path": "crypto/tls", + "symbols": [ + "Conn.Handshake", + "Conn.HandshakeContext", + "Conn.Read", + "Conn.Write", + "Conn.handleKeyUpdate", + "Dial", + "DialWithDialer", + "Dialer.Dial", + "Dialer.DialContext", + "QUICConn.HandleData", + "QUICConn.Start", + "clientHandshakeStateTLS13.establishHandshakeKeys", + "clientHandshakeStateTLS13.readServerFinished", + "serverHandshakeStateTLS13.readClientFinished", + "serverHandshakeStateTLS13.sendServerParameters" + ] + } + ] + }, + "package": { + "ecosystem": "Go", + "name": "stdlib", + "purl": "pkg:golang/stdlib" + }, + "ranges": [ + { + "events": [ + { + "introduced": "0" + }, + { + "fixed": "1.25.9" + }, + { + "introduced": "1.26.0-0" + }, + { + "fixed": "1.26.2" + } + ], + "type": "SEMVER" + } + ] + } + ], + "aliases": [ + "BIT-golang-2026-32283", + "CVE-2026-32283" + ], + "credits": [ + { + "name": "Jakub Ciolek - https://ciolek.dev/" + } + ], + "database_specific": { + "review_status": "REVIEWED", + "url": "https://pkg.go.dev/vuln/GO-2026-4870" + }, + "details": "If one side of the TLS connection sends multiple key update messages post-handshake in a single record, the connection can deadlock, causing uncontrolled consumption of resources. This can lead to a denial of service.\n\nThis only affects TLS 1.3.", + "id": "GO-2026-4870", + "modified": "2026-08-18T10:44:11.352332310Z", + "published": "2026-04-07T22:53:49Z", + "references": [ + { + "type": "FIX", + "url": "https://go.dev/cl/763767" + }, + { + "type": "REPORT", + "url": "https://go.dev/issue/78334" + }, + { + "type": "WEB", + "url": "https://groups.google.com/g/golang-announce/c/0uYbvbPZRWU" + } + ], + "related": [ + "CGA-w7vv-7vph-696h", + "RHSA-2026:10217", + "RHSA-2026:10219", + "RHSA-2026:10704", + "RHSA-2026:11507", + "RHSA-2026:11514", + "RHSA-2026:11704", + "RHSA-2026:11711", + "RHSA-2026:11712", + "RHSA-2026:11863", + "RHSA-2026:11881", + "RHSA-2026:14200", + "RHSA-2026:15980", + "RHSA-2026:16021", + "RHSA-2026:16024", + "RHSA-2026:16101", + "RHSA-2026:16102", + "RHSA-2026:16875", + "RHSA-2026:17075", + "RHSA-2026:17084", + "RHSA-2026:17287", + "RHSA-2026:18027", + "RHSA-2026:18032", + "RHSA-2026:19126", + "RHSA-2026:19132", + "RHSA-2026:19133", + "RHSA-2026:19134", + "RHSA-2026:19135", + "RHSA-2026:19136", + "RHSA-2026:19137", + "RHSA-2026:19139", + "RHSA-2026:19144", + "RHSA-2026:19156", + "RHSA-2026:19350", + "RHSA-2026:19351", + "RHSA-2026:19352", + "RHSA-2026:19353", + "RHSA-2026:19369", + "RHSA-2026:19450", + "RHSA-2026:19550", + "RHSA-2026:19634", + "RHSA-2026:19714", + "RHSA-2026:19715", + "RHSA-2026:19719", + "RHSA-2026:19720", + "RHSA-2026:19721", + "RHSA-2026:19722", + "RHSA-2026:19750", + "RHSA-2026:19839", + "RHSA-2026:20556", + "RHSA-2026:20569", + "RHSA-2026:20570", + "RHSA-2026:20571", + "RHSA-2026:20607", + "RHSA-2026:20608", + "RHSA-2026:20609", + "RHSA-2026:22450", + "RHSA-2026:22709", + "RHSA-2026:22713", + "RHSA-2026:22714", + "RHSA-2026:22937", + "RHSA-2026:23102", + "RHSA-2026:23103", + "RHSA-2026:23228", + "RHSA-2026:24337", + "RHSA-2026:24470", + "RHSA-2026:24761", + "RHSA-2026:24762", + "RHSA-2026:25248", + "RHSA-2026:25250", + "RHSA-2026:25251", + "RHSA-2026:25252", + "RHSA-2026:26447", + "RHSA-2026:27076", + "RHSA-2026:28038", + "RHSA-2026:28047", + "RHSA-2026:28074", + "RHSA-2026:29035", + "RHSA-2026:29195", + "RHSA-2026:29455", + "RHSA-2026:29703", + "RHSA-2026:33722", + "RHSA-2026:34192", + "RHSA-2026:34196", + "RHSA-2026:34197", + "RHSA-2026:34365", + "RHSA-2026:36796", + "RHSA-2026:39810", + "RHSA-2026:41019", + "RHSA-2026:47712", + "RHSA-2026:47714", + "RHSA-2026:47716", + "RHSA-2026:47719", + "RHSA-2026:47721", + "RHSA-2026:47722", + "RHSA-2026:47910", + "RHSA-2026:48036", + "RHSA-2026:48790", + "RHSA-2026:49509", + "RHSA-2026:49600", + "RHSA-2026:49944", + "RHSA-2026:51288", + "RHSA-2026:54191", + "RHSA-2026:54757", + "RHSA-2026:7291", + "RHSA-2026:7385" + ], + "schema_version": "1.7.5", + "summary": "Unauthenticated TLS 1.3 KeyUpdate record can cause persistent connection retention and DoS in crypto/tls" + }, + { "affected": [ { + "database_specific": { + "source": "https://vuln.go.dev/ID/GO-2026-4918.json" + }, + "ecosystem_specific": { + "imports": [ + { + "path": "golang.org/x/net/http2", + "symbols": [ + "Transport.NewClientConn", + "Transport.RoundTrip", + "Transport.RoundTripOpt", + "clientConnPool.GetClientConn", + "clientConnReadLoop.processSettingsNoWrite", + "noDialClientConnPool.GetClientConn", + "noDialH2RoundTripper.NewClientConn", + "noDialH2RoundTripper.RoundTrip", + "unencryptedTransport.RoundTrip" + ] + } + ] + }, + "package": { + "ecosystem": "Go", + "name": "golang.org/x/net", + "purl": "pkg:golang/golang.org/x/net" + }, + "ranges": [ + { + "events": [ + { + "introduced": "0" + }, + { + "fixed": "0.53.0" + } + ], + "type": "SEMVER" + } + ] + }, + { + "database_specific": { + "source": "https://vuln.go.dev/ID/GO-2026-4918.json" + }, + "ecosystem_specific": { + "imports": [ + { + "path": "net/http", + "symbols": [ + "Client.CloseIdleConnections", + "Client.Do", + "Client.Get", + "Client.Head", + "Client.Post", + "Client.PostForm", + "ClientConn.Close", + "ClientConn.RoundTrip", + "Get", + "Head", + "Post", + "PostForm", + "Transport.CloseIdleConnections", + "Transport.NewClientConn", + "Transport.RoundTrip", + "http1ClientConn.Close", + "http1ClientConn.RoundTrip", + "http2Transport.NewClientConn", + "http2Transport.RoundTrip", + "http2Transport.RoundTripOpt", + "http2clientConnPool.GetClientConn", + "http2clientConnReadLoop.processSettingsNoWrite", + "http2noDialClientConnPool.GetClientConn", + "http2noDialH2RoundTripper.NewClientConn", + "http2noDialH2RoundTripper.RoundTrip", + "http2unencryptedTransport.RoundTrip" + ] + } + ] + }, "package": { "ecosystem": "Go", "name": "stdlib", @@ -720,84 +1709,85 @@ }, "ranges": [ { - "type": "SEMVER", "events": [ { "introduced": "0" }, { - "fixed": "1.25.9" + "fixed": "1.25.10" }, { "introduced": "1.26.0-0" }, { - "fixed": "1.26.2" + "fixed": "1.26.3" } - ] + ], + "type": "SEMVER" } - ], - "database_specific": { - "source": "https://vuln.go.dev/ID/GO-2026-4864.json" - }, - "ecosystem_specific": { - "imports": [ - { - "goos": [ - "linux" - ], - "path": "internal/syscall/unix", - "symbols": [ - "Fchmodat" - ] - } - ] - } + ] + } + ], + "aliases": [ + "BIT-golang-2026-33814", + "CVE-2026-33814" + ], + "credits": [ + { + "name": "Marwan Atia (marwansamir688@gmail.com)" } ], + "database_specific": { + "review_status": "REVIEWED", + "url": "https://pkg.go.dev/vuln/GO-2026-4918" + }, + "details": "When processing HTTP/2 SETTINGS frames, transport will enter an infinite loop of writing CONTINUATION frames if it receives a SETTINGS_MAX_FRAME_SIZE with a value of 0.", + "id": "GO-2026-4918", + "modified": "2026-06-27T10:44:20.771417746Z", + "published": "2026-05-07T19:21:40Z", "references": [ { "type": "FIX", - "url": "https://go.dev/cl/763761" + "url": "https://go.dev/cl/761581" + }, + { + "type": "FIX", + "url": "https://go.dev/cl/761640" }, { "type": "REPORT", - "url": "https://go.dev/issue/78293" + "url": "https://go.dev/issue/78476" }, { "type": "WEB", - "url": "https://groups.google.com/g/golang-announce/c/0uYbvbPZRWU" + "url": "https://groups.google.com/g/golang-announce/c/qcCIEXso47M" } ], - "credits": [ - { - "name": "Uuganbayar Lkhamsuren (https://github.com/uug4na)" - } + "related": [ + "CGA-v7v4-9r6p-x7fc", + "RHSA-2026:23262", + "RHSA-2026:23264" ], - "database_specific": { - "review_status": "REVIEWED", - "url": "https://pkg.go.dev/vuln/GO-2026-4864" - } + "schema_version": "1.7.5", + "summary": "Infinite loop in HTTP/2 transport when given bad SETTINGS_MAX_FRAME_SIZE in net/http/internal/http2 in golang.org/x/net" }, { - "modified": "2026-07-10T10:44:23Z", - "published": "2026-04-07T22:53:49Z", - "schema_version": "1.7.5", - "id": "GO-2026-4865", - "aliases": [ - "BIT-golang-2026-32289", - "CVE-2026-32289" - ], - "related": [ - "CGA-w5jp-g3cv-wvfm", - "RHSA-2026:19181", - "RHSA-2026:7291", - "RHSA-2026:7385" - ], - "summary": "JsBraceDepth Context Tracking Bugs (XSS) in html/template", - "details": "Context was not properly tracked across template branches for JS template literals, leading to possibly incorrect escaping of content when branches were used. Additionally template actions within JS template literals did not properly track the brace depth, leading to incorrect escaping being applied.\n\nThese issues could cause actions within JS template literals to be incorrectly or improperly escaped, leading to XSS vulnerabilities.", "affected": [ { + "database_specific": { + "source": "https://vuln.go.dev/ID/GO-2026-4946.json" + }, + "ecosystem_specific": { + "imports": [ + { + "path": "crypto/x509", + "symbols": [ + "Certificate.Verify", + "policiesValid" + ] + } + ] + }, "package": { "ecosystem": "Go", "name": "stdlib", @@ -805,7 +1795,6 @@ }, "ranges": [ { - "type": "SEMVER", "events": [ { "introduced": "0" @@ -819,82 +1808,138 @@ { "fixed": "1.26.2" } - ] + ], + "type": "SEMVER" } - ], - "database_specific": { - "source": "https://vuln.go.dev/ID/GO-2026-4865.json" - }, - "ecosystem_specific": { - "imports": [ - { - "path": "html/template", - "symbols": [ - "Error.Error", - "HTMLEscaper", - "JSEscape", - "JSEscapeString", - "JSEscaper", - "ParseFS", - "ParseFiles", - "ParseGlob", - "Template.AddParseTree", - "Template.Clone", - "Template.DefinedTemplates", - "Template.Execute", - "Template.ExecuteTemplate", - "Template.Funcs", - "Template.Parse", - "Template.ParseFS", - "Template.ParseFiles", - "Template.ParseGlob", - "URLQueryEscaper", - "context.String", - "context.mangle", - "escaper.escapeBranch" - ] - } - ] - } + ] + } + ], + "aliases": [ + "BIT-golang-2026-32281", + "CVE-2026-32281" + ], + "credits": [ + { + "name": "Jakub Ciolek - https://ciolek.dev" } ], + "database_specific": { + "review_status": "REVIEWED", + "url": "https://pkg.go.dev/vuln/GO-2026-4946" + }, + "details": "Validating certificate chains which use policies is unexpectedly inefficient when certificates in the chain contain a very large number of policy mappings, possibly causing denial of service.\n\nThis only affects validation of otherwise trusted certificate chains, issued by a root CA in the VerifyOptions.Roots CertPool, or in the system certificate pool.", + "id": "GO-2026-4946", + "modified": "2026-08-18T10:44:11.281425070Z", + "published": "2026-04-07T22:53:49Z", "references": [ { "type": "FIX", - "url": "https://go.dev/cl/763762" + "url": "https://go.dev/cl/758061" }, { "type": "REPORT", - "url": "https://go.dev/issue/78331" + "url": "https://go.dev/issue/78281" }, { "type": "WEB", "url": "https://groups.google.com/g/golang-announce/c/0uYbvbPZRWU" } ], - "database_specific": { - "review_status": "REVIEWED", - "url": "https://pkg.go.dev/vuln/GO-2026-4865" - } - }, - { - "modified": "2026-05-15T10:59:23Z", - "published": "2026-04-07T22:53:49Z", - "schema_version": "1.7.5", - "id": "GO-2026-4869", - "aliases": [ - "BIT-golang-2026-32288", - "CVE-2026-32288" - ], "related": [ - "CGA-6f85-jvrm-qq3w", + "CGA-mhq6-cw97-rcc6", + "RHSA-2026:10217", + "RHSA-2026:10219", + "RHSA-2026:16021", + "RHSA-2026:16024", + "RHSA-2026:16101", + "RHSA-2026:17287", + "RHSA-2026:18027", + "RHSA-2026:18032", + "RHSA-2026:19135", + "RHSA-2026:19353", + "RHSA-2026:19450", + "RHSA-2026:19719", + "RHSA-2026:19720", + "RHSA-2026:19721", + "RHSA-2026:19839", + "RHSA-2026:20556", + "RHSA-2026:20569", + "RHSA-2026:20570", + "RHSA-2026:20571", + "RHSA-2026:20607", + "RHSA-2026:20608", + "RHSA-2026:20609", + "RHSA-2026:22141", + "RHSA-2026:22309", + "RHSA-2026:22713", + "RHSA-2026:23102", + "RHSA-2026:23103", + "RHSA-2026:24337", + "RHSA-2026:24470", + "RHSA-2026:24716", + "RHSA-2026:25248", + "RHSA-2026:25250", + "RHSA-2026:25251", + "RHSA-2026:25252", + "RHSA-2026:26054", + "RHSA-2026:26447", + "RHSA-2026:27076", + "RHSA-2026:27711", + "RHSA-2026:27740", + "RHSA-2026:28074", + "RHSA-2026:29035", + "RHSA-2026:29195", + "RHSA-2026:29455", + "RHSA-2026:29702", + "RHSA-2026:29703", + "RHSA-2026:33722", + "RHSA-2026:34192", + "RHSA-2026:34196", + "RHSA-2026:34197", + "RHSA-2026:34365", + "RHSA-2026:36796", + "RHSA-2026:39810", + "RHSA-2026:41019", + "RHSA-2026:42078", + "RHSA-2026:42079", + "RHSA-2026:47712", + "RHSA-2026:47714", + "RHSA-2026:47716", + "RHSA-2026:47719", + "RHSA-2026:47721", + "RHSA-2026:47722", + "RHSA-2026:47910", + "RHSA-2026:48036", + "RHSA-2026:49509", + "RHSA-2026:49526", + "RHSA-2026:49600", + "RHSA-2026:49838", + "RHSA-2026:49944", + "RHSA-2026:51288", + "RHSA-2026:54757", "RHSA-2026:7291", "RHSA-2026:7385" ], - "summary": "Unbounded allocation for old GNU sparse in archive/tar", - "details": "tar.Reader can allocate an unbounded amount of memory when reading a maliciously-crafted archive containing a large number of sparse regions encoded in the \"old GNU sparse map\" format.", + "schema_version": "1.7.5", + "summary": "Inefficient policy validation in crypto/x509" + }, + { "affected": [ { + "database_specific": { + "source": "https://vuln.go.dev/ID/GO-2026-4947.json" + }, + "ecosystem_specific": { + "imports": [ + { + "path": "crypto/x509", + "symbols": [ + "Certificate.Verify", + "Certificate.buildChains" + ] + } + ] + }, "package": { "ecosystem": "Go", "name": "stdlib", @@ -902,7 +1947,6 @@ }, "ranges": [ { - "type": "SEMVER", "events": [ { "introduced": "0" @@ -916,104 +1960,65 @@ { "fixed": "1.26.2" } - ] + ], + "type": "SEMVER" } - ], - "database_specific": { - "source": "https://vuln.go.dev/ID/GO-2026-4869.json" - }, - "ecosystem_specific": { - "imports": [ - { - "path": "archive/tar", - "symbols": [ - "Reader.Next", - "Reader.readOldGNUSparseMap", - "readGNUSparseMap1x0" - ] - } - ] - } + ] + } + ], + "aliases": [ + "BIT-golang-2026-32280", + "CVE-2026-32280" + ], + "credits": [ + { + "name": "Jakub Ciolek - https://ciolek.dev" } ], + "database_specific": { + "review_status": "REVIEWED", + "url": "https://pkg.go.dev/vuln/GO-2026-4947" + }, + "details": "During chain building, the amount of work that is done is not correctly limited when a large number of intermediate certificates are passed in VerifyOptions.Intermediates, which can lead to a denial of service. This affects both direct users of crypto/x509 and users of crypto/tls.", + "id": "GO-2026-4947", + "modified": "2026-08-18T10:44:11.213360963Z", + "published": "2026-04-07T22:53:49Z", "references": [ { "type": "FIX", - "url": "https://go.dev/cl/763766" + "url": "https://go.dev/cl/758320" }, { "type": "REPORT", - "url": "https://go.dev/issue/78301" + "url": "https://go.dev/issue/78282" }, { "type": "WEB", "url": "https://groups.google.com/g/golang-announce/c/0uYbvbPZRWU" } ], - "credits": [ - { - "name": "Colin Walters (walters@verbum.org)" - }, - { - "name": "Uuganbayar Lkhamsuren (https://github.com/uug4na)" - }, - { - "name": "Jakub Ciolek" - } - ], - "database_specific": { - "review_status": "REVIEWED", - "url": "https://pkg.go.dev/vuln/GO-2026-4869" - } - }, - { - "modified": "2026-08-07T10:42:58Z", - "published": "2026-04-07T22:53:49Z", - "schema_version": "1.7.5", - "id": "GO-2026-4870", - "aliases": [ - "BIT-golang-2026-32283", - "CVE-2026-32283" - ], "related": [ - "CGA-w7vv-7vph-696h", + "CGA-crmm-287q-6v8j", "RHSA-2026:10217", "RHSA-2026:10219", "RHSA-2026:10704", "RHSA-2026:11507", "RHSA-2026:11514", - "RHSA-2026:11704", - "RHSA-2026:11711", - "RHSA-2026:11712", - "RHSA-2026:11863", - "RHSA-2026:11881", "RHSA-2026:14200", "RHSA-2026:15980", "RHSA-2026:16021", "RHSA-2026:16024", "RHSA-2026:16101", - "RHSA-2026:16102", "RHSA-2026:16875", - "RHSA-2026:17075", "RHSA-2026:17084", "RHSA-2026:17287", "RHSA-2026:18027", "RHSA-2026:18032", - "RHSA-2026:19126", - "RHSA-2026:19132", "RHSA-2026:19133", - "RHSA-2026:19134", "RHSA-2026:19135", - "RHSA-2026:19136", - "RHSA-2026:19137", - "RHSA-2026:19139", "RHSA-2026:19144", - "RHSA-2026:19156", "RHSA-2026:19350", - "RHSA-2026:19351", - "RHSA-2026:19352", "RHSA-2026:19353", - "RHSA-2026:19369", "RHSA-2026:19450", "RHSA-2026:19550", "RHSA-2026:19634", @@ -1032,28 +2037,40 @@ "RHSA-2026:20607", "RHSA-2026:20608", "RHSA-2026:20609", - "RHSA-2026:22450", + "RHSA-2026:21655", + "RHSA-2026:22130", + "RHSA-2026:22141", + "RHSA-2026:22309", "RHSA-2026:22709", "RHSA-2026:22713", - "RHSA-2026:22714", - "RHSA-2026:22937", "RHSA-2026:23102", "RHSA-2026:23103", - "RHSA-2026:23228", + "RHSA-2026:23244", "RHSA-2026:24337", "RHSA-2026:24470", + "RHSA-2026:24716", "RHSA-2026:24761", "RHSA-2026:24762", + "RHSA-2026:25180", + "RHSA-2026:25248", + "RHSA-2026:25250", + "RHSA-2026:25251", + "RHSA-2026:25252", + "RHSA-2026:25253", "RHSA-2026:26447", "RHSA-2026:27076", "RHSA-2026:28038", "RHSA-2026:28047", "RHSA-2026:28074", + "RHSA-2026:28886", + "RHSA-2026:28961", "RHSA-2026:29035", "RHSA-2026:29195", "RHSA-2026:29455", + "RHSA-2026:29702", "RHSA-2026:29703", "RHSA-2026:33722", + "RHSA-2026:34097", "RHSA-2026:34192", "RHSA-2026:34196", "RHSA-2026:34197", @@ -1071,16 +2088,174 @@ "RHSA-2026:48036", "RHSA-2026:48790", "RHSA-2026:49509", + "RHSA-2026:49526", "RHSA-2026:49600", + "RHSA-2026:49838", "RHSA-2026:49944", "RHSA-2026:51288", - "RHSA-2026:7291", - "RHSA-2026:7385" + "RHSA-2026:54191", + "RHSA-2026:54757" ], - "summary": "Unauthenticated TLS 1.3 KeyUpdate record can cause persistent connection retention and DoS in crypto/tls", - "details": "If one side of the TLS connection sends multiple key update messages post-handshake in a single record, the connection can deadlock, causing uncontrolled consumption of resources. This can lead to a denial of service.\n\nThis only affects TLS 1.3.", + "schema_version": "1.7.5", + "summary": "Unexpected work during chain building in crypto/x509" + }, + { + "affected": [ + { + "database_specific": { + "source": "https://vuln.go.dev/ID/GO-2026-4970.json" + }, + "ecosystem_specific": { + "imports": [ + { + "path": "os", + "symbols": [ + "OpenInRoot", + "Root.Create", + "Root.Open", + "Root.OpenFile", + "Root.OpenRoot", + "Root.ReadFile", + "Root.WriteFile", + "openRootInRoot", + "rootFS.Open", + "rootFS.ReadDir", + "rootFS.ReadFile", + "rootOpenFileNolog" + ] + } + ] + }, + "package": { + "ecosystem": "Go", + "name": "stdlib", + "purl": "pkg:golang/stdlib" + }, + "ranges": [ + { + "events": [ + { + "introduced": "0" + }, + { + "fixed": "1.25.12" + }, + { + "introduced": "1.26.0-0" + }, + { + "fixed": "1.26.5" + }, + { + "introduced": "1.27.0-0" + }, + { + "fixed": "1.27.0-rc.2" + } + ], + "type": "SEMVER" + } + ] + } + ], + "aliases": [ + "BIT-golang-2026-39822", + "CVE-2026-39822" + ], + "credits": [ + { + "name": "Mundur (https://github.com/M0nd0R)" + } + ], + "database_specific": { + "review_status": "REVIEWED", + "url": "https://pkg.go.dev/vuln/GO-2026-4970" + }, + "details": "On Unix systems, opening a file in an os.Root improperly follows symlinks to locations outside of the Root when the final path component of the a path is a symbolic link and the path ends in /.\n\nFor example, 'root.Open(\"symlink/\")' will open \"symlink\" even when \"symlink\" is a symbolic link pointing outside of the root.", + "id": "GO-2026-4970", + "modified": "2026-07-16T10:29:37.935192329Z", + "published": "2026-07-07T21:34:47Z", + "references": [ + { + "type": "REPORT", + "url": "https://go.dev/issue/79005" + }, + { + "type": "WEB", + "url": "https://groups.google.com/g/golang-announce/c/OrmQE_Yp5Sc" + }, + { + "type": "FIX", + "url": "https://go.dev/cl/797880" + } + ], + "related": [ + "CGA-8r5h-83c2-4rxw", + "RHSA-2026:36477", + "RHSA-2026:36510", + "RHSA-2026:37435", + "RHSA-2026:37436", + "RHSA-2026:38493", + "RHSA-2026:38494", + "RHSA-2026:38495", + "RHSA-2026:38878", + "RHSA-2026:38995" + ], + "schema_version": "1.7.5", + "summary": "Root escape via symlink plus trailing slash in os" + }, + { "affected": [ { + "database_specific": { + "source": "https://vuln.go.dev/ID/GO-2026-4971.json" + }, + "ecosystem_specific": { + "imports": [ + { + "path": "net", + "symbols": [ + "Dial", + "DialTimeout", + "Dialer.Dial", + "Dialer.DialContext", + "Listen", + "ListenConfig.Listen", + "ListenConfig.ListenPacket", + "ListenPacket", + "LookupAddr", + "LookupCNAME", + "LookupHost", + "LookupIP", + "LookupMX", + "LookupNS", + "LookupPort", + "LookupSRV", + "LookupTXT", + "ResolveIPAddr", + "ResolveTCPAddr", + "ResolveUDPAddr", + "Resolver.LookupAddr", + "Resolver.LookupCNAME", + "Resolver.LookupHost", + "Resolver.LookupIP", + "Resolver.LookupIPAddr", + "Resolver.LookupMX", + "Resolver.LookupNS", + "Resolver.LookupNetIP", + "Resolver.LookupPort", + "Resolver.LookupSRV", + "Resolver.LookupTXT", + "Resolver.lookupAddr", + "Resolver.lookupMX", + "Resolver.lookupNS", + "Resolver.lookupPort", + "Resolver.lookupSRV", + "Resolver.lookupTXT" + ] + } + ] + }, "package": { "ecosystem": "Go", "name": "stdlib", @@ -1088,135 +2263,76 @@ }, "ranges": [ { - "type": "SEMVER", "events": [ { "introduced": "0" }, { - "fixed": "1.25.9" + "fixed": "1.25.10" }, { "introduced": "1.26.0-0" }, { - "fixed": "1.26.2" + "fixed": "1.26.3" } - ] + ], + "type": "SEMVER" } - ], - "database_specific": { - "source": "https://vuln.go.dev/ID/GO-2026-4870.json" - }, - "ecosystem_specific": { - "imports": [ - { - "path": "crypto/tls", - "symbols": [ - "Conn.Handshake", - "Conn.HandshakeContext", - "Conn.Read", - "Conn.Write", - "Conn.handleKeyUpdate", - "Dial", - "DialWithDialer", - "Dialer.Dial", - "Dialer.DialContext", - "QUICConn.HandleData", - "QUICConn.Start", - "clientHandshakeStateTLS13.establishHandshakeKeys", - "clientHandshakeStateTLS13.readServerFinished", - "serverHandshakeStateTLS13.readClientFinished", - "serverHandshakeStateTLS13.sendServerParameters" - ] - } - ] - } + ] } ], + "aliases": [ + "BIT-golang-2026-39836", + "CVE-2026-39836" + ], + "database_specific": { + "review_status": "REVIEWED", + "url": "https://pkg.go.dev/vuln/GO-2026-4971" + }, + "details": "The Dial and LookupPort functions panic on Windows when provided with an input containing a NUL (0).", + "id": "GO-2026-4971", + "modified": "2026-08-01T10:44:51.653864484Z", + "published": "2026-05-07T19:21:40Z", "references": [ - { - "type": "FIX", - "url": "https://go.dev/cl/763767" - }, { "type": "REPORT", - "url": "https://go.dev/issue/78334" + "url": "https://go.dev/issue/79006" }, { "type": "WEB", - "url": "https://groups.google.com/g/golang-announce/c/0uYbvbPZRWU" - } - ], - "credits": [ + "url": "https://groups.google.com/g/golang-announce/c/qcCIEXso47M" + }, { - "name": "Jakub Ciolek - https://ciolek.dev/" + "type": "FIX", + "url": "https://go.dev/cl/775320" } ], - "database_specific": { - "review_status": "REVIEWED", - "url": "https://pkg.go.dev/vuln/GO-2026-4870" - } - }, - { - "modified": "2026-06-27T10:44:20Z", - "published": "2026-05-07T19:21:40Z", - "schema_version": "1.7.5", - "id": "GO-2026-4918", - "aliases": [ - "BIT-golang-2026-33814", - "CVE-2026-33814" - ], "related": [ - "CGA-v7v4-9r6p-x7fc", + "CGA-g4vf-wmcj-mwwf", "RHSA-2026:23262", "RHSA-2026:23264" ], - "summary": "Infinite loop in HTTP/2 transport when given bad SETTINGS_MAX_FRAME_SIZE in net/http/internal/http2 in golang.org/x/net", - "details": "When processing HTTP/2 SETTINGS frames, transport will enter an infinite loop of writing CONTINUATION frames if it receives a SETTINGS_MAX_FRAME_SIZE with a value of 0.", + "schema_version": "1.7.5", + "summary": "Panic in Dial and LookupPort when handling NUL byte on Windows in net" + }, + { "affected": [ { - "package": { - "ecosystem": "Go", - "name": "golang.org/x/net", - "purl": "pkg:golang/golang.org/x/net" - }, - "ranges": [ - { - "type": "SEMVER", - "events": [ - { - "introduced": "0" - }, - { - "fixed": "0.53.0" - } - ] - } - ], "database_specific": { - "source": "https://vuln.go.dev/ID/GO-2026-4918.json" + "source": "https://vuln.go.dev/ID/GO-2026-4976.json" }, "ecosystem_specific": { "imports": [ { - "path": "golang.org/x/net/http2", + "path": "net/http/httputil", "symbols": [ - "Transport.NewClientConn", - "Transport.RoundTrip", - "Transport.RoundTripOpt", - "clientConnPool.GetClientConn", - "clientConnReadLoop.processSettingsNoWrite", - "noDialClientConnPool.GetClientConn", - "noDialH2RoundTripper.NewClientConn", - "noDialH2RoundTripper.RoundTrip", - "unencryptedTransport.RoundTrip" + "ReverseProxy.ServeHTTP", + "cleanQueryParams" ] } ] - } - }, - { + }, "package": { "ecosystem": "Go", "name": "stdlib", @@ -1224,7 +2340,6 @@ }, "ranges": [ { - "type": "SEMVER", "events": [ { "introduced": "0" @@ -1238,156 +2353,67 @@ { "fixed": "1.26.3" } - ] + ], + "type": "SEMVER" } - ], - "database_specific": { - "source": "https://vuln.go.dev/ID/GO-2026-4918.json" - }, - "ecosystem_specific": { - "imports": [ - { - "path": "net/http", - "symbols": [ - "Client.CloseIdleConnections", - "Client.Do", - "Client.Get", - "Client.Head", - "Client.Post", - "Client.PostForm", - "ClientConn.Close", - "ClientConn.RoundTrip", - "Get", - "Head", - "Post", - "PostForm", - "Transport.CloseIdleConnections", - "Transport.NewClientConn", - "Transport.RoundTrip", - "http1ClientConn.Close", - "http1ClientConn.RoundTrip", - "http2Transport.NewClientConn", - "http2Transport.RoundTrip", - "http2Transport.RoundTripOpt", - "http2clientConnPool.GetClientConn", - "http2clientConnReadLoop.processSettingsNoWrite", - "http2noDialClientConnPool.GetClientConn", - "http2noDialH2RoundTripper.NewClientConn", - "http2noDialH2RoundTripper.RoundTrip", - "http2unencryptedTransport.RoundTrip" - ] - } - ] - } + ] } ], + "aliases": [ + "BIT-golang-2026-39825", + "CVE-2026-39825" + ], + "database_specific": { + "review_status": "REVIEWED", + "url": "https://pkg.go.dev/vuln/GO-2026-4976" + }, + "details": "ReverseProxy can forward queries containing parameters not visible to Rewrite functions.\n\nWhen used with a Rewrite function, or a Director function which parses query parameters, ReverseProxy sanitizes the forwarded request to remove query parameters which are not parsed by url.ParseQuery. ReverseProxy does not take ParseQuery's limit on the total number of query parameters (controlled by GODEBUG=urlmaxqueryparams=N) into account. This can permit ReverseProxy to forward a request containing a query parameter that is not visible to the Rewrite function.\n\nFor example, the query \"a1=x&a2=x&...&a10000=x&hidden=y\" can forward the parameter \"hidden=y\" while hiding it from the proxy's Rewrite function.", + "id": "GO-2026-4976", + "modified": "2026-06-27T10:44:21.221469613Z", + "published": "2026-05-07T19:21:40Z", "references": [ { "type": "FIX", - "url": "https://go.dev/cl/761581" - }, - { - "type": "FIX", - "url": "https://go.dev/cl/761640" + "url": "https://go.dev/cl/770541" }, { "type": "REPORT", - "url": "https://go.dev/issue/78476" + "url": "https://go.dev/issue/78948" }, { "type": "WEB", "url": "https://groups.google.com/g/golang-announce/c/qcCIEXso47M" } ], - "credits": [ - { - "name": "Marwan Atia (marwansamir688@gmail.com)" - } + "related": [ + "CGA-hgj8-xv45-c75x", + "RHSA-2026:23262", + "RHSA-2026:23264" ], - "database_specific": { - "review_status": "REVIEWED", - "url": "https://pkg.go.dev/vuln/GO-2026-4918" - } + "schema_version": "1.7.5", + "summary": "ReverseProxy forwards queries with more than urlmaxqueryparams parameters in net/http/httputil" }, { - "modified": "2026-08-07T10:42:58Z", - "published": "2026-04-07T22:53:49Z", - "schema_version": "1.7.5", - "id": "GO-2026-4946", - "aliases": [ - "BIT-golang-2026-32281", - "CVE-2026-32281" - ], - "related": [ - "CGA-mhq6-cw97-rcc6", - "RHSA-2026:10217", - "RHSA-2026:10219", - "RHSA-2026:16021", - "RHSA-2026:16024", - "RHSA-2026:16101", - "RHSA-2026:18027", - "RHSA-2026:18032", - "RHSA-2026:19135", - "RHSA-2026:19353", - "RHSA-2026:19450", - "RHSA-2026:19719", - "RHSA-2026:19720", - "RHSA-2026:19721", - "RHSA-2026:19839", - "RHSA-2026:20556", - "RHSA-2026:20569", - "RHSA-2026:20570", - "RHSA-2026:20571", - "RHSA-2026:22141", - "RHSA-2026:22309", - "RHSA-2026:22713", - "RHSA-2026:23102", - "RHSA-2026:23103", - "RHSA-2026:24337", - "RHSA-2026:24470", - "RHSA-2026:24716", - "RHSA-2026:26054", - "RHSA-2026:26447", - "RHSA-2026:27076", - "RHSA-2026:27711", - "RHSA-2026:27740", - "RHSA-2026:28074", - "RHSA-2026:29035", - "RHSA-2026:29195", - "RHSA-2026:29455", - "RHSA-2026:29702", - "RHSA-2026:29703", - "RHSA-2026:33722", - "RHSA-2026:34192", - "RHSA-2026:34196", - "RHSA-2026:34197", - "RHSA-2026:34365", - "RHSA-2026:36796", - "RHSA-2026:39810", - "RHSA-2026:41019", - "RHSA-2026:42078", - "RHSA-2026:42079", - "RHSA-2026:47712", - "RHSA-2026:47714", - "RHSA-2026:47716", - "RHSA-2026:47719", - "RHSA-2026:47721", - "RHSA-2026:47722", - "RHSA-2026:47910", - "RHSA-2026:48036", - "RHSA-2026:49509", - "RHSA-2026:49526", - "RHSA-2026:49600", - "RHSA-2026:49838", - "RHSA-2026:49944", - "RHSA-2026:51288", - "RHSA-2026:7291", - "RHSA-2026:7385" - ], - "summary": "Inefficient policy validation in crypto/x509", - "details": "Validating certificate chains which use policies is unexpectedly inefficient when certificates in the chain contain a very large number of policy mappings, possibly causing denial of service.\n\nThis only affects validation of otherwise trusted certificate chains, issued by a root CA in the VerifyOptions.Roots CertPool, or in the system certificate pool.", "affected": [ { + "database_specific": { + "source": "https://vuln.go.dev/ID/GO-2026-4977.json" + }, + "ecosystem_specific": { + "imports": [ + { + "path": "net/mail", + "symbols": [ + "AddressParser.Parse", + "AddressParser.ParseList", + "Header.AddressList", + "ParseAddress", + "ParseAddressList", + "addrParser.consumePhrase" + ] + } + ] + }, "package": { "ecosystem": "Go", "name": "stdlib", @@ -1395,168 +2421,78 @@ }, "ranges": [ { - "type": "SEMVER", "events": [ { "introduced": "0" }, { - "fixed": "1.25.9" + "fixed": "1.25.10" }, { "introduced": "1.26.0-0" }, { - "fixed": "1.26.2" + "fixed": "1.26.3" } - ] + ], + "type": "SEMVER" } - ], - "database_specific": { - "source": "https://vuln.go.dev/ID/GO-2026-4946.json" - }, - "ecosystem_specific": { - "imports": [ - { - "path": "crypto/x509", - "symbols": [ - "Certificate.Verify", - "policiesValid" - ] - } - ] - } + ] } ], + "aliases": [ + "BIT-golang-2026-42499", + "CVE-2026-42499" + ], + "database_specific": { + "review_status": "REVIEWED", + "url": "https://pkg.go.dev/vuln/GO-2026-4977" + }, + "details": "Pathological inputs could cause DoS through consumePhrase when parsing an email address according to RFC 5322.", + "id": "GO-2026-4977", + "modified": "2026-08-20T10:58:07.429072708Z", + "published": "2026-05-07T19:21:40Z", "references": [ { - "type": "FIX", - "url": "https://go.dev/cl/758061" + "type": "REPORT", + "url": "https://go.dev/issue/78987" }, { - "type": "REPORT", - "url": "https://go.dev/issue/78281" + "type": "FIX", + "url": "https://go.dev/cl/771520" }, { "type": "WEB", - "url": "https://groups.google.com/g/golang-announce/c/0uYbvbPZRWU" + "url": "https://groups.google.com/g/golang-announce/c/qcCIEXso47M" } ], - "credits": [ - { - "name": "Jakub Ciolek - https://ciolek.dev" - } + "related": [ + "CGA-m28j-j59g-3rp3", + "RHSA-2026:17713", + "RHSA-2026:17714", + "RHSA-2026:54552" ], - "database_specific": { - "review_status": "REVIEWED", - "url": "https://pkg.go.dev/vuln/GO-2026-4946" - } + "schema_version": "1.7.5", + "summary": "Quadratic string concatenation in consumePhrase in net/mail" }, { - "modified": "2026-08-07T10:42:57Z", - "published": "2026-04-07T22:53:49Z", - "schema_version": "1.7.5", - "id": "GO-2026-4947", - "aliases": [ - "BIT-golang-2026-32280", - "CVE-2026-32280" - ], - "related": [ - "CGA-crmm-287q-6v8j", - "RHSA-2026:10217", - "RHSA-2026:10219", - "RHSA-2026:10704", - "RHSA-2026:11507", - "RHSA-2026:11514", - "RHSA-2026:14200", - "RHSA-2026:15980", - "RHSA-2026:16021", - "RHSA-2026:16024", - "RHSA-2026:16101", - "RHSA-2026:16875", - "RHSA-2026:17084", - "RHSA-2026:17287", - "RHSA-2026:18027", - "RHSA-2026:18032", - "RHSA-2026:19133", - "RHSA-2026:19135", - "RHSA-2026:19144", - "RHSA-2026:19350", - "RHSA-2026:19353", - "RHSA-2026:19450", - "RHSA-2026:19550", - "RHSA-2026:19634", - "RHSA-2026:19714", - "RHSA-2026:19715", - "RHSA-2026:19719", - "RHSA-2026:19720", - "RHSA-2026:19721", - "RHSA-2026:19722", - "RHSA-2026:19750", - "RHSA-2026:19839", - "RHSA-2026:20556", - "RHSA-2026:20569", - "RHSA-2026:20570", - "RHSA-2026:20571", - "RHSA-2026:20607", - "RHSA-2026:20608", - "RHSA-2026:20609", - "RHSA-2026:21655", - "RHSA-2026:22130", - "RHSA-2026:22141", - "RHSA-2026:22309", - "RHSA-2026:22709", - "RHSA-2026:22713", - "RHSA-2026:23102", - "RHSA-2026:23103", - "RHSA-2026:23244", - "RHSA-2026:24337", - "RHSA-2026:24470", - "RHSA-2026:24716", - "RHSA-2026:24761", - "RHSA-2026:24762", - "RHSA-2026:25180", - "RHSA-2026:26447", - "RHSA-2026:27076", - "RHSA-2026:28038", - "RHSA-2026:28047", - "RHSA-2026:28074", - "RHSA-2026:28886", - "RHSA-2026:28961", - "RHSA-2026:29035", - "RHSA-2026:29195", - "RHSA-2026:29455", - "RHSA-2026:29702", - "RHSA-2026:29703", - "RHSA-2026:33722", - "RHSA-2026:34097", - "RHSA-2026:34192", - "RHSA-2026:34196", - "RHSA-2026:34197", - "RHSA-2026:34365", - "RHSA-2026:36796", - "RHSA-2026:39810", - "RHSA-2026:41019", - "RHSA-2026:47712", - "RHSA-2026:47714", - "RHSA-2026:47716", - "RHSA-2026:47719", - "RHSA-2026:47721", - "RHSA-2026:47722", - "RHSA-2026:47910", - "RHSA-2026:48036", - "RHSA-2026:48790", - "RHSA-2026:49509", - "RHSA-2026:49526", - "RHSA-2026:49600", - "RHSA-2026:49838", - "RHSA-2026:49944", - "RHSA-2026:51288" - ], - "summary": "Unexpected work during chain building in crypto/x509", - "details": "During chain building, the amount of work that is done is not correctly limited when a large number of intermediate certificates are passed in VerifyOptions.Intermediates, which can lead to a denial of service. This affects both direct users of crypto/x509 and users of crypto/tls.", "affected": [ { + "database_specific": { + "source": "https://vuln.go.dev/ID/GO-2026-4980.json" + }, + "ecosystem_specific": { + "imports": [ + { + "path": "html/template", + "symbols": [ + "Template.Execute", + "Template.ExecuteTemplate", + "isJSType" + ] + } + ] + }, "package": { "ecosystem": "Go", "name": "stdlib", @@ -1564,88 +2500,82 @@ }, "ranges": [ { - "type": "SEMVER", "events": [ { "introduced": "0" }, { - "fixed": "1.25.9" + "fixed": "1.25.10" }, { "introduced": "1.26.0-0" }, { - "fixed": "1.26.2" + "fixed": "1.26.3" } - ] + ], + "type": "SEMVER" } - ], - "database_specific": { - "source": "https://vuln.go.dev/ID/GO-2026-4947.json" - }, - "ecosystem_specific": { - "imports": [ - { - "path": "crypto/x509", - "symbols": [ - "Certificate.Verify", - "Certificate.buildChains" - ] - } - ] - } + ] + } + ], + "aliases": [ + "BIT-golang-2026-39826", + "CVE-2026-39826" + ], + "credits": [ + { + "name": "Mundur (https://github.com/M0nd0R)" } ], + "database_specific": { + "review_status": "REVIEWED", + "url": "https://pkg.go.dev/vuln/GO-2026-4980" + }, + "details": "If a trusted template author were to write a