Agent produces an EvalReport; one line exports it as an EvalPort ResultSet:
Quick Start
1
Export a suite
Build an
EvalPackage and export it as an EvalPort suite dict:2
Import a suite from another tool
Load an EvalPort suite dict from any compatible tool, then run it:
3
Export a run report
Run a suite to get an
EvalReport, then persist it as an EvalPort ResultSet:How It Works
The adapter maps native dataclasses to plain EvalPort dicts and back, so PraisonAI and external harnesses trade suites over the shared spec. Three module-level functions cover every direction — pick one by what you hold:
A round trip is lossless —
from_evalport(to_evalport(pkg)) reproduces the original package’s to_dict().
Spec Mapping
Native models map 1:1 onto EvalPort concepts.
A suite dict from
to_evalport looks like this:
report_to_evalport looks like this:
Configuration Options
The adapter is dependency-free and exposes three functions — no config classes.Full Python API for the eval package, including
to_evalport, from_evalport, and report_to_evalportCommon Patterns
Round-trip a suite locally to prove fidelity:HarnessEvaluator:
openeval package:
Best Practices
Timeouts live at the top level, never in metadata
Timeouts live at the top level, never in metadata
to_evalport writes timeout_seconds at the top of each case, so a user-supplied metadata["timeout_seconds"] can never clobber the native value. On import the adapter prefers the top-level field and only falls back to metadata["timeout_seconds"] for suites emitted by other tools — that is what keeps round trips lossless.Validate with openeval when you need schema guarantees
Validate with openeval when you need schema guarantees
The adapter emits plain dicts and validates nothing. Validation is opt-in and lives in your own code via
openeval.validate.validate_suite() and validate_result_set() — install openeval only in the environment that runs those checks.Prefer graders / expected_output / id on export
Prefer graders / expected_output / id on export
Exports use the canonical spec keys (
id, expected_output, graders). The importer also accepts the fallbacks name, expected, and criteria for compatibility with older or external tools, so external suites with only name and cases[*].id/input still import — missing fields default sensibly.Keep the core SDK dependency-free
Keep the core SDK dependency-free
The adapter never imports
evalport-sdk or openeval. Install validation packages only where you validate, so the core SDK stays lightweight everywhere else.Related
Evaluation Suite
Run every evaluator as one CI gate
Harness Evaluator
Score Interactive Test Harness traces
Judge
LLM-as-judge for evaluating outputs
Evaluation
Evaluators, suites, and reports

