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
21with client.chat.completions.stream(
22 model="gpt-4o-2024-08-06",
23 messages=[
24 {"role": "system", "content": "You are a helpful math tutor."},
25 {"role": "user", "content": "solve 8x + 31 = 2"},
26 ],
27 response_format=MathResponse,
28) as stream:
29 for event in stream:
30 if event.type == "content.delta":
31 print(event.delta, end="", flush=True)
32 elif event.type == "content.done":
33 print("\n")
34 if event.parsed is not None:
35 print(f"answer: {event.parsed.final_answer}")
36 elif event.type == "refusal.delta":
37 print(event.delta, end="", flush=True)
38 elif event.type == "refusal.done":
39 print()
40
41print("---------------")
42rich.print(stream.get_final_completion())