Publish pinned blocked Gemma conversion toolkit without weights
Browse files- README-toolkit.md +21 -0
- README.md +7 -0
- STATUS.md +7 -0
- assets.lock.json +27 -0
- assets.py +72 -0
- convert-coreml.py +92 -0
- export_model.py +51 -0
- native_reference.py +58 -0
- publish-source.py +43 -0
- pyproject.toml +28 -0
- reports/source-audit.json +20 -0
- scorer.py +39 -0
- tests/test_source_contract.py +54 -0
- uv.lock +850 -0
- verify-parity.py +86 -0
README-toolkit.md
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# System One Gemma scorer on Core ML — conversion blocked at base access
|
| 2 |
+
|
| 3 |
+
This toolkit pins the real trained [`akash-kamat/system-one-gemma`](https://github.com/akash-kamat/system-one-gemma) scorer at commit `cc75aa8042dec965003210fdba033fee8759735e` and its `google/gemma-3-270m` base at revision `9b0cfec892e2bc2afd938c98eabe4e4a7b1e0ca1`. The 15 MB adapter contains a trained BF16 `score.weight` with shape `[1, 640]`; `modules_to_save` includes `score`. Stock Gemma or a replacement scalar head would not be the tracked model. `assets.lock.json` pins SHA-256 hashes for the adapter, metadata, tokenizer and audited runtime.
|
| 4 |
+
|
| 5 |
+
**Current status: no Core ML model has been produced or validated.** Google gates the base. The authenticated Hugging Face account on this Mac receives HTTP 403 even for its tiny `config.json`. The exact next step is for the account owner to [review and accept the Gemma terms on the base model page](https://huggingface.co/google/gemma-3-270m), then run `uv run python assets.py` again. Do not use another account's token or an ungated mirror. The source-only [FluidInference/system-one-gemma-coreml](https://huggingface.co/FluidInference/system-one-gemma-coreml) repository contains no Gemma or trained adapter weights.
|
| 6 |
+
|
| 7 |
+
The upstream web app is the serving reference: it scores each state/question/option string with a Gemma sequence-classification head, right-pads the candidate batch, uses a **256-token** cap, and applies **temperature 2.35** before softmax. It keeps the question/option tail and truncates the end of the state. Its CLI (`infer.py`) defaults to 384 tokens and temperature 1.0 instead; that is a different configuration. This conversion targets the released web-app behavior. It exposes a complete choice probability distribution and chosen option. The upstream scorer has no separate trained Boolean, ordered-score, or abstention head, so this toolkit does not claim those native decision types or the historical Decision Index score of 17.09. The historical tracker checkpoint/adapter pair is unverified.
|
| 8 |
+
|
| 9 |
+
After legitimate access is granted, on Apple Silicon:
|
| 10 |
+
|
| 11 |
+
```bash
|
| 12 |
+
uv sync --frozen
|
| 13 |
+
uv run python assets.py
|
| 14 |
+
uv run python convert-coreml.py
|
| 15 |
+
uv run python verify-parity.py
|
| 16 |
+
uv run pytest -q
|
| 17 |
+
```
|
| 18 |
+
|
| 19 |
+
`convert-coreml.py` is a prepared, **untested** FP16 L256/K16 export. It checks that PEFT's merge retained the exact trained scalar head and writes 16 raw choice logits; host code in `scorer.py` batches options in groups of 16 and applies the upstream temperature/softmax across the full option set. `verify-parity.py` is prepared to compare the native model and Core ML on the eight real upstream demo questions. A produced package must not be published as validated until this check passes and a new report records its size, latency, and compute placement. The prepared export has not been profiled on the Neural Engine.
|
| 20 |
+
|
| 21 |
+
The upstream repository licenses its code under Apache-2.0 but says its pretrained scorer weights inherit a **noncommercial restriction** from training data. The trained-weight redistribution permission is not sufficiently clear for us to rehost them. Google's [Gemma Terms](https://ai.google.dev/gemma/terms) also govern a converted derivative; section 3.1 specifies downstream restrictions, terms copies, modification notices, and a Notice file. Access to the base and permission to publish the complete converted artifact are separate conditions. This toolkit does not include or redistribute either weight set.
|
README.md
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# System One Gemma Core ML conversion toolkit (source only)
|
| 2 |
+
|
| 3 |
+
**Blocked, no model weights or Core ML package here.** This repo hosts pinned conversion source for [`akash-kamat/system-one-gemma`](https://github.com/akash-kamat/system-one-gemma) at `cc75aa8042dec965003210fdba033fee8759735e` with [`google/gemma-3-270m`](https://huggingface.co/google/gemma-3-270m) at `9b0cfec892e2bc2afd938c98eabe4e4a7b1e0ca1`. The current authenticated account receives HTTP 403 for the gated base. The source's trained adapter contains the scalar score head, but neither the adapter nor any base or derivative weights are redistributed here.
|
| 4 |
+
|
| 5 |
+
Read [README-toolkit.md](README-toolkit.md) for reproducible commands, exact native semantics, validation gates, and license/access notes. The scripts are prepared and **untested against the complete model** until access is granted. No latency, ANE, size, parity, or Decision Index claim is made.
|
| 6 |
+
|
| 7 |
+
The upstream scorer README states that the pretrained weights inherit a noncommercial restriction. [Gemma Terms](https://ai.google.dev/gemma/terms) govern the base and converted derivatives. Any future artifact requires both legitimate access and a separate redistribution-rights review.
|
STATUS.md
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# System One Gemma status — 2026-09-22
|
| 2 |
+
|
| 3 |
+
- `blocked_gated_base`: authenticated `hf_hub_download("google/gemma-3-270m", "config.json", revision="9b0cfec892e2bc2afd938c98eabe4e4a7b1e0ca1")` returned `GatedRepoError` HTTP 403.
|
| 4 |
+
- The exact upstream trained adapter, score-head tensor, SHA-256 hashes, serving renderer, 256-token limit, and 2.35 temperature are pinned and source-audited.
|
| 5 |
+
- The Core ML exporter and native-vs-Core ML parity runner are prepared but **have not executed**. There is no validated Core ML package, speed number, ANE placement, or Decision Index score.
|
| 6 |
+
- Trained-weight redistribution needs an explicit rights determination. This public toolkit excludes the adapter and base weights.
|
| 7 |
+
- Next: account owner accepts the [Gemma access terms](https://huggingface.co/google/gemma-3-270m). Then fetch exact base, run conversion and parity, review Gemma and upstream weight terms before publishing any converted weights.
|
assets.lock.json
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"source_repo": "akash-kamat/system-one-gemma",
|
| 3 |
+
"source_revision": "cc75aa8042dec965003210fdba033fee8759735e",
|
| 4 |
+
"source_url": "https://github.com/akash-kamat/system-one-gemma",
|
| 5 |
+
"base_repo": "google/gemma-3-270m",
|
| 6 |
+
"base_revision": "9b0cfec892e2bc2afd938c98eabe4e4a7b1e0ca1",
|
| 7 |
+
"base_license": "gemma",
|
| 8 |
+
"trained_weights_license": "noncommercial restriction stated by upstream README; redistribution permission unresolved",
|
| 9 |
+
"files": {
|
| 10 |
+
"pretrained-scorer/adapter_model.safetensors": "1cbbc16e5006a1b8bcd4874a8e135e6f09428fc87005260eaa2ba0d4d724c113",
|
| 11 |
+
"pretrained-scorer/adapter_config.json": "20bb5a2892f112f7eedb5934d733e1e29623b8f8a45209945e6632e6c1959839",
|
| 12 |
+
"pretrained-scorer/tokenizer.json": "daab2354f8a74e70d70b4d1f804939b68a8c9624dd06cb7858e52dd8970e9726",
|
| 13 |
+
"pretrained-scorer/tokenizer_config.json": "689a314d20c6f4406ab4115979926f4791cbc68d191eb0833afe6d1661b5af67",
|
| 14 |
+
"pretrained-scorer/metrics.json": "6015b9e766c4947f119768080b173626d7abab2210576fb5e0020d4e93ca3f05",
|
| 15 |
+
"demos.json": "d0553aaab7b777204068679e4f8e913eb24ede6f8778eb6490cb0e4bdfd1018e",
|
| 16 |
+
"infer.py": "1a98e04a1431862bec1b79969822c8a156d4e0d9a19c81ad4c604733afc26f67",
|
| 17 |
+
"app.py": "c4f7d71973ec36f852feb6a0440ebf617284c98d42fa88ef93778c2d28d57fd2"
|
| 18 |
+
},
|
| 19 |
+
"native_serving": {
|
| 20 |
+
"reference": "app.py",
|
| 21 |
+
"max_length": 256,
|
| 22 |
+
"temperature": 2.35,
|
| 23 |
+
"trained_score_tensor": "base_model.model.score.weight",
|
| 24 |
+
"score_shape": [1, 640]
|
| 25 |
+
},
|
| 26 |
+
"historical_revision_verified": false
|
| 27 |
+
}
|
assets.py
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Fetch the pinned upstream scorer and fail clearly when Gemma access is absent."""
|
| 2 |
+
|
| 3 |
+
from __future__ import annotations
|
| 4 |
+
|
| 5 |
+
import hashlib
|
| 6 |
+
import json
|
| 7 |
+
import urllib.request
|
| 8 |
+
from pathlib import Path
|
| 9 |
+
|
| 10 |
+
from huggingface_hub import hf_hub_download
|
| 11 |
+
from huggingface_hub.errors import GatedRepoError
|
| 12 |
+
|
| 13 |
+
ROOT = Path(__file__).resolve().parent
|
| 14 |
+
LOCK = json.loads((ROOT / "assets.lock.json").read_text())
|
| 15 |
+
SOURCE = ROOT / "build" / "source"
|
| 16 |
+
|
| 17 |
+
|
| 18 |
+
def sha256(path: Path) -> str:
|
| 19 |
+
digest = hashlib.sha256()
|
| 20 |
+
with path.open("rb") as stream:
|
| 21 |
+
for block in iter(lambda: stream.read(8 * 1024 * 1024), b""):
|
| 22 |
+
digest.update(block)
|
| 23 |
+
return digest.hexdigest()
|
| 24 |
+
|
| 25 |
+
|
| 26 |
+
def check_base_access() -> Path:
|
| 27 |
+
"""Check a tiny config before attempting any model-weight download."""
|
| 28 |
+
try:
|
| 29 |
+
return Path(hf_hub_download(LOCK["base_repo"], "config.json", revision=LOCK["base_revision"]))
|
| 30 |
+
except GatedRepoError as error:
|
| 31 |
+
raise PermissionError(
|
| 32 |
+
"Gemma 3 270M access denied. Sign in to Hugging Face, review and accept the terms at "
|
| 33 |
+
"https://huggingface.co/google/gemma-3-270m, then rerun with that approved account. "
|
| 34 |
+
"Do not substitute an unrelated Gemma checkpoint."
|
| 35 |
+
) from error
|
| 36 |
+
|
| 37 |
+
|
| 38 |
+
def fetch_source(*, include_adapter: bool = True) -> Path:
|
| 39 |
+
"""Fetch only the locked public GitHub files, without executing upstream code."""
|
| 40 |
+
SOURCE.mkdir(parents=True, exist_ok=True)
|
| 41 |
+
for relative, expected in LOCK["files"].items():
|
| 42 |
+
if not include_adapter and relative.endswith("adapter_model.safetensors"):
|
| 43 |
+
continue
|
| 44 |
+
target = SOURCE / relative
|
| 45 |
+
if not target.exists():
|
| 46 |
+
target.parent.mkdir(parents=True, exist_ok=True)
|
| 47 |
+
url = f"https://raw.githubusercontent.com/akash-kamat/system-one-gemma/{LOCK['source_revision']}/{relative}"
|
| 48 |
+
with urllib.request.urlopen(url, timeout=60) as response, target.open("wb") as output:
|
| 49 |
+
for block in iter(lambda: response.read(8 * 1024 * 1024), b""):
|
| 50 |
+
output.write(block)
|
| 51 |
+
if sha256(target) != expected:
|
| 52 |
+
target.unlink(missing_ok=True)
|
| 53 |
+
raise ValueError(f"Pinned source hash mismatch: {relative}")
|
| 54 |
+
return SOURCE
|
| 55 |
+
|
| 56 |
+
|
| 57 |
+
def fetch_base() -> Path:
|
| 58 |
+
"""Download the exact licensed base only after account access is confirmed."""
|
| 59 |
+
check_base_access()
|
| 60 |
+
root = ROOT / "build" / "base"
|
| 61 |
+
root.mkdir(parents=True, exist_ok=True)
|
| 62 |
+
for name in ("config.json", "model.safetensors", "tokenizer.json", "tokenizer_config.json"):
|
| 63 |
+
cached = Path(hf_hub_download(LOCK["base_repo"], name, revision=LOCK["base_revision"]))
|
| 64 |
+
target = root / name
|
| 65 |
+
if not target.exists():
|
| 66 |
+
target.symlink_to(cached)
|
| 67 |
+
return root
|
| 68 |
+
|
| 69 |
+
|
| 70 |
+
if __name__ == "__main__":
|
| 71 |
+
check_base_access()
|
| 72 |
+
print(fetch_source())
|
convert-coreml.py
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Convert the pinned trained System One scorer after the Gemma gate is accepted."""
|
| 2 |
+
|
| 3 |
+
from __future__ import annotations
|
| 4 |
+
|
| 5 |
+
import argparse
|
| 6 |
+
import json
|
| 7 |
+
import time
|
| 8 |
+
from pathlib import Path
|
| 9 |
+
|
| 10 |
+
from assets import LOCK, ROOT, check_base_access, sha256
|
| 11 |
+
from native_reference import MAX_LENGTH, encode_options, pad_batch
|
| 12 |
+
|
| 13 |
+
|
| 14 |
+
def main() -> None:
|
| 15 |
+
parser = argparse.ArgumentParser(description=__doc__)
|
| 16 |
+
parser.add_argument("--output-dir", type=Path, default=ROOT / "build")
|
| 17 |
+
args = parser.parse_args()
|
| 18 |
+
check_base_access() # Fail before importing Torch/Core ML or acquiring hundreds of MB.
|
| 19 |
+
|
| 20 |
+
import coremltools as ct
|
| 21 |
+
import numpy as np
|
| 22 |
+
import torch
|
| 23 |
+
|
| 24 |
+
from export_model import export_wrapper, load_trained_scorer
|
| 25 |
+
|
| 26 |
+
torch.set_num_threads(4)
|
| 27 |
+
tokenizer, native = load_trained_scorer()
|
| 28 |
+
source = ROOT / "build" / "source"
|
| 29 |
+
example = json.loads((source / "demos.json").read_text())[0]
|
| 30 |
+
sequences = encode_options(tokenizer, example["state"], example["question"], example["options"])
|
| 31 |
+
# The trace uses real upstream demo tokens. Repeat them to fill the fixed K16 graph.
|
| 32 |
+
sequences = (sequences * 16)[:16]
|
| 33 |
+
ids, mask = pad_batch(sequences, tokenizer.pad_token_id, MAX_LENGTH)
|
| 34 |
+
example_tensors = (torch.tensor(ids, dtype=torch.int32), torch.tensor(mask, dtype=torch.int32))
|
| 35 |
+
wrapper = export_wrapper(native)
|
| 36 |
+
with torch.inference_mode():
|
| 37 |
+
original = native(input_ids=example_tensors[0].long(), attention_mask=example_tensors[1].long()).logits
|
| 38 |
+
wrapped = wrapper(*example_tensors)
|
| 39 |
+
wrapper_error = float((original - wrapped).abs().max())
|
| 40 |
+
if wrapper_error > 1e-5:
|
| 41 |
+
raise ValueError(f"wrapper changed the trained scorer: {wrapper_error}")
|
| 42 |
+
traced = torch.jit.trace(wrapper, example_tensors)
|
| 43 |
+
|
| 44 |
+
started = time.perf_counter()
|
| 45 |
+
coreml = ct.convert(
|
| 46 |
+
traced,
|
| 47 |
+
convert_to="mlprogram",
|
| 48 |
+
minimum_deployment_target=ct.target.iOS17,
|
| 49 |
+
compute_precision=ct.precision.FLOAT16,
|
| 50 |
+
compute_units=ct.ComputeUnit.CPU_ONLY,
|
| 51 |
+
inputs=[
|
| 52 |
+
ct.TensorType(name="input_ids", shape=(16, MAX_LENGTH), dtype=np.int32),
|
| 53 |
+
ct.TensorType(name="attention_mask", shape=(16, MAX_LENGTH), dtype=np.int32),
|
| 54 |
+
],
|
| 55 |
+
outputs=[ct.TensorType(name="logits", dtype=np.float32)],
|
| 56 |
+
)
|
| 57 |
+
coreml.short_description = "Trained System One Gemma scalar scorer; choice temperature 2.35 in host"
|
| 58 |
+
coreml.author = "Akash Kamat (trained weights); Fluid Inference (Core ML conversion)"
|
| 59 |
+
coreml.license = "Gemma Terms of Use; trained scorer noncommercial restriction"
|
| 60 |
+
coreml.user_defined_metadata.update(
|
| 61 |
+
{
|
| 62 |
+
"source_repo": LOCK["source_repo"],
|
| 63 |
+
"source_revision": LOCK["source_revision"],
|
| 64 |
+
"base_repo": LOCK["base_repo"],
|
| 65 |
+
"base_revision": LOCK["base_revision"],
|
| 66 |
+
"trained_adapter_sha256": LOCK["files"]["pretrained-scorer/adapter_model.safetensors"],
|
| 67 |
+
"output_contract": "16 scalar logits; apply temperature 2.35 and softmax to real candidates in host",
|
| 68 |
+
}
|
| 69 |
+
)
|
| 70 |
+
args.output_dir.mkdir(parents=True, exist_ok=True)
|
| 71 |
+
package = args.output_dir / "system_one_gemma_fp16_L256_K16.mlpackage"
|
| 72 |
+
coreml.save(str(package))
|
| 73 |
+
report = {
|
| 74 |
+
"package": package.name,
|
| 75 |
+
"source_revision": LOCK["source_revision"],
|
| 76 |
+
"base_revision": LOCK["base_revision"],
|
| 77 |
+
"parameters": sum(p.numel() for p in native.parameters()),
|
| 78 |
+
"trained_score_head_verified": True,
|
| 79 |
+
"wrapper_max_logit_error": wrapper_error,
|
| 80 |
+
"conversion_seconds": time.perf_counter() - started,
|
| 81 |
+
"package_bytes": sum(path.stat().st_size for path in package.rglob("*") if path.is_file()),
|
| 82 |
+
"package_files_sha256": {
|
| 83 |
+
str(path.relative_to(package)): sha256(path) for path in package.rglob("*") if path.is_file()
|
| 84 |
+
},
|
| 85 |
+
"parity_verified": False,
|
| 86 |
+
}
|
| 87 |
+
(args.output_dir / "conversion.json").write_text(json.dumps(report, indent=2) + "\n")
|
| 88 |
+
print(json.dumps(report, indent=2))
|
| 89 |
+
|
| 90 |
+
|
| 91 |
+
if __name__ == "__main__":
|
| 92 |
+
main()
|
export_model.py
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Load the exact trained Gemma scorer and expose its scalar logit path."""
|
| 2 |
+
|
| 3 |
+
from __future__ import annotations
|
| 4 |
+
|
| 5 |
+
from assets import LOCK, fetch_base, fetch_source
|
| 6 |
+
|
| 7 |
+
|
| 8 |
+
def load_trained_scorer():
|
| 9 |
+
"""Return tokenizer and merged scorer, refusing an absent or altered trained head."""
|
| 10 |
+
# Access check happens before any model allocation or download of large base weights.
|
| 11 |
+
base = fetch_base()
|
| 12 |
+
source = fetch_source()
|
| 13 |
+
|
| 14 |
+
import torch
|
| 15 |
+
from peft import PeftModel
|
| 16 |
+
from safetensors.torch import load_file
|
| 17 |
+
from transformers import AutoTokenizer, Gemma3TextForSequenceClassification
|
| 18 |
+
|
| 19 |
+
tokenizer = AutoTokenizer.from_pretrained(base, local_files_only=True)
|
| 20 |
+
if tokenizer.pad_token is None:
|
| 21 |
+
tokenizer.pad_token = tokenizer.eos_token
|
| 22 |
+
model = Gemma3TextForSequenceClassification.from_pretrained(
|
| 23 |
+
base, num_labels=1, dtype=torch.float32, local_files_only=True
|
| 24 |
+
)
|
| 25 |
+
model.config.pad_token_id = tokenizer.pad_token_id
|
| 26 |
+
model.config.eos_token_id = tokenizer.eos_token_id
|
| 27 |
+
peft = PeftModel.from_pretrained(model, source / "pretrained-scorer", local_files_only=True)
|
| 28 |
+
merged = peft.merge_and_unload().eval()
|
| 29 |
+
trained = load_file(source / "pretrained-scorer" / "adapter_model.safetensors")
|
| 30 |
+
trained_head = trained[LOCK["native_serving"]["trained_score_tensor"]].float()
|
| 31 |
+
actual_head = merged.score.weight.detach().float()
|
| 32 |
+
if tuple(trained_head.shape) != tuple(LOCK["native_serving"]["score_shape"]):
|
| 33 |
+
raise ValueError("locked trained head shape changed")
|
| 34 |
+
if not torch.equal(trained_head, actual_head):
|
| 35 |
+
raise ValueError("merged model lost the trained scalar score head")
|
| 36 |
+
return tokenizer, merged
|
| 37 |
+
|
| 38 |
+
|
| 39 |
+
def export_wrapper(model):
|
| 40 |
+
"""Make a traceable wrapper that returns only the trained choice logit."""
|
| 41 |
+
import torch
|
| 42 |
+
|
| 43 |
+
class ScalarScorer(torch.nn.Module):
|
| 44 |
+
def __init__(self, native):
|
| 45 |
+
super().__init__()
|
| 46 |
+
self.native = native
|
| 47 |
+
|
| 48 |
+
def forward(self, input_ids, attention_mask):
|
| 49 |
+
return self.native(input_ids=input_ids.long(), attention_mask=attention_mask.long()).logits.float()
|
| 50 |
+
|
| 51 |
+
return ScalarScorer(model).eval()
|
native_reference.py
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""The released app.py choice-scorer rendering, padding, and calibration."""
|
| 2 |
+
|
| 3 |
+
from __future__ import annotations
|
| 4 |
+
|
| 5 |
+
import math
|
| 6 |
+
from collections.abc import Sequence
|
| 7 |
+
|
| 8 |
+
MAX_LENGTH = 256
|
| 9 |
+
TEMPERATURE = 2.35
|
| 10 |
+
|
| 11 |
+
|
| 12 |
+
def encode(tokenizer, state: str, question: str, option: str, max_length: int = MAX_LENGTH) -> list[int]:
|
| 13 |
+
"""Keep the question/option tail; truncate the state from its end, as upstream does."""
|
| 14 |
+
tail = tokenizer("\n\nQuestion:\n" + question + "\n\nOption:\n" + option, add_special_tokens=False)["input_ids"]
|
| 15 |
+
if len(tail) >= max_length:
|
| 16 |
+
return tail[-max_length:]
|
| 17 |
+
head = tokenizer("State:\n" + state, add_special_tokens=False)["input_ids"]
|
| 18 |
+
return head[: max_length - len(tail)] + tail
|
| 19 |
+
|
| 20 |
+
|
| 21 |
+
def encode_options(tokenizer, state: str, question: str, options: Sequence[str]) -> list[list[int]]:
|
| 22 |
+
if len(options) < 2:
|
| 23 |
+
raise ValueError("the native app requires at least two options")
|
| 24 |
+
if any(not option.strip() for option in options):
|
| 25 |
+
raise ValueError("options must be nonempty")
|
| 26 |
+
return [encode(tokenizer, state, question, option) for option in options]
|
| 27 |
+
|
| 28 |
+
|
| 29 |
+
def pad_batch(
|
| 30 |
+
sequences: Sequence[Sequence[int]], pad_id: int, length: int | None = None
|
| 31 |
+
) -> tuple[list[list[int]], list[list[int]]]:
|
| 32 |
+
"""Right-pad to the longest candidate (or fixed export length), with true token masks."""
|
| 33 |
+
if not sequences:
|
| 34 |
+
raise ValueError("empty candidate batch")
|
| 35 |
+
width = min(max(map(len, sequences)), MAX_LENGTH) if length is None else length
|
| 36 |
+
if width > MAX_LENGTH or width < max(map(len, sequences)):
|
| 37 |
+
raise ValueError("invalid padding length")
|
| 38 |
+
ids = [list(row) + [pad_id] * (width - len(row)) for row in sequences]
|
| 39 |
+
masks = [[1] * len(row) + [0] * (width - len(row)) for row in sequences]
|
| 40 |
+
return ids, masks
|
| 41 |
+
|
| 42 |
+
|
| 43 |
+
def softmax(logits: Sequence[float], temperature: float = TEMPERATURE) -> list[float]:
|
| 44 |
+
if not logits or temperature <= 0:
|
| 45 |
+
raise ValueError("need logits and a positive temperature")
|
| 46 |
+
scaled = [float(value) / temperature for value in logits]
|
| 47 |
+
peak = max(scaled)
|
| 48 |
+
weights = [math.exp(value - peak) for value in scaled]
|
| 49 |
+
total = sum(weights)
|
| 50 |
+
return [weight / total for weight in weights]
|
| 51 |
+
|
| 52 |
+
|
| 53 |
+
def choose(options: Sequence[str], logits: Sequence[float]) -> dict:
|
| 54 |
+
if len(options) != len(logits):
|
| 55 |
+
raise ValueError("one scalar logit is required per option")
|
| 56 |
+
probabilities = softmax(logits)
|
| 57 |
+
index = max(range(len(options)), key=probabilities.__getitem__)
|
| 58 |
+
return {"selected_index": index, "selected_option": options[index], "probabilities": probabilities}
|
publish-source.py
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Publish the blocked toolkit's allowlisted source files, never third-party weights."""
|
| 2 |
+
|
| 3 |
+
from __future__ import annotations
|
| 4 |
+
|
| 5 |
+
from huggingface_hub import CommitOperationAdd, HfApi
|
| 6 |
+
|
| 7 |
+
from assets import ROOT
|
| 8 |
+
|
| 9 |
+
REPO = "FluidInference/system-one-gemma-coreml"
|
| 10 |
+
ALLOWLIST = {
|
| 11 |
+
"README.md": ROOT / "hf" / "README.md",
|
| 12 |
+
"README-toolkit.md": ROOT / "README.md",
|
| 13 |
+
"STATUS.md": ROOT / "STATUS.md",
|
| 14 |
+
"assets.lock.json": ROOT / "assets.lock.json",
|
| 15 |
+
"assets.py": ROOT / "assets.py",
|
| 16 |
+
"native_reference.py": ROOT / "native_reference.py",
|
| 17 |
+
"export_model.py": ROOT / "export_model.py",
|
| 18 |
+
"convert-coreml.py": ROOT / "convert-coreml.py",
|
| 19 |
+
"scorer.py": ROOT / "scorer.py",
|
| 20 |
+
"verify-parity.py": ROOT / "verify-parity.py",
|
| 21 |
+
"publish-source.py": ROOT / "publish-source.py",
|
| 22 |
+
"pyproject.toml": ROOT / "pyproject.toml",
|
| 23 |
+
"uv.lock": ROOT / "uv.lock",
|
| 24 |
+
"tests/test_source_contract.py": ROOT / "tests" / "test_source_contract.py",
|
| 25 |
+
"reports/source-audit.json": ROOT / "reports" / "source-audit.json",
|
| 26 |
+
}
|
| 27 |
+
|
| 28 |
+
|
| 29 |
+
def main() -> None:
|
| 30 |
+
operations = [CommitOperationAdd(path_in_repo=remote, path_or_fileobj=path) for remote, path in ALLOWLIST.items()]
|
| 31 |
+
api = HfApi()
|
| 32 |
+
api.create_repo(REPO, repo_type="model", private=False, exist_ok=True)
|
| 33 |
+
result = api.create_commit(
|
| 34 |
+
repo_id=REPO,
|
| 35 |
+
repo_type="model",
|
| 36 |
+
operations=operations,
|
| 37 |
+
commit_message="Publish pinned blocked Gemma conversion toolkit without weights",
|
| 38 |
+
)
|
| 39 |
+
print(f"{REPO} revision {result.oid}")
|
| 40 |
+
|
| 41 |
+
|
| 42 |
+
if __name__ == "__main__":
|
| 43 |
+
main()
|
pyproject.toml
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[project]
|
| 2 |
+
name = "system-one-gemma-coreml"
|
| 3 |
+
version = "0.1.0"
|
| 4 |
+
description = "Pinned trained System One Gemma scorer conversion, gated pending model access"
|
| 5 |
+
requires-python = ">=3.12,<3.13"
|
| 6 |
+
dependencies = [
|
| 7 |
+
"coremltools==9.0",
|
| 8 |
+
"huggingface-hub>=0.34",
|
| 9 |
+
"numpy<2.3",
|
| 10 |
+
"peft==0.20.0",
|
| 11 |
+
"safetensors>=0.6",
|
| 12 |
+
"torch==2.7.0",
|
| 13 |
+
"transformers==5.17.0",
|
| 14 |
+
]
|
| 15 |
+
|
| 16 |
+
[dependency-groups]
|
| 17 |
+
dev = ["pytest>=8.4", "ruff>=0.13"]
|
| 18 |
+
|
| 19 |
+
[tool.pytest.ini_options]
|
| 20 |
+
testpaths = ["tests"]
|
| 21 |
+
pythonpath = ["."]
|
| 22 |
+
|
| 23 |
+
[tool.ruff]
|
| 24 |
+
line-length = 120
|
| 25 |
+
target-version = "py312"
|
| 26 |
+
|
| 27 |
+
[tool.ruff.lint]
|
| 28 |
+
select = ["E", "F", "I"]
|
reports/source-audit.json
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"audit_date": "2026-09-22",
|
| 3 |
+
"source_repo": "akash-kamat/system-one-gemma",
|
| 4 |
+
"source_revision": "cc75aa8042dec965003210fdba033fee8759735e",
|
| 5 |
+
"base_repo": "google/gemma-3-270m",
|
| 6 |
+
"base_revision": "9b0cfec892e2bc2afd938c98eabe4e4a7b1e0ca1",
|
| 7 |
+
"base_access": "GatedRepoError HTTP 403 for authenticated config.json request",
|
| 8 |
+
"trained_adapter_sha256": "1cbbc16e5006a1b8bcd4874a8e135e6f09428fc87005260eaa2ba0d4d724c113",
|
| 9 |
+
"trained_head_tensor": "base_model.model.score.weight",
|
| 10 |
+
"trained_head_shape": [1, 640],
|
| 11 |
+
"trained_head_dtype": "BF16",
|
| 12 |
+
"peft_modules_to_save_includes_score": true,
|
| 13 |
+
"released_web_runtime_max_tokens": 256,
|
| 14 |
+
"released_web_runtime_temperature": 2.35,
|
| 15 |
+
"historical_tracker_revision_verified": false,
|
| 16 |
+
"coreml_converted": false,
|
| 17 |
+
"coreml_parity_verified": false,
|
| 18 |
+
"trained_weight_redistribution_permission_resolved": false,
|
| 19 |
+
"source_contract_unit_tests": "4 passed"
|
| 20 |
+
}
|
scorer.py
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Run the converted trained scalar scorer over complete option sets."""
|
| 2 |
+
|
| 3 |
+
from __future__ import annotations
|
| 4 |
+
|
| 5 |
+
from pathlib import Path
|
| 6 |
+
|
| 7 |
+
import numpy as np
|
| 8 |
+
|
| 9 |
+
from assets import ROOT
|
| 10 |
+
from native_reference import MAX_LENGTH, choose, encode_options, pad_batch
|
| 11 |
+
|
| 12 |
+
|
| 13 |
+
def score_coreml(model, tokenizer, state: str, question: str, options: list[str]) -> dict:
|
| 14 |
+
"""Pad each independent K16 scorer call, then softmax all real logits jointly."""
|
| 15 |
+
sequences = encode_options(tokenizer, state, question, options)
|
| 16 |
+
logits = []
|
| 17 |
+
for offset in range(0, len(sequences), 16):
|
| 18 |
+
chunk = sequences[offset : offset + 16]
|
| 19 |
+
padded = chunk + [chunk[0]] * (16 - len(chunk))
|
| 20 |
+
ids, masks = pad_batch(padded, tokenizer.pad_token_id, MAX_LENGTH)
|
| 21 |
+
result = model.predict(
|
| 22 |
+
{"input_ids": np.asarray(ids, dtype=np.int32), "attention_mask": np.asarray(masks, dtype=np.int32)}
|
| 23 |
+
)
|
| 24 |
+
logits.extend(np.asarray(result["logits"]).reshape(-1)[: len(chunk)].astype(float).tolist())
|
| 25 |
+
return {**choose(options, logits), "logits": logits}
|
| 26 |
+
|
| 27 |
+
|
| 28 |
+
def load_runtime(package: Path = ROOT / "build" / "system_one_gemma_fp16_L256_K16.mlpackage"):
|
| 29 |
+
"""Load only the package and public base tokenizer after terms acceptance."""
|
| 30 |
+
import coremltools as ct
|
| 31 |
+
from transformers import AutoTokenizer
|
| 32 |
+
|
| 33 |
+
from assets import fetch_base
|
| 34 |
+
|
| 35 |
+
base = fetch_base()
|
| 36 |
+
tokenizer = AutoTokenizer.from_pretrained(base, local_files_only=True)
|
| 37 |
+
if tokenizer.pad_token is None:
|
| 38 |
+
tokenizer.pad_token = tokenizer.eos_token
|
| 39 |
+
return ct.models.MLModel(str(package), compute_units=ct.ComputeUnit.ALL), tokenizer
|
tests/test_source_contract.py
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Small deterministic checks for the audited source contract, without loading Gemma."""
|
| 2 |
+
|
| 3 |
+
from __future__ import annotations
|
| 4 |
+
|
| 5 |
+
import json
|
| 6 |
+
import struct
|
| 7 |
+
|
| 8 |
+
import pytest
|
| 9 |
+
|
| 10 |
+
from assets import LOCK, fetch_source, sha256
|
| 11 |
+
from native_reference import TEMPERATURE, choose, encode, pad_batch, softmax
|
| 12 |
+
|
| 13 |
+
|
| 14 |
+
def test_real_trained_adapter_contains_saved_scalar_head() -> None:
|
| 15 |
+
source = fetch_source()
|
| 16 |
+
adapter = source / "pretrained-scorer" / "adapter_model.safetensors"
|
| 17 |
+
with adapter.open("rb") as stream:
|
| 18 |
+
header_length = struct.unpack("<Q", stream.read(8))[0]
|
| 19 |
+
header = json.loads(stream.read(header_length))
|
| 20 |
+
tensor = header[LOCK["native_serving"]["trained_score_tensor"]]
|
| 21 |
+
assert tensor["shape"] == [1, 640]
|
| 22 |
+
assert tensor["dtype"] == "BF16"
|
| 23 |
+
assert sha256(adapter) == LOCK["files"]["pretrained-scorer/adapter_model.safetensors"]
|
| 24 |
+
|
| 25 |
+
|
| 26 |
+
def test_locked_metrics_match_released_app_calibration() -> None:
|
| 27 |
+
source = fetch_source(include_adapter=False)
|
| 28 |
+
metrics = json.loads((source / "pretrained-scorer" / "metrics.json").read_text())
|
| 29 |
+
assert metrics["temperature"] == TEMPERATURE
|
| 30 |
+
assert metrics["max_len"] == LOCK["native_serving"]["max_length"] == 256
|
| 31 |
+
adapter_config = json.loads((source / "pretrained-scorer" / "adapter_config.json").read_text())
|
| 32 |
+
assert "score" in adapter_config["modules_to_save"]
|
| 33 |
+
assert adapter_config["base_model_name_or_path"] == LOCK["base_repo"]
|
| 34 |
+
|
| 35 |
+
|
| 36 |
+
def test_native_rendering_preserves_question_tail_and_right_padding() -> None:
|
| 37 |
+
class CharacterTokenizer:
|
| 38 |
+
def __call__(self, text: str, add_special_tokens: bool):
|
| 39 |
+
assert not add_special_tokens
|
| 40 |
+
return {"input_ids": [ord(character) for character in text]}
|
| 41 |
+
|
| 42 |
+
tokens = encode(CharacterTokenizer(), "state", "question", "option", max_length=28)
|
| 43 |
+
assert tokens[-len("\n\nOption:\noption") :] == [ord(c) for c in "\n\nOption:\noption"]
|
| 44 |
+
ids, mask = pad_batch([[1, 2, 3], [4]], 0, 4)
|
| 45 |
+
assert ids == [[1, 2, 3, 0], [4, 0, 0, 0]]
|
| 46 |
+
assert mask == [[1, 1, 1, 0], [1, 0, 0, 0]]
|
| 47 |
+
|
| 48 |
+
|
| 49 |
+
def test_calibrated_choice_and_invalid_temperature() -> None:
|
| 50 |
+
result = choose(["first", "second"], [0.0, 2.35])
|
| 51 |
+
assert result["selected_index"] == 1
|
| 52 |
+
assert result["probabilities"] == pytest.approx([0.2689414214, 0.7310585786])
|
| 53 |
+
with pytest.raises(ValueError):
|
| 54 |
+
softmax([1.0], temperature=0.0)
|
uv.lock
ADDED
|
@@ -0,0 +1,850 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version = 1
|
| 2 |
+
revision = 3
|
| 3 |
+
requires-python = "==3.12.*"
|
| 4 |
+
|
| 5 |
+
[[package]]
|
| 6 |
+
name = "accelerate"
|
| 7 |
+
version = "1.15.0"
|
| 8 |
+
source = { registry = "https://pypi.org/simple" }
|
| 9 |
+
dependencies = [
|
| 10 |
+
{ name = "huggingface-hub" },
|
| 11 |
+
{ name = "numpy" },
|
| 12 |
+
{ name = "packaging" },
|
| 13 |
+
{ name = "psutil" },
|
| 14 |
+
{ name = "pyyaml" },
|
| 15 |
+
{ name = "safetensors" },
|
| 16 |
+
{ name = "torch" },
|
| 17 |
+
]
|
| 18 |
+
sdist = { url = "https://files.pythonhosted.org/packages/f5/b5/1d3ed029ac71d3f2961346829a268da923698e9fd63f218f78841f216bfd/accelerate-1.15.0.tar.gz", hash = "sha256:5654f8c5eaa0d4fa68b33e287a97765da6849bf6d51dcac874e73fbbddfb6134", size = 422615, upload-time = "2026-09-09T13:04:49.078Z" }
|
| 19 |
+
wheels = [
|
| 20 |
+
{ url = "https://files.pythonhosted.org/packages/8a/4c/34f0450479d01195027260da68d8a3880683f1640c3ca5adf64acb3185f1/accelerate-1.15.0-py3-none-any.whl", hash = "sha256:97eacca0b73e45cb867dbf8c5d5d4dc32219544300e0c8992c7334dc2ef33cec", size = 394295, upload-time = "2026-09-09T13:04:47.331Z" },
|
| 21 |
+
]
|
| 22 |
+
|
| 23 |
+
[[package]]
|
| 24 |
+
name = "annotated-doc"
|
| 25 |
+
version = "0.0.5"
|
| 26 |
+
source = { registry = "https://pypi.org/simple" }
|
| 27 |
+
sdist = { url = "https://files.pythonhosted.org/packages/5a/8e/38aa427ed5402449e226975b649c5dc73ccadfefeb95e6aecb8f8ea4b6b6/annotated_doc-0.0.5.tar.gz", hash = "sha256:c7e58ce09192557605d8bbd92836d7e1d520ac9580096042c0bfd197efacf1bb", size = 10758, upload-time = "2026-07-28T13:50:58.129Z" }
|
| 28 |
+
wheels = [
|
| 29 |
+
{ url = "https://files.pythonhosted.org/packages/3e/30/e900b21425a860e195f32e37657aa1f7c7f2b1bfb26f03ca209b90933c06/annotated_doc-0.0.5-py3-none-any.whl", hash = "sha256:117bac03a25ede5df5440e855b32d556049ca169ead221505badf432fed4b101", size = 5302, upload-time = "2026-07-28T13:50:57.239Z" },
|
| 30 |
+
]
|
| 31 |
+
|
| 32 |
+
[[package]]
|
| 33 |
+
name = "anyio"
|
| 34 |
+
version = "4.15.1"
|
| 35 |
+
source = { registry = "https://pypi.org/simple" }
|
| 36 |
+
dependencies = [
|
| 37 |
+
{ name = "idna" },
|
| 38 |
+
{ name = "typing-extensions" },
|
| 39 |
+
]
|
| 40 |
+
sdist = { url = "https://files.pythonhosted.org/packages/a9/d2/f4d173e22df740bc37b1db102b386ba719b66e95b0f0d751f556b387e6d2/anyio-4.15.1.tar.gz", hash = "sha256:9f28306018cbd6d329e64a36d58256edff76dd996fe423bc957326e578b82a94", size = 276966, upload-time = "2026-09-05T10:42:39.44Z" }
|
| 41 |
+
wheels = [
|
| 42 |
+
{ url = "https://files.pythonhosted.org/packages/12/b8/4bd346e22b28902df4d651910f5242c28d84e4a5c2435ca5c3f797ed7e2e/anyio-4.15.1-py3-none-any.whl", hash = "sha256:6152fdbbf9a77fdec97731721bebf7c4c44f7c29b424b0065826173efc7ed101", size = 132079, upload-time = "2026-09-05T10:42:37.923Z" },
|
| 43 |
+
]
|
| 44 |
+
|
| 45 |
+
[[package]]
|
| 46 |
+
name = "attrs"
|
| 47 |
+
version = "26.1.0"
|
| 48 |
+
source = { registry = "https://pypi.org/simple" }
|
| 49 |
+
sdist = { url = "https://files.pythonhosted.org/packages/9a/8e/82a0fe20a541c03148528be8cac2408564a6c9a0cc7e9171802bc1d26985/attrs-26.1.0.tar.gz", hash = "sha256:d03ceb89cb322a8fd706d4fb91940737b6642aa36998fe130a9bc96c985eff32", size = 952055, upload-time = "2026-03-19T14:22:25.026Z" }
|
| 50 |
+
wheels = [
|
| 51 |
+
{ url = "https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl", hash = "sha256:c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309", size = 67548, upload-time = "2026-03-19T14:22:23.645Z" },
|
| 52 |
+
]
|
| 53 |
+
|
| 54 |
+
[[package]]
|
| 55 |
+
name = "cattrs"
|
| 56 |
+
version = "26.2.0"
|
| 57 |
+
source = { registry = "https://pypi.org/simple" }
|
| 58 |
+
dependencies = [
|
| 59 |
+
{ name = "attrs" },
|
| 60 |
+
{ name = "typing-extensions" },
|
| 61 |
+
]
|
| 62 |
+
sdist = { url = "https://files.pythonhosted.org/packages/d6/b2/42f4524e5479b090040b5fd8bb316dd8c65a079bb6492494ce2079dc91be/cattrs-26.2.0.tar.gz", hash = "sha256:3cf49f69df8326bcf17a3cb3d3d3ec4a856858fe3a7473746c9044c317d3ba55", size = 524993, upload-time = "2026-09-06T20:31:58.055Z" }
|
| 63 |
+
wheels = [
|
| 64 |
+
{ url = "https://files.pythonhosted.org/packages/f5/4d/6b8460462012a52075ba97932197f8c141be71b8e5f7e918af08ee73424b/cattrs-26.2.0-py3-none-any.whl", hash = "sha256:c680f17cd1df3a1c038ad1db8d90a9c595568cc54c4e8098e7ceb8d7b9bd826b", size = 74830, upload-time = "2026-09-06T20:31:56.327Z" },
|
| 65 |
+
]
|
| 66 |
+
|
| 67 |
+
[[package]]
|
| 68 |
+
name = "certifi"
|
| 69 |
+
version = "2026.7.22"
|
| 70 |
+
source = { registry = "https://pypi.org/simple" }
|
| 71 |
+
sdist = { url = "https://files.pythonhosted.org/packages/a3/c2/24167ea9858356b47a87a50d39908bfdb72ceeefe0041586e704e5376b3a/certifi-2026.7.22.tar.gz", hash = "sha256:741e2c3b351ddf169a738da9f2c048608ff7f2c5cc02f1ebc6b118bb090d5d55", size = 138112, upload-time = "2026-07-22T03:35:12.644Z" }
|
| 72 |
+
wheels = [
|
| 73 |
+
{ url = "https://files.pythonhosted.org/packages/0b/a7/71ac2cff56fec219ed242bb11b8efb69fcc4bec75db06fb7bfe35de520e6/certifi-2026.7.22-py3-none-any.whl", hash = "sha256:62f22742b58a1a33014a2b6b706588a8d7e2a88ae7bd1a6ebe8c992928483775", size = 136983, upload-time = "2026-07-22T03:35:11.276Z" },
|
| 74 |
+
]
|
| 75 |
+
|
| 76 |
+
[[package]]
|
| 77 |
+
name = "click"
|
| 78 |
+
version = "8.5.0"
|
| 79 |
+
source = { registry = "https://pypi.org/simple" }
|
| 80 |
+
sdist = { url = "https://files.pythonhosted.org/packages/c7/0e/7fa0ef50764b67090eca4114772a2abf8b6148198475e54c660b97caeee6/click-8.5.0.tar.gz", hash = "sha256:ba0d2089de75ea0310e2dde03160e6ca10009947fb95a182f9b54021bb272e34", size = 382235, upload-time = "2026-08-26T13:33:14.56Z" }
|
| 81 |
+
wheels = [
|
| 82 |
+
{ url = "https://files.pythonhosted.org/packages/58/50/6c0d534c5f134586a8e1ba4e330569e32f057e33372ae556463212fb4cd3/click-8.5.0-py3-none-any.whl", hash = "sha256:255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360", size = 125251, upload-time = "2026-08-26T13:33:12.928Z" },
|
| 83 |
+
]
|
| 84 |
+
|
| 85 |
+
[[package]]
|
| 86 |
+
name = "colorama"
|
| 87 |
+
version = "0.4.6"
|
| 88 |
+
source = { registry = "https://pypi.org/simple" }
|
| 89 |
+
sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" }
|
| 90 |
+
wheels = [
|
| 91 |
+
{ url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" },
|
| 92 |
+
]
|
| 93 |
+
|
| 94 |
+
[[package]]
|
| 95 |
+
name = "coremltools"
|
| 96 |
+
version = "9.0"
|
| 97 |
+
source = { registry = "https://pypi.org/simple" }
|
| 98 |
+
dependencies = [
|
| 99 |
+
{ name = "attrs" },
|
| 100 |
+
{ name = "cattrs" },
|
| 101 |
+
{ name = "numpy" },
|
| 102 |
+
{ name = "packaging" },
|
| 103 |
+
{ name = "protobuf" },
|
| 104 |
+
{ name = "pyaml" },
|
| 105 |
+
{ name = "sympy" },
|
| 106 |
+
{ name = "tqdm" },
|
| 107 |
+
]
|
| 108 |
+
sdist = { url = "https://files.pythonhosted.org/packages/79/e6/8cb11a246f61736e75b20488b9c3cf9c208f500c9a3f92d717dbf592348c/coremltools-9.0.tar.gz", hash = "sha256:4ff346b29c31c4b45acd19a20e0f0a1ac65180a96776e62f15bd5c46f4926687", size = 1656978, upload-time = "2025-11-10T21:51:23.855Z" }
|
| 109 |
+
wheels = [
|
| 110 |
+
{ url = "https://files.pythonhosted.org/packages/d5/7e/0746b42d39d903da2015d33b619319d84fc16a44e6ed68c1a4768ae27fc5/coremltools-9.0-cp312-none-macosx_10_15_x86_64.whl", hash = "sha256:35d6e972e254081e364e6c7763eae89df8cc775dbf53756ba1ca08a2bc22f018", size = 2792457, upload-time = "2025-11-10T21:48:18.418Z" },
|
| 111 |
+
{ url = "https://files.pythonhosted.org/packages/44/ab/6231b83d770825803284453f1ff36e5f3ba0a5740fcedbd3ba7454e5d412/coremltools-9.0-cp312-none-macosx_11_0_arm64.whl", hash = "sha256:7079e8b6ff5a63f0e2c08eeeb8673e4eab8ca231d4b2eae4f7fb005e0d08a8cd", size = 2764416, upload-time = "2025-11-10T21:48:30.209Z" },
|
| 112 |
+
{ url = "https://files.pythonhosted.org/packages/b5/87/add15e7b4537765bef9cb47ffbd6a5d48493e65181df9864afeffa13b99b/coremltools-9.0-cp312-none-manylinux1_x86_64.whl", hash = "sha256:99a101085a7919de9f1c18e514c17d2b3e6a06ad4f7a35aae9515ad47f5a843f", size = 2308591, upload-time = "2025-11-10T21:48:47.269Z" },
|
| 113 |
+
]
|
| 114 |
+
|
| 115 |
+
[[package]]
|
| 116 |
+
name = "filelock"
|
| 117 |
+
version = "4.0.1"
|
| 118 |
+
source = { registry = "https://pypi.org/simple" }
|
| 119 |
+
sdist = { url = "https://files.pythonhosted.org/packages/6f/38/88cd6eda96c40594a1e3da7d8b40f04bc40ace5a6aef9ac5cb407540f173/filelock-4.0.1.tar.gz", hash = "sha256:fdefc3f3e87716d855ae2b732c1cfd521dd99799ef2b4d00e8c0d4dcdc7cc94b", size = 238888, upload-time = "2026-09-19T01:08:15.958Z" }
|
| 120 |
+
wheels = [
|
| 121 |
+
{ url = "https://files.pythonhosted.org/packages/29/33/af0635ab07fe83b1788a1dbe370ff3e226062495a998335cb18a1cac81aa/filelock-4.0.1-py3-none-any.whl", hash = "sha256:481a321a27bef441e23c53371c6abc8d7d16e26b97090074ba44f7538a3fd55a", size = 106219, upload-time = "2026-09-19T01:08:14.49Z" },
|
| 122 |
+
]
|
| 123 |
+
|
| 124 |
+
[[package]]
|
| 125 |
+
name = "fsspec"
|
| 126 |
+
version = "2026.9.0"
|
| 127 |
+
source = { registry = "https://pypi.org/simple" }
|
| 128 |
+
sdist = { url = "https://files.pythonhosted.org/packages/77/cd/9be253869fc42e764de7f3dedd6969af7d44ff9c3375214a3442a6f3fc08/fsspec-2026.9.0.tar.gz", hash = "sha256:0f08147951c8cb31d844c3547d631053b127863b60be04cf06e121333ee0e2fe", size = 333545, upload-time = "2026-09-18T17:50:42.825Z" }
|
| 129 |
+
wheels = [
|
| 130 |
+
{ url = "https://files.pythonhosted.org/packages/6c/c0/a98505f18594f1bce828bb159cec0fcf9860562f1a2c85913409fc8f3d9e/fsspec-2026.9.0-py3-none-any.whl", hash = "sha256:8dd6e646e99ea382bd85f97a45e6b526a442d79423a7dc673f1e2756d05fcb5f", size = 221738, upload-time = "2026-09-18T17:50:41.341Z" },
|
| 131 |
+
]
|
| 132 |
+
|
| 133 |
+
[[package]]
|
| 134 |
+
name = "h11"
|
| 135 |
+
version = "0.16.0"
|
| 136 |
+
source = { registry = "https://pypi.org/simple" }
|
| 137 |
+
sdist = { url = "https://files.pythonhosted.org/packages/01/ee/02a2c011bdab74c6fb3c75474d40b3052059d95df7e73351460c8588d963/h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1", size = 101250, upload-time = "2025-04-24T03:35:25.427Z" }
|
| 138 |
+
wheels = [
|
| 139 |
+
{ url = "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", size = 37515, upload-time = "2025-04-24T03:35:24.344Z" },
|
| 140 |
+
]
|
| 141 |
+
|
| 142 |
+
[[package]]
|
| 143 |
+
name = "hf-xet"
|
| 144 |
+
version = "1.6.0"
|
| 145 |
+
source = { registry = "https://pypi.org/simple" }
|
| 146 |
+
sdist = { url = "https://files.pythonhosted.org/packages/1b/ab/522a2ab67f27971a9d48ca666d4fca85ef7d5282d142e31fd087e27b1bbe/hf_xet-1.6.0.tar.gz", hash = "sha256:2e58454a340b3556dfa4972d5451aff4fba8dd42a236600ba1a1d2b1514f0fef", size = 920527, upload-time = "2026-08-03T22:33:13.243Z" }
|
| 147 |
+
wheels = [
|
| 148 |
+
{ url = "https://files.pythonhosted.org/packages/a2/50/7afa2c9c787405864fc47a0d1bbc02c62e9101947ed43c1f43899fc7d91d/hf_xet-1.6.0-cp38-abi3-macosx_10_12_x86_64.whl", hash = "sha256:633dc0cd71d32da58ab8c03ad38e2fac452c15c2b0a2866ebf6ededfe0a5061d", size = 4071729, upload-time = "2026-08-03T22:33:00.721Z" },
|
| 149 |
+
{ url = "https://files.pythonhosted.org/packages/4b/69/55b8dcf636142ae660fec1869fcac14c4da2e8412e14d6eee1523be77e9f/hf_xet-1.6.0-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:f0906082d9932ae0c0057fa194041c22b4e2cdb46b2592ef3b91f020d62a081a", size = 3876287, upload-time = "2026-08-03T22:33:02.251Z" },
|
| 150 |
+
{ url = "https://files.pythonhosted.org/packages/67/4e/a28359bf1c1ecf11eba22123168c138698f7cb576ac678f5a2e16cd5da08/hf_xet-1.6.0-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d62671bb130879cef0ee4c9ebe47a14af6c66ec53e6d84dc15936e5ffdfac82f", size = 4464663, upload-time = "2026-08-03T22:33:03.802Z" },
|
| 151 |
+
{ url = "https://files.pythonhosted.org/packages/9a/69/1f0cbc2fb22ae6082d094f743d1b8945a3f36f6089cb95f42b7ee348cda7/hf_xet-1.6.0-cp38-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:0e6e21fa3cdfcdcd76748564bf593870a5e013f47d97cf10aed63aa222cff5b7", size = 4262538, upload-time = "2026-08-03T22:33:05.287Z" },
|
| 152 |
+
{ url = "https://files.pythonhosted.org/packages/d1/3a/4f4f2301ade26e404462d3336fa11f7958d914cabbabdd6e03c3c5d5658c/hf_xet-1.6.0-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:4fc74352a17015bd0ee90038bc9efe38db894cde45f268b6712b04fce8cd0acb", size = 4460520, upload-time = "2026-08-03T22:33:06.81Z" },
|
| 153 |
+
{ url = "https://files.pythonhosted.org/packages/ab/5f/311725e2a905534dfee2dcb5b08414f249147f1f12252bfc2bd24caa075c/hf_xet-1.6.0-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:8fb4f71cba6129110c3374a33f919001ff130488fc23553698e34cc1c2a1198c", size = 4675937, upload-time = "2026-08-03T22:33:08.616Z" },
|
| 154 |
+
{ url = "https://files.pythonhosted.org/packages/98/b7/8c59a66d15205024662f1d66968136f13893f96df1ddc5087e2e281fc95f/hf_xet-1.6.0-cp38-abi3-win_amd64.whl", hash = "sha256:fb4fadde1b2b70bf4c0c14a6dccbe7194b1c28947fefd5bbe3fed9d940676c3b", size = 4033128, upload-time = "2026-08-03T22:33:10.171Z" },
|
| 155 |
+
{ url = "https://files.pythonhosted.org/packages/73/63/ca511b6f802f28cf3489b280fe77475bcca8de85e81a6299d7916b5b5555/hf_xet-1.6.0-cp38-abi3-win_arm64.whl", hash = "sha256:3dc3e35441ba395006af5aaacc40ef2e603c51ef46c3530b9156185f00935ea3", size = 3859359, upload-time = "2026-08-03T22:33:11.725Z" },
|
| 156 |
+
]
|
| 157 |
+
|
| 158 |
+
[[package]]
|
| 159 |
+
name = "httpcore"
|
| 160 |
+
version = "1.0.9"
|
| 161 |
+
source = { registry = "https://pypi.org/simple" }
|
| 162 |
+
dependencies = [
|
| 163 |
+
{ name = "certifi" },
|
| 164 |
+
{ name = "h11" },
|
| 165 |
+
]
|
| 166 |
+
sdist = { url = "https://files.pythonhosted.org/packages/06/94/82699a10bca87a5556c9c59b5963f2d039dbd239f25bc2a63907a05a14cb/httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8", size = 85484, upload-time = "2025-04-24T22:06:22.219Z" }
|
| 167 |
+
wheels = [
|
| 168 |
+
{ url = "https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55", size = 78784, upload-time = "2025-04-24T22:06:20.566Z" },
|
| 169 |
+
]
|
| 170 |
+
|
| 171 |
+
[[package]]
|
| 172 |
+
name = "httpx"
|
| 173 |
+
version = "0.28.1"
|
| 174 |
+
source = { registry = "https://pypi.org/simple" }
|
| 175 |
+
dependencies = [
|
| 176 |
+
{ name = "anyio" },
|
| 177 |
+
{ name = "certifi" },
|
| 178 |
+
{ name = "httpcore" },
|
| 179 |
+
{ name = "idna" },
|
| 180 |
+
]
|
| 181 |
+
sdist = { url = "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", size = 141406, upload-time = "2024-12-06T15:37:23.222Z" }
|
| 182 |
+
wheels = [
|
| 183 |
+
{ url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517, upload-time = "2024-12-06T15:37:21.509Z" },
|
| 184 |
+
]
|
| 185 |
+
|
| 186 |
+
[[package]]
|
| 187 |
+
name = "huggingface-hub"
|
| 188 |
+
version = "1.32.0"
|
| 189 |
+
source = { registry = "https://pypi.org/simple" }
|
| 190 |
+
dependencies = [
|
| 191 |
+
{ name = "click" },
|
| 192 |
+
{ name = "filelock" },
|
| 193 |
+
{ name = "fsspec" },
|
| 194 |
+
{ name = "hf-xet", marker = "platform_machine == 'AMD64' or platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'arm64' or platform_machine == 'x86_64'" },
|
| 195 |
+
{ name = "httpx" },
|
| 196 |
+
{ name = "packaging" },
|
| 197 |
+
{ name = "pyyaml" },
|
| 198 |
+
{ name = "tqdm" },
|
| 199 |
+
{ name = "typing-extensions" },
|
| 200 |
+
]
|
| 201 |
+
sdist = { url = "https://files.pythonhosted.org/packages/fe/0f/e83fdd856da8fca26bf78d71709ebd120432a0ce535e72b9597cab1eb5bf/huggingface_hub-1.32.0.tar.gz", hash = "sha256:ed70a45498abe86039df7c2f4e5f7575de524be908d3840e8f828d5525eafd6a", size = 1038662, upload-time = "2026-09-17T10:27:48.049Z" }
|
| 202 |
+
wheels = [
|
| 203 |
+
{ url = "https://files.pythonhosted.org/packages/1b/cf/d98dd561d6d0d7b7d7a64d1563f8aaaa7c235daee41c1c9bcc3da62420ed/huggingface_hub-1.32.0-py3-none-any.whl", hash = "sha256:b0c7c80561969d9cdacdd55fce67ba9584cca0b9d4ea80957a3a5c1445fac5c8", size = 842906, upload-time = "2026-09-17T10:27:46.102Z" },
|
| 204 |
+
]
|
| 205 |
+
|
| 206 |
+
[[package]]
|
| 207 |
+
name = "idna"
|
| 208 |
+
version = "3.20"
|
| 209 |
+
source = { registry = "https://pypi.org/simple" }
|
| 210 |
+
sdist = { url = "https://files.pythonhosted.org/packages/f5/08/8eea9d4b8302028f3abb2c0813953f7aec26d33b7a8960ed760e65ff29fa/idna-3.20.tar.gz", hash = "sha256:a7db850025b95ded1eae8a46181a1a6c56c92c96f0e2b005d9ff8dc0210cab44", size = 216463, upload-time = "2026-09-17T14:11:04.752Z" }
|
| 211 |
+
wheels = [
|
| 212 |
+
{ url = "https://files.pythonhosted.org/packages/58/a2/bb081bab032533a855d44de1d56f8e8426114ff1ba5d1f07a438a0a654f8/idna-3.20-py3-none-any.whl", hash = "sha256:ab7ae7122974553370f0bdb919e1a960b2cd1bc1ef0276416d896db81c14582c", size = 69583, upload-time = "2026-09-17T14:11:03.168Z" },
|
| 213 |
+
]
|
| 214 |
+
|
| 215 |
+
[[package]]
|
| 216 |
+
name = "iniconfig"
|
| 217 |
+
version = "2.3.0"
|
| 218 |
+
source = { registry = "https://pypi.org/simple" }
|
| 219 |
+
sdist = { url = "https://files.pythonhosted.org/packages/72/34/14ca021ce8e5dfedc35312d08ba8bf51fdd999c576889fc2c24cb97f4f10/iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730", size = 20503, upload-time = "2025-10-18T21:55:43.219Z" }
|
| 220 |
+
wheels = [
|
| 221 |
+
{ url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12", size = 7484, upload-time = "2025-10-18T21:55:41.639Z" },
|
| 222 |
+
]
|
| 223 |
+
|
| 224 |
+
[[package]]
|
| 225 |
+
name = "jinja2"
|
| 226 |
+
version = "3.1.6"
|
| 227 |
+
source = { registry = "https://pypi.org/simple" }
|
| 228 |
+
dependencies = [
|
| 229 |
+
{ name = "markupsafe" },
|
| 230 |
+
]
|
| 231 |
+
sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115, upload-time = "2025-03-05T20:05:02.478Z" }
|
| 232 |
+
wheels = [
|
| 233 |
+
{ url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899, upload-time = "2025-03-05T20:05:00.369Z" },
|
| 234 |
+
]
|
| 235 |
+
|
| 236 |
+
[[package]]
|
| 237 |
+
name = "markdown-it-py"
|
| 238 |
+
version = "4.2.0"
|
| 239 |
+
source = { registry = "https://pypi.org/simple" }
|
| 240 |
+
dependencies = [
|
| 241 |
+
{ name = "mdurl" },
|
| 242 |
+
]
|
| 243 |
+
sdist = { url = "https://files.pythonhosted.org/packages/06/ff/7841249c247aa650a76b9ee4bbaeae59370dc8bfd2f6c01f3630c35eb134/markdown_it_py-4.2.0.tar.gz", hash = "sha256:04a21681d6fbb623de53f6f364d352309d4094dd4194040a10fd51833e418d49", size = 82454, upload-time = "2026-05-07T12:08:28.36Z" }
|
| 244 |
+
wheels = [
|
| 245 |
+
{ url = "https://files.pythonhosted.org/packages/b3/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.2.0-py3-none-any.whl", hash = "sha256:9f7ebbcd14fe59494226453aed97c1070d83f8d24b6fc3a3bcf9a38092641c4a", size = 91687, upload-time = "2026-05-07T12:08:27.182Z" },
|
| 246 |
+
]
|
| 247 |
+
|
| 248 |
+
[[package]]
|
| 249 |
+
name = "markupsafe"
|
| 250 |
+
version = "3.0.3"
|
| 251 |
+
source = { registry = "https://pypi.org/simple" }
|
| 252 |
+
sdist = { url = "https://files.pythonhosted.org/packages/7e/99/7690b6d4034fffd95959cbe0c02de8deb3098cc577c67bb6a24fe5d7caa7/markupsafe-3.0.3.tar.gz", hash = "sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698", size = 80313, upload-time = "2025-09-27T18:37:40.426Z" }
|
| 253 |
+
wheels = [
|
| 254 |
+
{ url = "https://files.pythonhosted.org/packages/5a/72/147da192e38635ada20e0a2e1a51cf8823d2119ce8883f7053879c2199b5/markupsafe-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e", size = 11615, upload-time = "2025-09-27T18:36:30.854Z" },
|
| 255 |
+
{ url = "https://files.pythonhosted.org/packages/9a/81/7e4e08678a1f98521201c3079f77db69fb552acd56067661f8c2f534a718/markupsafe-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce", size = 12020, upload-time = "2025-09-27T18:36:31.971Z" },
|
| 256 |
+
{ url = "https://files.pythonhosted.org/packages/1e/2c/799f4742efc39633a1b54a92eec4082e4f815314869865d876824c257c1e/markupsafe-3.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d", size = 24332, upload-time = "2025-09-27T18:36:32.813Z" },
|
| 257 |
+
{ url = "https://files.pythonhosted.org/packages/3c/2e/8d0c2ab90a8c1d9a24f0399058ab8519a3279d1bd4289511d74e909f060e/markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d", size = 22947, upload-time = "2025-09-27T18:36:33.86Z" },
|
| 258 |
+
{ url = "https://files.pythonhosted.org/packages/2c/54/887f3092a85238093a0b2154bd629c89444f395618842e8b0c41783898ea/markupsafe-3.0.3-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:94c6f0bb423f739146aec64595853541634bde58b2135f27f61c1ffd1cd4d16a", size = 21962, upload-time = "2025-09-27T18:36:35.099Z" },
|
| 259 |
+
{ url = "https://files.pythonhosted.org/packages/c9/2f/336b8c7b6f4a4d95e91119dc8521402461b74a485558d8f238a68312f11c/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:be8813b57049a7dc738189df53d69395eba14fb99345e0a5994914a3864c8a4b", size = 23760, upload-time = "2025-09-27T18:36:36.001Z" },
|
| 260 |
+
{ url = "https://files.pythonhosted.org/packages/32/43/67935f2b7e4982ffb50a4d169b724d74b62a3964bc1a9a527f5ac4f1ee2b/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:83891d0e9fb81a825d9a6d61e3f07550ca70a076484292a70fde82c4b807286f", size = 21529, upload-time = "2025-09-27T18:36:36.906Z" },
|
| 261 |
+
{ url = "https://files.pythonhosted.org/packages/89/e0/4486f11e51bbba8b0c041098859e869e304d1c261e59244baa3d295d47b7/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:77f0643abe7495da77fb436f50f8dab76dbc6e5fd25d39589a0f1fe6548bfa2b", size = 23015, upload-time = "2025-09-27T18:36:37.868Z" },
|
| 262 |
+
{ url = "https://files.pythonhosted.org/packages/2f/e1/78ee7a023dac597a5825441ebd17170785a9dab23de95d2c7508ade94e0e/markupsafe-3.0.3-cp312-cp312-win32.whl", hash = "sha256:d88b440e37a16e651bda4c7c2b930eb586fd15ca7406cb39e211fcff3bf3017d", size = 14540, upload-time = "2025-09-27T18:36:38.761Z" },
|
| 263 |
+
{ url = "https://files.pythonhosted.org/packages/aa/5b/bec5aa9bbbb2c946ca2733ef9c4ca91c91b6a24580193e891b5f7dbe8e1e/markupsafe-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:26a5784ded40c9e318cfc2bdb30fe164bdb8665ded9cd64d500a34fb42067b1c", size = 15105, upload-time = "2025-09-27T18:36:39.701Z" },
|
| 264 |
+
{ url = "https://files.pythonhosted.org/packages/e5/f1/216fc1bbfd74011693a4fd837e7026152e89c4bcf3e77b6692fba9923123/markupsafe-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:35add3b638a5d900e807944a078b51922212fb3dedb01633a8defc4b01a3c85f", size = 13906, upload-time = "2025-09-27T18:36:40.689Z" },
|
| 265 |
+
]
|
| 266 |
+
|
| 267 |
+
[[package]]
|
| 268 |
+
name = "mdurl"
|
| 269 |
+
version = "0.1.2"
|
| 270 |
+
source = { registry = "https://pypi.org/simple" }
|
| 271 |
+
sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729, upload-time = "2022-08-14T12:40:10.846Z" }
|
| 272 |
+
wheels = [
|
| 273 |
+
{ url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload-time = "2022-08-14T12:40:09.779Z" },
|
| 274 |
+
]
|
| 275 |
+
|
| 276 |
+
[[package]]
|
| 277 |
+
name = "mpmath"
|
| 278 |
+
version = "1.3.0"
|
| 279 |
+
source = { registry = "https://pypi.org/simple" }
|
| 280 |
+
sdist = { url = "https://files.pythonhosted.org/packages/e0/47/dd32fa426cc72114383ac549964eecb20ecfd886d1e5ccf5340b55b02f57/mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f", size = 508106, upload-time = "2023-03-07T16:47:11.061Z" }
|
| 281 |
+
wheels = [
|
| 282 |
+
{ 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" },
|
| 283 |
+
]
|
| 284 |
+
|
| 285 |
+
[[package]]
|
| 286 |
+
name = "networkx"
|
| 287 |
+
version = "3.7"
|
| 288 |
+
source = { registry = "https://pypi.org/simple" }
|
| 289 |
+
sdist = { url = "https://files.pythonhosted.org/packages/dc/76/3af777226b63a5e64a6b36b1ec5855c14e2b94a37096d4760e595fc43511/networkx-3.7.tar.gz", hash = "sha256:fd77a511bd90f39f3d016351345b52cf5319b813bdca01de3f755d3cca62e96a", size = 1866482, upload-time = "2026-09-21T16:45:16.974Z" }
|
| 290 |
+
wheels = [
|
| 291 |
+
{ url = "https://files.pythonhosted.org/packages/7e/cd/fe58041e9011f307c490e3e17dd48cc516448f7c698a3f2d9d9d65d7e6a8/networkx-3.7-py3-none-any.whl", hash = "sha256:e3fd2c13a7814cee3746340d8d7f8598a67f16a58bf47fb7f8793fab6efca1b0", size = 2142205, upload-time = "2026-09-21T16:45:14.609Z" },
|
| 292 |
+
]
|
| 293 |
+
|
| 294 |
+
[[package]]
|
| 295 |
+
name = "numpy"
|
| 296 |
+
version = "2.2.6"
|
| 297 |
+
source = { registry = "https://pypi.org/simple" }
|
| 298 |
+
sdist = { url = "https://files.pythonhosted.org/packages/76/21/7d2a95e4bba9dc13d043ee156a356c0a8f0c6309dff6b21b4d71a073b8a8/numpy-2.2.6.tar.gz", hash = "sha256:e29554e2bef54a90aa5cc07da6ce955accb83f21ab5de01a62c8478897b264fd", size = 20276440, upload-time = "2025-05-17T22:38:04.611Z" }
|
| 299 |
+
wheels = [
|
| 300 |
+
{ url = "https://files.pythonhosted.org/packages/82/5d/c00588b6cf18e1da539b45d3598d3557084990dcc4331960c15ee776ee41/numpy-2.2.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:41c5a21f4a04fa86436124d388f6ed60a9343a6f767fced1a8a71c3fbca038ff", size = 20875348, upload-time = "2025-05-17T21:34:39.648Z" },
|
| 301 |
+
{ url = "https://files.pythonhosted.org/packages/66/ee/560deadcdde6c2f90200450d5938f63a34b37e27ebff162810f716f6a230/numpy-2.2.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:de749064336d37e340f640b05f24e9e3dd678c57318c7289d222a8a2f543e90c", size = 14119362, upload-time = "2025-05-17T21:35:01.241Z" },
|
| 302 |
+
{ url = "https://files.pythonhosted.org/packages/3c/65/4baa99f1c53b30adf0acd9a5519078871ddde8d2339dc5a7fde80d9d87da/numpy-2.2.6-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:894b3a42502226a1cac872f840030665f33326fc3dac8e57c607905773cdcde3", size = 5084103, upload-time = "2025-05-17T21:35:10.622Z" },
|
| 303 |
+
{ url = "https://files.pythonhosted.org/packages/cc/89/e5a34c071a0570cc40c9a54eb472d113eea6d002e9ae12bb3a8407fb912e/numpy-2.2.6-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:71594f7c51a18e728451bb50cc60a3ce4e6538822731b2933209a1f3614e9282", size = 6625382, upload-time = "2025-05-17T21:35:21.414Z" },
|
| 304 |
+
{ url = "https://files.pythonhosted.org/packages/f8/35/8c80729f1ff76b3921d5c9487c7ac3de9b2a103b1cd05e905b3090513510/numpy-2.2.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2618db89be1b4e05f7a1a847a9c1c0abd63e63a1607d892dd54668dd92faf87", size = 14018462, upload-time = "2025-05-17T21:35:42.174Z" },
|
| 305 |
+
{ url = "https://files.pythonhosted.org/packages/8c/3d/1e1db36cfd41f895d266b103df00ca5b3cbe965184df824dec5c08c6b803/numpy-2.2.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd83c01228a688733f1ded5201c678f0c53ecc1006ffbc404db9f7a899ac6249", size = 16527618, upload-time = "2025-05-17T21:36:06.711Z" },
|
| 306 |
+
{ url = "https://files.pythonhosted.org/packages/61/c6/03ed30992602c85aa3cd95b9070a514f8b3c33e31124694438d88809ae36/numpy-2.2.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:37c0ca431f82cd5fa716eca9506aefcabc247fb27ba69c5062a6d3ade8cf8f49", size = 15505511, upload-time = "2025-05-17T21:36:29.965Z" },
|
| 307 |
+
{ url = "https://files.pythonhosted.org/packages/b7/25/5761d832a81df431e260719ec45de696414266613c9ee268394dd5ad8236/numpy-2.2.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fe27749d33bb772c80dcd84ae7e8df2adc920ae8297400dabec45f0dedb3f6de", size = 18313783, upload-time = "2025-05-17T21:36:56.883Z" },
|
| 308 |
+
{ url = "https://files.pythonhosted.org/packages/57/0a/72d5a3527c5ebffcd47bde9162c39fae1f90138c961e5296491ce778e682/numpy-2.2.6-cp312-cp312-win32.whl", hash = "sha256:4eeaae00d789f66c7a25ac5f34b71a7035bb474e679f410e5e1a94deb24cf2d4", size = 6246506, upload-time = "2025-05-17T21:37:07.368Z" },
|
| 309 |
+
{ url = "https://files.pythonhosted.org/packages/36/fa/8c9210162ca1b88529ab76b41ba02d433fd54fecaf6feb70ef9f124683f1/numpy-2.2.6-cp312-cp312-win_amd64.whl", hash = "sha256:c1f9540be57940698ed329904db803cf7a402f3fc200bfe599334c9bd84a40b2", size = 12614190, upload-time = "2025-05-17T21:37:26.213Z" },
|
| 310 |
+
]
|
| 311 |
+
|
| 312 |
+
[[package]]
|
| 313 |
+
name = "nvidia-cublas-cu12"
|
| 314 |
+
version = "12.6.4.1"
|
| 315 |
+
source = { registry = "https://pypi.org/simple" }
|
| 316 |
+
wheels = [
|
| 317 |
+
{ url = "https://files.pythonhosted.org/packages/af/eb/ff4b8c503fa1f1796679dce648854d58751982426e4e4b37d6fce49d259c/nvidia_cublas_cu12-12.6.4.1-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:08ed2686e9875d01b58e3cb379c6896df8e76c75e0d4a7f7dace3d7b6d9ef8eb", size = 393138322, upload-time = "2024-11-20T17:40:25.65Z" },
|
| 318 |
+
]
|
| 319 |
+
|
| 320 |
+
[[package]]
|
| 321 |
+
name = "nvidia-cuda-cupti-cu12"
|
| 322 |
+
version = "12.6.80"
|
| 323 |
+
source = { registry = "https://pypi.org/simple" }
|
| 324 |
+
wheels = [
|
| 325 |
+
{ url = "https://files.pythonhosted.org/packages/49/60/7b6497946d74bcf1de852a21824d63baad12cd417db4195fc1bfe59db953/nvidia_cuda_cupti_cu12-12.6.80-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:6768bad6cab4f19e8292125e5f1ac8aa7d1718704012a0e3272a6f61c4bce132", size = 8917980, upload-time = "2024-11-20T17:36:04.019Z" },
|
| 326 |
+
{ url = "https://files.pythonhosted.org/packages/a5/24/120ee57b218d9952c379d1e026c4479c9ece9997a4fb46303611ee48f038/nvidia_cuda_cupti_cu12-12.6.80-py3-none-manylinux2014_x86_64.whl", hash = "sha256:a3eff6cdfcc6a4c35db968a06fcadb061cbc7d6dde548609a941ff8701b98b73", size = 8917972, upload-time = "2024-10-01T16:58:06.036Z" },
|
| 327 |
+
]
|
| 328 |
+
|
| 329 |
+
[[package]]
|
| 330 |
+
name = "nvidia-cuda-nvrtc-cu12"
|
| 331 |
+
version = "12.6.77"
|
| 332 |
+
source = { registry = "https://pypi.org/simple" }
|
| 333 |
+
wheels = [
|
| 334 |
+
{ url = "https://files.pythonhosted.org/packages/75/2e/46030320b5a80661e88039f59060d1790298b4718944a65a7f2aeda3d9e9/nvidia_cuda_nvrtc_cu12-12.6.77-py3-none-manylinux2014_x86_64.whl", hash = "sha256:35b0cc6ee3a9636d5409133e79273ce1f3fd087abb0532d2d2e8fff1fe9efc53", size = 23650380, upload-time = "2024-10-01T17:00:14.643Z" },
|
| 335 |
+
]
|
| 336 |
+
|
| 337 |
+
[[package]]
|
| 338 |
+
name = "nvidia-cuda-runtime-cu12"
|
| 339 |
+
version = "12.6.77"
|
| 340 |
+
source = { registry = "https://pypi.org/simple" }
|
| 341 |
+
wheels = [
|
| 342 |
+
{ url = "https://files.pythonhosted.org/packages/e1/23/e717c5ac26d26cf39a27fbc076240fad2e3b817e5889d671b67f4f9f49c5/nvidia_cuda_runtime_cu12-12.6.77-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ba3b56a4f896141e25e19ab287cd71e52a6a0f4b29d0d31609f60e3b4d5219b7", size = 897690, upload-time = "2024-11-20T17:35:30.697Z" },
|
| 343 |
+
{ url = "https://files.pythonhosted.org/packages/f0/62/65c05e161eeddbafeca24dc461f47de550d9fa8a7e04eb213e32b55cfd99/nvidia_cuda_runtime_cu12-12.6.77-py3-none-manylinux2014_x86_64.whl", hash = "sha256:a84d15d5e1da416dd4774cb42edf5e954a3e60cc945698dc1d5be02321c44dc8", size = 897678, upload-time = "2024-10-01T16:57:33.821Z" },
|
| 344 |
+
]
|
| 345 |
+
|
| 346 |
+
[[package]]
|
| 347 |
+
name = "nvidia-cudnn-cu12"
|
| 348 |
+
version = "9.5.1.17"
|
| 349 |
+
source = { registry = "https://pypi.org/simple" }
|
| 350 |
+
dependencies = [
|
| 351 |
+
{ name = "nvidia-cublas-cu12" },
|
| 352 |
+
]
|
| 353 |
+
wheels = [
|
| 354 |
+
{ url = "https://files.pythonhosted.org/packages/2a/78/4535c9c7f859a64781e43c969a3a7e84c54634e319a996d43ef32ce46f83/nvidia_cudnn_cu12-9.5.1.17-py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:30ac3869f6db17d170e0e556dd6cc5eee02647abc31ca856634d5a40f82c15b2", size = 570988386, upload-time = "2024-10-25T19:54:26.39Z" },
|
| 355 |
+
]
|
| 356 |
+
|
| 357 |
+
[[package]]
|
| 358 |
+
name = "nvidia-cufft-cu12"
|
| 359 |
+
version = "11.3.0.4"
|
| 360 |
+
source = { registry = "https://pypi.org/simple" }
|
| 361 |
+
dependencies = [
|
| 362 |
+
{ name = "nvidia-nvjitlink-cu12" },
|
| 363 |
+
]
|
| 364 |
+
wheels = [
|
| 365 |
+
{ url = "https://files.pythonhosted.org/packages/8f/16/73727675941ab8e6ffd86ca3a4b7b47065edcca7a997920b831f8147c99d/nvidia_cufft_cu12-11.3.0.4-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ccba62eb9cef5559abd5e0d54ceed2d9934030f51163df018532142a8ec533e5", size = 200221632, upload-time = "2024-11-20T17:41:32.357Z" },
|
| 366 |
+
{ url = "https://files.pythonhosted.org/packages/60/de/99ec247a07ea40c969d904fc14f3a356b3e2a704121675b75c366b694ee1/nvidia_cufft_cu12-11.3.0.4-py3-none-manylinux2014_x86_64.whl", hash = "sha256:768160ac89f6f7b459bee747e8d175dbf53619cfe74b2a5636264163138013ca", size = 200221622, upload-time = "2024-10-01T17:03:58.79Z" },
|
| 367 |
+
]
|
| 368 |
+
|
| 369 |
+
[[package]]
|
| 370 |
+
name = "nvidia-cufile-cu12"
|
| 371 |
+
version = "1.11.1.6"
|
| 372 |
+
source = { registry = "https://pypi.org/simple" }
|
| 373 |
+
wheels = [
|
| 374 |
+
{ url = "https://files.pythonhosted.org/packages/b2/66/cc9876340ac68ae71b15c743ddb13f8b30d5244af344ec8322b449e35426/nvidia_cufile_cu12-1.11.1.6-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:cc23469d1c7e52ce6c1d55253273d32c565dd22068647f3aa59b3c6b005bf159", size = 1142103, upload-time = "2024-11-20T17:42:11.83Z" },
|
| 375 |
+
]
|
| 376 |
+
|
| 377 |
+
[[package]]
|
| 378 |
+
name = "nvidia-curand-cu12"
|
| 379 |
+
version = "10.3.7.77"
|
| 380 |
+
source = { registry = "https://pypi.org/simple" }
|
| 381 |
+
wheels = [
|
| 382 |
+
{ url = "https://files.pythonhosted.org/packages/73/1b/44a01c4e70933637c93e6e1a8063d1e998b50213a6b65ac5a9169c47e98e/nvidia_curand_cu12-10.3.7.77-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a42cd1344297f70b9e39a1e4f467a4e1c10f1da54ff7a85c12197f6c652c8bdf", size = 56279010, upload-time = "2024-11-20T17:42:50.958Z" },
|
| 383 |
+
{ url = "https://files.pythonhosted.org/packages/4a/aa/2c7ff0b5ee02eaef890c0ce7d4f74bc30901871c5e45dee1ae6d0083cd80/nvidia_curand_cu12-10.3.7.77-py3-none-manylinux2014_x86_64.whl", hash = "sha256:99f1a32f1ac2bd134897fc7a203f779303261268a65762a623bf30cc9fe79117", size = 56279000, upload-time = "2024-10-01T17:04:45.274Z" },
|
| 384 |
+
]
|
| 385 |
+
|
| 386 |
+
[[package]]
|
| 387 |
+
name = "nvidia-cusolver-cu12"
|
| 388 |
+
version = "11.7.1.2"
|
| 389 |
+
source = { registry = "https://pypi.org/simple" }
|
| 390 |
+
dependencies = [
|
| 391 |
+
{ name = "nvidia-cublas-cu12" },
|
| 392 |
+
{ name = "nvidia-cusparse-cu12" },
|
| 393 |
+
{ name = "nvidia-nvjitlink-cu12" },
|
| 394 |
+
]
|
| 395 |
+
wheels = [
|
| 396 |
+
{ url = "https://files.pythonhosted.org/packages/f0/6e/c2cf12c9ff8b872e92b4a5740701e51ff17689c4d726fca91875b07f655d/nvidia_cusolver_cu12-11.7.1.2-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e9e49843a7707e42022babb9bcfa33c29857a93b88020c4e4434656a655b698c", size = 158229790, upload-time = "2024-11-20T17:43:43.211Z" },
|
| 397 |
+
{ url = "https://files.pythonhosted.org/packages/9f/81/baba53585da791d043c10084cf9553e074548408e04ae884cfe9193bd484/nvidia_cusolver_cu12-11.7.1.2-py3-none-manylinux2014_x86_64.whl", hash = "sha256:6cf28f17f64107a0c4d7802be5ff5537b2130bfc112f25d5a30df227058ca0e6", size = 158229780, upload-time = "2024-10-01T17:05:39.875Z" },
|
| 398 |
+
]
|
| 399 |
+
|
| 400 |
+
[[package]]
|
| 401 |
+
name = "nvidia-cusparse-cu12"
|
| 402 |
+
version = "12.5.4.2"
|
| 403 |
+
source = { registry = "https://pypi.org/simple" }
|
| 404 |
+
dependencies = [
|
| 405 |
+
{ name = "nvidia-nvjitlink-cu12" },
|
| 406 |
+
]
|
| 407 |
+
wheels = [
|
| 408 |
+
{ url = "https://files.pythonhosted.org/packages/06/1e/b8b7c2f4099a37b96af5c9bb158632ea9e5d9d27d7391d7eb8fc45236674/nvidia_cusparse_cu12-12.5.4.2-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7556d9eca156e18184b94947ade0fba5bb47d69cec46bf8660fd2c71a4b48b73", size = 216561367, upload-time = "2024-11-20T17:44:54.824Z" },
|
| 409 |
+
{ url = "https://files.pythonhosted.org/packages/43/ac/64c4316ba163e8217a99680c7605f779accffc6a4bcd0c778c12948d3707/nvidia_cusparse_cu12-12.5.4.2-py3-none-manylinux2014_x86_64.whl", hash = "sha256:23749a6571191a215cb74d1cdbff4a86e7b19f1200c071b3fcf844a5bea23a2f", size = 216561357, upload-time = "2024-10-01T17:06:29.861Z" },
|
| 410 |
+
]
|
| 411 |
+
|
| 412 |
+
[[package]]
|
| 413 |
+
name = "nvidia-cusparselt-cu12"
|
| 414 |
+
version = "0.6.3"
|
| 415 |
+
source = { registry = "https://pypi.org/simple" }
|
| 416 |
+
wheels = [
|
| 417 |
+
{ url = "https://files.pythonhosted.org/packages/3b/9a/72ef35b399b0e183bc2e8f6f558036922d453c4d8237dab26c666a04244b/nvidia_cusparselt_cu12-0.6.3-py3-none-manylinux2014_x86_64.whl", hash = "sha256:e5c8a26c36445dd2e6812f1177978a24e2d37cacce7e090f297a688d1ec44f46", size = 156785796, upload-time = "2024-10-15T21:29:17.709Z" },
|
| 418 |
+
]
|
| 419 |
+
|
| 420 |
+
[[package]]
|
| 421 |
+
name = "nvidia-nccl-cu12"
|
| 422 |
+
version = "2.26.2"
|
| 423 |
+
source = { registry = "https://pypi.org/simple" }
|
| 424 |
+
wheels = [
|
| 425 |
+
{ url = "https://files.pythonhosted.org/packages/67/ca/f42388aed0fddd64ade7493dbba36e1f534d4e6fdbdd355c6a90030ae028/nvidia_nccl_cu12-2.26.2-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:694cf3879a206553cc9d7dbda76b13efaf610fdb70a50cba303de1b0d1530ac6", size = 201319755, upload-time = "2025-03-13T00:29:55.296Z" },
|
| 426 |
+
]
|
| 427 |
+
|
| 428 |
+
[[package]]
|
| 429 |
+
name = "nvidia-nvjitlink-cu12"
|
| 430 |
+
version = "12.6.85"
|
| 431 |
+
source = { registry = "https://pypi.org/simple" }
|
| 432 |
+
wheels = [
|
| 433 |
+
{ url = "https://files.pythonhosted.org/packages/9d/d7/c5383e47c7e9bf1c99d5bd2a8c935af2b6d705ad831a7ec5c97db4d82f4f/nvidia_nvjitlink_cu12-12.6.85-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:eedc36df9e88b682efe4309aa16b5b4e78c2407eac59e8c10a6a47535164369a", size = 19744971, upload-time = "2024-11-20T17:46:53.366Z" },
|
| 434 |
+
]
|
| 435 |
+
|
| 436 |
+
[[package]]
|
| 437 |
+
name = "nvidia-nvtx-cu12"
|
| 438 |
+
version = "12.6.77"
|
| 439 |
+
source = { registry = "https://pypi.org/simple" }
|
| 440 |
+
wheels = [
|
| 441 |
+
{ url = "https://files.pythonhosted.org/packages/56/9a/fff8376f8e3d084cd1530e1ef7b879bb7d6d265620c95c1b322725c694f4/nvidia_nvtx_cu12-12.6.77-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b90bed3df379fa79afbd21be8e04a0314336b8ae16768b58f2d34cb1d04cd7d2", size = 89276, upload-time = "2024-11-20T17:38:27.621Z" },
|
| 442 |
+
{ url = "https://files.pythonhosted.org/packages/9e/4e/0d0c945463719429b7bd21dece907ad0bde437a2ff12b9b12fee94722ab0/nvidia_nvtx_cu12-12.6.77-py3-none-manylinux2014_x86_64.whl", hash = "sha256:6574241a3ec5fdc9334353ab8c479fe75841dbe8f4532a8fc97ce63503330ba1", size = 89265, upload-time = "2024-10-01T17:00:38.172Z" },
|
| 443 |
+
]
|
| 444 |
+
|
| 445 |
+
[[package]]
|
| 446 |
+
name = "packaging"
|
| 447 |
+
version = "26.3"
|
| 448 |
+
source = { registry = "https://pypi.org/simple" }
|
| 449 |
+
sdist = { url = "https://files.pythonhosted.org/packages/7d/fa/3944b40b07da9ce895c0e6303a5ab7d53da063554f534556b134a54d6093/packaging-26.3.tar.gz", hash = "sha256:94edc256424af38762eb31306eed28beb9f0efc50a8837492c9d6fd6004aed79", size = 313412, upload-time = "2026-08-04T18:15:28.737Z" }
|
| 450 |
+
wheels = [
|
| 451 |
+
{ url = "https://files.pythonhosted.org/packages/63/34/ba1c580383c9eada3711951fef0795c80b829a078d72188184bcab9dd527/packaging-26.3-py3-none-any.whl", hash = "sha256:d7193f7c8e4e93f444fde0262bf90af30e16fa0ad0ad44cb553c87339b23cd1c", size = 129956, upload-time = "2026-08-04T18:15:27.159Z" },
|
| 452 |
+
]
|
| 453 |
+
|
| 454 |
+
[[package]]
|
| 455 |
+
name = "peft"
|
| 456 |
+
version = "0.20.0"
|
| 457 |
+
source = { registry = "https://pypi.org/simple" }
|
| 458 |
+
dependencies = [
|
| 459 |
+
{ name = "accelerate" },
|
| 460 |
+
{ name = "huggingface-hub" },
|
| 461 |
+
{ name = "numpy" },
|
| 462 |
+
{ name = "packaging" },
|
| 463 |
+
{ name = "psutil" },
|
| 464 |
+
{ name = "pyyaml" },
|
| 465 |
+
{ name = "safetensors" },
|
| 466 |
+
{ name = "torch" },
|
| 467 |
+
{ name = "tqdm" },
|
| 468 |
+
{ name = "transformers" },
|
| 469 |
+
]
|
| 470 |
+
sdist = { url = "https://files.pythonhosted.org/packages/b4/08/02541a2c29be7c78698f73d438bc0e733b214f3f35ec5db79fca8da8fc61/peft-0.20.0.tar.gz", hash = "sha256:4769c8093a4ca145fd6fb3fd4dd50449675f5fe46434ad1e98b285a132d4b1d0", size = 880503, upload-time = "2026-07-28T13:46:01.85Z" }
|
| 471 |
+
wheels = [
|
| 472 |
+
{ url = "https://files.pythonhosted.org/packages/28/79/13bcabb8048126422d5c4b880575d40886c726f354db88cfeed4325525bb/peft-0.20.0-py3-none-any.whl", hash = "sha256:0fbba16ffebfad3de96e06f2da6860fd860292324b85b6141909fa1e26ea9233", size = 775777, upload-time = "2026-07-28T13:45:59.809Z" },
|
| 473 |
+
]
|
| 474 |
+
|
| 475 |
+
[[package]]
|
| 476 |
+
name = "pluggy"
|
| 477 |
+
version = "1.6.0"
|
| 478 |
+
source = { registry = "https://pypi.org/simple" }
|
| 479 |
+
sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412, upload-time = "2025-05-15T12:30:07.975Z" }
|
| 480 |
+
wheels = [
|
| 481 |
+
{ url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" },
|
| 482 |
+
]
|
| 483 |
+
|
| 484 |
+
[[package]]
|
| 485 |
+
name = "protobuf"
|
| 486 |
+
version = "7.36.2"
|
| 487 |
+
source = { registry = "https://pypi.org/simple" }
|
| 488 |
+
sdist = { url = "https://files.pythonhosted.org/packages/d9/89/5b8517baa72f84a67b8a307ba953c91057af618bf40bf676f3c03551f8f0/protobuf-7.36.2.tar.gz", hash = "sha256:497d0463ff3316681da6c0b9e8d06cb465d61abce00b613ab42226175644d1bb", size = 512737, upload-time = "2026-09-17T20:07:59.326Z" }
|
| 489 |
+
wheels = [
|
| 490 |
+
{ url = "https://files.pythonhosted.org/packages/32/72/98342feb672507c8f3a69e34b4fa8961f608edba5c1a48a6f47156d92cb5/protobuf-7.36.2-cp310-abi3-macosx_10_9_universal2.whl", hash = "sha256:cbc70b17ee27e28894c7fee8bb04be1abead49e936bc70eb60052531eee2079e", size = 456039, upload-time = "2026-09-17T20:07:51.542Z" },
|
| 491 |
+
{ url = "https://files.pythonhosted.org/packages/b6/ea/91fdf7c2b8bbd49cde056f00a9df6773532987e1c00fe2830b895af95c7e/protobuf-7.36.2-cp310-abi3-manylinux2014_aarch64.whl", hash = "sha256:e11e1f0180583a2af89db6a2ecd9e8dc40aa6d2988ca175bfd0e6d12ea72d74e", size = 344219, upload-time = "2026-09-17T20:07:52.914Z" },
|
| 492 |
+
{ url = "https://files.pythonhosted.org/packages/17/ab/5fd5f8ece73fad885c5a09aa849b32d70472f954ba3a92d3bb5974ea953b/protobuf-7.36.2-cp310-abi3-manylinux2014_s390x.whl", hash = "sha256:f4fee11ec330d238b34a05c9b675f693c20415d1c5bd7d5320cc2f8a798eb9cf", size = 357223, upload-time = "2026-09-17T20:07:53.985Z" },
|
| 493 |
+
{ url = "https://files.pythonhosted.org/packages/db/f3/3996583dd2906297a637af12114deddf7658af6e683fedb83be061983fb5/protobuf-7.36.2-cp310-abi3-manylinux2014_x86_64.whl", hash = "sha256:89f23aa53c24553a2416fd4fd1ec06f74fa42b14b546d8883128813f775bbfd2", size = 343223, upload-time = "2026-09-17T20:07:54.931Z" },
|
| 494 |
+
{ url = "https://files.pythonhosted.org/packages/fc/1b/dcc64f358fcb51811b58ae40b3d28f820725f116d86487cc20bd4b130701/protobuf-7.36.2-cp310-abi3-win32.whl", hash = "sha256:912c1221170e16c08d1f086762f563dd61ff83c18b5fa6652952dfaded66f728", size = 442998, upload-time = "2026-09-17T20:07:55.826Z" },
|
| 495 |
+
{ url = "https://files.pythonhosted.org/packages/8a/55/b77bda4e5e5f5971fb51b07663694690e9afdb9402136c16a522bd621cad/protobuf-7.36.2-cp310-abi3-win_amd64.whl", hash = "sha256:a300819d441e078a5608c0d3c709796bb548136058fda017ae51d425b44fd353", size = 456514, upload-time = "2026-09-17T20:07:57.188Z" },
|
| 496 |
+
{ url = "https://files.pythonhosted.org/packages/e4/04/d52c7016b04b6c5108f26691f9d33ec82a9b65d041f1a9c771137693d618/protobuf-7.36.2-py3-none-any.whl", hash = "sha256:bdb3a345d48db958e6ce1f18e508beb0cc981d64f24088427549c866cd039f1e", size = 179806, upload-time = "2026-09-17T20:07:58.211Z" },
|
| 497 |
+
]
|
| 498 |
+
|
| 499 |
+
[[package]]
|
| 500 |
+
name = "psutil"
|
| 501 |
+
version = "7.2.2"
|
| 502 |
+
source = { registry = "https://pypi.org/simple" }
|
| 503 |
+
sdist = { url = "https://files.pythonhosted.org/packages/aa/c6/d1ddf4abb55e93cebc4f2ed8b5d6dbad109ecb8d63748dd2b20ab5e57ebe/psutil-7.2.2.tar.gz", hash = "sha256:0746f5f8d406af344fd547f1c8daa5f5c33dbc293bb8d6a16d80b4bb88f59372", size = 493740, upload-time = "2026-01-28T18:14:54.428Z" }
|
| 504 |
+
wheels = [
|
| 505 |
+
{ url = "https://files.pythonhosted.org/packages/e7/36/5ee6e05c9bd427237b11b3937ad82bb8ad2752d72c6969314590dd0c2f6e/psutil-7.2.2-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ed0cace939114f62738d808fdcecd4c869222507e266e574799e9c0faa17d486", size = 129090, upload-time = "2026-01-28T18:15:22.168Z" },
|
| 506 |
+
{ url = "https://files.pythonhosted.org/packages/80/c4/f5af4c1ca8c1eeb2e92ccca14ce8effdeec651d5ab6053c589b074eda6e1/psutil-7.2.2-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:1a7b04c10f32cc88ab39cbf606e117fd74721c831c98a27dc04578deb0c16979", size = 129859, upload-time = "2026-01-28T18:15:23.795Z" },
|
| 507 |
+
{ url = "https://files.pythonhosted.org/packages/b5/70/5d8df3b09e25bce090399cf48e452d25c935ab72dad19406c77f4e828045/psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9", size = 155560, upload-time = "2026-01-28T18:15:25.976Z" },
|
| 508 |
+
{ url = "https://files.pythonhosted.org/packages/63/65/37648c0c158dc222aba51c089eb3bdfa238e621674dc42d48706e639204f/psutil-7.2.2-cp36-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b0726cecd84f9474419d67252add4ac0cd9811b04d61123054b9fb6f57df6e9e", size = 156997, upload-time = "2026-01-28T18:15:27.794Z" },
|
| 509 |
+
{ url = "https://files.pythonhosted.org/packages/8e/13/125093eadae863ce03c6ffdbae9929430d116a246ef69866dad94da3bfbc/psutil-7.2.2-cp36-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:fd04ef36b4a6d599bbdb225dd1d3f51e00105f6d48a28f006da7f9822f2606d8", size = 148972, upload-time = "2026-01-28T18:15:29.342Z" },
|
| 510 |
+
{ url = "https://files.pythonhosted.org/packages/04/78/0acd37ca84ce3ddffaa92ef0f571e073faa6d8ff1f0559ab1272188ea2be/psutil-7.2.2-cp36-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b58fabe35e80b264a4e3bb23e6b96f9e45a3df7fb7eed419ac0e5947c61e47cc", size = 148266, upload-time = "2026-01-28T18:15:31.597Z" },
|
| 511 |
+
{ url = "https://files.pythonhosted.org/packages/b4/90/e2159492b5426be0c1fef7acba807a03511f97c5f86b3caeda6ad92351a7/psutil-7.2.2-cp37-abi3-win_amd64.whl", hash = "sha256:eb7e81434c8d223ec4a219b5fc1c47d0417b12be7ea866e24fb5ad6e84b3d988", size = 137737, upload-time = "2026-01-28T18:15:33.849Z" },
|
| 512 |
+
{ url = "https://files.pythonhosted.org/packages/8c/c7/7bb2e321574b10df20cbde462a94e2b71d05f9bbda251ef27d104668306a/psutil-7.2.2-cp37-abi3-win_arm64.whl", hash = "sha256:8c233660f575a5a89e6d4cb65d9f938126312bca76d8fe087b947b3a1aaac9ee", size = 134617, upload-time = "2026-01-28T18:15:36.514Z" },
|
| 513 |
+
]
|
| 514 |
+
|
| 515 |
+
[[package]]
|
| 516 |
+
name = "pyaml"
|
| 517 |
+
version = "26.7.0"
|
| 518 |
+
source = { registry = "https://pypi.org/simple" }
|
| 519 |
+
dependencies = [
|
| 520 |
+
{ name = "pyyaml" },
|
| 521 |
+
]
|
| 522 |
+
sdist = { url = "https://files.pythonhosted.org/packages/15/6a/acfdf17de0d6947b419da8696e02b781b18de2cf49e0472298b50e1f0711/pyaml-26.7.0.tar.gz", hash = "sha256:11cda3a796efc6dbce0d56836be56cfd26289dad07bcd78e9904086729929c93", size = 30669, upload-time = "2026-07-04T00:34:38.532Z" }
|
| 523 |
+
wheels = [
|
| 524 |
+
{ url = "https://files.pythonhosted.org/packages/a6/26/3f05f9e3692853dff663913d5d62fb8df3f5640c8d70b06588c0b51ed953/pyaml-26.7.0-py3-none-any.whl", hash = "sha256:cfa382780c43ae660669b87d394d550a41856ef175f5749f51f753e12d7077ac", size = 27226, upload-time = "2026-07-04T00:34:37.198Z" },
|
| 525 |
+
]
|
| 526 |
+
|
| 527 |
+
[[package]]
|
| 528 |
+
name = "pygments"
|
| 529 |
+
version = "2.21.0"
|
| 530 |
+
source = { registry = "https://pypi.org/simple" }
|
| 531 |
+
sdist = { url = "https://files.pythonhosted.org/packages/49/2e/ced460408999b33da6b31b0021b0f37d329e202d4169aeb164493778f25b/pygments-2.21.0.tar.gz", hash = "sha256:610ca751c9bc2492b38eb9a38a7fbc93edbbb2d7182edaf34e66ae493dee5c8c", size = 5005329, upload-time = "2026-08-17T08:02:48.824Z" }
|
| 532 |
+
wheels = [
|
| 533 |
+
{ url = "https://files.pythonhosted.org/packages/71/46/17f022dd3e953bf20a04a028a21ec746d942f8d2af30fa0f124fa0e6a684/pygments-2.21.0-py3-none-any.whl", hash = "sha256:2363c69b61c4a97c838da3b130dcd6468f4848992b21a82f2a63ec34377137d9", size = 1250147, upload-time = "2026-08-17T08:02:44.912Z" },
|
| 534 |
+
]
|
| 535 |
+
|
| 536 |
+
[[package]]
|
| 537 |
+
name = "pytest"
|
| 538 |
+
version = "9.1.1"
|
| 539 |
+
source = { registry = "https://pypi.org/simple" }
|
| 540 |
+
dependencies = [
|
| 541 |
+
{ name = "colorama", marker = "sys_platform == 'win32'" },
|
| 542 |
+
{ name = "iniconfig" },
|
| 543 |
+
{ name = "packaging" },
|
| 544 |
+
{ name = "pluggy" },
|
| 545 |
+
{ name = "pygments" },
|
| 546 |
+
]
|
| 547 |
+
sdist = { url = "https://files.pythonhosted.org/packages/e4/47/b9efed96c114afcfa3c9d3fe98a76a1d14c74a9e266d397cf6eb64be5e01/pytest-9.1.1.tar.gz", hash = "sha256:1088fbde8f2b49d95a549a195707afa7a76a3ce9bcadc26b6d71f0ffda5fe313", size = 1636369, upload-time = "2026-06-19T10:58:32.857Z" }
|
| 548 |
+
wheels = [
|
| 549 |
+
{ url = "https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl", hash = "sha256:37a86b45efb9a47a61a36449063e8e18d0cab3161329fc099eb21783169c4f0c", size = 386536, upload-time = "2026-06-19T10:58:31.347Z" },
|
| 550 |
+
]
|
| 551 |
+
|
| 552 |
+
[[package]]
|
| 553 |
+
name = "pyyaml"
|
| 554 |
+
version = "6.0.3"
|
| 555 |
+
source = { registry = "https://pypi.org/simple" }
|
| 556 |
+
sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" }
|
| 557 |
+
wheels = [
|
| 558 |
+
{ url = "https://files.pythonhosted.org/packages/d1/33/422b98d2195232ca1826284a76852ad5a86fe23e31b009c9886b2d0fb8b2/pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196", size = 182063, upload-time = "2025-09-25T21:32:11.445Z" },
|
| 559 |
+
{ url = "https://files.pythonhosted.org/packages/89/a0/6cf41a19a1f2f3feab0e9c0b74134aa2ce6849093d5517a0c550fe37a648/pyyaml-6.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0", size = 173973, upload-time = "2025-09-25T21:32:12.492Z" },
|
| 560 |
+
{ url = "https://files.pythonhosted.org/packages/ed/23/7a778b6bd0b9a8039df8b1b1d80e2e2ad78aa04171592c8a5c43a56a6af4/pyyaml-6.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28", size = 775116, upload-time = "2025-09-25T21:32:13.652Z" },
|
| 561 |
+
{ url = "https://files.pythonhosted.org/packages/65/30/d7353c338e12baef4ecc1b09e877c1970bd3382789c159b4f89d6a70dc09/pyyaml-6.0.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c", size = 844011, upload-time = "2025-09-25T21:32:15.21Z" },
|
| 562 |
+
{ url = "https://files.pythonhosted.org/packages/8b/9d/b3589d3877982d4f2329302ef98a8026e7f4443c765c46cfecc8858c6b4b/pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc", size = 807870, upload-time = "2025-09-25T21:32:16.431Z" },
|
| 563 |
+
{ url = "https://files.pythonhosted.org/packages/05/c0/b3be26a015601b822b97d9149ff8cb5ead58c66f981e04fedf4e762f4bd4/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e", size = 761089, upload-time = "2025-09-25T21:32:17.56Z" },
|
| 564 |
+
{ url = "https://files.pythonhosted.org/packages/be/8e/98435a21d1d4b46590d5459a22d88128103f8da4c2d4cb8f14f2a96504e1/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea", size = 790181, upload-time = "2025-09-25T21:32:18.834Z" },
|
| 565 |
+
{ url = "https://files.pythonhosted.org/packages/74/93/7baea19427dcfbe1e5a372d81473250b379f04b1bd3c4c5ff825e2327202/pyyaml-6.0.3-cp312-cp312-win32.whl", hash = "sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5", size = 137658, upload-time = "2025-09-25T21:32:20.209Z" },
|
| 566 |
+
{ url = "https://files.pythonhosted.org/packages/86/bf/899e81e4cce32febab4fb42bb97dcdf66bc135272882d1987881a4b519e9/pyyaml-6.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b", size = 154003, upload-time = "2025-09-25T21:32:21.167Z" },
|
| 567 |
+
{ url = "https://files.pythonhosted.org/packages/1a/08/67bd04656199bbb51dbed1439b7f27601dfb576fb864099c7ef0c3e55531/pyyaml-6.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd", size = 140344, upload-time = "2025-09-25T21:32:22.617Z" },
|
| 568 |
+
]
|
| 569 |
+
|
| 570 |
+
[[package]]
|
| 571 |
+
name = "regex"
|
| 572 |
+
version = "2026.9.10"
|
| 573 |
+
source = { registry = "https://pypi.org/simple" }
|
| 574 |
+
sdist = { url = "https://files.pythonhosted.org/packages/b9/5c/f403115361de25809e8f785686ec7096e30fef73be9ae35aa51da4e80abb/regex-2026.9.10.tar.gz", hash = "sha256:1e321e2c84f0e52c457f5ea5944f796d6e8e09cb99738ea98dcc1bfe402a128d", size = 417072, upload-time = "2026-09-09T21:00:21.521Z" }
|
| 575 |
+
wheels = [
|
| 576 |
+
{ url = "https://files.pythonhosted.org/packages/32/c8/bfbe893e90ee0148bd2860dd086f09b5d2080ca2b125f740c2e118c16982/regex-2026.9.10-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:880ac684c27176464c00c3fdc456116364f5ebc70da07aad0c2d4a7ba45e98db", size = 496609, upload-time = "2026-09-09T20:57:09.987Z" },
|
| 577 |
+
{ url = "https://files.pythonhosted.org/packages/8c/ac/56d5ae6efb759255c3b3db650a4be25f96a844ea3613b91e1e189a3b7294/regex-2026.9.10-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b9d36b03dc362aa40ffaaec9d9bd75e87763529563ec008c43b0e07782f5be7a", size = 297024, upload-time = "2026-09-09T20:57:11.35Z" },
|
| 578 |
+
{ url = "https://files.pythonhosted.org/packages/60/4b/0f2d5f6bbb791cc10f22f0ed16c487e630dde8fa8fa0bd92a2bfe21a4b20/regex-2026.9.10-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:866de9f98df0611d7b62b3a8729d3284a64c0cc6edd90bb95a533e443a4939cb", size = 291905, upload-time = "2026-09-09T20:57:13.127Z" },
|
| 579 |
+
{ url = "https://files.pythonhosted.org/packages/89/51/3fb5fe0d32f4cf0bc982286722c729a8d6f522d2fa2d5d14a702d9fc87f8/regex-2026.9.10-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4c66d54042a14a503907d81861b8a5235e6d1f03d4fbc1d8767f652eaf957ac1", size = 800055, upload-time = "2026-09-09T20:57:14.68Z" },
|
| 580 |
+
{ url = "https://files.pythonhosted.org/packages/89/46/ee507bd2f9d4420f26a594b35c551d7194b66f5d7897f63730fae6ec05c1/regex-2026.9.10-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:032da15431c890d376f53547f0a6219f4f4cd19f3e4f11bdc321453b5bd207e4", size = 871133, upload-time = "2026-09-09T20:57:16.674Z" },
|
| 581 |
+
{ url = "https://files.pythonhosted.org/packages/d1/75/cbaa90689684f91b1bc017e7f8c6d9425c6bd299108db02482dc51376d8a/regex-2026.9.10-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:23ac9a28180f274d7dd7651fa131ad5b02d343b75df4b040737f0356223895dd", size = 919627, upload-time = "2026-09-09T20:57:18.402Z" },
|
| 582 |
+
{ url = "https://files.pythonhosted.org/packages/cb/f5/dcdf5e0d898024005cfcce631e3e934d111dfbe177ca0b7f253ae8a735a2/regex-2026.9.10-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2e67f8843f0e4b931f1fa860bf3bbe4134b714c0155cc5c7c0d7ea450230aae0", size = 804587, upload-time = "2026-09-09T20:57:19.859Z" },
|
| 583 |
+
{ url = "https://files.pythonhosted.org/packages/73/70/eedfe81c29bae266a06ab4250978361a9bccd474704d88d4f4ef4506dff8/regex-2026.9.10-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bb7774924f8cd69f49cba0b3c2d679a6326f777e0e67d130ad5203e4df53f0d3", size = 777320, upload-time = "2026-09-09T20:57:21.62Z" },
|
| 584 |
+
{ url = "https://files.pythonhosted.org/packages/ca/e5/86b207077efbcd91305700488f170b7eb1e1c54721cea74175273aa3b9a4/regex-2026.9.10-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0c32480f3371b75068decaf9e5da72c224e953830dd71e36e06cf80e30ea39d8", size = 790572, upload-time = "2026-09-09T20:57:23.048Z" },
|
| 585 |
+
{ url = "https://files.pythonhosted.org/packages/b2/92/f622c3b2323f4c035b98e80221740a442127ad7993135b814f52057430db/regex-2026.9.10-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:d2d377fd1cad611b806cdd732d86b65f536c768209890cb442556548daa65a23", size = 865485, upload-time = "2026-09-09T20:57:24.658Z" },
|
| 586 |
+
{ url = "https://files.pythonhosted.org/packages/4a/be/34bd621d3d6ac906ad67e57ed56c40cd45f7d51b9c0328335e97a7cb8ecb/regex-2026.9.10-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:c014641157e9049b0603b8daa5343bd408d9b757b709aaa0f373cd3fab2d7944", size = 767925, upload-time = "2026-09-09T20:57:26.268Z" },
|
| 587 |
+
{ url = "https://files.pythonhosted.org/packages/0d/28/ddbf7cba86f2adf5038c6c16aa829636ffc6e437f81bb0cbf302899cea5e/regex-2026.9.10-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:1562aabd9d4eb09bd88a62ad97ed06800094b529ac43419e43020b9cefec79b0", size = 858800, upload-time = "2026-09-09T20:57:27.901Z" },
|
| 588 |
+
{ url = "https://files.pythonhosted.org/packages/d0/f1/e8d7656ff3d3bd32e881d32f540b4981c79dee61908d6b790a45966e6895/regex-2026.9.10-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2479171edccced52ef02b899558f88ab2c235fe05b93180fdcae1670aacd89e1", size = 791648, upload-time = "2026-09-09T20:57:29.786Z" },
|
| 589 |
+
{ url = "https://files.pythonhosted.org/packages/fc/65/eac1a79115c8475d8ff539602eb54031564d719fdea5a599c4b0a1a26d1b/regex-2026.9.10-cp312-cp312-win32.whl", hash = "sha256:239620b0e0681669367c0e218c8eb2551d9f8fe3b9fccfc8d0003377804e8348", size = 267326, upload-time = "2026-09-09T20:57:31.782Z" },
|
| 590 |
+
{ url = "https://files.pythonhosted.org/packages/ad/d4/4dcd0a05d3e97ca829165df1c39717f899d1d484dac8a6032439f2cb8d6d/regex-2026.9.10-cp312-cp312-win_amd64.whl", hash = "sha256:4db7d00c4afbfbb55b8e17b1e371da11418ea9389b030acec63c1fa4c7ad4b86", size = 277933, upload-time = "2026-09-09T20:57:33.648Z" },
|
| 591 |
+
{ url = "https://files.pythonhosted.org/packages/55/f8/22617a80dee28f2451011eae36bc26b3d78c4994ba87b5281d60acf9b6c0/regex-2026.9.10-cp312-cp312-win_arm64.whl", hash = "sha256:c25a754bb81a2edcfc3b65eda50f017d736f818112ed43e8aafd595cb00678ae", size = 277447, upload-time = "2026-09-09T20:57:35.156Z" },
|
| 592 |
+
]
|
| 593 |
+
|
| 594 |
+
[[package]]
|
| 595 |
+
name = "rich"
|
| 596 |
+
version = "15.0.0"
|
| 597 |
+
source = { registry = "https://pypi.org/simple" }
|
| 598 |
+
dependencies = [
|
| 599 |
+
{ name = "markdown-it-py" },
|
| 600 |
+
{ name = "pygments" },
|
| 601 |
+
]
|
| 602 |
+
sdist = { url = "https://files.pythonhosted.org/packages/c0/8f/0722ca900cc807c13a6a0c696dacf35430f72e0ec571c4275d2371fca3e9/rich-15.0.0.tar.gz", hash = "sha256:edd07a4824c6b40189fb7ac9bc4c52536e9780fbbfbddf6f1e2502c31b068c36", size = 230680, upload-time = "2026-04-12T08:24:00.75Z" }
|
| 603 |
+
wheels = [
|
| 604 |
+
{ url = "https://files.pythonhosted.org/packages/82/3b/64d4899d73f91ba49a8c18a8ff3f0ea8f1c1d75481760df8c68ef5235bf5/rich-15.0.0-py3-none-any.whl", hash = "sha256:33bd4ef74232fb73fe9279a257718407f169c09b78a87ad3d296f548e27de0bb", size = 310654, upload-time = "2026-04-12T08:24:02.83Z" },
|
| 605 |
+
]
|
| 606 |
+
|
| 607 |
+
[[package]]
|
| 608 |
+
name = "ruff"
|
| 609 |
+
version = "0.16.8"
|
| 610 |
+
source = { registry = "https://pypi.org/simple" }
|
| 611 |
+
sdist = { url = "https://files.pythonhosted.org/packages/ba/78/449cb84790bd5cc3823b2652ee405a4558856e5c4195aee3a16bf7b3eb5d/ruff-0.16.8.tar.gz", hash = "sha256:9247bf92b5f04d825c8639a4fe423ec2e4222acd9222e58412b0dab7e442798b", size = 4938814, upload-time = "2026-09-16T15:54:46.688Z" }
|
| 612 |
+
wheels = [
|
| 613 |
+
{ url = "https://files.pythonhosted.org/packages/ac/25/6071aabc530e9be7e2c195e8fe3f7aea2735405b6cf447212832d7811831/ruff-0.16.8-py3-none-linux_armv6l.whl", hash = "sha256:6ffbd6d87383c1edf5f6fa890f10200950240d7c1a16052a19a09d3a2307dd38", size = 10048966, upload-time = "2026-09-16T15:53:57.605Z" },
|
| 614 |
+
{ url = "https://files.pythonhosted.org/packages/54/98/07f90ecbc74dd5fb5764f11f2bc774d6a7cffef92d2ff5f5b4e9e23c754e/ruff-0.16.8-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:42ed6b878ed61e3acca92f2730a17acff39286944ea82398544696366a6f925e", size = 10165498, upload-time = "2026-09-16T15:54:01.14Z" },
|
| 615 |
+
{ url = "https://files.pythonhosted.org/packages/fe/1f/e6a712e3b47cad4a40600134105ed193cb773f618a42eb7ba323cb812cc0/ruff-0.16.8-py3-none-macosx_11_0_arm64.whl", hash = "sha256:7ea781c7f2afba8c6a505ea0fb3f994020249e0c450635f5381286fea6b46170", size = 9830004, upload-time = "2026-09-16T15:54:03.998Z" },
|
| 616 |
+
{ url = "https://files.pythonhosted.org/packages/23/f2/311a08776d75d81c7676e20b6b020ae63cbe881fcdc7a8dd64e6e18bdd93/ruff-0.16.8-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8efeae3bbe414a5efefda11a792dfb51ef90ac48d50c4830de2f644caf3e8659", size = 9986558, upload-time = "2026-09-16T15:54:06.804Z" },
|
| 617 |
+
{ url = "https://files.pythonhosted.org/packages/f3/ed/37b6cb3d3ba8c73e68ae3eb1d502383beb5aa05a582bb7bb3a922f929f54/ruff-0.16.8-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3a79b795469fef7fc6e908b218eed2eb17332afd85031db6480dc864560e69b2", size = 9877332, upload-time = "2026-09-16T15:54:09.552Z" },
|
| 618 |
+
{ url = "https://files.pythonhosted.org/packages/22/cc/40873a8f36ad084cc540d55fcca7077264d5b13b24659e9180c176fb2b08/ruff-0.16.8-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3fdc5563cdc50555e6fba39322850860e9267c1b3d12c26a74729d8604c3c812", size = 10507125, upload-time = "2026-09-16T15:54:12.152Z" },
|
| 619 |
+
{ url = "https://files.pythonhosted.org/packages/c3/e4/fc91a642b78ccbab6b9477720f3644ae7a10a9bcce69a934679cd64f62bc/ruff-0.16.8-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:34508983c70665578dab88f5223d8e6228307e1135398ca8bfc8b7e9501e282b", size = 11336694, upload-time = "2026-09-16T15:54:15.489Z" },
|
| 620 |
+
{ url = "https://files.pythonhosted.org/packages/c2/3d/bbd2a9a600a4e73dc3e7548a249c8d1671273464b55822c6fae50f602dff/ruff-0.16.8-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:644bb578569e0ffc575741232bd385dacdd6fbe123f1a729e7a225f54aa3957f", size = 10774448, upload-time = "2026-09-16T15:54:18.16Z" },
|
| 621 |
+
{ url = "https://files.pythonhosted.org/packages/1a/41/d83af9879a7b6e8bf5fe16b1da0b134049d2f5d3afac12defb0897cb84bd/ruff-0.16.8-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15e7d226246961db9235098333caa13063906d3851136b84c2900b82f5daa1df", size = 10323796, upload-time = "2026-09-16T15:54:20.743Z" },
|
| 622 |
+
{ url = "https://files.pythonhosted.org/packages/f5/2c/cefd07bfe914b84943ea769ade8d607bd22750b965d3228eefd7cebd15d0/ruff-0.16.8-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:a2bf6bc3e9ebdd4449abc6f06cf64b98051a2c61cf94d2fe9596518c881f1a1e", size = 10514115, upload-time = "2026-09-16T15:54:23.497Z" },
|
| 623 |
+
{ url = "https://files.pythonhosted.org/packages/f3/9d/76a2e26c79a23be6e6e3664c57bec9e9fc8de155cfb9e4b67ea91b64f9d7/ruff-0.16.8-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:6ca111ba0849539165e9e59d2b442542f3c1e8060ebbdea82494f1ffbccb1e1f", size = 10072582, upload-time = "2026-09-16T15:54:26.185Z" },
|
| 624 |
+
{ url = "https://files.pythonhosted.org/packages/2e/d4/f42edddb39668af1a559ceafa3823aedd65633a48dc9768e775485faa2c1/ruff-0.16.8-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:359a1e5b495448ee1e91018064382ebc86f90e8aac2fed222c7d0e4e8df85fd2", size = 9879644, upload-time = "2026-09-16T15:54:29.278Z" },
|
| 625 |
+
{ url = "https://files.pythonhosted.org/packages/f8/d4/913e3195d95e0378786c6656945c865f534a3560e29139da4882aff630d1/ruff-0.16.8-py3-none-musllinux_1_2_i686.whl", hash = "sha256:59e8f5681349474110b24d62e93cfda6593f5fa3473446ca3705200cac1a08b9", size = 10231569, upload-time = "2026-09-16T15:54:32.036Z" },
|
| 626 |
+
{ url = "https://files.pythonhosted.org/packages/2b/c4/8aa6ea0bdcedbd1bf87397e2fc4ed8406448ea5842f8660bc6e5f163039d/ruff-0.16.8-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:efa3e7a16d1baaa79957888dfdf8be9ef2e44db81cb032af06d76632ab59e773", size = 10663666, upload-time = "2026-09-16T15:54:34.838Z" },
|
| 627 |
+
{ url = "https://files.pythonhosted.org/packages/3d/02/7f10ef4700bc223c30a3fdd10631a29830c45524b810a3c7ed947af64591/ruff-0.16.8-py3-none-win32.whl", hash = "sha256:55793ba85c69921e89be061426d91a78652d6e50317c962240922747a4eb713f", size = 10093472, upload-time = "2026-09-16T15:54:37.47Z" },
|
| 628 |
+
{ url = "https://files.pythonhosted.org/packages/1e/5d/a509c07d714b6da88f2c518b4637cf6f1d46b074be8f0f1e5fb9ff5126fe/ruff-0.16.8-py3-none-win_amd64.whl", hash = "sha256:a6b85621fd3c81e31fc5f5add09c9c078b430db3595ca632efafdec9e64ebfaa", size = 10586899, upload-time = "2026-09-16T15:54:40.488Z" },
|
| 629 |
+
{ url = "https://files.pythonhosted.org/packages/fe/a0/50787329e4f20bf9dc9f6230015d46ec69c51a97ace5bc202dae4755365d/ruff-0.16.8-py3-none-win_arm64.whl", hash = "sha256:d075e820af612102ce217f07cc93e69f9490b10ec13ea85fa87bd03d996cef8a", size = 10386316, upload-time = "2026-09-16T15:54:43.332Z" },
|
| 630 |
+
]
|
| 631 |
+
|
| 632 |
+
[[package]]
|
| 633 |
+
name = "safetensors"
|
| 634 |
+
version = "0.8.0"
|
| 635 |
+
source = { registry = "https://pypi.org/simple" }
|
| 636 |
+
sdist = { url = "https://files.pythonhosted.org/packages/45/06/f955dbbb1859e3bd23c8ac6141af5106e7ad5fedec4a3a6e3d60f94b7001/safetensors-0.8.0.tar.gz", hash = "sha256:fabaf3e0f18a6618d9b36560682562157f77c2b71fcffc7b432be2baed9d753d", size = 325846, upload-time = "2026-06-09T07:52:25.563Z" }
|
| 637 |
+
wheels = [
|
| 638 |
+
{ url = "https://files.pythonhosted.org/packages/39/a0/f718cda65b05407d228f97602cf60dca269c979867aa5beb25410de26cd3/safetensors-0.8.0-cp310-abi3-macosx_10_12_x86_64.whl", hash = "sha256:c554f85858e05226d3c2828e32395e677434685d6d94594a41643361c5e837f0", size = 473568, upload-time = "2026-06-09T07:52:18.829Z" },
|
| 639 |
+
{ url = "https://files.pythonhosted.org/packages/f5/b1/fa7c600e7dceae12e9606c7578cbc9ff1e1ed55844883ee5c92205e86226/safetensors-0.8.0-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:c80201d22cbf405b80647a60ada77bba06c8fba2da2743ba1e89cdcc39a81f25", size = 484562, upload-time = "2026-06-09T07:52:17.518Z" },
|
| 640 |
+
{ url = "https://files.pythonhosted.org/packages/09/7d/65a7de0af421317bb36a067241e4235fff194eed60b961ed6d3f59a3fc60/safetensors-0.8.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7a46e5ff292c356d6991e60942ba7f79817682d3a2cef0702136448cb9c4d235", size = 502844, upload-time = "2026-06-09T07:52:07.624Z" },
|
| 641 |
+
{ url = "https://files.pythonhosted.org/packages/91/4f/3175c9d75634e0e0dda0082794193521035edd7c70a6f212bf33ca06ddf4/safetensors-0.8.0-cp310-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4124502b78f03534117c848f87a39b8f31e577b15eff423bf8bfb95f2a8c30d0", size = 511823, upload-time = "2026-06-09T07:52:09.565Z" },
|
| 642 |
+
{ url = "https://files.pythonhosted.org/packages/20/87/846c289e7aa2299eff406335717cf43ce8777194ece8aad75772e0411615/safetensors-0.8.0-cp310-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7bc0a787ba8a35be368ee3574edfa2b1ad389eebd0a72e482ae275490e3f6c98", size = 633461, upload-time = "2026-06-09T07:52:11.128Z" },
|
| 643 |
+
{ url = "https://files.pythonhosted.org/packages/76/22/8d64d9df2c45d5ded401df889d0ad90882804ca172d79ec4f0df8f727fe0/safetensors-0.8.0-cp310-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:040070828e36dc8e122178bbbd5830ff9e97920affb84cbe0f46442497bed358", size = 545148, upload-time = "2026-06-09T07:52:13.603Z" },
|
| 644 |
+
{ url = "https://files.pythonhosted.org/packages/28/50/f203ff3a3ddfe19308efc83c5a3a29ed02bf786732ec35e68bf9162f3365/safetensors-0.8.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd6f3f93c9a0a7cc2788ee63fb763353d4bd2e89b0751bc78fcf7dda00bea774", size = 516040, upload-time = "2026-06-09T07:52:16.29Z" },
|
| 645 |
+
{ url = "https://files.pythonhosted.org/packages/46/fb/cdaed17ceb2948784fd9c36b6fd3e951b608547cea81a48e8ee6f8cfdfcb/safetensors-0.8.0-cp310-abi3-manylinux_2_31_riscv64.whl", hash = "sha256:fcdd41ec4628fee5799f807c73c353629130fbd942aa23d83c623dd6c9d52d78", size = 513832, upload-time = "2026-06-09T07:52:12.37Z" },
|
| 646 |
+
{ url = "https://files.pythonhosted.org/packages/0d/49/1e15de264dcc3b77943d2d0c56a95809956883b1c2d6d585c792523f180b/safetensors-0.8.0-cp310-abi3-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8e9f537aa183a38ace122d27303dcd986b26bd2a7591f9181d7f0c396f4677ca", size = 559930, upload-time = "2026-06-09T07:52:14.743Z" },
|
| 647 |
+
{ url = "https://files.pythonhosted.org/packages/2a/43/bf38443278eab4b1be1fce2931e2b012ad9cb7df52ada751d0aab8f7659a/safetensors-0.8.0-cp310-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:87eec7ffed2b809f05a398a8becb7d013f19f7837cd15d9748580d6cf30dbaf4", size = 678670, upload-time = "2026-06-09T07:52:20.032Z" },
|
| 648 |
+
{ url = "https://files.pythonhosted.org/packages/72/e3/68cd3fa5b48488e84add63e04cb12f3bc28ae4638c06d4508c6e88823d0e/safetensors-0.8.0-cp310-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:4a95ae2b05d7726d751da4ebf626a2ca782b706e101bd894c95bc2450b1cffcc", size = 786679, upload-time = "2026-06-09T07:52:21.322Z" },
|
| 649 |
+
{ url = "https://files.pythonhosted.org/packages/29/4b/1c19c509d56e01f4fbb3d0a2e597450f6cc04d1d56cf52defb0a62dfd715/safetensors-0.8.0-cp310-abi3-musllinux_1_2_i686.whl", hash = "sha256:3ae091f16662658bdc019a4ff6cb4c085bb7d725eb5978b183ffd265863b6d2d", size = 765683, upload-time = "2026-06-09T07:52:22.594Z" },
|
| 650 |
+
{ url = "https://files.pythonhosted.org/packages/27/43/41c1621732edd934d868a00d1b891584c892a7b62a9aab82ea5a0a5623ee/safetensors-0.8.0-cp310-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:8e080062fcde23be189565e1c3305d16751a218ecf9412c8601e64204eb6f846", size = 722361, upload-time = "2026-06-09T07:52:23.924Z" },
|
| 651 |
+
{ url = "https://files.pythonhosted.org/packages/8e/3f/73ccf82579412b4a71c4ca673f10b5f1f888d7cf5af7fe24f27d30307be4/safetensors-0.8.0-cp310-abi3-win32.whl", hash = "sha256:2ddf52eac562eda224f99acfa7889d02968c1fd59a5b011ae7d8137c37e9c02d", size = 342401, upload-time = "2026-06-09T07:52:28.895Z" },
|
| 652 |
+
{ url = "https://files.pythonhosted.org/packages/1b/6d/3fba214c1e5e0f69991677ec3bc17023f0421776975e1de0c682dca475e2/safetensors-0.8.0-cp310-abi3-win_amd64.whl", hash = "sha256:096ec1a98435df7beb08853bb5aa9081a84f23d0adc67ed1a0a10550f608373f", size = 355540, upload-time = "2026-06-09T07:52:27.832Z" },
|
| 653 |
+
{ url = "https://files.pythonhosted.org/packages/8d/fc/7eedc3510d97878876e32774eebbeb61c43f148a96e915c84229a3e967aa/safetensors-0.8.0-cp310-abi3-win_arm64.whl", hash = "sha256:f7838e5135a406ad3e02efdcb8cf2e5397d368b0154537c4fec682dbc544d452", size = 340500, upload-time = "2026-06-09T07:52:26.745Z" },
|
| 654 |
+
]
|
| 655 |
+
|
| 656 |
+
[[package]]
|
| 657 |
+
name = "setuptools"
|
| 658 |
+
version = "84.0.0"
|
| 659 |
+
source = { registry = "https://pypi.org/simple" }
|
| 660 |
+
sdist = { url = "https://files.pythonhosted.org/packages/6d/44/f5da03a8ef95d369145c5bb53050e7877c9f3d312e128605fd9504829143/setuptools-84.0.0.tar.gz", hash = "sha256:f4695c21257f0d9b537ec2692c941d02ee143b7cc1276941349a546573b2ef73", size = 1168449, upload-time = "2026-08-08T18:27:58.365Z" }
|
| 661 |
+
wheels = [
|
| 662 |
+
{ url = "https://files.pythonhosted.org/packages/95/9c/c510029fc6ef33a6275cd2c5d3cecd6613dfd6aa401d57c54f1c18852ccf/setuptools-84.0.0-py3-none-any.whl", hash = "sha256:51a52592b3b99e102b609654876bd65f19f999935166d1352678931132b0c670", size = 818216, upload-time = "2026-08-08T18:27:56.719Z" },
|
| 663 |
+
]
|
| 664 |
+
|
| 665 |
+
[[package]]
|
| 666 |
+
name = "shellingham"
|
| 667 |
+
version = "1.5.4"
|
| 668 |
+
source = { registry = "https://pypi.org/simple" }
|
| 669 |
+
sdist = { url = "https://files.pythonhosted.org/packages/58/15/8b3609fd3830ef7b27b655beb4b4e9c62313a4e8da8c676e142cc210d58e/shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de", size = 10310, upload-time = "2023-10-24T04:13:40.426Z" }
|
| 670 |
+
wheels = [
|
| 671 |
+
{ url = "https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686", size = 9755, upload-time = "2023-10-24T04:13:38.866Z" },
|
| 672 |
+
]
|
| 673 |
+
|
| 674 |
+
[[package]]
|
| 675 |
+
name = "sympy"
|
| 676 |
+
version = "1.14.0"
|
| 677 |
+
source = { registry = "https://pypi.org/simple" }
|
| 678 |
+
dependencies = [
|
| 679 |
+
{ name = "mpmath" },
|
| 680 |
+
]
|
| 681 |
+
sdist = { url = "https://files.pythonhosted.org/packages/83/d3/803453b36afefb7c2bb238361cd4ae6125a569b4db67cd9e79846ba2d68c/sympy-1.14.0.tar.gz", hash = "sha256:d3d3fe8df1e5a0b42f0e7bdf50541697dbe7d23746e894990c030e2b05e72517", size = 7793921, upload-time = "2025-04-27T18:05:01.611Z" }
|
| 682 |
+
wheels = [
|
| 683 |
+
{ 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" },
|
| 684 |
+
]
|
| 685 |
+
|
| 686 |
+
[[package]]
|
| 687 |
+
name = "system-one-gemma-coreml"
|
| 688 |
+
version = "0.1.0"
|
| 689 |
+
source = { virtual = "." }
|
| 690 |
+
dependencies = [
|
| 691 |
+
{ name = "coremltools" },
|
| 692 |
+
{ name = "huggingface-hub" },
|
| 693 |
+
{ name = "numpy" },
|
| 694 |
+
{ name = "peft" },
|
| 695 |
+
{ name = "safetensors" },
|
| 696 |
+
{ name = "torch" },
|
| 697 |
+
{ name = "transformers" },
|
| 698 |
+
]
|
| 699 |
+
|
| 700 |
+
[package.dev-dependencies]
|
| 701 |
+
dev = [
|
| 702 |
+
{ name = "pytest" },
|
| 703 |
+
{ name = "ruff" },
|
| 704 |
+
]
|
| 705 |
+
|
| 706 |
+
[package.metadata]
|
| 707 |
+
requires-dist = [
|
| 708 |
+
{ name = "coremltools", specifier = "==9.0" },
|
| 709 |
+
{ name = "huggingface-hub", specifier = ">=0.34" },
|
| 710 |
+
{ name = "numpy", specifier = "<2.3" },
|
| 711 |
+
{ name = "peft", specifier = "==0.20.0" },
|
| 712 |
+
{ name = "safetensors", specifier = ">=0.6" },
|
| 713 |
+
{ name = "torch", specifier = "==2.7.0" },
|
| 714 |
+
{ name = "transformers", specifier = "==5.17.0" },
|
| 715 |
+
]
|
| 716 |
+
|
| 717 |
+
[package.metadata.requires-dev]
|
| 718 |
+
dev = [
|
| 719 |
+
{ name = "pytest", specifier = ">=8.4" },
|
| 720 |
+
{ name = "ruff", specifier = ">=0.13" },
|
| 721 |
+
]
|
| 722 |
+
|
| 723 |
+
[[package]]
|
| 724 |
+
name = "tokenizers"
|
| 725 |
+
version = "0.23.2"
|
| 726 |
+
source = { registry = "https://pypi.org/simple" }
|
| 727 |
+
dependencies = [
|
| 728 |
+
{ name = "huggingface-hub" },
|
| 729 |
+
]
|
| 730 |
+
sdist = { url = "https://files.pythonhosted.org/packages/18/1e/bc6587c5ab643b2e17776cace9070a2ae73549c86bffac9934a600bf3c31/tokenizers-0.23.2.tar.gz", hash = "sha256:7f0f085686b9de0d0079e6f874ae053600db64c5d13049e0bbc0119926d25aac", size = 385745, upload-time = "2026-09-03T08:55:42.89Z" }
|
| 731 |
+
wheels = [
|
| 732 |
+
{ url = "https://files.pythonhosted.org/packages/4d/ed/8a443528baa6fac8dfe8c3b75b038c63ac92bb539bcabe311e227c718173/tokenizers-0.23.2-cp310-abi3-macosx_10_12_x86_64.whl", hash = "sha256:85a9a357a3764aecc904ee76bdaf8cf1ad8e5a67a1b929a487c4a39b49ed0e90", size = 3148852, upload-time = "2026-09-03T08:55:30.874Z" },
|
| 733 |
+
{ url = "https://files.pythonhosted.org/packages/67/49/22da045a91732384d3a3771816bf188dc5a1f702c32e635afa7c679c0bef/tokenizers-0.23.2-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:986670e43691469dcee610ea0f846f91a8f84e91fc6f7a48d4c064414c0ec2bf", size = 3101593, upload-time = "2026-09-03T08:55:28.587Z" },
|
| 734 |
+
{ url = "https://files.pythonhosted.org/packages/2e/4d/8f569ed49372a3ed8e57099bd515055fd48d7c95912c4307cda6973c2168/tokenizers-0.23.2-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a37039b5dfc4af84eb3ef0a92f4307e28936c8f9adccba2629d36f652e9bf7a2", size = 3516830, upload-time = "2026-09-03T08:55:14.741Z" },
|
| 735 |
+
{ url = "https://files.pythonhosted.org/packages/2a/de/e2f14c8919d5bf51874051d00d6c7b7e0e8bde6c6a2dbeddda7f642896ff/tokenizers-0.23.2-cp310-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7b7e37ba198f24150f523e1242e83c4970de4a525480586be5dcc24d9add32c5", size = 3407975, upload-time = "2026-09-03T08:55:16.842Z" },
|
| 736 |
+
{ url = "https://files.pythonhosted.org/packages/c5/bd/93c69152d02ef06ce47aed8b2bf4952dcf733c935a62791873932b2934d9/tokenizers-0.23.2-cp310-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:43e4f2071e3cc8d5d86421c874aebc82659bb51a68bcdef5a0da75ee89511ccb", size = 3748165, upload-time = "2026-09-03T08:55:24.769Z" },
|
| 737 |
+
{ url = "https://files.pythonhosted.org/packages/2d/b7/56b84b80bc96942bba8eb23751a9e8a1fce4faaf4390425e7083f721c98c/tokenizers-0.23.2-cp310-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:325fee2e0418a9dc6c9ecf736a5f5f0db7875183ace9549ae339da76f7a1fbb7", size = 4024165, upload-time = "2026-09-03T08:55:18.806Z" },
|
| 738 |
+
{ url = "https://files.pythonhosted.org/packages/9b/8a/0175e216f005c2fe08238292663aa41e4c802b216e71047a69a0e9fc6fa3/tokenizers-0.23.2-cp310-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:950d7c9426fa72406a0ffeacdbc0bb9985f5db20eb8b263f29c79aaf83105703", size = 3591899, upload-time = "2026-09-03T08:55:22.752Z" },
|
| 739 |
+
{ url = "https://files.pythonhosted.org/packages/2c/ca/ca6b93c7820df123b2662a9469e8facc826ccc94e98fdd0d615f6431e73a/tokenizers-0.23.2-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:41c2f84d172449b4dadb9cdc508e3e364076613c35b16e76ecfe47a60d1e3305", size = 3386843, upload-time = "2026-09-03T08:55:26.584Z" },
|
| 740 |
+
{ url = "https://files.pythonhosted.org/packages/e9/a4/4f9106d317b14a80aefea9f0e3a8d07ef25f856a7607eb7f5ab894281fcb/tokenizers-0.23.2-cp310-abi3-manylinux_2_31_riscv64.whl", hash = "sha256:12f0835dc2ee694746a76adf7b1567d4346a4a502ebe93fb1f5f80ea49799b78", size = 3577314, upload-time = "2026-09-03T08:55:20.825Z" },
|
| 741 |
+
{ url = "https://files.pythonhosted.org/packages/8d/6a/1552b70fb0d9ab074fd3fc961435d01364e79c9058481822c3af6e8d402c/tokenizers-0.23.2-cp310-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:eb2f9c8a24da020ea8c11a01a19c1c2547912d92121ae4a01cfbca46125dee40", size = 9967367, upload-time = "2026-09-03T08:55:33.188Z" },
|
| 742 |
+
{ url = "https://files.pythonhosted.org/packages/06/01/3ccb3a956c7528b2507b8a9714155c4baf86af593039db6ea375dd0c96c3/tokenizers-0.23.2-cp310-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:f486f402f6f9abee5bb032553736813af0c710a86b2e0ca592634c55cea1f835", size = 9811886, upload-time = "2026-09-03T08:55:35.642Z" },
|
| 743 |
+
{ url = "https://files.pythonhosted.org/packages/fa/73/7038e612d48bda1599457f712f6bd3854eae1a9dc9c13aa47f835349db48/tokenizers-0.23.2-cp310-abi3-musllinux_1_2_i686.whl", hash = "sha256:bef235815a067b2648caf6dcc7a71091b0b0fff9ee8057f6451eb9335fae52ef", size = 10146224, upload-time = "2026-09-03T08:55:38.391Z" },
|
| 744 |
+
{ url = "https://files.pythonhosted.org/packages/b5/d8/8e9e4e0b287a338d8f88976729628c9d22e8a54cfaf9777018a7f7cb58a0/tokenizers-0.23.2-cp310-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:5c56bda1511921587789163e524d196ed8284174ac23abd7685d5ea8da6c4718", size = 10256304, upload-time = "2026-09-03T08:55:40.977Z" },
|
| 745 |
+
{ url = "https://files.pythonhosted.org/packages/f3/1f/c79a01f671a49728ebb0b61f7ff9ea45663b66cab40bc0858e9859b25c16/tokenizers-0.23.2-cp310-abi3-win32.whl", hash = "sha256:debf978920d93ba9c219bd67cc4bbfaf912c9039e41e7a28b91ec15e3728c95a", size = 2592809, upload-time = "2026-09-03T08:55:48.02Z" },
|
| 746 |
+
{ url = "https://files.pythonhosted.org/packages/db/f7/0a69ac6b82dbccf3f71add938a161c497952749294b8dd6dfe03a819dc40/tokenizers-0.23.2-cp310-abi3-win_amd64.whl", hash = "sha256:2e96f5699d5249c9c64aa8412e044f727aae3a4098cf830f9901ec1afc361cde", size = 2863236, upload-time = "2026-09-03T08:55:46.193Z" },
|
| 747 |
+
{ url = "https://files.pythonhosted.org/packages/d7/b0/dee84cb44175be1b4c35bd2f770727494e78f0bb38e571a623ade94dbebb/tokenizers-0.23.2-cp310-abi3-win_arm64.whl", hash = "sha256:e49c394456dd9985787fec76132438ba3fb8911f857b1bf3d40119f9292d41aa", size = 2729352, upload-time = "2026-09-03T08:55:44.345Z" },
|
| 748 |
+
]
|
| 749 |
+
|
| 750 |
+
[[package]]
|
| 751 |
+
name = "torch"
|
| 752 |
+
version = "2.7.0"
|
| 753 |
+
source = { registry = "https://pypi.org/simple" }
|
| 754 |
+
dependencies = [
|
| 755 |
+
{ name = "filelock" },
|
| 756 |
+
{ name = "fsspec" },
|
| 757 |
+
{ name = "jinja2" },
|
| 758 |
+
{ name = "networkx" },
|
| 759 |
+
{ name = "nvidia-cublas-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
|
| 760 |
+
{ name = "nvidia-cuda-cupti-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
|
| 761 |
+
{ name = "nvidia-cuda-nvrtc-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
|
| 762 |
+
{ name = "nvidia-cuda-runtime-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
|
| 763 |
+
{ name = "nvidia-cudnn-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
|
| 764 |
+
{ name = "nvidia-cufft-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
|
| 765 |
+
{ name = "nvidia-cufile-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
|
| 766 |
+
{ name = "nvidia-curand-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
|
| 767 |
+
{ name = "nvidia-cusolver-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
|
| 768 |
+
{ name = "nvidia-cusparse-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
|
| 769 |
+
{ name = "nvidia-cusparselt-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
|
| 770 |
+
{ name = "nvidia-nccl-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
|
| 771 |
+
{ name = "nvidia-nvjitlink-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
|
| 772 |
+
{ name = "nvidia-nvtx-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
|
| 773 |
+
{ name = "setuptools" },
|
| 774 |
+
{ name = "sympy" },
|
| 775 |
+
{ name = "triton", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
|
| 776 |
+
{ name = "typing-extensions" },
|
| 777 |
+
]
|
| 778 |
+
wheels = [
|
| 779 |
+
{ url = "https://files.pythonhosted.org/packages/aa/5e/ac759f4c0ab7c01feffa777bd68b43d2ac61560a9770eeac074b450f81d4/torch-2.7.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:36a6368c7ace41ad1c0f69f18056020b6a5ca47bedaca9a2f3b578f5a104c26c", size = 99013250, upload-time = "2025-04-23T14:35:15.589Z" },
|
| 780 |
+
{ url = "https://files.pythonhosted.org/packages/9c/58/2d245b6f1ef61cf11dfc4aceeaacbb40fea706ccebac3f863890c720ab73/torch-2.7.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:15aab3e31c16feb12ae0a88dba3434a458874636f360c567caa6a91f6bfba481", size = 865042157, upload-time = "2025-04-23T14:32:56.011Z" },
|
| 781 |
+
{ url = "https://files.pythonhosted.org/packages/44/80/b353c024e6b624cd9ce1d66dcb9d24e0294680f95b369f19280e241a0159/torch-2.7.0-cp312-cp312-win_amd64.whl", hash = "sha256:f56d4b2510934e072bab3ab8987e00e60e1262fb238176168f5e0c43a1320c6d", size = 212482262, upload-time = "2025-04-23T14:35:03.527Z" },
|
| 782 |
+
{ url = "https://files.pythonhosted.org/packages/ee/8d/b2939e5254be932db1a34b2bd099070c509e8887e0c5a90c498a917e4032/torch-2.7.0-cp312-none-macosx_11_0_arm64.whl", hash = "sha256:30b7688a87239a7de83f269333651d8e582afffce6f591fff08c046f7787296e", size = 68574294, upload-time = "2025-04-23T14:34:47.098Z" },
|
| 783 |
+
]
|
| 784 |
+
|
| 785 |
+
[[package]]
|
| 786 |
+
name = "tqdm"
|
| 787 |
+
version = "4.70.1"
|
| 788 |
+
source = { registry = "https://pypi.org/simple" }
|
| 789 |
+
dependencies = [
|
| 790 |
+
{ name = "colorama", marker = "sys_platform == 'win32'" },
|
| 791 |
+
]
|
| 792 |
+
sdist = { url = "https://files.pythonhosted.org/packages/0d/ea/b2a5bd54b28a324dae8211928b2d730b6547500342c7e6c6dea08bd0a485/tqdm-4.70.1.tar.gz", hash = "sha256:cefd0eca11b2a37a3aee776544d4f4ae913f02688135b5556b8788dfa474afc4", size = 171846, upload-time = "2026-09-11T07:25:16.601Z" }
|
| 793 |
+
wheels = [
|
| 794 |
+
{ url = "https://files.pythonhosted.org/packages/a7/03/921a3d3c75785aca9ebfbfcabfbc3a1be12e2ab5265deb026d55a5a3f83e/tqdm-4.70.1-py3-none-any.whl", hash = "sha256:c293e525e6fef9c20e8728fd4612df02a0aa31bb5fe91ecd93e123b1b7bffa73", size = 80199, upload-time = "2026-09-11T07:25:14.599Z" },
|
| 795 |
+
]
|
| 796 |
+
|
| 797 |
+
[[package]]
|
| 798 |
+
name = "transformers"
|
| 799 |
+
version = "5.17.0"
|
| 800 |
+
source = { registry = "https://pypi.org/simple" }
|
| 801 |
+
dependencies = [
|
| 802 |
+
{ name = "huggingface-hub" },
|
| 803 |
+
{ name = "numpy" },
|
| 804 |
+
{ name = "packaging" },
|
| 805 |
+
{ name = "pyyaml" },
|
| 806 |
+
{ name = "regex" },
|
| 807 |
+
{ name = "safetensors" },
|
| 808 |
+
{ name = "tokenizers" },
|
| 809 |
+
{ name = "tqdm" },
|
| 810 |
+
{ name = "typer" },
|
| 811 |
+
]
|
| 812 |
+
sdist = { url = "https://files.pythonhosted.org/packages/0e/9e/750649904a065007a838981785b2bd8d9ff26154c6c341ac67d0b7f82c68/transformers-5.17.0.tar.gz", hash = "sha256:a153be279169b55b92d8000bf4af294aed684503d091cca7804da2dd8a9de000", size = 9817878, upload-time = "2026-09-09T15:39:56.886Z" }
|
| 813 |
+
wheels = [
|
| 814 |
+
{ url = "https://files.pythonhosted.org/packages/e8/d0/c502b60d684adbd98a8dc7d5bb866842772b816ac4354e4608be240041ae/transformers-5.17.0-py3-none-any.whl", hash = "sha256:78ec1ce21579b38dfb83950a0658cd119f87212a2fcfdff478096ce9d6c03801", size = 12295140, upload-time = "2026-09-09T15:39:53.746Z" },
|
| 815 |
+
]
|
| 816 |
+
|
| 817 |
+
[[package]]
|
| 818 |
+
name = "triton"
|
| 819 |
+
version = "3.3.0"
|
| 820 |
+
source = { registry = "https://pypi.org/simple" }
|
| 821 |
+
dependencies = [
|
| 822 |
+
{ name = "setuptools" },
|
| 823 |
+
]
|
| 824 |
+
wheels = [
|
| 825 |
+
{ url = "https://files.pythonhosted.org/packages/11/53/ce18470914ab6cfbec9384ee565d23c4d1c55f0548160b1c7b33000b11fd/triton-3.3.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b68c778f6c4218403a6bd01be7484f6dc9e20fe2083d22dd8aef33e3b87a10a3", size = 156504509, upload-time = "2025-04-09T20:27:40.413Z" },
|
| 826 |
+
]
|
| 827 |
+
|
| 828 |
+
[[package]]
|
| 829 |
+
name = "typer"
|
| 830 |
+
version = "0.27.2"
|
| 831 |
+
source = { registry = "https://pypi.org/simple" }
|
| 832 |
+
dependencies = [
|
| 833 |
+
{ name = "annotated-doc" },
|
| 834 |
+
{ name = "colorama", marker = "sys_platform == 'win32'" },
|
| 835 |
+
{ name = "rich" },
|
| 836 |
+
{ name = "shellingham" },
|
| 837 |
+
]
|
| 838 |
+
sdist = { url = "https://files.pythonhosted.org/packages/16/f7/57713ba479fd405eb76de31404b2c744c289e336b2d999511ebf51e496f7/typer-0.27.2.tar.gz", hash = "sha256:269b7eb9d3c202ca84b4bc9618cb04ebb43d3d4d1e567e4c768607232c05f945", size = 204045, upload-time = "2026-08-28T10:26:55.046Z" }
|
| 839 |
+
wheels = [
|
| 840 |
+
{ url = "https://files.pythonhosted.org/packages/dc/bf/205d0004930ede8f542fb58f601526fccf4ae7626075ca1e6c4de5d3d652/typer-0.27.2-py3-none-any.whl", hash = "sha256:b3a5fc4342d5fc8fda8fc3010b1cf117e9249aab7fae800c2eff62fd3842d97d", size = 123130, upload-time = "2026-08-28T10:26:53.752Z" },
|
| 841 |
+
]
|
| 842 |
+
|
| 843 |
+
[[package]]
|
| 844 |
+
name = "typing-extensions"
|
| 845 |
+
version = "4.16.0"
|
| 846 |
+
source = { registry = "https://pypi.org/simple" }
|
| 847 |
+
sdist = { url = "https://files.pythonhosted.org/packages/f6/cc/6253133b5bb138fc3306cebfbda2c520f545d36b5be2c7255cc528bb45d6/typing_extensions-4.16.0.tar.gz", hash = "sha256:dc983d19a509c94dba722ee6abd33940f7c05a89e243c47e907eb4db6f1a43e5", size = 113555, upload-time = "2026-07-02T08:40:05.92Z" }
|
| 848 |
+
wheels = [
|
| 849 |
+
{ url = "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", hash = "sha256:481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8", size = 45571, upload-time = "2026-07-02T08:40:04.659Z" },
|
| 850 |
+
]
|
verify-parity.py
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Check native scorer versus fixed K16 Core ML over real upstream demo requests."""
|
| 2 |
+
|
| 3 |
+
from __future__ import annotations
|
| 4 |
+
|
| 5 |
+
import argparse
|
| 6 |
+
import json
|
| 7 |
+
import statistics
|
| 8 |
+
import time
|
| 9 |
+
from pathlib import Path
|
| 10 |
+
|
| 11 |
+
import numpy as np
|
| 12 |
+
|
| 13 |
+
from assets import ROOT, check_base_access
|
| 14 |
+
from native_reference import choose, encode_options, pad_batch
|
| 15 |
+
from scorer import score_coreml
|
| 16 |
+
|
| 17 |
+
|
| 18 |
+
def main() -> None:
|
| 19 |
+
parser = argparse.ArgumentParser(description=__doc__)
|
| 20 |
+
parser.add_argument("--package", type=Path, default=ROOT / "build" / "system_one_gemma_fp16_L256_K16.mlpackage")
|
| 21 |
+
parser.add_argument("--repeats", type=int, default=10)
|
| 22 |
+
args = parser.parse_args()
|
| 23 |
+
check_base_access()
|
| 24 |
+
|
| 25 |
+
import coremltools as ct
|
| 26 |
+
import torch
|
| 27 |
+
|
| 28 |
+
from export_model import load_trained_scorer
|
| 29 |
+
|
| 30 |
+
tokenizer, native = load_trained_scorer()
|
| 31 |
+
coreml = ct.models.MLModel(str(args.package), compute_units=ct.ComputeUnit.ALL)
|
| 32 |
+
demos = json.loads((ROOT / "build" / "source" / "demos.json").read_text())
|
| 33 |
+
rows = []
|
| 34 |
+
for demo in demos:
|
| 35 |
+
sequences = encode_options(tokenizer, demo["state"], demo["question"], demo["options"])
|
| 36 |
+
ids, masks = pad_batch(sequences, tokenizer.pad_token_id)
|
| 37 |
+
with torch.inference_mode():
|
| 38 |
+
native_logits = (
|
| 39 |
+
native(
|
| 40 |
+
input_ids=torch.tensor(ids, dtype=torch.long),
|
| 41 |
+
attention_mask=torch.tensor(masks, dtype=torch.long),
|
| 42 |
+
)
|
| 43 |
+
.logits.reshape(-1)
|
| 44 |
+
.float()
|
| 45 |
+
.tolist()
|
| 46 |
+
)
|
| 47 |
+
native_choice = choose(demo["options"], native_logits)
|
| 48 |
+
times = []
|
| 49 |
+
converted = None
|
| 50 |
+
for _ in range(args.repeats):
|
| 51 |
+
start = time.perf_counter()
|
| 52 |
+
converted = score_coreml(coreml, tokenizer, demo["state"], demo["question"], demo["options"])
|
| 53 |
+
times.append((time.perf_counter() - start) * 1000)
|
| 54 |
+
assert converted is not None
|
| 55 |
+
error = max(abs(a - b) for a, b in zip(native_choice["probabilities"], converted["probabilities"]))
|
| 56 |
+
rows.append(
|
| 57 |
+
{
|
| 58 |
+
"demo": demo["name"],
|
| 59 |
+
"candidates": len(demo["options"]),
|
| 60 |
+
"native_selected_index": native_choice["selected_index"],
|
| 61 |
+
"coreml_selected_index": converted["selected_index"],
|
| 62 |
+
"max_calibrated_probability_error": error,
|
| 63 |
+
"median_end_to_end_ms": statistics.median(times),
|
| 64 |
+
}
|
| 65 |
+
)
|
| 66 |
+
report = {
|
| 67 |
+
"package": args.package.name,
|
| 68 |
+
"source": "pinned upstream demos.json",
|
| 69 |
+
"questions": len(rows),
|
| 70 |
+
"selected_id_agreements": sum(r["native_selected_index"] == r["coreml_selected_index"] for r in rows),
|
| 71 |
+
"max_calibrated_probability_error": float(np.max([r["max_calibrated_probability_error"] for r in rows])),
|
| 72 |
+
"rows": rows,
|
| 73 |
+
}
|
| 74 |
+
report["passed"] = (
|
| 75 |
+
report["selected_id_agreements"] == len(rows) and report["max_calibrated_probability_error"] <= 0.02
|
| 76 |
+
)
|
| 77 |
+
target = ROOT / "reports" / "verification-L256-K16.json"
|
| 78 |
+
target.parent.mkdir(parents=True, exist_ok=True)
|
| 79 |
+
target.write_text(json.dumps(report, indent=2) + "\n")
|
| 80 |
+
print(json.dumps(report, indent=2))
|
| 81 |
+
if not report["passed"]:
|
| 82 |
+
raise SystemExit(1)
|
| 83 |
+
|
| 84 |
+
|
| 85 |
+
if __name__ == "__main__":
|
| 86 |
+
main()
|