Local-first decision engine for baseline vs candidate LLM output checks.
Project description
BreakPoint AI
Prevent bad AI releases before they hit production.
You change a model. The output looks fine. But:
- Cost jumps +38%.
- A phone number slips into the response.
- The format breaks your downstream parser.
BreakPoint catches it before you deploy.
It runs locally. Policy evaluation is deterministic from your saved artifacts. It gives you one clear answer:
ALLOW · WARN · BLOCK
Quick Example
breakpoint evaluate baseline.json candidate.json
STATUS: BLOCK
Reasons:
- Cost increased by 38% (baseline: 1,000 tokens -> candidate: 1,380)
- Detected US phone number pattern
Ship with confidence.
Lite First (Default)
This is all you need to get started:
breakpoint evaluate baseline.json candidate.json
Lite is local, deterministic, and zero-config. Out of the box:
- Cost:
WARNat+20%,BLOCKat+40% - PII:
BLOCKon first detection (email, phone, credit card) - Drift:
WARNat+35%,BLOCKat+70% - Empty output: always
BLOCK
Advanced option: Need config-driven policies, output contract, latency, presets, or waivers? Use --mode full and see docs/user-guide-full-mode.md.
Full Mode (If You Need It)
Add --mode full when you need config-driven policies, output contract, latency, presets, or waivers. Full details: docs/user-guide-full-mode.md.
breakpoint evaluate baseline.json candidate.json --mode full --json --fail-on warn
CI First (Recommended)
breakpoint evaluate baseline.json candidate.json --json --fail-on warn
Why this is the default integration path:
- Machine-readable decision payload (
schema_version,status,reason_codes, metrics). - Non-zero exit code on risky changes.
- Easy to wire into existing CI without additional services.
Default policy posture (out of the box, Lite):
- Cost:
WARNat+20%,BLOCKat+40% - PII:
BLOCKon first detection - Drift:
WARNat+35%,BLOCKat+70%
Copy-Paste GitHub Actions Gate
Use the template:
examples/ci/github-actions-breakpoint.yml
Copy it to:
.github/workflows/breakpoint-gate.yml
What --fail-on warn means:
- Any
WARNorBLOCKfails the CI step. - Exit behavior remains deterministic:
ALLOW=0,WARN=1,BLOCK=2.
If you only want to fail on BLOCK, change:
BREAKPOINT_FAIL_ON: warnto:BREAKPOINT_FAIL_ON: block
Try In 60 Seconds
pip install -e .
make demo
What you should see:
- Scenario A:
BLOCK(cost spike) - Scenario B:
BLOCK(format/contract regression) - Scenario C:
BLOCK(PII + verbosity drift) - Scenario D:
BLOCK(small prompt change -> cost blowup)
Four Realistic Examples
Baseline for all examples:
examples/install_worthy/baseline.json
1) Cost regression after model swap
breakpoint evaluate examples/install_worthy/baseline.json examples/install_worthy/candidate_cost_model_swap.json
Expected: BLOCK
Why it matters: output appears equivalent, but cost increases enough to violate policy.
2) Structured-output behavior regression
breakpoint evaluate examples/install_worthy/baseline.json examples/install_worthy/candidate_format_regression.json
Expected: BLOCK
Why it matters: candidate drops expected structure and drifts from baseline behavior.
3) PII appears in candidate output
breakpoint evaluate examples/install_worthy/baseline.json examples/install_worthy/candidate_pii_verbosity.json
Expected: BLOCK
Why it matters: candidate introduces PII and adds verbosity drift.
4) Small prompt change -> big cost blowup
breakpoint evaluate examples/install_worthy/baseline.json examples/install_worthy/candidate_killer_tradeoff.json
Expected: BLOCK
Why it matters: output still looks workable, but detail-heavy prompt changes plus a model upgrade create large cost and latency increases with output-contract drift.
More scenario details:
docs/install-worthy-examples.md
CLI
Evaluate two JSON files:
breakpoint evaluate baseline.json candidate.json
Evaluate a single combined JSON file:
breakpoint evaluate payload.json
JSON output for CI/parsing:
breakpoint evaluate baseline.json candidate.json --json
Exit-code gating options:
# fail on WARN or BLOCK
breakpoint evaluate baseline.json candidate.json --fail-on warn
# fail only on BLOCK
breakpoint evaluate baseline.json candidate.json --fail-on block
Stable exit codes:
0=ALLOW1=WARN2=BLOCK
Waivers, config, presets: see docs/user-guide-full-mode.md.
Input Schema
Each input JSON is an object with at least:
output(string)
Optional fields used by policies:
cost_usd(number)model(string)tokens_total(number)tokens_in/tokens_out(number)latency_ms(number)
Combined input format:
{
"baseline": { "output": "..." },
"candidate": { "output": "..." }
}
Python API
from breakpoint import evaluate
decision = evaluate(
baseline_output="hello",
candidate_output="hello there",
metadata={"baseline_tokens": 100, "candidate_tokens": 140},
)
print(decision.status)
print(decision.reasons)
Additional Docs
docs/user-guide.mddocs/user-guide-full-mode.md(Full mode: config, presets, environments, waivers)docs/terminal-output-lite-vs-full.md(Lite vs Full terminal output, same format)docs/quickstart-10min.mddocs/install-worthy-examples.mddocs/baseline-lifecycle.mddocs/ci-templates.mddocs/value-metrics.mddocs/policy-presets.mddocs/release-gate-audit.md
Contact
Suggestions and feedback: c.holmes.silva@gmail.com or open an issue.
Project details
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 breakpoint_ai-0.1.3.tar.gz.
File metadata
- Download URL: breakpoint_ai-0.1.3.tar.gz
- Upload date:
- Size: 39.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
28399c6ef480eaf9488d915095f6b34b248ba0632d969b203e870e0d73df5770
|
|
| MD5 |
43cf1b4e887c3a277410099fa1bb2d12
|
|
| BLAKE2b-256 |
a83ad824012e9291ab82d86e65c8e4a189cb7fd51ed6df9663b0291c80158aa0
|
File details
Details for the file breakpoint_ai-0.1.3-py3-none-any.whl.
File metadata
- Download URL: breakpoint_ai-0.1.3-py3-none-any.whl
- Upload date:
- Size: 36.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e4fe7e1a599b1c0378a5ddb40dc1736d1c03cae2b1171d84ea2e478a42d08aca
|
|
| MD5 |
131562522d95a41b506d334dd07f8f69
|
|
| BLAKE2b-256 |
87955f9812e7c37eb94e9d8a0a2492f4abcf08996460b4c37cb3861f2b248b02
|