apte is an async-first test framework for Python where your unit tests and your LLM evals run in the same engine, with the same fixtures.
The whole design follows from one idea. An eval is just a test that returns a value. A unit test asserts and passes or fails. An eval returns an output, scores it, records the score. Same machinery underneath, same fixtures feeding both. There is no real reason they should live in separate tools with separate CLIs and no shared setup.
Why it exists
It started with pytest's fixtures, not with evals.
I like pytest, but fixtures are resolved by name, with no types and no Ctrl+Click. You write def test_x(db): and nothing tells you where db came from. The IDE can't follow it, a new reader can't either, and a typo in the name surfaces at runtime.







