Stack
What these are built on, and why
A short list on purpose. Every dependency is something a reader has to install, learn
and keep updated, so each one here earns its place in more than one project.
Python
3.9 – 3.13
Typed throughout, checked with mypy and linted with ruff in CI. The version floors are
lower bounds on what a user may already have, not the version CI runs — raising them
would lock people out without testing anything new.
PyTorch
decisionrl
Every algorithm in decisionrl. CPU is the default target: the applied environments are
small enough that a reader without a GPU can still reproduce the numbers in the
documentation, which is the point of publishing them.
FastAPI · NumPy
praxis
One API core serves every client. Dense retrieval is a matrix-vector product over
vectors held in memory and cached to disk, with a pure standard-library fallback so
the offline image and CI run without NumPy at all. A Postgres index with pgvector is
designed and not yet wired — the schema is in the repository, the retriever is not.
Docker
praxis
The image installs the API extra, sets offline mode and carries the corpus, so
docker compose up app runs with no key, no GPU and no outbound request.
A reader who cannot start it has no way to check anything.
GitHub Actions
every repository
Linux, macOS and Windows on every push, with one aggregate check to require in branch
protection. Releases publish through Trusted Publishing, and the desktop binaries carry
a signed provenance attestation.
MkDocs
documentation
Built with --strict, which fails on a broken internal link or a page
missing from the navigation. No webfonts and no analytics on any of the sites,
including this one.