Spaces:
Sleeping
Sleeping
import requests | |
import json | |
import time | |
from typing import Dict, Any | |
class APITester: | |
def __init__(self, base_url: str = "http://localhost:8000"): | |
self.base_url = base_url | |
self.session = requests.Session() | |
def test_health_check(self) -> None: | |
"""Test the health check endpoint.""" | |
print("\n=== Testing Health Check Endpoint ===") | |
try: | |
response = self.session.get(f"{self.base_url}/health_check") | |
print(f"Status Code: {response.status_code}") | |
print(f"Response: {response.json()}") | |
assert response.status_code == 200 | |
print("β Health check test passed!") | |
except Exception as e: | |
print(f"β Health check test failed: {str(e)}") | |
def test_models(self) -> None: | |
"""Test the models endpoint.""" | |
print("\n=== Testing Models Endpoint ===") | |
try: | |
response = self.session.get(f"{self.base_url}/models") | |
print(f"Status Code: {response.status_code}") | |
data = response.json() | |
print(f"Number of models available: {len(data['data'])}") | |
print("Sample models:") | |
for model in data['data'][:5]: # Show first 5 models | |
print(f"- {model['id']}") | |
assert response.status_code == 200 | |
print("β Models endpoint test passed!") | |
except Exception as e: | |
print(f"β Models endpoint test failed: {str(e)}") | |
def test_chat_completions_non_streaming(self) -> None: | |
"""Test the chat completions endpoint without streaming.""" | |
print("\n=== Testing Chat Completions Endpoint (Non-Streaming) ===") | |
payload = { | |
"model": "gpt-3.5-turbo", | |
"messages": [ | |
{"role": "system", "content": "You are a helpful assistant."}, | |
{"role": "user", "content": "Tell me a short joke about programming."} | |
], | |
"temperature": 0.7, | |
"max_tokens": 150, | |
"stream": False | |
} | |
try: | |
response = self.session.post( | |
f"{self.base_url}/chat/completions", | |
json=payload | |
) | |
print(f"Status Code: {response.status_code}") | |
if response.status_code == 200: | |
data = response.json() | |
print("Response content:") | |
print(data['choices'][0]['message']['content']) | |
assert response.status_code == 200 | |
print("β Chat completions (non-streaming) test passed!") | |
except Exception as e: | |
print(f"β Chat completions (non-streaming) test failed: {str(e)}") | |
def test_chat_completions_streaming(self) -> None: | |
"""Test the chat completions endpoint with streaming.""" | |
print("\n=== Testing Chat Completions Endpoint (Streaming) ===") | |
payload = { | |
"model": "gpt-3.5-turbo", | |
"messages": [ | |
{"role": "system", "content": "You are a helpful assistant."}, | |
{"role": "user", "content": "Write 5 lines about India"} | |
], | |
"temperature": 0.7, | |
"max_tokens": 150, | |
"stream": True | |
} | |
try: | |
with self.session.post( | |
f"{self.base_url}/chat/completions", | |
json=payload, | |
stream=True, | |
headers={"Accept": "text/event-stream"} | |
) as response: | |
print(f"Status Code: {response.status_code}") | |
print("Streaming response:") | |
buffer = "" | |
for chunk in response.iter_lines(): | |
if chunk: | |
chunk = chunk.decode('utf-8') | |
if chunk.startswith('data: '): | |
chunk = chunk[6:] # Remove 'data: ' prefix | |
if chunk.strip() == '[DONE]': | |
break | |
try: | |
data = json.loads(chunk) | |
if 'choices' in data and len(data['choices']) > 0: | |
if 'delta' in data['choices'][0] and 'content' in data['choices'][0]['delta']: | |
content = data['choices'][0]['delta']['content'] | |
print(content, end='', flush=True) | |
time.sleep(0.1) # Add a small delay to simulate real-time streaming | |
except json.JSONDecodeError: | |
continue | |
print("\nβ Chat completions (streaming) test passed!") | |
except Exception as e: | |
print(f"β Chat completions (streaming) test failed: {str(e)}") | |
def test_developer_info(self) -> None: | |
"""Test the developer info endpoint.""" | |
print("\n=== Testing Developer Info Endpoint ===") | |
try: | |
response = self.session.get(f"{self.base_url}/developer_info") | |
print(f"Status Code: {response.status_code}") | |
print("Developer Info:") | |
print(json.dumps(response.json(), indent=2)) | |
assert response.status_code == 200 | |
print("β Developer info test passed!") | |
except Exception as e: | |
print(f"β Developer info test failed: {str(e)}") | |
def run_all_tests(self) -> None: | |
"""Run all tests sequentially.""" | |
tests = [ | |
self.test_health_check, | |
self.test_models, | |
self.test_chat_completions_non_streaming, | |
self.test_chat_completions_streaming, | |
self.test_developer_info | |
] | |
print("π Starting API Tests...") | |
start_time = time.time() | |
for test in tests: | |
test() | |
end_time = time.time() | |
duration = end_time - start_time | |
print(f"\n============================") | |
print(f"π All tests completed in {duration:.2f} seconds") | |
print(f"============================") | |
def main(): | |
# Initialize tester with your API's base URL | |
tester = APITester("http://localhost:8000") | |
# Run all tests | |
tester.run_all_tests() | |
if __name__ == "__main__": | |
main() |