Spaces:
Sleeping
Sleeping
| #!/usr/bin/env python3 | |
| """ | |
| Test script for C-3PO TTS model integration | |
| """ | |
| import os | |
| import requests | |
| import json | |
| import tempfile | |
| from pathlib import Path | |
| # Test configuration | |
| API_BASE_URL = "http://localhost:7860" | |
| TEST_TEXTS = [ | |
| "I am C-3PO, human-cyborg relations.", | |
| "The odds of successfully navigating an asteroid field are approximately 3,720 to 1.", | |
| "R2-D2, you know better than to trust a strange computer!", | |
| "Oh my! How interesting!" | |
| ] | |
| def test_health_check(): | |
| """Test the health check endpoint""" | |
| print("π Testing health check...") | |
| try: | |
| response = requests.get(f"{API_BASE_URL}/health") | |
| if response.status_code == 200: | |
| data = response.json() | |
| print(f"β Health check passed") | |
| print(f" Model: {data.get('model', 'Unknown')}") | |
| print(f" Device: {data.get('device', 'Unknown')}") | |
| print(f" C-3PO voice available: {data.get('c3po_voice_available', False)}") | |
| print(f" Model path: {data.get('model_path', 'Not specified')}") | |
| 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 test_c3po_endpoint(): | |
| """Test the dedicated C-3PO endpoint""" | |
| print("\nπ Testing C-3PO endpoint...") | |
| test_text = "I am C-3PO, human-cyborg relations." | |
| try: | |
| data = { | |
| 'text': test_text, | |
| 'language': 'en' | |
| } | |
| response = requests.post(f"{API_BASE_URL}/tts-c3po", data=data) | |
| if response.status_code == 200: | |
| # Save the audio file | |
| output_path = Path(tempfile.gettempdir()) / "c3po_test_output.wav" | |
| with open(output_path, 'wb') as f: | |
| f.write(response.content) | |
| print(f"β C-3PO endpoint test passed") | |
| print(f" Audio saved to: {output_path}") | |
| print(f" File size: {os.path.getsize(output_path)} bytes") | |
| return True | |
| else: | |
| print(f"β C-3PO endpoint failed: {response.status_code}") | |
| print(f" Response: {response.text}") | |
| return False | |
| except Exception as e: | |
| print(f"β C-3PO endpoint error: {e}") | |
| return False | |
| def test_general_tts_with_c3po(): | |
| """Test the general TTS endpoint with C-3PO voice enabled""" | |
| print("\nπ€ Testing general TTS with C-3PO voice...") | |
| test_text = "The odds of successfully navigating an asteroid field are approximately 3,720 to 1." | |
| try: | |
| data = { | |
| 'text': test_text, | |
| 'language': 'en', | |
| 'use_c3po_voice': 'true' | |
| } | |
| response = requests.post(f"{API_BASE_URL}/tts", data=data) | |
| if response.status_code == 200: | |
| # Save the audio file | |
| output_path = Path(tempfile.gettempdir()) / "general_c3po_test_output.wav" | |
| with open(output_path, 'wb') as f: | |
| f.write(response.content) | |
| print(f"β General TTS with C-3PO test passed") | |
| print(f" Audio saved to: {output_path}") | |
| print(f" File size: {os.path.getsize(output_path)} bytes") | |
| return True | |
| else: | |
| print(f"β General TTS with C-3PO failed: {response.status_code}") | |
| print(f" Response: {response.text}") | |
| return False | |
| except Exception as e: | |
| print(f"β General TTS with C-3PO error: {e}") | |
| return False | |
| def test_json_endpoint(): | |
| """Test the JSON endpoint""" | |
| print("\nπ Testing JSON endpoint...") | |
| test_text = "R2-D2, you know better than to trust a strange computer!" | |
| try: | |
| data = { | |
| 'text': test_text, | |
| 'language': 'en' | |
| } | |
| headers = {'Content-Type': 'application/json'} | |
| response = requests.post(f"{API_BASE_URL}/tts-json", json=data, headers=headers) | |
| if response.status_code == 200: | |
| # Save the audio file | |
| output_path = Path(tempfile.gettempdir()) / "json_c3po_test_output.wav" | |
| with open(output_path, 'wb') as f: | |
| f.write(response.content) | |
| print(f"β JSON endpoint test passed") | |
| print(f" Audio saved to: {output_path}") | |
| print(f" File size: {os.path.getsize(output_path)} bytes") | |
| return True | |
| else: | |
| print(f"β JSON endpoint failed: {response.status_code}") | |
| print(f" Response: {response.text}") | |
| return False | |
| except Exception as e: | |
| print(f"β JSON endpoint error: {e}") | |
| return False | |
| def test_multilingual_support(): | |
| """Test multilingual support with C-3PO voice""" | |
| print("\nπ Testing multilingual support...") | |
| test_cases = [ | |
| ("Hello, I am C-3PO", "en"), | |
| ("Hola, soy C-3PO", "es"), | |
| ("Bonjour, je suis C-3PO", "fr"), | |
| ("Guten Tag, ich bin C-3PO", "de") | |
| ] | |
| success_count = 0 | |
| for text, language in test_cases: | |
| try: | |
| data = { | |
| 'text': text, | |
| 'language': language | |
| } | |
| response = requests.post(f"{API_BASE_URL}/tts-c3po", data=data) | |
| if response.status_code == 200: | |
| output_path = Path(tempfile.gettempdir()) / f"c3po_test_{language}.wav" | |
| with open(output_path, 'wb') as f: | |
| f.write(response.content) | |
| print(f" β {language}: {text} -> {output_path}") | |
| success_count += 1 | |
| else: | |
| print(f" β {language}: Failed ({response.status_code})") | |
| except Exception as e: | |
| print(f" β {language}: Error - {e}") | |
| print(f"\n Multilingual test: {success_count}/{len(test_cases)} languages successful") | |
| return success_count == len(test_cases) | |
| def main(): | |
| """Run all tests""" | |
| print("π Starting C-3PO TTS Model Tests") | |
| print("=" * 50) | |
| tests = [ | |
| test_health_check, | |
| test_c3po_endpoint, | |
| test_general_tts_with_c3po, | |
| test_json_endpoint, | |
| test_multilingual_support | |
| ] | |
| passed = 0 | |
| total = len(tests) | |
| for test in tests: | |
| if test(): | |
| passed += 1 | |
| print("\n" + "=" * 50) | |
| print(f"π― Test Results: {passed}/{total} tests passed") | |
| if passed == total: | |
| print("π All tests passed! C-3PO model integration is working correctly.") | |
| else: | |
| print("β οΈ Some tests failed. Check the API logs for more details.") | |
| print("\nπ‘ Tips:") | |
| print(" - Make sure the API server is running on http://localhost:7860") | |
| print(" - Check that the C-3PO model downloaded successfully") | |
| print(" - Generated audio files are saved in the system temp directory") | |
| if __name__ == "__main__": | |
| main() |