tt-bio
affiliated★ featuredBoltz-2 biomolecular model for drug discovery on Tenstorrent Blackhole. Supports single-card and multi-card configurations — QuietBox (4×) and Galaxy (32×). Approaches physics-based FEP accuracy at 1000× the speed.
📋 Changelog
# Changelog All notable changes to TT-Bio are recorded here. Versioning is [SemVer](https://semver.org); releases are cut from a commit that has passed the on-hardware test suite (see `RELEASING.md`). ## [Unreleased] ### Fixed - **A BindCraft 2 out-of-memory refusal says how much of the card the failing trajectory allocated.** It used to call everything allocated on the card "held by this fold", and in one reported campaign three quarters of that had been held before the trajectory started. A campaign now reads the card at each trajectory boundary and the refusal prints both parts; when most of it was inherited it points at `resume=true` instead of at the fold's size (#19). - **A process that used a Tenstorrent card exits on its own, with its own status.** A BindCraft 2 campaign could finish its work and then exit 139, or hang with SIGTERM ignored after an out-of-memory refusal, in teardown after Python was done. tt-bio now ends the process once it has closed the card, with the status the program chose, before the C++ destructors of tt-metal and XLA run. The stderr filter that tt-bio forked at import is gone; the nanobind leak report it dropped is still dropped, and `--debug` (or `TT_BIO_DEBUG_STDERR=1`) shows it (#20). ## [0.13.0] - 2026-10-08 Your own objective and your own outputs, on the models tt-bio already ships. BindCraft 2's design loss takes terms you write, every structure model writes its full confidence matrices, and a fold can carry an output head of your own. ### Added - **A BindCraft 2 loss you can change.** `bindcraft2.loss_terms` adds a term of your own, reweights or switches off any of BindCraft 2's 37, or replaces what one computes, from ordinary Python with the settings file untouched. A term reaches the gradient, the mutation and acceptance scoring and `losses.csv` alike, on the card and on BindCraft 2's own JAX trunk. `bindcraft2.check_gradient` grades a term against float64 central differences, and a term whose gradient is silently zero is refused by name before a campaign spends on it. With no custom term the design loop is unchanged. Worked example: `examples/bindcraft2_custom_loss.py`; reference: [`docs/bindcraft2.md`](docs/bindcraft2.md#custom-loss). - **Confidence exports for every structure model.** `--write_pae` now writes `<name>_pae.npz` with the full PAE matrix, the PDE matrix and contact probabilities from the model's own distogram, plus a JSON sidecar naming each array's shape and units, for Boltz-2, OpenDDE, OpenFold3, OpenBind-0, ESMFold-2, RF3, Protenix and AF2-IG. ESMFold-2 and AF2-IG compute a full PAE matrix for the first time, and OpenFold3, OpenBind-0, RF3 and AF2-IG report the chain-pair ipTM matrix in `results.json`. `--contact_cutoff` sets the contact distance. Protenix has no contact probabilities and AF2-IG no PDE, and the sidecar says so. [`docs/confidence-outputs.md`](docs/confidence-outputs.md). - **An extension surface.** `tt-bio predict --
Works on
blackhole
quietbox
galaxy