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)