Spaces:
Sleeping
Sleeping
| import requests | |
| import json | |
| from typing import Union, Dict, Generator | |
| import time | |
| class ChatCompletionTester: | |
| def __init__(self, base_url: str = "http://localhost:8000"): | |
| self.base_url = base_url | |
| self.endpoint = f"{base_url}/chat/completions" | |
| def create_test_payload(self, stream: bool = False) -> Dict: | |
| """Create a sample payload for testing""" | |
| return { | |
| "model": "mistralai/Mixtral-8x22B-Instruct-v0.1", | |
| "messages": [ | |
| {"role": "system", "content": "You are a helpful assistant."}, | |
| {"role": "user", "content": "What is the capital of France?"} | |
| ], | |
| "temperature": 0.7, | |
| "max_tokens": 4096, | |
| "stream": stream | |
| } | |
| def test_non_streaming(self) -> Union[Dict, None]: | |
| """Test non-streaming response""" | |
| print("\n=== Testing Non-Streaming Response ===") | |
| try: | |
| payload = self.create_test_payload(stream=False) | |
| print("Sending request...") | |
| response = requests.post( | |
| self.endpoint, | |
| json=payload, | |
| headers={"Content-Type": "application/json"} | |
| ) | |
| if response.status_code == 200: | |
| result = response.json() | |
| content = result['choices'][0]['message']['content'] | |
| print("\nResponse received successfully!") | |
| print(f"Content: {content}") | |
| return result | |
| else: | |
| print(f"Error: Status code {response.status_code}") | |
| print(f"Response: {response.text}") | |
| return None | |
| except Exception as e: | |
| print(f"Error during non-streaming test: {str(e)}") | |
| return None | |
| def test_streaming(self) -> Union[str, None]: | |
| """Test streaming response""" | |
| print("\n=== Testing Streaming Response ===") | |
| try: | |
| payload = self.create_test_payload(stream=True) | |
| print("Sending request...") | |
| response = requests.post( | |
| self.endpoint, | |
| json=payload, | |
| headers={"Content-Type": "application/json"}, | |
| stream=True | |
| ) | |
| if response.status_code == 200: | |
| print("\nReceiving streaming response:") | |
| full_response = "" | |
| for line in response.iter_lines(decode_unicode=True): | |
| if line: | |
| if line.startswith("data: "): | |
| try: | |
| data = json.loads(line[6:]) | |
| if data == "[DONE]": | |
| continue | |
| content = data.get("choices", [{}])[0].get("delta", {}).get("content", "") | |
| if content: | |
| print(content, end="", flush=True) | |
| full_response += content | |
| except json.JSONDecodeError: | |
| continue | |
| print("\n\nStreaming completed!") | |
| return full_response | |
| else: | |
| print(f"Error: Status code {response.status_code}") | |
| print(f"Response: {response.text}") | |
| return None | |
| except Exception as e: | |
| print(f"Error during streaming test: {str(e)}") | |
| return None | |
| def run_all_tests(self): | |
| """Run both streaming and non-streaming tests""" | |
| print("Starting API endpoint tests...") | |
| # Test server connectivity | |
| try: | |
| requests.get(self.base_url) | |
| print("β Server is accessible") | |
| except requests.exceptions.ConnectionError: | |
| print("β Server is not accessible. Please ensure the FastAPI server is running.") | |
| return | |
| # Run tests with timing | |
| start_time = time.time() | |
| # Test non-streaming | |
| non_streaming_result = self.test_non_streaming() | |
| if non_streaming_result: | |
| print("β Non-streaming test passed") | |
| else: | |
| print("β Non-streaming test failed") | |
| # Test streaming | |
| streaming_result = self.test_streaming() | |
| if streaming_result: | |
| print("β Streaming test passed") | |
| else: | |
| print("β Streaming test failed") | |
| end_time = time.time() | |
| print(f"\nAll tests completed in {end_time - start_time:.2f} seconds") | |
| def main(): | |
| # Create tester instance | |
| tester = ChatCompletionTester() | |
| # Run all tests | |
| tester.run_all_tests() | |
| if __name__ == "__main__": | |
| main() |