pytest-llm
Fast AI reliability test suite
A pytest plugin that provides a custom marker for testing LLM (Large Language Model) outputs with configurable success rate thresholds.
Usage
import pytest
@pytest.mark.llm("How many R's are in the Word 'Strawberry'?", 0.9)
def test_counting(prompt, llm):
result = llm(prompt).lower()
assert ("3" in result) or ("three" in result)
Setup
python3 -m pip install -e pytest-llm
# conftest.py
import os
import typing
import httpx
import ollama
import pytest
def github_models_complete(prompt, model=None, system=None) -> str:
messages = [{"role": "system", "content": system}] if system else []
messages += [{"role": "user", "content": prompt}]
if GITHUB_TOKEN := os.getenv("GITHUB_TOKEN"):
response = httpx.post(
"https://models.github.ai/inference/chat/completions",
headers={
"Content-Type": "application/json",
"Accept": "application/vnd.github+json",
"Authorization": f"Bearer {GITHUB_TOKEN}",
"X-GitHub-Api-Version": "2022-11-28",
},
json={
"model": model or "openai/gpt-5-nano",
"messages": messages,
},
)
response.raise_for_status()
return response.json()["choices"][0]["message"]["content"]
else:
return ollama.generate(model="llama3.2", prompt=prompt).response
@pytest.fixture
def llm() -> typing.Callable[[str], str]:
# This fixture isn't needed but might be convenient
return github_models_complete
def pytest_llm_complete(config):
# This pytest hook will provide enable the plugin to generate random prompts
return github_models_complete
Running Tests
pytest -m llm
# or to run non-llm tests
pytest -m "not llm"
Metadata
Release files for pytest-llm 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pytest_llm-0.1.0.tar.gz | 5.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pytest_llm-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 10.9 kB
Release files / pytest_llm-0.1.0.tar.gz
| Download URL | pytest_llm-0.1.0.tar.gz |
|---|---|
| Size | 5.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
25a8afd9047c0076763dfbeb82d29e9219b1f34109d3aef12a80c9a0859839b7
|
|
BLAKE2b-256 checksum How to use checksums |
53fa1eb091225592e20145911005b68d5e129efaec1d643be179238f51fdd390
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 3, 2025.
Transparency logRelease files / pytest_llm-0.1.0-py3-none-any.whl
| Download URL | pytest_llm-0.1.0-py3-none-any.whl |
|---|---|
| Size | 5.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
3abf50c4bb0c7e2fbbb6a886ad0955f06004a8b845b4300dc8d8ab64ece04857
|
|
BLAKE2b-256 checksum How to use checksums |
3f2ae2573f7e81ec8d79480265db7c9008e583117049d28cd05bf7f88ea27c89
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 3, 2025.
Transparency log