main
 1from typing import List
 2
 3import rich
 4from pydantic import BaseModel
 5
 6from openai import OpenAI
 7
 8
 9class Step(BaseModel):
10    explanation: str
11    output: str
12
13
14class MathResponse(BaseModel):
15    steps: List[Step]
16    final_answer: str
17
18
19client = OpenAI()
20
21rsp = client.responses.parse(
22    input="solve 8x + 31 = 2",
23    model="gpt-4o-2024-08-06",
24    text_format=MathResponse,
25)
26
27for output in rsp.output:
28    if output.type != "message":
29        raise Exception("Unexpected non message")
30
31    for item in output.content:
32        if item.type != "output_text":
33            raise Exception("unexpected output type")
34
35        if not item.parsed:
36            raise Exception("Could not parse response")
37
38        rich.print(item.parsed)
39
40        print("answer: ", item.parsed.final_answer)
41
42# or
43
44message = rsp.output[0]
45assert message.type == "message"
46
47text = message.content[0]
48assert text.type == "output_text"
49
50if not text.parsed:
51    raise Exception("Could not parse response")
52
53rich.print(text.parsed)
54
55print("answer: ", text.parsed.final_answer)