CI-native regression enforcement for LLM outputs.
Project description
Phylax
CI-native regression enforcement for LLM outputs.
The Problem
LLM systems change across model versions, prompts, and environments. Phylax enforces contracts so these changes are caught before production.
Installation
pip install phylax
For all LLM providers (OpenAI, Gemini, Groq, Mistral, HuggingFace, Ollama):
pip install phylax[all]
Individual providers:
pip install phylax[openai] # OpenAI
pip install phylax[google] # Gemini (google-genai SDK)
pip install phylax[groq] # Groq LPU
pip install phylax[mistral] # Mistral AI
pip install phylax[huggingface] # HuggingFace Inference API
pip install phylax[ollama] # Ollama (local models)
Quick Start
from phylax import trace, expect, execution, GeminiAdapter
@trace(provider="gemini")
@expect(must_include=["hello"], max_latency_ms=5000)
def greet(name: str):
"""Traced Gemini call with expectations."""
adapter = GeminiAdapter()
response, _ = adapter.generate(
prompt=f"Say hello to {name}",
model="gemini-2.5-flash",
)
return response
# Single call
result = greet("World")
print(result.text)
# Track multi-step agent flows
with execution() as exec_id:
step1 = greet("Alice")
step2 = greet("Bob")
# Start the server
phylax server
# Mark a known-good response as baseline
phylax bless <trace_id>
# In CI: fail if output violates declared expectations
phylax check # exits 1 on contract violation
That's it. Your CI now blocks LLM contract violations.
Supported Providers
| Provider | Adapter | Env Variable |
|---|---|---|
| OpenAI | OpenAIAdapter |
OPENAI_API_KEY |
| Gemini | GeminiAdapter |
GOOGLE_API_KEY |
| Groq | GroqAdapter |
GROQ_API_KEY |
| Mistral | MistralAdapter |
MISTRAL_API_KEY |
| HuggingFace | HuggingFaceAdapter |
HF_TOKEN |
| Ollama | OllamaAdapter |
OLLAMA_HOST |
from phylax import OpenAIAdapter, GroqAdapter, MistralAdapter
# All adapters share the same interface
adapter = GroqAdapter()
response, trace = adapter.generate(prompt="Hello!", model="llama3-70b-8192")
What Phylax is NOT
- ❌ Not monitoring or observability — no metrics, no dashboards, no analytics
- ❌ Not production runtime tooling — CI enforcement only
- ❌ Not AI-based judgment or scoring — rules are deterministic, never LLM-based
- ❌ Not exploratory prompt evaluation — tests outputs against declared contracts
- ❌ Not adaptive or heuristic-driven — exact match, explicit expectations
If you need subjective evaluation or live insights, Phylax is the wrong tool.
CI Integration (Primary Interface)
Phylax's primary interface is CI verdict enforcement.
# .github/workflows/phylax.yml
- run: phylax check
env:
GOOGLE_API_KEY: ${{ secrets.GOOGLE_API_KEY }}
Exit codes:
0— All golden traces pass declared expectations1— Contract violation detected
Commands
| Command | What it does |
|---|---|
phylax init |
Initialize config |
phylax server |
Start API server + UI |
phylax list |
List traces |
phylax list --failed |
Show only failed traces |
phylax show <id> |
Show trace details |
phylax replay <id> |
Re-run a trace |
phylax bless <id> |
Mark as golden baseline |
phylax check |
CI regression enforcement |
phylax --version |
Show version |
Capabilities
| Capability | Description |
|---|---|
| Trace Capture | Record every LLM call automatically |
| Expectations | Validate with @expect rules |
| Execution Context | Group traces by execution() context |
| Golden Traces | Baseline comparisons with hash verification |
| CI Enforcement | phylax check exits 1 on contract violation |
| Multi-Provider | OpenAI, Gemini, Groq, Mistral, HuggingFace, Ollama |
Auxiliary Control Surfaces
The UI and API are auxiliary control surfaces. Phylax's primary interface is CI verdict enforcement.
| Surface | Purpose |
|---|---|
| Web UI | Inspect traces at http://127.0.0.1:8000/ui |
| Golden Reference UI | Bless/unbless traces from interface |
| Trace ID Search | Find traces by ID |
| REST API | Programmatic trace access |
Architecture
phylax/
├── _internal/ # Core enforcement logic
│ ├── adapters/ # LLM provider adapters
│ ├── expectations/ # Deterministic rule engine
│ └── graph.py # Execution graphs
├── cli/ # CLI commands
├── server/ # API server
└── ui/ # Web interface
The API server exists to support Phylax operations (trace storage, golden management, CI verdicts). It is not an extensibility platform.
Demos
See the demos/ directory for runnable examples:
python demos/01_basic_trace.py # Basic tracing
python demos/02_expectations.py # All @expect rules
python demos/03_execution_context.py # Trace grouping
python demos/04_graph_nodes.py # Graph API
python demos/05_golden_workflow.py # CI workflow
python demos/06_raw_evidence.py # Evidence API
python demos/07_error_contracts.py # Error codes
Version
v1.2.6 STABLE
Stable means execution semantics and verdict behavior are frozen. Minor versions focus on correctness and misuse prevention.
Documentation
- Quickstart
- Providers
- Error Codes
- Correct Usage
- API Contract
- Graph Model
- Invariants
- Failure Modes
- Failure Playbook
- Mental Model
- Versioning
- Performance
- Execution Context
TL;DR
Phylax is a CI-native, deterministic regression enforcement system for LLM outputs. It records LLM behavior, evaluates explicit expectations, and fails builds when declared contracts regress. Phylax does not explain, score, or optimize outputs — it enforces consistency.
License
MIT License
Made with love❤️
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file phylax-1.3.0.tar.gz.
File metadata
- Download URL: phylax-1.3.0.tar.gz
- Upload date:
- Size: 6.9 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2d2594cc70d22c2268e62e28a8502b5bcd444fdc28355efffe69af13d711b976
|
|
| MD5 |
20033be7a4159769b111c7b233d56b0e
|
|
| BLAKE2b-256 |
b26b55416d2c10feea15ded7d3b1fe3e5106cd15ab484e52e23445da0738426e
|
File details
Details for the file phylax-1.3.0-py3-none-any.whl.
File metadata
- Download URL: phylax-1.3.0-py3-none-any.whl
- Upload date:
- Size: 6.9 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bd1a2126c66e4a8ccebd1e86e2b955fa5449e42e669aa2bfe44ed6df2fdb2d3c
|
|
| MD5 |
6432edbd35c2d67b235d00f49c278295
|
|
| BLAKE2b-256 |
d6d9c434c579020fef254602f6499b4dc74fe924570d7b050c7f514c83155f1e
|