131 lines
3.6 KiB
Python
131 lines
3.6 KiB
Python
"""
|
|
OpenAI backend tests for Response API.
|
|
|
|
Run with:
|
|
export OPENAI_API_KEY=your_key
|
|
python3 -m pytest py_test/e2e_response_api/test_openai_backend.py -v
|
|
python3 -m unittest e2e_response_api.test_openai_backend.TestOpenAIStateManagement
|
|
"""
|
|
|
|
import os
|
|
import sys
|
|
import unittest
|
|
from pathlib import Path
|
|
|
|
# Add current directory for imports
|
|
_TEST_DIR = Path(__file__).parent
|
|
sys.path.insert(0, str(_TEST_DIR))
|
|
|
|
# Import local modules
|
|
from base import ConversationCRUDBaseTest, ResponseCRUDBaseTest
|
|
from mcp import MCPTests
|
|
from router_fixtures import (
|
|
popen_launch_openai_xai_router,
|
|
popen_launch_workers_and_router,
|
|
)
|
|
from state_management import StateManagementTests
|
|
from util import kill_process_tree
|
|
|
|
|
|
class TestOpenaiBackend(
|
|
ResponseCRUDBaseTest, ConversationCRUDBaseTest, StateManagementTests, MCPTests
|
|
):
|
|
"""End to end tests for OpenAI backend."""
|
|
|
|
api_key = os.environ.get("OPENAI_API_KEY")
|
|
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
cls.model = "gpt-5-nano"
|
|
cls.base_url_port = "http://127.0.0.1:30010"
|
|
|
|
cls.cluster = popen_launch_openai_xai_router(
|
|
backend="openai",
|
|
base_url=cls.base_url_port,
|
|
history_backend="memory",
|
|
)
|
|
|
|
cls.base_url = cls.cluster["base_url"]
|
|
|
|
@classmethod
|
|
def tearDownClass(cls):
|
|
kill_process_tree(cls.cluster["router"].pid)
|
|
|
|
|
|
class TestXaiBackend(StateManagementTests):
|
|
"""End to end tests for XAI backend."""
|
|
|
|
api_key = os.environ.get("XAI_API_KEY")
|
|
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
cls.model = "grok-4-fast"
|
|
cls.base_url_port = "http://127.0.0.1:30023"
|
|
|
|
cls.cluster = popen_launch_openai_xai_router(
|
|
backend="xai",
|
|
base_url=cls.base_url_port,
|
|
history_backend="memory",
|
|
)
|
|
|
|
cls.base_url = cls.cluster["base_url"]
|
|
|
|
@classmethod
|
|
def tearDownClass(cls):
|
|
kill_process_tree(cls.cluster["router"].pid)
|
|
|
|
|
|
class TestGrpcBackend(StateManagementTests, MCPTests):
|
|
"""End to end tests for gRPC backend."""
|
|
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
cls.model = "/home/ubuntu/models/meta-llama/Llama-3.1-8B-Instruct"
|
|
cls.base_url_port = "http://127.0.0.1:30030"
|
|
|
|
cls.cluster = popen_launch_workers_and_router(
|
|
cls.model,
|
|
cls.base_url_port,
|
|
timeout=90,
|
|
num_workers=1,
|
|
tp_size=2,
|
|
policy="round_robin",
|
|
router_args=["--history-backend", "memory"],
|
|
)
|
|
|
|
cls.base_url = cls.cluster["base_url"]
|
|
|
|
@classmethod
|
|
def tearDownClass(cls):
|
|
kill_process_tree(cls.cluster["router"].pid)
|
|
for worker in cls.cluster.get("workers", []):
|
|
kill_process_tree(worker.pid)
|
|
|
|
@unittest.skip(
|
|
"TODO: transport error, details: [], metadata: MetadataMap { headers: {} }"
|
|
)
|
|
def test_previous_response_id_chaining(self):
|
|
super().test_previous_response_id_chaining()
|
|
|
|
@unittest.skip("TODO: return 501 Not Implemented")
|
|
def test_conversation_with_multiple_turns(self):
|
|
super().test_conversation_with_multiple_turns()
|
|
|
|
@unittest.skip("TODO: decode error message")
|
|
def test_mutually_exclusive_parameters(self):
|
|
super().test_mutually_exclusive_parameters()
|
|
|
|
@unittest.skip(
|
|
"TODO: Pipeline execution failed: Pipeline stage WorkerSelection failed"
|
|
)
|
|
def test_mcp_basic_tool_call(self):
|
|
super().test_mcp_basic_tool_call()
|
|
|
|
@unittest.skip("TODO: no event fields")
|
|
def test_mcp_basic_tool_call_streaming(self):
|
|
return super().test_mcp_basic_tool_call_streaming()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|