test_compat_oai_responses.py 2.5 KB

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