| | |
| | """ |
| | Test script for multimodal AI backend service |
| | Tests both text-only and image+text functionality |
| | """ |
| |
|
| | import requests |
| | import json |
| | import time |
| |
|
| | |
| | BASE_URL = "http://localhost:8000" |
| |
|
| | def test_text_only(): |
| | """Test text-only chat completion""" |
| | print("π§ͺ Testing text-only chat completion...") |
| | |
| | payload = { |
| | "model": "microsoft/DialoGPT-medium", |
| | "messages": [ |
| | {"role": "user", "content": "Hello! How are you today?"} |
| | ], |
| | "max_tokens": 100, |
| | "temperature": 0.7 |
| | } |
| | |
| | try: |
| | response = requests.post(f"{BASE_URL}/v1/chat/completions", json=payload, timeout=30) |
| | if response.status_code == 200: |
| | result = response.json() |
| | print(f"β
Text-only response: {result['choices'][0]['message']['content']}") |
| | return True |
| | else: |
| | print(f"β Text-only failed: {response.status_code} - {response.text}") |
| | return False |
| | except Exception as e: |
| | print(f"β Text-only error: {e}") |
| | return False |
| |
|
| | def test_multimodal(): |
| | """Test multimodal (image + text) chat completion""" |
| | print("πΌοΈ Testing multimodal chat completion...") |
| | |
| | payload = { |
| | "model": "unsloth/DeepSeek-R1-0528-Qwen3-8B-GGUF", |
| | "messages": [ |
| | { |
| | "role": "user", |
| | "content": [ |
| | { |
| | "type": "image", |
| | "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/p-blog/candy.JPG" |
| | }, |
| | { |
| | "type": "text", |
| | "text": "What animal is on the candy?" |
| | } |
| | ] |
| | } |
| | ], |
| | "max_tokens": 150, |
| | "temperature": 0.7 |
| | } |
| | |
| | try: |
| | response = requests.post(f"{BASE_URL}/v1/chat/completions", json=payload, timeout=60) |
| | if response.status_code == 200: |
| | result = response.json() |
| | print(f"β
Multimodal response: {result['choices'][0]['message']['content']}") |
| | return True |
| | else: |
| | print(f"β Multimodal failed: {response.status_code} - {response.text}") |
| | return False |
| | except Exception as e: |
| | print(f"β Multimodal error: {e}") |
| | return False |
| |
|
| | def test_service_info(): |
| | """Test service information endpoint""" |
| | print("βΉοΈ Testing service information...") |
| | |
| | try: |
| | response = requests.get(f"{BASE_URL}/", timeout=10) |
| | if response.status_code == 200: |
| | result = response.json() |
| | print(f"β
Service info: {result['message']}") |
| | return True |
| | else: |
| | print(f"β Service info failed: {response.status_code}") |
| | return False |
| | except Exception as e: |
| | print(f"β Service info error: {e}") |
| | return False |
| |
|
| | def test_health(): |
| | """Test health check endpoint""" |
| | print("π₯ Testing health check...") |
| | |
| | try: |
| | response = requests.get(f"{BASE_URL}/health", timeout=10) |
| | if response.status_code == 200: |
| | result = response.json() |
| | print(f"β
Health: {result['status']} - Model: {result['model']}") |
| | return True |
| | else: |
| | print(f"β Health check failed: {response.status_code}") |
| | return False |
| | except Exception as e: |
| | print(f"β Health check error: {e}") |
| | return False |
| |
|
| | def main(): |
| | """Run all tests""" |
| | print("π Starting multimodal AI backend tests...\n") |
| | |
| | tests = [ |
| | ("Service Info", test_service_info), |
| | ("Health Check", test_health), |
| | ("Text-only Chat", test_text_only), |
| | ("Multimodal Chat", test_multimodal), |
| | ] |
| | |
| | passed = 0 |
| | total = len(tests) |
| | |
| | for test_name, test_func in tests: |
| | print(f"\n--- {test_name} ---") |
| | if test_func(): |
| | passed += 1 |
| | time.sleep(1) |
| | |
| | print(f"\nπ― Test Results: {passed}/{total} tests passed") |
| | |
| | if passed == total: |
| | print("π All tests passed! Multimodal AI backend is working correctly!") |
| | else: |
| | print("β οΈ Some tests failed. Check the output above for details.") |
| |
|
| | if __name__ == "__main__": |
| | main() |
| |
|