structured output — making the model return json9 / 9
schemas, pydantic, and validation — making the model return real data
Checkpoint
One last thing before we move on. Same surface as a write step — but the lesson doesn't complete until this passes.
Final drill. Write safe_extract(raw) that parses a JSON string the
model returned and validates a Ticket shape:
emailmust be a non-emptystrseveritymust be anintbetween 1 and 5 inclusive
If any check fails, return the dict {"ok": False, "error": "<reason>"}
where <reason> is one of "bad json", "missing email",
"bad severity". On success, return {"ok": True, "data": <parsed dict>}.
Then the script will run it on three inputs and print the result of each. Expected output:
ok=True email=maya@promptdojo.dev
ok=False error=missing email
ok=False error=bad severity
⌘↵ runs the editor.
Booting Python…
Output
[promptdojo:~]$ _