Skip to main content

Panner AI: Precision Testing for AI Agents

License Python

Test framework for AI agents. Combines HTTP testing (status codes, JSON validation) with LLM-powered semantic evaluation, baseline tracking, and regression detection.

The Problem

Testing AI agents is hard. Traditional assertions (status codes, latency) catch infrastructure failures. But they don't catch semantic regressions — when the agent's logic degrades subtly.

Panner AI bridges this gap by treating LLM judges (Claude, GPT-4) as first-class test evaluators.

The Solution

# Define test cases with semantic assertions
- name: approve_strong_credit
  endpoint: "http://localhost:8000/apply"
  method: POST
  body:
    name: "Alice"
    income: 100000
    credit_score: 780
  assertions:
    - type: status_code
      expected: 200
    - type: json_schema
      schema: { ... }
    - type: llm_judge  # ← LLM evaluates semantic correctness
      prompt: "Is this approval decision reasonable?"
      min_score: 0.85

Run:

panner-ai run tests/suites/loan_approval.yaml --reporter terminal --baseline-file baseline.json

Output:

✅ approve_strong_credit (1.8s) — 3/3 assertions passed
✅ deny_poor_credit (1.9s) — 2/2 assertions passed
Summary: 2 passed, 0 failed

Installation

pip install panner-ai

Quick Start

1. Create a test suite (YAML)

name: Loan Approval Tests
test_cases:
  - name: approve_good_credit
    endpoint: "http://localhost:8000/apply"
    method: POST
    body:
      name: "Alice"
      income: 100000
      credit_score: 780
      loan_amount: 15000
    assertions:
      - type: status_code
        expected: 200
      - type: llm_judge
        prompt: "Is this a reasonable approval?"
        min_score: 0.85

2. Run tests

panner-ai run tests/loan_approval.yaml --reporter terminal

3. Track regressions

panner-ai run tests/loan_approval.yaml \
  --reporter terminal,json \
  --output results.json \
  --baseline-file baseline.json

Key Features

Feature Details
Async HTTP Testing Concurrent requests (5 workers by default)
Assertion Types Status code, latency, JSON schema, regex, LLM judge
LLM-as-Judge Semantic correctness via Claude/GPT-4
Baseline Tracking Regression detection (10% score drop threshold)
Multi-format Reports Terminal, JUnit XML (CI), JSON (telemetry)
GitHub Actions Built-in CI/CD integration

Assertion Types

  • status_code — HTTP response code validation
  • latency — Response time threshold (max_ms)
  • json_schema — Response body schema validation
  • regex — Pattern matching on response body
  • llm_judge — Semantic correctness (0.0–1.0 score)

Configuration

panner-ai run [OPTIONS] SUITE

Options:
  --reporter, -r       Output format (terminal, junit, json)
  --output, -o         Output file path
  --baseline-file, -b  Path to baseline.json for regression detection
  --help               Show help

Regression Detection

Panner AI stores test scores in baseline.json:

{
  "suite_name": "regression",
  "tests": [
    {
      "name": "semantic_check",
      "score": 0.95,
      "commit_sha": "a0ebd54",
      "timestamp": "2026-08-31T01:21:00Z"
    }
  ]
}

Regression threshold: Score drop > 10% blocks PR merge in CI.

Architecture

Functional Core + Imperative Shell:

  • Pure evaluators (regex, latency, LLM judge)
  • Immutable domain types
  • Async HTTP executor with concurrency control
  • Storage-agnostic baseline tracking

Examples

Complete, production-ready examples in the repository:

  • examples/loan-approval-agent/ — Full FastAPI agent with test suite
    • 300+ lines of production code
    • Comprehensive test suite (4+ test cases)
    • Detailed setup and API reference

Run locally:

cd examples/loan-approval-agent
pip install -r requirements.txt
export ANTHROPIC_API_KEY="***"
python agent.py
panner-ai run tests/suites/loan_approval.yaml --reporter terminal

Performance

  • Smoke tests: <1 minute
  • Regression suite: ~5 minutes
  • Concurrency: 5 workers (configurable)
  • LLM evaluation: ~1-2 seconds per test (vendor dependent)

Testing

pytest tests/ -v --cov=src/panner_ai --cov-report=term-missing

Minimum coverage: 80% (enforced by CI/CD)

GitHub Actions

Built-in CI/CD integration with:

  • Smoke tests (2 fast checks, <1min)
  • Regression tests (8 comprehensive tests, ~5min)
  • Artifact upload (90-day retention)
  • PR checks with JUnit XML parsing

Documentation

Contributing

We welcome contributions! See CONTRIBUTING.md for:

  • Setup instructions
  • Code standards (Ruff linting, 80%+ coverage)
  • PR workflow
  • Contribution ideas (🟢 easy to 🔴 hard)

All skill levels welcome. Good first issues labeled #good-first-issue.

Support

License

MIT License — See LICENSE for details.


Completely standalone: Works with any HTTP API and LLM provider. Part of the CraftedWithIntent ecosystem for production AI systems.

Metadata

Release files for panner-ai 0.1.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for panner-ai 0.1.4
File Size Uploaded
panner_ai-0.1.4.tar.gz 65.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for panner-ai 0.1.4
File Interpreter ABI Platform
panner_ai-0.1.4-py3-none-any.whl Python 3 none any Details

Total release size: 87.9 kB

Release files / panner_ai-0.1.4.tar.gz

Download URL panner_ai-0.1.4.tar.gz
Size 65.7 kB
Tags Source
SHA-256 checksum
How to use checksums
cefe2317d333aeb6d897f2cd4b1f334c1fdfc3a4757da8cb3e1a54028f88513e
BLAKE2b-256 checksum
How to use checksums
466d2528efab2f4d562e9591190f5c87467fa2f7dbe5972fc110deea35154319
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.9.6

Release files / panner_ai-0.1.4-py3-none-any.whl

Download URL panner_ai-0.1.4-py3-none-any.whl
Size 22.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
efafe49f7eb37feb7d34a368dc068df146cf224cf8b9154c023ad67f70683532
BLAKE2b-256 checksum
How to use checksums
9b2ad884b7b664d73bfc7f5fcb5a3fe3deeb04ab0e649b8d144d34892be46e2e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.9.6

Release history Release notifications | RSS feed

This release

0.1.4 This release

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page