from typing import Literal, Optional
from agno.agent import Agent
from agno.media import File
from agno.models.openai import OpenAIResponses
from pydantic import BaseModel
Confidence = Literal["high", "medium", "low"]
class ConfidentField(BaseModel):
value: Optional[str] = None
confidence: Confidence
class Invoice(BaseModel):
invoice_number: ConfidentField
vendor: ConfidentField
invoice_date: ConfidentField
total: ConfidentField
agent = Agent(
model=OpenAIResponses(id="gpt-5.5"),
instructions=(
"Extract invoice fields. For each field, report confidence: "
"high (explicit on the document), medium (inferred from structure), "
"low (guessed, partly obscured, or ambiguous). Be conservative."
),
output_schema=Invoice,
)
invoice = agent.run(
"Extract this invoice.",
files=[File(url="https://example.com/scan-low-quality.pdf")],
).content
# Invoice(invoice_number=ConfidentField(value='1042', confidence='high'),
# vendor=ConfidentField(value='Acme Corp', confidence='high'),
# invoice_date=ConfidentField(value=None, confidence='low'),
# total=ConfidentField(value='1296.0', confidence='medium'))