Dependencies and Extras

The project supports a minimal core install plus optional extras for backend coverage.

Core install

pip install -e .

Development install

make dev

Reproducible install

make repro REPRO_EXTRAS="dev full"

REPRO_EXTRAS defaults to dev full. The frozen install fails when uv.lock is out of date.

Maintainer release baseline

Use this when preparing a tagged release:

  1. Use Python 3.12 (from .python-version).

  2. Regenerate lock data: make lock.

  3. Verify the frozen install and full checks: make repro REPRO_EXTRAS="dev full" and make ci.

  4. Build release artifacts and validate metadata: make release-check.

  5. Commit uv.lock (and any dependency spec changes), then tag and publish.

make release-check builds both the source distribution and wheel into dist/ and runs twine check against the generated artifacts.

Extras matrix

Extra

Purpose

Key packages

Platform constraints

dev

Linting, typing, tests, docs, and release checks

pytest, ruff, mypy, sphinx, build, twine

None

hf

Shared Hugging Face utilities

huggingface-hub

None

anthropic

Anthropic hosted backend

anthropic

None

gemini

Gemini hosted backend

google-genai

None

groq

Groq hosted backend

groq

None

llama_cpp

Managed llama.cpp server backend

llama-cpp-python[server], huggingface-hub

None

mlx

Apple MLX backend

mlx-lm

macOS + Apple Silicon only

transformers

In-process transformers backend

torch, transformers, huggingface-hub

None

vllm

vLLM server backend

vllm

Linux only, Python < 3.14

sglang

SGLang server backend

sglang

Linux only, Python < 3.14

local

Convenience bundle for local backends

llama_cpp + mlx + transformers stack

mlx portion only on macOS + Apple Silicon

full

Convenience bundle for local + server backends

local + vllm + sglang stack

vllm/sglang portions only on Linux, Python < 3.14

Notes

  • Extras are additive and can be combined.

  • Linux-only extras are safely skipped by pip on unsupported platforms.

  • For deterministic example tests, use the monkeypatch harness under tests/example_monkeypatch rather than adding deterministic logic to examples.