Open in tt-awesome →

tt-bio

affiliated★ featured
by moritztng · Python · MIT · 124⭐ · Jan 31, 2026

Boltz-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.

LATEST v0.13.0 2026-10-08T05:06:04Z Release notes ↗
4 previous releases
v0.12.0 2026-10-02T02:58:40Z
v0.11.0 2026-10-01T11:04:17Z
v0.10.0 2026-09-30T21:20:52Z
v0.9.0 2026-09-18T03:58:39Z
See all releases on GitHub ↗
# 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 --
drug-discovery blackhole inference biology multi-card
blackhole quietbox galaxy