A single model is one point of failure. Run two labelers from different providers, diff their outputs, and adjudicate only where they disagree. The disagreement record is the audit trail.Documentation Index
Fetch the complete documentation index at: https://docs.agno.com/llms.txt
Use this file to discover all available pages before exploring further.
The flow
- Two labelers, two providers. Provider diversity is the signal. When OpenAI and Anthropic disagree, that is where the document is ambiguous.
- Reviewer diffs them. It emits one
FieldDisagreementper conflicting field and a singleneeds_adjudicationflag. Agreement short-circuits the expensive step. - Adjudicator runs only on disagreement. It re-reads the original input with both labels and the reviewer’s report, then returns the final record.
DisagreementReport is worth persisting. Disagreement rate by field, by vendor, and over time tells you where the schema or the prompt is weak.
Production composition
The example above is three sequential calls so the pattern is readable. For a million-document job, wrap labelers in aParallel step and gate the adjudicator behind a Condition in a Workflow. See parallel workflows and conditional workflows.
Production checklist
Agno gives you the orchestration primitives. These concerns are yours to add, and the cookbook is explicit about each.| Concern | What to add |
|---|---|
| Rate limiting | Wrap agent.arun with a per-provider limiter, or front it with a gateway. Agno does not throttle outbound calls. |
| Bounded concurrency | An asyncio.Semaphore around the batch fan-out. |
| Dead-letter queue | Record failed item IDs and re-run them through a stricter pass. |
| Idempotency | A deterministic session_id per item, so re-runs upsert instead of duplicate. |
| Provider Batch APIs | For non-urgent jobs, call the provider batch endpoints directly for the discount. Not wrapped by Agno. |
| Prompt versioning | Track a prompt_version in run metadata so historical labels stay joinable. |
| Authoritative cost | RunMetrics.cost is populated only when the provider returns it. Attach a token-rate table downstream if you need exact numbers. |
Next steps
| Task | Guide |
|---|---|
| Build the labelers | Structured extraction |
| Compose as a workflow | Workflows |
| Run agents concurrently | Async execution |