Skip to content

Release 4.9.0

Choose a tag to compare

@dylanuys dylanuys released this 14 Jul 19:29
· 17 commits to main since this release
521b252

Incentive Mechanism: Burn Eliminated, Audio Activated

The emission split changes for the first time since audio entered the exam
pipeline (#412):

Category 4.8.x 4.9.0
Burn 0.20 0.00
Image discriminators 0.30 0.40
Video discriminators 0.35 0.40
Audio discriminators 0.00 0.04
Generators 0.15 0.16

Audio detection models now earn live incentive for the first time.

Security Hardening

A full dependency audit against the repo's 120 open Dependabot alerts
(#411). Fixes the one critical (h11 malformed chunked-encoding, unblocked
by bumping our stale httpcore pin) and ~22 of 27 unique high-severity
alerts, including:

  • pillow 10.4 → 12.2 — out-of-bounds writes parsing malformed images.
    Validators parse miner-submitted media, so this was the bump that mattered
    most.
  • diffusers 0.36 → 0.38trust_remote_code bypass via custom pipeline
    components.
  • Transitive fixes across the board: GitPython (command injection / RCE
    chain), urllib3, cryptography, msgpack, protobuf, and ~150 others via a
    full lockfile upgrade.

Also in #407: media store queries hardened with fully parameterized SQL,
and epistula timestamp validation tightened (future-dated timestamps now
rejected).

Alerts deliberately left open: aiohttp/starlette/setuptools (hard-blocked by
bittensor 9.9.0's own pins) and torch/transformers (major-version jumps not
worth the GPU-stack risk for medium-severity alerts).

Much Leaner Validator Installs

  • gasbench packaging split (#413, gasbench#123): the subnet now installs
    only gasbench's dataset registry (pyyaml) instead of its full inference
    stack. Drops onnxruntime-gpu, torchaudio, torchcodec, timm, fvcore,
    decord, modelscope, scikit-image, open-clip-torch and more from validator
    environments.
  • Web scraper subsystem deleted (#407) — it had zero callers and took
    selenium, Chrome, and the xvfb runtime stack with it.
  • 10 unused direct dependencies removed (#411) — onnx, asyncpg,
    python-multipart, and a set of cargo-culted transitive pins. Verified
    zero imports before removal.

Smaller installs mean faster validator auto-update cycles and less exposure
to the reinstall timeout.

Reliability & Correctness

Proactive hardening across the validator and shared libraries (#405#411):

  • Thread safety: score mutation now behind the validator state lock,
    webhook stats behind an RLock, instance-level (not class-level) neuron
    state (#408).
  • Autoupdater hardening: git pull --ff-only with return-code checking,
    repo-root discovery that can't infinite-loop, deterministic model hash in
    discriminator pushes (#407, #408).
  • Prompt cache writes incrementally; validators can set an explicit
    callback IP (#406). Mask paths persist through add_media_entry (#405).
  • Exception hygiene: no bare except: anywhere (CI-enforced), silent
    failure paths now log (#411).

Developer Experience

  • CI introduced: ruff lint gates (error rules + no-print, no-bare-except,
    no-tabs) and pytest on every PR (#407, #411).
  • Logging unified on bt.logging — library print() calls eliminated, so
    errors actually reach pm2/Docker logs (#410).
  • gascli d perf rebuilt model-centric with entrance-exam status and
    failure reasons, plus base/aug score breakdown; aug_weight = 0.2
    (#402, #403).
  • content_manager.py converted from tabs to 4-space indentation with
    .git-blame-ignore-revs so blame stays useful (#411).