Installation

whatifd is on PyPI as of v0.3.0. The brand and CLI command stay whatifd; the PyPI distribution name is whatifd (the bare whatifd slot was already taken on PyPI).

From PyPI

The runner and the four adapters publish as separate distributions so you only install the integrations you use. The line below installs everything:

uv pip install whatifd whatifd-langfuse whatifd-inspect-ai whatifd-phoenix whatifd-datadog
pip install whatifd whatifd-langfuse whatifd-inspect-ai whatifd-phoenix whatifd-datadog
pipx install whatifd
pipx inject whatifd whatifd-langfuse whatifd-inspect-ai

The CLI command is whatifd, even though the distribution is whatifd:

whatifd --help
whatifd fork --help

From source

git clone https://github.com/victoralfred/whatifd
cd whatifd
uv sync --all-extras --dev --group workspace
uv run whatifd --help

The --group workspace flag installs all four packages from the uv workspace as editable, so changes in packages/whatifd-langfuse/, packages/whatifd-phoenix/, and packages/whatifd-inspect-ai/ are picked up live.

Pick only what you need

The adapters are independent — install just the ones you use:

Distribution

Why install it

Optional?

whatifd

The runner core, the CLI, the report types, the schema

required

whatifd-langfuse

Langfuse TraceSource adapter

only if you ingest from Langfuse

whatifd-phoenix

Arize Phoenix / OpenInference TraceSource adapter

only if you ingest from Phoenix

whatifd-datadog

Datadog LLM Observability TraceSource adapter + verdict-metrics emitter

only if you ingest from / report to Datadog (v0.3; [live] extra for the HTTP client)

whatifd-inspect-ai

Inspect AI Scorer adapter

only if you score with Inspect AI

You can also write your own adapter against the whatifd.adapters.protocols interfaces and skip the adapter packages. The synthetic whatifd.adapters.stub.StubTraceSource / StubScorer ship with the core for tests and adapter authors.

All packages ship a py.typed marker (PEP 561) — your type checker / IDE sees their inline types when you import them.

Verify the install

Verify each installed distribution reports the same version:

python -c "import whatifd; print('whatifd', whatifd.__version__)"
python -c "import whatifd_langfuse; print('whatifd-langfuse', whatifd_langfuse.__version__)"
python -c "import whatifd_phoenix; print('whatifd-phoenix', whatifd_phoenix.__version__)"
python -c "import whatifd_inspect_ai; print('whatifd-inspect-ai', whatifd_inspect_ai.__version__)"

All four should report the same version (e.g., 0.2.0). The four packages release together; a version mismatch indicates a partial install.

Supported Python versions

Python

Support

3.11

3.12

3.13

3.10

❌ (use 3.11+)

CI runs the test suite against all three supported versions on every PR.

Next

Run your first experiment.