rigsolve
Finds torch, CUDA, and native-extension combinations supported by sourced evidence — and explains every constraint.
ImportError: libcudart.so.11.0: cannot open shared object file: No such file or directory
$ rigsolve check
[FAIL] torch was built for CUDA 12.4, but flash-attn expects CUDA 11
This commonly surfaces as a missing libcudart.so.11 error.
fix: re-resolve torch and the extension on one CUDA line
rigsolve inspects a broken environment without importing torch, applies a sourced compatibility matrix, and emits an ordered repair or install plan. It does not install anything unless you add --execute. Executed plans run isolated import and GPU checks after installation by default.
Why this exists
Python package resolvers understand requirements and wheel tags. GPU environments add compatibility axes that are often outside package metadata: the NVIDIA driver floor, CUDA runtime line, GPU architecture, the torch build an extension targets, C++ ABI mode, and sometimes glibc. A perfectly valid pip install can therefore end in a loader error, an undefined symbol, or a wheel with no kernel for the installed GPU.
rigsolve models those axes directly and keeps the evidence attached:
flowchart LR
A["machine profile\ndriver · GPU · Python · glibc"] --> S["constraint solver"]
M["compatibility matrix\nfacts · provenance · evidence"] --> S
W["requested packages and pins"] --> S
S --> P["reviewable install plan"]
S --> E["cited conflict explanation"]
The name is literal: a rig is the workstation, server, container, or future target; solve is the constraint problem that connects it to compatible artifacts.
The architecture guide traces detection, matrix validation, constraint search, diagnosis, and plan emission.
Install
rigsolve requires Python 3.10 or newer. The supported target data is currently focused on Linux x86_64 and NVIDIA CUDA stacks. Install the current release from PyPI:
python -m pip install rigsolve
For development, clone the repository and install the contributor tools:
git clone https://github.com/satwiksps/rigsolve.git
cd rigsolve
python -m pip install -e ".[dev]"
Website
The project landing site lives in site/. It uses Next.js, TypeScript, and Tailwind CSS. Run it locally with cd site, npm ci, and npm run dev. For Vercel, import this repository, set the project Root Directory to site, and keep the auto-detected Next.js build settings. See site/README.md for website-specific development and deployment notes.
Quick start
Inspect the current machine. Detection tolerates missing nvidia-smi, missing CUDA toolkit, and missing or broken torch installations:
rigsolve detect
rigsolve doctor
Ask for a plan for a real or hypothetical target:
rigsolve solve \
--want 'flash-attn==2.8.3' \
--target 'RTX 4090,driver=580.65,python=3.12,linux'
With the bundled seed, that currently emits a reviewable shell plan like this:
# Generated by rigsolve; review before running.
# Matrix 2026.08.15 (1e066bd53f01); evidence: metadata-backed.
# WARNING: selected versions are metadata-backed; use --execute to install and verify them on this machine
# WARNING: flash-attn's wheel filename does not establish GPU kernel coverage for sm_89
python -m pip install --index-url https://download.pytorch.org/whl/cu126 torch==2.9.0
python -m pip install 'https://github.com/Dao-AILab/flash-attention/releases/download/v2.8.3/flash_attn-2.8.3%2Bcu12torch2.9cxx11abiTRUE-cp312-cp312-linux_x86_64.whl#sha256=4e2f9e39313266b1544b68138b15b91ee6221eccf14f7902b7c6620351340810'
For a hypothetical target, the result stays plan-only. On the detected machine, --execute installs the plan and immediately runs the available isolated import and GPU probes:
rigsolve solve --want torch --execute
Use --skip-verify only when you intentionally want installation without the automatic post-install checks.
Explain whether a set of pins can coexist:
rigsolve why 'flash-attn==2.8.3' \
--target 'RTX 4090,driver=580.65,python=3.12,linux'
# A solution exists (evidence: metadata-backed): torch==2.9.0, flash-attn==2.8.3
Diagnose first and request a minimal-change repair plan second:
rigsolve check
rigsolve check --fix
Commands
| Command | What it does | Mutates the environment? |
|---|---|---|
rigsolve detect [--json] |
Profiles GPUs, driver, toolkit, platform, Python, and discoverable installed builds | No |
rigsolve solve --want SPEC... |
Solves constraints and emits a plan; --execute installs and verifies it |
Only with --execute |
rigsolve check [--fix] |
Reports applicable violations; --fix prints a repair plan |
No |
rigsolve why SPEC... |
Explains satisfiable requests or a minimal conflicting constraint set | No |
rigsolve verify [--contribute] |
Runs isolated import and selected GPU smoke probes | No; contribution output stays local |
rigsolve matrix show|stats |
Shows facts, citations, digest, coverage, and evidence counts | No |
rigsolve matrix update |
Downloads, validates, and atomically caches matrix data | Writes the validated cache and, when supplied, the requested destination |
rigsolve matrix add FILE --destination PATH |
Validates and merges a contributed matrix | Writes the requested destination |
rigsolve doctor |
Checks rigsolve, matrix, platform probes, and NVIDIA command availability | No |
Use rigsolve COMMAND --help for every option. The complete reference is in the CLI documentation.
Evidence labels
Evidence labels describe how a package combination was checked; they are not product-readiness scores.
| Label | Meaning |
|---|---|
| Metadata-backed | The artifact or build axis is published upstream |
| Install-tested | The exact artifact installed in a recorded environment |
| Import-tested | It imported and its available build metadata was recorded |
| GPU-tested | A minimal kernel ran on the recorded GPU architecture |
The bundled matrix starts from upstream package and build metadata. When you use --execute, rigsolve verifies the resulting local environment instead of pretending that one recorded GPU test applies to every machine. Numeric levels 0 through 3 remain in TOML and JSON for stable automation. See the trust model and matrix schema.
The current seed mentions artifact or coupling facts for torch, torchvision, torchaudio, flash-attn, xformers, bitsandbytes, triton, vLLM, transformers, and flashinfer-python. Its audited official torch build facts record the C++ ABI values supported by the encoded release/index pairs. That list is not a promise of complete version, platform, or solve coverage.
How it relates to pip, uv, and conda
| Tool | Primary job | Where rigsolve fits |
|---|---|---|
pip |
Install Python distributions and resolve declared requirements | rigsolve emits ordered pip commands, explicit wheel URLs, and PyTorch indexes |
uv |
Fast Python project and environment management | rigsolve emits a [tool.uv] project snippet with explicit indexes and sources |
conda |
Resolve packages across Python and native channels | Conda output is outside the current scope; rigsolve can still diagnose the installed metadata it can discover |
rigsolve |
Reason over GPU build axes and explain conflicts with citations | It delegates the actual package installation; it is not an environment manager |
Privacy and safety
- Detection and diagnosis run locally. There is no telemetry.
- Package smoke tests run in child Python processes so a crashing extension does not take down the diagnostic process.
verify --contributewritesrigsolve-verification.jsonlocally and uploads nothing. Review the file before attaching it to an issue.matrix updateis the normal command that contacts the network. It fetches the configured URL, validates the whole payload, and replaces the cache atomically.- Harvesting is an opt-in contributor workflow and contacts GitHub, PyPI, PyTorch, and NVIDIA sources.
- Generated plans may contain third-party URLs and shell commands. Review them before running;
--executeis explicit for this reason.
You found the next broken combination we need
The bundled matrix starts with one known_broken entry: a narrowly sourced flash-attn 2.8.3.post1 filename mismatch. Real users will find the failures upstream metadata cannot reveal, and those are uniquely valuable.
If a CUDA combination cost you three hours, spend two minutes making sure it costs nobody else three hours:
- Open a known-broken report.
- Include the exact package versions and
rigsolve detect --jsonoutput, after checking it for anything you do not want to share. - Include the complete error and a source or reproducible procedure.
- If you have a fixed environment, run
rigsolve verify --contribute, review the local JSON, and attach it.
For a matrix PR, start with the known-broken template and follow the contribution guide. Negative facts require a useful workaround and auditable provenance.
Current scope
rigsolve 0.1.1 includes the CLI, offline detector, constraint solver, matrix validation, pip/uv/TOML/Docker/JSON/Colab emitters, diagnostics, isolated verification, and source harvesters. Target data is currently focused on Linux x86_64 and NVIDIA CUDA stacks. Conda output is not included.
The daily harvester is read-only with respect to the repository. When upstream facts change, it uploads a validated candidate matrix and deterministic diff as a short-lived workflow artifact; it never creates a branch, pull request, commit, or merge. See the harvesting guide.
Contributing and governance
Bug reports, source citations, detection fixtures, matrix facts, and verification results are welcome. Start with CONTRIBUTING.md and read the Code of Conduct.
Security issues should follow SECURITY.md, not a public compatibility report.
License
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file rigsolve-0.1.1.tar.gz.
File metadata
- Download URL: rigsolve-0.1.1.tar.gz
- Upload date:
- Size: 149.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e65099baf85f0b247c6ad84e0dcb962d6837e7f9aeab4cac5958f40fb8c4cb94
|
|
| MD5 |
dd61abb72463cef06e2c1ecc425a8176
|
|
| BLAKE2b-256 |
7813ff1eccb9cb141ec7cd26a87ac94798833f741bdc4aaa9afb4846f15258ea
|
Provenance
The following attestation bundles were made for rigsolve-0.1.1.tar.gz:
Publisher:
release.yml on satwiksps/rigsolve
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rigsolve-0.1.1.tar.gz -
Subject digest:
e65099baf85f0b247c6ad84e0dcb962d6837e7f9aeab4cac5958f40fb8c4cb94 - Sigstore transparency entry: 2483938788
- Sigstore integration time:
-
Permalink:
satwiksps/rigsolve@4ea9aea7b66bf9aa4381b38cf43f35065cef0485 -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/satwiksps
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@4ea9aea7b66bf9aa4381b38cf43f35065cef0485 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rigsolve-0.1.1-py3-none-any.whl.
File metadata
- Download URL: rigsolve-0.1.1-py3-none-any.whl
- Upload date:
- Size: 127.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e28d19fa408351a71da7e243bffe3b0a8f16621d0b76864bb61e34a9a2e9a0c9
|
|
| MD5 |
877916b630d2d0d3508806e9c3d0b36f
|
|
| BLAKE2b-256 |
bb2aeca429e69f95ba125a3ded0e8a03cac7d3d62903655c5aa0f178c11213dc
|
Provenance
The following attestation bundles were made for rigsolve-0.1.1-py3-none-any.whl:
Publisher:
release.yml on satwiksps/rigsolve
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rigsolve-0.1.1-py3-none-any.whl -
Subject digest:
e28d19fa408351a71da7e243bffe3b0a8f16621d0b76864bb61e34a9a2e9a0c9 - Sigstore transparency entry: 2483938809
- Sigstore integration time:
-
Permalink:
satwiksps/rigsolve@4ea9aea7b66bf9aa4381b38cf43f35065cef0485 -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/satwiksps
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@4ea9aea7b66bf9aa4381b38cf43f35065cef0485 -
Trigger Event:
push
-
Statement type: