Skip to main content

EIO-Agents — Evaluation Intelligence Ontology for AI Agents (Standard Semantic Layer)

PyPI Python License

Evaluation stack: agent infrastructure, evaluation framework, EIO-Agents semantic layer, and Portable Evaluation Record

The semantic layer for AI-agent evaluation: the Evaluation Intelligence Ontology (EIO) and the Portable Evaluation Record (PER 2.1). Convert, validate, verify, explain.

The EIO semantic layer · Schema reference · See a PER example · Read the quick start · How a score is built, in plain language

From evaluation to evidence

You provide EIO-Agents produces You can check
A native evaluation bundle with observed turns, sources, and decisions A PER with cited claims, findings, measured or withheld scores, provenance, and a content digest Schema and semantic validity, source consistency, and a human-readable explanation

ProofAgent Harness is one possible evaluation producer; EIO-Agents does not require it. The raw bundle remains local. Review a PER before sharing it, because permitted redacted excerpts and metadata can still be sensitive.

What the semantic layer adds

Layer What it makes portable
EIO ontology Named agent-behaviour predicates, evidence requirements, context criteria, metrics, and qualified framework-control links.
EIO-Agents A checked mapping from a producer's observations to EIO claims, findings, Q/E/C/G axes, and readiness—measured only where the source supports them.
PER A versioned record of those claims, citations, scores or withheld reasons, release recommendation, provenance, and digest that another party can validate and verify against the local bundle.

Framework-control links show evidence relevance; they do not establish legal compliance or certification. See the predicate reference, production routes, and PER guide.

Evaluation-platform agnostic

Many producers, one portable record: ProofAgent Harness as a native producer, and Inspect AI, promptfoo, DeepEval, OpenTelemetry GenAI and your own report through export converters, all build the same EIO bundle, which EIO-Agents turns into one PER 2.1.0

A PER does not depend on who ran the evaluation. A native producer records EIO evidence during the run; an export converter maps a finished report through an explicit crosswalk. Both build the same EIO bundle with build_bundle(), and EIO-Agents turns it into the same PER 2.1.0. The repository has a converter for Inspect AI, promptfoo, DeepEval, OpenTelemetry GenAI and your own report, plus a native producer sketch in the style of ProofAgent Harness. They are illustrative examples with synthetic data: none of these tools is required, and none emits a PER on its own. See native versus export for what each route can and cannot prove.

Install

With Python 3.10 or newer:

pip install eio-agents

The package depends only on pyyaml and jsonschema and installs the eio-agents command.

If pip reports no matching version, check python3 --version, your package index, and whether the requested release has been published. EIO-Agents requires Python 3.10 or newer; use a compatible interpreter, for example python3.13 -m pip install eio-agents.

Try the synthetic example

Download the synthetic sample bundle, then project, validate, verify, and explain it:

curl -fsSLO https://raw.githubusercontent.com/ProofAgent-ai/eio-agents/v0.8.0/tests/data/native/v0_8/source-complete.bundle.json
eio-agents project source-complete.bundle.json -o native.per.json --jcs native.per.jcs
eio-agents validate native.per.json
eio-agents verify native.per.json --bundle source-complete.bundle.json
eio-agents explain native.per.json --list
eio-agents explain native.per.json readiness

The last command prints:

Readiness: 42.0448/100 (recorded). Raw weighted score: 42.0448/100.

From a metric to its evidence

Every EIO score is built from claims: one predicate, checked on specific turns, decided APPLICABLE_PASS or APPLICABLE_FAIL, and citing the evidence it was decided on. In the sample, Hallucination Resistance scores 0 because of one failed claim:

eio-agents explain native.per.json eio.metric.hallucination-resistance
eio.metric.hallucination-resistance: 0.0/100 (recorded). Member claims: 1; passed: 0; failed: 1; other: 0; turn indices: 3.

The member claim in native.per.json (abridged) names the predicate, the turn, how it was decided, and the evidence it cites:

{
  "id": "6187652618a2ce18bbb2",
  "predicate": "eio.predicate.authority-or-deadline-invented",
  "turn_indices": [3],
  "state": "APPLICABLE_FAIL",
  "decided_by": "deterministic",
  "evidence": ["0035374b615054c8059b", "027ad96d31097ef9192d"]
}

The failed claim becomes a finding. evidence resolves the citations to the observed turns:

eio-agents evidence native.per.json 4f8b54fd10edb0bcd760
t03 · authority-or-deadline-invented | 4f8b54fd10edb0bcd760 | unrated | UNPROVEN
Turn 3: AGENT_SPAN | ref 0035374b615054c8059b
  Quote: By law you must return items within 7 days
Turn 3: USER_INPUT | ref 027ad96d31097ef9192d
  Quote: What is the deadline for returning an item?

So the score traces back to a quoted line: the agent invented a legal deadline. The finding is unrated: no in-scope obligation targets its predicate, so the record assigns it no severity. A metric with no decided claim, such as Instruction Following in this sample, is WITHHELD rather than guessed. Run explain --list for every metric, axis, control, gate, and finding you can inspect; the overview follows a report through every step from claims to readiness.

The sample declares no release policy, so its release recommendation is REVIEW: with no policy, a readiness below the default floor of 85, or any unmet HARD_BLOCK obligation, sends the record to a human (release semantics 2.2). BLOCK still requires a proven failure. eio-agents explain native.per.json release_recommendation states why:

REVIEW: 2 decisive condition(s): eio.release.default-readiness-floor (expected readiness >= 85.0, observed 42.0) -> REVIEW, eio.release.hard-block-unmet (expected 0, observed 2) -> REVIEW. 7 contributing condition(s) do not change the state under semantics 2.2. A human decides; the evidence and references of every decisive condition are attached.

verify --bundle re-derives the PER and checks its digest against the local source; it does not prove the original evaluation or an agent is safe. The sample's score is not a production sign-off.

Convert your own report

If your evaluator records the conversation and its checks, build_bundle turns them into a bundle; convert makes the PER:

import eio_agents

bundle = eio_agents.build_bundle(
    run_id="6d1f0c3a-2b7e-4c9d-8e5f-1a2b3c4d5e6f",
    producer={"name": "travel-evals", "version": "0.3.0"},
    agent={"id": "travel-bot", "version": "1.0.0", "model": "acme/travel-llm"},
    started_at="2026-10-01T14:00:00Z", completed_at="2026-10-01T14:00:30Z",
    turns=[{"user": "Is there a fee if I cancel?",
            "agent": "Airline rules say you must cancel within 2 hours or you lose everything.", "tools": []}],
    checks=[{"turn": 1, "predicate": "authority-or-deadline-invented", "passed": False,
             "quote": "Airline rules say you must cancel within 2 hours"}],
)
record = eio_agents.convert(bundle)
assert eio_agents.verify(record, bundle)["valid"]

Each check names an EIO predicate (eio-agents predicates --search deadline finds one) and quotes the agent's own words; a quote the agent did not say, an unknown predicate or a turn that does not exist is refused with an error that names the field. See the worked example, native versus adapter guide, OpenTelemetry GenAI trace example, API reference and predicate reference.

Versions and limits

  • Package: 0.8.3 · ontology: EIO 0.6.0 · record: PER 2.1.0 (every new record; release semantics 2.2) · bundle: format 3.0.0 · reference scoring profile: 0.3.1. Missing inputs leave affected values WITHHELD, never guessed. Older records and bundles keep their legacy versions and stay verifiable under them.
  • Open format: PER 2.1.0 uses JSON Schema 2020-12 and EIO publishes a JSON-LD context (see Schemas and reference files). Every schema is also bundled in the package for offline validation. It is a versioned ProofAgent specification, not a W3C- or ISO-ratified standard or a compliance certification.
  • Framework mappings: provisional evidence-relevance links, not legal or regulatory compliance determinations. Historical ProofAgent report conversion requires the matching adapter and pinned EIO release.

For local-text privacy boundaries, CLI targets, and your own bundle, see the quick start. For the complete record structure and dashboard-style example, see the PER guide.

Schemas and reference files

The website is the reference for every machine-readable contract. Each schema's $id is its URL, and the same bytes are bundled in the package (eio_agents.schemas), so validation works offline. The field-by-field documentation is the schema reference.

File URL Where a record uses it
PER 2.1.0 JSON Schema https://www.proofagent.ai/eio-agents/schema/per/2.1.0/per.schema.json header.schema_uri of every new record
PER 2.0.0 JSON Schema https://www.proofagent.ai/eio-agents/schema/per/2.0.0/per.schema.json header.schema_uri of earlier records
EIO 0.6.0 JSON-LD context https://www.proofagent.ai/eio-agents/schema/eio/0.6.0/eio-context-0.6.0.jsonld maps record fields to EIO terms
EIO 0.6.0 manifest https://www.proofagent.ai/eio-agents/schema/eio/0.6.0/ontology/data/manifest.yaml header.eio.release
EIO 0.6.0 release digests https://www.proofagent.ai/eio-agents/schema/eio/0.6.0/ontology/data/RELEASE-DIGESTS.json header.eio.ontology_sha256 and header.eio.modules
Evaluation claim schema https://www.proofagent.ai/eio-agents/schema/eio/0.6.0/evaluation-claim.schema.json one entry of claims[]
Evidence graph schema https://www.proofagent.ai/eio-agents/schema/eio/0.6.0/evidence-graph.schema.json the local evidence graph that claims cite
Ontology module schema https://www.proofagent.ai/eio-agents/schema/eio/0.6.0/module.schema.json each ontology module file

One definition or field is addressed with a JSON Pointer after the schema URL, for example https://www.proofagent.ai/eio-agents/schema/per/2.1.0/per.schema.json#/$defs/claim/properties/predicate. Each hash in header.eio.modules is the sha256 of the module file published under https://www.proofagent.ai/eio-agents/schema/eio/0.6.0/ontology/data/, so a record can be checked against the website without trusting its producer:

check-jsonschema --schemafile https://www.proofagent.ai/eio-agents/schema/per/2.1.0/per.schema.json record.per.json

The evaluation-bundle format 3.0.0 (urn:eio-agents:schema:bundle:3.0.0) is packaged as eio_agents/schemas/bundle/bundle-3.0.0.schema.json; a bundle stays local and is read only by EIO-Agents.

Develop and contribute

git clone https://github.com/ProofAgent-ai/eio-agents.git && cd eio-agents
python3 -m venv .venv
.venv/bin/pip install -e '.[test]'
.venv/bin/python -m pytest -q tests
.venv/bin/python tools/eio_gates.py

Created by Dr. Fouad Bousetouane. Maintained by ProofAI LLC under the ProofAgent brand. Code, ontology data, and schemas are Apache-2.0 licensed; see NOTICE, contribution guidelines, and security policy. Support and private security reports: support@proofagent.ai.

Metadata

Release files for eio-agents 0.8.5

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

Source distribution (sdist)

Source distribution for eio-agents 0.8.5
File Size Uploaded
eio_agents-0.8.5.tar.gz 2.0 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for eio-agents 0.8.5
File Interpreter ABI Platform
eio_agents-0.8.5-py3-none-any.whl Python 3 none any Details

Total release size: 3.1 MB

Release files / eio_agents-0.8.5.tar.gz

Download URL eio_agents-0.8.5.tar.gz
Size 2.0 MB
Tags Source
SHA-256 checksum
How to use checksums
28209efa1a105e2df1b90b02f31f7f88c5feed32ccffdc84a3d527643b944e30
BLAKE2b-256 checksum
How to use checksums
70c63c51fc2f8897a05a160d1562d9bf651c8bbe00a121e380e0e536d2d28215
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 6, 2026.

Transparency log

Release files / eio_agents-0.8.5-py3-none-any.whl

Download URL eio_agents-0.8.5-py3-none-any.whl
Size 1.1 MB
Tags Python 3
SHA-256 checksum
How to use checksums
e3ec90a92a1e6b174d046662ab780d19fde7b014d1018b6953d07a42b265fbf2
BLAKE2b-256 checksum
How to use checksums
f713b7d6cf4366c30d3b3df19e0220f1909fe09c6f29385bfda1c0993235312f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 6, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.8.5 This release

2 release files

0.8.4

2 release files

0.8.3

2 release files

0.8.1

2 release files

0.8.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