Skip to content

Project

Contributing to TabAgent

Thank you for helping. Bug reports, new log formats, decision kinds and benchmark loaders are all welcome. Loaders for the public OAK and BPO benchmarks are the most wanted addition. Everyone taking part follows the Code of Conduct; report security issues privately, as SECURITY.md describes.

Set up

uv sync --group dev        # the locked environment, with pytest, ruff and pre-commit
uv run pre-commit install  # ruff, file hygiene and gitleaks on every commit

Before you open a pull request

make check   # ruff lint and format check, then the CPU test suite (no network, no GPU)
make docs    # only if you touched docs/ or mkdocs.yml: the strict documentation build

Tests that need the network, a GPU or a long run carry the network, gpu and slow markers and are left out of make test. Add a test next to the code you change. A change to a metric, a fold or a default that moves a paper number must also update experiments/paper_cells.yaml and say why in the pull request.

Common contributions

You want to Start from
read a new agent log format src/tabagent/adapters/: implement the adapter protocol described in adapters/__init__.py, register it in detect.py, and add a fabricated log to tests/adapters/fake_logs.py
add a public benchmark src/tabagent/datasets/: pin the upstream revision and each file's SHA-256 in a source manifest under datasets/manifests/, add a frozen card under src/tabagent/cards/, and list the license in NOTICE
add a classifier head TabHead(estimator=...) takes a seed -> classifier factory (fit, predict_proba, classes_); experiments/figures/head_ablation.py compares heads on a fixed card
report a result that differs from the paper open an issue with the command, the environment (uv pip freeze) and the output

Data

Never commit benchmark data, agent trajectories, model weights or API keys. Datasets are downloaded at run time from their pinned upstream releases, and test fixtures are small, fabricated and marked as such.

Releases

Maintainers publish a version to PyPI by pushing a version tag; docs/releasing.md has the steps and the one-time PyPI setup.

License

By contributing you agree that your contribution is licensed under the Apache License 2.0.