Skip to main content
The EvalPort adapter converts native eval suites and reports to and from the EvalPort open spec so your agents interoperate with any EvalPort-compatible tool. An 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:
A result set from 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_evalport

Common Patterns

Round-trip a suite locally to prove fidelity:
Import a third-party EvalPort suite and run it through HarnessEvaluator:
Export a report and validate it with the external openeval package:

Best Practices

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.
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.
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.
The adapter never imports evalport-sdk or openeval. Install validation packages only where you validate, so the core SDK stays lightweight everywhere else.

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