Skip to content
SynthWorldDeterministic identity benchmarks
Esc
navigateopen⌘Jpreview
On this page

Evaluating a system

Give the system under test only input explicitly documented as public. Normalize its output into the task prediction or trace contract, then score against evaluator truth outside the product path.

public input -> system under test -> prediction / trace
                                      |
evaluator truth ---------------------+--> metrics

Do not assume every generated bundle is product-safe. generate-public-extraction, generate-public-connections, and generate-risk-public emit product-facing projections. Outputs from evaluator or annotated commands such as generate-extraction and generate-connection-benchmark can contain expected answers and must not be passed wholesale to the system under test. For mixed-output commands, use only the subtree explicitly documented as public/.

Run the walkthrough. From a repository checkout:

uv sync --locked --all-groups
uv run python examples/evaluate_all.py --predictions-dir predictions

Replace an example rule with your own model, service, gateway, policy engine, or product while keeping the SynthWorld prediction-model construction as the adapter boundary.

Relationship-inference workflow

Use this task to test whether a system infers a relationship only when public evidence supports it. The corpus includes unilateral associations specifically to catch systems that infer too much from one weak signal.

Generate only the public product input:

synthworld generate-public-connections \
  --seed 20260719 \
  --persona-count 10 \
  --output relationship-input.json

Give relationship-input.json to the system under test. Normalize its output as a RelationshipPrediction: each edge names two public records, the relationship kind, and the public association records cited as evidence. The identifiers below are placeholders; use identifiers from the generated input.

{
  "schema_version": "0.1.0",
  "edges": [
    {
      "source_record_id": "record-uuid-a",
      "target_record_id": "record-uuid-b",
      "kind": "neighbor",
      "evidence_association_ids": ["association-uuid-a", "association-uuid-b"]
    }
  ]
}

Save that document as relationship-prediction.json, then score it with the same seed and persona count used to create the public input:

synthworld evaluate relationship \
  --predictions relationship-prediction.json \
  --seed 20260719 \
  --persona-count 10

The report separates edge quality from citation quality, so a correct relationship with unsupported evidence remains visible. Do not give the system the output of generate-connection-benchmark; that annotated artifact contains evaluator truth.

Validate before scoring. Use a task validator where one exists. Structural validity means a submission can be scored; it does not mean the system performed well.

synthworld validate agentic-trace --predictions predictions/agentic.jsonl

Generated enterprise-agentic worlds have an explicit artifact-root workflow in 0.15.0. The validator reads only public/; the evaluator subsequently requires the complete checksum-bound root:

synthworld validate generated-enterprise-agentic-trace \
  --benchmark-root generated-enterprise-agentic \
  --predictions predictions/generated-agentic.jsonl
synthworld evaluate generated-enterprise-agentic \
  --benchmark-root generated-enterprise-agentic \
  --predictions predictions/generated-agentic.jsonl \
  --summary

The adapter must replay public events in their declared order and query the system at each action event. See Agent authority for the temporal, topology, policy-decision-point, and provenance boundaries.

The composed enterprise authorization surface is Python-only. Its complete released-package flow, including public artifact custody and submission digests, is in Build and score an enterprise authorization experiment.

Run the evaluator only after the system output is durably available. Do not expose evaluator truth to the adapter merely because a frozen reference fixture is publicly inspectable.

Interpret metrics independently. A null metric is not zero; it means the prediction set did not make that metric meaningful under the task’s documented empty behavior. Do not hide weak dimensions behind an aggregate. Interpret every metric using its own denominator, support, polarity, scoring version, and empty behavior.

See the metrics reference and DATA_DICTIONARY.md for exact report contracts.

Record enough to reproduce the run. Retain benchmark identity, schema and scoring versions, seed and explicit configuration, artifact checksums, adapter/system provenance, and the exact prediction or trace bytes that were scored. A seed is one reproducibility input, not a substitute for the rest of the configuration.

Use the documentation site’s Guides navigation for task-specific workflows. For exact command availability, use the CLI reference and the installed command’s --help output.

Was this page helpful?