Spaces:
Sleeping
Sleeping
Upload folder using huggingface_hub
Browse files- BLOG.md +15 -0
- README.md +130 -49
- pyproject.toml +28 -8
- sql_drift_grpo_training.ipynb +0 -0
- training/__init__.py +2 -1
- training/config.py +35 -14
- training/grpo_train.py +79 -23
- utilities/run_training_job.py +444 -76
- uv.lock +254 -385
BLOG.md
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# SQL Under Drift: Why Static Benchmarks Miss the Point
|
| 2 |
+
|
| 3 |
+
Production databases do not hold still. Schemas get evolved, columns are renamed, enums split, formats change, and deploy changelogs record what humans already agreed on. Training agents only on fixed schemas rewards a skill that rarely matches the job: adapting while the workflow is still in flight.
|
| 4 |
+
|
| 5 |
+
**SQLDrift** is an [OpenEnv](https://github.com/meta-pytorch/OpenEnv)-style gym built for that harder setting. Each episode gives an agent a real DuckDB instance, a toolbox of read-only actions (`list_tables`, `describe_table`, `sample_rows`, `run_query`, `explain_query`, `read_changelog`, `submit_rewrite`, and optional DBA guidance), and a bounded step budget. Drift can arrive mid-episode: schema and business-rule changes are applied in the environment, not only described in prose. Rewards combine semantic correctness (canonical result checks), adaptation after drift, measured runtime improvement against a calibrated baseline, and sensible penalties for wasted steps and brittle patterns—so “correct but lazy” and “fast but wrong” both fail in predictable ways.
|
| 6 |
+
|
| 7 |
+
## How this differs from recent SQL RL lines
|
| 8 |
+
|
| 9 |
+
The last year has seen strong momentum in SQL-focused RL: executable feedback, equivalence-aware rewrites, and efficiency signals are now familiar ingredients in lines such as BIRD-CRITIC / `six-gym-sqlite`, the BIRD-Talon and BIRD-Zeno–style models, and work like E3-Rewrite that optimizes for executability, equivalence, and speed. Those settings still largely treat the world as **stable for the episode**: the puzzle is to fix or improve a query against a schema that does not reorganize underneath you.
|
| 10 |
+
|
| 11 |
+
SQLDrift’s emphasis is different. The novelty is not “SQL plus RL” by itself—it is **live schema and business-rule drift during the rollout**, with changelog-grounded adaptation, long-horizon tool use, and deterministic validation in a stateful loop. Agents must read what changed, re-verify behavior, and submit a rewrite that is both faithful to the new rules and meaningfully faster than the baseline. That combination targets the gap between leaderboard SQL and the kind of maintenance engineers actually perform.
|
| 12 |
+
|
| 13 |
+
## Why it matters
|
| 14 |
+
|
| 15 |
+
We are not claiming a world without prior art; we are pointing at a clear axis of generalization. When the environment can shift mid-episode, memorizing one layout stops being enough. SQLDrift offers a compact, reproducible setting to train and measure that skill: demanding for the policy, and closer to how deployments actually behave than a single frozen schema alone can provide.
|
README.md
CHANGED
|
@@ -11,40 +11,125 @@ base_path: /web
|
|
| 11 |
|
| 12 |
# SQLDrift
|
| 13 |
|
| 14 |
-
> An OpenEnv gym that teaches an LLM agent to **repair and optimize SQL** when
|
| 15 |
-
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 16 |
|
| 17 |
SQLDrift is a production-grade [OpenEnv](https://github.com/meta-pytorch/OpenEnv)
|
| 18 |
-
environment
|
| 19 |
-
[`GRPOTrainer`](https://huggingface.co/docs/trl/openenv) (
|
| 20 |
-
[Unsloth](https://github.com/unslothai/unsloth) LoRA on consumer GPUs).
|
| 21 |
-
|
| 22 |
-
|
| 23 |
-
**
|
| 24 |
-
|
| 25 |
-
|
| 26 |
-
than the baseline. A hierarchical rubric turns that into six reward signals
|
| 27 |
(correctness, drift-adapt, speedup, step-tax, gatekeepers, consult-dba).
|
| 28 |
|
| 29 |
Highlights:
|
| 30 |
|
| 31 |
-
- **10 hand-crafted scenarios** — 6 classic anti-patterns (correlated
|
| 32 |
-
|
| 33 |
-
|
| 34 |
-
|
| 35 |
- **Deterministic fixtures** — 15–30-column schemas, 2–4 tables per scenario,
|
| 36 |
-
regenerated in-process at `reset()` from a seed. No Parquet files, no
|
| 37 |
-
|
| 38 |
-
- **Sqlglot-canonicalised baseline-verbatim gate** — agents that rename
|
| 39 |
-
|
| 40 |
-
- **Skill library** — 12 pre-seeded playbook/drift-card entries plus an
|
| 41 |
-
|
| 42 |
-
|
| 43 |
-
- **Feature-flagged DBA Oracle** — 3-tier escalating hints per scenario,
|
| 44 |
-
|
| 45 |
-
- **Dockerised** — `server/Dockerfile` layers the env on
|
| 46 |
-
|
| 47 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 48 |
|
| 49 |
## Quick start
|
| 50 |
|
|
@@ -88,9 +173,8 @@ print(obs.reward, obs.reward_components)
|
|
| 88 |
env.close()
|
| 89 |
```
|
| 90 |
|
| 91 |
-
End-to-end over an HTTP+WS OpenEnv server, see `SqlDriftEnv` in
|
| 92 |
-
|
| 93 |
-
`tests/integration/test_client_server.py` /
|
| 94 |
`tests/integration/test_state_no_leak.py`.
|
| 95 |
|
| 96 |
## Evaluation
|
|
@@ -103,19 +187,20 @@ uv run python -m training.eval \
|
|
| 103 |
--out outputs/evals/my_run
|
| 104 |
```
|
| 105 |
|
| 106 |
-
Emits `report.md`, `per_episode.csv`, and `summary.json`.
|
| 107 |
-
agent sweep is checked in at `outputs/evals/baseline_random_v1/report.md` as a
|
| 108 |
-
floor: mean reward ≈ **-2.05**, pass rate **0 %**.
|
| 109 |
|
| 110 |
## Training (GPU)
|
| 111 |
|
| 112 |
-
`training/grpo_train.py` contains the GRPO entrypoint used by the hackathon
|
| 113 |
-
|
| 114 |
-
`
|
| 115 |
-
|
| 116 |
-
|
| 117 |
-
|
| 118 |
-
|
|
|
|
|
|
|
|
|
|
| 119 |
|
| 120 |
```bash
|
| 121 |
uv sync --extra train # installs trl, transformers, accelerate, unsloth
|
|
@@ -132,7 +217,8 @@ sql_drift_env/
|
|
| 132 |
│ ├── runtime.py # private RuntimeEpisodeState
|
| 133 |
│ ├── drift.py # 4 DDL drift operators
|
| 134 |
│ ├── reward.py # SqlDriftRubric (6 child rubrics)
|
| 135 |
-
│ ├── verifier.py
|
|
|
|
| 136 |
├── scenarios/ # 10 hand-crafted scenario modules + registry
|
| 137 |
├── skill_library/ # pre-seeds + JSON store + Jaccard retrieval
|
| 138 |
├── actors/ # engineering_manager (changelog), dba_oracle
|
|
@@ -144,12 +230,7 @@ sql_drift_env/
|
|
| 144 |
└── design/ # design docs (ignored by docker)
|
| 145 |
```
|
| 146 |
|
| 147 |
-
##
|
| 148 |
-
|
| 149 |
-
- `.cursor/plans/sqldrift_technical_spec_feb249d1.plan.md` — full 16-phase
|
| 150 |
-
technical spec (Rev-3).
|
| 151 |
-
- `design/CLAUDE.md` — agent coding guidelines.
|
| 152 |
-
|
| 153 |
-
## License
|
| 154 |
|
| 155 |
-
|
|
|
|
|
|
| 11 |
|
| 12 |
# SQLDrift
|
| 13 |
|
| 14 |
+
> An OpenEnv gym that teaches an LLM agent to **repair and optimize SQL** when the
|
| 15 |
+
> database schema and business rules shift out from under it.
|
| 16 |
+
|
| 17 |
+
## Why this problem exists
|
| 18 |
+
|
| 19 |
+
Production analytics breaks in familiar ways: a deploy renames a column, splits an enum
|
| 20 |
+
into two fields, or changes how dates are stored. The dashboard query that worked on
|
| 21 |
+
Monday may error or return wrong results on Tuesday. LLMs are a natural fit—they can
|
| 22 |
+
read changelogs, run diagnostics, and propose rewrites—but static SQL benchmarks assume
|
| 23 |
+
a **fixed** schema. They cannot reward an agent for noticing that the world changed
|
| 24 |
+
**during** a task or for trading correctness against latency under a tool budget.
|
| 25 |
+
|
| 26 |
+
**SQLDrift** closes that gap: each episode is a small DuckDB world, a slow baseline
|
| 27 |
+
`SELECT`, a fixed tool budget, and (for drift scenarios) a mid-episode schema or rule
|
| 28 |
+
change the agent must recover from before submitting a rewrite that is both semantically
|
| 29 |
+
correct and materially faster than the baseline.
|
| 30 |
+
|
| 31 |
+
## Live environment (Hugging Face Space)
|
| 32 |
+
|
| 33 |
+
Run the OpenEnv server without cloning the repo:
|
| 34 |
+
|
| 35 |
+
**[SQLDrift on Hugging Face Spaces](https://huggingface.co/spaces/visheshrathi/sql-drift-env)**
|
| 36 |
+
|
| 37 |
+
For TRL / client rollouts, point `SQL_DRIFT_ENV_URL` (or your `SqlDriftEnv` /
|
| 38 |
+
`SqlDriftToolEnv` base URL) at the Space runtime, for example
|
| 39 |
+
`https://visheshrathi-sql-drift-env.hf.space` — same host the training notebook
|
| 40 |
+
health-checks by default. If you need many concurrent WebSocket sessions (e.g.
|
| 41 |
+
`num_generations` > 1 in GRPO), duplicate the Space to your own account per the
|
| 42 |
+
[TRL OpenEnv concurrency notes](https://huggingface.co/docs/trl/openenv#server-concurrency).
|
| 43 |
|
| 44 |
SQLDrift is a production-grade [OpenEnv](https://github.com/meta-pytorch/OpenEnv)
|
| 45 |
+
environment for RL fine-tuning with TRL’s
|
| 46 |
+
[`GRPOTrainer`](https://huggingface.co/docs/trl/openenv) (and
|
| 47 |
+
[Unsloth](https://github.com/unslothai/unsloth) LoRA on consumer GPUs). Each episode
|
| 48 |
+
gives the agent a slow baseline query, a lightly populated DuckDB database, read-only
|
| 49 |
+
introspection and execution tools, and a **25-step budget**. Mid-episode, a schema or
|
| 50 |
+
business-rule **drift event** may fire; the agent must read the deploy changelog,
|
| 51 |
+
re-diagnose, and submit a rewrite that is (a) semantically correct and (b) ≥ **1.2×**
|
| 52 |
+
faster than the baseline. A hierarchical rubric turns that into six reward signals
|
|
|
|
| 53 |
(correctness, drift-adapt, speedup, step-tax, gatekeepers, consult-dba).
|
| 54 |
|
| 55 |
Highlights:
|
| 56 |
|
| 57 |
+
- **10 hand-crafted scenarios** — 6 classic anti-patterns (correlated subqueries,
|
| 58 |
+
`SELECT *` joins, Cartesian joins, `DISTINCT` groupbys, nested subqueries,
|
| 59 |
+
`HAVING`-as-`WHERE`) and 4 drift events (column rename, date format flip, enum rule
|
| 60 |
+
split, field deprecation).
|
| 61 |
- **Deterministic fixtures** — 15–30-column schemas, 2–4 tables per scenario,
|
| 62 |
+
regenerated in-process at `reset()` from a seed. No Parquet files, no pre-baked
|
| 63 |
+
sqlite dumps.
|
| 64 |
+
- **Sqlglot-canonicalised baseline-verbatim gate** — agents that rename whitespace and
|
| 65 |
+
resubmit the baseline cannot farm the +1.0 correct bonus.
|
| 66 |
+
- **Skill library** — 12 pre-seeded playbook/drift-card entries plus an on-disk,
|
| 67 |
+
`fcntl.flock`-guarded JSON store that grows as the agent solves episodes, surfaced
|
| 68 |
+
next `reset()` via Jaccard retrieval.
|
| 69 |
+
- **Feature-flagged DBA Oracle** — 3-tier escalating hints per scenario, penalised by
|
| 70 |
+
the `ConsultDBA` rubric. Off by default.
|
| 71 |
+
- **Dockerised** — `server/Dockerfile` layers the env on `ghcr.io/meta-pytorch/openenv-base`
|
| 72 |
+
and exposes `/health`, `/reset`, `/step`, `/ws` out-of-the-box.
|
| 73 |
+
|
| 74 |
+
## How the environment works
|
| 75 |
+
|
| 76 |
+
1. **`reset(scenario_id, seed, …)`** builds a fresh in-memory DuckDB instance, loads the
|
| 77 |
+
scenario’s tables and rows, and returns an observation with the baseline SQL, phase
|
| 78 |
+
(`DIAGNOSE` → …), step budget, and `learned_hints` from the skill library.
|
| 79 |
+
2. **Tooling** — The agent acts via OpenEnv actions: list/describe tables, sample rows,
|
| 80 |
+
`EXPLAIN`, timed read-only `run_query`, `read_changelog`, optional `consult_dba`, and
|
| 81 |
+
terminal `submit_rewrite`. Each step consumes budget and accrues shaping reward (e.g.
|
| 82 |
+
step tax and gatekeeper penalties).
|
| 83 |
+
3. **Drift** — On drift scenarios, an event fires in a configured step window: DDL / rule
|
| 84 |
+
operators run idempotently (`engine/drift.py`); the changelog updates; ground truth and
|
| 85 |
+
baseline behaviour may change; the observation signals `drift_recovery` so the agent can
|
| 86 |
+
adapt.
|
| 87 |
+
4. **Verification** — Submissions are checked with an order-independent result hash
|
| 88 |
+
(`engine/verifier.py`) and median-of-3 timed execution against the baseline
|
| 89 |
+
(`engine/profiler.py`). Correctness and speedup components of the rubric enforce the
|
| 90 |
+
≥ 1.2× speedup bar for the top correctness tier.
|
| 91 |
+
5. **Reward** — `SqlDriftRubric` composes six child rubrics; every observation exposes
|
| 92 |
+
`reward_components` (e.g. `r_correct`, `r_drift`, `r_speedup`, `r_step_tax`,
|
| 93 |
+
`r_gatekeepers`, `r_consult_dba`) for analysis and logging.
|
| 94 |
+
6. **Server** — `server/app.py` uses the OpenEnv FastAPI factory; `client.py` provides a
|
| 95 |
+
WebSocket `SqlDriftEnv` for remote episodes. See `openenv.yaml` for the Space-oriented
|
| 96 |
+
manifest.
|
| 97 |
+
|
| 98 |
+
## Results
|
| 99 |
+
|
| 100 |
+
### Random baseline (floor)
|
| 101 |
+
|
| 102 |
+
We ship a reproducible random-agent evaluation under
|
| 103 |
+
`outputs/evals/baseline_random_v1/` (50 episodes, 5 seeds × 10 scenarios). It establishes
|
| 104 |
+
a **floor** for any trained policy:
|
| 105 |
+
|
| 106 |
+
| Metric | Value |
|
| 107 |
+
| ------------------------ | --------------------- |
|
| 108 |
+
| Mean total reward | **−2.048** (σ ≈ 0.70) |
|
| 109 |
+
| Pass rate (reward ≥ 0.5) | **0%** |
|
| 110 |
+
| Submit rate | 80% |
|
| 111 |
+
|
| 112 |
+
Mean reward is roughly **−1.8 to −2.3** per scenario; drift scenarios trend slightly
|
| 113 |
+
harder than static anti-pattern scenarios. See
|
| 114 |
+
[`outputs/evals/baseline_random_v1/report.md`](outputs/evals/baseline_random_v1/report.md)
|
| 115 |
+
for the full per-scenario table and component bars.
|
| 116 |
+
|
| 117 |
+
### Trained policies
|
| 118 |
+
|
| 119 |
+
GRPO training is driven by `training/grpo_train.py` and `sql_drift_grpo_training.ipynb`.
|
| 120 |
+
After a run, compare checkpoints with:
|
| 121 |
+
|
| 122 |
+
```bash
|
| 123 |
+
uv run python -m training.eval \
|
| 124 |
+
--checkpoint path/to/adapter \
|
| 125 |
+
--scenarios 1-10 \
|
| 126 |
+
--seeds-per-scenario 5 \
|
| 127 |
+
--out outputs/evals/my_run
|
| 128 |
+
```
|
| 129 |
+
|
| 130 |
+
Training logs and plots: `training/grpo_train.py` can emit step-wise JSONL;
|
| 131 |
+
`utilities/plot_curves.py` produces reward/loss figures under `training/evidence/` when
|
| 132 |
+
that log exists.
|
| 133 |
|
| 134 |
## Quick start
|
| 135 |
|
|
|
|
| 173 |
env.close()
|
| 174 |
```
|
| 175 |
|
| 176 |
+
End-to-end over an HTTP+WS OpenEnv server, see `SqlDriftEnv` in `client.py` and the
|
| 177 |
+
integration test suite in `tests/integration/test_client_server.py` /
|
|
|
|
| 178 |
`tests/integration/test_state_no_leak.py`.
|
| 179 |
|
| 180 |
## Evaluation
|
|
|
|
| 187 |
--out outputs/evals/my_run
|
| 188 |
```
|
| 189 |
|
| 190 |
+
Emits `report.md`, `per_episode.csv`, and `summary.json`.
|
|
|
|
|
|
|
| 191 |
|
| 192 |
## Training (GPU)
|
| 193 |
|
| 194 |
+
`training/grpo_train.py` contains the GRPO entrypoint used by the hackathon training
|
| 195 |
+
notebook: it builds the curriculum dataset, loads **`Qwen/Qwen3-1.7B`** (or your
|
| 196 |
+
`SQL_DRIFT_MODEL_NAME`) via `transformers.AutoModelForCausalLM` + `BitsAndBytesConfig`
|
| 197 |
+
4-bit nf4 (QLoRA), attaches a PEFT LoRA adapter, and lets TRL's `GRPOTrainer` drive
|
| 198 |
+
multi-turn OpenEnv rollouts through `SqlDriftToolEnv` via `environment_factory`. The
|
| 199 |
+
install/runtime stack mirrors Hugging Face TRL's reference notebooks
|
| 200 |
+
(`grpo_trl_lora_qlora.ipynb` + `openenv_wordle_grpo.ipynb`). Open
|
| 201 |
+
`sql_drift_grpo_training.ipynb` on a free Colab T4, set `SQL_DRIFT_ENV_URL` to your
|
| 202 |
+
deployed SQLDrift Space (see [Live environment](#live-environment-hugging-face-space)),
|
| 203 |
+
and run all cells.
|
| 204 |
|
| 205 |
```bash
|
| 206 |
uv sync --extra train # installs trl, transformers, accelerate, unsloth
|
|
|
|
| 217 |
│ ├── runtime.py # private RuntimeEpisodeState
|
| 218 |
│ ├── drift.py # 4 DDL drift operators
|
| 219 |
│ ├── reward.py # SqlDriftRubric (6 child rubrics)
|
| 220 |
+
│ ├── verifier.py
|
| 221 |
+
| |-- profiler.py
|
| 222 |
├── scenarios/ # 10 hand-crafted scenario modules + registry
|
| 223 |
├── skill_library/ # pre-seeds + JSON store + Jaccard retrieval
|
| 224 |
├── actors/ # engineering_manager (changelog), dba_oracle
|
|
|
|
| 230 |
└── design/ # design docs (ignored by docker)
|
| 231 |
```
|
| 232 |
|
| 233 |
+
## References
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 234 |
|
| 235 |
+
- **[SQLDrift — Hugging Face Space](https://huggingface.co/spaces/visheshrathi/sql-drift-env)** —
|
| 236 |
+
deployed OpenEnv server (Docker SDK).
|
pyproject.toml
CHANGED
|
@@ -15,7 +15,13 @@ description = "SQLDrift: OpenEnv gym for repairing and optimizing SQL under live
|
|
| 15 |
requires-python = ">=3.12,<3.14"
|
| 16 |
dependencies = [
|
| 17 |
"duckdb>=1.5.2,<2.0",
|
| 18 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 19 |
"openenv-core[core]>=0.2.2,<0.4",
|
| 20 |
"sqlglot>=30.6.0,<40.0",
|
| 21 |
"pydantic>=2.8.0,<3.0",
|
|
@@ -37,13 +43,27 @@ dev = [
|
|
| 37 |
"httpx>=0.28.0",
|
| 38 |
]
|
| 39 |
train = [
|
| 40 |
-
|
| 41 |
-
|
| 42 |
-
|
| 43 |
-
|
| 44 |
-
|
| 45 |
-
|
| 46 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 47 |
]
|
| 48 |
|
| 49 |
[project.scripts]
|
|
|
|
| 15 |
requires-python = ">=3.12,<3.14"
|
| 16 |
dependencies = [
|
| 17 |
"duckdb>=1.5.2,<2.0",
|
| 18 |
+
# huggingface-hub: floor must satisfy `transformers>=5.2.0` (which
|
| 19 |
+
# needs hub>=1.3.0) — and the highest transformers we allow
|
| 20 |
+
# (5.4.x–5.5.0) needs hub>=1.5.0. Pin the floor at 1.5.0 to match
|
| 21 |
+
# the worst case so the [train] extra resolves cleanly. Cap <2.0
|
| 22 |
+
# because the `run_job` / `fetch_job_logs` / `inspect_job` API we
|
| 23 |
+
# call in utilities/run_training_job.py landed in the 1.x line.
|
| 24 |
+
"huggingface-hub>=1.5.0,<2.0",
|
| 25 |
"openenv-core[core]>=0.2.2,<0.4",
|
| 26 |
"sqlglot>=30.6.0,<40.0",
|
| 27 |
"pydantic>=2.8.0,<3.0",
|
|
|
|
| 43 |
"httpx>=0.28.0",
|
| 44 |
]
|
| 45 |
train = [
|
| 46 |
+
# TRL-only stack — mirrors Hugging Face's reference notebooks for
|
| 47 |
+
# GRPO with QLoRA (`grpo_trl_lora_qlora.ipynb`) and the OpenEnv
|
| 48 |
+
# multi-turn tool-calling examples (`openenv_wordle_grpo.ipynb`).
|
| 49 |
+
# No Unsloth: AutoModelForCausalLM + BitsAndBytesConfig is the
|
| 50 |
+
# canonical path the TRL examples use, and it resolves cleanly
|
| 51 |
+
# on a free Colab T4.
|
| 52 |
+
"trl[peft]>=1.2.0,<2.0",
|
| 53 |
+
"datasets>=3.0.0,<5.0",
|
| 54 |
+
# TRL 1.2 floors transformers at >=5.0. Keep the ceiling open so
|
| 55 |
+
# we follow the TRL release cadence.
|
| 56 |
+
"transformers>=5.5.0",
|
| 57 |
+
"accelerate>=1.13.0",
|
| 58 |
+
"peft>=0.19",
|
| 59 |
+
"bitsandbytes>=0.46.1,!=0.48.0",
|
| 60 |
+
# jmespath: required by TRL's GRPOTrainer whenever `tools` or
|
| 61 |
+
# `environment_factory` is used (parses tool-call responses from
|
| 62 |
+
# the model). TRL raises ImportError at GRPOTrainer.__init__
|
| 63 |
+
# otherwise. Pure-Python, no transitive deps.
|
| 64 |
+
# https://github.com/huggingface/trl/blob/main/trl/trainer/grpo_trainer.py
|
| 65 |
+
"jmespath>=1.0,<2.0",
|
| 66 |
+
"tensorboard>=2.20,<3.0",
|
| 67 |
]
|
| 68 |
|
| 69 |
[project.scripts]
|
sql_drift_grpo_training.ipynb
CHANGED
|
The diff for this file is too large to render.
See raw diff
|
|
|
training/__init__.py
CHANGED
|
@@ -5,7 +5,8 @@ Public surface:
|
|
| 5 |
* :class:`training.config.GRPOConfig` / :class:`training.config.CurriculumConfig`
|
| 6 |
* :func:`training.prompt.render_system_prompt`
|
| 7 |
* :class:`training.random_agent.RandomAgent`
|
| 8 |
-
* :func:`training.grpo_train.train` (requires GPU + ``[train]`` extra
|
|
|
|
| 9 |
"""
|
| 10 |
|
| 11 |
from __future__ import annotations
|
|
|
|
| 5 |
* :class:`training.config.GRPOConfig` / :class:`training.config.CurriculumConfig`
|
| 6 |
* :func:`training.prompt.render_system_prompt`
|
| 7 |
* :class:`training.random_agent.RandomAgent`
|
| 8 |
+
* :func:`training.grpo_train.train` (requires GPU + ``[train]`` extra
|
| 9 |
+
plus the CUDA-specific Unsloth stack installed by ``utilities/run_training_job.py``)
|
| 10 |
"""
|
| 11 |
|
| 12 |
from __future__ import annotations
|
training/config.py
CHANGED
|
@@ -63,19 +63,24 @@ class CurriculumConfig:
|
|
| 63 |
class GRPOConfig:
|
| 64 |
"""Top-level training config for the GRPO skeleton.
|
| 65 |
|
| 66 |
-
Defaults
|
| 67 |
-
|
| 68 |
-
|
| 69 |
-
|
| 70 |
-
|
|
|
|
|
|
|
| 71 |
"""
|
| 72 |
|
| 73 |
-
model_name: str = "
|
| 74 |
max_seq_length: int = 4096
|
|
|
|
|
|
|
| 75 |
load_in_4bit: bool = True
|
| 76 |
|
|
|
|
| 77 |
lora_r: int = 16
|
| 78 |
-
lora_alpha: int =
|
| 79 |
lora_dropout: float = 0.0
|
| 80 |
lora_target_modules: tuple[str, ...] = (
|
| 81 |
"q_proj",
|
|
@@ -87,17 +92,31 @@ class GRPOConfig:
|
|
| 87 |
"down_proj",
|
| 88 |
)
|
| 89 |
|
| 90 |
-
# GRPO knobs
|
| 91 |
-
|
|
|
|
|
|
|
| 92 |
learning_rate: float = 5e-6
|
| 93 |
max_steps: int = 500
|
| 94 |
-
gradient_accumulation_steps: int =
|
| 95 |
warmup_steps: int = 10
|
| 96 |
-
|
| 97 |
-
|
| 98 |
-
|
| 99 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 100 |
seed: int = 0
|
|
|
|
|
|
|
|
|
|
|
|
|
| 101 |
|
| 102 |
# Env wiring
|
| 103 |
env_base_url: str = env_str("SQL_DRIFT_ENV_URL", "http://localhost:8000")
|
|
@@ -120,6 +139,8 @@ class GRPOConfig:
|
|
| 120 |
raise ValueError("seed must be >= 0")
|
| 121 |
if self.lora_r < 1:
|
| 122 |
raise ValueError("lora_r must be >= 1")
|
|
|
|
|
|
|
| 123 |
if not 0.0 < self.temperature <= 2.0:
|
| 124 |
raise ValueError("temperature must be in (0, 2]")
|
| 125 |
|
|
|
|
| 63 |
class GRPOConfig:
|
| 64 |
"""Top-level training config for the GRPO skeleton.
|
| 65 |
|
| 66 |
+
Defaults pinned to ``Qwen/Qwen3-4B-Instruct-2507`` (Apache-2.0, July 2025
|
| 67 |
+
release, BFCL-v3 = 61.9 native tool-calling) loaded via
|
| 68 |
+
``transformers.AutoModelForCausalLM`` + ``BitsAndBytesConfig`` 4-bit nf4
|
| 69 |
+
QLoRA + ``peft.LoraConfig`` — the stack used by Hugging Face TRL's own
|
| 70 |
+
reference notebooks (``grpo_trl_lora_qlora.ipynb``, the OpenEnv
|
| 71 |
+
Wordle/Echo examples). Every knob is override-able from the CLI or a
|
| 72 |
+
JSON manifest.
|
| 73 |
"""
|
| 74 |
|
| 75 |
+
model_name: str = "Qwen/Qwen3-4B-Instruct-2507"
|
| 76 |
max_seq_length: int = 4096
|
| 77 |
+
# 4-bit nf4 quantization (QLoRA) — fits a 4B model on a free Colab T4
|
| 78 |
+
# in ~6 GB peak. Flip to False on a >=24 GB GPU for plain LoRA.
|
| 79 |
load_in_4bit: bool = True
|
| 80 |
|
| 81 |
+
# LoRA r=16 / alpha=32 mirrors the TRL grpo_trl_lora_qlora reference.
|
| 82 |
lora_r: int = 16
|
| 83 |
+
lora_alpha: int = 32
|
| 84 |
lora_dropout: float = 0.0
|
| 85 |
lora_target_modules: tuple[str, ...] = (
|
| 86 |
"q_proj",
|
|
|
|
| 92 |
"down_proj",
|
| 93 |
)
|
| 94 |
|
| 95 |
+
# GRPO knobs — sized for a free Colab T4 (16 GB) running multi-turn
|
| 96 |
+
# tool-using rollouts: per_device_train_batch_size=1 in TRL,
|
| 97 |
+
# num_generations=2, gradient_accumulation_steps=2.
|
| 98 |
+
group_size: int = 2
|
| 99 |
learning_rate: float = 5e-6
|
| 100 |
max_steps: int = 500
|
| 101 |
+
gradient_accumulation_steps: int = 2
|
| 102 |
warmup_steps: int = 10
|
| 103 |
+
# NOTE: TRL >=0.25 removed `max_prompt_length` from GRPOConfig — prompt
|
| 104 |
+
# length is dataset-driven, not trainer-configurable. And
|
| 105 |
+
# `max_completion_length` is now the TOTAL token budget across the
|
| 106 |
+
# entire multi-turn conversation (all assistant generations + tool
|
| 107 |
+
# results combined), not a per-turn cap. Size it for the worst-case
|
| 108 |
+
# episode (25-step budget * ~80 tokens per turn ≈ 2k).
|
| 109 |
+
max_completion_length: int = 2048
|
| 110 |
+
# Qwen3-Instruct-2507 recommends temperature=0.7 / top_p=0.8 for
|
| 111 |
+
# non-thinking instruct mode. The 2507 line is non-thinking by default,
|
| 112 |
+
# so no `enable_thinking` toggle is needed.
|
| 113 |
+
temperature: float = 0.7
|
| 114 |
+
top_p: float = 0.8
|
| 115 |
seed: int = 0
|
| 116 |
+
# TRL defaults bf16 to True when fp16 is not explicitly set, but Colab
|
| 117 |
+
# T4 supports fp16 only (no bf16 hardware). Keep fp16=True for T4.
|
| 118 |
+
fp16: bool = True
|
| 119 |
+
bf16: bool = False
|
| 120 |
|
| 121 |
# Env wiring
|
| 122 |
env_base_url: str = env_str("SQL_DRIFT_ENV_URL", "http://localhost:8000")
|
|
|
|
| 139 |
raise ValueError("seed must be >= 0")
|
| 140 |
if self.lora_r < 1:
|
| 141 |
raise ValueError("lora_r must be >= 1")
|
| 142 |
+
if self.fp16 and self.bf16:
|
| 143 |
+
raise ValueError("fp16 and bf16 are mutually exclusive")
|
| 144 |
if not 0.0 < self.temperature <= 2.0:
|
| 145 |
raise ValueError("temperature must be in (0, 2]")
|
| 146 |
|
training/grpo_train.py
CHANGED
|
@@ -1,8 +1,8 @@
|
|
| 1 |
"""GRPO training entrypoint wiring for SQLDrift.
|
| 2 |
|
| 3 |
-
This module hosts the building blocks for training a
|
| 4 |
-
model against the SQLDrift
|
| 5 |
-
:class:`trl.GRPOTrainer`:
|
| 6 |
|
| 7 |
* :func:`iter_curriculum` — pure, dependency-free scenario sampler
|
| 8 |
used both by :func:`build_dataset` and by unit tests.
|
|
@@ -125,23 +125,61 @@ def build_dataset(config: GRPOConfig, *, num_rows: int, seed: int = 0) -> Any:
|
|
| 125 |
|
| 126 |
|
| 127 |
def load_model_and_tokenizer(config: GRPOConfig) -> tuple[Any, Any]:
|
| 128 |
-
"""
|
| 129 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 130 |
|
| 131 |
-
model
|
| 132 |
-
|
| 133 |
-
|
| 134 |
-
|
|
|
|
|
|
|
| 135 |
)
|
| 136 |
-
|
| 137 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 138 |
r=config.lora_r,
|
| 139 |
-
target_modules=list(config.lora_target_modules),
|
| 140 |
lora_alpha=config.lora_alpha,
|
| 141 |
lora_dropout=config.lora_dropout,
|
| 142 |
-
|
|
|
|
|
|
|
| 143 |
)
|
| 144 |
-
return model, tokenizer
|
| 145 |
|
| 146 |
|
| 147 |
def build_env_client(config: GRPOConfig) -> Any:
|
|
@@ -212,13 +250,15 @@ def train(config: GRPOConfig) -> Any:
|
|
| 212 |
"""Run the full GRPO training loop against SQLDrift.
|
| 213 |
|
| 214 |
All heavy imports (``trl``, ``datasets``, ``transformers``,
|
| 215 |
-
``
|
| 216 |
-
checkout that only imports :mod:`training.grpo_train`
|
| 217 |
-
:func:`iter_curriculum` never triggers them.
|
| 218 |
-
|
| 219 |
-
|
| 220 |
-
``
|
| 221 |
-
|
|
|
|
|
|
|
| 222 |
"""
|
| 223 |
set_seed(config.seed)
|
| 224 |
out = Path(config.output_dir)
|
|
@@ -236,18 +276,31 @@ def train(config: GRPOConfig) -> Any:
|
|
| 236 |
seed=config.seed,
|
| 237 |
)
|
| 238 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 239 |
trl_args = TRLGRPOConfig(
|
| 240 |
output_dir=str(out),
|
| 241 |
learning_rate=config.learning_rate,
|
| 242 |
max_steps=config.max_steps,
|
| 243 |
-
per_device_train_batch_size=
|
| 244 |
num_generations=config.group_size,
|
| 245 |
gradient_accumulation_steps=config.gradient_accumulation_steps,
|
| 246 |
warmup_steps=config.warmup_steps,
|
| 247 |
-
max_prompt_length=config.max_prompt_length,
|
| 248 |
max_completion_length=config.max_completion_length,
|
| 249 |
temperature=config.temperature,
|
| 250 |
top_p=config.top_p,
|
|
|
|
|
|
|
| 251 |
logging_steps=config.logging_steps,
|
| 252 |
save_steps=config.save_steps,
|
| 253 |
log_completions=True,
|
|
@@ -256,6 +309,7 @@ def train(config: GRPOConfig) -> Any:
|
|
| 256 |
)
|
| 257 |
|
| 258 |
model, tokenizer = load_model_and_tokenizer(config)
|
|
|
|
| 259 |
|
| 260 |
trainer = GRPOTrainer(
|
| 261 |
model=model,
|
|
@@ -264,6 +318,7 @@ def train(config: GRPOConfig) -> Any:
|
|
| 264 |
reward_funcs=reward_from_environments,
|
| 265 |
args=trl_args,
|
| 266 |
environment_factory=partial(SqlDriftToolEnv, env_url=config.env_base_url),
|
|
|
|
| 267 |
)
|
| 268 |
trainer.add_callback(_build_flush_log_history_callback(out / "log_history.jsonl"))
|
| 269 |
|
|
@@ -322,6 +377,7 @@ if __name__ == "__main__":
|
|
| 322 |
__all__ = [
|
| 323 |
"build_dataset",
|
| 324 |
"build_env_client",
|
|
|
|
| 325 |
"iter_curriculum",
|
| 326 |
"load_model_and_tokenizer",
|
| 327 |
"reward_from_environments",
|
|
|
|
| 1 |
"""GRPO training entrypoint wiring for SQLDrift.
|
| 2 |
|
| 3 |
+
This module hosts the building blocks for training a Qwen3-class
|
| 4 |
+
model (default: ``Qwen/Qwen3-4B-Instruct-2507``) against the SQLDrift
|
| 5 |
+
OpenEnv environment with :class:`trl.GRPOTrainer`:
|
| 6 |
|
| 7 |
* :func:`iter_curriculum` — pure, dependency-free scenario sampler
|
| 8 |
used both by :func:`build_dataset` and by unit tests.
|
|
|
|
| 125 |
|
| 126 |
|
| 127 |
def load_model_and_tokenizer(config: GRPOConfig) -> tuple[Any, Any]:
|
| 128 |
+
"""Load the base model with QLoRA-friendly quantization + tokenizer.
|
| 129 |
+
|
| 130 |
+
Mirrors the stack used by Hugging Face TRL's own reference notebooks
|
| 131 |
+
(``grpo_trl_lora_qlora.ipynb`` and the OpenEnv examples): plain
|
| 132 |
+
:class:`transformers.AutoModelForCausalLM` + :class:`BitsAndBytesConfig`
|
| 133 |
+
nf4 4-bit quantization. PEFT/LoRA is layered ON the model by the
|
| 134 |
+
GRPOTrainer itself when ``peft_config`` is passed to its constructor —
|
| 135 |
+
we do not call ``get_peft_model`` here.
|
| 136 |
+
|
| 137 |
+
Returning ``(model, tokenizer)`` keeps the function signature stable
|
| 138 |
+
for callers (notebooks, eval harness, etc.) that prepared LoRA
|
| 139 |
+
separately.
|
| 140 |
+
"""
|
| 141 |
+
import torch
|
| 142 |
+
from transformers import AutoModelForCausalLM, AutoTokenizer
|
| 143 |
+
|
| 144 |
+
quantization_config = None
|
| 145 |
+
if config.load_in_4bit:
|
| 146 |
+
from transformers import BitsAndBytesConfig
|
| 147 |
+
|
| 148 |
+
quantization_config = BitsAndBytesConfig(
|
| 149 |
+
load_in_4bit=True,
|
| 150 |
+
bnb_4bit_quant_type="nf4",
|
| 151 |
+
bnb_4bit_use_double_quant=True,
|
| 152 |
+
bnb_4bit_compute_dtype=torch.float16 if config.fp16 else torch.bfloat16,
|
| 153 |
+
)
|
| 154 |
|
| 155 |
+
model = AutoModelForCausalLM.from_pretrained(
|
| 156 |
+
config.model_name,
|
| 157 |
+
attn_implementation="sdpa",
|
| 158 |
+
dtype="float32" if quantization_config is not None else "auto",
|
| 159 |
+
quantization_config=quantization_config,
|
| 160 |
+
device_map="auto",
|
| 161 |
)
|
| 162 |
+
tokenizer = AutoTokenizer.from_pretrained(config.model_name)
|
| 163 |
+
return model, tokenizer
|
| 164 |
+
|
| 165 |
+
|
| 166 |
+
def build_peft_config(config: GRPOConfig) -> Any:
|
| 167 |
+
"""Build the :class:`peft.LoraConfig` matching ``GRPOConfig`` knobs.
|
| 168 |
+
|
| 169 |
+
Returned separately so callers can pass it to
|
| 170 |
+
``GRPOTrainer(peft_config=...)`` — the TRL-recommended path for
|
| 171 |
+
LoRA/QLoRA training.
|
| 172 |
+
"""
|
| 173 |
+
from peft import LoraConfig
|
| 174 |
+
|
| 175 |
+
return LoraConfig(
|
| 176 |
r=config.lora_r,
|
|
|
|
| 177 |
lora_alpha=config.lora_alpha,
|
| 178 |
lora_dropout=config.lora_dropout,
|
| 179 |
+
target_modules=list(config.lora_target_modules),
|
| 180 |
+
bias="none",
|
| 181 |
+
task_type="CAUSAL_LM",
|
| 182 |
)
|
|
|
|
| 183 |
|
| 184 |
|
| 185 |
def build_env_client(config: GRPOConfig) -> Any:
|
|
|
|
| 250 |
"""Run the full GRPO training loop against SQLDrift.
|
| 251 |
|
| 252 |
All heavy imports (``trl``, ``datasets``, ``transformers``,
|
| 253 |
+
``peft``, ``bitsandbytes``) are deferred into this function body so
|
| 254 |
+
a CPU-only checkout that only imports :mod:`training.grpo_train`
|
| 255 |
+
for, say, :func:`iter_curriculum` never triggers them.
|
| 256 |
+
|
| 257 |
+
Stack: :class:`transformers.AutoModelForCausalLM` (+ optional
|
| 258 |
+
``BitsAndBytesConfig`` 4-bit nf4) → :class:`trl.GRPOTrainer` with
|
| 259 |
+
``environment_factory=SqlDriftToolEnv`` and ``peft_config`` for
|
| 260 |
+
LoRA. Mirrors Hugging Face TRL's official reference notebooks
|
| 261 |
+
(``grpo_trl_lora_qlora.ipynb``, ``openenv_wordle_grpo.ipynb``).
|
| 262 |
"""
|
| 263 |
set_seed(config.seed)
|
| 264 |
out = Path(config.output_dir)
|
|
|
|
| 276 |
seed=config.seed,
|
| 277 |
)
|
| 278 |
|
| 279 |
+
# TRL >=0.25 removed `max_prompt_length` (prompt length is now
|
| 280 |
+
# dataset-driven). `max_completion_length` is the TOTAL token budget
|
| 281 |
+
# across the entire multi-turn conversation, not a per-turn cap —
|
| 282 |
+
# see the OpenEnv integration doc:
|
| 283 |
+
# https://huggingface.co/docs/trl/openenv#max_completion_length-in-multi-turn-episodes
|
| 284 |
+
# Do NOT re-add `max_prompt_length` here; the kwarg no longer exists
|
| 285 |
+
# and its presence raises TypeError on construction.
|
| 286 |
+
# Gemma-4 has no <think> wrapper to suppress, so we don't pass
|
| 287 |
+
# chat_template_kwargs here. per_device_train_batch_size=1 +
|
| 288 |
+
# num_generations=group_size mirrors the Gemma-4 sudoku notebook
|
| 289 |
+
# (TRL requires the per-device batch * grad_accum to be divisible
|
| 290 |
+
# by num_generations; 1*2 % 2 == 0 satisfies that for group_size=2).
|
| 291 |
trl_args = TRLGRPOConfig(
|
| 292 |
output_dir=str(out),
|
| 293 |
learning_rate=config.learning_rate,
|
| 294 |
max_steps=config.max_steps,
|
| 295 |
+
per_device_train_batch_size=1,
|
| 296 |
num_generations=config.group_size,
|
| 297 |
gradient_accumulation_steps=config.gradient_accumulation_steps,
|
| 298 |
warmup_steps=config.warmup_steps,
|
|
|
|
| 299 |
max_completion_length=config.max_completion_length,
|
| 300 |
temperature=config.temperature,
|
| 301 |
top_p=config.top_p,
|
| 302 |
+
fp16=config.fp16,
|
| 303 |
+
bf16=config.bf16,
|
| 304 |
logging_steps=config.logging_steps,
|
| 305 |
save_steps=config.save_steps,
|
| 306 |
log_completions=True,
|
|
|
|
| 309 |
)
|
| 310 |
|
| 311 |
model, tokenizer = load_model_and_tokenizer(config)
|
| 312 |
+
peft_config = build_peft_config(config)
|
| 313 |
|
| 314 |
trainer = GRPOTrainer(
|
| 315 |
model=model,
|
|
|
|
| 318 |
reward_funcs=reward_from_environments,
|
| 319 |
args=trl_args,
|
| 320 |
environment_factory=partial(SqlDriftToolEnv, env_url=config.env_base_url),
|
| 321 |
+
peft_config=peft_config,
|
| 322 |
)
|
| 323 |
trainer.add_callback(_build_flush_log_history_callback(out / "log_history.jsonl"))
|
| 324 |
|
|
|
|
| 377 |
__all__ = [
|
| 378 |
"build_dataset",
|
| 379 |
"build_env_client",
|
| 380 |
+
"build_peft_config",
|
| 381 |
"iter_curriculum",
|
| 382 |
"load_model_and_tokenizer",
|
| 383 |
"reward_from_environments",
|
utilities/run_training_job.py
CHANGED
|
@@ -1,109 +1,477 @@
|
|
| 1 |
-
"""Run SQLDrift GRPO on Hugging Face Jobs (T4 medium).
|
| 2 |
|
| 3 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 4 |
|
| 5 |
-
|
| 6 |
-
2. Push this repo to a remote the job can ``pip install`` from. Either: the Space git URL (``https://huggingface.co/spaces/USER/...``), or a GitHub clone URL. Set ``SQL_DRIFT_REPO_URL`` accordingly.
|
| 7 |
-
3. Export ``HF_TOKEN`` with write scope when you need to push artifacts.
|
| 8 |
|
| 9 |
-
|
| 10 |
-
``
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 11 |
|
| 12 |
-
|
| 13 |
-
planned wall time.
|
| 14 |
|
| 15 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 16 |
"""
|
| 17 |
|
| 18 |
from __future__ import annotations
|
| 19 |
|
|
|
|
| 20 |
import os
|
|
|
|
|
|
|
|
|
|
| 21 |
|
| 22 |
-
from
|
|
|
|
| 23 |
|
| 24 |
-
#
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 25 |
MAX_STEPS = 80
|
| 26 |
-
GROUP_SIZE =
|
| 27 |
SEED = 7
|
| 28 |
-
|
| 29 |
-
|
| 30 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 31 |
|
| 32 |
|
| 33 |
def _required_env(name: str) -> str:
|
| 34 |
value = os.environ.get(name, "").strip()
|
| 35 |
if not value:
|
| 36 |
-
raise SystemExit(f"{name} is not set. See the docstring of {__file__}
|
| 37 |
return value
|
| 38 |
|
| 39 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 40 |
def main() -> None:
|
| 41 |
repo_url = _required_env("SQL_DRIFT_REPO_URL")
|
| 42 |
-
env_url = _required_env("SQL_DRIFT_ENV_URL")
|
| 43 |
hf_token = _required_env("HF_TOKEN")
|
|
|
|
| 44 |
|
| 45 |
-
|
| 46 |
-
|
| 47 |
-
|
| 48 |
-
# requires-python = ">=3.12,<3.14"
|
| 49 |
-
# dependencies = [
|
| 50 |
-
# "sql-drift-env[train] @ git+{repo_url}@main",
|
| 51 |
-
# "peft>=0.19",
|
| 52 |
-
# "bitsandbytes>=0.49",
|
| 53 |
-
# "tensorboard",
|
| 54 |
-
# ]
|
| 55 |
-
# ///
|
| 56 |
-
"""GRPO training entry — runs inside an HF Job container (Linux, CUDA)."""
|
| 57 |
-
import os
|
| 58 |
|
| 59 |
-
|
| 60 |
-
|
| 61 |
-
|
| 62 |
-
|
| 63 |
-
os.environ.setdefault("SQL_DRIFT_MODEL_NAME", {MODEL_ID!r})
|
| 64 |
-
|
| 65 |
-
from training.config import ALL_SCENARIOS, CurriculumConfig, GRPOConfig
|
| 66 |
-
from training.grpo_train import train
|
| 67 |
-
|
| 68 |
-
cfg = GRPOConfig(
|
| 69 |
-
model_name=os.environ["SQL_DRIFT_MODEL_NAME"],
|
| 70 |
-
env_base_url=os.environ["SQL_DRIFT_ENV_URL"],
|
| 71 |
-
output_dir="/outputs/grpo_run",
|
| 72 |
-
max_steps=int(os.environ["SQL_DRIFT_GRPO_MAX_STEPS"]),
|
| 73 |
-
group_size=int(os.environ["SQL_DRIFT_GRPO_GROUP_SIZE"]),
|
| 74 |
-
learning_rate=5e-6,
|
| 75 |
-
warmup_steps=8,
|
| 76 |
-
save_steps=20,
|
| 77 |
-
logging_steps=1,
|
| 78 |
-
max_seq_length=2048,
|
| 79 |
-
max_prompt_length=1536,
|
| 80 |
-
max_completion_length=256,
|
| 81 |
-
seed=int(os.environ["SQL_DRIFT_GRPO_SEED"]),
|
| 82 |
-
curriculum=CurriculumConfig(scenarios=ALL_SCENARIOS, mode="uniform"),
|
| 83 |
-
)
|
| 84 |
-
trainer = train(cfg)
|
| 85 |
-
print("DONE", flush=True)
|
| 86 |
-
'''
|
| 87 |
-
|
| 88 |
-
script_path = "/tmp/sql_drift_train.py"
|
| 89 |
-
with open(script_path, "w") as f:
|
| 90 |
-
f.write(train_script)
|
| 91 |
-
|
| 92 |
-
job = run_uv_job(
|
| 93 |
-
script_path,
|
| 94 |
flavor=HF_JOB_FLAVOR,
|
| 95 |
timeout=TIMEOUT,
|
| 96 |
-
secrets=
|
| 97 |
-
env={
|
|
|
|
|
|
|
|
|
|
|
|
|
| 98 |
)
|
| 99 |
-
|
| 100 |
-
print("Job
|
| 101 |
-
|
| 102 |
-
|
| 103 |
-
|
| 104 |
-
|
| 105 |
-
|
| 106 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 107 |
|
| 108 |
|
| 109 |
if __name__ == "__main__":
|
|
|
|
| 1 |
+
"""Run SQLDrift GRPO on Hugging Face Jobs (T4 medium) with Gemma-4 E2B.
|
| 2 |
|
| 3 |
+
The install + runtime stack is taken **verbatim** from Unsloth's
|
| 4 |
+
official Gemma-4 GRPO notebook
|
| 5 |
+
(``gemma4_(e2b)_reinforcement_learning_sudoku_game.py`` at the repo root,
|
| 6 |
+
which is the source of truth for "what actually resolves cleanly in
|
| 7 |
+
2026-04 against the latest Unsloth/TRL/Transformers/Triton lines").
|
| 8 |
+
The notebook works on a free Colab T4; this script mirrors it inside a
|
| 9 |
+
CUDA 12.6 docker container on HF Jobs so we can train without a Colab
|
| 10 |
+
session.
|
| 11 |
|
| 12 |
+
What this gives you over the previous (Qwen3 / xformers-pinned) version:
|
|
|
|
|
|
|
| 13 |
|
| 14 |
+
* No more torch=2.7.0 ↔ xformers=0.0.30 ↔ unsloth_zoo pin tug-of-war.
|
| 15 |
+
We follow Unsloth's recipe (``torch>=2.8.0``, ``triton>=3.4.0``,
|
| 16 |
+
``unsloth[base] @ git``, ``unsloth_zoo[base] @ git``, then a final
|
| 17 |
+
``--no-deps`` upgrade of ``transformers>=5.5.0`` / ``tokenizers`` /
|
| 18 |
+
``trl>=0.28.0``). Unsloth's git-extras pull a self-consistent set of
|
| 19 |
+
wheels; the ``--no-deps`` upgrade prevents transformers/TRL from
|
| 20 |
+
dragging anything else along.
|
| 21 |
+
* Gemma-4 E2B is multimodal, so we install ``timm`` with ``--no-deps``
|
| 22 |
+
for vision/audio support — exactly as the source-of-truth notebook
|
| 23 |
+
does — even though SQLDrift only feeds text.
|
| 24 |
+
* All CUDA-sensitive wheels (torch, torchvision) come from the
|
| 25 |
+
``cu126`` PyTorch index so they land matching the docker image's
|
| 26 |
+
CUDA minor; a downstream ``--no-deps`` upgrade can't silently swap
|
| 27 |
+
them out.
|
| 28 |
|
| 29 |
+
Two operating modes:
|
|
|
|
| 30 |
|
| 31 |
+
* **HTTP env** (default): set ``SQL_DRIFT_ENV_URL`` to a deployed Space
|
| 32 |
+
URL. The trainer's ``SqlDriftToolEnv`` reaches it over HTTP/WS for
|
| 33 |
+
every tool call.
|
| 34 |
+
* **In-process env**: leave ``SQL_DRIFT_ENV_URL`` unset. The inline
|
| 35 |
+
training script overrides ``training.tool_env.set_client_factory`` so
|
| 36 |
+
each rollout instantiates ``SqlDriftEnvironment()`` inside the same
|
| 37 |
+
container — no Space deploy required.
|
| 38 |
+
|
| 39 |
+
Prerequisites:
|
| 40 |
+
|
| 41 |
+
1. ``HF_TOKEN`` exported with write scope (job creation + log streaming).
|
| 42 |
+
2. ``SQL_DRIFT_REPO_URL`` pointing at a git URL the container can
|
| 43 |
+
``pip install git+<url>`` against. Either:
|
| 44 |
+
- a public GitHub clone URL, or
|
| 45 |
+
- an HF Space repo URL with the token embedded:
|
| 46 |
+
``https://USER:HF_TOKEN@huggingface.co/spaces/USER/sql-drift-env``.
|
| 47 |
+
3. (Optional) ``SQL_DRIFT_ENV_URL`` for HTTP-env mode.
|
| 48 |
+
|
| 49 |
+
Run it with::
|
| 50 |
+
|
| 51 |
+
python utilities/run_training_job.py
|
| 52 |
"""
|
| 53 |
|
| 54 |
from __future__ import annotations
|
| 55 |
|
| 56 |
+
import itertools
|
| 57 |
import os
|
| 58 |
+
import sys
|
| 59 |
+
import time
|
| 60 |
+
from textwrap import dedent
|
| 61 |
|
| 62 |
+
from dotenv import load_dotenv
|
| 63 |
+
from huggingface_hub import fetch_job_logs, inspect_job, run_job
|
| 64 |
|
| 65 |
+
# ---------------------------------------------------------------------------
|
| 66 |
+
# Locked hyperparameters
|
| 67 |
+
# ---------------------------------------------------------------------------
|
| 68 |
+
# Gemma-4 E2B-it. This is the model name baked into the source-of-truth
|
| 69 |
+
# notebook; do not switch back to a Qwen line without revisiting the
|
| 70 |
+
# install block (Qwen3 needs a TRL response-schema chat-template hack
|
| 71 |
+
# that the Gemma family does not).
|
| 72 |
+
MODEL_ID = "unsloth/gemma-4-E2B-it"
|
| 73 |
MAX_STEPS = 80
|
| 74 |
+
GROUP_SIZE = 2 # num_generations per GRPO step (T4 16 GB sweet spot)
|
| 75 |
SEED = 7
|
| 76 |
+
MAX_SEQ_LENGTH = 4096
|
| 77 |
+
# Multi-turn TOTAL token budget across the entire conversation
|
| 78 |
+
# (assistant generations + tool results combined) — TRL >=0.25 redefined
|
| 79 |
+
# `max_completion_length` away from a per-turn cap.
|
| 80 |
+
# https://huggingface.co/docs/trl/openenv#max_completion_length-in-multi-turn-episodes
|
| 81 |
+
MAX_COMPLETION_LENGTH = 2048
|
| 82 |
+
SAVE_STEPS = 20
|
| 83 |
+
LEARNING_RATE = 5e-6
|
| 84 |
+
WARMUP_STEPS = 8
|
| 85 |
+
HF_JOB_FLAVOR = "t4-medium" # 1× T4 16 GB; matches the Colab tier the recipe targets
|
| 86 |
+
TIMEOUT = "20h" # hard cap; billing stops if a run hangs past wall time
|
| 87 |
+
|
| 88 |
+
# CUDA 12.6 + cuDNN 9 on Ubuntu 24.04 (Python 3.12). Torch 2.8 ships a
|
| 89 |
+
# cu126 wheel; keep the docker minor and the wheel tag in lockstep.
|
| 90 |
+
DOCKER_IMAGE = "nvidia/cuda:12.6.3-cudnn-devel-ubuntu24.04"
|
| 91 |
+
TORCH_CUDA_TAG = "cu126"
|
| 92 |
+
|
| 93 |
+
# Triton kernels commit pinned by the Unsloth Gemma-4 notebook. Keep
|
| 94 |
+
# this in sync with that notebook — it's part of the recipe, not a knob.
|
| 95 |
+
TRITON_KERNELS_REF = "0add68262ab0a2e33b84524346cb27cbb2787356"
|
| 96 |
+
|
| 97 |
+
load_dotenv()
|
| 98 |
|
| 99 |
|
| 100 |
def _required_env(name: str) -> str:
|
| 101 |
value = os.environ.get(name, "").strip()
|
| 102 |
if not value:
|
| 103 |
+
raise SystemExit(f"{name} is not set in the environment. See the docstring of {__file__}.")
|
| 104 |
return value
|
| 105 |
|
| 106 |
|
| 107 |
+
def _build_train_script(env_url: str | None) -> str:
|
| 108 |
+
"""Render the in-container training script (stdin to ``python3``).
|
| 109 |
+
|
| 110 |
+
Pure stdlib + 3.12 syntax. Reads no CLI args; everything is baked in
|
| 111 |
+
at build time so the container has nothing to negotiate at runtime.
|
| 112 |
+
"""
|
| 113 |
+
if env_url:
|
| 114 |
+
in_process_setup = ""
|
| 115 |
+
else:
|
| 116 |
+
# In-process mode: override SqlDriftToolEnv's HTTP client with a
|
| 117 |
+
# zero-overhead in-process SqlDriftEnvironment instance per
|
| 118 |
+
# rollout. Avoids the Space deploy + thousands of HTTP round-trips
|
| 119 |
+
# per training run.
|
| 120 |
+
in_process_setup = (
|
| 121 |
+
"from server import SqlDriftEnvironment\n"
|
| 122 |
+
"from training.tool_env import set_client_factory\n"
|
| 123 |
+
"set_client_factory(lambda: SqlDriftEnvironment())\n"
|
| 124 |
+
"print('[setup] in-process env mode enabled (no SQL_DRIFT_ENV_URL)', flush=True)\n"
|
| 125 |
+
)
|
| 126 |
+
|
| 127 |
+
# The wheel layout is site-packages/sql_drift_env/<sibling>; the
|
| 128 |
+
# codebase uses flat imports (``from training...``, ``from server...``).
|
| 129 |
+
# Putting the package directory on sys.path mirrors _cli.py and the
|
| 130 |
+
# PYTHONPATH=/app/env pattern from the Docker entrypoint.
|
| 131 |
+
parts: list[str] = [
|
| 132 |
+
"import sys",
|
| 133 |
+
"import sql_drift_env",
|
| 134 |
+
"",
|
| 135 |
+
"flat = sql_drift_env.__path__[0]",
|
| 136 |
+
"if flat not in sys.path:",
|
| 137 |
+
" sys.path.insert(0, flat)",
|
| 138 |
+
"",
|
| 139 |
+
"# Sanity-check CUDA before doing anything else.",
|
| 140 |
+
"import torch",
|
| 141 |
+
"if not torch.cuda.is_available():",
|
| 142 |
+
" raise SystemExit(",
|
| 143 |
+
' "torch.cuda.is_available() is False. The job is running on CPU; "',
|
| 144 |
+
' "aborting before wasting GPU minutes."',
|
| 145 |
+
" )",
|
| 146 |
+
"print(",
|
| 147 |
+
' f"[setup] torch={torch.__version__} cuda={torch.version.cuda} "',
|
| 148 |
+
' f"device={torch.cuda.get_device_name(0)}",',
|
| 149 |
+
" flush=True,",
|
| 150 |
+
")",
|
| 151 |
+
"",
|
| 152 |
+
in_process_setup,
|
| 153 |
+
"from training.config import ALL_SCENARIOS, CurriculumConfig, GRPOConfig",
|
| 154 |
+
"from training.grpo_train import train",
|
| 155 |
+
"",
|
| 156 |
+
"cfg = GRPOConfig(",
|
| 157 |
+
f" model_name={MODEL_ID!r},",
|
| 158 |
+
f" env_base_url={(env_url or 'http://localhost:8000')!r},",
|
| 159 |
+
' output_dir="/outputs/grpo_run",',
|
| 160 |
+
f" max_steps={MAX_STEPS},",
|
| 161 |
+
f" group_size={GROUP_SIZE},",
|
| 162 |
+
f" learning_rate={LEARNING_RATE},",
|
| 163 |
+
f" warmup_steps={WARMUP_STEPS},",
|
| 164 |
+
f" save_steps={SAVE_STEPS},",
|
| 165 |
+
" logging_steps=1,",
|
| 166 |
+
f" max_seq_length={MAX_SEQ_LENGTH},",
|
| 167 |
+
f" max_completion_length={MAX_COMPLETION_LENGTH},",
|
| 168 |
+
f" seed={SEED},",
|
| 169 |
+
" fp16=True,",
|
| 170 |
+
" bf16=False,",
|
| 171 |
+
" curriculum=CurriculumConfig(",
|
| 172 |
+
" scenarios=ALL_SCENARIOS,",
|
| 173 |
+
' mode="weighted",',
|
| 174 |
+
" weights=(1, 1, 1, 1, 1, 1, 2, 2, 2, 2),",
|
| 175 |
+
" ),",
|
| 176 |
+
")",
|
| 177 |
+
'print("[setup] starting train(cfg)", flush=True)',
|
| 178 |
+
"trainer = train(cfg)",
|
| 179 |
+
'print("DONE", flush=True)',
|
| 180 |
+
]
|
| 181 |
+
return "\n".join(parts)
|
| 182 |
+
|
| 183 |
+
|
| 184 |
+
def _build_preflight_script() -> str:
|
| 185 |
+
"""Post-install preflight: catch dep mismatches in the first ~30s.
|
| 186 |
+
|
| 187 |
+
Asserts that:
|
| 188 |
+
|
| 189 |
+
* torch is the cu126 wheel we asked for (no downstream package
|
| 190 |
+
sneaked a different CUDA tag in)
|
| 191 |
+
* ``torch.cuda.is_available()`` (the image actually has the CUDA stack)
|
| 192 |
+
* ``bitsandbytes`` imports cleanly (its native lib's ``dlopen`` of
|
| 193 |
+
``libnvJitLink`` succeeds)
|
| 194 |
+
* ``unsloth`` and ``unsloth.FastVisionModel`` import cleanly (the
|
| 195 |
+
Gemma-4 multimodal loader is what we use in
|
| 196 |
+
``training/grpo_train.py``)
|
| 197 |
+
"""
|
| 198 |
+
return dedent(
|
| 199 |
+
f"""
|
| 200 |
+
import torch
|
| 201 |
+
|
| 202 |
+
assert torch.cuda.is_available(), (
|
| 203 |
+
f"torch.cuda.is_available() is False (torch={{torch.__version__}}); "
|
| 204 |
+
"image lacks CUDA libs or the wheel is CPU-only."
|
| 205 |
+
)
|
| 206 |
+
assert "+{TORCH_CUDA_TAG}" in torch.__version__, (
|
| 207 |
+
f"torch wheel is {{torch.__version__}} but expected +{TORCH_CUDA_TAG}; "
|
| 208 |
+
"a downstream install bumped torch despite the pip constraint."
|
| 209 |
+
)
|
| 210 |
+
|
| 211 |
+
import bitsandbytes # noqa: F401 triggers native dlopen
|
| 212 |
+
import unsloth # noqa: F401 triggers triton + unsloth_zoo imports
|
| 213 |
+
from unsloth import FastVisionModel # noqa: F401 Gemma-4 loader path
|
| 214 |
+
|
| 215 |
+
print(
|
| 216 |
+
f"[setup] preflight OK torch={{torch.__version__}} "
|
| 217 |
+
f"cuda={{torch.version.cuda}} device={{torch.cuda.get_device_name(0)}}",
|
| 218 |
+
flush=True,
|
| 219 |
+
)
|
| 220 |
+
"""
|
| 221 |
+
).strip()
|
| 222 |
+
|
| 223 |
+
|
| 224 |
+
def _build_command(repo_url: str, env_url: str | None) -> list[str]:
|
| 225 |
+
"""Build the ``["bash", "-c", <script>]`` command for ``run_job``.
|
| 226 |
+
|
| 227 |
+
The bash script mirrors Unsloth's official Gemma-4 GRPO install:
|
| 228 |
+
|
| 229 |
+
1. apt install python3-pip, python3-venv, python3-dev,
|
| 230 |
+
build-essential, git (build-essential + python3-dev are needed
|
| 231 |
+
at runtime for triton's first-use JIT compile of cuda_utils.so).
|
| 232 |
+
2. Create a venv (avoids PEP 668 externally-managed-environment
|
| 233 |
+
lock on Ubuntu 24.04) and bootstrap pip / wheel / setuptools.
|
| 234 |
+
3. Install torch + torchvision from the ``cu126`` index, version
|
| 235 |
+
capture them into a constraints file, and force every subsequent
|
| 236 |
+
install to honor that pin. This stops a downstream ``--no-deps``
|
| 237 |
+
upgrade from silently swapping CUDA minors under us.
|
| 238 |
+
4. Install ``triton``, ``numpy``, ``pillow``, ``bitsandbytes``, then
|
| 239 |
+
``unsloth_zoo[base] @ git`` and ``unsloth[base] @ git`` (the
|
| 240 |
+
``[base]`` extras pull the rest of the Unsloth runtime —
|
| 241 |
+
xformers, etc. — pinned to versions that resolve against torch
|
| 242 |
+
2.8). Then the triton-kernels git pin from the recipe.
|
| 243 |
+
5. ``pip install --upgrade --no-deps`` ``transformers>=5.5.0``,
|
| 244 |
+
``tokenizers``, ``trl>=0.28.0``, ``unsloth``, ``unsloth_zoo``.
|
| 245 |
+
The ``--no-deps`` is load-bearing: without it the upgrade would
|
| 246 |
+
drag transformers/trl deps that can downgrade torch.
|
| 247 |
+
6. ``pip install --no-deps timm`` (Gemma-4 vision/audio).
|
| 248 |
+
7. Install the SQLDrift repo and its trainer-side companions
|
| 249 |
+
(``datasets``, ``accelerate``, ``peft``, ``jmespath``,
|
| 250 |
+
``tensorboard``) under the torch constraint.
|
| 251 |
+
8. Run a preflight Python script asserting torch/cuda/bitsandbytes/
|
| 252 |
+
unsloth all import cleanly, then run the training script.
|
| 253 |
+
"""
|
| 254 |
+
train_py = _build_train_script(env_url)
|
| 255 |
+
preflight_py = _build_preflight_script()
|
| 256 |
+
|
| 257 |
+
bash = dedent(
|
| 258 |
+
f"""
|
| 259 |
+
set -euo pipefail
|
| 260 |
+
echo "[setup] ACCELERATOR=${{ACCELERATOR:-unknown}} CPU=${{CPU_CORES:-?}} MEMORY=${{MEMORY:-?}}"
|
| 261 |
+
|
| 262 |
+
export DEBIAN_FRONTEND=noninteractive
|
| 263 |
+
apt-get update -qq
|
| 264 |
+
apt-get install -y --no-install-recommends \\
|
| 265 |
+
python3-pip python3-venv python3-dev \\
|
| 266 |
+
build-essential \\
|
| 267 |
+
git ca-certificates
|
| 268 |
+
|
| 269 |
+
python3 -m venv /opt/sqldrift
|
| 270 |
+
# shellcheck disable=SC1091
|
| 271 |
+
. /opt/sqldrift/bin/activate
|
| 272 |
+
python -m pip install --no-cache-dir --upgrade pip wheel setuptools
|
| 273 |
+
|
| 274 |
+
# cu126 wheels publish as `2.8.0+cu126` (PEP 440 local segment),
|
| 275 |
+
# which sorts higher than vanilla PyPI 2.8.0 — pip prefers the
|
| 276 |
+
# cu126 wheel automatically when this index is on the path.
|
| 277 |
+
export PIP_EXTRA_INDEX_URL=https://download.pytorch.org/whl/{TORCH_CUDA_TAG}
|
| 278 |
+
|
| 279 |
+
# ---------------------------------------------------------------
|
| 280 |
+
# Step 1 (Gemma-4 recipe line 1): torch + triton + numpy/pillow
|
| 281 |
+
# + torchvision + bitsandbytes, pulled with the cu126 index.
|
| 282 |
+
# We don't pin torch to a specific 2.8 patch — the recipe just
|
| 283 |
+
# asks for ">=2.8.0" and we trust unsloth-zoo[base]'s metadata
|
| 284 |
+
# to keep things self-consistent.
|
| 285 |
+
# ---------------------------------------------------------------
|
| 286 |
+
python -m pip install --no-cache-dir \\
|
| 287 |
+
--index-url https://download.pytorch.org/whl/{TORCH_CUDA_TAG} \\
|
| 288 |
+
--extra-index-url https://pypi.org/simple \\
|
| 289 |
+
"torch>=2.8.0" \\
|
| 290 |
+
torchvision \\
|
| 291 |
+
"triton>=3.4.0" \\
|
| 292 |
+
numpy pillow bitsandbytes
|
| 293 |
+
|
| 294 |
+
# Capture the EXACT installed torch/torchvision versions (incl.
|
| 295 |
+
# the +cu126 local segment) into a pip constraints file so every
|
| 296 |
+
# subsequent install is forced to honor the pin. unsloth's
|
| 297 |
+
# resolver, --no-deps upgrades, and the [train]-extra metadata
|
| 298 |
+
# cannot resolve a different wheel without violating the
|
| 299 |
+
# constraint — pip will error rather than silently swap.
|
| 300 |
+
TORCH_PINNED="$(python -c 'import torch; print(torch.__version__)')"
|
| 301 |
+
TORCHVISION_PINNED="$(python -c 'import torchvision; print(torchvision.__version__)')"
|
| 302 |
+
echo "[setup] pinned torch=${{TORCH_PINNED}} torchvision=${{TORCHVISION_PINNED}}"
|
| 303 |
+
case "${{TORCH_PINNED}}" in
|
| 304 |
+
*+{TORCH_CUDA_TAG}) ;;
|
| 305 |
+
*)
|
| 306 |
+
echo "[setup] FATAL: torch wheel is ${{TORCH_PINNED}} but expected +{TORCH_CUDA_TAG}." >&2
|
| 307 |
+
exit 1
|
| 308 |
+
;;
|
| 309 |
+
esac
|
| 310 |
+
{{
|
| 311 |
+
printf 'torch==%s\\n' "${{TORCH_PINNED}}"
|
| 312 |
+
printf 'torchvision==%s\\n' "${{TORCHVISION_PINNED}}"
|
| 313 |
+
}} > /tmp/constraints.txt
|
| 314 |
+
|
| 315 |
+
# ---------------------------------------------------------------
|
| 316 |
+
# Step 2 (Gemma-4 recipe line 1, cont.): unsloth + unsloth-zoo
|
| 317 |
+
# from git with [base] extras. The [base] extras pull the rest
|
| 318 |
+
# of the Unsloth runtime (xformers etc.) at versions that match
|
| 319 |
+
# torch 2.8 — letting Unsloth own this resolution avoids the
|
| 320 |
+
# torch/xformers tug-of-war we hit on the prior pin.
|
| 321 |
+
# ---------------------------------------------------------------
|
| 322 |
+
python -m pip install --no-cache-dir \\
|
| 323 |
+
--constraint /tmp/constraints.txt \\
|
| 324 |
+
"unsloth_zoo[base] @ git+https://github.com/unslothai/unsloth-zoo" \\
|
| 325 |
+
"unsloth[base] @ git+https://github.com/unslothai/unsloth"
|
| 326 |
+
|
| 327 |
+
# ---------------------------------------------------------------
|
| 328 |
+
# Step 3 (Gemma-4 recipe line 1, end): triton-kernels at the
|
| 329 |
+
# commit the recipe pins.
|
| 330 |
+
# ---------------------------------------------------------------
|
| 331 |
+
python -m pip install --no-cache-dir \\
|
| 332 |
+
--constraint /tmp/constraints.txt \\
|
| 333 |
+
"git+https://github.com/triton-lang/triton.git@{TRITON_KERNELS_REF}#subdirectory=python/triton_kernels"
|
| 334 |
+
|
| 335 |
+
# ---------------------------------------------------------------
|
| 336 |
+
# Step 4 (Gemma-4 recipe line 2): upgrade transformers, tokenizers,
|
| 337 |
+
# trl, unsloth, unsloth_zoo with --no-deps. The --no-deps is
|
| 338 |
+
# load-bearing: without it the resolver would drag in deps that
|
| 339 |
+
# can knock torch off the cu126 pin.
|
| 340 |
+
# ---------------------------------------------------------------
|
| 341 |
+
python -m pip install --no-cache-dir --upgrade --no-deps \\
|
| 342 |
+
"transformers>=5.5.0" \\
|
| 343 |
+
tokenizers \\
|
| 344 |
+
"trl>=0.28.0" \\
|
| 345 |
+
unsloth \\
|
| 346 |
+
unsloth_zoo
|
| 347 |
+
|
| 348 |
+
# ---------------------------------------------------------------
|
| 349 |
+
# Step 5 (Gemma-4 recipe line 3): timm with --no-deps. Gemma-4 is
|
| 350 |
+
# multimodal; FastVisionModel imports timm even for text-only
|
| 351 |
+
# workloads.
|
| 352 |
+
# ---------------------------------------------------------------
|
| 353 |
+
python -m pip install --no-cache-dir --no-deps --upgrade timm
|
| 354 |
+
|
| 355 |
+
# ---------------------------------------------------------------
|
| 356 |
+
# Step 6: trainer-side helpers. Installed under the constraint so
|
| 357 |
+
# transformers/torch versions stay where steps 1-5 left them.
|
| 358 |
+
# jmespath is required by TRL's GRPOTrainer when `tools` /
|
| 359 |
+
# `environment_factory` is set; tensorboard is the report_to
|
| 360 |
+
# backend our run uses.
|
| 361 |
+
# ---------------------------------------------------------------
|
| 362 |
+
python -m pip install --no-cache-dir \\
|
| 363 |
+
--constraint /tmp/constraints.txt \\
|
| 364 |
+
"datasets>=2.20.0,<4.0" \\
|
| 365 |
+
"accelerate>=1.13.0,<2.0" \\
|
| 366 |
+
"peft>=0.19,<1.0" \\
|
| 367 |
+
"jmespath>=1.0,<2.0" \\
|
| 368 |
+
"tensorboard>=2.20,<3.0"
|
| 369 |
+
|
| 370 |
+
# ---------------------------------------------------------------
|
| 371 |
+
# Step 7: install the SQLDrift repo. The [train] extra is
|
| 372 |
+
# intentionally omitted: it's a CPU-side floor for static checks,
|
| 373 |
+
# while the real trainer stack is everything we just installed.
|
| 374 |
+
# ---------------------------------------------------------------
|
| 375 |
+
python -m pip install --no-cache-dir --no-deps \\
|
| 376 |
+
"sql-drift-env @ git+{repo_url}@main"
|
| 377 |
+
# Pull SQLDrift's runtime (non-train) deps explicitly so --no-deps
|
| 378 |
+
# above doesn't strand us without duckdb/openenv-core/etc.
|
| 379 |
+
python -m pip install --no-cache-dir \\
|
| 380 |
+
--constraint /tmp/constraints.txt \\
|
| 381 |
+
"duckdb>=1.5.2,<2.0" \\
|
| 382 |
+
"huggingface-hub>=1.5.0,<2.0" \\
|
| 383 |
+
"openenv-core[core]>=0.2.2,<0.4" \\
|
| 384 |
+
"sqlglot>=30.6.0,<40.0" \\
|
| 385 |
+
"pydantic>=2.8.0,<3.0" \\
|
| 386 |
+
"python-dotenv>=1.2.2,<2.0" \\
|
| 387 |
+
"openai>=2.32.0,<3.0"
|
| 388 |
+
|
| 389 |
+
# ---------------------------------------------------------------
|
| 390 |
+
# Step 8: preflight — fail fast on a CUDA mismatch BEFORE we
|
| 391 |
+
# touch the GPU. Heredoc terminator MUST be at column 0.
|
| 392 |
+
# ---------------------------------------------------------------
|
| 393 |
+
cat > /tmp/preflight.py <<'PYCHECK'
|
| 394 |
+
{preflight_py}
|
| 395 |
+
PYCHECK
|
| 396 |
+
python /tmp/preflight.py
|
| 397 |
+
|
| 398 |
+
# ---------------------------------------------------------------
|
| 399 |
+
# Step 9: run training under the venv's Python.
|
| 400 |
+
# ---------------------------------------------------------------
|
| 401 |
+
cat > /tmp/run.py <<'PYEOF'
|
| 402 |
+
{train_py}
|
| 403 |
+
PYEOF
|
| 404 |
+
python /tmp/run.py
|
| 405 |
+
"""
|
| 406 |
+
).strip()
|
| 407 |
+
return ["bash", "-c", bash]
|
| 408 |
+
|
| 409 |
+
|
| 410 |
def main() -> None:
|
| 411 |
repo_url = _required_env("SQL_DRIFT_REPO_URL")
|
|
|
|
| 412 |
hf_token = _required_env("HF_TOKEN")
|
| 413 |
+
env_url = os.environ.get("SQL_DRIFT_ENV_URL", "").strip() or None
|
| 414 |
|
| 415 |
+
secrets = {"HF_TOKEN": hf_token}
|
| 416 |
+
if env_url:
|
| 417 |
+
secrets["SQL_DRIFT_ENV_URL"] = env_url
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 418 |
|
| 419 |
+
command = _build_command(repo_url, env_url)
|
| 420 |
+
job = run_job(
|
| 421 |
+
image=DOCKER_IMAGE,
|
| 422 |
+
command=command,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 423 |
flavor=HF_JOB_FLAVOR,
|
| 424 |
timeout=TIMEOUT,
|
| 425 |
+
secrets=secrets,
|
| 426 |
+
env={
|
| 427 |
+
"WANDB_DISABLED": "true",
|
| 428 |
+
"TRL_EXPERIMENTAL_SILENCE": "1",
|
| 429 |
+
"HF_HUB_DISABLE_EXPERIMENTAL_WARNING": "1",
|
| 430 |
+
},
|
| 431 |
)
|
| 432 |
+
|
| 433 |
+
print(f"Job URL : {job.url}", flush=True)
|
| 434 |
+
print(f"Job ID : {job.id}", flush=True)
|
| 435 |
+
print(
|
| 436 |
+
"Mode : " + (f"HTTP env ({env_url})" if env_url else "in-process env (no Space)"),
|
| 437 |
+
flush=True,
|
| 438 |
+
)
|
| 439 |
+
print(f"Image : {DOCKER_IMAGE}", flush=True)
|
| 440 |
+
print(f"Flavor : {HF_JOB_FLAVOR} (timeout={TIMEOUT})", flush=True)
|
| 441 |
+
print(f"Model : {MODEL_ID}", flush=True)
|
| 442 |
+
|
| 443 |
+
# Exponential backoff while the job is queued/scheduling so we don't
|
| 444 |
+
# rate-limit the HF API. Sleep grows 5s -> 10s -> 20s -> 40s -> 60s.
|
| 445 |
+
_PRE_RUN_STAGES = {"SCHEDULING", "QUEUED", "PENDING", "INITIALIZING"}
|
| 446 |
+
print("--- waiting for job to start ---", flush=True)
|
| 447 |
+
sleep_times = (5, 10, 20, 40, 60)
|
| 448 |
+
sleeper = itertools.chain(sleep_times, itertools.repeat(sleep_times[-1]))
|
| 449 |
+
while True:
|
| 450 |
+
info = inspect_job(job_id=job.id)
|
| 451 |
+
stage = getattr(info.status, "stage", "?")
|
| 452 |
+
if stage not in _PRE_RUN_STAGES:
|
| 453 |
+
print(f"--- job stage={stage}, opening log stream ---", flush=True)
|
| 454 |
+
break
|
| 455 |
+
print(f" stage={stage} (polling)", flush=True)
|
| 456 |
+
time.sleep(next(sleeper))
|
| 457 |
+
|
| 458 |
+
try:
|
| 459 |
+
for line in fetch_job_logs(job_id=job.id):
|
| 460 |
+
print(line, flush=True)
|
| 461 |
+
except KeyboardInterrupt:
|
| 462 |
+
print(
|
| 463 |
+
"\nlocal stream interrupted; the job continues. "
|
| 464 |
+
f"Cancel billing with: hf jobs cancel {job.id}",
|
| 465 |
+
flush=True,
|
| 466 |
+
)
|
| 467 |
+
return
|
| 468 |
+
|
| 469 |
+
info = inspect_job(job_id=job.id)
|
| 470 |
+
stage = getattr(info.status, "stage", "?")
|
| 471 |
+
msg = getattr(info.status, "message", None)
|
| 472 |
+
print(f"--- job stage={stage} message={msg} ---", flush=True)
|
| 473 |
+
if stage == "ERROR":
|
| 474 |
+
sys.exit(1)
|
| 475 |
|
| 476 |
|
| 477 |
if __name__ == "__main__":
|
uv.lock
CHANGED
|
@@ -10,6 +10,15 @@ resolution-markers = [
|
|
| 10 |
"python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'",
|
| 11 |
]
|
| 12 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 13 |
[[package]]
|
| 14 |
name = "accelerate"
|
| 15 |
version = "1.13.0"
|
|
@@ -530,15 +539,16 @@ wheels = [
|
|
| 530 |
|
| 531 |
[[package]]
|
| 532 |
name = "cuda-bindings"
|
| 533 |
-
version = "
|
| 534 |
source = { registry = "https://pypi.org/simple" }
|
| 535 |
dependencies = [
|
| 536 |
{ name = "cuda-pathfinder", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" },
|
| 537 |
]
|
| 538 |
wheels = [
|
| 539 |
-
{ url = "https://files.pythonhosted.org/packages/
|
| 540 |
-
{ url = "https://files.pythonhosted.org/packages/
|
| 541 |
-
{ url = "https://files.pythonhosted.org/packages/
|
|
|
|
| 542 |
]
|
| 543 |
|
| 544 |
[[package]]
|
|
@@ -550,16 +560,46 @@ wheels = [
|
|
| 550 |
]
|
| 551 |
|
| 552 |
[[package]]
|
| 553 |
-
name = "
|
| 554 |
-
version = "
|
| 555 |
source = { registry = "https://pypi.org/simple" }
|
| 556 |
-
dependencies = [
|
| 557 |
-
{ name = "torch" },
|
| 558 |
-
{ name = "triton", marker = "sys_platform == 'linux'" },
|
| 559 |
-
]
|
| 560 |
-
sdist = { url = "https://files.pythonhosted.org/packages/7e/97/45ff09cfcda7b200389204daa0125168e6544fba257adbbcdf728501d4f9/cut_cross_entropy-25.1.1.tar.gz", hash = "sha256:5fe5924509248b1aea5c890f8887c6a7759f7c8b1ebc0490e42c247c4f7c1e34", size = 22972, upload-time = "2025-01-07T12:21:53.896Z" }
|
| 561 |
wheels = [
|
| 562 |
-
{ url = "https://files.pythonhosted.org/packages/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 563 |
]
|
| 564 |
|
| 565 |
[[package]]
|
|
@@ -588,12 +628,13 @@ wheels = [
|
|
| 588 |
|
| 589 |
[[package]]
|
| 590 |
name = "datasets"
|
| 591 |
-
version = "
|
| 592 |
source = { registry = "https://pypi.org/simple" }
|
| 593 |
dependencies = [
|
| 594 |
{ name = "dill" },
|
| 595 |
{ name = "filelock" },
|
| 596 |
{ name = "fsspec", extra = ["http"] },
|
|
|
|
| 597 |
{ name = "huggingface-hub" },
|
| 598 |
{ name = "multiprocess" },
|
| 599 |
{ name = "numpy" },
|
|
@@ -605,29 +646,9 @@ dependencies = [
|
|
| 605 |
{ name = "tqdm" },
|
| 606 |
{ name = "xxhash" },
|
| 607 |
]
|
| 608 |
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
| 609 |
wheels = [
|
| 610 |
-
{ url = "https://files.pythonhosted.org/packages/
|
| 611 |
-
]
|
| 612 |
-
|
| 613 |
-
[[package]]
|
| 614 |
-
name = "diffusers"
|
| 615 |
-
version = "0.37.1"
|
| 616 |
-
source = { registry = "https://pypi.org/simple" }
|
| 617 |
-
dependencies = [
|
| 618 |
-
{ name = "filelock" },
|
| 619 |
-
{ name = "httpx" },
|
| 620 |
-
{ name = "huggingface-hub" },
|
| 621 |
-
{ name = "importlib-metadata" },
|
| 622 |
-
{ name = "numpy" },
|
| 623 |
-
{ name = "pillow" },
|
| 624 |
-
{ name = "regex" },
|
| 625 |
-
{ name = "requests" },
|
| 626 |
-
{ name = "safetensors" },
|
| 627 |
-
]
|
| 628 |
-
sdist = { url = "https://files.pythonhosted.org/packages/46/5c/f4c2eb8d481fe8784a7e2331fbaab820079c06676185fa6d2177b386d590/diffusers-0.37.1.tar.gz", hash = "sha256:2346c21f77f835f273b7aacbaada1c34a596a3a2cc6ddc99d149efcd0ec298fa", size = 4135139, upload-time = "2026-03-25T08:04:04.515Z" }
|
| 629 |
-
wheels = [
|
| 630 |
-
{ url = "https://files.pythonhosted.org/packages/9c/dd/51c38785ce5e1c287b5ad17ba550edaaaffce0deb0da4857019c6700fbaf/diffusers-0.37.1-py3-none-any.whl", hash = "sha256:0537c0b28cb53cf39d6195489bcf8f833986df556c10f5e28ab7427b86fc8b90", size = 5001536, upload-time = "2026-03-25T08:04:02.385Z" },
|
| 631 |
]
|
| 632 |
|
| 633 |
[[package]]
|
|
@@ -949,6 +970,37 @@ wheels = [
|
|
| 949 |
{ url = "https://files.pythonhosted.org/packages/28/27/3d6dcadc8a3214d8522c1e7f6a19554e33659be44546d44a2f7572ac7d2a/groovy-0.1.2-py3-none-any.whl", hash = "sha256:7f7975bab18c729a257a8b1ae9dcd70b7cafb1720481beae47719af57c35fa64", size = 14090, upload-time = "2025-02-28T20:24:55.152Z" },
|
| 950 |
]
|
| 951 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 952 |
[[package]]
|
| 953 |
name = "h11"
|
| 954 |
version = "0.16.0"
|
|
@@ -971,38 +1023,6 @@ wheels = [
|
|
| 971 |
{ url = "https://files.pythonhosted.org/packages/30/2d/afff2ee87e75d8eb85c92bb8cf0e15b05c23c2ebd8fd8dec781d8601ed7f/hf_gradio-0.4.1-py3-none-any.whl", hash = "sha256:76b8cb8be6abe62d74c1ad2d35b42f0629db89aa9e1a8d033cecfe7c856eeab3", size = 4482, upload-time = "2026-04-17T19:53:31.827Z" },
|
| 972 |
]
|
| 973 |
|
| 974 |
-
[[package]]
|
| 975 |
-
name = "hf-transfer"
|
| 976 |
-
version = "0.1.9"
|
| 977 |
-
source = { registry = "https://pypi.org/simple" }
|
| 978 |
-
sdist = { url = "https://files.pythonhosted.org/packages/1a/eb/8fc64f40388c29ce8ce3b2b180a089d4d6b25b1d0d232d016704cb852104/hf_transfer-0.1.9.tar.gz", hash = "sha256:035572865dab29d17e783fbf1e84cf1cb24f3fcf8f1b17db1cfc7fdf139f02bf", size = 25201, upload-time = "2025-01-07T10:05:12.947Z" }
|
| 979 |
-
wheels = [
|
| 980 |
-
{ url = "https://files.pythonhosted.org/packages/a4/78/0dce00208f585fae675f40033ef9a30dedfa83665d5ac79f16beb4a0a6c2/hf_transfer-0.1.9-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:6e94e8822da79573c9b6ae4d6b2f847c59a7a06c5327d7db20751b68538dc4f6", size = 1386084, upload-time = "2025-01-07T10:04:47.874Z" },
|
| 981 |
-
{ url = "https://files.pythonhosted.org/packages/ea/2e/3d60b1a9e9f29a2152aa66c823bf5e399ae7be3fef310ff0de86779c5d2d/hf_transfer-0.1.9-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3ebc4ab9023414880c8b1d3c38174d1c9989eb5022d37e814fa91a3060123eb0", size = 1343558, upload-time = "2025-01-07T10:04:42.313Z" },
|
| 982 |
-
{ url = "https://files.pythonhosted.org/packages/fb/38/130a5ac3747f104033591bcac1c961cb1faadfdc91704f59b09c0b465ff2/hf_transfer-0.1.9-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8674026f21ed369aa2a0a4b46000aca850fc44cd2b54af33a172ce5325b4fc82", size = 3726676, upload-time = "2025-01-07T10:04:11.539Z" },
|
| 983 |
-
{ url = "https://files.pythonhosted.org/packages/15/a1/f4e27c5ad17aac616ae0849e2aede5aae31db8267a948c6b3eeb9fd96446/hf_transfer-0.1.9-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3a736dfbb2c84f5a2c975478ad200c0c8bfcb58a25a35db402678fb87ce17fa4", size = 3062920, upload-time = "2025-01-07T10:04:16.297Z" },
|
| 984 |
-
{ url = "https://files.pythonhosted.org/packages/8d/0d/727abdfba39bc3f1132cfa4c970588c2c0bb0d82fe2d645cc10f4e2f8e0b/hf_transfer-0.1.9-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:504b8427fd785dd8546d53b9fafe6e436bd7a3adf76b9dce556507650a7b4567", size = 3578681, upload-time = "2025-01-07T10:04:29.702Z" },
|
| 985 |
-
{ url = "https://files.pythonhosted.org/packages/50/d0/2b213eb1ea8b1252ccaf1a6c804d0aba03fea38aae4124df6a3acb70511a/hf_transfer-0.1.9-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2c7fc1b85f4d0f76e452765d7648c9f4bfd0aedb9ced2ae1ebfece2d8cfaf8e2", size = 3398837, upload-time = "2025-01-07T10:04:22.778Z" },
|
| 986 |
-
{ url = "https://files.pythonhosted.org/packages/8c/8a/79dbce9006e0bd6b74516f97451a7b7c64dbbb426df15d901dd438cfeee3/hf_transfer-0.1.9-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d991376f0eac70a60f0cbc95602aa708a6f7c8617f28b4945c1431d67b8e3c8", size = 3546986, upload-time = "2025-01-07T10:04:36.415Z" },
|
| 987 |
-
{ url = "https://files.pythonhosted.org/packages/a9/f7/9ac239b6ee6fe0bad130325d987a93ea58c4118e50479f0786f1733b37e8/hf_transfer-0.1.9-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:e6ac4eddcd99575ed3735ed911ddf9d1697e2bd13aa3f0ad7e3904dd4863842e", size = 4071715, upload-time = "2025-01-07T10:04:53.224Z" },
|
| 988 |
-
{ url = "https://files.pythonhosted.org/packages/d8/a3/0ed697279f5eeb7a40f279bd783cf50e6d0b91f24120dcf66ef2cf8822b4/hf_transfer-0.1.9-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:57fd9880da1ee0f47250f735f791fab788f0aa1ee36afc49f761349869c8b4d9", size = 3388081, upload-time = "2025-01-07T10:04:57.818Z" },
|
| 989 |
-
{ url = "https://files.pythonhosted.org/packages/dc/eb/47e477bdf1d784f31c7540db6cc8c354b777e51a186897a7abda34517f36/hf_transfer-0.1.9-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:5d561f0520f493c66b016d99ceabe69c23289aa90be38dd802d2aef279f15751", size = 3658654, upload-time = "2025-01-07T10:05:03.168Z" },
|
| 990 |
-
{ url = "https://files.pythonhosted.org/packages/45/07/6661e43fbee09594a8a5e9bb778107d95fe38dac4c653982afe03d32bd4d/hf_transfer-0.1.9-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a5b366d34cd449fe9b20ef25941e6eef0460a2f74e7389f02e673e1f88ebd538", size = 3690551, upload-time = "2025-01-07T10:05:09.238Z" },
|
| 991 |
-
{ url = "https://files.pythonhosted.org/packages/81/f5/461d2e5f307e5048289b1168d5c642ae3bb2504e88dff1a38b92ed990a21/hf_transfer-0.1.9-cp38-abi3-macosx_10_12_x86_64.whl", hash = "sha256:e66acf91df4a8b72f60223059df3003062a5ae111757187ed1a06750a30e911b", size = 1393046, upload-time = "2025-01-07T10:04:51.003Z" },
|
| 992 |
-
{ url = "https://files.pythonhosted.org/packages/41/ba/8d9fd9f1083525edfcb389c93738c802f3559cb749324090d7109c8bf4c2/hf_transfer-0.1.9-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:8669dbcc7a3e2e8d61d42cd24da9c50d57770bd74b445c65123291ca842a7e7a", size = 1348126, upload-time = "2025-01-07T10:04:45.712Z" },
|
| 993 |
-
{ url = "https://files.pythonhosted.org/packages/8e/a2/cd7885bc9959421065a6fae0fe67b6c55becdeda4e69b873e52976f9a9f0/hf_transfer-0.1.9-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8fd0167c4407a3bc4cdd0307e65ada2294ec04f1813d8a69a5243e379b22e9d8", size = 3728604, upload-time = "2025-01-07T10:04:14.173Z" },
|
| 994 |
-
{ url = "https://files.pythonhosted.org/packages/f6/2e/a072cf196edfeda3310c9a5ade0a0fdd785e6154b3ce24fc738c818da2a7/hf_transfer-0.1.9-cp38-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ee8b10afedcb75f71091bcc197c526a6ebf5c58bbbadb34fdeee6160f55f619f", size = 3064995, upload-time = "2025-01-07T10:04:18.663Z" },
|
| 995 |
-
{ url = "https://files.pythonhosted.org/packages/c2/84/aec9ef4c0fab93c1ea2b1badff38c78b4b2f86f0555b26d2051dbc920cde/hf_transfer-0.1.9-cp38-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5828057e313de59300dd1abb489444bc452efe3f479d3c55b31a8f680936ba42", size = 3580908, upload-time = "2025-01-07T10:04:32.834Z" },
|
| 996 |
-
{ url = "https://files.pythonhosted.org/packages/29/63/b560d39651a56603d64f1a0212d0472a44cbd965db2fa62b99d99cb981bf/hf_transfer-0.1.9-cp38-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fc6bd19e1cc177c66bdef15ef8636ad3bde79d5a4f608c158021153b4573509d", size = 3400839, upload-time = "2025-01-07T10:04:26.122Z" },
|
| 997 |
-
{ url = "https://files.pythonhosted.org/packages/d6/d8/f87ea6f42456254b48915970ed98e993110521e9263472840174d32c880d/hf_transfer-0.1.9-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdca9bfb89e6f8f281890cc61a8aff2d3cecaff7e1a4d275574d96ca70098557", size = 3552664, upload-time = "2025-01-07T10:04:40.123Z" },
|
| 998 |
-
{ url = "https://files.pythonhosted.org/packages/d6/56/1267c39b65fc8f4e2113b36297320f102718bf5799b544a6cbe22013aa1d/hf_transfer-0.1.9-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:89a23f58b7b7effbc047b8ca286f131b17728c99a9f972723323003ffd1bb916", size = 4073732, upload-time = "2025-01-07T10:04:55.624Z" },
|
| 999 |
-
{ url = "https://files.pythonhosted.org/packages/82/1a/9c748befbe3decf7cb415e34f8a0c3789a0a9c55910dea73d581e48c0ce5/hf_transfer-0.1.9-cp38-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:dc7fff1345980d6c0ebb92c811d24afa4b98b3e07ed070c8e38cc91fd80478c5", size = 3390096, upload-time = "2025-01-07T10:04:59.98Z" },
|
| 1000 |
-
{ url = "https://files.pythonhosted.org/packages/72/85/4c03da147b6b4b7cb12e074d3d44eee28604a387ed0eaf7eaaead5069c57/hf_transfer-0.1.9-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:1a6bd16c667ebe89a069ca163060127a794fa3a3525292c900b8c8cc47985b0d", size = 3664743, upload-time = "2025-01-07T10:05:05.416Z" },
|
| 1001 |
-
{ url = "https://files.pythonhosted.org/packages/e7/6e/e597b04f753f1b09e6893075d53a82a30c13855cbaa791402695b01e369f/hf_transfer-0.1.9-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:d2fde99d502093ade3ab1b53f80da18480e9902aa960dab7f74fb1b9e5bc5746", size = 3695243, upload-time = "2025-01-07T10:05:11.411Z" },
|
| 1002 |
-
{ url = "https://files.pythonhosted.org/packages/09/89/d4e234727a26b2546c8fb70a276cd924260d60135f2165bf8b9ed67bb9a4/hf_transfer-0.1.9-cp38-abi3-win32.whl", hash = "sha256:435cc3cdc8524ce57b074032b8fd76eed70a4224d2091232fa6a8cef8fd6803e", size = 1086605, upload-time = "2025-01-07T10:05:18.873Z" },
|
| 1003 |
-
{ url = "https://files.pythonhosted.org/packages/a1/14/f1e15b851d1c2af5b0b1a82bf8eb10bda2da62d98180220ba6fd8879bb5b/hf_transfer-0.1.9-cp38-abi3-win_amd64.whl", hash = "sha256:16f208fc678911c37e11aa7b586bc66a37d02e636208f18b6bc53d29b5df40ad", size = 1160240, upload-time = "2025-01-07T10:05:14.324Z" },
|
| 1004 |
-
]
|
| 1005 |
-
|
| 1006 |
[[package]]
|
| 1007 |
name = "hf-xet"
|
| 1008 |
version = "1.4.3"
|
|
@@ -1066,21 +1086,22 @@ wheels = [
|
|
| 1066 |
|
| 1067 |
[[package]]
|
| 1068 |
name = "huggingface-hub"
|
| 1069 |
-
version = "
|
| 1070 |
source = { registry = "https://pypi.org/simple" }
|
| 1071 |
dependencies = [
|
| 1072 |
{ name = "filelock" },
|
| 1073 |
{ name = "fsspec" },
|
| 1074 |
-
{ name = "hf-xet", marker = "platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'arm64' or platform_machine == 'x86_64'" },
|
|
|
|
| 1075 |
{ name = "packaging" },
|
| 1076 |
{ name = "pyyaml" },
|
| 1077 |
-
{ name = "requests" },
|
| 1078 |
{ name = "tqdm" },
|
|
|
|
| 1079 |
{ name = "typing-extensions" },
|
| 1080 |
]
|
| 1081 |
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
| 1082 |
wheels = [
|
| 1083 |
-
{ url = "https://files.pythonhosted.org/packages/
|
| 1084 |
]
|
| 1085 |
|
| 1086 |
[[package]]
|
|
@@ -1212,6 +1233,15 @@ wheels = [
|
|
| 1212 |
{ url = "https://files.pythonhosted.org/packages/da/e9/1f9ada30cef7b05e74bb06f52127e7a724976c225f46adb65c37b1dadfb6/jiter-0.14.0-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:67f00d94b281174144d6532a04b66a12cb866cbdc47c3af3bfe2973677f9861a", size = 349613, upload-time = "2026-04-10T14:28:40.066Z" },
|
| 1213 |
]
|
| 1214 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1215 |
[[package]]
|
| 1216 |
name = "joserfc"
|
| 1217 |
version = "1.6.4"
|
|
@@ -1381,6 +1411,15 @@ wheels = [
|
|
| 1381 |
{ url = "https://files.pythonhosted.org/packages/a4/0a/92c244309b774e290ddb15e93363846ae7aa753d9586b8aad511c5e6145b/librt-0.9.0-cp313-cp313-win_arm64.whl", hash = "sha256:4c4d0440a3a8e31d962340c3e1cc3fc9ee7febd34c8d8f770d06adb947779ea5", size = 53728, upload-time = "2026-04-09T16:05:33.31Z" },
|
| 1382 |
]
|
| 1383 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1384 |
[[package]]
|
| 1385 |
name = "markdown-it-py"
|
| 1386 |
version = "4.0.0"
|
|
@@ -1526,30 +1565,6 @@ wheels = [
|
|
| 1526 |
{ url = "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c", size = 536198, upload-time = "2023-03-07T16:47:09.197Z" },
|
| 1527 |
]
|
| 1528 |
|
| 1529 |
-
[[package]]
|
| 1530 |
-
name = "msgspec"
|
| 1531 |
-
version = "0.21.1"
|
| 1532 |
-
source = { registry = "https://pypi.org/simple" }
|
| 1533 |
-
sdist = { url = "https://files.pythonhosted.org/packages/e3/60/f79b9b013a16fa3a58350c9295ddc6789f2e335f36ea61ed10a21b215364/msgspec-0.21.1.tar.gz", hash = "sha256:2313508e394b0d208f8f56892ca9b2799e2561329de9763b19619595a6c0f72c", size = 319193, upload-time = "2026-04-12T21:44:50.394Z" }
|
| 1534 |
-
wheels = [
|
| 1535 |
-
{ url = "https://files.pythonhosted.org/packages/6e/cf/317224852c00248c620a9bcf4b26e2e4ab8afd752f18d2a6ef73ebd423b6/msgspec-0.21.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d4248cf0b6129b7d230eacd493c17cc2d4f3989f3bb7f633a928a85b7dcfa251", size = 196188, upload-time = "2026-04-12T21:44:07.181Z" },
|
| 1536 |
-
{ url = "https://files.pythonhosted.org/packages/6d/81/074612945c0666078f7366f40000013de9f6ba687491d450df699bceebc9/msgspec-0.21.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5102c7e9b3acff82178449b85006d96310e690291bb1ea0142f1b24bcb8aabcb", size = 188473, upload-time = "2026-04-12T21:44:08.736Z" },
|
| 1537 |
-
{ url = "https://files.pythonhosted.org/packages/8a/37/655101799590bcc5fddb2bd3fe0e6194e816c2d1da7c361725f5eb89a910/msgspec-0.21.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:846758412e9518252b2ac9bffd6f0e54d9ff614f5f9488df7749f81ff5c80920", size = 218871, upload-time = "2026-04-12T21:44:09.917Z" },
|
| 1538 |
-
{ url = "https://files.pythonhosted.org/packages/b5/d1/d4cd9fe89c7d400d7a18f86ccc94daa3f0927f53558846fcb60791dce5d6/msgspec-0.21.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:21995e74b5c598c2e004110ad66ec7f1b8c20bf2bcf3b2de8fd9a3094422d3ff", size = 225025, upload-time = "2026-04-12T21:44:11.191Z" },
|
| 1539 |
-
{ url = "https://files.pythonhosted.org/packages/24/bf/e20549e602b9edccadeeff98760345a416f9cce846a657e8b18e3396b212/msgspec-0.21.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6129f0cca52992e898fd5344187f7c8127b63d810b2fd73e36fca73b4c6475ee", size = 222672, upload-time = "2026-04-12T21:44:12.481Z" },
|
| 1540 |
-
{ url = "https://files.pythonhosted.org/packages/b4/68/04d7a8f0f786545cf9b8c280c57aa6befb5977af6e884b8b54191cbe44b3/msgspec-0.21.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ef3ec2296248d1f8b9231acb051b6d471dfde8f21819e86c9adaaa9f42918521", size = 227303, upload-time = "2026-04-12T21:44:13.709Z" },
|
| 1541 |
-
{ url = "https://files.pythonhosted.org/packages/cc/4d/619866af2840875be408047bf9e70ceafbae6ab50660de7134ed1b25eb86/msgspec-0.21.1-cp312-cp312-win_amd64.whl", hash = "sha256:d4ab834a054c6f0cbeef6df9e7e1b33d5f1bc7b86dea1d2fd7cad003873e783d", size = 190017, upload-time = "2026-04-12T21:44:14.977Z" },
|
| 1542 |
-
{ url = "https://files.pythonhosted.org/packages/5e/2e/a8f9eca8fd00e097d7a9e99ba8a4685db994494448e3d4f0b7f6e9a3c0f7/msgspec-0.21.1-cp312-cp312-win_arm64.whl", hash = "sha256:628aaa35c74950a8c59da330d7e98917e1c7188f983745782027748ee4ca573e", size = 175345, upload-time = "2026-04-12T21:44:16.431Z" },
|
| 1543 |
-
{ url = "https://files.pythonhosted.org/packages/7e/74/f11ede02839b19ff459f88e3145df5d711626ca84da4e23520cebf819367/msgspec-0.21.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:764173717a01743f007e9f74520ed281f24672c604514f7d76c1c3a10e8edb66", size = 196176, upload-time = "2026-04-12T21:44:17.613Z" },
|
| 1544 |
-
{ url = "https://files.pythonhosted.org/packages/bb/40/4476c1bd341418a046c4955aff632ec769315d1e3cb94e6acf86d461f9ed/msgspec-0.21.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:344c7cd0eaed1fb81d7959f99100ef71ec9b536881a376f11b9a6c4803365697", size = 188524, upload-time = "2026-04-12T21:44:18.815Z" },
|
| 1545 |
-
{ url = "https://files.pythonhosted.org/packages/ca/d9/9e9d7d7e5061b47540d03d640fab9b3965ba7ae49c1b2154861c8f007518/msgspec-0.21.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:48943e278b3854c2f89f955ddc6f9f430d3f0784b16e47d10604ee0463cd21f5", size = 218880, upload-time = "2026-04-12T21:44:20.028Z" },
|
| 1546 |
-
{ url = "https://files.pythonhosted.org/packages/74/66/2bb344f34abb4b57e60c7c9c761994e0417b9718ec1460bf00c296f2a7ea/msgspec-0.21.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a9aa659ebb0101b1cbc31461212b87e341d961f0ab0772aaf068a99e001ec4aa", size = 225050, upload-time = "2026-04-12T21:44:21.577Z" },
|
| 1547 |
-
{ url = "https://files.pythonhosted.org/packages/1a/84/7c1e412f76092277bf760cef12b7979d03314d259ab5b5cafde5d0c1722d/msgspec-0.21.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7b27d1a8ead2b6f5b0c4f2d07b8be1ccfcc041c8a0e704781edebe3ae13c484", size = 222713, upload-time = "2026-04-12T21:44:22.83Z" },
|
| 1548 |
-
{ url = "https://files.pythonhosted.org/packages/4e/27/0bba04b2b4ef05f3d068429410bc71d2cea925f1596a8f41152cccd5edb8/msgspec-0.21.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:38fe93e86b61328fe544cb7fd871fad5a27c8734bfda90f65e5dbe288ae50f61", size = 227259, upload-time = "2026-04-12T21:44:24.11Z" },
|
| 1549 |
-
{ url = "https://files.pythonhosted.org/packages/b0/2d/09574b0eea02fed2c2c1383dbaae2c7f79dc16dcd6487a886000afb5d7c4/msgspec-0.21.1-cp313-cp313-win_amd64.whl", hash = "sha256:8bc666331c35fcce05a7cd2d6221adbe0f6058f8e750711413d22793c080ac6a", size = 189857, upload-time = "2026-04-12T21:44:25.359Z" },
|
| 1550 |
-
{ url = "https://files.pythonhosted.org/packages/46/34/105b1576ad182879914f0c821f17ee1d13abb165cb060448f96fe2aff078/msgspec-0.21.1-cp313-cp313-win_arm64.whl", hash = "sha256:42bb1241e0750c1a4346f2aa84db26c5ffd99a4eb3a954927d9f149ff2f42898", size = 175403, upload-time = "2026-04-12T21:44:26.608Z" },
|
| 1551 |
-
]
|
| 1552 |
-
|
| 1553 |
[[package]]
|
| 1554 |
name = "multidict"
|
| 1555 |
version = "6.7.1"
|
|
@@ -1717,137 +1732,152 @@ wheels = [
|
|
| 1717 |
]
|
| 1718 |
|
| 1719 |
[[package]]
|
| 1720 |
-
name = "nvidia-cublas
|
| 1721 |
-
version = "
|
| 1722 |
source = { registry = "https://pypi.org/simple" }
|
| 1723 |
wheels = [
|
| 1724 |
-
{ url = "https://files.pythonhosted.org/packages/
|
|
|
|
| 1725 |
]
|
| 1726 |
|
| 1727 |
[[package]]
|
| 1728 |
-
name = "nvidia-cuda-cupti
|
| 1729 |
-
version = "
|
| 1730 |
source = { registry = "https://pypi.org/simple" }
|
| 1731 |
wheels = [
|
| 1732 |
-
{ url = "https://files.pythonhosted.org/packages/
|
|
|
|
| 1733 |
]
|
| 1734 |
|
| 1735 |
[[package]]
|
| 1736 |
-
name = "nvidia-cuda-nvrtc
|
| 1737 |
-
version = "
|
| 1738 |
source = { registry = "https://pypi.org/simple" }
|
| 1739 |
wheels = [
|
| 1740 |
-
{ url = "https://files.pythonhosted.org/packages/
|
|
|
|
| 1741 |
]
|
| 1742 |
|
| 1743 |
[[package]]
|
| 1744 |
-
name = "nvidia-cuda-runtime
|
| 1745 |
-
version = "
|
| 1746 |
source = { registry = "https://pypi.org/simple" }
|
| 1747 |
wheels = [
|
| 1748 |
-
{ url = "https://files.pythonhosted.org/packages/
|
|
|
|
| 1749 |
]
|
| 1750 |
|
| 1751 |
[[package]]
|
| 1752 |
-
name = "nvidia-cudnn-
|
| 1753 |
-
version = "9.
|
| 1754 |
source = { registry = "https://pypi.org/simple" }
|
| 1755 |
dependencies = [
|
| 1756 |
-
{ name = "nvidia-cublas
|
| 1757 |
]
|
| 1758 |
wheels = [
|
| 1759 |
-
{ url = "https://files.pythonhosted.org/packages/
|
|
|
|
| 1760 |
]
|
| 1761 |
|
| 1762 |
[[package]]
|
| 1763 |
-
name = "nvidia-cufft
|
| 1764 |
-
version = "
|
| 1765 |
source = { registry = "https://pypi.org/simple" }
|
| 1766 |
dependencies = [
|
| 1767 |
-
{ name = "nvidia-nvjitlink
|
| 1768 |
]
|
| 1769 |
wheels = [
|
| 1770 |
-
{ url = "https://files.pythonhosted.org/packages/
|
|
|
|
| 1771 |
]
|
| 1772 |
|
| 1773 |
[[package]]
|
| 1774 |
-
name = "nvidia-cufile
|
| 1775 |
-
version = "1.
|
| 1776 |
source = { registry = "https://pypi.org/simple" }
|
| 1777 |
wheels = [
|
| 1778 |
-
{ url = "https://files.pythonhosted.org/packages/
|
|
|
|
| 1779 |
]
|
| 1780 |
|
| 1781 |
[[package]]
|
| 1782 |
-
name = "nvidia-curand
|
| 1783 |
-
version = "10.
|
| 1784 |
source = { registry = "https://pypi.org/simple" }
|
| 1785 |
wheels = [
|
| 1786 |
-
{ url = "https://files.pythonhosted.org/packages/
|
|
|
|
| 1787 |
]
|
| 1788 |
|
| 1789 |
[[package]]
|
| 1790 |
-
name = "nvidia-cusolver
|
| 1791 |
-
version = "
|
| 1792 |
source = { registry = "https://pypi.org/simple" }
|
| 1793 |
dependencies = [
|
| 1794 |
-
{ name = "nvidia-cublas
|
| 1795 |
-
{ name = "nvidia-cusparse
|
| 1796 |
-
{ name = "nvidia-nvjitlink
|
| 1797 |
]
|
| 1798 |
wheels = [
|
| 1799 |
-
{ url = "https://files.pythonhosted.org/packages/
|
|
|
|
| 1800 |
]
|
| 1801 |
|
| 1802 |
[[package]]
|
| 1803 |
-
name = "nvidia-cusparse
|
| 1804 |
-
version = "12.
|
| 1805 |
source = { registry = "https://pypi.org/simple" }
|
| 1806 |
dependencies = [
|
| 1807 |
-
{ name = "nvidia-nvjitlink
|
| 1808 |
]
|
| 1809 |
wheels = [
|
| 1810 |
-
{ url = "https://files.pythonhosted.org/packages/
|
|
|
|
| 1811 |
]
|
| 1812 |
|
| 1813 |
[[package]]
|
| 1814 |
-
name = "nvidia-cusparselt-
|
| 1815 |
-
version = "0.
|
| 1816 |
source = { registry = "https://pypi.org/simple" }
|
| 1817 |
wheels = [
|
| 1818 |
-
{ url = "https://files.pythonhosted.org/packages/
|
|
|
|
| 1819 |
]
|
| 1820 |
|
| 1821 |
[[package]]
|
| 1822 |
-
name = "nvidia-nccl-
|
| 1823 |
-
version = "2.
|
| 1824 |
source = { registry = "https://pypi.org/simple" }
|
| 1825 |
wheels = [
|
| 1826 |
-
{ url = "https://files.pythonhosted.org/packages/
|
|
|
|
| 1827 |
]
|
| 1828 |
|
| 1829 |
[[package]]
|
| 1830 |
-
name = "nvidia-nvjitlink
|
| 1831 |
-
version = "
|
| 1832 |
source = { registry = "https://pypi.org/simple" }
|
| 1833 |
wheels = [
|
| 1834 |
-
{ url = "https://files.pythonhosted.org/packages/
|
|
|
|
| 1835 |
]
|
| 1836 |
|
| 1837 |
[[package]]
|
| 1838 |
-
name = "nvidia-nvshmem-
|
| 1839 |
version = "3.4.5"
|
| 1840 |
source = { registry = "https://pypi.org/simple" }
|
| 1841 |
wheels = [
|
| 1842 |
-
{ url = "https://files.pythonhosted.org/packages/
|
|
|
|
| 1843 |
]
|
| 1844 |
|
| 1845 |
[[package]]
|
| 1846 |
-
name = "nvidia-nvtx
|
| 1847 |
-
version = "
|
| 1848 |
source = { registry = "https://pypi.org/simple" }
|
| 1849 |
wheels = [
|
| 1850 |
-
{ url = "https://files.pythonhosted.org/packages/
|
|
|
|
| 1851 |
]
|
| 1852 |
|
| 1853 |
[[package]]
|
|
@@ -2770,38 +2800,6 @@ wheels = [
|
|
| 2770 |
{ url = "https://files.pythonhosted.org/packages/6a/23/8146aad7d88f4fcb3a6218f41a60f6c2d4e3a72de72da1825dc7c8f7877c/semantic_version-2.10.0-py2.py3-none-any.whl", hash = "sha256:de78a3b8e0feda74cabc54aab2da702113e33ac9d9eb9d2389bcf1f58b7d9177", size = 15552, upload-time = "2022-05-26T13:35:21.206Z" },
|
| 2771 |
]
|
| 2772 |
|
| 2773 |
-
[[package]]
|
| 2774 |
-
name = "sentencepiece"
|
| 2775 |
-
version = "0.2.1"
|
| 2776 |
-
source = { registry = "https://pypi.org/simple" }
|
| 2777 |
-
sdist = { url = "https://files.pythonhosted.org/packages/15/15/2e7a025fc62d764b151ae6d0f2a92f8081755ebe8d4a64099accc6f77ba6/sentencepiece-0.2.1.tar.gz", hash = "sha256:8138cec27c2f2282f4a34d9a016e3374cd40e5c6e9cb335063db66a0a3b71fad", size = 3228515, upload-time = "2025-08-12T07:00:51.718Z" }
|
| 2778 |
-
wheels = [
|
| 2779 |
-
{ url = "https://files.pythonhosted.org/packages/4a/be/32ce495aa1d0e0c323dcb1ba87096037358edee539cac5baf8755a6bd396/sentencepiece-0.2.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:57cae326c8727de58c85977b175af132a7138d84c764635d7e71bbee7e774133", size = 1943152, upload-time = "2025-08-12T06:59:40.048Z" },
|
| 2780 |
-
{ url = "https://files.pythonhosted.org/packages/88/7e/ff23008899a58678e98c6ff592bf4d368eee5a71af96d0df6b38a039dd4f/sentencepiece-0.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:56dd39a3c4d6493db3cdca7e8cc68c6b633f0d4195495cbadfcf5af8a22d05a6", size = 1325651, upload-time = "2025-08-12T06:59:41.536Z" },
|
| 2781 |
-
{ url = "https://files.pythonhosted.org/packages/19/84/42eb3ce4796777a1b5d3699dfd4dca85113e68b637f194a6c8d786f16a04/sentencepiece-0.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d9381351182ff9888cc80e41c632e7e274b106f450de33d67a9e8f6043da6f76", size = 1253645, upload-time = "2025-08-12T06:59:42.903Z" },
|
| 2782 |
-
{ url = "https://files.pythonhosted.org/packages/89/fa/d3d5ebcba3cb9e6d3775a096251860c41a6bc53a1b9461151df83fe93255/sentencepiece-0.2.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:99f955df238021bf11f0fc37cdb54fd5e5b5f7fd30ecc3d93fb48b6815437167", size = 1316273, upload-time = "2025-08-12T06:59:44.476Z" },
|
| 2783 |
-
{ url = "https://files.pythonhosted.org/packages/04/88/14f2f4a2b922d8b39be45bf63d79e6cd3a9b2f248b2fcb98a69b12af12f5/sentencepiece-0.2.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0cdfecef430d985f1c2bcbfff3defd1d95dae876fbd0173376012d2d7d24044b", size = 1387881, upload-time = "2025-08-12T06:59:46.09Z" },
|
| 2784 |
-
{ url = "https://files.pythonhosted.org/packages/fd/b8/903e5ccb77b4ef140605d5d71b4f9e0ad95d456d6184688073ed11712809/sentencepiece-0.2.1-cp312-cp312-win32.whl", hash = "sha256:a483fd29a34c3e34c39ac5556b0a90942bec253d260235729e50976f5dba1068", size = 999540, upload-time = "2025-08-12T06:59:48.023Z" },
|
| 2785 |
-
{ url = "https://files.pythonhosted.org/packages/2d/81/92df5673c067148c2545b1bfe49adfd775bcc3a169a047f5a0e6575ddaca/sentencepiece-0.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:4cdc7c36234fda305e85c32949c5211faaf8dd886096c7cea289ddc12a2d02de", size = 1054671, upload-time = "2025-08-12T06:59:49.895Z" },
|
| 2786 |
-
{ url = "https://files.pythonhosted.org/packages/fe/02/c5e3bc518655d714622bec87d83db9cdba1cd0619a4a04e2109751c4f47f/sentencepiece-0.2.1-cp312-cp312-win_arm64.whl", hash = "sha256:daeb5e9e9fcad012324807856113708614d534f596d5008638eb9b40112cd9e4", size = 1033923, upload-time = "2025-08-12T06:59:51.952Z" },
|
| 2787 |
-
{ url = "https://files.pythonhosted.org/packages/ba/4a/85fbe1706d4d04a7e826b53f327c4b80f849cf1c7b7c5e31a20a97d8f28b/sentencepiece-0.2.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:dcd8161eee7b41aae57ded06272905dbd680a0a04b91edd0f64790c796b2f706", size = 1943150, upload-time = "2025-08-12T06:59:53.588Z" },
|
| 2788 |
-
{ url = "https://files.pythonhosted.org/packages/c2/83/4cfb393e287509fc2155480b9d184706ef8d9fa8cbf5505d02a5792bf220/sentencepiece-0.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c6c8f42949f419ff8c7e9960dbadcfbc982d7b5efc2f6748210d3dd53a7de062", size = 1325651, upload-time = "2025-08-12T06:59:55.073Z" },
|
| 2789 |
-
{ url = "https://files.pythonhosted.org/packages/8d/de/5a007fb53b1ab0aafc69d11a5a3dd72a289d5a3e78dcf2c3a3d9b14ffe93/sentencepiece-0.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:097f3394e99456e9e4efba1737c3749d7e23563dd1588ce71a3d007f25475fff", size = 1253641, upload-time = "2025-08-12T06:59:56.562Z" },
|
| 2790 |
-
{ url = "https://files.pythonhosted.org/packages/2c/d2/f552be5928105588f4f4d66ee37dd4c61460d8097e62d0e2e0eec41bc61d/sentencepiece-0.2.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d7b670879c370d350557edabadbad1f6561a9e6968126e6debca4029e5547820", size = 1316271, upload-time = "2025-08-12T06:59:58.109Z" },
|
| 2791 |
-
{ url = "https://files.pythonhosted.org/packages/96/df/0cfe748ace5485be740fed9476dee7877f109da32ed0d280312c94ec259f/sentencepiece-0.2.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c7f0fd2f2693309e6628aeeb2e2faf6edd221134dfccac3308ca0de01f8dab47", size = 1387882, upload-time = "2025-08-12T07:00:00.701Z" },
|
| 2792 |
-
{ url = "https://files.pythonhosted.org/packages/ac/dd/f7774d42a881ced8e1739f393ab1e82ece39fc9abd4779e28050c2e975b5/sentencepiece-0.2.1-cp313-cp313-win32.whl", hash = "sha256:92b3816aa2339355fda2c8c4e021a5de92180b00aaccaf5e2808972e77a4b22f", size = 999541, upload-time = "2025-08-12T07:00:02.709Z" },
|
| 2793 |
-
{ url = "https://files.pythonhosted.org/packages/dd/e9/932b9eae6fd7019548321eee1ab8d5e3b3d1294df9d9a0c9ac517c7b636d/sentencepiece-0.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:10ed3dab2044c47f7a2e7b4969b0c430420cdd45735d78c8f853191fa0e3148b", size = 1054669, upload-time = "2025-08-12T07:00:04.915Z" },
|
| 2794 |
-
{ url = "https://files.pythonhosted.org/packages/c9/3a/76488a00ea7d6931689cda28726a1447d66bf1a4837943489314593d5596/sentencepiece-0.2.1-cp313-cp313-win_arm64.whl", hash = "sha256:ac650534e2251083c5f75dde4ff28896ce7c8904133dc8fef42780f4d5588fcd", size = 1033922, upload-time = "2025-08-12T07:00:06.496Z" },
|
| 2795 |
-
{ url = "https://files.pythonhosted.org/packages/4a/b6/08fe2ce819e02ccb0296f4843e3f195764ce9829cbda61b7513f29b95718/sentencepiece-0.2.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:8dd4b477a7b069648d19363aad0cab9bad2f4e83b2d179be668efa672500dc94", size = 1946052, upload-time = "2025-08-12T07:00:08.136Z" },
|
| 2796 |
-
{ url = "https://files.pythonhosted.org/packages/ab/d9/1ea0e740591ff4c6fc2b6eb1d7510d02f3fb885093f19b2f3abd1363b402/sentencepiece-0.2.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0c0f672da370cc490e4c59d89e12289778310a0e71d176c541e4834759e1ae07", size = 1327408, upload-time = "2025-08-12T07:00:09.572Z" },
|
| 2797 |
-
{ url = "https://files.pythonhosted.org/packages/99/7e/1fb26e8a21613f6200e1ab88824d5d203714162cf2883248b517deb500b7/sentencepiece-0.2.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:ad8493bea8432dae8d6830365352350f3b4144415a1d09c4c8cb8d30cf3b6c3c", size = 1254857, upload-time = "2025-08-12T07:00:11.021Z" },
|
| 2798 |
-
{ url = "https://files.pythonhosted.org/packages/bc/85/c72fd1f3c7a6010544d6ae07f8ddb38b5e2a7e33bd4318f87266c0bbafbf/sentencepiece-0.2.1-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b81a24733726e3678d2db63619acc5a8dccd074f7aa7a54ecd5ca33ca6d2d596", size = 1315722, upload-time = "2025-08-12T07:00:12.989Z" },
|
| 2799 |
-
{ url = "https://files.pythonhosted.org/packages/4a/e8/661e5bd82a8aa641fd6c1020bd0e890ef73230a2b7215ddf9c8cd8e941c2/sentencepiece-0.2.1-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0a81799d0a68d618e89063fb423c3001a034c893069135ffe51fee439ae474d6", size = 1387452, upload-time = "2025-08-12T07:00:15.088Z" },
|
| 2800 |
-
{ url = "https://files.pythonhosted.org/packages/99/5e/ae66c361023a470afcbc1fbb8da722c72ea678a2fcd9a18f1a12598c7501/sentencepiece-0.2.1-cp313-cp313t-win32.whl", hash = "sha256:89a3ea015517c42c0341d0d962f3e6aaf2cf10d71b1932d475c44ba48d00aa2b", size = 1002501, upload-time = "2025-08-12T07:00:16.966Z" },
|
| 2801 |
-
{ url = "https://files.pythonhosted.org/packages/c1/03/d332828c4ff764e16c1b56c2c8f9a33488bbe796b53fb6b9c4205ddbf167/sentencepiece-0.2.1-cp313-cp313t-win_amd64.whl", hash = "sha256:33f068c9382dc2e7c228eedfd8163b52baa86bb92f50d0488bf2b7da7032e484", size = 1057555, upload-time = "2025-08-12T07:00:18.573Z" },
|
| 2802 |
-
{ url = "https://files.pythonhosted.org/packages/88/14/5aee0bf0864df9bd82bd59e7711362908e4935e3f9cdc1f57246b5d5c9b9/sentencepiece-0.2.1-cp313-cp313t-win_arm64.whl", hash = "sha256:b3616ad246f360e52c85781e47682d31abfb6554c779e42b65333d4b5f44ecc0", size = 1036042, upload-time = "2025-08-12T07:00:20.209Z" },
|
| 2803 |
-
]
|
| 2804 |
-
|
| 2805 |
[[package]]
|
| 2806 |
name = "setuptools"
|
| 2807 |
version = "81.0.0"
|
|
@@ -2869,26 +2867,28 @@ train = [
|
|
| 2869 |
{ name = "accelerate" },
|
| 2870 |
{ name = "bitsandbytes" },
|
| 2871 |
{ name = "datasets" },
|
|
|
|
| 2872 |
{ name = "peft" },
|
|
|
|
| 2873 |
{ name = "transformers" },
|
| 2874 |
-
{ name = "trl" },
|
| 2875 |
-
{ name = "unsloth" },
|
| 2876 |
]
|
| 2877 |
|
| 2878 |
[package.metadata]
|
| 2879 |
requires-dist = [
|
| 2880 |
-
{ name = "accelerate", marker = "extra == 'train'", specifier = ">=1.
|
| 2881 |
-
{ name = "bitsandbytes", marker = "extra == 'train'", specifier = ">=0.
|
| 2882 |
-
{ name = "datasets", marker = "extra == 'train'", specifier = ">=
|
| 2883 |
{ name = "duckdb", specifier = ">=1.5.2,<2.0" },
|
| 2884 |
{ name = "httpx", marker = "extra == 'dev'", specifier = ">=0.28.0" },
|
| 2885 |
-
{ name = "huggingface-hub", specifier = ">=
|
|
|
|
| 2886 |
{ name = "matplotlib", marker = "extra == 'evidence'", specifier = ">=3.8.0,<4.0" },
|
| 2887 |
{ name = "mypy", marker = "extra == 'dev'", specifier = ">=1.20.1" },
|
| 2888 |
{ name = "openai", specifier = ">=2.32.0,<3.0" },
|
| 2889 |
{ name = "openenv-core", extras = ["core"], specifier = ">=0.2.2,<0.4" },
|
| 2890 |
{ name = "pandas", marker = "extra == 'evidence'", specifier = ">=2.0.0,<3.0" },
|
| 2891 |
-
{ name = "peft", marker = "extra == 'train'", specifier = ">=0.
|
| 2892 |
{ name = "pydantic", specifier = ">=2.8.0,<3.0" },
|
| 2893 |
{ name = "pytest", marker = "extra == 'dev'", specifier = ">=9.0.3" },
|
| 2894 |
{ name = "pytest-asyncio", marker = "extra == 'dev'", specifier = ">=1.3.0" },
|
|
@@ -2896,9 +2896,9 @@ requires-dist = [
|
|
| 2896 |
{ name = "python-dotenv", specifier = ">=1.2.2,<2.0" },
|
| 2897 |
{ name = "ruff", marker = "extra == 'dev'", specifier = ">=0.15.11" },
|
| 2898 |
{ name = "sqlglot", specifier = ">=30.6.0,<40.0" },
|
| 2899 |
-
{ name = "
|
| 2900 |
-
{ name = "
|
| 2901 |
-
{ name = "
|
| 2902 |
]
|
| 2903 |
provides-extras = ["evidence", "dev", "train"]
|
| 2904 |
|
|
@@ -2949,6 +2949,36 @@ wheels = [
|
|
| 2949 |
{ url = "https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl", hash = "sha256:e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5", size = 6299353, upload-time = "2025-04-27T18:04:59.103Z" },
|
| 2950 |
]
|
| 2951 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2952 |
[[package]]
|
| 2953 |
name = "tokenizers"
|
| 2954 |
version = "0.22.2"
|
|
@@ -3022,85 +3052,37 @@ wheels = [
|
|
| 3022 |
|
| 3023 |
[[package]]
|
| 3024 |
name = "torch"
|
| 3025 |
-
version = "2.
|
| 3026 |
source = { registry = "https://pypi.org/simple" }
|
| 3027 |
dependencies = [
|
| 3028 |
-
{ name = "cuda-bindings", marker = "
|
|
|
|
| 3029 |
{ name = "filelock" },
|
| 3030 |
{ name = "fsspec" },
|
| 3031 |
{ name = "jinja2" },
|
| 3032 |
{ name = "networkx" },
|
| 3033 |
-
{ name = "nvidia-
|
| 3034 |
-
{ name = "nvidia-
|
| 3035 |
-
{ name = "nvidia-
|
| 3036 |
-
{ name = "nvidia-
|
| 3037 |
-
{ name = "nvidia-cudnn-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
|
| 3038 |
-
{ name = "nvidia-cufft-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
|
| 3039 |
-
{ name = "nvidia-cufile-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
|
| 3040 |
-
{ name = "nvidia-curand-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
|
| 3041 |
-
{ name = "nvidia-cusolver-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
|
| 3042 |
-
{ name = "nvidia-cusparse-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
|
| 3043 |
-
{ name = "nvidia-cusparselt-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
|
| 3044 |
-
{ name = "nvidia-nccl-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
|
| 3045 |
-
{ name = "nvidia-nvjitlink-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
|
| 3046 |
-
{ name = "nvidia-nvshmem-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
|
| 3047 |
-
{ name = "nvidia-nvtx-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
|
| 3048 |
{ name = "setuptools" },
|
| 3049 |
{ name = "sympy" },
|
| 3050 |
-
{ name = "triton", marker = "
|
| 3051 |
{ name = "typing-extensions" },
|
| 3052 |
]
|
| 3053 |
wheels = [
|
| 3054 |
-
{ url = "https://files.pythonhosted.org/packages/
|
| 3055 |
-
{ url = "https://files.pythonhosted.org/packages/
|
| 3056 |
-
{ url = "https://files.pythonhosted.org/packages/
|
| 3057 |
-
{ url = "https://files.pythonhosted.org/packages/
|
| 3058 |
-
{ url = "https://files.pythonhosted.org/packages/
|
| 3059 |
-
{ url = "https://files.pythonhosted.org/packages/
|
| 3060 |
-
{ url = "https://files.pythonhosted.org/packages/
|
| 3061 |
-
{ url = "https://files.pythonhosted.org/packages/
|
| 3062 |
-
{ url = "https://files.pythonhosted.org/packages/
|
| 3063 |
-
{ url = "https://files.pythonhosted.org/packages/
|
| 3064 |
-
{ url = "https://files.pythonhosted.org/packages/
|
| 3065 |
-
{ url = "https://files.pythonhosted.org/packages/
|
| 3066 |
-
{ url = "https://files.pythonhosted.org/packages/1a/0b/39929b148f4824bc3ad6f9f72a29d4ad865bcf7ebfc2fa67584773e083d2/torch-2.10.0-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:3202429f58309b9fa96a614885eace4b7995729f44beb54d3e4a47773649d382", size = 79851305, upload-time = "2026-01-21T16:24:09.209Z" },
|
| 3067 |
-
{ url = "https://files.pythonhosted.org/packages/d8/14/21fbce63bc452381ba5f74a2c0a959fdf5ad5803ccc0c654e752e0dbe91a/torch-2.10.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:aae1b29cd68e50a9397f5ee897b9c24742e9e306f88a807a27d617f07adb3bd8", size = 146005472, upload-time = "2026-01-21T16:22:29.022Z" },
|
| 3068 |
-
{ url = "https://files.pythonhosted.org/packages/54/fd/b207d1c525cb570ef47f3e9f836b154685011fce11a2f444ba8a4084d042/torch-2.10.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:6021db85958db2f07ec94e1bc77212721ba4920c12a18dc552d2ae36a3eb163f", size = 915612644, upload-time = "2026-01-21T16:21:47.019Z" },
|
| 3069 |
-
{ url = "https://files.pythonhosted.org/packages/36/53/0197f868c75f1050b199fe58f9bf3bf3aecac9b4e85cc9c964383d745403/torch-2.10.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ff43db38af76fda183156153983c9a096fc4c78d0cd1e07b14a2314c7f01c2c8", size = 113997015, upload-time = "2026-01-21T16:23:00.767Z" },
|
| 3070 |
-
{ url = "https://files.pythonhosted.org/packages/0e/13/e76b4d9c160e89fff48bf16b449ea324bda84745d2ab30294c37c2434c0d/torch-2.10.0-cp313-none-macosx_11_0_arm64.whl", hash = "sha256:cdf2a523d699b70d613243211ecaac14fe9c5df8a0b0a9c02add60fb2a413e0f", size = 79498248, upload-time = "2026-01-21T16:23:09.315Z" },
|
| 3071 |
-
]
|
| 3072 |
-
|
| 3073 |
-
[[package]]
|
| 3074 |
-
name = "torchao"
|
| 3075 |
-
version = "0.17.0"
|
| 3076 |
-
source = { registry = "https://pypi.org/simple" }
|
| 3077 |
-
wheels = [
|
| 3078 |
-
{ url = "https://files.pythonhosted.org/packages/32/fe/a4036a8e80fa800c92dbcbf75f541cd4c106248b6b579db6dab1800f616a/torchao-0.17.0-cp310-abi3-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:87a418ce0ec064a821ceab83c921b501acef0ce9a6ccd1be358fcd16c3ae8c58", size = 3206172, upload-time = "2026-03-30T22:25:52.974Z" },
|
| 3079 |
-
{ url = "https://files.pythonhosted.org/packages/c9/37/ef37ca885265e5f79a168616767dd416a3cea1cc3b28bb6b503ce4a5b652/torchao-0.17.0-py3-none-any.whl", hash = "sha256:02eba449036715b9ae784fbaa1a6f97994bb7b0421ce92d1d5d1c08e5bd6d349", size = 1200680, upload-time = "2026-03-30T22:25:54.457Z" },
|
| 3080 |
-
]
|
| 3081 |
-
|
| 3082 |
-
[[package]]
|
| 3083 |
-
name = "torchvision"
|
| 3084 |
-
version = "0.25.0"
|
| 3085 |
-
source = { registry = "https://pypi.org/simple" }
|
| 3086 |
-
dependencies = [
|
| 3087 |
-
{ name = "numpy" },
|
| 3088 |
-
{ name = "pillow" },
|
| 3089 |
-
{ name = "torch" },
|
| 3090 |
-
]
|
| 3091 |
-
wheels = [
|
| 3092 |
-
{ url = "https://files.pythonhosted.org/packages/56/3a/6ea0d73f49a9bef38a1b3a92e8dd455cea58470985d25635beab93841748/torchvision-0.25.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c2abe430c90b1d5e552680037d68da4eb80a5852ebb1c811b2b89d299b10573b", size = 1874920, upload-time = "2026-01-21T16:27:45.348Z" },
|
| 3093 |
-
{ url = "https://files.pythonhosted.org/packages/51/f8/c0e1ef27c66e15406fece94930e7d6feee4cb6374bbc02d945a630d6426e/torchvision-0.25.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:b75deafa2dfea3e2c2a525559b04783515e3463f6e830cb71de0fb7ea36fe233", size = 2344556, upload-time = "2026-01-21T16:27:40.125Z" },
|
| 3094 |
-
{ url = "https://files.pythonhosted.org/packages/68/2f/f24b039169db474e8688f649377de082a965fbf85daf4e46c44412f1d15a/torchvision-0.25.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:f25aa9e380865b11ea6e9d99d84df86b9cc959f1a007cd966fc6f1ab2ed0e248", size = 8072351, upload-time = "2026-01-21T16:27:21.074Z" },
|
| 3095 |
-
{ url = "https://files.pythonhosted.org/packages/ad/16/8f650c2e288977cf0f8f85184b90ee56ed170a4919347fc74ee99286ed6f/torchvision-0.25.0-cp312-cp312-win_amd64.whl", hash = "sha256:f9c55ae8d673ab493325d1267cbd285bb94d56f99626c00ac4644de32a59ede3", size = 4303059, upload-time = "2026-01-21T16:27:11.08Z" },
|
| 3096 |
-
{ url = "https://files.pythonhosted.org/packages/f5/5b/1562a04a6a5a4cf8cf40016a0cdeda91ede75d6962cff7f809a85ae966a5/torchvision-0.25.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:24e11199e4d84ba9c5ee7825ebdf1cd37ce8deec225117f10243cae984ced3ec", size = 1874918, upload-time = "2026-01-21T16:27:39.02Z" },
|
| 3097 |
-
{ url = "https://files.pythonhosted.org/packages/36/b1/3d6c42f62c272ce34fcce609bb8939bdf873dab5f1b798fd4e880255f129/torchvision-0.25.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:5f271136d2d2c0b7a24c5671795c6e4fd8da4e0ea98aeb1041f62bc04c4370ef", size = 2309106, upload-time = "2026-01-21T16:27:30.624Z" },
|
| 3098 |
-
{ url = "https://files.pythonhosted.org/packages/c7/60/59bb9c8b67cce356daeed4cb96a717caa4f69c9822f72e223a0eae7a9bd9/torchvision-0.25.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:855c0dc6d37f462482da7531c6788518baedca1e0847f3df42a911713acdfe52", size = 8071522, upload-time = "2026-01-21T16:27:29.392Z" },
|
| 3099 |
-
{ url = "https://files.pythonhosted.org/packages/32/a5/9a9b1de0720f884ea50dbf9acb22cbe5312e51d7b8c4ac6ba9b51efd9bba/torchvision-0.25.0-cp313-cp313-win_amd64.whl", hash = "sha256:cef0196be31be421f6f462d1e9da1101be7332d91984caa6f8022e6c78a5877f", size = 4321911, upload-time = "2026-01-21T16:27:35.195Z" },
|
| 3100 |
-
{ url = "https://files.pythonhosted.org/packages/52/99/dca81ed21ebaeff2b67cc9f815a20fdaa418b69f5f9ea4c6ed71721470db/torchvision-0.25.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a8f8061284395ce31bcd460f2169013382ccf411148ceb2ee38e718e9860f5a7", size = 1896209, upload-time = "2026-01-21T16:27:32.159Z" },
|
| 3101 |
-
{ url = "https://files.pythonhosted.org/packages/28/cc/2103149761fdb4eaed58a53e8437b2d716d48f05174fab1d9fcf1e2a2244/torchvision-0.25.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:146d02c9876858420adf41f3189fe90e3d6a409cbfa65454c09f25fb33bf7266", size = 2310735, upload-time = "2026-01-21T16:27:22.327Z" },
|
| 3102 |
-
{ url = "https://files.pythonhosted.org/packages/76/ad/f4c985ad52ddd3b22711c588501be1b330adaeaf6850317f66751711b78c/torchvision-0.25.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:c4d395cb2c4a2712f6eb93a34476cdf7aae74bb6ea2ea1917f858e96344b00aa", size = 8089557, upload-time = "2026-01-21T16:27:27.666Z" },
|
| 3103 |
-
{ url = "https://files.pythonhosted.org/packages/63/cc/0ea68b5802e5e3c31f44b307e74947bad5a38cc655231d845534ed50ddb8/torchvision-0.25.0-cp313-cp313t-win_amd64.whl", hash = "sha256:5e6b449e9fa7d642142c0e27c41e5a43b508d57ed8e79b7c0a0c28652da8678c", size = 4344260, upload-time = "2026-01-21T16:27:17.018Z" },
|
| 3104 |
]
|
| 3105 |
|
| 3106 |
[[package]]
|
|
@@ -3117,23 +3099,22 @@ wheels = [
|
|
| 3117 |
|
| 3118 |
[[package]]
|
| 3119 |
name = "transformers"
|
| 3120 |
-
version = "
|
| 3121 |
source = { registry = "https://pypi.org/simple" }
|
| 3122 |
dependencies = [
|
| 3123 |
-
{ name = "filelock" },
|
| 3124 |
{ name = "huggingface-hub" },
|
| 3125 |
{ name = "numpy" },
|
| 3126 |
{ name = "packaging" },
|
| 3127 |
{ name = "pyyaml" },
|
| 3128 |
{ name = "regex" },
|
| 3129 |
-
{ name = "requests" },
|
| 3130 |
{ name = "safetensors" },
|
| 3131 |
{ name = "tokenizers" },
|
| 3132 |
{ name = "tqdm" },
|
|
|
|
| 3133 |
]
|
| 3134 |
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
| 3135 |
wheels = [
|
| 3136 |
-
{ url = "https://files.pythonhosted.org/packages/
|
| 3137 |
]
|
| 3138 |
|
| 3139 |
[[package]]
|
|
@@ -3149,40 +3130,25 @@ wheels = [
|
|
| 3149 |
{ url = "https://files.pythonhosted.org/packages/35/f8/9c66bfc55361ec6d0e4040a0337fb5924ceb23de4648b8a81ae9d33b2b38/triton-3.6.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d002e07d7180fd65e622134fbd980c9a3d4211fb85224b56a0a0efbd422ab72f", size = 188400296, upload-time = "2026-01-20T16:00:56.042Z" },
|
| 3150 |
]
|
| 3151 |
|
| 3152 |
-
[[package]]
|
| 3153 |
-
name = "triton-windows"
|
| 3154 |
-
version = "3.6.0.post26"
|
| 3155 |
-
source = { registry = "https://pypi.org/simple" }
|
| 3156 |
-
wheels = [
|
| 3157 |
-
{ url = "https://files.pythonhosted.org/packages/62/1e/8d9814e67ba3f20094cf3c69e7815a491f20beb86469a647550ba86728b0/triton_windows-3.6.0.post26-cp312-cp312-win_amd64.whl", hash = "sha256:189d8c57911aa9d2ff983a715e5c967b325f576307db60924cab22b501a36515", size = 47402104, upload-time = "2026-03-10T02:51:40.997Z" },
|
| 3158 |
-
{ url = "https://files.pythonhosted.org/packages/2e/69/7579a5da5d8c5372711bb4b99a185ad35eae6c7549d85b9f75171e06832b/triton_windows-3.6.0.post26-cp313-cp313-win_amd64.whl", hash = "sha256:033f3d50c6a0e4539a3ccfa042304dbf76bf79155f382f9c09d010323d5a9a32", size = 47402101, upload-time = "2026-03-10T02:51:47.669Z" },
|
| 3159 |
-
]
|
| 3160 |
-
|
| 3161 |
[[package]]
|
| 3162 |
name = "trl"
|
| 3163 |
-
version = "
|
| 3164 |
source = { registry = "https://pypi.org/simple" }
|
| 3165 |
dependencies = [
|
| 3166 |
{ name = "accelerate" },
|
| 3167 |
{ name = "datasets" },
|
|
|
|
| 3168 |
{ name = "packaging" },
|
| 3169 |
{ name = "transformers" },
|
| 3170 |
]
|
| 3171 |
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
| 3172 |
wheels = [
|
| 3173 |
-
{ url = "https://files.pythonhosted.org/packages/
|
| 3174 |
]
|
| 3175 |
|
| 3176 |
-
[
|
| 3177 |
-
|
| 3178 |
-
|
| 3179 |
-
source = { registry = "https://pypi.org/simple" }
|
| 3180 |
-
dependencies = [
|
| 3181 |
-
{ name = "typing-extensions" },
|
| 3182 |
-
]
|
| 3183 |
-
sdist = { url = "https://files.pythonhosted.org/packages/2b/e8/66e25efcc18542d58706ce4e50415710593721aae26e794ab1dec34fb66f/typeguard-4.5.1.tar.gz", hash = "sha256:f6f8ecbbc819c9bc749983cc67c02391e16a9b43b8b27f15dc70ed7c4a007274", size = 80121, upload-time = "2026-02-19T16:09:03.392Z" }
|
| 3184 |
-
wheels = [
|
| 3185 |
-
{ url = "https://files.pythonhosted.org/packages/91/88/b55b3117287a8540b76dbdd87733808d4d01c8067a3b339408c250bb3600/typeguard-4.5.1-py3-none-any.whl", hash = "sha256:44d2bf329d49a244110a090b55f5f91aa82d9a9834ebfd30bcc73651e4a8cc40", size = 36745, upload-time = "2026-02-19T16:09:01.6Z" },
|
| 3186 |
]
|
| 3187 |
|
| 3188 |
[[package]]
|
|
@@ -3221,20 +3187,6 @@ wheels = [
|
|
| 3221 |
{ url = "https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl", hash = "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7", size = 14611, upload-time = "2025-10-01T02:14:40.154Z" },
|
| 3222 |
]
|
| 3223 |
|
| 3224 |
-
[[package]]
|
| 3225 |
-
name = "tyro"
|
| 3226 |
-
version = "1.0.13"
|
| 3227 |
-
source = { registry = "https://pypi.org/simple" }
|
| 3228 |
-
dependencies = [
|
| 3229 |
-
{ name = "docstring-parser" },
|
| 3230 |
-
{ name = "typeguard" },
|
| 3231 |
-
{ name = "typing-extensions" },
|
| 3232 |
-
]
|
| 3233 |
-
sdist = { url = "https://files.pythonhosted.org/packages/24/d6/7126f9e7de139632134d59b5d1972e93c610ee2cb13829e8f4f48f6613cb/tyro-1.0.13.tar.gz", hash = "sha256:731a90c9836b77fffe7c3fa0477ef2d3b6fa91252ddc0bb4d32dadd4fcc143d4", size = 489479, upload-time = "2026-04-14T18:21:52.888Z" }
|
| 3234 |
-
wheels = [
|
| 3235 |
-
{ url = "https://files.pythonhosted.org/packages/93/4f/c43a0a8f0c66fd40a1d6cc47332a5a1d1043e9b331f7070ea701b91a7598/tyro-1.0.13-py3-none-any.whl", hash = "sha256:a0bdb8462c551dd84fc00a76916ce4d37e879c84eefaf34e2165312407cc6c09", size = 185221, upload-time = "2026-04-14T18:21:54.328Z" },
|
| 3236 |
-
]
|
| 3237 |
-
|
| 3238 |
[[package]]
|
| 3239 |
name = "tzdata"
|
| 3240 |
version = "2026.1"
|
|
@@ -3253,75 +3205,6 @@ wheels = [
|
|
| 3253 |
{ url = "https://files.pythonhosted.org/packages/11/e1/7ec67882ad8fc9f86384bef6421fa252c9cbe5744f8df6ce77afc9eca1f5/uncalled_for-0.3.1-py3-none-any.whl", hash = "sha256:074cdc92da8356278f93d0ded6f2a66dd883dbecaf9bc89437646ee2289cc200", size = 11361, upload-time = "2026-04-07T13:05:05.341Z" },
|
| 3254 |
]
|
| 3255 |
|
| 3256 |
-
[[package]]
|
| 3257 |
-
name = "unsloth"
|
| 3258 |
-
version = "2025.9.9"
|
| 3259 |
-
source = { registry = "https://pypi.org/simple" }
|
| 3260 |
-
dependencies = [
|
| 3261 |
-
{ name = "accelerate" },
|
| 3262 |
-
{ name = "bitsandbytes" },
|
| 3263 |
-
{ name = "datasets" },
|
| 3264 |
-
{ name = "diffusers" },
|
| 3265 |
-
{ name = "hf-transfer" },
|
| 3266 |
-
{ name = "huggingface-hub" },
|
| 3267 |
-
{ name = "numpy" },
|
| 3268 |
-
{ name = "packaging" },
|
| 3269 |
-
{ name = "peft" },
|
| 3270 |
-
{ name = "protobuf" },
|
| 3271 |
-
{ name = "psutil" },
|
| 3272 |
-
{ name = "sentencepiece" },
|
| 3273 |
-
{ name = "torch" },
|
| 3274 |
-
{ name = "torchvision" },
|
| 3275 |
-
{ name = "tqdm" },
|
| 3276 |
-
{ name = "transformers" },
|
| 3277 |
-
{ name = "triton", marker = "sys_platform == 'linux'" },
|
| 3278 |
-
{ name = "triton-windows", marker = "sys_platform == 'win32'" },
|
| 3279 |
-
{ name = "trl" },
|
| 3280 |
-
{ name = "tyro" },
|
| 3281 |
-
{ name = "unsloth-zoo" },
|
| 3282 |
-
{ name = "wheel" },
|
| 3283 |
-
{ name = "xformers" },
|
| 3284 |
-
]
|
| 3285 |
-
sdist = { url = "https://files.pythonhosted.org/packages/52/22/f68af71437b0856c3e854c4a663e7735020237aff1b23aec15ebb7146681/unsloth-2025.9.9.tar.gz", hash = "sha256:f1bc5181ca315808f9de0ff08396121d094df2383b29d294c5555f9e81486ca1", size = 277610, upload-time = "2025-09-26T14:14:25.455Z" }
|
| 3286 |
-
wheels = [
|
| 3287 |
-
{ url = "https://files.pythonhosted.org/packages/78/58/0d8b39e8d49912fcc329931403103a963ad4ea92e9332d7b91361f625f0c/unsloth-2025.9.9-py3-none-any.whl", hash = "sha256:01ac19c852ff4684d06c3754c0694a2158e3f0d57b1daa69571e9c9cc4b043f8", size = 317157, upload-time = "2025-09-26T14:14:21.758Z" },
|
| 3288 |
-
]
|
| 3289 |
-
|
| 3290 |
-
[[package]]
|
| 3291 |
-
name = "unsloth-zoo"
|
| 3292 |
-
version = "2025.9.12"
|
| 3293 |
-
source = { registry = "https://pypi.org/simple" }
|
| 3294 |
-
dependencies = [
|
| 3295 |
-
{ name = "accelerate" },
|
| 3296 |
-
{ name = "cut-cross-entropy" },
|
| 3297 |
-
{ name = "datasets" },
|
| 3298 |
-
{ name = "hf-transfer" },
|
| 3299 |
-
{ name = "huggingface-hub" },
|
| 3300 |
-
{ name = "msgspec" },
|
| 3301 |
-
{ name = "numpy" },
|
| 3302 |
-
{ name = "packaging" },
|
| 3303 |
-
{ name = "peft" },
|
| 3304 |
-
{ name = "pillow" },
|
| 3305 |
-
{ name = "protobuf" },
|
| 3306 |
-
{ name = "psutil" },
|
| 3307 |
-
{ name = "regex" },
|
| 3308 |
-
{ name = "sentencepiece" },
|
| 3309 |
-
{ name = "torch" },
|
| 3310 |
-
{ name = "torchao" },
|
| 3311 |
-
{ name = "tqdm" },
|
| 3312 |
-
{ name = "transformers" },
|
| 3313 |
-
{ name = "triton", marker = "sys_platform == 'linux'" },
|
| 3314 |
-
{ name = "triton-windows", marker = "sys_platform == 'win32'" },
|
| 3315 |
-
{ name = "trl" },
|
| 3316 |
-
{ name = "typing-extensions" },
|
| 3317 |
-
{ name = "tyro" },
|
| 3318 |
-
{ name = "wheel" },
|
| 3319 |
-
]
|
| 3320 |
-
sdist = { url = "https://files.pythonhosted.org/packages/9a/a5/3c2f8cd8ade5d6c1ad3c686bf0be109904e45e701e0ab7561c20ac713826/unsloth_zoo-2025.9.12.tar.gz", hash = "sha256:9a9ca709c739d998cb2b79a2dee92b169375ee232ab0cfe5ed47c8d531e04d9a", size = 227231, upload-time = "2025-09-26T15:24:04.67Z" }
|
| 3321 |
-
wheels = [
|
| 3322 |
-
{ url = "https://files.pythonhosted.org/packages/a2/37/ca3503aa67effb62f4ab85c7b5574f3414a6909d5b8bc1ff31b1d3801f1a/unsloth_zoo-2025.9.12-py3-none-any.whl", hash = "sha256:cc611b20bb29ea81312dd45e07a537fa2099b0b18a20492d9666641d60833fab", size = 247744, upload-time = "2025-09-26T15:24:02.52Z" },
|
| 3323 |
-
]
|
| 3324 |
-
|
| 3325 |
[[package]]
|
| 3326 |
name = "urllib3"
|
| 3327 |
version = "2.6.3"
|
|
@@ -3419,29 +3302,15 @@ wheels = [
|
|
| 3419 |
]
|
| 3420 |
|
| 3421 |
[[package]]
|
| 3422 |
-
name = "
|
| 3423 |
-
version = "
|
| 3424 |
source = { registry = "https://pypi.org/simple" }
|
| 3425 |
dependencies = [
|
| 3426 |
-
{ name = "
|
| 3427 |
-
]
|
| 3428 |
-
sdist = { url = "https://files.pythonhosted.org/packages/89/24/a2eb353a6edac9a0303977c4cb048134959dd2a51b48a269dfc9dde00c8a/wheel-0.46.3.tar.gz", hash = "sha256:e3e79874b07d776c40bd6033f8ddf76a7dad46a7b8aa1b2787a83083519a1803", size = 60605, upload-time = "2026-01-22T12:39:49.136Z" }
|
| 3429 |
-
wheels = [
|
| 3430 |
-
{ url = "https://files.pythonhosted.org/packages/87/22/b76d483683216dde3d67cba61fb2444be8d5be289bf628c13fc0fd90e5f9/wheel-0.46.3-py3-none-any.whl", hash = "sha256:4b399d56c9d9338230118d705d9737a2a468ccca63d5e813e2a4fc7815d8bc4d", size = 30557, upload-time = "2026-01-22T12:39:48.099Z" },
|
| 3431 |
-
]
|
| 3432 |
-
|
| 3433 |
-
[[package]]
|
| 3434 |
-
name = "xformers"
|
| 3435 |
-
version = "0.0.35"
|
| 3436 |
-
source = { registry = "https://pypi.org/simple" }
|
| 3437 |
-
dependencies = [
|
| 3438 |
-
{ name = "numpy" },
|
| 3439 |
-
{ name = "torch" },
|
| 3440 |
]
|
| 3441 |
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
| 3442 |
wheels = [
|
| 3443 |
-
{ url = "https://files.pythonhosted.org/packages/
|
| 3444 |
-
{ url = "https://files.pythonhosted.org/packages/49/0b/88c39c128a05d5b553a67cb9c4c3fc32eefb91f836f838befab9e78f8364/xformers-0.0.35-py39-none-win_amd64.whl", hash = "sha256:57381ce3cbb79b593e6b62cb20a937885345fad2796de2aa6fbb66c033601179", size = 2638618, upload-time = "2026-02-20T20:33:04.104Z" },
|
| 3445 |
]
|
| 3446 |
|
| 3447 |
[[package]]
|
|
|
|
| 10 |
"python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'",
|
| 11 |
]
|
| 12 |
|
| 13 |
+
[[package]]
|
| 14 |
+
name = "absl-py"
|
| 15 |
+
version = "2.4.0"
|
| 16 |
+
source = { registry = "https://pypi.org/simple" }
|
| 17 |
+
sdist = { url = "https://files.pythonhosted.org/packages/64/c7/8de93764ad66968d19329a7e0c147a2bb3c7054c554d4a119111b8f9440f/absl_py-2.4.0.tar.gz", hash = "sha256:8c6af82722b35cf71e0f4d1d47dcaebfff286e27110a99fc359349b247dfb5d4", size = 116543, upload-time = "2026-01-28T10:17:05.322Z" }
|
| 18 |
+
wheels = [
|
| 19 |
+
{ url = "https://files.pythonhosted.org/packages/18/a6/907a406bb7d359e6a63f99c313846d9eec4f7e6f7437809e03aa00fa3074/absl_py-2.4.0-py3-none-any.whl", hash = "sha256:88476fd881ca8aab94ffa78b7b6c632a782ab3ba1cd19c9bd423abc4fb4cd28d", size = 135750, upload-time = "2026-01-28T10:17:04.19Z" },
|
| 20 |
+
]
|
| 21 |
+
|
| 22 |
[[package]]
|
| 23 |
name = "accelerate"
|
| 24 |
version = "1.13.0"
|
|
|
|
| 539 |
|
| 540 |
[[package]]
|
| 541 |
name = "cuda-bindings"
|
| 542 |
+
version = "13.2.0"
|
| 543 |
source = { registry = "https://pypi.org/simple" }
|
| 544 |
dependencies = [
|
| 545 |
{ name = "cuda-pathfinder", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" },
|
| 546 |
]
|
| 547 |
wheels = [
|
| 548 |
+
{ url = "https://files.pythonhosted.org/packages/52/c8/b2589d68acf7e3d63e2be330b84bc25712e97ed799affbca7edd7eae25d6/cuda_bindings-13.2.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e865447abfb83d6a98ad5130ed3c70b1fc295ae3eeee39fd07b4ddb0671b6788", size = 5722404, upload-time = "2026-03-11T00:12:44.041Z" },
|
| 549 |
+
{ url = "https://files.pythonhosted.org/packages/1f/92/f899f7bbb5617bb65ec52a6eac1e9a1447a86b916c4194f8a5001b8cde0c/cuda_bindings-13.2.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:46d8776a55d6d5da9dd6e9858fba2efcda2abe6743871dee47dd06eb8cb6d955", size = 6320619, upload-time = "2026-03-11T00:12:45.939Z" },
|
| 550 |
+
{ url = "https://files.pythonhosted.org/packages/df/93/eef988860a3ca985f82c4f3174fc0cdd94e07331ba9a92e8e064c260337f/cuda_bindings-13.2.0-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6629ca2df6f795b784752409bcaedbd22a7a651b74b56a165ebc0c9dcbd504d0", size = 5614610, upload-time = "2026-03-11T00:12:50.337Z" },
|
| 551 |
+
{ url = "https://files.pythonhosted.org/packages/18/23/6db3aba46864aee357ab2415135b3fe3da7e9f1fa0221fa2a86a5968099c/cuda_bindings-13.2.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7dca0da053d3b4cc4869eff49c61c03f3c5dbaa0bcd712317a358d5b8f3f385d", size = 6149914, upload-time = "2026-03-11T00:12:52.374Z" },
|
| 552 |
]
|
| 553 |
|
| 554 |
[[package]]
|
|
|
|
| 560 |
]
|
| 561 |
|
| 562 |
[[package]]
|
| 563 |
+
name = "cuda-toolkit"
|
| 564 |
+
version = "13.0.2"
|
| 565 |
source = { registry = "https://pypi.org/simple" }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 566 |
wheels = [
|
| 567 |
+
{ url = "https://files.pythonhosted.org/packages/57/b2/453099f5f3b698d7d0eab38916aac44c7f76229f451709e2eb9db6615dcd/cuda_toolkit-13.0.2-py2.py3-none-any.whl", hash = "sha256:b198824cf2f54003f50d64ada3a0f184b42ca0846c1c94192fa269ecd97a66eb", size = 2364, upload-time = "2025-12-19T23:24:07.328Z" },
|
| 568 |
+
]
|
| 569 |
+
|
| 570 |
+
[package.optional-dependencies]
|
| 571 |
+
cublas = [
|
| 572 |
+
{ name = "nvidia-cublas", marker = "sys_platform == 'linux'" },
|
| 573 |
+
]
|
| 574 |
+
cudart = [
|
| 575 |
+
{ name = "nvidia-cuda-runtime", marker = "sys_platform == 'linux'" },
|
| 576 |
+
]
|
| 577 |
+
cufft = [
|
| 578 |
+
{ name = "nvidia-cufft", marker = "sys_platform == 'linux'" },
|
| 579 |
+
]
|
| 580 |
+
cufile = [
|
| 581 |
+
{ name = "nvidia-cufile", marker = "sys_platform == 'linux'" },
|
| 582 |
+
]
|
| 583 |
+
cupti = [
|
| 584 |
+
{ name = "nvidia-cuda-cupti", marker = "sys_platform == 'linux'" },
|
| 585 |
+
]
|
| 586 |
+
curand = [
|
| 587 |
+
{ name = "nvidia-curand", marker = "sys_platform == 'linux'" },
|
| 588 |
+
]
|
| 589 |
+
cusolver = [
|
| 590 |
+
{ name = "nvidia-cusolver", marker = "sys_platform == 'linux'" },
|
| 591 |
+
]
|
| 592 |
+
cusparse = [
|
| 593 |
+
{ name = "nvidia-cusparse", marker = "sys_platform == 'linux'" },
|
| 594 |
+
]
|
| 595 |
+
nvjitlink = [
|
| 596 |
+
{ name = "nvidia-nvjitlink", marker = "sys_platform == 'linux'" },
|
| 597 |
+
]
|
| 598 |
+
nvrtc = [
|
| 599 |
+
{ name = "nvidia-cuda-nvrtc", marker = "sys_platform == 'linux'" },
|
| 600 |
+
]
|
| 601 |
+
nvtx = [
|
| 602 |
+
{ name = "nvidia-nvtx", marker = "sys_platform == 'linux'" },
|
| 603 |
]
|
| 604 |
|
| 605 |
[[package]]
|
|
|
|
| 628 |
|
| 629 |
[[package]]
|
| 630 |
name = "datasets"
|
| 631 |
+
version = "4.8.4"
|
| 632 |
source = { registry = "https://pypi.org/simple" }
|
| 633 |
dependencies = [
|
| 634 |
{ name = "dill" },
|
| 635 |
{ name = "filelock" },
|
| 636 |
{ name = "fsspec", extra = ["http"] },
|
| 637 |
+
{ name = "httpx" },
|
| 638 |
{ name = "huggingface-hub" },
|
| 639 |
{ name = "multiprocess" },
|
| 640 |
{ name = "numpy" },
|
|
|
|
| 646 |
{ name = "tqdm" },
|
| 647 |
{ name = "xxhash" },
|
| 648 |
]
|
| 649 |
+
sdist = { url = "https://files.pythonhosted.org/packages/22/22/73e46ac7a8c25e7ef0b3bd6f10da3465021d90219a32eb0b4d2afea4c56e/datasets-4.8.4.tar.gz", hash = "sha256:a1429ed853275ce7943a01c6d2e25475b4501eb758934362106a280470df3a52", size = 604382, upload-time = "2026-03-23T14:21:17.987Z" }
|
| 650 |
wheels = [
|
| 651 |
+
{ url = "https://files.pythonhosted.org/packages/b0/e5/247d094108e42ac26363ab8dc57f168840cf7c05774b40ffeb0d78868fcc/datasets-4.8.4-py3-none-any.whl", hash = "sha256:cdc8bee4698e549d78bf1fed6aea2eebc760b22b084f07e6fc020c6577a6ce6d", size = 526991, upload-time = "2026-03-23T14:21:15.89Z" },
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 652 |
]
|
| 653 |
|
| 654 |
[[package]]
|
|
|
|
| 970 |
{ url = "https://files.pythonhosted.org/packages/28/27/3d6dcadc8a3214d8522c1e7f6a19554e33659be44546d44a2f7572ac7d2a/groovy-0.1.2-py3-none-any.whl", hash = "sha256:7f7975bab18c729a257a8b1ae9dcd70b7cafb1720481beae47719af57c35fa64", size = 14090, upload-time = "2025-02-28T20:24:55.152Z" },
|
| 971 |
]
|
| 972 |
|
| 973 |
+
[[package]]
|
| 974 |
+
name = "grpcio"
|
| 975 |
+
version = "1.80.0"
|
| 976 |
+
source = { registry = "https://pypi.org/simple" }
|
| 977 |
+
dependencies = [
|
| 978 |
+
{ name = "typing-extensions" },
|
| 979 |
+
]
|
| 980 |
+
sdist = { url = "https://files.pythonhosted.org/packages/b7/48/af6173dbca4454f4637a4678b67f52ca7e0c1ed7d5894d89d434fecede05/grpcio-1.80.0.tar.gz", hash = "sha256:29aca15edd0688c22ba01d7cc01cb000d72b2033f4a3c72a81a19b56fd143257", size = 12978905, upload-time = "2026-03-30T08:49:10.502Z" }
|
| 981 |
+
wheels = [
|
| 982 |
+
{ url = "https://files.pythonhosted.org/packages/5c/e8/a2b749265eb3415abc94f2e619bbd9e9707bebdda787e61c593004ec927a/grpcio-1.80.0-cp312-cp312-linux_armv7l.whl", hash = "sha256:c624cc9f1008361014378c9d776de7182b11fe8b2e5a81bc69f23a295f2a1ad0", size = 6015616, upload-time = "2026-03-30T08:47:13.428Z" },
|
| 983 |
+
{ url = "https://files.pythonhosted.org/packages/3e/97/b1282161a15d699d1e90c360df18d19165a045ce1c343c7f313f5e8a0b77/grpcio-1.80.0-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:f49eddcac43c3bf350c0385366a58f36bed8cc2c0ec35ef7b74b49e56552c0c2", size = 12014204, upload-time = "2026-03-30T08:47:15.873Z" },
|
| 984 |
+
{ url = "https://files.pythonhosted.org/packages/6e/5e/d319c6e997b50c155ac5a8cb12f5173d5b42677510e886d250d50264949d/grpcio-1.80.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d334591df610ab94714048e0d5b4f3dd5ad1bee74dfec11eee344220077a79de", size = 6563866, upload-time = "2026-03-30T08:47:18.588Z" },
|
| 985 |
+
{ url = "https://files.pythonhosted.org/packages/ae/f6/fdd975a2cb4d78eb67769a7b3b3830970bfa2e919f1decf724ae4445f42c/grpcio-1.80.0-cp312-cp312-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:0cb517eb1d0d0aaf1d87af7cc5b801d686557c1d88b2619f5e31fab3c2315921", size = 7273060, upload-time = "2026-03-30T08:47:21.113Z" },
|
| 986 |
+
{ url = "https://files.pythonhosted.org/packages/db/f0/a3deb5feba60d9538a962913e37bd2e69a195f1c3376a3dd44fe0427e996/grpcio-1.80.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4e78c4ac0d97dc2e569b2f4bcbbb447491167cb358d1a389fc4af71ab6f70411", size = 6782121, upload-time = "2026-03-30T08:47:23.827Z" },
|
| 987 |
+
{ url = "https://files.pythonhosted.org/packages/ca/84/36c6dcfddc093e108141f757c407902a05085e0c328007cb090d56646cdf/grpcio-1.80.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2ed770b4c06984f3b47eb0517b1c69ad0b84ef3f40128f51448433be904634cd", size = 7383811, upload-time = "2026-03-30T08:47:26.517Z" },
|
| 988 |
+
{ url = "https://files.pythonhosted.org/packages/7c/ef/f3a77e3dc5b471a0ec86c564c98d6adfa3510d38f8ee99010410858d591e/grpcio-1.80.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:256507e2f524092f1473071a05e65a5b10d84b82e3ff24c5b571513cfaa61e2f", size = 8393860, upload-time = "2026-03-30T08:47:29.439Z" },
|
| 989 |
+
{ url = "https://files.pythonhosted.org/packages/9b/8d/9d4d27ed7f33d109c50d6b5ce578a9914aa68edab75d65869a17e630a8d1/grpcio-1.80.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:9a6284a5d907c37db53350645567c522be314bac859a64a7a5ca63b77bb7958f", size = 7830132, upload-time = "2026-03-30T08:47:33.254Z" },
|
| 990 |
+
{ url = "https://files.pythonhosted.org/packages/14/e4/9990b41c6d7a44e1e9dee8ac11d7a9802ba1378b40d77468a7761d1ad288/grpcio-1.80.0-cp312-cp312-win32.whl", hash = "sha256:c71309cfce2f22be26aa4a847357c502db6c621f1a49825ae98aa0907595b193", size = 4140904, upload-time = "2026-03-30T08:47:35.319Z" },
|
| 991 |
+
{ url = "https://files.pythonhosted.org/packages/2f/2c/296f6138caca1f4b92a31ace4ae1b87dab692fc16a7a3417af3bb3c805bf/grpcio-1.80.0-cp312-cp312-win_amd64.whl", hash = "sha256:9fe648599c0e37594c4809d81a9e77bd138cc82eb8baa71b6a86af65426723ff", size = 4880944, upload-time = "2026-03-30T08:47:37.831Z" },
|
| 992 |
+
{ url = "https://files.pythonhosted.org/packages/2f/3a/7c3c25789e3f069e581dc342e03613c5b1cb012c4e8c7d9d5cf960a75856/grpcio-1.80.0-cp313-cp313-linux_armv7l.whl", hash = "sha256:e9e408fc016dffd20661f0126c53d8a31c2821b5c13c5d67a0f5ed5de93319ad", size = 6017243, upload-time = "2026-03-30T08:47:40.075Z" },
|
| 993 |
+
{ url = "https://files.pythonhosted.org/packages/04/19/21a9806eb8240e174fd1ab0cd5b9aa948bb0e05c2f2f55f9d5d7405e6d08/grpcio-1.80.0-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:92d787312e613754d4d8b9ca6d3297e69994a7912a32fa38c4c4e01c272974b0", size = 12010840, upload-time = "2026-03-30T08:47:43.11Z" },
|
| 994 |
+
{ url = "https://files.pythonhosted.org/packages/18/3a/23347d35f76f639e807fb7a36fad3068aed100996849a33809591f26eca6/grpcio-1.80.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8ac393b58aa16991a2f1144ec578084d544038c12242da3a215966b512904d0f", size = 6567644, upload-time = "2026-03-30T08:47:46.806Z" },
|
| 995 |
+
{ url = "https://files.pythonhosted.org/packages/ff/40/96e07ecb604a6a67ae6ab151e3e35b132875d98bc68ec65f3e5ab3e781d7/grpcio-1.80.0-cp313-cp313-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:68e5851ac4b9afe07e7f84483803ad167852570d65326b34d54ca560bfa53fb6", size = 7277830, upload-time = "2026-03-30T08:47:49.643Z" },
|
| 996 |
+
{ url = "https://files.pythonhosted.org/packages/9b/e2/da1506ecea1f34a5e365964644b35edef53803052b763ca214ba3870c856/grpcio-1.80.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:873ff5d17d68992ef6605330127425d2fc4e77e612fa3c3e0ed4e668685e3140", size = 6783216, upload-time = "2026-03-30T08:47:52.817Z" },
|
| 997 |
+
{ url = "https://files.pythonhosted.org/packages/44/83/3b20ff58d0c3b7f6caaa3af9a4174d4023701df40a3f39f7f1c8e7c48f9d/grpcio-1.80.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:2bea16af2750fd0a899bf1abd9022244418b55d1f37da2202249ba4ba673838d", size = 7385866, upload-time = "2026-03-30T08:47:55.687Z" },
|
| 998 |
+
{ url = "https://files.pythonhosted.org/packages/47/45/55c507599c5520416de5eefecc927d6a0d7af55e91cfffb2e410607e5744/grpcio-1.80.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ba0db34f7e1d803a878284cd70e4c63cb6ae2510ba51937bf8f45ba997cefcf7", size = 8391602, upload-time = "2026-03-30T08:47:58.303Z" },
|
| 999 |
+
{ url = "https://files.pythonhosted.org/packages/10/bb/dd06f4c24c01db9cf11341b547d0a016b2c90ed7dbbb086a5710df7dd1d7/grpcio-1.80.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8eb613f02d34721f1acf3626dfdb3545bd3c8505b0e52bf8b5710a28d02e8aa7", size = 7826752, upload-time = "2026-03-30T08:48:01.311Z" },
|
| 1000 |
+
{ url = "https://files.pythonhosted.org/packages/f9/1e/9d67992ba23371fd63d4527096eb8c6b76d74d52b500df992a3343fd7251/grpcio-1.80.0-cp313-cp313-win32.whl", hash = "sha256:93b6f823810720912fd131f561f91f5fed0fda372b6b7028a2681b8194d5d294", size = 4142310, upload-time = "2026-03-30T08:48:04.594Z" },
|
| 1001 |
+
{ url = "https://files.pythonhosted.org/packages/cf/e6/283326a27da9e2c3038bc93eeea36fb118ce0b2d03922a9cda6688f53c5b/grpcio-1.80.0-cp313-cp313-win_amd64.whl", hash = "sha256:e172cf795a3ba5246d3529e4d34c53db70e888fa582a8ffebd2e6e48bc0cba50", size = 4882833, upload-time = "2026-03-30T08:48:07.363Z" },
|
| 1002 |
+
]
|
| 1003 |
+
|
| 1004 |
[[package]]
|
| 1005 |
name = "h11"
|
| 1006 |
version = "0.16.0"
|
|
|
|
| 1023 |
{ url = "https://files.pythonhosted.org/packages/30/2d/afff2ee87e75d8eb85c92bb8cf0e15b05c23c2ebd8fd8dec781d8601ed7f/hf_gradio-0.4.1-py3-none-any.whl", hash = "sha256:76b8cb8be6abe62d74c1ad2d35b42f0629db89aa9e1a8d033cecfe7c856eeab3", size = 4482, upload-time = "2026-04-17T19:53:31.827Z" },
|
| 1024 |
]
|
| 1025 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1026 |
[[package]]
|
| 1027 |
name = "hf-xet"
|
| 1028 |
version = "1.4.3"
|
|
|
|
| 1086 |
|
| 1087 |
[[package]]
|
| 1088 |
name = "huggingface-hub"
|
| 1089 |
+
version = "1.12.0"
|
| 1090 |
source = { registry = "https://pypi.org/simple" }
|
| 1091 |
dependencies = [
|
| 1092 |
{ name = "filelock" },
|
| 1093 |
{ name = "fsspec" },
|
| 1094 |
+
{ name = "hf-xet", marker = "platform_machine == 'AMD64' or platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'arm64' or platform_machine == 'x86_64'" },
|
| 1095 |
+
{ name = "httpx" },
|
| 1096 |
{ name = "packaging" },
|
| 1097 |
{ name = "pyyaml" },
|
|
|
|
| 1098 |
{ name = "tqdm" },
|
| 1099 |
+
{ name = "typer" },
|
| 1100 |
{ name = "typing-extensions" },
|
| 1101 |
]
|
| 1102 |
+
sdist = { url = "https://files.pythonhosted.org/packages/56/52/1b54cb569509c725a32c1315261ac9fd0e6b91bbbf74d86fca10d3376164/huggingface_hub-1.12.0.tar.gz", hash = "sha256:7c3fe85e24b652334e5d456d7a812cd9a071e75630fac4365d9165ab5e4a34b6", size = 763091, upload-time = "2026-04-24T13:32:08.674Z" }
|
| 1103 |
wheels = [
|
| 1104 |
+
{ url = "https://files.pythonhosted.org/packages/7e/2b/ef03ddb96bd1123503c2bd6932001020292deea649e9bf4caa2cb65a85bf/huggingface_hub-1.12.0-py3-none-any.whl", hash = "sha256:d74939969585ee35748bd66de09baf84099d461bda7287cd9043bfb99b0e424d", size = 646806, upload-time = "2026-04-24T13:32:06.717Z" },
|
| 1105 |
]
|
| 1106 |
|
| 1107 |
[[package]]
|
|
|
|
| 1233 |
{ url = "https://files.pythonhosted.org/packages/da/e9/1f9ada30cef7b05e74bb06f52127e7a724976c225f46adb65c37b1dadfb6/jiter-0.14.0-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:67f00d94b281174144d6532a04b66a12cb866cbdc47c3af3bfe2973677f9861a", size = 349613, upload-time = "2026-04-10T14:28:40.066Z" },
|
| 1234 |
]
|
| 1235 |
|
| 1236 |
+
[[package]]
|
| 1237 |
+
name = "jmespath"
|
| 1238 |
+
version = "1.1.0"
|
| 1239 |
+
source = { registry = "https://pypi.org/simple" }
|
| 1240 |
+
sdist = { url = "https://files.pythonhosted.org/packages/d3/59/322338183ecda247fb5d1763a6cbe46eff7222eaeebafd9fa65d4bf5cb11/jmespath-1.1.0.tar.gz", hash = "sha256:472c87d80f36026ae83c6ddd0f1d05d4e510134ed462851fd5f754c8c3cbb88d", size = 27377, upload-time = "2026-01-22T16:35:26.279Z" }
|
| 1241 |
+
wheels = [
|
| 1242 |
+
{ url = "https://files.pythonhosted.org/packages/14/2f/967ba146e6d58cf6a652da73885f52fc68001525b4197effc174321d70b4/jmespath-1.1.0-py3-none-any.whl", hash = "sha256:a5663118de4908c91729bea0acadca56526eb2698e83de10cd116ae0f4e97c64", size = 20419, upload-time = "2026-01-22T16:35:24.919Z" },
|
| 1243 |
+
]
|
| 1244 |
+
|
| 1245 |
[[package]]
|
| 1246 |
name = "joserfc"
|
| 1247 |
version = "1.6.4"
|
|
|
|
| 1411 |
{ url = "https://files.pythonhosted.org/packages/a4/0a/92c244309b774e290ddb15e93363846ae7aa753d9586b8aad511c5e6145b/librt-0.9.0-cp313-cp313-win_arm64.whl", hash = "sha256:4c4d0440a3a8e31d962340c3e1cc3fc9ee7febd34c8d8f770d06adb947779ea5", size = 53728, upload-time = "2026-04-09T16:05:33.31Z" },
|
| 1412 |
]
|
| 1413 |
|
| 1414 |
+
[[package]]
|
| 1415 |
+
name = "markdown"
|
| 1416 |
+
version = "3.10.2"
|
| 1417 |
+
source = { registry = "https://pypi.org/simple" }
|
| 1418 |
+
sdist = { url = "https://files.pythonhosted.org/packages/2b/f4/69fa6ed85ae003c2378ffa8f6d2e3234662abd02c10d216c0ba96081a238/markdown-3.10.2.tar.gz", hash = "sha256:994d51325d25ad8aa7ce4ebaec003febcce822c3f8c911e3b17c52f7f589f950", size = 368805, upload-time = "2026-02-09T14:57:26.942Z" }
|
| 1419 |
+
wheels = [
|
| 1420 |
+
{ url = "https://files.pythonhosted.org/packages/de/1f/77fa3081e4f66ca3576c896ae5d31c3002ac6607f9747d2e3aa49227e464/markdown-3.10.2-py3-none-any.whl", hash = "sha256:e91464b71ae3ee7afd3017d9f358ef0baf158fd9a298db92f1d4761133824c36", size = 108180, upload-time = "2026-02-09T14:57:25.787Z" },
|
| 1421 |
+
]
|
| 1422 |
+
|
| 1423 |
[[package]]
|
| 1424 |
name = "markdown-it-py"
|
| 1425 |
version = "4.0.0"
|
|
|
|
| 1565 |
{ url = "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c", size = 536198, upload-time = "2023-03-07T16:47:09.197Z" },
|
| 1566 |
]
|
| 1567 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1568 |
[[package]]
|
| 1569 |
name = "multidict"
|
| 1570 |
version = "6.7.1"
|
|
|
|
| 1732 |
]
|
| 1733 |
|
| 1734 |
[[package]]
|
| 1735 |
+
name = "nvidia-cublas"
|
| 1736 |
+
version = "13.1.0.3"
|
| 1737 |
source = { registry = "https://pypi.org/simple" }
|
| 1738 |
wheels = [
|
| 1739 |
+
{ url = "https://files.pythonhosted.org/packages/e1/a5/fce49e2ae977e0ccc084e5adafceb4f0ac0c8333cb6863501618a7277f67/nvidia_cublas-13.1.0.3-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:c86fc7f7ae36d7528288c5d88098edcb7b02c633d262e7ddbb86b0ad91be5df2", size = 542851226, upload-time = "2025-10-09T08:59:04.818Z" },
|
| 1740 |
+
{ url = "https://files.pythonhosted.org/packages/e7/44/423ac00af4dd95a5aeb27207e2c0d9b7118702149bf4704c3ddb55bb7429/nvidia_cublas-13.1.0.3-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:ee8722c1f0145ab246bccb9e452153b5e0515fd094c3678df50b2a0888b8b171", size = 423133236, upload-time = "2025-10-09T08:59:32.536Z" },
|
| 1741 |
]
|
| 1742 |
|
| 1743 |
[[package]]
|
| 1744 |
+
name = "nvidia-cuda-cupti"
|
| 1745 |
+
version = "13.0.85"
|
| 1746 |
source = { registry = "https://pypi.org/simple" }
|
| 1747 |
wheels = [
|
| 1748 |
+
{ url = "https://files.pythonhosted.org/packages/2a/2a/80353b103fc20ce05ef51e928daed4b6015db4aaa9162ed0997090fe2250/nvidia_cuda_cupti-13.0.85-py3-none-manylinux_2_25_aarch64.whl", hash = "sha256:796bd679890ee55fb14a94629b698b6db54bcfd833d391d5e94017dd9d7d3151", size = 10310827, upload-time = "2025-09-04T08:26:42.012Z" },
|
| 1749 |
+
{ url = "https://files.pythonhosted.org/packages/33/6d/737d164b4837a9bbd202f5ae3078975f0525a55730fe871d8ed4e3b952b0/nvidia_cuda_cupti-13.0.85-py3-none-manylinux_2_25_x86_64.whl", hash = "sha256:4eb01c08e859bf924d222250d2e8f8b8ff6d3db4721288cf35d14252a4d933c8", size = 10715597, upload-time = "2025-09-04T08:26:51.312Z" },
|
| 1750 |
]
|
| 1751 |
|
| 1752 |
[[package]]
|
| 1753 |
+
name = "nvidia-cuda-nvrtc"
|
| 1754 |
+
version = "13.0.88"
|
| 1755 |
source = { registry = "https://pypi.org/simple" }
|
| 1756 |
wheels = [
|
| 1757 |
+
{ url = "https://files.pythonhosted.org/packages/c3/68/483a78f5e8f31b08fb1bb671559968c0ca3a065ac7acabfc7cee55214fd6/nvidia_cuda_nvrtc-13.0.88-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:ad9b6d2ead2435f11cbb6868809d2adeeee302e9bb94bcf0539c7a40d80e8575", size = 90215200, upload-time = "2025-09-04T08:28:44.204Z" },
|
| 1758 |
+
{ url = "https://files.pythonhosted.org/packages/b7/dc/6bb80850e0b7edd6588d560758f17e0550893a1feaf436807d64d2da040f/nvidia_cuda_nvrtc-13.0.88-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d27f20a0ca67a4bb34268a5e951033496c5b74870b868bacd046b1b8e0c3267b", size = 43015449, upload-time = "2025-09-04T08:28:20.239Z" },
|
| 1759 |
]
|
| 1760 |
|
| 1761 |
[[package]]
|
| 1762 |
+
name = "nvidia-cuda-runtime"
|
| 1763 |
+
version = "13.0.96"
|
| 1764 |
source = { registry = "https://pypi.org/simple" }
|
| 1765 |
wheels = [
|
| 1766 |
+
{ url = "https://files.pythonhosted.org/packages/87/4f/17d7b9b8e285199c58ce28e31b5c5bbaa4d8271af06a89b6405258245de2/nvidia_cuda_runtime-13.0.96-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ef9bcbe90493a2b9d810e43d249adb3d02e98dd30200d86607d8d02687c43f55", size = 2261060, upload-time = "2025-10-09T08:55:15.78Z" },
|
| 1767 |
+
{ url = "https://files.pythonhosted.org/packages/2e/24/d1558f3b68b1d26e706813b1d10aa1d785e4698c425af8db8edc3dced472/nvidia_cuda_runtime-13.0.96-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7f82250d7782aa23b6cfe765ecc7db554bd3c2870c43f3d1821f1d18aebf0548", size = 2243632, upload-time = "2025-10-09T08:55:36.117Z" },
|
| 1768 |
]
|
| 1769 |
|
| 1770 |
[[package]]
|
| 1771 |
+
name = "nvidia-cudnn-cu13"
|
| 1772 |
+
version = "9.19.0.56"
|
| 1773 |
source = { registry = "https://pypi.org/simple" }
|
| 1774 |
dependencies = [
|
| 1775 |
+
{ name = "nvidia-cublas", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" },
|
| 1776 |
]
|
| 1777 |
wheels = [
|
| 1778 |
+
{ url = "https://files.pythonhosted.org/packages/f1/84/26025437c1e6b61a707442184fa0c03d083b661adf3a3eecfd6d21677740/nvidia_cudnn_cu13-9.19.0.56-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:6ed29ffaee1176c612daf442e4dd6cfeb6a0caa43ddcbeb59da94953030b1be4", size = 433781201, upload-time = "2026-02-03T20:40:53.805Z" },
|
| 1779 |
+
{ url = "https://files.pythonhosted.org/packages/a3/22/0b4b932655d17a6da1b92fa92ab12844b053bb2ac2475e179ba6f043da1e/nvidia_cudnn_cu13-9.19.0.56-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:d20e1734305e9d68889a96e3f35094d733ff1f83932ebe462753973e53a572bf", size = 366066321, upload-time = "2026-02-03T20:44:52.837Z" },
|
| 1780 |
]
|
| 1781 |
|
| 1782 |
[[package]]
|
| 1783 |
+
name = "nvidia-cufft"
|
| 1784 |
+
version = "12.0.0.61"
|
| 1785 |
source = { registry = "https://pypi.org/simple" }
|
| 1786 |
dependencies = [
|
| 1787 |
+
{ name = "nvidia-nvjitlink", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" },
|
| 1788 |
]
|
| 1789 |
wheels = [
|
| 1790 |
+
{ url = "https://files.pythonhosted.org/packages/8b/ae/f417a75c0259e85c1d2f83ca4e960289a5f814ed0cea74d18c353d3e989d/nvidia_cufft-12.0.0.61-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2708c852ef8cd89d1d2068bdbece0aa188813a0c934db3779b9b1faa8442e5f5", size = 214053554, upload-time = "2025-09-04T08:31:38.196Z" },
|
| 1791 |
+
{ url = "https://files.pythonhosted.org/packages/a8/2f/7b57e29836ea8714f81e9898409196f47d772d5ddedddf1592eadb8ab743/nvidia_cufft-12.0.0.61-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:6c44f692dce8fd5ffd3e3df134b6cdb9c2f72d99cf40b62c32dde45eea9ddad3", size = 214085489, upload-time = "2025-09-04T08:31:56.044Z" },
|
| 1792 |
]
|
| 1793 |
|
| 1794 |
[[package]]
|
| 1795 |
+
name = "nvidia-cufile"
|
| 1796 |
+
version = "1.15.1.6"
|
| 1797 |
source = { registry = "https://pypi.org/simple" }
|
| 1798 |
wheels = [
|
| 1799 |
+
{ url = "https://files.pythonhosted.org/packages/3f/70/4f193de89a48b71714e74602ee14d04e4019ad36a5a9f20c425776e72cd6/nvidia_cufile-1.15.1.6-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:08a3ecefae5a01c7f5117351c64f17c7c62efa5fffdbe24fc7d298da19cd0b44", size = 1223672, upload-time = "2025-09-04T08:32:22.779Z" },
|
| 1800 |
+
{ url = "https://files.pythonhosted.org/packages/ab/73/cc4a14c9813a8a0d509417cf5f4bdaba76e924d58beb9864f5a7baceefbf/nvidia_cufile-1.15.1.6-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:bdc0deedc61f548bddf7733bdc216456c2fdb101d020e1ab4b88d232d5e2f6d1", size = 1136992, upload-time = "2025-09-04T08:32:14.119Z" },
|
| 1801 |
]
|
| 1802 |
|
| 1803 |
[[package]]
|
| 1804 |
+
name = "nvidia-curand"
|
| 1805 |
+
version = "10.4.0.35"
|
| 1806 |
source = { registry = "https://pypi.org/simple" }
|
| 1807 |
wheels = [
|
| 1808 |
+
{ url = "https://files.pythonhosted.org/packages/1e/72/7c2ae24fb6b63a32e6ae5d241cc65263ea18d08802aaae087d9f013335a2/nvidia_curand-10.4.0.35-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:133df5a7509c3e292aaa2b477afd0194f06ce4ea24d714d616ff36439cee349a", size = 61962106, upload-time = "2025-08-04T10:21:41.128Z" },
|
| 1809 |
+
{ url = "https://files.pythonhosted.org/packages/a5/9f/be0a41ca4a4917abf5cb9ae0daff1a6060cc5de950aec0396de9f3b52bc5/nvidia_curand-10.4.0.35-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:1aee33a5da6e1db083fe2b90082def8915f30f3248d5896bcec36a579d941bfc", size = 59544258, upload-time = "2025-08-04T10:22:03.992Z" },
|
| 1810 |
]
|
| 1811 |
|
| 1812 |
[[package]]
|
| 1813 |
+
name = "nvidia-cusolver"
|
| 1814 |
+
version = "12.0.4.66"
|
| 1815 |
source = { registry = "https://pypi.org/simple" }
|
| 1816 |
dependencies = [
|
| 1817 |
+
{ name = "nvidia-cublas", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" },
|
| 1818 |
+
{ name = "nvidia-cusparse", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" },
|
| 1819 |
+
{ name = "nvidia-nvjitlink", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" },
|
| 1820 |
]
|
| 1821 |
wheels = [
|
| 1822 |
+
{ url = "https://files.pythonhosted.org/packages/c8/c3/b30c9e935fc01e3da443ec0116ed1b2a009bb867f5324d3f2d7e533e776b/nvidia_cusolver-12.0.4.66-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:02c2457eaa9e39de20f880f4bd8820e6a1cfb9f9a34f820eb12a155aa5bc92d2", size = 223467760, upload-time = "2025-09-04T08:33:04.222Z" },
|
| 1823 |
+
{ url = "https://files.pythonhosted.org/packages/5f/67/cba3777620cdacb99102da4042883709c41c709f4b6323c10781a9c3aa34/nvidia_cusolver-12.0.4.66-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:0a759da5dea5c0ea10fd307de75cdeb59e7ea4fcb8add0924859b944babf1112", size = 200941980, upload-time = "2025-09-04T08:33:22.767Z" },
|
| 1824 |
]
|
| 1825 |
|
| 1826 |
[[package]]
|
| 1827 |
+
name = "nvidia-cusparse"
|
| 1828 |
+
version = "12.6.3.3"
|
| 1829 |
source = { registry = "https://pypi.org/simple" }
|
| 1830 |
dependencies = [
|
| 1831 |
+
{ name = "nvidia-nvjitlink", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" },
|
| 1832 |
]
|
| 1833 |
wheels = [
|
| 1834 |
+
{ url = "https://files.pythonhosted.org/packages/f8/94/5c26f33738ae35276672f12615a64bd008ed5be6d1ebcb23579285d960a9/nvidia_cusparse-12.6.3.3-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:80bcc4662f23f1054ee334a15c72b8940402975e0eab63178fc7e670aa59472c", size = 162155568, upload-time = "2025-09-04T08:33:42.864Z" },
|
| 1835 |
+
{ url = "https://files.pythonhosted.org/packages/fa/18/623c77619c31d62efd55302939756966f3ecc8d724a14dab2b75f1508850/nvidia_cusparse-12.6.3.3-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2b3c89c88d01ee0e477cb7f82ef60a11a4bcd57b6b87c33f789350b59759360b", size = 145942937, upload-time = "2025-09-04T08:33:58.029Z" },
|
| 1836 |
]
|
| 1837 |
|
| 1838 |
[[package]]
|
| 1839 |
+
name = "nvidia-cusparselt-cu13"
|
| 1840 |
+
version = "0.8.0"
|
| 1841 |
source = { registry = "https://pypi.org/simple" }
|
| 1842 |
wheels = [
|
| 1843 |
+
{ url = "https://files.pythonhosted.org/packages/46/10/8dcd1175260706a2fc92a16a52e306b71d4c1ea0b0cc4a9484183399818a/nvidia_cusparselt_cu13-0.8.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:400c6ed1cf6780fc6efedd64ec9f1345871767e6a1a0a552a1ea0578117ea77c", size = 220791277, upload-time = "2025-08-13T19:22:40.982Z" },
|
| 1844 |
+
{ url = "https://files.pythonhosted.org/packages/fd/53/43b0d71f4e702fa9733f8b4571fdca50a8813f1e450b656c239beff12315/nvidia_cusparselt_cu13-0.8.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:25e30a8a7323935d4ad0340b95a0b69926eee755767e8e0b1cf8dd85b197d3fd", size = 169884119, upload-time = "2025-08-13T19:23:41.967Z" },
|
| 1845 |
]
|
| 1846 |
|
| 1847 |
[[package]]
|
| 1848 |
+
name = "nvidia-nccl-cu13"
|
| 1849 |
+
version = "2.28.9"
|
| 1850 |
source = { registry = "https://pypi.org/simple" }
|
| 1851 |
wheels = [
|
| 1852 |
+
{ url = "https://files.pythonhosted.org/packages/39/55/1920646a2e43ffd4fc958536b276197ed740e9e0c54105b4bb3521591fc7/nvidia_nccl_cu13-2.28.9-py3-none-manylinux_2_18_aarch64.whl", hash = "sha256:01c873ba1626b54caa12272ed228dc5b2781545e0ae8ba3f432a8ef1c6d78643", size = 196561677, upload-time = "2025-11-18T05:49:03.45Z" },
|
| 1853 |
+
{ url = "https://files.pythonhosted.org/packages/b0/b4/878fefaad5b2bcc6fcf8d474a25e3e3774bc5133e4b58adff4d0bca238bc/nvidia_nccl_cu13-2.28.9-py3-none-manylinux_2_18_x86_64.whl", hash = "sha256:e4553a30f34195f3fa1da02a6da3d6337d28f2003943aa0a3d247bbc25fefc42", size = 196493177, upload-time = "2025-11-18T05:49:17.677Z" },
|
| 1854 |
]
|
| 1855 |
|
| 1856 |
[[package]]
|
| 1857 |
+
name = "nvidia-nvjitlink"
|
| 1858 |
+
version = "13.0.88"
|
| 1859 |
source = { registry = "https://pypi.org/simple" }
|
| 1860 |
wheels = [
|
| 1861 |
+
{ url = "https://files.pythonhosted.org/packages/56/7a/123e033aaff487c77107195fa5a2b8686795ca537935a24efae476c41f05/nvidia_nvjitlink-13.0.88-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:13a74f429e23b921c1109976abefacc69835f2f433ebd323d3946e11d804e47b", size = 40713933, upload-time = "2025-09-04T08:35:43.553Z" },
|
| 1862 |
+
{ url = "https://files.pythonhosted.org/packages/ab/2c/93c5250e64df4f894f1cbb397c6fd71f79813f9fd79d7cd61de3f97b3c2d/nvidia_nvjitlink-13.0.88-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:e931536ccc7d467a98ba1d8b89ff7fa7f1fa3b13f2b0069118cd7f47bff07d0c", size = 38768748, upload-time = "2025-09-04T08:35:20.008Z" },
|
| 1863 |
]
|
| 1864 |
|
| 1865 |
[[package]]
|
| 1866 |
+
name = "nvidia-nvshmem-cu13"
|
| 1867 |
version = "3.4.5"
|
| 1868 |
source = { registry = "https://pypi.org/simple" }
|
| 1869 |
wheels = [
|
| 1870 |
+
{ url = "https://files.pythonhosted.org/packages/dc/0f/05cc9c720236dcd2db9c1ab97fff629e96821be2e63103569da0c9b72f19/nvidia_nvshmem_cu13-3.4.5-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:6dc2a197f38e5d0376ad52cd1a2a3617d3cdc150fd5966f4aee9bcebb1d68fe9", size = 60215947, upload-time = "2025-09-06T00:32:20.022Z" },
|
| 1871 |
+
{ url = "https://files.pythonhosted.org/packages/3c/35/a9bf80a609e74e3b000fef598933235c908fcefcef9026042b8e6dfde2a9/nvidia_nvshmem_cu13-3.4.5-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:290f0a2ee94c9f3687a02502f3b9299a9f9fe826e6d0287ee18482e78d495b80", size = 60412546, upload-time = "2025-09-06T00:32:41.564Z" },
|
| 1872 |
]
|
| 1873 |
|
| 1874 |
[[package]]
|
| 1875 |
+
name = "nvidia-nvtx"
|
| 1876 |
+
version = "13.0.85"
|
| 1877 |
source = { registry = "https://pypi.org/simple" }
|
| 1878 |
wheels = [
|
| 1879 |
+
{ url = "https://files.pythonhosted.org/packages/c2/f3/d86c845465a2723ad7e1e5c36dcd75ddb82898b3f53be47ebd429fb2fa5d/nvidia_nvtx-13.0.85-py3-none-manylinux1_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:4936d1d6780fbe68db454f5e72a42ff64d1fd6397df9f363ae786930fd5c1cd4", size = 148047, upload-time = "2025-09-04T08:29:01.761Z" },
|
| 1880 |
+
{ url = "https://files.pythonhosted.org/packages/a8/64/3708a90d1ebe202ffdeb7185f878a3c84d15c2b2c31858da2ce0583e2def/nvidia_nvtx-13.0.85-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cb7780edb6b14107373c835bf8b72e7a178bac7367e23da7acb108f973f157a6", size = 148878, upload-time = "2025-09-04T08:28:53.627Z" },
|
| 1881 |
]
|
| 1882 |
|
| 1883 |
[[package]]
|
|
|
|
| 2800 |
{ url = "https://files.pythonhosted.org/packages/6a/23/8146aad7d88f4fcb3a6218f41a60f6c2d4e3a72de72da1825dc7c8f7877c/semantic_version-2.10.0-py2.py3-none-any.whl", hash = "sha256:de78a3b8e0feda74cabc54aab2da702113e33ac9d9eb9d2389bcf1f58b7d9177", size = 15552, upload-time = "2022-05-26T13:35:21.206Z" },
|
| 2801 |
]
|
| 2802 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2803 |
[[package]]
|
| 2804 |
name = "setuptools"
|
| 2805 |
version = "81.0.0"
|
|
|
|
| 2867 |
{ name = "accelerate" },
|
| 2868 |
{ name = "bitsandbytes" },
|
| 2869 |
{ name = "datasets" },
|
| 2870 |
+
{ name = "jmespath" },
|
| 2871 |
{ name = "peft" },
|
| 2872 |
+
{ name = "tensorboard" },
|
| 2873 |
{ name = "transformers" },
|
| 2874 |
+
{ name = "trl", extra = ["peft"] },
|
|
|
|
| 2875 |
]
|
| 2876 |
|
| 2877 |
[package.metadata]
|
| 2878 |
requires-dist = [
|
| 2879 |
+
{ name = "accelerate", marker = "extra == 'train'", specifier = ">=1.13.0" },
|
| 2880 |
+
{ name = "bitsandbytes", marker = "extra == 'train'", specifier = ">=0.46.1,!=0.48.0" },
|
| 2881 |
+
{ name = "datasets", marker = "extra == 'train'", specifier = ">=3.0.0,<5.0" },
|
| 2882 |
{ name = "duckdb", specifier = ">=1.5.2,<2.0" },
|
| 2883 |
{ name = "httpx", marker = "extra == 'dev'", specifier = ">=0.28.0" },
|
| 2884 |
+
{ name = "huggingface-hub", specifier = ">=1.5.0,<2.0" },
|
| 2885 |
+
{ name = "jmespath", marker = "extra == 'train'", specifier = ">=1.0,<2.0" },
|
| 2886 |
{ name = "matplotlib", marker = "extra == 'evidence'", specifier = ">=3.8.0,<4.0" },
|
| 2887 |
{ name = "mypy", marker = "extra == 'dev'", specifier = ">=1.20.1" },
|
| 2888 |
{ name = "openai", specifier = ">=2.32.0,<3.0" },
|
| 2889 |
{ name = "openenv-core", extras = ["core"], specifier = ">=0.2.2,<0.4" },
|
| 2890 |
{ name = "pandas", marker = "extra == 'evidence'", specifier = ">=2.0.0,<3.0" },
|
| 2891 |
+
{ name = "peft", marker = "extra == 'train'", specifier = ">=0.19" },
|
| 2892 |
{ name = "pydantic", specifier = ">=2.8.0,<3.0" },
|
| 2893 |
{ name = "pytest", marker = "extra == 'dev'", specifier = ">=9.0.3" },
|
| 2894 |
{ name = "pytest-asyncio", marker = "extra == 'dev'", specifier = ">=1.3.0" },
|
|
|
|
| 2896 |
{ name = "python-dotenv", specifier = ">=1.2.2,<2.0" },
|
| 2897 |
{ name = "ruff", marker = "extra == 'dev'", specifier = ">=0.15.11" },
|
| 2898 |
{ name = "sqlglot", specifier = ">=30.6.0,<40.0" },
|
| 2899 |
+
{ name = "tensorboard", marker = "extra == 'train'", specifier = ">=2.20,<3.0" },
|
| 2900 |
+
{ name = "transformers", marker = "extra == 'train'", specifier = ">=5.5.0" },
|
| 2901 |
+
{ name = "trl", extras = ["peft"], marker = "extra == 'train'", specifier = ">=1.2.0,<2.0" },
|
| 2902 |
]
|
| 2903 |
provides-extras = ["evidence", "dev", "train"]
|
| 2904 |
|
|
|
|
| 2949 |
{ url = "https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl", hash = "sha256:e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5", size = 6299353, upload-time = "2025-04-27T18:04:59.103Z" },
|
| 2950 |
]
|
| 2951 |
|
| 2952 |
+
[[package]]
|
| 2953 |
+
name = "tensorboard"
|
| 2954 |
+
version = "2.20.0"
|
| 2955 |
+
source = { registry = "https://pypi.org/simple" }
|
| 2956 |
+
dependencies = [
|
| 2957 |
+
{ name = "absl-py" },
|
| 2958 |
+
{ name = "grpcio" },
|
| 2959 |
+
{ name = "markdown" },
|
| 2960 |
+
{ name = "numpy" },
|
| 2961 |
+
{ name = "packaging" },
|
| 2962 |
+
{ name = "pillow" },
|
| 2963 |
+
{ name = "protobuf" },
|
| 2964 |
+
{ name = "setuptools" },
|
| 2965 |
+
{ name = "tensorboard-data-server" },
|
| 2966 |
+
{ name = "werkzeug" },
|
| 2967 |
+
]
|
| 2968 |
+
wheels = [
|
| 2969 |
+
{ url = "https://files.pythonhosted.org/packages/9c/d9/a5db55f88f258ac669a92858b70a714bbbd5acd993820b41ec4a96a4d77f/tensorboard-2.20.0-py3-none-any.whl", hash = "sha256:9dc9f978cb84c0723acf9a345d96c184f0293d18f166bb8d59ee098e6cfaaba6", size = 5525680, upload-time = "2025-07-17T19:20:49.638Z" },
|
| 2970 |
+
]
|
| 2971 |
+
|
| 2972 |
+
[[package]]
|
| 2973 |
+
name = "tensorboard-data-server"
|
| 2974 |
+
version = "0.7.2"
|
| 2975 |
+
source = { registry = "https://pypi.org/simple" }
|
| 2976 |
+
wheels = [
|
| 2977 |
+
{ url = "https://files.pythonhosted.org/packages/7a/13/e503968fefabd4c6b2650af21e110aa8466fe21432cd7c43a84577a89438/tensorboard_data_server-0.7.2-py3-none-any.whl", hash = "sha256:7e0610d205889588983836ec05dc098e80f97b7e7bbff7e994ebb78f578d0ddb", size = 2356, upload-time = "2023-10-23T21:23:32.16Z" },
|
| 2978 |
+
{ url = "https://files.pythonhosted.org/packages/b7/85/dabeaf902892922777492e1d253bb7e1264cadce3cea932f7ff599e53fea/tensorboard_data_server-0.7.2-py3-none-macosx_10_9_x86_64.whl", hash = "sha256:9fe5d24221b29625dbc7328b0436ca7fc1c23de4acf4d272f1180856e32f9f60", size = 4823598, upload-time = "2023-10-23T21:23:33.714Z" },
|
| 2979 |
+
{ url = "https://files.pythonhosted.org/packages/73/c6/825dab04195756cf8ff2e12698f22513b3db2f64925bdd41671bfb33aaa5/tensorboard_data_server-0.7.2-py3-none-manylinux_2_31_x86_64.whl", hash = "sha256:ef687163c24185ae9754ed5650eb5bc4d84ff257aabdc33f0cc6f74d8ba54530", size = 6590363, upload-time = "2023-10-23T21:23:35.583Z" },
|
| 2980 |
+
]
|
| 2981 |
+
|
| 2982 |
[[package]]
|
| 2983 |
name = "tokenizers"
|
| 2984 |
version = "0.22.2"
|
|
|
|
| 3052 |
|
| 3053 |
[[package]]
|
| 3054 |
name = "torch"
|
| 3055 |
+
version = "2.11.0"
|
| 3056 |
source = { registry = "https://pypi.org/simple" }
|
| 3057 |
dependencies = [
|
| 3058 |
+
{ name = "cuda-bindings", marker = "sys_platform == 'linux'" },
|
| 3059 |
+
{ name = "cuda-toolkit", extra = ["cublas", "cudart", "cufft", "cufile", "cupti", "curand", "cusolver", "cusparse", "nvjitlink", "nvrtc", "nvtx"], marker = "sys_platform == 'linux'" },
|
| 3060 |
{ name = "filelock" },
|
| 3061 |
{ name = "fsspec" },
|
| 3062 |
{ name = "jinja2" },
|
| 3063 |
{ name = "networkx" },
|
| 3064 |
+
{ name = "nvidia-cudnn-cu13", marker = "sys_platform == 'linux'" },
|
| 3065 |
+
{ name = "nvidia-cusparselt-cu13", marker = "sys_platform == 'linux'" },
|
| 3066 |
+
{ name = "nvidia-nccl-cu13", marker = "sys_platform == 'linux'" },
|
| 3067 |
+
{ name = "nvidia-nvshmem-cu13", marker = "sys_platform == 'linux'" },
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3068 |
{ name = "setuptools" },
|
| 3069 |
{ name = "sympy" },
|
| 3070 |
+
{ name = "triton", marker = "sys_platform == 'linux'" },
|
| 3071 |
{ name = "typing-extensions" },
|
| 3072 |
]
|
| 3073 |
wheels = [
|
| 3074 |
+
{ url = "https://files.pythonhosted.org/packages/6f/8b/69e3008d78e5cee2b30183340cc425081b78afc5eff3d080daab0adda9aa/torch-2.11.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4b5866312ee6e52ea625cd211dcb97d6a2cdc1131a5f15cc0d87eec948f6dd34", size = 80606338, upload-time = "2026-03-23T18:11:34.781Z" },
|
| 3075 |
+
{ url = "https://files.pythonhosted.org/packages/13/16/42e5915ebe4868caa6bac83a8ed59db57f12e9a61b7d749d584776ed53d5/torch-2.11.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:f99924682ef0aa6a4ab3b1b76f40dc6e273fca09f367d15a524266db100a723f", size = 419731115, upload-time = "2026-03-23T18:11:06.944Z" },
|
| 3076 |
+
{ url = "https://files.pythonhosted.org/packages/1a/c9/82638ef24d7877510f83baf821f5619a61b45568ce21c0a87a91576510aa/torch-2.11.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:0f68f4ac6d95d12e896c3b7a912b5871619542ec54d3649cf48cc1edd4dd2756", size = 530712279, upload-time = "2026-03-23T18:10:31.481Z" },
|
| 3077 |
+
{ url = "https://files.pythonhosted.org/packages/1c/ff/6756f1c7ee302f6d202120e0f4f05b432b839908f9071157302cedfc5232/torch-2.11.0-cp312-cp312-win_amd64.whl", hash = "sha256:fbf39280699d1b869f55eac536deceaa1b60bd6788ba74f399cc67e60a5fab10", size = 114556047, upload-time = "2026-03-23T18:10:55.931Z" },
|
| 3078 |
+
{ url = "https://files.pythonhosted.org/packages/87/89/5ea6722763acee56b045435fb84258db7375c48165ec8be7880ab2b281c5/torch-2.11.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1e6debd97ccd3205bbb37eb806a9d8219e1139d15419982c09e23ef7d4369d18", size = 80606801, upload-time = "2026-03-23T18:10:18.649Z" },
|
| 3079 |
+
{ url = "https://files.pythonhosted.org/packages/32/d1/8ed2173589cbfe744ed54e5a73efc107c0085ba5777ee93a5f4c1ab90553/torch-2.11.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:63a68fa59de8f87acc7e85a5478bb2dddbb3392b7593ec3e78827c793c4b73fd", size = 419732382, upload-time = "2026-03-23T18:08:30.835Z" },
|
| 3080 |
+
{ url = "https://files.pythonhosted.org/packages/3d/e1/b73f7c575a4b8f87a5928f50a1e35416b5e27295d8be9397d5293e7e8d4c/torch-2.11.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:cc89b9b173d9adfab59fd227f0ab5e5516d9a52b658ae41d64e59d2e55a418db", size = 530711509, upload-time = "2026-03-23T18:08:47.213Z" },
|
| 3081 |
+
{ url = "https://files.pythonhosted.org/packages/66/82/3e3fcdd388fbe54e29fd3f991f36846ff4ac90b0d0181e9c8f7236565f82/torch-2.11.0-cp313-cp313-win_amd64.whl", hash = "sha256:4dda3b3f52d121063a731ddb835f010dc137b920d7fec2778e52f60d8e4bf0cd", size = 114555842, upload-time = "2026-03-23T18:09:52.111Z" },
|
| 3082 |
+
{ url = "https://files.pythonhosted.org/packages/db/38/8ac78069621b8c2b4979c2f96dc8409ef5e9c4189f6aac629189a78677ca/torch-2.11.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:8b394322f49af4362d4f80e424bcaca7efcd049619af03a4cf4501520bdf0fb4", size = 80959574, upload-time = "2026-03-23T18:10:14.214Z" },
|
| 3083 |
+
{ url = "https://files.pythonhosted.org/packages/6d/6c/56bfb37073e7136e6dd86bfc6af7339946dd684e0ecf2155ac0eee687ae1/torch-2.11.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:2658f34ce7e2dabf4ec73b45e2ca68aedad7a5be87ea756ad656eaf32bf1e1ea", size = 419732324, upload-time = "2026-03-23T18:09:36.604Z" },
|
| 3084 |
+
{ url = "https://files.pythonhosted.org/packages/07/f4/1b666b6d61d3394cca306ea543ed03a64aad0a201b6cd159f1d41010aeb1/torch-2.11.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:98bb213c3084cfe176302949bdc360074b18a9da7ab59ef2edc9d9f742504778", size = 530596026, upload-time = "2026-03-23T18:09:20.842Z" },
|
| 3085 |
+
{ url = "https://files.pythonhosted.org/packages/48/6b/30d1459fa7e4b67e9e3fe1685ca1d8bb4ce7c62ef436c3a615963c6c866c/torch-2.11.0-cp313-cp313t-win_amd64.whl", hash = "sha256:a97b94bbf62992949b4730c6cd2cc9aee7b335921ee8dc207d930f2ed09ae2db", size = 114793702, upload-time = "2026-03-23T18:09:47.304Z" },
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3086 |
]
|
| 3087 |
|
| 3088 |
[[package]]
|
|
|
|
| 3099 |
|
| 3100 |
[[package]]
|
| 3101 |
name = "transformers"
|
| 3102 |
+
version = "5.5.0"
|
| 3103 |
source = { registry = "https://pypi.org/simple" }
|
| 3104 |
dependencies = [
|
|
|
|
| 3105 |
{ name = "huggingface-hub" },
|
| 3106 |
{ name = "numpy" },
|
| 3107 |
{ name = "packaging" },
|
| 3108 |
{ name = "pyyaml" },
|
| 3109 |
{ name = "regex" },
|
|
|
|
| 3110 |
{ name = "safetensors" },
|
| 3111 |
{ name = "tokenizers" },
|
| 3112 |
{ name = "tqdm" },
|
| 3113 |
+
{ name = "typer" },
|
| 3114 |
]
|
| 3115 |
+
sdist = { url = "https://files.pythonhosted.org/packages/ff/9d/fb46e729b461985f41a5740167688b924a4019141e5c164bea77548d3d9e/transformers-5.5.0.tar.gz", hash = "sha256:c8db656cf51c600cd8c75f06b20ef85c72e8b8ff9abc880c5d3e8bc70e0ddcbd", size = 8237745, upload-time = "2026-04-02T16:13:08.113Z" }
|
| 3116 |
wheels = [
|
| 3117 |
+
{ url = "https://files.pythonhosted.org/packages/e7/28/35f7411ff80a3640c1f4fc907dcbb6a65061ebb82f66950e38bfc9f7f740/transformers-5.5.0-py3-none-any.whl", hash = "sha256:821a9ff0961abbb29eb1eb686d78df1c85929fdf213a3fe49dc6bd94f9efa944", size = 10245591, upload-time = "2026-04-02T16:13:03.462Z" },
|
| 3118 |
]
|
| 3119 |
|
| 3120 |
[[package]]
|
|
|
|
| 3130 |
{ url = "https://files.pythonhosted.org/packages/35/f8/9c66bfc55361ec6d0e4040a0337fb5924ceb23de4648b8a81ae9d33b2b38/triton-3.6.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d002e07d7180fd65e622134fbd980c9a3d4211fb85224b56a0a0efbd422ab72f", size = 188400296, upload-time = "2026-01-20T16:00:56.042Z" },
|
| 3131 |
]
|
| 3132 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3133 |
[[package]]
|
| 3134 |
name = "trl"
|
| 3135 |
+
version = "1.2.0"
|
| 3136 |
source = { registry = "https://pypi.org/simple" }
|
| 3137 |
dependencies = [
|
| 3138 |
{ name = "accelerate" },
|
| 3139 |
{ name = "datasets" },
|
| 3140 |
+
{ name = "jinja2" },
|
| 3141 |
{ name = "packaging" },
|
| 3142 |
{ name = "transformers" },
|
| 3143 |
]
|
| 3144 |
+
sdist = { url = "https://files.pythonhosted.org/packages/0d/d6/2d3d876917d43537afea7b502abb318ae071295e4accac222741b548399e/trl-1.2.0.tar.gz", hash = "sha256:f5038b21295d2559992a087ea8d9ca10f74cde23e6760861def209811ab45d00", size = 583112, upload-time = "2026-04-17T01:04:17.706Z" }
|
| 3145 |
wheels = [
|
| 3146 |
+
{ url = "https://files.pythonhosted.org/packages/02/82/bad1a22ff4b21d8080f7a64d8313c1ac0e791b455b98f2efca1ef3e14b8f/trl-1.2.0-py3-none-any.whl", hash = "sha256:f6ddfa162ac92d25973070d9e3f6cff71b32c52edc34539e4294722f9dc0a6d6", size = 697449, upload-time = "2026-04-17T01:04:16.007Z" },
|
| 3147 |
]
|
| 3148 |
|
| 3149 |
+
[package.optional-dependencies]
|
| 3150 |
+
peft = [
|
| 3151 |
+
{ name = "peft" },
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3152 |
]
|
| 3153 |
|
| 3154 |
[[package]]
|
|
|
|
| 3187 |
{ url = "https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl", hash = "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7", size = 14611, upload-time = "2025-10-01T02:14:40.154Z" },
|
| 3188 |
]
|
| 3189 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3190 |
[[package]]
|
| 3191 |
name = "tzdata"
|
| 3192 |
version = "2026.1"
|
|
|
|
| 3205 |
{ url = "https://files.pythonhosted.org/packages/11/e1/7ec67882ad8fc9f86384bef6421fa252c9cbe5744f8df6ce77afc9eca1f5/uncalled_for-0.3.1-py3-none-any.whl", hash = "sha256:074cdc92da8356278f93d0ded6f2a66dd883dbecaf9bc89437646ee2289cc200", size = 11361, upload-time = "2026-04-07T13:05:05.341Z" },
|
| 3206 |
]
|
| 3207 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3208 |
[[package]]
|
| 3209 |
name = "urllib3"
|
| 3210 |
version = "2.6.3"
|
|
|
|
| 3302 |
]
|
| 3303 |
|
| 3304 |
[[package]]
|
| 3305 |
+
name = "werkzeug"
|
| 3306 |
+
version = "3.1.8"
|
| 3307 |
source = { registry = "https://pypi.org/simple" }
|
| 3308 |
dependencies = [
|
| 3309 |
+
{ name = "markupsafe" },
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3310 |
]
|
| 3311 |
+
sdist = { url = "https://files.pythonhosted.org/packages/dd/b2/381be8cfdee792dd117872481b6e378f85c957dd7c5bca38897b08f765fd/werkzeug-3.1.8.tar.gz", hash = "sha256:9bad61a4268dac112f1c5cd4630a56ede601b6ed420300677a869083d70a4c44", size = 875852, upload-time = "2026-04-02T18:49:14.268Z" }
|
| 3312 |
wheels = [
|
| 3313 |
+
{ url = "https://files.pythonhosted.org/packages/93/8c/2e650f2afeb7ee576912636c23ddb621c91ac6a98e66dc8d29c3c69446e1/werkzeug-3.1.8-py3-none-any.whl", hash = "sha256:63a77fb8892bf28ebc3178683445222aa500e48ebad5ec77b0ad80f8726b1f50", size = 226459, upload-time = "2026-04-02T18:49:12.72Z" },
|
|
|
|
| 3314 |
]
|
| 3315 |
|
| 3316 |
[[package]]
|