← Lesson
Structured Output
Joeven
Run
Reset
Python loads on first run
import json SCHEMA_KEYS = {"action", "job_id"} ACTIONS = {"get_job", "finish"} def validate(obj): if not isinstance(obj, dict): return "not an object" extra = set(obj) - SCHEMA_KEYS missing = SCHEMA_KEYS - set(obj) if extra: return "extra keys: " + str(sorted(extra)) if missing: return "missing keys: " + str(sorted(missing)) if obj["action"] not in ACTIONS: return "bad action" if not isinstance(obj["job_id"], int) or obj["job_id"] < 0: return "bad job_id" return None def parse_model_text(text): try: obj = json.loads(text) except json.JSONDecodeError as e: return None, "json error: " + e.msg err = validate(obj) return (obj, None) if not err else (None, err) def run_with_retry(raw_outputs): errors = [] for i, raw in enumerate(raw_outputs, start=1): obj, err = parse_model_text(raw) print("attempt", i, "raw", raw, "->", err or obj) if not err: return obj errors.append(err) return {"action": "finish", "job_id": 0, "handoff": True, "errors": errors} script = [ "Sure, let's get_job(17)", '{"action": "get_job", "job_id": 17}', ] print("result", run_with_retry(script))
Run to execute this in your browser. Nothing is sent to a server.