1import pytest
 2from openai import OpenAI
 3from utils import *
 4
 5server: ServerProcess
 6
 7@pytest.fixture(autouse=True)
 8def create_server():
 9    global server
10    server = ServerPreset.tinyllama2()
11
12def test_responses_with_openai_library():
13    global server
14    server.start()
15    client = OpenAI(api_key="dummy", base_url=f"http://{server.server_host}:{server.server_port}/v1")
16    res = client.responses.create(
17        model="gpt-4.1",
18        input=[
19            {"role": "system", "content": "Book"},
20            {"role": "user", "content": "What is the best book"},
21        ],
22        max_output_tokens=8,
23        temperature=0.8,
24    )
25    assert res.id.startswith("resp_")
26    assert res.output[0].id is not None
27    assert res.output[0].id.startswith("msg_")
28    assert match_regex("(Suddenly)+", res.output_text)
29
30def test_responses_stream_with_openai_library():
31    global server
32    server.start()
33    client = OpenAI(api_key="dummy", base_url=f"http://{server.server_host}:{server.server_port}/v1")
34    stream = client.responses.create(
35        model="gpt-4.1",
36        input=[
37            {"role": "system", "content": "Book"},
38            {"role": "user", "content": "What is the best book"},
39        ],
40        max_output_tokens=8,
41        temperature=0.8,
42        stream=True,
43    )
44
45    gathered_text = ''
46    resp_id = ''
47    msg_id = ''
48    for r in stream:
49        if r.type == "response.created":
50            assert r.response.id.startswith("resp_")
51            resp_id = r.response.id
52        if r.type == "response.in_progress":
53            assert r.response.id == resp_id
54        if r.type == "response.output_item.added":
55            assert r.item.id is not None
56            assert r.item.id.startswith("msg_")
57            msg_id = r.item.id
58        if (r.type == "response.content_part.added" or
59            r.type == "response.output_text.delta" or
60            r.type == "response.output_text.done" or
61            r.type == "response.content_part.done"):
62            assert r.item_id == msg_id
63        if r.type == "response.output_item.done":
64            assert r.item.id == msg_id
65
66        if r.type == "response.output_text.delta":
67            gathered_text += r.delta
68        if r.type == "response.completed":
69            assert r.response.id.startswith("resp_")
70            assert r.response.output[0].id is not None
71            assert r.response.output[0].id.startswith("msg_")
72            assert gathered_text == r.response.output_text
73            assert match_regex("(Suddenly)+", r.response.output_text)