From dd8892fa14f43a8b01616158716defd0bf6f7f13 Mon Sep 17 00:00:00 2001 From: Chojan Shang Date: Tue, 22 Sep 2026 02:27:49 +0800 Subject: [PATCH] Adopt PDM and pytest quality checks --- .github/workflows/quality.yml | 48 + .github/workflows/website.yml | 18 +- .gitignore | 2 + .pre-commit-config.yaml | 13 + .python-version | 1 + Makefile | 39 + README.md | 2 +- docs/README.md | 3 +- docs/bub-agent.md | 5 + docs/compute-efficiency.md | 2 +- docs/conf.py | 3 +- docs/design.md | 2 +- docs/development.md | 75 + docs/figures/README.md | 2 +- docs/inference.md | 16 +- docs/local-benchmarks.md | 17 +- docs/requirements.txt | 3 - docs/run-experiment.md | 12 +- docs/website.md | 17 +- pdm.lock | 2534 +++++++++++++++++++++++++++++++++ pdm.toml | 2 + pyproject.toml | 56 +- scripts/plot_model_card.py | 6 +- scripts/prepare_data.py | 17 +- src/dohnuts/execution.py | 26 +- src/dohnuts/kernels.py | 20 +- src/dohnuts/metrics.py | 8 +- src/dohnuts/predictor.py | 3 + src/dohnuts/train.py | 7 +- tests/test_data_isolation.py | 55 +- tests/test_execution.py | 42 + tests/test_metrics.py | 79 +- tests/test_rlcd.py | 67 +- 33 files changed, 3022 insertions(+), 180 deletions(-) create mode 100644 .github/workflows/quality.yml create mode 100644 .pre-commit-config.yaml create mode 100644 .python-version create mode 100644 Makefile create mode 100644 docs/development.md delete mode 100644 docs/requirements.txt create mode 100644 pdm.lock create mode 100644 pdm.toml create mode 100644 tests/test_execution.py diff --git a/.github/workflows/quality.yml b/.github/workflows/quality.yml new file mode 100644 index 0000000..a8ebfd1 --- /dev/null +++ b/.github/workflows/quality.yml @@ -0,0 +1,48 @@ +name: Quality + +on: + push: + branches: [main] + pull_request: + types: [opened, synchronize, reopened, ready_for_review] + workflow_dispatch: + +permissions: + contents: read + +concurrency: + group: quality-${{ github.ref }} + cancel-in-progress: true + +jobs: + quality: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v7 + - uses: pdm-project/setup-pdm@v4 + with: + python-version: "3.12" + version: "2.29.2" + cache: true + - run: pdm install --check --no-default --no-self -G quality + - run: make lint + - run: make build + + tests: + runs-on: ubuntu-24.04 + env: + HF_HUB_OFFLINE: "1" + TRANSFORMERS_OFFLINE: "1" + steps: + - uses: actions/checkout@v7 + - name: Make room for the locked ROCm runtime + # Torch alone occupies about 14 GiB; these SDKs are unused by this job. + run: sudo rm -rf /usr/local/lib/android /usr/share/dotnet + - uses: pdm-project/setup-pdm@v4 + with: + python-version: "3.12" + version: "2.29.2" + - run: pdm --no-cache install --check -G train -G agent -G quality + - run: pdm run typecheck + - name: Run pytest + run: make test diff --git a/.github/workflows/website.yml b/.github/workflows/website.yml index d83a002..473a31e 100644 --- a/.github/workflows/website.yml +++ b/.github/workflows/website.yml @@ -10,6 +10,10 @@ on: - "assets/dohnuts-logo.png" - "results/**" - "pyproject.toml" + - "pdm.lock" + - "pdm.toml" + - "Makefile" + - ".python-version" - "LICENSE" - "NOTICE" - ".github/workflows/website.yml" @@ -23,6 +27,10 @@ on: - "assets/dohnuts-logo.png" - "results/**" - "pyproject.toml" + - "pdm.lock" + - "pdm.toml" + - "Makefile" + - ".python-version" - "LICENSE" - "NOTICE" - ".github/workflows/website.yml" @@ -36,13 +44,13 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v7 - - uses: actions/setup-python@v7 + - uses: pdm-project/setup-pdm@v4 with: python-version: "3.12" - cache: pip - cache-dependency-path: docs/requirements.txt - - run: python -m pip install -r docs/requirements.txt - - run: python -m sphinx -b html -W --keep-going -d build/doctrees -c docs . build/site + version: "2.29.2" + cache: true + - run: make docs-install + - run: make docs - uses: actions/upload-pages-artifact@v4 with: path: build/site diff --git a/.gitignore b/.gitignore index 857755e..29c483a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,7 @@ # Local environments and caches .venv/ +.pdm-python +__pypackages__/ __pycache__/ .pytest_cache/ .ruff_cache/ diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..8ace808 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,13 @@ +repos: + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v6.0.0 + hooks: + - id: check-case-conflict + - id: check-merge-conflict + - id: check-toml + - id: check-yaml + - id: check-json + - id: end-of-file-fixer + exclude: ^(data/manifests/|docs/figures/|results/) + - id: trailing-whitespace + exclude: ^(data/manifests/|docs/figures/|results/) diff --git a/.python-version b/.python-version new file mode 100644 index 0000000..e4fba21 --- /dev/null +++ b/.python-version @@ -0,0 +1 @@ +3.12 diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..0baac23 --- /dev/null +++ b/Makefile @@ -0,0 +1,39 @@ +.DEFAULT_GOAL := help + +.PHONY: help install lock lint check format test build docs-install docs docs-preview + +help: ## Show available targets + @awk 'BEGIN {FS = ":.*## "}; /^[a-zA-Z0-9_-]+:.*## / {printf "%-18s %s\n", $$1, $$2}' $(MAKEFILE_LIST) + +install: ## Install locked runtime, training, agent, and quality dependencies + pdm install --check -G train -G agent -G quality + +lock: ## Resolve all groups for the recorded Python 3.12 environment + pdm lock -G:all --python "==3.12.*" + +lint: ## Verify the lock, repository hygiene, and Python lint/formatting + pdm lock --check + pdm run prek run --all-files + pdm run lint + pdm run format-check + +check: lint ## Run all quality checks, including types against installed dependencies + pdm run typecheck + +format: ## Format Python code + pdm run format + +test: ## Run pytest without loading model weights + pdm run test + +build: ## Build the source distribution and wheel + pdm build + +docs-install: ## Install only the locked documentation dependencies + pdm install --check --no-default --no-self -G docs + +docs: ## Build the static website with warnings treated as errors + pdm run docs + +docs-preview: docs ## Serve the built website on localhost:8000 + pdm run docs-serve diff --git a/README.md b/README.md index b91558c..6715526 100644 --- a/README.md +++ b/README.md @@ -52,7 +52,7 @@ One workflow prepares the public-data mixture, trains with joint RLCD and cross-entropy, selects a checkpoint, calibrates it, and runs the evaluations: ```bash -.venv/bin/python scripts/run_experiment.py +pdm run python scripts/run_experiment.py ``` The [training guide](docs/run-experiment.md) covers setup and resuming a run. diff --git a/docs/README.md b/docs/README.md index 0108410..e6c14ed 100644 --- a/docs/README.md +++ b/docs/README.md @@ -23,7 +23,7 @@ The [behavior and regression tests](design.md#behavior-and-regression-tests) cover the prediction interface and known failure cases. -For website contributors, see [Build the website](website.md). +For contributors, see [Development](development.md) and [Build the website](website.md). ```{toctree} :hidden: @@ -31,5 +31,6 @@ For website contributors, see [Build the website](website.md). Installation and inference Agent integration Training and evaluation +Development Build the website ``` diff --git a/docs/bub-agent.md b/docs/bub-agent.md index 453c968..e3d08d3 100644 --- a/docs/bub-agent.md +++ b/docs/bub-agent.md @@ -7,6 +7,10 @@ to provide one batch decision tool and persistent session tapes. Follow the [runtime and checkpoint setup](inference.md) first. +```bash +pdm install --check --prod -G agent +``` + ```python from pathlib import Path @@ -18,6 +22,7 @@ framework, agent = create_agent( predictor, workspace=Path.cwd(), tape_directory=Path("runs/agent-tapes") ) + async def decide(): command = ',dohnuts.decide state=\'{"message":"Please refund this invoice."}\' ' command += 'questions=\'{"refund":{"type":"noul","instructions":"Is a refund requested?"}}\'' diff --git a/docs/compute-efficiency.md b/docs/compute-efficiency.md index b4041c4..41ab592 100644 --- a/docs/compute-efficiency.md +++ b/docs/compute-efficiency.md @@ -104,7 +104,7 @@ exact training ETA. Hardware microbenchmark throughput is not API throughput. ## Measurement ```bash -.venv/bin/python scripts/benchmark.py dohnuts --checkpoint runs/v1/checkpoint --output runs/v1/benchmarks/dohnuts.jsonl +pdm run python scripts/benchmark.py dohnuts --checkpoint runs/v1/checkpoint --output runs/v1/benchmarks/dohnuts.jsonl ``` The benchmark measures complete prediction calls over text and image workloads, diff --git a/docs/conf.py b/docs/conf.py index a3fa0d4..0ffa824 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -1,8 +1,7 @@ """Build the static website from the repository's existing Markdown.""" -from pathlib import Path import tomllib - +from pathlib import Path metadata = tomllib.loads((Path(__file__).parents[1] / "pyproject.toml").read_text()) project = "Dohnuts" diff --git a/docs/design.md b/docs/design.md index 0d1e1f6..513d267 100644 --- a/docs/design.md +++ b/docs/design.md @@ -78,7 +78,7 @@ identical screenshots crossed splits under different source IDs. Run them when changing the corresponding behavior: ```bash -.venv/bin/python -m unittest discover -s tests +make test ``` Tests assert observable behavior or a known failure case. Internal allocation, diff --git a/docs/development.md b/docs/development.md new file mode 100644 index 0000000..2e77829 --- /dev/null +++ b/docs/development.md @@ -0,0 +1,75 @@ +# Development + +Use Python 3.12 and [PDM](https://pdm-project.org/en/latest/#installation) 2.29.2 +or a newer 2.x release. The runtime targets the Linux/ROCm environment documented +in the [inference guide](inference.md). The quality and documentation groups can +be installed without model dependencies. + +```bash +pdm use 3.12 +make install +make check +make test +make build +``` + +`make install` installs the runtime, training and agent dependencies, and quality +tools. For editing documentation only, use `make docs-install`. +Run `make help` to see the available targets. + +## Dependencies + +`pyproject.toml` owns the package metadata, dependencies, tool settings, and PDM +commands. `pdm.lock` records the resolution for Python 3.12, including the pinned +Bub Git revision and the ROCm package artifacts. The published experiment's +environment snapshot remains historical evidence, not an installation input. + +| Selection | Purpose | +| --- | --- | +| Default dependencies | Model runtime | +| `train` extra | Training, evaluation, and the unit tests' data dependencies | +| `agent` extra | The pinned Bub SDK integration | +| `quality` group | Ruff, ty, prek, and pytest | +| `docs` group | Sphinx, Furo, and MyST | +| `plot` group | Rendering saved evaluation results | + +After changing dependencies, run `make lock`, review the lock diff, and install +the relevant groups with `pdm install --check`. CI refuses a missing or stale +lock rather than resolving different versions. Avoid replacing a trained run's +environment while it is active. + +Keep `use_uv = false` in `pdm.toml`: PDM's experimental uv mode does not support +the package-to-index bindings used for ROCm. Other packages resolve from PyPI. + +## Checks and builds + +`make check` verifies the lock, repository hygiene, Ruff lint and formatting, +and ty checks for `src` against the installed dependencies. `make lint` runs the +checks that only need the `quality` group. `pdm run prek install` optionally +installs the same hygiene hooks locally; installing hooks is not required to run +the checks. + +`make test` runs pytest, including the pinned RLCD loss and +gradient values, prefix-cache updates and gradients, calibration metrics, and +data-split isolation. It does not load +model weights, download data, or prove GPU training/inference acceptance. CI runs +these tests with Hugging Face access disabled. GPU acceptance remains a separate +step for changes to execution or training. + +Run an individual file or case with `pdm run pytest tests/test_rlcd.py` or +`pdm run pytest -k gradients`. Test discovery is limited to `tests/` in +`pyproject.toml`. + +The test job installs the same locked ROCm wheels, checks types, and runs the tests +on CPU. It removes unused Android and .NET SDKs from its temporary Ubuntu runner to make +room for Torch, and skips the large dependency cache. Quality and website jobs +do not install the model runtime. + +`make build` uses `pdm-backend` to produce a wheel and source distribution in +`dist/`. Local model weights, datasets, caches, and experiment runs are excluded. +The CI build does not publish packages. Website validation and deployment use +the separate [website workflow](website.md). + +The Make targets and separated quality/test jobs adapt the relevant parts of +[Bub's Makefile](https://github.com/bubbuild/bub/blob/main/Makefile) and +[CI](https://github.com/bubbuild/bub/blob/main/.github/workflows/main.yml). diff --git a/docs/figures/README.md b/docs/figures/README.md index 2194ba2..355b8f2 100644 --- a/docs/figures/README.md +++ b/docs/figures/README.md @@ -58,7 +58,7 @@ The figures are available as SVG. Captions document each evaluation protocol. On Follow the [plotting setup](../local-benchmarks.md#model-card-figures), then run from the repository root: ```sh -.cache/plot-venv/bin/python scripts/plot_model_card.py --run runs/v1 +pdm run python scripts/plot_model_card.py --run runs/v1 ``` The command writes PNG, SVG, and PDF figures to the experiment output directory. diff --git a/docs/inference.md b/docs/inference.md index 2378f48..de18b5c 100644 --- a/docs/inference.md +++ b/docs/inference.md @@ -1,16 +1,22 @@ # Installation and inference The measured runtime uses Python 3.12, PyTorch 2.9.1 with ROCm 6.4, and an -AMD Radeon RX 7900 XTX. Install from source with the ROCm wheels first: +AMD Radeon RX 7900 XTX. Install [PDM](https://pdm-project.org/en/latest/#installation) +2.29.2 or a newer 2.x release, then install from source: ```bash git clone https://github.com/PsiACE/dohnuts.git cd dohnuts -uv venv --python 3.12 -uv pip install --python .venv/bin/python torch==2.9.1 torchvision==0.24.1 --index-url https://download.pytorch.org/whl/rocm6.4 -uv pip install --python .venv/bin/python -e . +pdm use 3.12 +pdm install --check --prod ``` +The lock file targets Python 3.12. The package sources in `pyproject.toml` bind +PyTorch, torchvision, and PyTorch's Triton runtime to the ROCm 6.4 index. +Keep PDM's native resolver enabled: its experimental uv resolver does not support +these package-to-index bindings. See [development](development.md) for dependency +groups, checks, and updating the lock. + ## Load a checkpoint Load the model by its Hugging Face repository ID. The loader downloads the @@ -18,7 +24,7 @@ decision weights and the exact Qwen3.5-0.8B revision recorded in the checkpoint. Downloads use the Hugging Face cache and are reused by later calls. Both repositories are public; downloading them does not require a Hugging Face login. -Run Python examples with `.venv/bin/python` from the repository root: +Run Python examples with `pdm run python` from the repository root: ```python from dohnuts.predictor import Predictor diff --git a/docs/local-benchmarks.md b/docs/local-benchmarks.md index 6592431..0ad033a 100644 --- a/docs/local-benchmarks.md +++ b/docs/local-benchmarks.md @@ -34,7 +34,7 @@ pinned at `e105a48f8cdb7f3babb3594424f73e5d7bdc97b9`. Its public tasks contain 534-item leaderboard are not distributed, including the entire judge tier. ```bash -.venv/bin/python scripts/run_jevbench.py +pdm run python scripts/run_jevbench.py ``` Each task receives one serial `Predictor.predict` call with its original state, @@ -61,9 +61,9 @@ measurements in its comparison chart. Run them on the exported Dohnuts checkpoin ```bash git clone --branch research https://github.com/NandhaKishorM/laya.git .cache/upstream/laya-research git -C .cache/upstream/laya-research checkout --detach 28d43add7e47ce502489c9433310d55276c64e0f -uv pip install --python .venv/bin/python datasets==5.0.1 -.venv/bin/python scripts/prepare_laya_benchmark.py -.venv/bin/python scripts/run_laya_benchmark.py +pdm install --check --prod -G train +pdm run python scripts/prepare_laya_benchmark.py +pdm run python scripts/run_laya_benchmark.py ``` Preparation preserves the upstream builders, seed 13, candidate order, and @@ -102,13 +102,12 @@ and paired JevBench outcomes. The reference checkpoints are Laya multilingual and Laya Vision. The English Laya entry in JevBench's published results is a different checkpoint and must not be relabeled as Laya multilingual. -Install plotting tools in a separate environment to keep the training runtime -unchanged, then render the completed run: +Install the locked plotting group, then render the completed run. This group +does not require model dependencies: ```bash -uv venv --python 3.12 .cache/plot-venv -uv pip install --python .cache/plot-venv/bin/python matplotlib==3.11.2 numpy==2.5.3 -.cache/plot-venv/bin/python scripts/plot_model_card.py --run runs/v1 +pdm install --check --no-default --no-self -G plot +pdm run python scripts/plot_model_card.py --run runs/v1 ``` `runs/v1/figures/README.md` indexes the PNG, SVG and PDF figures. The directory diff --git a/docs/requirements.txt b/docs/requirements.txt deleted file mode 100644 index 292f0da..0000000 --- a/docs/requirements.txt +++ /dev/null @@ -1,3 +0,0 @@ -sphinx==9.1.0 -furo==2025.12.19 -myst-parser==5.1.0 diff --git a/docs/run-experiment.md b/docs/run-experiment.md index b69c993..da8c61e 100644 --- a/docs/run-experiment.md +++ b/docs/run-experiment.md @@ -2,14 +2,12 @@ Use Python 3.12 and a working PyTorch ROCm installation on the RX 7900 XTX. The recorded training environment is preserved in -`data/manifests/environment-freeze.txt`. Install the ROCm PyTorch wheels before -installing the package so dependency resolution does not select CUDA wheels. +`data/manifests/environment-freeze.txt`. Follow the [PDM setup](inference.md) +first; the package sources and lock file select the ROCm wheels. ```bash -uv venv --python 3.12 -uv pip install --python .venv/bin/python torch==2.9.1 torchvision==0.24.1 --index-url https://download.pytorch.org/whl/rocm6.4 -uv pip install --python .venv/bin/python -e '.[train,agent]' -.venv/bin/python scripts/run_experiment.py +pdm install --check --prod -G train -G agent +pdm run python scripts/run_experiment.py ``` The Qwen3.5 adapter limits PyTorch's caching allocator to 80% of visible VRAM, @@ -52,7 +50,7 @@ Base initialization and checkpoint initialization use the same 26-group mixture and training workflow. To initialize from an exported checkpoint: ```bash -.venv/bin/python scripts/run_experiment.py --initialize-from runs/v1/checkpoint --output runs/domain +pdm run python scripts/run_experiment.py --initialize-from runs/v1/checkpoint --output runs/domain ``` The checkpoint supplies the starting parameters and a fresh optimizer/schedule. diff --git a/docs/website.md b/docs/website.md index 35a2865..094cdbd 100644 --- a/docs/website.md +++ b/docs/website.md @@ -5,23 +5,28 @@ search index, Furo supplies navigation and responsive layouts, and MyST reads the existing Markdown. The site uses the README, model card, guides, and saved figures directly; do not maintain separate copies of their content. -From the repository root, with Python 3.12 or newer: +From the repository root, with [PDM](https://pdm-project.org/en/latest/#installation) +2.29.2 or a newer 2.x release and Python 3.12: ```bash -python -m venv .cache/site-venv -.cache/site-venv/bin/python -m pip install -r docs/requirements.txt -.cache/site-venv/bin/python -m sphinx -b html -W --keep-going -d build/doctrees -c docs . build/site -.cache/site-venv/bin/python -m http.server 8000 --directory build/site +pdm use 3.12 +make docs-install +make docs-preview ``` Open `http://localhost:8000`. The generated files are in `build/site`. -The build installs only documentation dependencies. It does not import Dohnuts, +`make docs-install` selects only the `docs` group from `pdm.lock`, without +installing the project or its model dependencies. The build does not import Dohnuts, execute the examples, load models, train, or download datasets. Keep navigation in the existing MyST `toctree` directives. Use `docs/conf.py` for theme settings and `docs/_static/brand.css` for small styling changes. Keep the existing logo and published figures as the visual sources. +Use `make docs` for a build without the preview server. Dependency versions and +commands live in `pyproject.toml`; see [development](development.md) for checks +and lock updates. + ## GitHub Pages The website workflow builds pull requests without publishing. Pushes to `main` diff --git a/pdm.lock b/pdm.lock new file mode 100644 index 0000000..55c6994 --- /dev/null +++ b/pdm.lock @@ -0,0 +1,2534 @@ +# This file is @generated by PDM. +# It is not intended for manual editing. + +[metadata] +groups = ["default", "agent", "docs", "plot", "quality", "train"] +strategy = ["inherit_metadata"] +lock_version = "4.5.1" +content_hash = "sha256:8e157c028c923b2178ba79f73968404cd32a8d2ebc4cf52e4b4eff166d8c709a" + +[[metadata.targets]] +requires_python = "==3.12.*" + +[[package]] +name = "accelerate" +version = "1.15.0" +requires_python = ">=3.10.0" +summary = "Accelerate" +groups = ["default"] +marker = "python_version == \"3.12\"" +dependencies = [ + "huggingface-hub>=0.21.0", + "numpy>=1.17", + "packaging>=20.0", + "psutil", + "pyyaml", + "safetensors>=0.4.3", + "torch>=2.0.0", +] +files = [ + {file = "accelerate-1.15.0-py3-none-any.whl", hash = "sha256:97eacca0b73e45cb867dbf8c5d5d4dc32219544300e0c8992c7334dc2ef33cec"}, + {file = "accelerate-1.15.0.tar.gz", hash = "sha256:5654f8c5eaa0d4fa68b33e287a97765da6849bf6d51dcac874e73fbbddfb6134"}, +] + +[[package]] +name = "accessible-pygments" +version = "0.0.5" +requires_python = ">=3.9" +summary = "A collection of accessible pygments styles" +groups = ["docs"] +marker = "python_version == \"3.12\"" +dependencies = [ + "pygments>=1.5", +] +files = [ + {file = "accessible_pygments-0.0.5-py3-none-any.whl", hash = "sha256:88ae3211e68a1d0b011504b2ffc1691feafce124b845bd072ab6f9f66f34d4b7"}, + {file = "accessible_pygments-0.0.5.tar.gz", hash = "sha256:40918d3e6a2b619ad424cb91e556bd3bd8865443d9f22f1dcdf79e33c8046872"}, +] + +[[package]] +name = "aiohappyeyeballs" +version = "2.7.1" +requires_python = ">=3.10" +summary = "Happy Eyeballs for asyncio" +groups = ["agent", "train"] +marker = "python_version == \"3.12\"" +files = [ + {file = "aiohappyeyeballs-2.7.1-py3-none-any.whl", hash = "sha256:9243213661e29250eb41368e5daa826fc017156c3b8a11440826b2e3ed376472"}, + {file = "aiohappyeyeballs-2.7.1.tar.gz", hash = "sha256:065665c041c42a5938ed220bdcd7230f22527fbec085e1853d2402c8a3615d9d"}, +] + +[[package]] +name = "aiohttp" +version = "3.14.3" +requires_python = ">=3.10" +summary = "Async http client/server framework (asyncio)" +groups = ["agent", "train"] +marker = "python_version == \"3.12\"" +dependencies = [ + "aiohappyeyeballs>=2.5.0", + "aiosignal>=1.4.0", + "async-timeout<6.0,>=4.0; python_version < \"3.11\"", + "attrs>=17.3.0", + "frozenlist>=1.1.1", + "multidict<7.0,>=4.5", + "propcache>=0.2.0", + "typing-extensions>=4.4; python_version < \"3.13\"", + "yarl<2.0,>=1.17.0", +] +files = [ + {file = "aiohttp-3.14.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:39aded8c7f3b935b54aab1d8d73c70ec0ee2d3ec3b943e0e86611bc150ba47f5"}, + {file = "aiohttp-3.14.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:5bcb6ff3fdab1258a192679ff1a05d44f59626430aa05cd1a9d2447423599228"}, + {file = "aiohttp-3.14.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:617105e2c3018ee38d0c8ce5ee3c84f621a6d8b9f723202aacaff28449ca91ee"}, + {file = "aiohttp-3.14.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f631fe87a6f30df5fbe6d79640b25e4cffb38c31c7fb6f10871517b84b0f8c1a"}, + {file = "aiohttp-3.14.3-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a94dbaae5ae27bd849c93570669bff91e0510f33a80805738e3de72a7be0447b"}, + {file = "aiohttp-3.14.3-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8f2f1c4c032c7cedd7d8da6f54c97b70266c6570c3108d3fdffee7188bb70529"}, + {file = "aiohttp-3.14.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:ea05e1f97ceea523942d9b2a7d7c0359d781d683d6b043f5943a602b14da4787"}, + {file = "aiohttp-3.14.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:543906c127fb1d929b95076db19b83fa2d46751006ff1e23b093aa5ac4d8db42"}, + {file = "aiohttp-3.14.3-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0a5ff2dfbb9ce645fa5b8ef3e02c6c0b9cc3f6030ff863d0c51fffc50cb5541b"}, + {file = "aiohttp-3.14.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:041badb8f84396357c4d3ad26de6afd7a32b112f43d3c63045c0c8278cfd2043"}, + {file = "aiohttp-3.14.3-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:530125ee1163c4219af35dc3aa1206e541e7b31b6efc1a3f93b70a136f65d427"}, + {file = "aiohttp-3.14.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c8653fd547c93a61aadc612007790f5555cdd18946fa48cf45e26d8ea4ea473d"}, + {file = "aiohttp-3.14.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:89176250f686cb9853c0fb7ead90e639e915b84a6f43eedc2a4e7ec21f1037f0"}, + {file = "aiohttp-3.14.3-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:3a26434dafe408229ff3403458ca58de24fb51936504decac49ce6755f77e59d"}, + {file = "aiohttp-3.14.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d1558173930a5a8d3069cee5c92fc91c87c4dbcb099debbb3622053717145a19"}, + {file = "aiohttp-3.14.3-cp312-cp312-win32.whl", hash = "sha256:16100ad3ab8d649fdfbee87602d9d2dcdca9df0b9eda8a1b5fdc0d41f96da559"}, + {file = "aiohttp-3.14.3-cp312-cp312-win_amd64.whl", hash = "sha256:33a2d7c28d33797a2e99923dffa63f83d908a19b6bf26cfe80fa790aa5e1a75a"}, + {file = "aiohttp-3.14.3-cp312-cp312-win_arm64.whl", hash = "sha256:362a3fd481769cac1a824514bcd86fda51c65e8fe6e051099e008fddde6db17c"}, + {file = "aiohttp-3.14.3.tar.gz", hash = "sha256:9491196535a88924a60afd5b5f434b5b203b6cc616250878dbdb223a8f7844bc"}, +] + +[[package]] +name = "aiosignal" +version = "1.4.0" +requires_python = ">=3.9" +summary = "aiosignal: a list of registered asynchronous callbacks" +groups = ["agent", "train"] +marker = "python_version == \"3.12\"" +dependencies = [ + "frozenlist>=1.1.0", + "typing-extensions>=4.2; python_version < \"3.13\"", +] +files = [ + {file = "aiosignal-1.4.0-py3-none-any.whl", hash = "sha256:053243f8b92b990551949e63930a839ff0cf0b0ebbe0597b0f3fb19e1a0fe82e"}, + {file = "aiosignal-1.4.0.tar.gz", hash = "sha256:f47eecd9468083c2029cc99945502cb7708b082c232f9aca65da147157b251c7"}, +] + +[[package]] +name = "alabaster" +version = "1.0.0" +requires_python = ">=3.10" +summary = "A light, configurable Sphinx theme" +groups = ["docs"] +marker = "python_version == \"3.12\"" +files = [ + {file = "alabaster-1.0.0-py3-none-any.whl", hash = "sha256:fc6786402dc3fcb2de3cabd5fe455a2db534b371124f1f21de8731783dec828b"}, + {file = "alabaster-1.0.0.tar.gz", hash = "sha256:c00dca57bca26fa62a6d7d0a9fcce65f3e026e9bfe33e9c538fd3fbb2144fd9e"}, +] + +[[package]] +name = "annotated-doc" +version = "0.0.5" +requires_python = ">=3.9" +summary = "Document parameters, class attributes, return types, and variables inline, with Annotated." +groups = ["default", "agent"] +marker = "python_version == \"3.12\"" +files = [ + {file = "annotated_doc-0.0.5-py3-none-any.whl", hash = "sha256:117bac03a25ede5df5440e855b32d556049ca169ead221505badf432fed4b101"}, + {file = "annotated_doc-0.0.5.tar.gz", hash = "sha256:c7e58ce09192557605d8bbd92836d7e1d520ac9580096042c0bfd197efacf1bb"}, +] + +[[package]] +name = "annotated-types" +version = "0.8.0" +requires_python = ">=3.10" +summary = "Reusable constraint types to use with typing.Annotated" +groups = ["agent"] +marker = "python_version == \"3.12\"" +files = [ + {file = "annotated_types-0.8.0-py3-none-any.whl", hash = "sha256:f072f4d804ea359e4eaf198b1af7a8b0943881a87f31bb764f8bf219bb9419e0"}, + {file = "annotated_types-0.8.0.tar.gz", hash = "sha256:13b2beaad985e05e2d6407ee4c4f35590b11f8d693a258a561055cac8f64cab7"}, +] + +[[package]] +name = "anthropic" +version = "0.125.0" +requires_python = ">=3.9" +summary = "The official Python library for the anthropic API" +groups = ["agent"] +marker = "python_version == \"3.12\"" +dependencies = [ + "anyio<5,>=3.5.0", + "distro<2,>=1.7.0", + "docstring-parser<1,>=0.15", + "httpx<1,>=0.25.0", + "jiter<1,>=0.4.0", + "pydantic<3,>=1.9.0", + "sniffio<2,>=1", + "typing-extensions<5,>=4.14", +] +files = [ + {file = "anthropic-0.125.0-py3-none-any.whl", hash = "sha256:3486013602eca76d8b12540764e53654f02cf4951110bca86cf06e67428a9f21"}, + {file = "anthropic-0.125.0.tar.gz", hash = "sha256:e0cdd336580cb7411c1cdab69f80973e9bf4bff7f8e08141811d46307d45c682"}, +] + +[[package]] +name = "any-llm-sdk" +version = "1.28.0" +requires_python = ">=3.11" +summary = "" +groups = ["agent"] +marker = "python_version == \"3.12\"" +dependencies = [ + "anthropic<1,>=0.124.0", + "httpx", + "openai<4,>=2.18.0", + "openresponses-types<3,>=2.4.0", + "pydantic<3,>2", + "rich", + "typing-extensions>=4.5.0", +] +files = [ + {file = "any_llm_sdk-1.28.0-py3-none-any.whl", hash = "sha256:4fb5e2c82b9e51be6293a97cf6efd6f3fce79684b97537f4f7926d4c3aa5abde"}, + {file = "any_llm_sdk-1.28.0.tar.gz", hash = "sha256:cf9e27f18647ee92f54def3faed035547f6fb9acaa626794c66edcb48f5c118f"}, +] + +[[package]] +name = "any-llm-sdk" +version = "1.28.0" +extras = ["anthropic"] +requires_python = ">=3.11" +summary = "" +groups = ["agent"] +marker = "python_version == \"3.12\"" +dependencies = [ + "any-llm-sdk==1.28.0", +] +files = [ + {file = "any_llm_sdk-1.28.0-py3-none-any.whl", hash = "sha256:4fb5e2c82b9e51be6293a97cf6efd6f3fce79684b97537f4f7926d4c3aa5abde"}, + {file = "any_llm_sdk-1.28.0.tar.gz", hash = "sha256:cf9e27f18647ee92f54def3faed035547f6fb9acaa626794c66edcb48f5c118f"}, +] + +[[package]] +name = "anyio" +version = "4.15.1" +requires_python = ">=3.10" +summary = "High-level concurrency and networking framework on top of asyncio or Trio" +groups = ["default", "agent", "train"] +marker = "python_version == \"3.12\"" +dependencies = [ + "exceptiongroup>=1.0.2; python_version < \"3.11\"", + "idna>=2.8", + "typing-extensions>=4.16.0; python_version < \"3.15\"", +] +files = [ + {file = "anyio-4.15.1-py3-none-any.whl", hash = "sha256:6152fdbbf9a77fdec97731721bebf7c4c44f7c29b424b0065826173efc7ed101"}, + {file = "anyio-4.15.1.tar.gz", hash = "sha256:9f28306018cbd6d329e64a36d58256edff76dd996fe423bc957326e578b82a94"}, +] + +[[package]] +name = "attrs" +version = "26.1.0" +requires_python = ">=3.9" +summary = "Classes Without Boilerplate" +groups = ["agent", "train"] +marker = "python_version == \"3.12\"" +files = [ + {file = "attrs-26.1.0-py3-none-any.whl", hash = "sha256:c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309"}, + {file = "attrs-26.1.0.tar.gz", hash = "sha256:d03ceb89cb322a8fd706d4fb91940737b6642aa36998fe130a9bc96c985eff32"}, +] + +[[package]] +name = "authlib" +version = "1.8.0" +requires_python = ">=3.10" +summary = "The ultimate Python library in building OAuth and OpenID Connect servers and clients." +groups = ["agent"] +marker = "python_version == \"3.12\"" +dependencies = [ + "cryptography>=45.0.1", + "joserfc>=1.6.1", +] +files = [ + {file = "authlib-1.8.0-py2.py3-none-any.whl", hash = "sha256:88aebbd9af6757e14e912d5dc007ae1dc1f3e27e3b2152ce7c552ee2c3b3c121"}, + {file = "authlib-1.8.0.tar.gz", hash = "sha256:f3ecd5f1da737262fb53bf1a4d95c4ea1ad9dd509316587a255c99ab1838a4f0"}, +] + +[[package]] +name = "babel" +version = "2.18.0" +requires_python = ">=3.8" +summary = "Internationalization utilities" +groups = ["docs"] +marker = "python_version == \"3.12\"" +dependencies = [ + "pytz>=2015.7; python_version < \"3.9\"", +] +files = [ + {file = "babel-2.18.0-py3-none-any.whl", hash = "sha256:e2b422b277c2b9a9630c1d7903c2a00d0830c409c59ac8cae9081c92f1aeba35"}, + {file = "babel-2.18.0.tar.gz", hash = "sha256:b80b99a14bd085fcacfa15c9165f651fbb3406e66cc603abf11c5750937c992d"}, +] + +[[package]] +name = "beautifulsoup4" +version = "4.15.0" +requires_python = ">=3.7.0" +summary = "Screen-scraping library" +groups = ["docs"] +marker = "python_version == \"3.12\"" +dependencies = [ + "soupsieve>=1.6.1", + "typing-extensions>=4.0.0", +] +files = [ + {file = "beautifulsoup4-4.15.0-py3-none-any.whl", hash = "sha256:d6f88de62e1d4e38ecb1077eb9724cd0eff29d2a08ca16a401e9b9e93f117cf9"}, + {file = "beautifulsoup4-4.15.0.tar.gz", hash = "sha256:288e3ca7d54b06f2ac191970bc275c1939cb46d450b255bf6718b04aa37ab4f7"}, +] + +[[package]] +name = "bub" +version = "0.4.5.dev9" +requires_python = "<4.0,>=3.12" +git = "https://github.com/bubbuild/bub.git" +ref = "9bf70488e22a44eeb875a9d55d9a7d352b82e381" +revision = "9bf70488e22a44eeb875a9d55d9a7d352b82e381" +summary = "A tiny agent runtime, composable with plugins." +groups = ["agent"] +marker = "python_version == \"3.12\"" +dependencies = [ + "aiohttp>=3.13.3", + "any-llm-sdk[anthropic]", + "authlib>=1.7.2", + "httpx[socks]>=0.28.1", + "inquirer-textual>=0.5.1", + "loguru>=0.7.2", + "pluggy>=1.6.0", + "prompt-toolkit>=3.0.0", + "pydantic-settings>=2.0.0", + "pydantic>=2.0.0", + "python-telegram-bot>=21.0", + "pyyaml>=6.0.0", + "rapidfuzz>=3.14.3", + "rich>=13.0.0", + "typer>=0.9.0", + "typing-extensions>=4.13.0", +] + +[[package]] +name = "certifi" +version = "2026.7.22" +requires_python = ">=3.7" +summary = "Python package for providing Mozilla's CA Bundle." +groups = ["default", "agent", "docs", "train"] +marker = "python_version == \"3.12\"" +files = [ + {file = "certifi-2026.7.22-py3-none-any.whl", hash = "sha256:62f22742b58a1a33014a2b6b706588a8d7e2a88ae7bd1a6ebe8c992928483775"}, + {file = "certifi-2026.7.22.tar.gz", hash = "sha256:741e2c3b351ddf169a738da9f2c048608ff7f2c5cc02f1ebc6b118bb090d5d55"}, +] + +[[package]] +name = "cffi" +version = "2.1.1" +requires_python = ">=3.10" +summary = "Foreign Function Interface for Python calling C code." +groups = ["agent"] +marker = "platform_python_implementation != \"PyPy\" and python_version == \"3.12\"" +dependencies = [ + "pycparser; implementation_name != \"PyPy\"", +] +files = [ + {file = "cffi-2.1.1-cp312-cp312-macosx_10_15_x86_64.whl", hash = "sha256:c8c69575568085ba0b1b10c0249d779a214aea6f6522e949a0fc9fb0fcb449d0"}, + {file = "cffi-2.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f81b3b8f3d4e343550fa4baa0e479bba9f2d29ce9c2e9b51d1ce1718d7442fcf"}, + {file = "cffi-2.1.1-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:811bd1e21d32de12efca32393a0ab3f5133b54fce9bd44b8bd77ab07da14bf6a"}, + {file = "cffi-2.1.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:68e62fe11f30d5ca8289242866f0a5291402d8529ca2178ab8afc5c9694ae890"}, + {file = "cffi-2.1.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:4a7c934f7360e8cd64fe9efadcbd10c7c6364f531e432b9a4bf5ccbc9e0e8b50"}, + {file = "cffi-2.1.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:3143d81e29e1e20a9ce10901ec369012947876596f75a222235965f2b7ae832e"}, + {file = "cffi-2.1.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c1453022f490d2459a11819d83ad1d586e9ff65a12ac3e705ffebd46d3685dcf"}, + {file = "cffi-2.1.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:208f941bb9d18e768138677f0a6d2ce01f590df56043dda1df1535ac57c88517"}, + {file = "cffi-2.1.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:210019b6c7cf07f081b4c54635c8cf744377001350e29cc0f81c4377b4797735"}, + {file = "cffi-2.1.1-cp312-cp312-win32.whl", hash = "sha256:046bfc24911b37851ee1b51aab8bffe713d89c68c6a057b09484ce9fd5f69b4e"}, + {file = "cffi-2.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:f53e442b08449d42821fa4a4fba000095af9f62742a500f978a9f557ec44339a"}, + {file = "cffi-2.1.1-cp312-cp312-win_arm64.whl", hash = "sha256:7bde5e4cc5c10140859842b9d383af292b22639a4dffb725314baf45968cef80"}, + {file = "cffi-2.1.1.tar.gz", hash = "sha256:dd31f52ea1086513bb9df30f8fcee9b8918323ae067a3d5b78bc826a000712be"}, +] + +[[package]] +name = "charset-normalizer" +version = "3.5.1" +requires_python = ">=3.7" +summary = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +groups = ["docs", "train"] +marker = "python_version == \"3.12\"" +files = [ + {file = "charset_normalizer-3.5.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:5b6d1386bf0096d26d3a863dc0a487a5b4eb9aa93cf5ba69683d29dde6b9d60f"}, + {file = "charset_normalizer-3.5.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4582c27e8c889d64811987b5967fbd3ae0c823fe1fd933b543d55ac20bb475fa"}, + {file = "charset_normalizer-3.5.1-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:1d1c7a53a6c2103925cdd6d7229f8c567379f211c869793df679f2e9f738c369"}, + {file = "charset_normalizer-3.5.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e6621fb2a4988d6e53eedc455e5903e2679f3967b8acb3d639f1b63c14a2e893"}, + {file = "charset_normalizer-3.5.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7c0c10730342b0c9b35dd1d619beb8214e520bd96a1f870f452680b238aab3e0"}, + {file = "charset_normalizer-3.5.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b9af956078716df40d985fb0dfeb2c2120c5ca92ba4ff4b388acfd01cdc14d08"}, + {file = "charset_normalizer-3.5.1-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f9f8405c2c758532c74fed975dbee57be1f31a6e865c031870c79a6ed3212ada"}, + {file = "charset_normalizer-3.5.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:96fef3e886d6a9874b14f27fc193fbdc69d5d8035783d86aa4e1cea594e695f9"}, + {file = "charset_normalizer-3.5.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:5d8531a6569d025f68e2321e7638fb7978f23db58e5f69f56913837aae03816e"}, + {file = "charset_normalizer-3.5.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:aae2ee51122d3ae968a3837d97dc24a0aeebb0dea23694422cd172bd30017cd6"}, + {file = "charset_normalizer-3.5.1-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:7235dc28fc6dd9d832ac7c7bce95367dedb85929f17368a0c2bee1e080b9acbf"}, + {file = "charset_normalizer-3.5.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:4abdc5f9ad448c1ecbfae2974b820535d6bc6e7eef63babbab3d81cf46968c71"}, + {file = "charset_normalizer-3.5.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ba501e667c17d8411f98e67a022d9604ef179aff0e459b7e292c796837c13573"}, + {file = "charset_normalizer-3.5.1-cp312-cp312-win32.whl", hash = "sha256:cfa1c0cc3a8f9f53f1243a5a99ac36fd003880199383b37672e86ddda9cb07e2"}, + {file = "charset_normalizer-3.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:3617ac3cfd8b9888f145ad89dd6e692285834b0201c6074a5eeaad3fd4d668c2"}, + {file = "charset_normalizer-3.5.1-cp312-cp312-win_arm64.whl", hash = "sha256:88e85ab89cb822c1e635f51d6d32e488f94e002e70e2f492bdb8b945543f345a"}, + {file = "charset_normalizer-3.5.1-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:41876ee62a3dddf48ff1121ad8f0798032aa03f2fd35f21f34a4cab14f18d8d2"}, + {file = "charset_normalizer-3.5.1-cp37-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:a6dac12ff6b846103483683f60c5f8fee205121adc58ffd87e90a90a3af69e99"}, + {file = "charset_normalizer-3.5.1-cp37-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cee5dd7c6fb5dd52a0fe2a740f9bc6e3593f5f8b1788bde49de02086f30182b2"}, + {file = "charset_normalizer-3.5.1-cp37-abi3-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:343fb4f2821043bd87095f7b08a1a181febc8e36ac64212143bbfd0a0e1bc235"}, + {file = "charset_normalizer-3.5.1-cp37-abi3-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ae4a097991662cd4fff0ddc74e0fe7874f82e00042fa0ea00855645ed0c79598"}, + {file = "charset_normalizer-3.5.1-cp37-abi3-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4b599739b93b2cbeded49645ae3c8d1405c29ddfbceac1545c87a3f9580a9e96"}, + {file = "charset_normalizer-3.5.1-cp37-abi3-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b39b69b347e5e47a3b5b8cfc005c68c1ba347474e3960236c4944a8ecd174962"}, + {file = "charset_normalizer-3.5.1-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:a2028475ba855475b8b4d3cfeb4994269c967aea8b9892dfba907f4263a863a3"}, + {file = "charset_normalizer-3.5.1-cp37-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:36047af20e17097c3bb9476c2b7655f2f7aa51322c0ba58c07695bedf755a950"}, + {file = "charset_normalizer-3.5.1-cp37-abi3-musllinux_1_2_ppc64le.whl", hash = "sha256:4c4fb141a727957c93edfe5c32a26ceb6b5f6461d67146e2d39f51e16170bea8"}, + {file = "charset_normalizer-3.5.1-cp37-abi3-musllinux_1_2_riscv64.whl", hash = "sha256:2f293479cce755c75f1697e87c409b7ae4c555c7dfecb6e988ad13abba943031"}, + {file = "charset_normalizer-3.5.1-cp37-abi3-musllinux_1_2_s390x.whl", hash = "sha256:3588e376b3ea2eea84976f67273d679f229e24c66dce7b82ae45aef04ff6e072"}, + {file = "charset_normalizer-3.5.1-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:e199fb99720074809a7720f1c0b4d919eea8b87e88713e0f8f602f7bef543d9d"}, + {file = "charset_normalizer-3.5.1-cp37-abi3-win32.whl", hash = "sha256:dd732602a7009217f658d5863d12d79d373a4de0eebc111094bcdd3bb8e0a6cc"}, + {file = "charset_normalizer-3.5.1-cp37-abi3-win_amd64.whl", hash = "sha256:70055ff39b97c99e7ae40ea3e393fb62aa2e44dbd9b29f8d14f42fb0025c3959"}, + {file = "charset_normalizer-3.5.1-cp37-abi3-win_arm64.whl", hash = "sha256:87e4f41d375c0b9be2fb5251aee4b8a689169e134535aed81bf085c3b647451e"}, + {file = "charset_normalizer-3.5.1-py3-none-any.whl", hash = "sha256:6df0ec430f9a831772c23ca5a224cba36517a58a84bb32c32bb59a9fa67c47f6"}, + {file = "charset_normalizer-3.5.1.tar.gz", hash = "sha256:6117b84ea48435e5356dc737f5121485c30920ba43375fa7b434fd753df0eac3"}, +] + +[[package]] +name = "click" +version = "8.5.0" +requires_python = ">=3.10" +summary = "Composable command line interface toolkit" +groups = ["default", "train"] +marker = "python_version == \"3.12\"" +files = [ + {file = "click-8.5.0-py3-none-any.whl", hash = "sha256:255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360"}, + {file = "click-8.5.0.tar.gz", hash = "sha256:ba0d2089de75ea0310e2dde03160e6ca10009947fb95a182f9b54021bb272e34"}, +] + +[[package]] +name = "cloudpickle" +version = "3.1.2" +requires_python = ">=3.8" +summary = "Pickler class to extend the standard pickle.Pickler functionality" +groups = ["train"] +marker = "python_version == \"3.12\"" +files = [ + {file = "cloudpickle-3.1.2-py3-none-any.whl", hash = "sha256:9acb47f6afd73f60dc1df93bb801b472f05ff42fa6c84167d25cb206be1fbf4a"}, + {file = "cloudpickle-3.1.2.tar.gz", hash = "sha256:7fda9eb655c9c230dab534f1983763de5835249750e85fbcef43aaa30a9a2414"}, +] + +[[package]] +name = "colorama" +version = "0.4.6" +requires_python = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +summary = "Cross-platform colored terminal text." +groups = ["default", "agent", "docs", "quality", "train"] +marker = "sys_platform == \"win32\" and python_version == \"3.12\" or platform_system == \"Windows\" and python_version == \"3.12\"" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "contourpy" +version = "1.4.0" +requires_python = ">=3.12" +summary = "Python library for calculating contours of 2D quadrilateral grids" +groups = ["plot"] +marker = "python_version == \"3.12\"" +dependencies = [ + "numpy>=2.0", +] +files = [ + {file = "contourpy-1.4.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:186ba929df36d61b6127da2e89cd1357e4cb79aca647381ab1a6feb0b152877b"}, + {file = "contourpy-1.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c76f3a5318164db7d9401132fc1b5364b784c613c93fa506e3b5e6d1bf353ec8"}, + {file = "contourpy-1.4.0-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:43c3ccbb32c6294b183dcc8e8c46dacf5ecef809497e3d48a5be298eef185ad0"}, + {file = "contourpy-1.4.0-cp312-cp312-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:86d05cec773c9507a3950122e0e40ce77c23c75ceeb2fc189514e71893cbb34b"}, + {file = "contourpy-1.4.0-cp312-cp312-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2deb580178ca19437a84bd77e4bc2cd91a8ccad212413a83c273900868b5978c"}, + {file = "contourpy-1.4.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:875f42444c9cf48d56f724f2637e60d0f73b3b12c9041e1484580a233edf9591"}, + {file = "contourpy-1.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f863c6100bf926cf47d13f3cd75f9bb8ebd98aaab230eeb4468b91f98f39a6b3"}, + {file = "contourpy-1.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3863ef2e2b13fe93f8c0ebb08ee400cb07153b8b0e91c5acb26e4537f283634f"}, + {file = "contourpy-1.4.0-cp312-cp312-win32.whl", hash = "sha256:5450f091ac1be0be3ad3a2a3b3f23b5e443e78c670ced4fd347d626f92a28fd2"}, + {file = "contourpy-1.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:6e697d94e69f499ff6bebb899cae97a58d5d14f0e1fe9568b43a0248d2f9af8c"}, + {file = "contourpy-1.4.0-cp312-cp312-win_arm64.whl", hash = "sha256:0c7a4c2716a4e98342221954416a836cca77c996c14ddbf22b5f01d5d93ca09c"}, + {file = "contourpy-1.4.0.tar.gz", hash = "sha256:20156f5a1ac4f8ce02656e39a61e82164a3d359796dc8026f75b062783d500e1"}, +] + +[[package]] +name = "cryptography" +version = "50.0.1" +requires_python = "!=3.9.0,!=3.9.1,>=3.9" +summary = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." +groups = ["agent"] +marker = "python_version == \"3.12\"" +dependencies = [ + "cffi>=2.0.0; platform_python_implementation != \"PyPy\"", + "typing-extensions>=4.13.2; python_full_version < \"3.11\"", +] +files = [ + {file = "cryptography-50.0.1-cp311-abi3-macosx_11_0_arm64.whl", hash = "sha256:b8f852c65863251b9e3a1b8c150ce21e59b522dbb6a7d4bc80e680d38388e986"}, + {file = "cryptography-50.0.1-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:53e279950892dc102c6b4e52af03ae5ea92fac572a1ddab78ca73a997f62b69f"}, + {file = "cryptography-50.0.1-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ff838d62ec1bfce4f9ba7fa16f4a7b554cd8d0c299e6be37502161a660c84eef"}, + {file = "cryptography-50.0.1-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:e74591e283fe6eb956416c929eb58262a719fe0311fd9054c62c3350ed8760d8"}, + {file = "cryptography-50.0.1-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:5fe002589592ed749ce77fe0695fcbd3500dd61d7d6db5858a7544c612fa8e45"}, + {file = "cryptography-50.0.1-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:51593d180cf6d179bde5c5d065bed81386b1f381656ae7d042b7ffc87a9895ad"}, + {file = "cryptography-50.0.1-cp311-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:359e62deae718bce96170e223fdcb6357e4fbd3bb7a3a75f4430763532560e49"}, + {file = "cryptography-50.0.1-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:e2ca8fd1b6b4b82a1c4cb02841d0837e3c12336c2e24b520ab8ab3b969733d8f"}, + {file = "cryptography-50.0.1-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:76de83fbd91ac49c0feaaa983d0748fd7a53176afac5fb3bf7478d244f0eb527"}, + {file = "cryptography-50.0.1-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:51afcfceb15597cf2635068e4ac9a56b2abde622edde17f37d85fd7b5306497a"}, + {file = "cryptography-50.0.1-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:be224a65493ec5b74a158ff22a5522ce4a5ca1e543c647a3a4730d4a09e5f959"}, + {file = "cryptography-50.0.1-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:9ebcdd5519be9b652a46f507817a74591774fc3d6923ac364e4dfa64e36b291b"}, + {file = "cryptography-50.0.1-cp311-abi3-win_amd64.whl", hash = "sha256:aed8db4f6d71c51efb89530e12d9464e7bf2923d46c3205dc794a2a93f8c0648"}, + {file = "cryptography-50.0.1-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:ca83d00d9e69cd5eb63f2e69c3a5a59e0cecae5ae14c6ae0b35830fe3b37bad0"}, + {file = "cryptography-50.0.1-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:05ba322c4da95b262a212c345af888ef2c37c88c0509756ea00a0e6d68850f23"}, + {file = "cryptography-50.0.1-cp39-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e22dfed744bd4002e909464cb23d2f0b05c6f3113a79ef2e9864a53db737c733"}, + {file = "cryptography-50.0.1-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:4c4188f7c0cf655be5c06342b817ed0f9595b69ffa2b12026e5353eed29dea88"}, + {file = "cryptography-50.0.1-cp39-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:2ebbfb0f1fed745e91796e3e1080a1440423fdae8ece1b995a1d80883a409054"}, + {file = "cryptography-50.0.1-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:407fe2b6db00939c05c0e945e9914238f2f0a430974839429dafc82b1ee6bee5"}, + {file = "cryptography-50.0.1-cp39-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:2b34d76a652ea2b6faf777c35df230c5637842cd904e04f16230c3f9f03e4361"}, + {file = "cryptography-50.0.1-cp39-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:01f41478cf33fc605a6a089cd56d28b45c6c0b45a1928b61797f2621a04bac71"}, + {file = "cryptography-50.0.1-cp39-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:fc3ed7ebd2a8c96f5b166de0ab9b624996bef3b07bbeb19364dfb78222c22c80"}, + {file = "cryptography-50.0.1-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:9dde0a357190eb3b1da1bb9ab750e9c85cba82ca5977aa0836cbb94e92611239"}, + {file = "cryptography-50.0.1-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:fd3718b960d0b5dd213cdf03f3bcb7000e69dda0de8b956061947ff6bcff5558"}, + {file = "cryptography-50.0.1-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:2a93d05e34d5f67fba6f891fe85d929999baa7195e853923ea6d7576c9e68c5e"}, + {file = "cryptography-50.0.1-cp39-abi3-win_amd64.whl", hash = "sha256:55d16b1ef3ee0958d893a977b19777887e546c9954ea81b200c3301a864013f2"}, + {file = "cryptography-50.0.1.tar.gz", hash = "sha256:5dd9bda1c12b4162f6ff568eeb5e0ff956c28d14406e875cfe8a63a2d414ff20"}, +] + +[[package]] +name = "cycler" +version = "0.12.1" +requires_python = ">=3.8" +summary = "Composable style cycles" +groups = ["plot"] +marker = "python_version == \"3.12\"" +files = [ + {file = "cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30"}, + {file = "cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c"}, +] + +[[package]] +name = "datasets" +version = "5.0.1" +requires_python = ">=3.10.0" +summary = "HuggingFace community-driven open-source library of datasets" +groups = ["train"] +marker = "python_version == \"3.12\"" +dependencies = [ + "dill<0.4.2,>=0.3.0", + "filelock", + "fsspec[http]<=2026.6.0,>=2023.1.0", + "httpx<1.0.0", + "huggingface-hub<2.0,>=0.25.0", + "multiprocess<0.70.20", + "numpy>=1.17", + "packaging", + "pandas", + "pyarrow>=21.0.0", + "pyyaml>=5.1", + "requests>=2.32.2", + "tqdm>=4.66.3", + "xxhash", +] +files = [ + {file = "datasets-5.0.1-py3-none-any.whl", hash = "sha256:9fbf73688f8c18f7529b4fe592abd04015f81d1e58001e4bac73ffb2b39d7cc4"}, + {file = "datasets-5.0.1.tar.gz", hash = "sha256:ce22bb851efd7494f08aad33b940803784434f6e77763d00679a0dc45fcf686a"}, +] + +[[package]] +name = "dill" +version = "0.4.1" +requires_python = ">=3.9" +summary = "serialize all of Python" +groups = ["train"] +marker = "python_version == \"3.12\"" +files = [ + {file = "dill-0.4.1-py3-none-any.whl", hash = "sha256:1e1ce33e978ae97fcfcff5638477032b801c46c7c65cf717f95fbc2248f79a9d"}, + {file = "dill-0.4.1.tar.gz", hash = "sha256:423092df4182177d4d8ba8290c8a5b640c66ab35ec7da59ccfa00f6fa3eea5fa"}, +] + +[[package]] +name = "distro" +version = "1.9.0" +requires_python = ">=3.6" +summary = "Distro - an OS platform information API" +groups = ["agent"] +marker = "python_version == \"3.12\"" +files = [ + {file = "distro-1.9.0-py3-none-any.whl", hash = "sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2"}, + {file = "distro-1.9.0.tar.gz", hash = "sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed"}, +] + +[[package]] +name = "docstring-parser" +version = "0.18.0" +requires_python = ">=3.8" +summary = "Parse Python docstrings in reST, Google and Numpydoc format" +groups = ["agent"] +marker = "python_version == \"3.12\"" +files = [ + {file = "docstring_parser-0.18.0-py3-none-any.whl", hash = "sha256:b3fcbed555c47d8479be0796ef7e19c2670d428d72e96da63f3a40122860374b"}, + {file = "docstring_parser-0.18.0.tar.gz", hash = "sha256:292510982205c12b1248696f44959db3cdd1740237a968ea1e2e7a900eeb2015"}, +] + +[[package]] +name = "docutils" +version = "0.22.4" +requires_python = ">=3.9" +summary = "Docutils -- Python Documentation Utilities" +groups = ["docs"] +marker = "python_version == \"3.12\"" +files = [ + {file = "docutils-0.22.4-py3-none-any.whl", hash = "sha256:d0013f540772d1420576855455d050a2180186c91c15779301ac2ccb3eeb68de"}, + {file = "docutils-0.22.4.tar.gz", hash = "sha256:4db53b1fde9abecbb74d91230d32ab626d94f6badfc575d6db9194a49df29968"}, +] + +[[package]] +name = "einops" +version = "0.8.2" +requires_python = ">=3.9" +summary = "A new flavour of deep learning operations" +groups = ["default"] +marker = "python_version == \"3.12\"" +files = [ + {file = "einops-0.8.2-py3-none-any.whl", hash = "sha256:54058201ac7087911181bfec4af6091bb59380360f069276601256a76af08193"}, + {file = "einops-0.8.2.tar.gz", hash = "sha256:609da665570e5e265e27283aab09e7f279ade90c4f01bcfca111f3d3e13f2827"}, +] + +[[package]] +name = "filelock" +version = "4.0.1" +requires_python = ">=3.10" +summary = "A platform independent file lock." +groups = ["default", "train"] +marker = "python_version == \"3.12\"" +files = [ + {file = "filelock-4.0.1-py3-none-any.whl", hash = "sha256:481a321a27bef441e23c53371c6abc8d7d16e26b97090074ba44f7538a3fd55a"}, + {file = "filelock-4.0.1.tar.gz", hash = "sha256:fdefc3f3e87716d855ae2b732c1cfd521dd99799ef2b4d00e8c0d4dcdc7cc94b"}, +] + +[[package]] +name = "fla-core" +version = "0.5.2" +requires_python = ">=3.10" +summary = "Core operations for flash-linear-attention" +groups = ["default"] +marker = "python_version == \"3.12\"" +dependencies = [ + "einops", +] +files = [ + {file = "fla_core-0.5.2-py3-none-any.whl", hash = "sha256:5e830c85bad3d0d34677f98ac7074d08687a3756f0f0499d95ceb96eb6920761"}, + {file = "fla_core-0.5.2.tar.gz", hash = "sha256:9360fc412f784c1c8f05c320ec2902d5d968764178c9b8a92efc919e17a39680"}, +] + +[[package]] +name = "fla-core" +version = "0.5.2" +extras = ["rocm"] +requires_python = ">=3.10" +summary = "Core operations for flash-linear-attention" +groups = ["default"] +marker = "python_version == \"3.12\"" +dependencies = [ + "fla-core==0.5.2", + "torch>=2.7.0", +] +files = [ + {file = "fla_core-0.5.2-py3-none-any.whl", hash = "sha256:5e830c85bad3d0d34677f98ac7074d08687a3756f0f0499d95ceb96eb6920761"}, + {file = "fla_core-0.5.2.tar.gz", hash = "sha256:9360fc412f784c1c8f05c320ec2902d5d968764178c9b8a92efc919e17a39680"}, +] + +[[package]] +name = "flash-linear-attention" +version = "0.5.2" +requires_python = ">=3.10" +summary = "Fast linear attention models and layers" +groups = ["default"] +marker = "python_version == \"3.12\"" +dependencies = [ + "fla-core==0.5.2", + "transformers>=4.45.0", +] +files = [ + {file = "flash_linear_attention-0.5.2-py3-none-any.whl", hash = "sha256:dcf405d81f5426393b59037097aa700d0f4a841465d5028d5aa543f4502f2400"}, + {file = "flash_linear_attention-0.5.2.tar.gz", hash = "sha256:c053d3a75c8f5b725063f719ae6bce0f4d9dac6da32735be8ae7d485a6c9820f"}, +] + +[[package]] +name = "flash-linear-attention" +version = "0.5.2" +extras = ["rocm"] +requires_python = ">=3.10" +summary = "Fast linear attention models and layers" +groups = ["default"] +marker = "python_version == \"3.12\"" +dependencies = [ + "fla-core[rocm]==0.5.2", + "flash-linear-attention==0.5.2", +] +files = [ + {file = "flash_linear_attention-0.5.2-py3-none-any.whl", hash = "sha256:dcf405d81f5426393b59037097aa700d0f4a841465d5028d5aa543f4502f2400"}, + {file = "flash_linear_attention-0.5.2.tar.gz", hash = "sha256:c053d3a75c8f5b725063f719ae6bce0f4d9dac6da32735be8ae7d485a6c9820f"}, +] + +[[package]] +name = "fonttools" +version = "4.65.0" +requires_python = ">=3.10" +summary = "Tools to manipulate font files" +groups = ["plot"] +marker = "python_version == \"3.12\"" +files = [ + {file = "fonttools-4.65.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e844a45c9e5ced6536f184cf1a65b5d65e8f7e711993b413e10500a8223622e5"}, + {file = "fonttools-4.65.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b30e953de049bf43fc0a63c7d0c44d205c923e4bbf24716aae1518c0e65f977c"}, + {file = "fonttools-4.65.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:09c34bdeed8915bfb53bee0c8ed2254dbd8ec69c0014b7f3702f347c049bf358"}, + {file = "fonttools-4.65.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:05595385ae99f4b9626cebb973bf171b8fe38a8f40708e6e42abba0ed7537778"}, + {file = "fonttools-4.65.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d95b34dd68fbfc0e4a1740c421597656117f979ed8dc85de66e08f9f9981806e"}, + {file = "fonttools-4.65.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:924d06e6130429168318db71c40174a765ad016fc4b56ca811287e3d7373b3a6"}, + {file = "fonttools-4.65.0-cp312-cp312-win32.whl", hash = "sha256:04f73dd01005752a6e75cf4a8dc6b70dc724d1d4bc34cc89522153f4a2f07680"}, + {file = "fonttools-4.65.0-cp312-cp312-win_amd64.whl", hash = "sha256:3b5d9ba89edf778b376e669b879ae33a198bf45cf5a23c3f6514f935cf9d0d9d"}, + {file = "fonttools-4.65.0-py3-none-any.whl", hash = "sha256:3060b8c1fc2329fa20265b7c138614143ea7c1624e26c5c180c76aeb74deae6f"}, + {file = "fonttools-4.65.0.tar.gz", hash = "sha256:762ba5431358d0dbd4a01982484a1d494fb267e91f974cdcf20b80eab8560f6f"}, +] + +[[package]] +name = "frozenlist" +version = "1.8.0" +requires_python = ">=3.9" +summary = "A list-like structure which implements collections.abc.MutableSequence" +groups = ["agent", "train"] +marker = "python_version == \"3.12\"" +files = [ + {file = "frozenlist-1.8.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:78f7b9e5d6f2fdb88cdde9440dc147259b62b9d3b019924def9f6478be254ac1"}, + {file = "frozenlist-1.8.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:229bf37d2e4acdaf808fd3f06e854a4a7a3661e871b10dc1f8f1896a3b05f18b"}, + {file = "frozenlist-1.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f833670942247a14eafbb675458b4e61c82e002a148f49e68257b79296e865c4"}, + {file = "frozenlist-1.8.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:494a5952b1c597ba44e0e78113a7266e656b9794eec897b19ead706bd7074383"}, + {file = "frozenlist-1.8.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96f423a119f4777a4a056b66ce11527366a8bb92f54e541ade21f2374433f6d4"}, + {file = "frozenlist-1.8.0-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3462dd9475af2025c31cc61be6652dfa25cbfb56cbbf52f4ccfe029f38decaf8"}, + {file = "frozenlist-1.8.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c4c800524c9cd9bac5166cd6f55285957fcfc907db323e193f2afcd4d9abd69b"}, + {file = "frozenlist-1.8.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d6a5df73acd3399d893dafc71663ad22534b5aa4f94e8a2fabfe856c3c1b6a52"}, + {file = "frozenlist-1.8.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:405e8fe955c2280ce66428b3ca55e12b3c4e9c336fb2103a4937e891c69a4a29"}, + {file = "frozenlist-1.8.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:908bd3f6439f2fef9e85031b59fd4f1297af54415fb60e4254a95f75b3cab3f3"}, + {file = "frozenlist-1.8.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:294e487f9ec720bd8ffcebc99d575f7eff3568a08a253d1ee1a0378754b74143"}, + {file = "frozenlist-1.8.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:74c51543498289c0c43656701be6b077f4b265868fa7f8a8859c197006efb608"}, + {file = "frozenlist-1.8.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:776f352e8329135506a1d6bf16ac3f87bc25b28e765949282dcc627af36123aa"}, + {file = "frozenlist-1.8.0-cp312-cp312-win32.whl", hash = "sha256:433403ae80709741ce34038da08511d4a77062aa924baf411ef73d1146e74faf"}, + {file = "frozenlist-1.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:34187385b08f866104f0c0617404c8eb08165ab1272e884abc89c112e9c00746"}, + {file = "frozenlist-1.8.0-cp312-cp312-win_arm64.whl", hash = "sha256:fe3c58d2f5db5fbd18c2987cba06d51b0529f52bc3a6cdc33d3f4eab725104bd"}, + {file = "frozenlist-1.8.0-py3-none-any.whl", hash = "sha256:0c18a16eab41e82c295618a77502e17b195883241c563b00f0aa5106fc4eaa0d"}, + {file = "frozenlist-1.8.0.tar.gz", hash = "sha256:3ede829ed8d842f6cd48fc7081d7a41001a56f1f38603f9d49bf3020d59a31ad"}, +] + +[[package]] +name = "fsspec" +version = "2026.6.0" +requires_python = ">=3.10" +summary = "File-system specification" +groups = ["default", "train"] +marker = "python_version == \"3.12\"" +files = [ + {file = "fsspec-2026.6.0-py3-none-any.whl", hash = "sha256:02e0b71817df9b2169dc30a16832045764def1191b43dcff5bb85bdee212d2a1"}, + {file = "fsspec-2026.6.0.tar.gz", hash = "sha256:f5bac145310fe30e16e1471bd6840b2d990d609e872251d7e674241822abf01a"}, +] + +[[package]] +name = "fsspec" +version = "2026.6.0" +extras = ["http"] +requires_python = ">=3.10" +summary = "File-system specification" +groups = ["train"] +marker = "python_version == \"3.12\"" +dependencies = [ + "aiohttp!=4.0.0a0,!=4.0.0a1", + "fsspec==2026.6.0", +] +files = [ + {file = "fsspec-2026.6.0-py3-none-any.whl", hash = "sha256:02e0b71817df9b2169dc30a16832045764def1191b43dcff5bb85bdee212d2a1"}, + {file = "fsspec-2026.6.0.tar.gz", hash = "sha256:f5bac145310fe30e16e1471bd6840b2d990d609e872251d7e674241822abf01a"}, +] + +[[package]] +name = "furo" +version = "2025.12.19" +requires_python = ">=3.8" +summary = "A clean customisable Sphinx documentation theme." +groups = ["docs"] +marker = "python_version == \"3.12\"" +dependencies = [ + "accessible-pygments>=0.0.5", + "beautifulsoup4", + "pygments>=2.7", + "sphinx-basic-ng>=1.0.0.beta2", + "sphinx<10.0,>=7.0", +] +files = [ + {file = "furo-2025.12.19-py3-none-any.whl", hash = "sha256:bb0ead5309f9500130665a26bee87693c41ce4dbdff864dbfb6b0dae4673d24f"}, + {file = "furo-2025.12.19.tar.gz", hash = "sha256:188d1f942037d8b37cd3985b955839fea62baa1730087dc29d157677c857e2a7"}, +] + +[[package]] +name = "h11" +version = "0.16.0" +requires_python = ">=3.8" +summary = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" +groups = ["default", "agent", "train"] +marker = "python_version == \"3.12\"" +files = [ + {file = "h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86"}, + {file = "h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1"}, +] + +[[package]] +name = "hf-xet" +version = "1.6.0" +requires_python = ">=3.8" +summary = "Fast transfer of large files with the Hugging Face Hub." +groups = ["default", "train"] +marker = "(platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"arm64\" or platform_machine == \"aarch64\") and python_version == \"3.12\"" +files = [ + {file = "hf_xet-1.6.0-cp38-abi3-macosx_10_12_x86_64.whl", hash = "sha256:633dc0cd71d32da58ab8c03ad38e2fac452c15c2b0a2866ebf6ededfe0a5061d"}, + {file = "hf_xet-1.6.0-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:f0906082d9932ae0c0057fa194041c22b4e2cdb46b2592ef3b91f020d62a081a"}, + {file = "hf_xet-1.6.0-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d62671bb130879cef0ee4c9ebe47a14af6c66ec53e6d84dc15936e5ffdfac82f"}, + {file = "hf_xet-1.6.0-cp38-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:0e6e21fa3cdfcdcd76748564bf593870a5e013f47d97cf10aed63aa222cff5b7"}, + {file = "hf_xet-1.6.0-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:4fc74352a17015bd0ee90038bc9efe38db894cde45f268b6712b04fce8cd0acb"}, + {file = "hf_xet-1.6.0-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:8fb4f71cba6129110c3374a33f919001ff130488fc23553698e34cc1c2a1198c"}, + {file = "hf_xet-1.6.0-cp38-abi3-win_amd64.whl", hash = "sha256:fb4fadde1b2b70bf4c0c14a6dccbe7194b1c28947fefd5bbe3fed9d940676c3b"}, + {file = "hf_xet-1.6.0-cp38-abi3-win_arm64.whl", hash = "sha256:3dc3e35441ba395006af5aaacc40ef2e603c51ef46c3530b9156185f00935ea3"}, + {file = "hf_xet-1.6.0.tar.gz", hash = "sha256:2e58454a340b3556dfa4972d5451aff4fba8dd42a236600ba1a1d2b1514f0fef"}, +] + +[[package]] +name = "httpcore" +version = "1.0.9" +requires_python = ">=3.8" +summary = "A minimal low-level HTTP client." +groups = ["default", "agent", "train"] +marker = "python_version == \"3.12\"" +dependencies = [ + "certifi", + "h11>=0.16", +] +files = [ + {file = "httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55"}, + {file = "httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8"}, +] + +[[package]] +name = "httpcore2" +version = "2.13.0" +requires_python = ">=3.10" +summary = "A minimal low-level HTTP client." +groups = ["agent"] +marker = "sys_platform != \"emscripten\" and python_version == \"3.12\"" +dependencies = [ + "h11>=0.16", + "truststore>=0.10", +] +files = [ + {file = "httpcore2-2.13.0-py3-none-any.whl", hash = "sha256:35ae5be347aa40467b4a5dc032ac67ebb6d27189fc97e8cebcf99616f6a1bb9e"}, + {file = "httpcore2-2.13.0.tar.gz", hash = "sha256:2adc8be4fb285fbcd6d894298db3b52c177e74b6674eda3a76bd36be3292a3db"}, +] + +[[package]] +name = "httpx" +version = "0.28.1" +requires_python = ">=3.8" +summary = "The next generation HTTP client." +groups = ["default", "agent", "train"] +marker = "python_version == \"3.12\"" +dependencies = [ + "anyio", + "certifi", + "httpcore==1.*", + "idna", +] +files = [ + {file = "httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad"}, + {file = "httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc"}, +] + +[[package]] +name = "httpx2" +version = "2.13.0" +requires_python = ">=3.10" +summary = "The next generation HTTP client." +groups = ["agent"] +marker = "python_version == \"3.12\"" +dependencies = [ + "anyio>=4.10; sys_platform != \"emscripten\"", + "httpcore2==2.13.0; sys_platform != \"emscripten\"", + "httpx2-jsfetch; sys_platform == \"emscripten\" and python_version >= \"3.12\"", + "idna>=3.18", + "truststore>=0.10; sys_platform != \"emscripten\"", + "typing-extensions>=4.5.0; python_version < \"3.13\"", +] +files = [ + {file = "httpx2-2.13.0-py3-none-any.whl", hash = "sha256:fc12720cedf72faa26cca6b4ca394e05c894e7d7933fc45cafe767960804e49a"}, + {file = "httpx2-2.13.0.tar.gz", hash = "sha256:81bd07dc67a3701729ef1f777a3c00c915d4539604fdb5afd327f8682f6b7b44"}, +] + +[[package]] +name = "httpx2-jsfetch" +version = "1.0" +requires_python = ">=3.12" +summary = "httpx2 transports for Emscripten/Pyodide, backed by the JavaScript fetch API." +groups = ["agent"] +marker = "sys_platform == \"emscripten\" and python_version == \"3.12\"" +files = [ + {file = "httpx2_jsfetch-1.0-py3-none-any.whl", hash = "sha256:cb916b707601e69a07721aabc8f3f6659be3a6893bc1ff5c6f9e02241df2da32"}, + {file = "httpx2_jsfetch-1.0.tar.gz", hash = "sha256:70a0e3eabfef7cce5ad9c629f7d01ca05e418f586646f4ddf14782e4c1454c60"}, +] + +[[package]] +name = "httpx" +version = "0.28.1" +extras = ["socks"] +requires_python = ">=3.8" +summary = "The next generation HTTP client." +groups = ["agent"] +marker = "python_version == \"3.12\"" +dependencies = [ + "httpx==0.28.1", + "socksio==1.*", +] +files = [ + {file = "httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad"}, + {file = "httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc"}, +] + +[[package]] +name = "huggingface-hub" +version = "1.32.0" +requires_python = ">=3.10.0" +summary = "Client library to download and publish models, datasets and other repos on the huggingface.co hub" +groups = ["default", "train"] +marker = "python_version == \"3.12\"" +dependencies = [ + "click<9.0.0,>=8.4.2", + "filelock>=3.10.0", + "fsspec>=2023.5.0", + "hf-xet<2.0.0,>=1.5.2; platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"arm64\" or platform_machine == \"aarch64\"", + "httpx<1,>=0.23.0", + "packaging>=20.9", + "pyyaml>=5.1", + "tomli>=1.1.0; python_version < \"3.11\"", + "tqdm>=4.42.1", + "typing-extensions>=4.1.0", +] +files = [ + {file = "huggingface_hub-1.32.0-py3-none-any.whl", hash = "sha256:b0c7c80561969d9cdacdd55fce67ba9584cca0b9d4ea80957a3a5c1445fac5c8"}, + {file = "huggingface_hub-1.32.0.tar.gz", hash = "sha256:ed70a45498abe86039df7c2f4e5f7575de524be908d3840e8f828d5525eafd6a"}, +] + +[[package]] +name = "idna" +version = "3.20" +requires_python = ">=3.9" +summary = "Internationalized Domain Names in Applications (IDNA)" +groups = ["default", "agent", "docs", "train"] +marker = "python_version == \"3.12\"" +files = [ + {file = "idna-3.20-py3-none-any.whl", hash = "sha256:ab7ae7122974553370f0bdb919e1a960b2cd1bc1ef0276416d896db81c14582c"}, + {file = "idna-3.20.tar.gz", hash = "sha256:a7db850025b95ded1eae8a46181a1a6c56c92c96f0e2b005d9ff8dc0210cab44"}, +] + +[[package]] +name = "imagesize" +version = "2.0.1" +requires_python = ">=3.10" +summary = "Get image size from headers (BMP/PNG/JPEG/JPEG2000/GIF/TIFF/SVG/Netpbm/WebP/AVIF/HEIC/HEIF)" +groups = ["docs"] +marker = "python_version == \"3.12\"" +files = [ + {file = "imagesize-2.0.1-py3-none-any.whl", hash = "sha256:ea0c9a0384df69ed86a943a15cde37d0360b82491b3910dc2215e202e62b5b02"}, + {file = "imagesize-2.0.1.tar.gz", hash = "sha256:b2ba6a4dea487a7ebcd53248d3476aca449d30db12a2dde5e0c5ca9624fd77e5"}, +] + +[[package]] +name = "iniconfig" +version = "2.3.0" +requires_python = ">=3.10" +summary = "brain-dead simple config-ini parsing" +groups = ["quality"] +marker = "python_version == \"3.12\"" +files = [ + {file = "iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12"}, + {file = "iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730"}, +] + +[[package]] +name = "inquirer-textual" +version = "0.6.1" +requires_python = "<3.15,>=3.9" +summary = "Inquirer based on Textual" +groups = ["agent"] +marker = "python_version == \"3.12\"" +dependencies = [ + "textual>=8.2.6", +] +files = [ + {file = "inquirer_textual-0.6.1-py3-none-any.whl", hash = "sha256:8e93879e59fcf7b804941672e5efcb0f2aa3a117a36e4cafc2c91fdb6d0a6586"}, + {file = "inquirer_textual-0.6.1.tar.gz", hash = "sha256:d8b0c959e4e58fd730a2fc3da4c92612bef757db1c664399cc7534be8c5b757a"}, +] + +[[package]] +name = "jinja2" +version = "3.1.6" +requires_python = ">=3.7" +summary = "A very fast and expressive template engine." +groups = ["default", "docs"] +marker = "python_version == \"3.12\"" +dependencies = [ + "MarkupSafe>=2.0", +] +files = [ + {file = "jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67"}, + {file = "jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d"}, +] + +[[package]] +name = "jiter" +version = "0.17.0" +requires_python = ">=3.10" +summary = "Fast iterable JSON parser." +groups = ["agent"] +marker = "python_version == \"3.12\"" +files = [ + {file = "jiter-0.17.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:ebf918dfd6a74adc1b9ad71f63c4ab00902fcd3b7fd39f2e24d871db8d713b91"}, + {file = "jiter-0.17.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:61aed66ee042b3b49ef85fdf75714234d055d89d8496ac1c6e47f89e7a30d5e4"}, + {file = "jiter-0.17.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76eb4a5c20e86f9f848286f167024890f2862258a965d254774deb7fc1545ca1"}, + {file = "jiter-0.17.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bcc064f99183a9cbe7f26ed648c352031a74145cd61ed75d34632c73eb46a5a8"}, + {file = "jiter-0.17.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:73b64e69c4150748e020356d958af94bec33c70a0a93d665cfa8f6d580fe1a63"}, + {file = "jiter-0.17.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f0bc7f684b65bcda9c20434267577db71bf9905ceddd32b60d1d93278d8c8d3a"}, + {file = "jiter-0.17.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c21265b251d99bbb40080d178a8953e35601d3a1564e05c4de4c0d2ca616797"}, + {file = "jiter-0.17.0-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:f3d7f7b34114f7ddc6d72a8e882d49de636b35d9fd12b4d420d3c5729f6c9812"}, + {file = "jiter-0.17.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5078ab00664307fab2019b522a93aeb191122789f085daf5fd9e362154021d4a"}, + {file = "jiter-0.17.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:470e1b1e4c42f1ead2189166a299691871a2df5056c976e7fb96feafaf5f9d44"}, + {file = "jiter-0.17.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:6eb6aedeb7352b8f3b6af9cbd67983840165c00428e63f1b420a85885128ea31"}, + {file = "jiter-0.17.0-cp312-cp312-win32.whl", hash = "sha256:362bb47423886d45a9f705d2d9d4008c6eedd4e41eb1bab4e96fb6daa06b33fd"}, + {file = "jiter-0.17.0-cp312-cp312-win_amd64.whl", hash = "sha256:9bd3caac219df476dd0cc3fe01d2f1581ed588906feac767abd9614c1c12f8b3"}, + {file = "jiter-0.17.0-cp312-cp312-win_arm64.whl", hash = "sha256:36ee6e69027396664e59995b9a635a947a5304ee9837279584a0bb8145c8f6b8"}, + {file = "jiter-0.17.0.tar.gz", hash = "sha256:03e432f226a453851079fb84cd17c6da9991eab723e28d716f14ae3d906e0c12"}, +] + +[[package]] +name = "joblib" +version = "1.6.0" +requires_python = ">=3.10" +summary = "Lightweight pipelining with Python functions" +groups = ["train"] +marker = "python_version == \"3.12\"" +dependencies = [ + "cloudpickle>=3.0", +] +files = [ + {file = "joblib-1.6.0-py3-none-any.whl", hash = "sha256:3dbbf9f6e4b592a2357b854608e980fe6390d131d7a82f011a377ef2ebef7aba"}, + {file = "joblib-1.6.0.tar.gz", hash = "sha256:2ccc96785b12046c08fd6d55839c12857831b54a3c1673ffadd2f04bfc4eda03"}, +] + +[[package]] +name = "joserfc" +version = "1.7.5" +requires_python = ">=3.10" +summary = "The ultimate Python library for JOSE RFCs, including JWS, JWE, JWK, JWA, JWT" +groups = ["agent"] +marker = "python_version == \"3.12\"" +dependencies = [ + "cryptography>=45.0.1", +] +files = [ + {file = "joserfc-1.7.5-py3-none-any.whl", hash = "sha256:add2c2c84e8373b084d526a8b53daba5d7a513a118cd2dcd9fc9f979d0922159"}, + {file = "joserfc-1.7.5.tar.gz", hash = "sha256:d5ff536e658e17664f8c1b1ab60dc4aa62aa973fcef1edd33cc44bda45d6f5ea"}, +] + +[[package]] +name = "kiwisolver" +version = "1.5.1" +requires_python = ">=3.10" +summary = "A fast implementation of the Cassowary constraint solver" +groups = ["plot"] +marker = "python_version == \"3.12\"" +files = [ + {file = "kiwisolver-1.5.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:63fb7294b768f444eb4b068965f2662f28c2fd4161e23bd60fcf3ff27b74c046"}, + {file = "kiwisolver-1.5.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:0ebdef3eae5336568147c39a55be6a2036ffde53faa9ca2d978989ae7c2da12c"}, + {file = "kiwisolver-1.5.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1798e83840c3f627246104c4d8a9639c60fa068adf9ce92b61791781fa8a68c1"}, + {file = "kiwisolver-1.5.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:34633ecf50d16187ab8e5528b7a2530f2feb4e23f300db4672538b51cfc5cd38"}, + {file = "kiwisolver-1.5.1-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d27c2123977cb9269c30a49ba45f03a4323017ef693e19db4ec9dbe1299a3002"}, + {file = "kiwisolver-1.5.1-cp312-cp312-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6a797a1cefc8b9c93170db580337e1fe3d011ad18b1299943231279406342048"}, + {file = "kiwisolver-1.5.1-cp312-cp312-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2551cf9917af48ee7c4b29cc82320489508cf96fd26a51f6fc124de661cd44c7"}, + {file = "kiwisolver-1.5.1-cp312-cp312-manylinux_2_39_riscv64.whl", hash = "sha256:38f6e0deb4d0a4615efe0c4efc5990b06ae450ab50a0b321c0b078b6d238c083"}, + {file = "kiwisolver-1.5.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:bfd1de989b3330420e29de39352f5c049905c9e3ee67233a50d550e3d652c148"}, + {file = "kiwisolver-1.5.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:1209042a623ddfda5497e4066c7b77651dde8e1d3a9dd97599dc7e97f3b9b78c"}, + {file = "kiwisolver-1.5.1-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:26e8268480be5061d509e29669d59103c067a26377a56491630ece11762e3858"}, + {file = "kiwisolver-1.5.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:d79308fa689fac89cbcfbd4dbfc80b5f95c54c5a7fd4d194be221f9d33d026e6"}, + {file = "kiwisolver-1.5.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b03af77d77e50edba2030fd5f7c352ff209314b09030a3cba7c14edf9a09a444"}, + {file = "kiwisolver-1.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:06a6917674de9e0fe3f66f5430787f59a9f2ddb64af9b714eaec547e29ef5c19"}, + {file = "kiwisolver-1.5.1-cp312-cp312-win_arm64.whl", hash = "sha256:ad8b9671348d7c8716715652ae11f85ed0eb99e265a2df2ca490577d69860b2c"}, + {file = "kiwisolver-1.5.1.tar.gz", hash = "sha256:f1303ef2eec81262a4b708c3e858afe58d7c75ad91c1c05266eda7673369859a"}, +] + +[[package]] +name = "linkify-it-py" +version = "2.2.0" +requires_python = ">=3.10" +summary = "Links recognition library with FULL unicode support." +groups = ["agent"] +marker = "python_version == \"3.12\"" +files = [ + {file = "linkify_it_py-2.2.0-py3-none-any.whl", hash = "sha256:3adc40eb5af300b2605fcfdb968c24e1d780a90f1f2221af7c15e5111e94d443"}, + {file = "linkify_it_py-2.2.0.tar.gz", hash = "sha256:907acd2d17ac1fbb9ddb62c8957ccbd6158cac602231a15c3b0cd1e215f03cee"}, +] + +[[package]] +name = "loguru" +version = "0.7.3" +requires_python = "<4.0,>=3.5" +summary = "Python logging made (stupidly) simple" +groups = ["agent"] +marker = "python_version == \"3.12\"" +dependencies = [ + "aiocontextvars>=0.2.0; python_version < \"3.7\"", + "colorama>=0.3.4; sys_platform == \"win32\"", + "win32-setctime>=1.0.0; sys_platform == \"win32\"", +] +files = [ + {file = "loguru-0.7.3-py3-none-any.whl", hash = "sha256:31a33c10c8e1e10422bfd431aeb5d351c7cf7fa671e3c4df004162264b28220c"}, + {file = "loguru-0.7.3.tar.gz", hash = "sha256:19480589e77d47b8d85b2c827ad95d49bf31b0dcde16593892eb51dd18706eb6"}, +] + +[[package]] +name = "markdown-it-py" +version = "4.2.0" +requires_python = ">=3.10" +summary = "Python port of markdown-it. Markdown parsing, done right!" +groups = ["default", "agent", "docs"] +marker = "python_version == \"3.12\"" +dependencies = [ + "mdurl~=0.1", +] +files = [ + {file = "markdown_it_py-4.2.0-py3-none-any.whl", hash = "sha256:9f7ebbcd14fe59494226453aed97c1070d83f8d24b6fc3a3bcf9a38092641c4a"}, + {file = "markdown_it_py-4.2.0.tar.gz", hash = "sha256:04a21681d6fbb623de53f6f364d352309d4094dd4194040a10fd51833e418d49"}, +] + +[[package]] +name = "markdown-it-py" +version = "4.2.0" +extras = ["linkify"] +requires_python = ">=3.10" +summary = "Python port of markdown-it. Markdown parsing, done right!" +groups = ["agent"] +marker = "python_version == \"3.12\"" +dependencies = [ + "linkify-it-py<3,>=1", + "markdown-it-py==4.2.0", +] +files = [ + {file = "markdown_it_py-4.2.0-py3-none-any.whl", hash = "sha256:9f7ebbcd14fe59494226453aed97c1070d83f8d24b6fc3a3bcf9a38092641c4a"}, + {file = "markdown_it_py-4.2.0.tar.gz", hash = "sha256:04a21681d6fbb623de53f6f364d352309d4094dd4194040a10fd51833e418d49"}, +] + +[[package]] +name = "markupsafe" +version = "3.0.3" +requires_python = ">=3.9" +summary = "Safely add untrusted strings to HTML/XML markup." +groups = ["default", "docs"] +marker = "python_version == \"3.12\"" +files = [ + {file = "markupsafe-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e"}, + {file = "markupsafe-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce"}, + {file = "markupsafe-3.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d"}, + {file = "markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d"}, + {file = "markupsafe-3.0.3-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:94c6f0bb423f739146aec64595853541634bde58b2135f27f61c1ffd1cd4d16a"}, + {file = "markupsafe-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:be8813b57049a7dc738189df53d69395eba14fb99345e0a5994914a3864c8a4b"}, + {file = "markupsafe-3.0.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:83891d0e9fb81a825d9a6d61e3f07550ca70a076484292a70fde82c4b807286f"}, + {file = "markupsafe-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:77f0643abe7495da77fb436f50f8dab76dbc6e5fd25d39589a0f1fe6548bfa2b"}, + {file = "markupsafe-3.0.3-cp312-cp312-win32.whl", hash = "sha256:d88b440e37a16e651bda4c7c2b930eb586fd15ca7406cb39e211fcff3bf3017d"}, + {file = "markupsafe-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:26a5784ded40c9e318cfc2bdb30fe164bdb8665ded9cd64d500a34fb42067b1c"}, + {file = "markupsafe-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:35add3b638a5d900e807944a078b51922212fb3dedb01633a8defc4b01a3c85f"}, + {file = "markupsafe-3.0.3.tar.gz", hash = "sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698"}, +] + +[[package]] +name = "matplotlib" +version = "3.11.2" +requires_python = ">=3.11" +summary = "Python plotting package" +groups = ["plot"] +marker = "python_version == \"3.12\"" +dependencies = [ + "contourpy>=1.0.1", + "cycler>=0.10", + "fonttools>=4.28.2", + "kiwisolver>=1.3.1", + "numpy>=1.25", + "packaging>=20.0", + "pillow>=9", + "pyparsing>=3", + "python-dateutil>=2.7", +] +files = [ + {file = "matplotlib-3.11.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ef752769cd962f39ea0b6ffc82d1ea43a0012c5a6157c7a075212fa509cfcff2"}, + {file = "matplotlib-3.11.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ef31985c4dedb5f1424e1aec6849a47dd37689cb7fa3c20b1b82187f26806261"}, + {file = "matplotlib-3.11.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:df4f7784aca81a94f254c0a2767d592ee25f407e488f5fa7203e51093fb6ca27"}, + {file = "matplotlib-3.11.2-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b9a7ad579856284135e401ecc918c5f8a017ee30539298862a109f51b971710"}, + {file = "matplotlib-3.11.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3aa4b8516fd26659e4363abbf317c703d9116496c5db2e9d0609a2866dd39dd2"}, + {file = "matplotlib-3.11.2-cp312-cp312-win_amd64.whl", hash = "sha256:c5c1c68ee401fc98271263410f0e5ce88285abacf7627132914e8adf3d70ff43"}, + {file = "matplotlib-3.11.2-cp312-cp312-win_arm64.whl", hash = "sha256:643ff850d8e0f5b8319337f87ed3cb59506afb3df3cc48de777d85871233be7b"}, + {file = "matplotlib-3.11.2.tar.gz", hash = "sha256:cec596316640f2b394b8f0daa0ea61a8eae82d017b620b9f202befb972a59ea4"}, +] + +[[package]] +name = "mdit-py-plugins" +version = "0.6.1" +requires_python = ">=3.10" +summary = "Collection of plugins for markdown-it-py" +groups = ["agent", "docs"] +marker = "python_version == \"3.12\"" +dependencies = [ + "markdown-it-py<5.0.0,>=2.0.0", +] +files = [ + {file = "mdit_py_plugins-0.6.1-py3-none-any.whl", hash = "sha256:214c82fb2ac524472ab6a5bcab1de80f73b50443e187f401bfd77efbc7c6481d"}, + {file = "mdit_py_plugins-0.6.1.tar.gz", hash = "sha256:a2bca0f039f39dbd35fb74ae1b5f998608c437463371f0ff7f49a19a17a114d0"}, +] + +[[package]] +name = "mdurl" +version = "0.1.2" +requires_python = ">=3.7" +summary = "Markdown URL utilities" +groups = ["default", "agent", "docs"] +marker = "python_version == \"3.12\"" +files = [ + {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, + {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, +] + +[[package]] +name = "mpmath" +version = "1.3.0" +summary = "Python library for arbitrary-precision floating-point arithmetic" +groups = ["default"] +marker = "python_version == \"3.12\"" +files = [ + {file = "mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c"}, + {file = "mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f"}, +] + +[[package]] +name = "multidict" +version = "6.9.1" +requires_python = ">=3.10" +summary = "multidict implementation" +groups = ["agent", "train"] +marker = "python_version == \"3.12\"" +dependencies = [ + "typing-extensions>=4.1.0; python_version < \"3.11\"", +] +files = [ + {file = "multidict-6.9.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:29138fef49828542e859828107e42e50d0e587c513b7eb4b2d92bade2b0860fe"}, + {file = "multidict-6.9.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:19e31815d41cefc365489e591d105d2baceb2f65aa75d29471fbdbda8651e006"}, + {file = "multidict-6.9.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6ed30be8918e18c8bed0a2e8b70639ecf02feb61ed00ca2e41cfcb2a50fa3f42"}, + {file = "multidict-6.9.1-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:637f4ae36264bd7b8d9a60193acddc1d735ad52e8ed53a19931ea6d921fea8e5"}, + {file = "multidict-6.9.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:35fc236507fb1b3138f0af5ecd5f94ed752d4d6d826248eae425f86204013eea"}, + {file = "multidict-6.9.1-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e58952f04772f59f11c6e007471449809a30165188669bca8fdb19dde40a8f24"}, + {file = "multidict-6.9.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d35a4f1c63f07fbb8c8f9946dea98b21eddf6c57421585f71d91864be3ba2a24"}, + {file = "multidict-6.9.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b5f8771aaaed7f80e84a4e471d2f29ab6721e4595075e54d03ae1ed951b2000a"}, + {file = "multidict-6.9.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:976fd7689d69ec78d67d31d38d396d8adb562f7e8368279f76aed4aa451fa06d"}, + {file = "multidict-6.9.1-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:95052e8777a86bae87c0bd0b5ab22d809e3d1d02bf69e3e66ddda5ba75a05805"}, + {file = "multidict-6.9.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1a8adfcaf96f587ab138476eaddef95f29b8a2a8a9afbfea8d2fd62180995d02"}, + {file = "multidict-6.9.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:1a53de2772cfb74559df2eb4456ec4eeb908435ec55a84b69370d9d745d62aa8"}, + {file = "multidict-6.9.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0f2ce963299d42fa3f22a90adc0fdf174792ffef5ff4c7ffb68260548fb05580"}, + {file = "multidict-6.9.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:5b30ddf7234e611ca877575b62840e6af5977f92f1f9d532eedbb05a44ff8004"}, + {file = "multidict-6.9.1-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:63ada7ee2e9345695f9e9bc4c65d72222253f07b1ac94fd0e37555cc6f3c7f60"}, + {file = "multidict-6.9.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:3c95601ed98fad3f6e2f8fe809c3b526b0fab31ef525e00a155e227f3d17f58a"}, + {file = "multidict-6.9.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c148e8b596000dd3e4bfe206e70f3e666be18d72032e0012555f2373c52e35d6"}, + {file = "multidict-6.9.1-cp312-cp312-win32.whl", hash = "sha256:f9dad513626a33670f17cddc6078e30e311f444c957e8dbfc5b2b4603c8b4edb"}, + {file = "multidict-6.9.1-cp312-cp312-win_amd64.whl", hash = "sha256:a16a1dc8529f9e734a41c3b856f3eae7ebacdc061dde3f8a844e0c7889c97203"}, + {file = "multidict-6.9.1-cp312-cp312-win_arm64.whl", hash = "sha256:361f7206cf341ba94fb015688f5c8b480f8e63bd58a4c14a48aeca7851a241cc"}, + {file = "multidict-6.9.1-py3-none-any.whl", hash = "sha256:7bf6478188f4e47bf5686e8a33da4ae28bf43b1b2528d9ee144d28492bfac60b"}, + {file = "multidict-6.9.1.tar.gz", hash = "sha256:0f06e60fa190aa7abd0914c2a766736fdc8e9f34878c4346338534b73d1b20e2"}, +] + +[[package]] +name = "multiprocess" +version = "0.70.19" +requires_python = ">=3.9" +summary = "better multiprocessing and multithreading in Python" +groups = ["train"] +marker = "python_version == \"3.12\"" +dependencies = [ + "dill>=0.4.1", +] +files = [ + {file = "multiprocess-0.70.19-py312-none-any.whl", hash = "sha256:3a56c0e85dd5025161bac5ce138dcac1e49174c7d8e74596537e729fd5c53c28"}, + {file = "multiprocess-0.70.19.tar.gz", hash = "sha256:952021e0e6c55a4a9fe4cd787895b86e239a40e76802a789d6305398d3975897"}, +] + +[[package]] +name = "myst-parser" +version = "5.1.0" +requires_python = ">=3.11" +summary = "An extended [CommonMark](https://spec.commonmark.org/) compliant parser," +groups = ["docs"] +marker = "python_version == \"3.12\"" +dependencies = [ + "docutils<0.23,>=0.20", + "jinja2", + "markdown-it-py~=4.2", + "mdit-py-plugins>=0.6.1,~=0.6", + "pyyaml", + "sphinx<10,>=8", +] +files = [ + {file = "myst_parser-5.1.0-py3-none-any.whl", hash = "sha256:9c91c52b3cdb4d94a6506e4fab4e2f296c7623a0da0dcbe6de1565c3dad67a8a"}, + {file = "myst_parser-5.1.0.tar.gz", hash = "sha256:ab69322dc6719dcc7f296479dbb70181b66df6ed315064f92dbc85c0e1bf2f02"}, +] + +[[package]] +name = "narwhals" +version = "2.26.0" +requires_python = ">=3.10" +summary = "Extremely lightweight compatibility layer between dataframe libraries" +groups = ["train"] +marker = "python_version == \"3.12\"" +files = [ + {file = "narwhals-2.26.0-py3-none-any.whl", hash = "sha256:29326d74f107c347fd1009bd58e38d9f7c7c5b51e6de97bc93dbc325d9038b54"}, + {file = "narwhals-2.26.0.tar.gz", hash = "sha256:6b9cadca82f375c7e4cf584fdc86ca25da54827307a9c58f94547ee6104b82dd"}, +] + +[[package]] +name = "networkx" +version = "3.7" +requires_python = "!=3.14.1,>=3.12" +summary = "Python package for creating and manipulating graphs and networks" +groups = ["default"] +marker = "python_version == \"3.12\"" +files = [ + {file = "networkx-3.7-py3-none-any.whl", hash = "sha256:e3fd2c13a7814cee3746340d8d7f8598a67f16a58bf47fb7f8793fab6efca1b0"}, + {file = "networkx-3.7.tar.gz", hash = "sha256:fd77a511bd90f39f3d016351345b52cf5319b813bdca01de3f755d3cca62e96a"}, +] + +[[package]] +name = "numpy" +version = "2.5.3" +requires_python = ">=3.12" +summary = "Fundamental package for array computing in Python" +groups = ["default", "plot", "train"] +marker = "python_version == \"3.12\"" +files = [ + {file = "numpy-2.5.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:cb189f09db39283b26bfd061ec16189e14f71c6755207f72a0f7540867afe5b9"}, + {file = "numpy-2.5.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f59a878c33d6b88122d80d239bb3b845d58708750b0cb06a09aebb9b18ec696c"}, + {file = "numpy-2.5.3-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:a72f874bc9e10e4b8f80426fb49716d5141f64442a0c8418065093ec8017fbb0"}, + {file = "numpy-2.5.3-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:fc36dc566135b5eceec4cf89758fcb719266a019ef07dae1754ae7c9f617ef3e"}, + {file = "numpy-2.5.3-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:76c2c1e6bfa5c84adc6434dfbf013aa92096a7985221762c8f11fedfd20fff58"}, + {file = "numpy-2.5.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b7e18c623bb5c95acb3b3328861272816ba199fb531921c5d6d0b675f1fde9e3"}, + {file = "numpy-2.5.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4f8929ee6c96bfbd7b4ed2032e0c03af86fe1826740ab61ddabf9072d06e57ff"}, + {file = "numpy-2.5.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b5d93cf48f687479941d12b69c873ad2cc76bbd487f0091c2200636497f34034"}, + {file = "numpy-2.5.3-cp312-cp312-win32.whl", hash = "sha256:bf63afbe037eb5d2fe87fbcc7778e61da53ebaf21d938a4515aa73b62532a5d4"}, + {file = "numpy-2.5.3-cp312-cp312-win_amd64.whl", hash = "sha256:0a59a421a32580a009e8a1751345bf829631b990dc1794b80514ab722b435def"}, + {file = "numpy-2.5.3-cp312-cp312-win_arm64.whl", hash = "sha256:ccb32e0525d29e8b0572eb84c9a57af0e7a4e615726927506f55063c62414034"}, + {file = "numpy-2.5.3.tar.gz", hash = "sha256:df2d5874ff183595a4ba404edd04f6bd9b5505c1d7708573f6a6c17489a67563"}, +] + +[[package]] +name = "openai" +version = "3.16.2" +requires_python = ">=3.10" +summary = "The official Python library for the openai API" +groups = ["agent"] +marker = "python_version == \"3.12\"" +dependencies = [ + "anyio<5,>=4.10.0", + "httpx2<3,>=2.7.0", + "jiter<1,>=0.16.0", + "pydantic!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,<3,>=1.10.13", + "sniffio", + "typing-extensions<5,>=4.14", +] +files = [ + {file = "openai-3.16.2-py3-none-any.whl", hash = "sha256:660a7f8307e6605342ae84ff4425412e7cd19e5e9b298f975502df2a1a9a5d5f"}, + {file = "openai-3.16.2.tar.gz", hash = "sha256:e129455fc6a744276cda63a9e2f0759207bc0cf24afc4cf356bf5029e631e955"}, +] + +[[package]] +name = "openresponses-types" +version = "2.4.0" +requires_python = ">=3.11" +summary = "Python SDK for OpenResponses specification" +groups = ["agent"] +marker = "python_version == \"3.12\"" +dependencies = [ + "pydantic<3.0,>=2.0", +] +files = [ + {file = "openresponses_types-2.4.0-py3-none-any.whl", hash = "sha256:186406592bc115bf12d9ee88320f8051ab1ade0a8fa8941fd1e44b0be16684f1"}, + {file = "openresponses_types-2.4.0.tar.gz", hash = "sha256:cd55e7fa17230d8edd46e254ef34666ca6f250b7efa3712a110aac546c7dc8d5"}, +] + +[[package]] +name = "packaging" +version = "26.3" +requires_python = ">=3.9" +summary = "Core utilities for Python packages" +groups = ["default", "docs", "plot", "quality", "train"] +marker = "python_version == \"3.12\"" +files = [ + {file = "packaging-26.3-py3-none-any.whl", hash = "sha256:d7193f7c8e4e93f444fde0262bf90af30e16fa0ad0ad44cb553c87339b23cd1c"}, + {file = "packaging-26.3.tar.gz", hash = "sha256:94edc256424af38762eb31306eed28beb9f0efc50a8837492c9d6fd6004aed79"}, +] + +[[package]] +name = "pandas" +version = "3.0.6" +requires_python = ">=3.11" +summary = "Powerful data structures for data analysis, time series, and statistics" +groups = ["train"] +marker = "python_version == \"3.12\"" +dependencies = [ + "numpy>=1.26.0; python_version < \"3.14\"", + "numpy>=2.3.3; python_version >= \"3.14\"", + "python-dateutil>=2.8.2", + "tzdata; sys_platform == \"emscripten\"", + "tzdata; sys_platform == \"win32\"", +] +files = [ + {file = "pandas-3.0.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7dac2d65e9087e8e7b5a45fe15c4920911a221df061ab629943ce016489145c7"}, + {file = "pandas-3.0.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9dab635a549e58a053c7b0fa054dc0bd7be22f0ed9a720f4a85d5fb993276172"}, + {file = "pandas-3.0.6-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e3dccb584123b399c07562ac4d62543e90ede49ddf8ce3c13ffc64cbe828c281"}, + {file = "pandas-3.0.6-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0704044b676496b8350e023b09f174a26772456c974a2b11c36bebb558c9490d"}, + {file = "pandas-3.0.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e7c1905ef02c3d6d43d9dbd5b6ccb4da4870a0b0c821bbc103fbdb6f3ad2707b"}, + {file = "pandas-3.0.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:569e114072b24fc4970c12e2b4bab252671668a40b324318903380cab0254c0c"}, + {file = "pandas-3.0.6-cp312-cp312-pyemscripten_2024_0_wasm32.whl", hash = "sha256:2a8fc94be2ee5f1d86f97aacd8cc566f81680b6498e76f3007421bb5d98151bf"}, + {file = "pandas-3.0.6-cp312-cp312-win_amd64.whl", hash = "sha256:3ef908d28590b3f42d7070e7ad8f9b34b442b260b7f3c1afb57e0040c58cdb1b"}, + {file = "pandas-3.0.6-cp312-cp312-win_arm64.whl", hash = "sha256:f4e7c52eb108d752e7592268108fd3e98efd76d83a3125cdd06c621c2e44359b"}, + {file = "pandas-3.0.6.tar.gz", hash = "sha256:66b07ef7315a31bfe1089cd3d71a7de781c9dca986762d0b4fe7c0ef17465d10"}, +] + +[[package]] +name = "peft" +version = "0.21.0" +requires_python = ">=3.10.0" +summary = "Parameter-Efficient Fine-Tuning (PEFT)" +groups = ["default"] +marker = "python_version == \"3.12\"" +dependencies = [ + "accelerate>=0.21.0", + "huggingface-hub>=0.25.0", + "numpy>=1.17", + "packaging>=20.0", + "psutil", + "pyyaml", + "safetensors", + "torch>=1.13.0", + "tqdm", + "transformers", +] +files = [ + {file = "peft-0.21.0-py3-none-any.whl", hash = "sha256:b64eb75fd9dece7401c70e675b8d9de024993b70483691b41c62876f0c7809b7"}, + {file = "peft-0.21.0.tar.gz", hash = "sha256:17f2b5a264439f4cd983c02e95954f2e948e3bcb85f75895ee307f94a55fd28f"}, +] + +[[package]] +name = "pillow" +version = "12.3.0" +requires_python = ">=3.10" +summary = "Python Imaging Library (fork)" +groups = ["default", "plot"] +marker = "python_version == \"3.12\"" +files = [ + {file = "pillow-12.3.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ba09209fbe443b4acccebe845d8a138b89a8f4fbaeedd44953490b5315d5e965"}, + {file = "pillow-12.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ffd0c5368496f41b0944be820fcb7a838aa6e623d250b01acf2643939c3f99d7"}, + {file = "pillow-12.3.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d9c7f76c0673154f044e9d78c8655fb4213f6ca31a836df48b40fe5d187717b9"}, + {file = "pillow-12.3.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:78cb2c6865a35ab8ff8b75fd122f6033b92a62c82801110e48ddd6c936a45d91"}, + {file = "pillow-12.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e491916b378fba47242221bb9ead245211b70d504f495d105d17b14a24b4907c"}, + {file = "pillow-12.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0dd2064cbc55aaec028ef5fbb60fa47bb6c3e7918e07ff17935284b227a9d2df"}, + {file = "pillow-12.3.0-cp312-cp312-win32.whl", hash = "sha256:dbce0b29841537a2fa4a214c2bbf14de3587c9680caa9b4e217568472490b28f"}, + {file = "pillow-12.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:a2b55dd6b2a4c4b7d87ffa56bdb33fdc5fdb9a462173861a7bc097f17d91cb09"}, + {file = "pillow-12.3.0-cp312-cp312-win_arm64.whl", hash = "sha256:331b624368d4f1d069149002f25f44bc61c8919ce8ddb3c45bdad8f6e2d89510"}, + {file = "pillow-12.3.0.tar.gz", hash = "sha256:3b8182a766685eaa002637e28b4ec8d6b18819a0c71f579bf0dbaa5830297cce"}, +] + +[[package]] +name = "platformdirs" +version = "4.11.11" +requires_python = ">=3.10" +summary = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." +groups = ["agent"] +marker = "python_version == \"3.12\"" +files = [ + {file = "platformdirs-4.11.11-py3-none-any.whl", hash = "sha256:972ea6b2b387155a536226a0750e46923d731d459a387c4a255c583ed2f64547"}, + {file = "platformdirs-4.11.11.tar.gz", hash = "sha256:b0befe8a90759e4a9a8b9820d434ae226a6549063210b596da0038a7a05aede4"}, +] + +[[package]] +name = "pluggy" +version = "1.6.0" +requires_python = ">=3.9" +summary = "plugin and hook calling mechanisms for python" +groups = ["agent", "quality"] +marker = "python_version == \"3.12\"" +files = [ + {file = "pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746"}, + {file = "pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3"}, +] + +[[package]] +name = "prek" +version = "0.5.3" +requires_python = ">=3.8" +summary = "A fast Git hook manager written in Rust, designed as a drop-in alternative to pre-commit, reimagined." +groups = ["quality"] +marker = "python_version == \"3.12\"" +files = [ + {file = "prek-0.5.3-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:2d7240c5e6a996ef5bebe5d57d43049803e41c225b343681c020bf0c87dab2b2"}, + {file = "prek-0.5.3-py3-none-macosx_11_0_arm64.whl", hash = "sha256:1dd6df8235ca361dbbeec89c305ccb41a138088a2fc548484b4cb89f66a80d20"}, + {file = "prek-0.5.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl", hash = "sha256:61ff791bb850ba52cc0d86576498df7e1bd1e9ed20df63dae113a4a6aa495e19"}, + {file = "prek-0.5.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a863379a2668c4ef079d820ffd5b14073145380dfbe0e70fef498dc73c568f86"}, + {file = "prek-0.5.3-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:086d1b77557f0a089568dc5b93c22ccd793351524f3eeb29d36781421a350e72"}, + {file = "prek-0.5.3-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:4f09b947255124e9591a7f7ef16eb5340a36ba94a275d788d7ea804fab35f0e2"}, + {file = "prek-0.5.3-py3-none-win_amd64.whl", hash = "sha256:5b74a9742c3e8f8688d5dad1439688f112e2e1746fcb91016015dae38df3eb42"}, + {file = "prek-0.5.3-py3-none-win_arm64.whl", hash = "sha256:20d92aef53a5e237f4659ecc6669c0fbc98a1b83f0e2476530400a72d42ca390"}, + {file = "prek-0.5.3.tar.gz", hash = "sha256:06d88bed9a5b2886cd3796957e4cecf05fa9b06724b625df31dbf0a48ff2330c"}, +] + +[[package]] +name = "prompt-toolkit" +version = "3.0.53" +requires_python = ">=3.10" +summary = "Library for building powerful interactive command lines in Python" +groups = ["agent"] +marker = "python_version == \"3.12\"" +dependencies = [ + "wcwidth>=0.1.4", +] +files = [ + {file = "prompt_toolkit-3.0.53-py3-none-any.whl", hash = "sha256:01c0891d7f9237d5e339f7d3e42cdae80b7534abb1c7c0e3352efba6231492f2"}, + {file = "prompt_toolkit-3.0.53.tar.gz", hash = "sha256:9ec8a0ad96d5c56148b3f914aa79c1564c3fde5d2e6b876e7bc327e353cf8fa6"}, +] + +[[package]] +name = "propcache" +version = "0.5.4" +requires_python = ">=3.10" +summary = "Accelerated property cache" +groups = ["agent", "train"] +marker = "python_version == \"3.12\"" +files = [ + {file = "propcache-0.5.4-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:b28f41fa3b8c6900457f858ec5b03998f3a6d535fbc1bb2edec5961ea05ec429"}, + {file = "propcache-0.5.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:dcbf346a318a5e30063f547630b02bb787ce2f45b6368d5da143660b6a3835d8"}, + {file = "propcache-0.5.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:87a3caecf8095e48dc72f84bfa42e23a848cf410cc9cc13031fba4869b706a21"}, + {file = "propcache-0.5.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:60a64cbccaa11b7760ce705a14ada17ba459e7ca9f23ba587eb013821032d7ef"}, + {file = "propcache-0.5.4-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a74bfa37147cc08fb29df10bd9c16f40fa7f860cd3a6d2fff853323a94f6e17f"}, + {file = "propcache-0.5.4-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a4d7a54719b67338a305dca2ce6aafe366817df94ddfd4b5514374356f5ca546"}, + {file = "propcache-0.5.4-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2814ecd8e818f487bee4b0f921bc4d1c176cc5fc71ac0f072d0fa67eda4ac14b"}, + {file = "propcache-0.5.4-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6af4693716bfb03f1752ef1b30faa593db2c01d5272e9b8564a1549452a979ab"}, + {file = "propcache-0.5.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4fbc1a15dc8cd1689508758d626b372b1f09d28d9577667feaf9e6bfcd8efcbc"}, + {file = "propcache-0.5.4-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:cdee8205a44d0be91bbac4c41b95d86641b72dfc7aef1279400e4fda3f26a937"}, + {file = "propcache-0.5.4-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:9a2a8a50a93dee0268a860a07fa3b4bd968f8ce4dbd794957da772f395368526"}, + {file = "propcache-0.5.4-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:7ffafcbfc7b549ab940047e505c831eabac5e67de53e1bc174adbc5285c55944"}, + {file = "propcache-0.5.4-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:d1f5a500bfcbb2c0ab85e98a0dcd70f5899d34efe365a0187700369a79603031"}, + {file = "propcache-0.5.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8a235f73d6e020855dc29dff012d920c02ee0feab8d73a24185a7569f4be1161"}, + {file = "propcache-0.5.4-cp312-cp312-win32.whl", hash = "sha256:b3083bfe87f95c756e610bd8025f26cbd1cd4aaa03a422f2d65efb7a97cd53d8"}, + {file = "propcache-0.5.4-cp312-cp312-win_amd64.whl", hash = "sha256:98914de2c4d7f0f9f4a8c6ea4bf05841f4175796941e3ef7d47eb718f22311fb"}, + {file = "propcache-0.5.4-cp312-cp312-win_arm64.whl", hash = "sha256:8876b39961e33d912afe3c1bee18ee564fdad0206f873cc15d522756b7f50737"}, + {file = "propcache-0.5.4-py3-none-any.whl", hash = "sha256:62c60aec739ed00124573cce1178138fd690c7676352d67a37328c1cf51d7468"}, + {file = "propcache-0.5.4.tar.gz", hash = "sha256:ff6b113f50bc066a698db5d944d2c6dc7507168dd3341e255a8892fd0715a558"}, +] + +[[package]] +name = "psutil" +version = "7.2.2" +requires_python = ">=3.6" +summary = "Cross-platform lib for process and system monitoring." +groups = ["default"] +marker = "python_version == \"3.12\"" +files = [ + {file = "psutil-7.2.2-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ed0cace939114f62738d808fdcecd4c869222507e266e574799e9c0faa17d486"}, + {file = "psutil-7.2.2-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:1a7b04c10f32cc88ab39cbf606e117fd74721c831c98a27dc04578deb0c16979"}, + {file = "psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9"}, + {file = "psutil-7.2.2-cp36-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b0726cecd84f9474419d67252add4ac0cd9811b04d61123054b9fb6f57df6e9e"}, + {file = "psutil-7.2.2-cp36-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:fd04ef36b4a6d599bbdb225dd1d3f51e00105f6d48a28f006da7f9822f2606d8"}, + {file = "psutil-7.2.2-cp36-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b58fabe35e80b264a4e3bb23e6b96f9e45a3df7fb7eed419ac0e5947c61e47cc"}, + {file = "psutil-7.2.2-cp37-abi3-win_amd64.whl", hash = "sha256:eb7e81434c8d223ec4a219b5fc1c47d0417b12be7ea866e24fb5ad6e84b3d988"}, + {file = "psutil-7.2.2-cp37-abi3-win_arm64.whl", hash = "sha256:8c233660f575a5a89e6d4cb65d9f938126312bca76d8fe087b947b3a1aaac9ee"}, + {file = "psutil-7.2.2.tar.gz", hash = "sha256:0746f5f8d406af344fd547f1c8daa5f5c33dbc293bb8d6a16d80b4bb88f59372"}, +] + +[[package]] +name = "pyarrow" +version = "25.0.1" +requires_python = ">=3.10" +summary = "Python library for Apache Arrow" +groups = ["train"] +marker = "python_version == \"3.12\"" +files = [ + {file = "pyarrow-25.0.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:df961f2e7ae9cf496459259d798652c70625f6c080650d6952f8c04053c58ee9"}, + {file = "pyarrow-25.0.1-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:cc4aa407fde9fc660be3939e49ea31f50f3e9fec17c0ec63159f7711edd3efc9"}, + {file = "pyarrow-25.0.1-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:4340f0ba6c1d2e13f21658de1d7c662ca2545018568d0030a1e9afca159d87e3"}, + {file = "pyarrow-25.0.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:5389cdf79447ed1515c9e31620e6e1e2302249564d603f2ad727d4f6d313e4c3"}, + {file = "pyarrow-25.0.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d51592cb7561e87877c506113e7adbf1342ab579e6c21f0ef44b8ba41cb74c80"}, + {file = "pyarrow-25.0.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6109c94d8b9f3b17a041daca16cacb2f651ad8f1ef70a4232c2c0f37a23da2a8"}, + {file = "pyarrow-25.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:8858d7bfc22e3f51529aeaa4077225029724623e4595dc9eff8c793935c34140"}, + {file = "pyarrow-25.0.1.tar.gz", hash = "sha256:9150a83248bfed9813ea3c3af74c3856c1984d444aa28e58bf7733b9750ddf6a"}, +] + +[[package]] +name = "pycparser" +version = "3.0" +requires_python = ">=3.10" +summary = "C parser in Python" +groups = ["agent"] +marker = "implementation_name != \"PyPy\" and platform_python_implementation != \"PyPy\" and python_version == \"3.12\"" +files = [ + {file = "pycparser-3.0-py3-none-any.whl", hash = "sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992"}, + {file = "pycparser-3.0.tar.gz", hash = "sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29"}, +] + +[[package]] +name = "pydantic" +version = "2.13.5" +requires_python = ">=3.9" +summary = "Data validation using Python type hints" +groups = ["agent"] +marker = "python_version == \"3.12\"" +dependencies = [ + "annotated-types>=0.6.0", + "pydantic-core==2.46.5", + "typing-extensions>=4.14.1", + "typing-inspection>=0.4.2", +] +files = [ + {file = "pydantic-2.13.5-py3-none-any.whl", hash = "sha256:346a034f080da3755d8e9cb5e00e8b07de1d39e4f6e2c87d8ab7cafa0b269a73"}, + {file = "pydantic-2.13.5.tar.gz", hash = "sha256:51a9c5f7b2f8e636f04c6cada605d9b6a3bf1348fdf945a3d8869b19bba0ee08"}, +] + +[[package]] +name = "pydantic-core" +version = "2.46.5" +requires_python = ">=3.9" +summary = "Core functionality for Pydantic validation and serialization" +groups = ["agent"] +marker = "python_version == \"3.12\"" +dependencies = [ + "typing-extensions>=4.14.1", +] +files = [ + {file = "pydantic_core-2.46.5-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:b9fe6fb92520e3fd61f2e49000b6911b188824f089b75973ea06d6267f0b476d"}, + {file = "pydantic_core-2.46.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a39ac25a9a2fa4072efdb429833c4a4c8009a51ff9eea3eeae131713cd27991e"}, + {file = "pydantic_core-2.46.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4fdc8b93a41521988916eeaa271173fcca7fa0803d62f87675aac8dcec1c8e29"}, + {file = "pydantic_core-2.46.5-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b98134087d9de723658d17a42c7d0da8d6e2ef08015dee7dc93889047315f5e4"}, + {file = "pydantic_core-2.46.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e652ab17569c94bff5475520f907b7148b8c24036a8ebbe5cf7cf7493d28579a"}, + {file = "pydantic_core-2.46.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d925f3d9afd05a8c0fb3a1031463a8d59ebe5e2afad297e29c78be19e13b4e62"}, + {file = "pydantic_core-2.46.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0fc5be0abd4a407e200d844b404e33639a554e7bd0d448e7b9ae181be4789ac2"}, + {file = "pydantic_core-2.46.5-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:816ff0a6550ffc06c098ccd2e0698600f9aa7da192a79eaa6f9af504a35db869"}, + {file = "pydantic_core-2.46.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c7ea57fc63aa7da93a1bd2d644e6577befae10c52c4e36377635eea1056a74f5"}, + {file = "pydantic_core-2.46.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:efd62a42486f1bda5d24cb4f63d15a3c7768375fe83d36f9417b4ad7a2fb20b3"}, + {file = "pydantic_core-2.46.5-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:2bc9419666990c06d7397831f2126a1ecc3594aaa3ff7de5bf2d066802f4e07b"}, + {file = "pydantic_core-2.46.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:18a09e1e1011b462f2e32774f25859ef1223d5c2b0546a633cf56654710721e0"}, + {file = "pydantic_core-2.46.5-cp312-cp312-win32.whl", hash = "sha256:5cb482e9e84c851f4e623fe4acc1ced89168cf1fe18f7089db4548c8f5bbb65b"}, + {file = "pydantic_core-2.46.5-cp312-cp312-win_amd64.whl", hash = "sha256:5e81740c09e310f5aa5cbd3e434a01c154d4bef93241c7877b39f211d2b78ba8"}, + {file = "pydantic_core-2.46.5-cp312-cp312-win_arm64.whl", hash = "sha256:f7b0ec93a2893de856652154d73b7ba622f26fa97726487dcac373de5f4c6084"}, + {file = "pydantic_core-2.46.5.tar.gz", hash = "sha256:10416c15b8839ecc4ef4d0885da76da6fd0f67333a0eb8aff6d93c4b8f2910fc"}, +] + +[[package]] +name = "pydantic-settings" +version = "2.15.0" +requires_python = ">=3.10" +summary = "Settings management using Pydantic" +groups = ["agent"] +marker = "python_version == \"3.12\"" +dependencies = [ + "pydantic>=2.7.0", + "python-dotenv>=0.21.0", + "typing-inspection>=0.4.0", +] +files = [ + {file = "pydantic_settings-2.15.0-py3-none-any.whl", hash = "sha256:0ba092c291c94baceb5eff768aa0d56400a457585bc0175925a5a5510303da42"}, + {file = "pydantic_settings-2.15.0.tar.gz", hash = "sha256:694b793e84f766ba76a90ebdefc01d0a9a045dab0382bee70393da93712ad117"}, +] + +[[package]] +name = "pygments" +version = "2.21.0" +requires_python = ">=3.9" +summary = "Pygments is a syntax highlighting package written in Python." +groups = ["default", "agent", "docs", "quality"] +marker = "python_version == \"3.12\"" +files = [ + {file = "pygments-2.21.0-py3-none-any.whl", hash = "sha256:2363c69b61c4a97c838da3b130dcd6468f4848992b21a82f2a63ec34377137d9"}, + {file = "pygments-2.21.0.tar.gz", hash = "sha256:610ca751c9bc2492b38eb9a38a7fbc93edbbb2d7182edaf34e66ae493dee5c8c"}, +] + +[[package]] +name = "pyparsing" +version = "3.3.3" +requires_python = ">=3.9" +summary = "pyparsing - Classes and methods to define and execute parsing grammars" +groups = ["plot"] +marker = "python_version == \"3.12\"" +files = [ + {file = "pyparsing-3.3.3-py3-none-any.whl", hash = "sha256:ece8c00a69cf01b45d0b1dedabb469c90d8caf996d4fda40f147627a122849a4"}, + {file = "pyparsing-3.3.3.tar.gz", hash = "sha256:928ae7e20211f3b6f3915a72f06a0cfd29ab9d24279dd6346b6b1a7146397d36"}, +] + +[[package]] +name = "pytest" +version = "9.1.1" +requires_python = ">=3.10" +summary = "pytest: simple powerful testing with Python" +groups = ["quality"] +marker = "python_version == \"3.12\"" +dependencies = [ + "colorama>=0.4; sys_platform == \"win32\"", + "exceptiongroup>=1; python_version < \"3.11\"", + "iniconfig>=1.0.1", + "packaging>=22", + "pluggy<2,>=1.5", + "pygments>=2.7.2", + "tomli>=1; python_version < \"3.11\"", +] +files = [ + {file = "pytest-9.1.1-py3-none-any.whl", hash = "sha256:37a86b45efb9a47a61a36449063e8e18d0cab3161329fc099eb21783169c4f0c"}, + {file = "pytest-9.1.1.tar.gz", hash = "sha256:1088fbde8f2b49d95a549a195707afa7a76a3ce9bcadc26b6d71f0ffda5fe313"}, +] + +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +requires_python = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +summary = "Extensions to the standard Python datetime module" +groups = ["plot", "train"] +marker = "python_version == \"3.12\"" +dependencies = [ + "six>=1.5", +] +files = [ + {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, + {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, +] + +[[package]] +name = "python-dotenv" +version = "1.2.3" +requires_python = ">=3.10" +summary = "Read key-value pairs from a .env file and set them as environment variables" +groups = ["agent"] +marker = "python_version == \"3.12\"" +files = [ + {file = "python_dotenv-1.2.3-py3-none-any.whl", hash = "sha256:904552145e8bfed22162c09dab1c2b9b54fefa7b23ba780f4f26ca0316b0f0d9"}, + {file = "python_dotenv-1.2.3.tar.gz", hash = "sha256:a20a594dabeaa385725aa239d5244871c143ecb356add8a20fcf23773a6c3a35"}, +] + +[[package]] +name = "python-telegram-bot" +version = "22.8" +requires_python = ">=3.10" +summary = "We have made you a wrapper you can't refuse" +groups = ["agent"] +marker = "python_version == \"3.12\"" +dependencies = [ + "httpcore>=1.0.9; python_version >= \"3.14\"", + "httpx<0.29,>=0.27", +] +files = [ + {file = "python_telegram_bot-22.8-py3-none-any.whl", hash = "sha256:42373918097f1b837cc4e717d588c19ea79651497ec712bb5b0c76e5e63c50e1"}, + {file = "python_telegram_bot-22.8.tar.gz", hash = "sha256:f9d3847fcb23ee603477e442800b33bb4adf851a73e0619d2050be879decf1ef"}, +] + +[[package]] +name = "pytorch-triton-rocm" +version = "3.5.1" +requires_python = ">=3.10,<3.15" +summary = "A language and compiler for custom Deep Learning operations" +groups = ["default"] +marker = "platform_system == \"Linux\" and python_version == \"3.12\"" +dependencies = [ + "importlib-metadata; python_version < \"3.10\"", +] +files = [ + {file = "pytorch_triton_rocm-3.5.1-cp312-cp312-linux_x86_64.whl", hash = "sha256:7de1810936e253b18e2993fa50312357f7e28ed96b2cdc64d0bffe789cbf5ac5"}, +] + +[[package]] +name = "pyyaml" +version = "6.0.3" +requires_python = ">=3.8" +summary = "YAML parser and emitter for Python" +groups = ["default", "agent", "docs", "train"] +marker = "python_version == \"3.12\"" +files = [ + {file = "pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196"}, + {file = "pyyaml-6.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0"}, + {file = "pyyaml-6.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28"}, + {file = "pyyaml-6.0.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c"}, + {file = "pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc"}, + {file = "pyyaml-6.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e"}, + {file = "pyyaml-6.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea"}, + {file = "pyyaml-6.0.3-cp312-cp312-win32.whl", hash = "sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5"}, + {file = "pyyaml-6.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b"}, + {file = "pyyaml-6.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd"}, + {file = "pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f"}, +] + +[[package]] +name = "rapidfuzz" +version = "3.14.6" +requires_python = ">=3.11" +summary = "rapid fuzzy string matching" +groups = ["agent"] +marker = "python_version == \"3.12\"" +files = [ + {file = "rapidfuzz-3.14.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b46cecf27025e7a934332ade033e6a394da8a493f19fa1d835e3b2968a4ff7da"}, + {file = "rapidfuzz-3.14.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1901414b135afb1a7f4b1ef940b95523b49cc5642aecf02af740f37567e98137"}, + {file = "rapidfuzz-3.14.6-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96a548979cd939b2c69358a0f5088a408524fbf7454f04bf90939fa971e64310"}, + {file = "rapidfuzz-3.14.6-cp312-cp312-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b22ef7e5e2341efc6216b666491022027b984e5aef93446064742f43f3c1d926"}, + {file = "rapidfuzz-3.14.6-cp312-cp312-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f0d2d95c787d812b9106cfbcb94ad37a49f59df9287e00a75eb61afc246e8759"}, + {file = "rapidfuzz-3.14.6-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0debb5f43662ea84d2f0228a0c7407ff647f9c3d13f3b692efff0cde46eebce0"}, + {file = "rapidfuzz-3.14.6-cp312-cp312-manylinux_2_39_riscv64.whl", hash = "sha256:1d253e1fe44648242a0029b42ba23adf238ed2a7eb3d8ed0a03731a23f074ae0"}, + {file = "rapidfuzz-3.14.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e06c6050c9bf6cd72305e3e6a293918b2b92cf2a067007585a53898624902e3c"}, + {file = "rapidfuzz-3.14.6-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:d85a6e9180e53cde95c95dfeb05a2ac94ead4d9d803a8fd186d2719a678b8483"}, + {file = "rapidfuzz-3.14.6-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:35db2670f69fa3a4eb4741055581477ff92f2cf39e7e06f43ebcb97c2192fe7c"}, + {file = "rapidfuzz-3.14.6-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:f9d93e5424d1e4c103b57906b8beba270e680afda3ffdff7ea3bc6173b37083c"}, + {file = "rapidfuzz-3.14.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f9b0a501f37fb852c54469375baa25874246b3bbc8b6e21fb4cd186a32335868"}, + {file = "rapidfuzz-3.14.6-cp312-cp312-win32.whl", hash = "sha256:9e974251a9833791bc557b46f975676a56c2d58946f795cd2964b095496dfdcc"}, + {file = "rapidfuzz-3.14.6-cp312-cp312-win_amd64.whl", hash = "sha256:cfca36e4612208875e08611a779164b6cb8900ab8bbd3d82d4cfdfae9efbfac9"}, + {file = "rapidfuzz-3.14.6-cp312-cp312-win_arm64.whl", hash = "sha256:96bbd5a1c67d135334d02fae74f1d933fdda204ea03d544a59dab6b1cbfbf565"}, + {file = "rapidfuzz-3.14.6.tar.gz", hash = "sha256:e13a8160d017b499ec7a2fa9d0ce1ae2e7377080815785819f966fb235d4eb60"}, +] + +[[package]] +name = "regex" +version = "2026.9.10" +requires_python = ">=3.10" +summary = "Alternative regular expression module, to replace re." +groups = ["default"] +marker = "python_version == \"3.12\"" +files = [ + {file = "regex-2026.9.10-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:880ac684c27176464c00c3fdc456116364f5ebc70da07aad0c2d4a7ba45e98db"}, + {file = "regex-2026.9.10-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b9d36b03dc362aa40ffaaec9d9bd75e87763529563ec008c43b0e07782f5be7a"}, + {file = "regex-2026.9.10-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:866de9f98df0611d7b62b3a8729d3284a64c0cc6edd90bb95a533e443a4939cb"}, + {file = "regex-2026.9.10-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4c66d54042a14a503907d81861b8a5235e6d1f03d4fbc1d8767f652eaf957ac1"}, + {file = "regex-2026.9.10-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:032da15431c890d376f53547f0a6219f4f4cd19f3e4f11bdc321453b5bd207e4"}, + {file = "regex-2026.9.10-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:23ac9a28180f274d7dd7651fa131ad5b02d343b75df4b040737f0356223895dd"}, + {file = "regex-2026.9.10-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2e67f8843f0e4b931f1fa860bf3bbe4134b714c0155cc5c7c0d7ea450230aae0"}, + {file = "regex-2026.9.10-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bb7774924f8cd69f49cba0b3c2d679a6326f777e0e67d130ad5203e4df53f0d3"}, + {file = "regex-2026.9.10-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0c32480f3371b75068decaf9e5da72c224e953830dd71e36e06cf80e30ea39d8"}, + {file = "regex-2026.9.10-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:d2d377fd1cad611b806cdd732d86b65f536c768209890cb442556548daa65a23"}, + {file = "regex-2026.9.10-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:c014641157e9049b0603b8daa5343bd408d9b757b709aaa0f373cd3fab2d7944"}, + {file = "regex-2026.9.10-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:1562aabd9d4eb09bd88a62ad97ed06800094b529ac43419e43020b9cefec79b0"}, + {file = "regex-2026.9.10-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2479171edccced52ef02b899558f88ab2c235fe05b93180fdcae1670aacd89e1"}, + {file = "regex-2026.9.10-cp312-cp312-win32.whl", hash = "sha256:239620b0e0681669367c0e218c8eb2551d9f8fe3b9fccfc8d0003377804e8348"}, + {file = "regex-2026.9.10-cp312-cp312-win_amd64.whl", hash = "sha256:4db7d00c4afbfbb55b8e17b1e371da11418ea9389b030acec63c1fa4c7ad4b86"}, + {file = "regex-2026.9.10-cp312-cp312-win_arm64.whl", hash = "sha256:c25a754bb81a2edcfc3b65eda50f017d736f818112ed43e8aafd595cb00678ae"}, + {file = "regex-2026.9.10.tar.gz", hash = "sha256:1e321e2c84f0e52c457f5ea5944f796d6e8e09cb99738ea98dcc1bfe402a128d"}, +] + +[[package]] +name = "requests" +version = "2.34.2" +requires_python = ">=3.10" +summary = "Python HTTP for Humans." +groups = ["docs", "train"] +marker = "python_version == \"3.12\"" +dependencies = [ + "certifi>=2023.5.7", + "charset-normalizer<4,>=2", + "idna<4,>=2.5", + "urllib3<3,>=1.26", +] +files = [ + {file = "requests-2.34.2-py3-none-any.whl", hash = "sha256:2a0d60c172f83ac6ab31e4554906c0f3b3588d37b5cb939b1c061f4907e278e0"}, + {file = "requests-2.34.2.tar.gz", hash = "sha256:f288924cae4e29463698d6d60bc6a4da69c89185ad1e0bcc4104f584e960b9ed"}, +] + +[[package]] +name = "rich" +version = "15.0.0" +requires_python = ">=3.9.0" +summary = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" +groups = ["default", "agent"] +marker = "python_version == \"3.12\"" +dependencies = [ + "markdown-it-py>=2.2.0", + "pygments<3.0.0,>=2.13.0", +] +files = [ + {file = "rich-15.0.0-py3-none-any.whl", hash = "sha256:33bd4ef74232fb73fe9279a257718407f169c09b78a87ad3d296f548e27de0bb"}, + {file = "rich-15.0.0.tar.gz", hash = "sha256:edd07a4824c6b40189fb7ac9bc4c52536e9780fbbfbddf6f1e2502c31b068c36"}, +] + +[[package]] +name = "roman-numerals" +version = "4.1.0" +requires_python = ">=3.10" +summary = "Manipulate well-formed Roman numerals" +groups = ["docs"] +marker = "python_version == \"3.12\"" +files = [ + {file = "roman_numerals-4.1.0-py3-none-any.whl", hash = "sha256:647ba99caddc2cc1e55a51e4360689115551bf4476d90e8162cf8c345fe233c7"}, + {file = "roman_numerals-4.1.0.tar.gz", hash = "sha256:1af8b147eb1405d5839e78aeb93131690495fe9da5c91856cb33ad55a7f1e5b2"}, +] + +[[package]] +name = "ruff" +version = "0.16.8" +requires_python = ">=3.7" +summary = "An extremely fast Python linter and code formatter, written in Rust." +groups = ["quality"] +marker = "python_version == \"3.12\"" +files = [ + {file = "ruff-0.16.8-py3-none-linux_armv6l.whl", hash = "sha256:6ffbd6d87383c1edf5f6fa890f10200950240d7c1a16052a19a09d3a2307dd38"}, + {file = "ruff-0.16.8-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:42ed6b878ed61e3acca92f2730a17acff39286944ea82398544696366a6f925e"}, + {file = "ruff-0.16.8-py3-none-macosx_11_0_arm64.whl", hash = "sha256:7ea781c7f2afba8c6a505ea0fb3f994020249e0c450635f5381286fea6b46170"}, + {file = "ruff-0.16.8-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8efeae3bbe414a5efefda11a792dfb51ef90ac48d50c4830de2f644caf3e8659"}, + {file = "ruff-0.16.8-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3a79b795469fef7fc6e908b218eed2eb17332afd85031db6480dc864560e69b2"}, + {file = "ruff-0.16.8-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3fdc5563cdc50555e6fba39322850860e9267c1b3d12c26a74729d8604c3c812"}, + {file = "ruff-0.16.8-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:34508983c70665578dab88f5223d8e6228307e1135398ca8bfc8b7e9501e282b"}, + {file = "ruff-0.16.8-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:644bb578569e0ffc575741232bd385dacdd6fbe123f1a729e7a225f54aa3957f"}, + {file = "ruff-0.16.8-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15e7d226246961db9235098333caa13063906d3851136b84c2900b82f5daa1df"}, + {file = "ruff-0.16.8-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:a2bf6bc3e9ebdd4449abc6f06cf64b98051a2c61cf94d2fe9596518c881f1a1e"}, + {file = "ruff-0.16.8-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:6ca111ba0849539165e9e59d2b442542f3c1e8060ebbdea82494f1ffbccb1e1f"}, + {file = "ruff-0.16.8-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:359a1e5b495448ee1e91018064382ebc86f90e8aac2fed222c7d0e4e8df85fd2"}, + {file = "ruff-0.16.8-py3-none-musllinux_1_2_i686.whl", hash = "sha256:59e8f5681349474110b24d62e93cfda6593f5fa3473446ca3705200cac1a08b9"}, + {file = "ruff-0.16.8-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:efa3e7a16d1baaa79957888dfdf8be9ef2e44db81cb032af06d76632ab59e773"}, + {file = "ruff-0.16.8-py3-none-win32.whl", hash = "sha256:55793ba85c69921e89be061426d91a78652d6e50317c962240922747a4eb713f"}, + {file = "ruff-0.16.8-py3-none-win_amd64.whl", hash = "sha256:a6b85621fd3c81e31fc5f5add09c9c078b430db3595ca632efafdec9e64ebfaa"}, + {file = "ruff-0.16.8-py3-none-win_arm64.whl", hash = "sha256:d075e820af612102ce217f07cc93e69f9490b10ec13ea85fa87bd03d996cef8a"}, + {file = "ruff-0.16.8.tar.gz", hash = "sha256:9247bf92b5f04d825c8639a4fe423ec2e4222acd9222e58412b0dab7e442798b"}, +] + +[[package]] +name = "safetensors" +version = "0.8.0" +requires_python = ">=3.10" +summary = "" +groups = ["default"] +marker = "python_version == \"3.12\"" +files = [ + {file = "safetensors-0.8.0-cp310-abi3-macosx_10_12_x86_64.whl", hash = "sha256:c554f85858e05226d3c2828e32395e677434685d6d94594a41643361c5e837f0"}, + {file = "safetensors-0.8.0-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:c80201d22cbf405b80647a60ada77bba06c8fba2da2743ba1e89cdcc39a81f25"}, + {file = "safetensors-0.8.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7a46e5ff292c356d6991e60942ba7f79817682d3a2cef0702136448cb9c4d235"}, + {file = "safetensors-0.8.0-cp310-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4124502b78f03534117c848f87a39b8f31e577b15eff423bf8bfb95f2a8c30d0"}, + {file = "safetensors-0.8.0-cp310-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7bc0a787ba8a35be368ee3574edfa2b1ad389eebd0a72e482ae275490e3f6c98"}, + {file = "safetensors-0.8.0-cp310-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:040070828e36dc8e122178bbbd5830ff9e97920affb84cbe0f46442497bed358"}, + {file = "safetensors-0.8.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd6f3f93c9a0a7cc2788ee63fb763353d4bd2e89b0751bc78fcf7dda00bea774"}, + {file = "safetensors-0.8.0-cp310-abi3-manylinux_2_31_riscv64.whl", hash = "sha256:fcdd41ec4628fee5799f807c73c353629130fbd942aa23d83c623dd6c9d52d78"}, + {file = "safetensors-0.8.0-cp310-abi3-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8e9f537aa183a38ace122d27303dcd986b26bd2a7591f9181d7f0c396f4677ca"}, + {file = "safetensors-0.8.0-cp310-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:87eec7ffed2b809f05a398a8becb7d013f19f7837cd15d9748580d6cf30dbaf4"}, + {file = "safetensors-0.8.0-cp310-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:4a95ae2b05d7726d751da4ebf626a2ca782b706e101bd894c95bc2450b1cffcc"}, + {file = "safetensors-0.8.0-cp310-abi3-musllinux_1_2_i686.whl", hash = "sha256:3ae091f16662658bdc019a4ff6cb4c085bb7d725eb5978b183ffd265863b6d2d"}, + {file = "safetensors-0.8.0-cp310-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:8e080062fcde23be189565e1c3305d16751a218ecf9412c8601e64204eb6f846"}, + {file = "safetensors-0.8.0-cp310-abi3-win32.whl", hash = "sha256:2ddf52eac562eda224f99acfa7889d02968c1fd59a5b011ae7d8137c37e9c02d"}, + {file = "safetensors-0.8.0-cp310-abi3-win_amd64.whl", hash = "sha256:096ec1a98435df7beb08853bb5aa9081a84f23d0adc67ed1a0a10550f608373f"}, + {file = "safetensors-0.8.0-cp310-abi3-win_arm64.whl", hash = "sha256:f7838e5135a406ad3e02efdcb8cf2e5397d368b0154537c4fec682dbc544d452"}, + {file = "safetensors-0.8.0.tar.gz", hash = "sha256:fabaf3e0f18a6618d9b36560682562157f77c2b71fcffc7b432be2baed9d753d"}, +] + +[[package]] +name = "scikit-learn" +version = "1.9.1" +requires_python = ">=3.11" +summary = "A set of python modules for machine learning and data mining" +groups = ["train"] +marker = "python_version == \"3.12\"" +dependencies = [ + "joblib>=1.4.0", + "narwhals>=2.0.1", + "numpy>=1.24.1", + "scipy>=1.10.0", + "threadpoolctl>=3.5.0", +] +files = [ + {file = "scikit_learn-1.9.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:0c0f8b5d09b44101cea2767f300680bada1ea27f976fe4b48b83950a4f55a49a"}, + {file = "scikit_learn-1.9.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:8c14ce41d561f7749f990b41d6703fe02c4669fbc485e598e069e0a1967b488e"}, + {file = "scikit_learn-1.9.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e4c20a6c017d820faa7ac8c783e3d0c6a9a2e297bf9f55332ca17cdf7fd4d04d"}, + {file = "scikit_learn-1.9.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e5d7b18a5b9dca241a74695f3275fa4c895a9dadc72b3d8df5fa9d1083c9b83e"}, + {file = "scikit_learn-1.9.1-cp312-cp312-win_amd64.whl", hash = "sha256:4b59abb30618121cc46b45972d6bf53a7128b4df4cd346c6ca6f4d5f9031e49c"}, + {file = "scikit_learn-1.9.1-cp312-cp312-win_arm64.whl", hash = "sha256:d5945a2908be62350e2978344e62b56c1552c2ca4f844ebf6277c94944d647dd"}, + {file = "scikit_learn-1.9.1.tar.gz", hash = "sha256:629cada3e33e2b9bf376cdc7614a47a4140b8aedc1d836579e359736fbd82977"}, +] + +[[package]] +name = "scipy" +version = "1.18.1" +requires_python = ">=3.12" +summary = "Fundamental algorithms for scientific computing in Python" +groups = ["train"] +marker = "python_version == \"3.12\"" +dependencies = [ + "numpy<2.8,>=2.0.0", +] +files = [ + {file = "scipy-1.18.1-cp312-cp312-macosx_10_15_x86_64.whl", hash = "sha256:457fd7a2a8edeb044ab6ffbc0aa03ff6cd18491356e5e0c834d76ce621b916d1"}, + {file = "scipy-1.18.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:e708533e8b2ae2497d65346538a7dcc92814410b25b81432eac66de0f2af8265"}, + {file = "scipy-1.18.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:7bbf207c4453ce1ad2e00b17313852b33310b83090c2311bdaf97f93c0380d12"}, + {file = "scipy-1.18.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:78c0665edead396b1abb4897c41a5c1d9bf090c8a637a4c20a61678e0a264e66"}, + {file = "scipy-1.18.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3c085faa2cfa879c5141df483f836f4d691045a078224a670fa570fa01612d89"}, + {file = "scipy-1.18.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f55fa87b6c612ecd6b058f167c53231b1d14e412efe361d3d6e38b3631c73218"}, + {file = "scipy-1.18.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c35d74ce0e193ff740c2f2be2ac913ddc232fe6c1ff40b26cfecb9c670c63314"}, + {file = "scipy-1.18.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d2924a03db38dc2e848bca2fe9f077dafb891480b91a00a0963a8cf86dfc31c1"}, + {file = "scipy-1.18.1-cp312-cp312-win_amd64.whl", hash = "sha256:5e4d44984abc0020154ea81b247adeddcc3ac5527b975ff798bd1ba0adc513c2"}, + {file = "scipy-1.18.1-cp312-cp312-win_arm64.whl", hash = "sha256:d65d448389b8436493abcf629cc94ad0cf32aecaf06e1acca1de53cc795f2f12"}, + {file = "scipy-1.18.1.tar.gz", hash = "sha256:52c4b7422442aba924d03ad4019852b08a92e64ea187b933135687bfe2747307"}, +] + +[[package]] +name = "setuptools" +version = "84.0.0" +requires_python = ">=3.10" +summary = "Most extensible Python build backend with support for C/C++ extension modules" +groups = ["default"] +marker = "python_version == \"3.12\"" +files = [ + {file = "setuptools-84.0.0-py3-none-any.whl", hash = "sha256:51a52592b3b99e102b609654876bd65f19f999935166d1352678931132b0c670"}, + {file = "setuptools-84.0.0.tar.gz", hash = "sha256:f4695c21257f0d9b537ec2692c941d02ee143b7cc1276941349a546573b2ef73"}, +] + +[[package]] +name = "shellingham" +version = "1.5.4" +requires_python = ">=3.7" +summary = "Tool to Detect Surrounding Shell" +groups = ["default", "agent"] +marker = "python_version == \"3.12\"" +files = [ + {file = "shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686"}, + {file = "shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de"}, +] + +[[package]] +name = "six" +version = "1.17.0" +requires_python = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +summary = "Python 2 and 3 compatibility utilities" +groups = ["plot", "train"] +marker = "python_version == \"3.12\"" +files = [ + {file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"}, + {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"}, +] + +[[package]] +name = "sniffio" +version = "1.3.1" +requires_python = ">=3.7" +summary = "Sniff out which async library your code is running under" +groups = ["agent"] +marker = "python_version == \"3.12\"" +files = [ + {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, + {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, +] + +[[package]] +name = "snowballstemmer" +version = "3.1.1" +requires_python = ">=3.3" +summary = "This package provides 36 stemmers for 34 languages generated from Snowball algorithms." +groups = ["docs"] +marker = "python_version == \"3.12\"" +files = [ + {file = "snowballstemmer-3.1.1-py3-none-any.whl", hash = "sha256:7e207fa178741da09cdee59d3ecec3827ad5f92b1fc5c9ff3755b639f71f5752"}, + {file = "snowballstemmer-3.1.1.tar.gz", hash = "sha256:e07bbc54a0d798fe6010a12398422e62a8bfbba95c394fd0956ef58cb4d3e260"}, +] + +[[package]] +name = "socksio" +version = "1.0.0" +requires_python = ">=3.6" +summary = "Sans-I/O implementation of SOCKS4, SOCKS4A, and SOCKS5." +groups = ["agent"] +marker = "python_version == \"3.12\"" +files = [ + {file = "socksio-1.0.0-py3-none-any.whl", hash = "sha256:95dc1f15f9b34e8d7b16f06d74b8ccf48f609af32ab33c608d08761c5dcbb1f3"}, + {file = "socksio-1.0.0.tar.gz", hash = "sha256:f88beb3da5b5c38b9890469de67d0cb0f9d494b78b106ca1845f96c10b91c4ac"}, +] + +[[package]] +name = "soupsieve" +version = "2.9.2" +requires_python = ">=3.10" +summary = "A modern CSS selector implementation for Beautiful Soup." +groups = ["docs"] +marker = "python_version == \"3.12\"" +files = [ + {file = "soupsieve-2.9.2-py3-none-any.whl", hash = "sha256:8089a26fd974ca7a1f30276d3d8492ab266ab15af581642dfe8aa162e0c1c823"}, + {file = "soupsieve-2.9.2.tar.gz", hash = "sha256:4a55d8cf158a9c2e587fa4922f1bbb91d68ac829e2d6f25403a85747c71daf74"}, +] + +[[package]] +name = "sphinx" +version = "9.1.0" +requires_python = ">=3.12" +summary = "Python documentation generator" +groups = ["docs"] +marker = "python_version == \"3.12\"" +dependencies = [ + "Jinja2>=3.1", + "Pygments>=2.17", + "alabaster>=0.7.14", + "babel>=2.13", + "colorama>=0.4.6; sys_platform == \"win32\"", + "docutils<0.23,>=0.21", + "imagesize>=1.3", + "packaging>=23.0", + "requests>=2.30.0", + "roman-numerals>=1.0.0", + "snowballstemmer>=2.2", + "sphinxcontrib-applehelp>=1.0.7", + "sphinxcontrib-devhelp>=1.0.6", + "sphinxcontrib-htmlhelp>=2.0.6", + "sphinxcontrib-jsmath>=1.0.1", + "sphinxcontrib-qthelp>=1.0.6", + "sphinxcontrib-serializinghtml>=1.1.9", +] +files = [ + {file = "sphinx-9.1.0-py3-none-any.whl", hash = "sha256:c84fdd4e782504495fe4f2c0b3413d6c2bf388589bb352d439b2a3bb99991978"}, + {file = "sphinx-9.1.0.tar.gz", hash = "sha256:7741722357dd75f8190766926071fed3bdc211c74dd2d7d4df5404da95930ddb"}, +] + +[[package]] +name = "sphinx-basic-ng" +version = "1.0.0b2" +requires_python = ">=3.7" +summary = "A modern skeleton for Sphinx themes." +groups = ["docs"] +marker = "python_version == \"3.12\"" +dependencies = [ + "sphinx>=4.0", +] +files = [ + {file = "sphinx_basic_ng-1.0.0b2-py3-none-any.whl", hash = "sha256:eb09aedbabfb650607e9b4b68c9d240b90b1e1be221d6ad71d61c52e29f7932b"}, + {file = "sphinx_basic_ng-1.0.0b2.tar.gz", hash = "sha256:9ec55a47c90c8c002b5960c57492ec3021f5193cb26cebc2dc4ea226848651c9"}, +] + +[[package]] +name = "sphinxcontrib-applehelp" +version = "2.0.0" +requires_python = ">=3.9" +summary = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books" +groups = ["docs"] +marker = "python_version == \"3.12\"" +files = [ + {file = "sphinxcontrib_applehelp-2.0.0-py3-none-any.whl", hash = "sha256:4cd3f0ec4ac5dd9c17ec65e9ab272c9b867ea77425228e68ecf08d6b28ddbdb5"}, + {file = "sphinxcontrib_applehelp-2.0.0.tar.gz", hash = "sha256:2f29ef331735ce958efa4734873f084941970894c6090408b079c61b2e1c06d1"}, +] + +[[package]] +name = "sphinxcontrib-devhelp" +version = "2.0.0" +requires_python = ">=3.9" +summary = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp documents" +groups = ["docs"] +marker = "python_version == \"3.12\"" +files = [ + {file = "sphinxcontrib_devhelp-2.0.0-py3-none-any.whl", hash = "sha256:aefb8b83854e4b0998877524d1029fd3e6879210422ee3780459e28a1f03a8a2"}, + {file = "sphinxcontrib_devhelp-2.0.0.tar.gz", hash = "sha256:411f5d96d445d1d73bb5d52133377b4248ec79db5c793ce7dbe59e074b4dd1ad"}, +] + +[[package]] +name = "sphinxcontrib-htmlhelp" +version = "2.1.0" +requires_python = ">=3.9" +summary = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" +groups = ["docs"] +marker = "python_version == \"3.12\"" +files = [ + {file = "sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl", hash = "sha256:166759820b47002d22914d64a075ce08f4c46818e17cfc9470a9786b759b19f8"}, + {file = "sphinxcontrib_htmlhelp-2.1.0.tar.gz", hash = "sha256:c9e2916ace8aad64cc13a0d233ee22317f2b9025b9cf3295249fa985cc7082e9"}, +] + +[[package]] +name = "sphinxcontrib-jsmath" +version = "1.0.1" +requires_python = ">=3.5" +summary = "A sphinx extension which renders display math in HTML via JavaScript" +groups = ["docs"] +marker = "python_version == \"3.12\"" +files = [ + {file = "sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"}, + {file = "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178"}, +] + +[[package]] +name = "sphinxcontrib-qthelp" +version = "2.0.0" +requires_python = ">=3.9" +summary = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp documents" +groups = ["docs"] +marker = "python_version == \"3.12\"" +files = [ + {file = "sphinxcontrib_qthelp-2.0.0-py3-none-any.whl", hash = "sha256:b18a828cdba941ccd6ee8445dbe72ffa3ef8cbe7505d8cd1fa0d42d3f2d5f3eb"}, + {file = "sphinxcontrib_qthelp-2.0.0.tar.gz", hash = "sha256:4fe7d0ac8fc171045be623aba3e2a8f613f8682731f9153bb2e40ece16b9bbab"}, +] + +[[package]] +name = "sphinxcontrib-serializinghtml" +version = "2.0.0" +requires_python = ">=3.9" +summary = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)" +groups = ["docs"] +marker = "python_version == \"3.12\"" +files = [ + {file = "sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl", hash = "sha256:6e2cb0eef194e10c27ec0023bfeb25badbbb5868244cf5bc5bdc04e4464bf331"}, + {file = "sphinxcontrib_serializinghtml-2.0.0.tar.gz", hash = "sha256:e9d912827f872c029017a53f0ef2180b327c3f7fd23c87229f7a8e8b70031d4d"}, +] + +[[package]] +name = "sympy" +version = "1.14.0" +requires_python = ">=3.9" +summary = "Computer algebra system (CAS) in Python" +groups = ["default"] +marker = "python_version == \"3.12\"" +dependencies = [ + "mpmath<1.4,>=1.1.0", +] +files = [ + {file = "sympy-1.14.0-py3-none-any.whl", hash = "sha256:e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5"}, + {file = "sympy-1.14.0.tar.gz", hash = "sha256:d3d3fe8df1e5a0b42f0e7bdf50541697dbe7d23746e894990c030e2b05e72517"}, +] + +[[package]] +name = "textual" +version = "8.2.8" +requires_python = "<4.0,>=3.9" +summary = "Modern Text User Interface framework" +groups = ["agent"] +marker = "python_version == \"3.12\"" +dependencies = [ + "markdown-it-py[linkify]>=2.1.0", + "mdit-py-plugins", + "platformdirs<5,>=3.6.0", + "pygments<3.0.0,>=2.19.2", + "rich>=14.2.0", + "typing-extensions<5.0.0,>=4.4.0", +] +files = [ + {file = "textual-8.2.8-py3-none-any.whl", hash = "sha256:267375fd402dc8d981457212efa71f0e3365fd17bba144ba9bb3ed7563cb374a"}, + {file = "textual-8.2.8.tar.gz", hash = "sha256:3f106a9fbc73e39dd266c9712432087de78a6d644084c7c241d6a25c3169115b"}, +] + +[[package]] +name = "threadpoolctl" +version = "3.7.0" +requires_python = ">=3.9" +summary = "threadpoolctl" +groups = ["train"] +marker = "python_version == \"3.12\"" +files = [ + {file = "threadpoolctl-3.7.0-py3-none-any.whl", hash = "sha256:cd8b60b5641b45c67bbf73c64c843235fc2d8a480c87389f52f5dbee893b86be"}, + {file = "threadpoolctl-3.7.0.tar.gz", hash = "sha256:61348cfb77d53b9242e0017029244b559b810c142ced65b4e21eeca1843959a7"}, +] + +[[package]] +name = "tokenizers" +version = "0.23.2" +requires_python = ">=3.10" +summary = "" +groups = ["default"] +marker = "python_version == \"3.12\"" +dependencies = [ + "huggingface-hub<2.0,>=0.16.4", +] +files = [ + {file = "tokenizers-0.23.2-cp310-abi3-macosx_10_12_x86_64.whl", hash = "sha256:85a9a357a3764aecc904ee76bdaf8cf1ad8e5a67a1b929a487c4a39b49ed0e90"}, + {file = "tokenizers-0.23.2-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:986670e43691469dcee610ea0f846f91a8f84e91fc6f7a48d4c064414c0ec2bf"}, + {file = "tokenizers-0.23.2-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a37039b5dfc4af84eb3ef0a92f4307e28936c8f9adccba2629d36f652e9bf7a2"}, + {file = "tokenizers-0.23.2-cp310-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7b7e37ba198f24150f523e1242e83c4970de4a525480586be5dcc24d9add32c5"}, + {file = "tokenizers-0.23.2-cp310-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:43e4f2071e3cc8d5d86421c874aebc82659bb51a68bcdef5a0da75ee89511ccb"}, + {file = "tokenizers-0.23.2-cp310-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:325fee2e0418a9dc6c9ecf736a5f5f0db7875183ace9549ae339da76f7a1fbb7"}, + {file = "tokenizers-0.23.2-cp310-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:950d7c9426fa72406a0ffeacdbc0bb9985f5db20eb8b263f29c79aaf83105703"}, + {file = "tokenizers-0.23.2-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:41c2f84d172449b4dadb9cdc508e3e364076613c35b16e76ecfe47a60d1e3305"}, + {file = "tokenizers-0.23.2-cp310-abi3-manylinux_2_31_riscv64.whl", hash = "sha256:12f0835dc2ee694746a76adf7b1567d4346a4a502ebe93fb1f5f80ea49799b78"}, + {file = "tokenizers-0.23.2-cp310-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:eb2f9c8a24da020ea8c11a01a19c1c2547912d92121ae4a01cfbca46125dee40"}, + {file = "tokenizers-0.23.2-cp310-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:f486f402f6f9abee5bb032553736813af0c710a86b2e0ca592634c55cea1f835"}, + {file = "tokenizers-0.23.2-cp310-abi3-musllinux_1_2_i686.whl", hash = "sha256:bef235815a067b2648caf6dcc7a71091b0b0fff9ee8057f6451eb9335fae52ef"}, + {file = "tokenizers-0.23.2-cp310-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:5c56bda1511921587789163e524d196ed8284174ac23abd7685d5ea8da6c4718"}, + {file = "tokenizers-0.23.2-cp310-abi3-win32.whl", hash = "sha256:debf978920d93ba9c219bd67cc4bbfaf912c9039e41e7a28b91ec15e3728c95a"}, + {file = "tokenizers-0.23.2-cp310-abi3-win_amd64.whl", hash = "sha256:2e96f5699d5249c9c64aa8412e044f727aae3a4098cf830f9901ec1afc361cde"}, + {file = "tokenizers-0.23.2-cp310-abi3-win_arm64.whl", hash = "sha256:e49c394456dd9985787fec76132438ba3fb8911f857b1bf3d40119f9292d41aa"}, + {file = "tokenizers-0.23.2.tar.gz", hash = "sha256:7f0f085686b9de0d0079e6f874ae053600db64c5d13049e0bbc0119926d25aac"}, +] + +[[package]] +name = "torch" +version = "2.9.1" +requires_python = ">=3.10" +summary = "Tensors and Dynamic neural networks in Python with strong GPU acceleration" +groups = ["default"] +marker = "python_version == \"3.12\"" +dependencies = [ + "filelock", + "fsspec>=0.8.5", + "jinja2", + "networkx>=2.5.1", + "pytorch-triton-rocm==3.5.1; platform_system == \"Linux\"", + "setuptools; python_version >= \"3.12\"", + "sympy>=1.13.3", + "typing-extensions>=4.10.0", +] +files = [ + {file = "torch-2.9.1+rocm6.4-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:43471c9e4520402b5feeebd6c6d180e8bf2314402925798fe219c32fecd1ef95"}, +] + +[[package]] +name = "torchvision" +version = "0.24.1" +requires_python = ">=3.10" +summary = "image and video datasets and models for torch deep learning" +groups = ["default"] +marker = "python_version == \"3.12\"" +dependencies = [ + "numpy", + "pillow!=8.3.*,>=5.3.0", + "torch==2.9.1", +] +files = [ + {file = "torchvision-0.24.1+rocm6.4-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:228a872b64bfe12c7ff48389100759d768a3380315180531b095ec18f681277d"}, +] + +[[package]] +name = "tqdm" +version = "4.70.1" +requires_python = ">=3.8" +summary = "Fast, Extensible Progress Meter" +groups = ["default", "train"] +marker = "python_version == \"3.12\"" +dependencies = [ + "colorama; platform_system == \"Windows\"", +] +files = [ + {file = "tqdm-4.70.1-py3-none-any.whl", hash = "sha256:c293e525e6fef9c20e8728fd4612df02a0aa31bb5fe91ecd93e123b1b7bffa73"}, + {file = "tqdm-4.70.1.tar.gz", hash = "sha256:cefd0eca11b2a37a3aee776544d4f4ae913f02688135b5556b8788dfa474afc4"}, +] + +[[package]] +name = "transformers" +version = "5.17.0" +requires_python = ">=3.10.0" +summary = "Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and multimodal models, for both inference and training." +groups = ["default"] +marker = "python_version == \"3.12\"" +dependencies = [ + "huggingface-hub<2.0,>=1.5.0", + "numpy>=1.17", + "packaging>=20.0", + "pyyaml>=5.1", + "regex>=2025.10.22", + "safetensors>=0.8.0", + "tokenizers<0.24.0,>=0.23.1", + "tqdm>=4.60", + "typer", +] +files = [ + {file = "transformers-5.17.0-py3-none-any.whl", hash = "sha256:78ec1ce21579b38dfb83950a0658cd119f87212a2fcfdff478096ce9d6c03801"}, + {file = "transformers-5.17.0.tar.gz", hash = "sha256:a153be279169b55b92d8000bf4af294aed684503d091cca7804da2dd8a9de000"}, +] + +[[package]] +name = "truststore" +version = "0.10.4" +requires_python = ">=3.10" +summary = "Verify certificates using native system trust stores" +groups = ["agent"] +marker = "sys_platform != \"emscripten\" and python_version == \"3.12\"" +files = [ + {file = "truststore-0.10.4-py3-none-any.whl", hash = "sha256:adaeaecf1cbb5f4de3b1959b42d41f6fab57b2b1666adb59e89cb0b53361d981"}, + {file = "truststore-0.10.4.tar.gz", hash = "sha256:9d91bd436463ad5e4ee4aba766628dd6cd7010cf3e2461756b3303710eebc301"}, +] + +[[package]] +name = "ty" +version = "0.0.82" +requires_python = ">=3.8" +summary = "An extremely fast Python type checker, written in Rust." +groups = ["quality"] +marker = "python_version == \"3.12\"" +files = [ + {file = "ty-0.0.82-py3-none-linux_armv6l.whl", hash = "sha256:be58e089e317e1ada7a655216828e76d369386dc958f7a3b3d455ab6dc7f02b6"}, + {file = "ty-0.0.82-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:c080ba9a816cfbb3e34c0d3a0071829c602d14bb992bc799d885d4b30008b4ab"}, + {file = "ty-0.0.82-py3-none-macosx_11_0_arm64.whl", hash = "sha256:4f08bd5b751c3b2c46eabe8aee890e7fa54e3bcd97ffa4b8338b0a2508d928c2"}, + {file = "ty-0.0.82-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f5ef0401743c2eeac8039ef9ff1bc5dd612bd17ed0259b9b0794e19696548a6"}, + {file = "ty-0.0.82-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c899643f2a4c1782c06a4bf4959909d1aa2d9d2cac7c1ac3de3161dfcb6909f8"}, + {file = "ty-0.0.82-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b7aa6e4e157c6e0b770c327a5d966371b2a7bc7ad4f22d662ac068623cba00eb"}, + {file = "ty-0.0.82-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:28c141ab481748f1b889eb572e803172ea452af621e514c30a2f30884753b020"}, + {file = "ty-0.0.82-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:16fff2729fbaa3998ba1cab536dc7d176aef28927b09200588e50982394c56df"}, + {file = "ty-0.0.82-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c2024a33209b37525ffa85a29036985e9ef53a013c0ff321231bd8b23987cf71"}, + {file = "ty-0.0.82-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:14a0ae8591e08aca5911b545d100e51c9b796350a85b2b36d82219820552d662"}, + {file = "ty-0.0.82-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:2964202b09108c72232760119c2680cefc33191c428b09e6f620b6c0ab9c6b0f"}, + {file = "ty-0.0.82-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:f4ed8fc714e35dc11ef4209832e73ad461cf29c9161099eb6c2c541c6b9a3e0e"}, + {file = "ty-0.0.82-py3-none-musllinux_1_2_i686.whl", hash = "sha256:32a3fe7b1a50f20679fe76c85c0087280419365d900300898a7b95cbcfe510fc"}, + {file = "ty-0.0.82-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:f751044ae63ea9e73ce2eae4c23a839efa4a04d6487d6ea411a590fbe43360b6"}, + {file = "ty-0.0.82-py3-none-win32.whl", hash = "sha256:0eb66c5ce58434a48d2cae2780d25285c7ca19e07a0d38b1fe39d1a0f75d6fa3"}, + {file = "ty-0.0.82-py3-none-win_amd64.whl", hash = "sha256:1e4a6c1ca2dc1a6929517d73a47cd626989bb8bd67811425fbe022d06eb2bf73"}, + {file = "ty-0.0.82-py3-none-win_arm64.whl", hash = "sha256:a6f0e8a1f961518746edbccc5986945c01a56a917ebe37117aa028a038d54ae3"}, + {file = "ty-0.0.82.tar.gz", hash = "sha256:586e3bf784cece42113929bb64b4761bed5c2127ae6cea294bb82da670066356"}, +] + +[[package]] +name = "typer" +version = "0.27.2" +requires_python = ">=3.10" +summary = "Typer, build great CLIs. Easy to code. Based on Python type hints." +groups = ["default", "agent"] +marker = "python_version == \"3.12\"" +dependencies = [ + "annotated-doc>=0.0.2", + "colorama; platform_system == \"Windows\"", + "rich>=13.8.0", + "shellingham>=1.3.0", +] +files = [ + {file = "typer-0.27.2-py3-none-any.whl", hash = "sha256:b3a5fc4342d5fc8fda8fc3010b1cf117e9249aab7fae800c2eff62fd3842d97d"}, + {file = "typer-0.27.2.tar.gz", hash = "sha256:269b7eb9d3c202ca84b4bc9618cb04ebb43d3d4d1e567e4c768607232c05f945"}, +] + +[[package]] +name = "typing-extensions" +version = "4.16.0" +requires_python = ">=3.9" +summary = "Backported and Experimental Type Hints for Python 3.9+" +groups = ["default", "agent", "docs", "train"] +marker = "python_version == \"3.12\"" +files = [ + {file = "typing_extensions-4.16.0-py3-none-any.whl", hash = "sha256:481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8"}, + {file = "typing_extensions-4.16.0.tar.gz", hash = "sha256:dc983d19a509c94dba722ee6abd33940f7c05a89e243c47e907eb4db6f1a43e5"}, +] + +[[package]] +name = "typing-inspection" +version = "0.4.4" +requires_python = ">=3.10" +summary = "Runtime typing introspection tools" +groups = ["agent"] +marker = "python_version == \"3.12\"" +dependencies = [ + "typing-extensions>=4.15.0", +] +files = [ + {file = "typing_inspection-0.4.4-py3-none-any.whl", hash = "sha256:65b8397ba37ccbce054456aaccddfc91e6e3083c92824df348d96ca832f3f147"}, + {file = "typing_inspection-0.4.4.tar.gz", hash = "sha256:547274fa6b0a561ccf549cc9524b999a578e737d015d8709d021f9d0d13bea47"}, +] + +[[package]] +name = "tzdata" +version = "2026.4" +requires_python = ">=2" +summary = "Provider of IANA time zone data" +groups = ["train"] +marker = "(sys_platform == \"win32\" or sys_platform == \"emscripten\") and python_version == \"3.12\"" +files = [ + {file = "tzdata-2026.4-py2.py3-none-any.whl", hash = "sha256:c2169a8b0a7a5e9674da5a135ccdfb2b3e671b333ed9fed17b41f73c34476e81"}, + {file = "tzdata-2026.4.tar.gz", hash = "sha256:f1b8bd365d8d210c55353f4d7f8d6d8561c0ba50d704b700d195a9424bba0d79"}, +] + +[[package]] +name = "urllib3" +version = "2.8.0" +requires_python = ">=3.10" +summary = "HTTP library with thread-safe connection pooling, file post, and more." +groups = ["docs", "train"] +marker = "python_version == \"3.12\"" +files = [ + {file = "urllib3-2.8.0-py3-none-any.whl", hash = "sha256:0cf3cae568d36aa9576b28dfb35f11328f1cb974ca7647d9475ebb86c75ac6e3"}, + {file = "urllib3-2.8.0.tar.gz", hash = "sha256:63bf2ead4c879426ebf22ef2a781eeb4aa3b4ae798a0435506f8687fd5bb9b63"}, +] + +[[package]] +name = "wcwidth" +version = "0.8.4" +requires_python = ">=3.8" +summary = "Measures the displayed width of unicode strings in a terminal" +groups = ["agent"] +marker = "python_version == \"3.12\"" +files = [ + {file = "wcwidth-0.8.4-py3-none-any.whl", hash = "sha256:2097bb1d28a0ba8fe177c2eb607317f9b1627b03f33ebebfd3da670b337a65ba"}, + {file = "wcwidth-0.8.4.tar.gz", hash = "sha256:2dae09efa25253ae2874188e86d6861af3b1652aef4118cdf3f0bda288a957fb"}, +] + +[[package]] +name = "win32-setctime" +version = "1.2.0" +requires_python = ">=3.5" +summary = "A small Python utility to set file creation time on Windows" +groups = ["agent"] +marker = "sys_platform == \"win32\" and python_version == \"3.12\"" +files = [ + {file = "win32_setctime-1.2.0-py3-none-any.whl", hash = "sha256:95d644c4e708aba81dc3704a116d8cbc974d70b3bdb8be1d150e36be6e9d1390"}, + {file = "win32_setctime-1.2.0.tar.gz", hash = "sha256:ae1fdf948f5640aae05c511ade119313fb6a30d7eabe25fef9764dca5873c4c0"}, +] + +[[package]] +name = "xxhash" +version = "4.0.1" +requires_python = ">=3.9" +summary = "Python binding for xxHash" +groups = ["train"] +marker = "python_version == \"3.12\"" +files = [ + {file = "xxhash-4.0.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:1ee523f51718e41753f04f7102bb4dc55a18d2ea5cbaceef8ec7ca08571bd428"}, + {file = "xxhash-4.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:515a822c73abbf6a0b7c70976d9662be342835c9d78b8dc7c023411f39c35dbc"}, + {file = "xxhash-4.0.1-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:f5d031f35962e5483a613214e61f09fe24ab523062c3646d592dc16c4a217451"}, + {file = "xxhash-4.0.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:da0264844a09b538c894e5eff25313d941deb4dedec2131b98418a71a3c9944e"}, + {file = "xxhash-4.0.1-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:1642907941ee4b75aacc3db688af52ea02ca2305ab22af7ee686ed726b332684"}, + {file = "xxhash-4.0.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4af350bc3f329970c0e3a59af84a8a30998bf8a9167eb50cd48e59baaa1d7bec"}, + {file = "xxhash-4.0.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8ba782ca3bf1e81492611152b9a0d5264971339e95e34d69de0ac2c926be496d"}, + {file = "xxhash-4.0.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:237b8f63a2a0fcfb1ffc06e21dad23add44e6d354b2b014364a1d41e419a4dee"}, + {file = "xxhash-4.0.1-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:81507a68ba84c55241fb61cce1469f473a5da4205fc8ef6f698e5948eea8dd88"}, + {file = "xxhash-4.0.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5f1ea31d61bcd2cd2f3ec4ca80a64187bbd7948f490b63cf0dcbc6e717b4c1e9"}, + {file = "xxhash-4.0.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:06713a5aaf1d0905c5579416c020c02e42b3ceb931e86c7d3b7fb85403dee3f3"}, + {file = "xxhash-4.0.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:e8cda075b10bb3917b002c74a04f9e02b7d13b5bf732571404d51c52b11c7329"}, + {file = "xxhash-4.0.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c10b9206753b64aa791b35b201485477525b26fdec5bf86e8364c388a03e2592"}, + {file = "xxhash-4.0.1-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:f3e1a44af01b6692de0ec6caba5f0bf93ceb36896e02b7fc00952c6ea7ef39e1"}, + {file = "xxhash-4.0.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:c6fc415b5568bd9accc7187f1729a99707330c0a67a8b9f93c1149ed573ed75d"}, + {file = "xxhash-4.0.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:96d8de55029d42251945531f6aa7590c32b48163c66a43bf29d8657d7446a377"}, + {file = "xxhash-4.0.1-cp312-cp312-pyemscripten_2024_0_wasm32.whl", hash = "sha256:0163b5d259de23ae9e07b7eabf435ce4704f6f205589a2b154e6af4be985ce1b"}, + {file = "xxhash-4.0.1-cp312-cp312-win32.whl", hash = "sha256:1216f7ba5683f17a89eb7dcb4bc50a0b743dfe1902278d7b3d0786f538118433"}, + {file = "xxhash-4.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:5c2d525a3afabcd8e3549d85fc7e111fde6bc302d06a1893fe73adb79823415e"}, + {file = "xxhash-4.0.1-cp312-cp312-win_arm64.whl", hash = "sha256:86b2b12bec60c678ed8f5cca0258ad93a8928ebddb6ca7732f0875afe1451d1a"}, + {file = "xxhash-4.0.1.tar.gz", hash = "sha256:d55bf4ef10eb09b8b6866790e083d26d087d84caa3cc0946ba87c3ca7ecaf7b7"}, +] + +[[package]] +name = "yarl" +version = "1.25.1" +requires_python = ">=3.10" +summary = "Yet another URL library" +groups = ["agent", "train"] +marker = "python_version == \"3.12\"" +dependencies = [ + "idna>=2.0", + "multidict>=4.0", + "propcache>=0.2.1", +] +files = [ + {file = "yarl-1.25.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:94d7aa6debf92a1dd14cb5280b083a764169a13cfb23a452111160274ed989f4"}, + {file = "yarl-1.25.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:83d4a37e4b95da4d8bda930d6d35b75b4cdadbacbb4980cae290ea3100b5d51d"}, + {file = "yarl-1.25.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e029648f9c951db30e98a7d7ec90835db88ec4b32820efe2a9bdc2287e032eb6"}, + {file = "yarl-1.25.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4d781294bb815ecb5ea57ff6bbf8038e0a31a95fdf3e1788f66e0dc100d64b58"}, + {file = "yarl-1.25.1-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e12c538e00e7c1b286a07061046b90e8124e6a9793efae2c70db6a4aad07faad"}, + {file = "yarl-1.25.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7e4de3ac4adbad3d0bc7c6f4360a7dbff5de2f15e3b723be3198074e17fd9c40"}, + {file = "yarl-1.25.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:419f392a1da624877975709e3864dfe833af6cc7671b39318086d456e288380c"}, + {file = "yarl-1.25.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c6f117789d22dce188e5754e8bc65b7e6ebf8cb73963b9fa761f672a5883769d"}, + {file = "yarl-1.25.1-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:80e47012e730da131c9f059c80936783f9659aae22dc31c03c0595590d11ed54"}, + {file = "yarl-1.25.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e80f557716fd765439577131e526b8942ffc2c07bdbc5e39fa62f660ba1e963f"}, + {file = "yarl-1.25.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:f61964f235a43738bfac50da46fc4254943a7eea3051aeb0b6fc7c992c29fadc"}, + {file = "yarl-1.25.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:e546fe1d4a93ebc2910f0d768baff19faa09843ab3f2036a67ed6e69fae4419d"}, + {file = "yarl-1.25.1-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:cce0727fd5ac04d372fa9bbfde9febc2bcf209aadfcf0468e45dec72719895d1"}, + {file = "yarl-1.25.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:af4ea5b37403ef4e30f3927eaed540db942bde01d8d3ff083527c0704d1c9c68"}, + {file = "yarl-1.25.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:68782fdb4027b8d1eee25ec35e9a6db05e863b899eb0310b3a33b6c3fef55707"}, + {file = "yarl-1.25.1-cp312-cp312-win_amd64.whl", hash = "sha256:7d575b54cb3863ef9bc290ea4b009999d55dc237326131e4853cf33e888fee03"}, + {file = "yarl-1.25.1-cp312-cp312-win_arm64.whl", hash = "sha256:bc3ac7bf569f6b64dad04dd7808c7872dae8a97df657856eac05e9b7e3614a85"}, + {file = "yarl-1.25.1-py3-none-any.whl", hash = "sha256:681c758b0490f9e96b78e5fa8e8dc6e648e9185bb6eaebe73183c33ea0c445f3"}, + {file = "yarl-1.25.1.tar.gz", hash = "sha256:03dd38de09bc213e9a8b29761eec33ee1d5318dac0e49d8af36e4d27830e23a7"}, +] diff --git a/pdm.toml b/pdm.toml new file mode 100644 index 0000000..aaa6420 --- /dev/null +++ b/pdm.toml @@ -0,0 +1,2 @@ +# Package-to-index bindings are required for the recorded ROCm runtime. +use_uv = false diff --git a/pyproject.toml b/pyproject.toml index 2bebb64..c775edc 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [build-system] -requires = ["setuptools>=77"] -build-backend = "setuptools.build_meta" +requires = ["pdm-backend>=2.4,<3"] +build-backend = "pdm.backend" [project] name = "dohnuts" @@ -8,7 +8,7 @@ version = "0.1.0" readme = "README.md" description = "Python tools for training, running, and evaluating Dohnuts models." license = "Apache-2.0" -license-files = ["LICENSE"] +license-files = ["LICENSE", "NOTICE"] requires-python = ">=3.12" dependencies = [ "torch>=2.9", @@ -24,14 +24,60 @@ dependencies = [ train = ["pyarrow>=25", "scikit-learn>=1.9", "pandas>=3.0", "datasets>=4"] agent = ["bub @ git+https://github.com/bubbuild/bub.git@9bf70488e22a44eeb875a9d55d9a7d352b82e381"] +[dependency-groups] +quality = ["ruff==0.16.8", "ty==0.0.82", "prek>=0.3.1,<1", "pytest>=9,<10"] +docs = ["sphinx==9.1.0", "furo==2025.12.19", "myst-parser==5.1.0"] +plot = ["matplotlib==3.11.2", "numpy==2.5.3"] + [project.urls] Homepage = "https://github.com/PsiACE/dohnuts" Documentation = "https://github.com/PsiACE/dohnuts/tree/main/docs" Models = "https://huggingface.co/PsiACE/Dohnuts-0.1.0-0.8B" Issues = "https://github.com/PsiACE/dohnuts/issues" -[tool.setuptools.packages.find] -where = ["src"] +[tool.pdm] +distribution = true +requires-pdm = ">=2.29.2,<3" + +[tool.pdm.build] +package-dir = "src" +includes = ["src/dohnuts"] +source-includes = [ + "tests", "scripts", "docs", "results", "assets/dohnuts-logo.png", + "MODEL_CARD.md", "index.md", "Makefile", "NOTICE", "pdm.lock", "pdm.toml", + ".python-version", ".pre-commit-config.yaml", +] + +[[tool.pdm.source]] +name = "pypi" +url = "https://pypi.org/simple" +exclude_packages = ["torch", "torchvision", "pytorch-triton-rocm"] + +[[tool.pdm.source]] +name = "pytorch-rocm" +url = "https://download.pytorch.org/whl/rocm6.4" +include_packages = ["torch", "torchvision", "pytorch-triton-rocm"] +exclude_packages = ["*"] + +[tool.pdm.scripts] +lint = "ruff check ." +format = "ruff format ." +format-check = "ruff format --check ." +typecheck = "ty check src" +check = { composite = ["lint", "format-check", "typecheck"] } +test = "pytest" +docs = "sphinx-build -b html -W --keep-going -d build/doctrees -c docs . build/site" +docs-serve = "python -m http.server 8000 --bind 127.0.0.1 --directory build/site" + +[tool.pytest.ini_options] +testpaths = ["tests"] +addopts = ["--strict-config", "--strict-markers"] [tool.ruff] +target-version = "py312" line-length = 100 + +[tool.ruff.lint] +select = ["E4", "E7", "E9", "F", "I", "UP", "B", "PT"] +# Keep existing zip truncation semantics; review strictness at each call site. +ignore = ["B905"] diff --git a/scripts/plot_model_card.py b/scripts/plot_model_card.py index 3c2c26e..f2022de 100644 --- a/scripts/plot_model_card.py +++ b/scripts/plot_model_card.py @@ -1,6 +1,6 @@ """Render model-card comparisons from a completed run; requires matplotlib. -Run: .cache/plot-venv/bin/python scripts/plot_model_card.py --run runs/v1 +Run: pdm run python scripts/plot_model_card.py --run runs/v1 Outputs: six PNG/SVG/PDF figures, a PDF collection, data and provenance. """ @@ -491,7 +491,7 @@ def save(fig, name, notes, description): ax = fig.add_axes([0.205, 0.29, 0.74, 0.43]) for i, system in enumerate(["jev", "laya-multilingual", "laya-vision"]): offset = 0 - for key, label, color in segments: + for key, _label, color in segments: value = jev["paired"][system][key] ax.barh(i, value, left=offset, height=0.52, color=color, edgecolor="white", linewidth=1) if value >= 10: @@ -614,7 +614,7 @@ def save(fig, name, notes, description): "From the repository root, use a Python environment with Matplotlib installed:", "", "```sh", - f".cache/plot-venv/bin/python scripts/plot_model_card.py --run {run}", + f"pdm run python scripts/plot_model_card.py --run {run}", "```", "", ] diff --git a/scripts/prepare_data.py b/scripts/prepare_data.py index 6a6d225..07bfcb7 100644 --- a/scripts/prepare_data.py +++ b/scripts/prepare_data.py @@ -286,7 +286,7 @@ def vision_sources(): image=path, aliases=aliases, ) - for i, r in enumerate(parquet("lmms-lab-encoder/VQAv2", "data/validation-")): + for r in parquet("lmms-lab-encoder/VQAv2", "data/validation-"): if r.get("answer_type") != "yes/no": continue votes = [a["answer"] if isinstance(a, dict) else a for a in r["answers"]] @@ -380,15 +380,18 @@ def visit(node, destination): or node.get("visibility", "visible") != "visible" ): continue - l, t, rr, b = bounds - if not (0 <= l < rr <= width and 0 <= t < b <= height) or bounds in seen: + left, top, right, bottom = bounds + if ( + not (0 <= left < right <= width and 0 <= top < bottom <= height) + or bounds in seen + ): continue seen.add(bounds) candidates[j] = [ - round(l / width, 4), - round(t / height, 4), - round(rr / width, 4), - round(b / height, 4), + round(left / width, 4), + round(top / height, 4), + round(right / width, 4), + round(bottom / height, 4), ] cache[image_id] = candidates except (OSError, KeyError, ValueError, TypeError): diff --git a/src/dohnuts/execution.py b/src/dohnuts/execution.py index 5194a7f..e0aad4d 100644 --- a/src/dohnuts/execution.py +++ b/src/dohnuts/execution.py @@ -20,22 +20,26 @@ def plan_prefix(inputs, positions): class PrefixCache(DynamicCache): """Replace state tensors instead of overwriting values needed by backward.""" - def update_conv_state(self, states, layer_idx, state_idx=0, conv_kernel_size=None, **kwargs): + def update_conv_state( + self, conv_states, layer_idx, state_idx=0, conv_kernel_size=None, **kwargs + ): + if conv_kernel_size is None: + raise ValueError("PrefixCache requires conv_kernel_size") layer = self.layers[layer_idx] - layer.device, layer.dtype = states.device, states.dtype + layer.device, layer.dtype = conv_states.device, conv_states.dtype if layer.has_previous_state[state_idx]: - states = torch.cat([layer.conv_states[state_idx], states], dim=-1) + conv_states = torch.cat([layer.conv_states[state_idx], conv_states], dim=-1) layer.conv_kernel_size[state_idx] = conv_kernel_size - layer.conv_states[state_idx] = states[..., -conv_kernel_size:] + layer.conv_states[state_idx] = conv_states[..., -conv_kernel_size:] layer.has_previous_state[state_idx] = True layer.is_conv_states_initialized[state_idx] = True - return states + return conv_states - def update_recurrent_state(self, states, layer_idx, state_idx=0, **kwargs): + def update_recurrent_state(self, recurrent_states, layer_idx, state_idx=0, **kwargs): layer = self.layers[layer_idx] - layer.recurrent_states[state_idx] = states + layer.recurrent_states[state_idx] = recurrent_states layer.is_recurrent_states_initialized[state_idx] = True - return states + return recurrent_states def language_forward(language, embeddings, attention_mask, position_ids, cut): @@ -64,9 +68,9 @@ def shared_forward(): use_cache=True, return_dict=True, ) - cache.reorder_cache( - torch.zeros(len(embeddings), dtype=torch.long, device=embeddings.device) - ) + # Transformers expects LongTensor; factories return Tensor with int64 dtype. + indices = torch.zeros(len(embeddings), dtype=torch.long, device=embeddings.device) + cache.reorder_cache(indices) # ty: ignore[invalid-argument-type] return language( inputs_embeds=embeddings[:, cut:], attention_mask=attention_mask, diff --git a/src/dohnuts/kernels.py b/src/dohnuts/kernels.py index e65eefc..d92c206 100644 --- a/src/dohnuts/kernels.py +++ b/src/dohnuts/kernels.py @@ -6,13 +6,26 @@ def fused_rms_norm(module, hidden): from fla.modules.layernorm import rms_norm - return rms_norm(hidden, module._dohnuts_norm_weight, None, eps=module.eps) + # FLA 0.5.2 accepts bias=None, but its annotation omits None. + return rms_norm( + hidden, + module._dohnuts_norm_weight, + None, # ty: ignore[invalid-argument-type] + eps=module.eps, + ) def fused_gated_norm(module, hidden, gate): from fla.modules.fused_norm_gate import rms_norm_gated - return rms_norm_gated(hidden, gate, module.weight, None, eps=module.variance_epsilon) + # FLA 0.5.2 accepts bias=None, but its annotation omits None. + return rms_norm_gated( + hidden, + gate, + module.weight, + None, # ty: ignore[invalid-argument-type] + eps=module.variance_epsilon, + ) def fused_mlp(module, hidden): @@ -68,7 +81,8 @@ def enable_linear_patch_embedding(visual): def triton_causal_conv1d(hidden_states, weight, bias=None, activation=None, **kwargs): from fla.modules.conv import causal_conv1d - output, _ = causal_conv1d( + # FLA's input_guard decorator exposes a Tensor/callable union for this function. + output, _ = causal_conv1d( # ty: ignore[call-non-callable] hidden_states.transpose(1, 2), weight=weight, bias=bias, diff --git a/src/dohnuts/metrics.py b/src/dohnuts/metrics.py index c6bc99e..621c497 100644 --- a/src/dohnuts/metrics.py +++ b/src/dohnuts/metrics.py @@ -1,6 +1,7 @@ """Plot-ready distribution metrics; ECE uses top probability, never entropy.""" from collections import defaultdict +from typing import Any import numpy as np from sklearn.metrics import f1_score @@ -29,7 +30,7 @@ def summarize(records, temperatures=None): indices = np.arange(len(p)) values["score_mae"].append(float(abs((indices * p).sum() - (indices * target).sum()))) values["rps"].append(float(((p.cumsum()[:-1] - target.cumsum()[:-1]) ** 2).mean())) - result = {k: float(np.mean(v)) for k, v in values.items() if k != "confidence"} + result: dict[str, Any] = {k: float(np.mean(v)) for k, v in values.items() if k != "confidence"} result["n"] = len(records) if not records: return result @@ -40,9 +41,10 @@ def summarize(records, temperatures=None): for lo, hi in zip(np.linspace(0, 1, 16)[:-1], np.linspace(0, 1, 16)[1:]): mask = (np.array(values["confidence"]) > lo) & (np.array(values["confidence"]) <= hi) count = int(mask.sum()) - confidence = float(np.array(values["confidence"])[mask].mean()) if count else None - accuracy = float(np.array(values["accuracy"])[mask].mean()) if count else None + confidence = accuracy = None if count: + confidence = float(np.array(values["confidence"])[mask].mean()) + accuracy = float(np.array(values["accuracy"])[mask].mean()) ece += count / len(records) * abs(confidence - accuracy) bins.append( { diff --git a/src/dohnuts/predictor.py b/src/dohnuts/predictor.py index 2a37288..25baedd 100644 --- a/src/dohnuts/predictor.py +++ b/src/dohnuts/predictor.py @@ -4,6 +4,7 @@ import math from collections.abc import Mapping from pathlib import Path +from typing import Any import torch from huggingface_hub import snapshot_download @@ -77,6 +78,8 @@ def render_question(state_text, question, *, has_image=False, adapter=None): class Predictor: + metadata: dict[str, Any] + def __init__(self, model: DecisionModel): self.model = model self.image_pixels = IMAGE_PIXELS diff --git a/src/dohnuts/train.py b/src/dohnuts/train.py index 0b6ba83..06d345c 100644 --- a/src/dohnuts/train.py +++ b/src/dohnuts/train.py @@ -9,6 +9,7 @@ from collections import Counter, deque from dataclasses import asdict from pathlib import Path +from typing import cast import torch @@ -286,7 +287,7 @@ def train(config, run, *, resume=False, adapter=None, initialize_from=None): stats = Counter() finite = torch.ones((), dtype=torch.bool, device="cuda") step_start = time.perf_counter() - for micro in range(config["accumulation"]): + for _micro in range(config["accumulation"]): batch, key, ids = next(iterator) inputs, positions, mask, target, ordinal = batch logits = model(inputs, positions) @@ -306,6 +307,8 @@ def train(config, run, *, resume=False, adapter=None, initialize_from=None): step += 1 if step == 1 or step % config["log_every"] == 0: torch.cuda.synchronize() + # Counter's stub assumes int values; these accumulators contain tensors. + totals = cast(list[torch.Tensor], list(stats.values())) emit( run / "metrics.jsonl", { @@ -313,7 +316,7 @@ def train(config, run, *, resume=False, adapter=None, initialize_from=None): "step": step, "elapsed_s": elapsed_before_resume + time.perf_counter() - start_time, "step_s": time.perf_counter() - step_start, - **dict(zip(stats, torch.stack(list(stats.values())).cpu().tolist())), + **dict(zip(stats, torch.stack(totals).cpu().tolist())), "grad_norm": float(grad_norm), "lr": optimizer.param_groups[0]["lr"], "consumed": dict(consumed), diff --git a/tests/test_data_isolation.py b/tests/test_data_isolation.py index d4edf3d..f9f7b45 100644 --- a/tests/test_data_isolation.py +++ b/tests/test_data_isolation.py @@ -1,43 +1,36 @@ """Different source IDs must not let identical screenshots cross data splits.""" import importlib.util -import tempfile -import unittest from collections import Counter from pathlib import Path from PIL import Image -spec = importlib.util.spec_from_file_location("prepare_data", Path("scripts/prepare_data.py")) +spec = importlib.util.spec_from_file_location( + "prepare_data", Path(__file__).parents[1] / "scripts/prepare_data.py" +) prepare = importlib.util.module_from_spec(spec) spec.loader.exec_module(prepare) -class SplitIsolationTests(unittest.TestCase): - def test_reencoded_screenshots_join_before_split_priority(self): - with tempfile.TemporaryDirectory() as directory: - root = Path(directory) - image = Image.new("RGB", (16, 16), "red") - image.save(root / "train.png", compress_level=0) - image.save(root / "test.png", compress_level=9) - self.assertNotEqual((root / "train.png").read_bytes(), (root / "test.png").read_bytes()) - records = [ - prepare.example( - "screenqa_choice", - split, - "source-id:" + split, - split, - {}, - prepare.choice("What color?", ["red", "blue"]), - 0, - image=str(root / f"{split}.png"), - ) - for split in ["train", "test"] - ] - kept = list(prepare.isolate(records, Counter())) - self.assertEqual([r["id"] for r in kept], ["screenqa_choice:test"]) - self.assertEqual(kept[0]["split"], "test") - - -if __name__ == "__main__": - unittest.main() +def test_reencoded_screenshots_join_before_split_priority(tmp_path): + image = Image.new("RGB", (16, 16), "red") + image.save(tmp_path / "train.png", compress_level=0) + image.save(tmp_path / "test.png", compress_level=9) + assert (tmp_path / "train.png").read_bytes() != (tmp_path / "test.png").read_bytes() + records = [ + prepare.example( + "screenqa_choice", + split, + "source-id:" + split, + split, + {}, + prepare.choice("What color?", ["red", "blue"]), + 0, + image=str(tmp_path / f"{split}.png"), + ) + for split in ["train", "test"] + ] + kept = list(prepare.isolate(records, Counter())) + assert [r["id"] for r in kept] == ["screenqa_choice:test"] + assert kept[0]["split"] == "test" diff --git a/tests/test_execution.py b/tests/test_execution.py new file mode 100644 index 0000000..135bb34 --- /dev/null +++ b/tests/test_execution.py @@ -0,0 +1,42 @@ +"""The prefix cache preserves the Transformers cache API and autograd graph.""" + +import pytest +import torch +from transformers.models.qwen3_5.configuration_qwen3_5 import Qwen3_5TextConfig + +from dohnuts.execution import PrefixCache + + +@pytest.fixture +def prefix_cache(): + config = Qwen3_5TextConfig(num_hidden_layers=1, layer_types=["linear_attention"]) + return PrefixCache(config=config) + + +def test_keyword_updates_preserve_states_and_gradients(prefix_cache): + prefix = torch.randn(1, 2, 6, requires_grad=True) + suffix = torch.randn(1, 2, 2, requires_grad=True) + prefix_cache.update_conv_state(conv_states=prefix, layer_idx=0, conv_kernel_size=4) + previous = prefix_cache.layers[0].conv_states[0] + updated = prefix_cache.update_conv_state(conv_states=suffix, layer_idx=0, conv_kernel_size=4) + torch.testing.assert_close(updated, torch.cat([prefix[..., -4:], suffix], dim=-1)) + torch.testing.assert_close(previous, prefix[..., -4:]) + torch.testing.assert_close(prefix_cache.layers[0].conv_states[0], updated[..., -4:]) + + recurrent = torch.randn(1, 2, 2, requires_grad=True) + state = recurrent.square() + returned = prefix_cache.update_recurrent_state(recurrent_states=state, layer_idx=0) + assert returned is state + assert prefix_cache.layers[0].recurrent_states[0] is state + (updated.sum() + returned.sum()).backward() + expected = torch.ones_like(prefix) + expected[..., :2] = 0 + torch.testing.assert_close(prefix.grad, expected) + torch.testing.assert_close(suffix.grad, torch.ones_like(suffix)) + torch.testing.assert_close(recurrent.grad, 2 * recurrent.detach()) + + +def test_missing_kernel_size_fails_before_mutating_cache(prefix_cache): + with pytest.raises(ValueError, match="conv_kernel_size"): + prefix_cache.update_conv_state(conv_states=torch.ones(1, 2, 4), layer_idx=0) + assert not prefix_cache.layers[0].is_conv_states_initialized[0] diff --git a/tests/test_metrics.py b/tests/test_metrics.py index c263e47..4ac2edb 100644 --- a/tests/test_metrics.py +++ b/tests/test_metrics.py @@ -1,42 +1,47 @@ import math -import unittest + +import pytest from dohnuts.metrics import fit_temperatures, summarize -class MetricTests(unittest.TestCase): - def test_twenty_latency_samples_do_not_report_maximum_as_p95(self): - from dohnuts.experiment import latency_stats - - result = latency_stats(list(range(1, 21)), 1) - self.assertAlmostEqual(result["p95_ms"], 19.05) - - def test_known_binary_distribution(self): - rows = [ - {"type": "noul", "logits": [0.0, math.log(4)], "target": t} - for t in [[0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0]] - ] - result = summarize(rows) - self.assertAlmostEqual(result["accuracy"], 0.75) - self.assertAlmostEqual(result["ece_15"], 0.05) - self.assertAlmostEqual(result["nll"], -(0.75 * math.log(0.8) + 0.25 * math.log(0.2))) - self.assertAlmostEqual(result["brier_sum"], 0.38) - self.assertAlmostEqual(result["brier_per_candidate"], 0.19) - - def test_temperature_fits_soft_targets_without_changing_order(self): - rows = [{"type": "noul", "logits": [0.0, 4.0], "target": [0.25, 0.75]} for _ in range(20)] - temperatures = fit_temperatures(rows) - self.assertAlmostEqual(temperatures["noul"], 4 / math.log(3), delta=0.02) - self.assertLess(summarize(rows, temperatures)["nll"], summarize(rows)["nll"]) - - def test_ordinal_distance_and_soft_accuracy(self): - result = summarize( - [{"type": "score", "logits": [-100.0, -100.0, 0.0], "target": [1.0, 0.0, 0.0]}] - ) - self.assertAlmostEqual(result["rps"], 1.0) - self.assertAlmostEqual(result["score_mae"], 2.0) - self.assertEqual(result["soft_accuracy"], 0.0) - - -if __name__ == "__main__": - unittest.main() +def test_twenty_latency_samples_do_not_report_maximum_as_p95(): + from dohnuts.experiment import latency_stats + + result = latency_stats(list(range(1, 21)), 1) + assert result["p95_ms"] == pytest.approx(19.05, rel=0, abs=5e-8) + + +def test_known_binary_distribution(): + rows = [ + {"type": "noul", "logits": [0.0, math.log(4)], "target": t} + for t in [[0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0]] + ] + result = summarize(rows) + assert result["accuracy"] == pytest.approx(0.75, rel=0, abs=5e-8) + assert result["ece_15"] == pytest.approx(0.05, rel=0, abs=5e-8) + expected_nll = -(0.75 * math.log(0.8) + 0.25 * math.log(0.2)) + assert result["nll"] == pytest.approx(expected_nll, rel=0, abs=5e-8) + assert result["brier_sum"] == pytest.approx(0.38, rel=0, abs=5e-8) + assert result["brier_per_candidate"] == pytest.approx(0.19, rel=0, abs=5e-8) + empty_bins = [row for row in result["reliability"] if row["n"] == 0] + assert len(empty_bins) == 14 + for row in empty_bins: + assert row["confidence"] is None + assert row["accuracy"] is None + + +def test_temperature_fits_soft_targets_without_changing_order(): + rows = [{"type": "noul", "logits": [0.0, 4.0], "target": [0.25, 0.75]} for _ in range(20)] + temperatures = fit_temperatures(rows) + assert temperatures["noul"] == pytest.approx(4 / math.log(3), rel=0, abs=0.02) + assert summarize(rows, temperatures)["nll"] < summarize(rows)["nll"] + + +def test_ordinal_distance_and_soft_accuracy(): + result = summarize( + [{"type": "score", "logits": [-100.0, -100.0, 0.0], "target": [1.0, 0.0, 0.0]}] + ) + assert result["rps"] == pytest.approx(1.0, rel=0, abs=5e-8) + assert result["score_mae"] == pytest.approx(2.0, rel=0, abs=5e-8) + assert result["soft_accuracy"] == 0.0 diff --git a/tests/test_rlcd.py b/tests/test_rlcd.py index ee70015..ac770df 100644 --- a/tests/test_rlcd.py +++ b/tests/test_rlcd.py @@ -1,47 +1,42 @@ import json -import unittest from pathlib import Path +import pytest import torch from dohnuts.rlcd import RLCDConfig, distribution_rewards, rlcd_loss +CASES = json.loads((Path(__file__).parent / "fixtures/laya-rlcd.json").read_text())["cases"] -class RLCDTests(unittest.TestCase): - def test_loss_reward_and_gradient_match_pinned_laya(self): - """Golden values were evaluated by the actual upstream Python functions.""" - fixture = json.loads((Path(__file__).parent / "fixtures/laya-rlcd.json").read_text()) - for case in fixture["cases"]: - logits = torch.tensor(case["logits"], requires_grad=True) - torch.manual_seed(case["seed"]) - loss, metrics = rlcd_loss( - logits, - torch.tensor(case["targets"]), - mask=torch.tensor(case["mask"]), - ordinal=torch.tensor(case["ordinal"]), - config=RLCDConfig(ce_weight=case["ce_weight"]), - ) - loss.backward() - torch.testing.assert_close( - loss.detach(), torch.tensor(case["loss"]), atol=1e-6, rtol=1e-5 - ) - torch.testing.assert_close(metrics["reward_mean"], torch.tensor(case["reward_mean"])) - torch.testing.assert_close( - logits.grad, torch.tensor(case["gradient"]), atol=1e-6, rtol=1e-5 - ) - def test_ordinal_reward_respects_distance(self): - config = RLCDConfig() - actions = torch.tensor([[[10.0, -10, -10, -10]], [[-10.0, -10, 10, -10]]]) - rewards = distribution_rewards( - actions, - torch.tensor([3]), - torch.ones(1, 4, dtype=torch.bool), - torch.ones(1, dtype=torch.bool), - config, - ) - self.assertGreater(rewards[1, 0].item(), rewards[0, 0].item()) +@pytest.mark.parametrize( + "case", CASES, ids=lambda case: f"seed-{case['seed']}-ce-{case['ce_weight']}" +) +def test_loss_reward_and_gradient_match_pinned_laya(case): + """Golden values were evaluated by the actual upstream Python functions.""" + logits = torch.tensor(case["logits"], requires_grad=True) + torch.manual_seed(case["seed"]) + loss, metrics = rlcd_loss( + logits, + torch.tensor(case["targets"]), + mask=torch.tensor(case["mask"]), + ordinal=torch.tensor(case["ordinal"]), + config=RLCDConfig(ce_weight=case["ce_weight"]), + ) + loss.backward() + torch.testing.assert_close(loss.detach(), torch.tensor(case["loss"]), atol=1e-6, rtol=1e-5) + torch.testing.assert_close(metrics["reward_mean"], torch.tensor(case["reward_mean"])) + torch.testing.assert_close(logits.grad, torch.tensor(case["gradient"]), atol=1e-6, rtol=1e-5) -if __name__ == "__main__": - unittest.main() +def test_ordinal_reward_respects_distance(): + config = RLCDConfig() + actions = torch.tensor([[[10.0, -10, -10, -10]], [[-10.0, -10, 10, -10]]]) + rewards = distribution_rewards( + actions, + torch.tensor([3]), + torch.ones(1, 4, dtype=torch.bool), + torch.ones(1, dtype=torch.bool), + config, + ) + assert rewards[1, 0].item() > rewards[0, 0].item()