Open in tt-awesome →

tt-bio

affiliated★ featured
by moritztng · Python · MIT · 121⭐ · 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.9.0 2026-09-18T03:58:39Z Release notes ↗
4 previous releases
v0.8.0 2026-09-10T22:43:47Z
v0.7.3 2026-09-04T03:38:41Z
v0.7.2 2026-09-01T13:40:36Z
v0.7.1 2026-08-25T00:38:08Z
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]

### Added

- **Protenix-v2 and OpenDDE now report per-chain-pair ipTM in `results.json`.** A multi-chain
  entry carries `pair_chains_iptm` and `chains_ptm`, the same two fields Boltz-2 already writes
  and in the same shape, for every sample rather than only the best one. Read
  `pair_chains_iptm[binder][target]` to score one named interface of a complex; the global `iptm`
  averages the whole interface, and on a two-chain target the two agree. The matrix was already
  computed to derive the per-chain averages and then dropped, so nothing about the fold changed:
  the same input gives the same coordinates, pLDDT, pTM and ipTM as before. Opened as #15 by
  @ssiddhantsharma; the diagonal (each chain's own pTM) and the device confidence path
  (`TT_PROTENIX_CONF_DEVICE=1`) were added on top of it.

## [0.9.0] - 2026-09-18

### Added

- **A preflight warning when a host OpenMPI is set up to break the bundled one.** tt-metal ships
  the OpenMPI it wants and single-host prediction needs no MPI setup; `OMPI_MCA_*`, `OPAL_PREFIX`
  or a foreign `libmpi` on `LD_LIBRARY_PATH` aborts it in `MPI_Init` before any Python runs. Every
  local-worker path now names what it saw and points at the `unset` line, and changes nothing for
  you. README gained the matching troubleshooting note. Reported in #12 by @ssiddhantsharma.

- **`tt-bio --version`.** `-V` works too. Both print `tt-bio, version X.Y.Z` from the
  installed package metadata and exit, without importing ttnn or opening a card.

### Fixed

- **A BoltzGen design spread over a full box now gets the same idle-thread parking a full box of
  folds does.** The design fan-out built its per-card worker environment itself, with its own copy
  of the cores-over-workers split, so it capped threads but never parked them: 32 single-chip design
  workers on a 64-thread host sat at a two-thread share spinning their OpenMP pools through every
  device sync, which is the one regime parking is for. It now takes that environment from
  `runtime.host_thread_cap_env`, the same builder `predict` and ESMC use. The thread cap itself is
  unchanged at every width, and an operator's own `OMP_NUM_THREADS` still wins.

- **A host where the device bring-up lock file is not writable no longer brings chips up
  unserialized in silence.** `/tmp/tt-bio-device-open.lock` belongs to whichever account created
  it, so a second account on a shared box got a `PermissionError`, and tt-bio answered it by
  skipping serialization entirely with nothing printed. That is the exact race the lock exists to
  prevent: concurrent opens deadlock in the driver's `LockManager`, or bring a chip up remote-only
  so it throws on the first program dispatch. tt-bio now falls back to a per-uid lock file beside
  the shared one and says on std
drug-discovery blackhole inference biology multi-card
blackhole quietbox galaxy