#!/usr/bin/env python3 """ Test script for WhisperLive HTTP endpoints This script demonstrates how to use the new HTTP API for file transcription """ import requests import json import os from pathlib import Path # Configuration HTTP_BASE_URL = "http://localhost:8080" # Adjust if using different port WEBSOCKET_PORT = 5050 # Your existing WebSocket port def test_health_endpoint(): """Test the health check endpoint""" print("Testing health endpoint...") try: response = requests.get(f"{HTTP_BASE_URL}/health") print(f"Status: {response.status_code}") print(f"Response: {response.json()}") return response.status_code == 200 except Exception as e: print(f"Error: {e}") return False def test_file_transcription(audio_file_path, language=None, task="transcribe", model="base"): """Test file transcription endpoint""" print(f"\nTesting file transcription endpoint...") print(f"File: {audio_file_path}") print(f"Language: {language or 'auto-detect'}") print(f"Task: {task}") print(f"Model: {model}") if not os.path.exists(audio_file_path): print(f"Error: File {audio_file_path} not found") return False try: # Prepare the request files = {'file': open(audio_file_path, 'rb')} data = { 'language': language, 'task': task, 'model': model } # Make the request response = requests.post(f"{HTTP_BASE_URL}/transcribe", files=files, data=data) print(f"Status: {response.status_code}") if response.status_code == 200: result = response.json() print("Transcription successful!") print(f"Filename: {result.get('filename')}") print(f"Language: {result['info'].get('language')}") print(f"Duration: {result['info'].get('duration')} seconds") print(f"Number of segments: {len(result['segments'])}") # Print first few segments for i, segment in enumerate(result['segments'][:3]): print(f"Segment {i+1}: [{segment['start']:.2f}s - {segment['end']:.2f}s] {segment['text']}") if len(result['segments']) > 3: print(f"... and {len(result['segments']) - 3} more segments") return True else: print(f"Error: {response.text}") return False except Exception as e: print(f"Error: {e}") return False def test_url_transcription(): """Test URL transcription endpoint (placeholder)""" print(f"\nTesting URL transcription endpoint...") try: data = { 'url': 'https://example.com/audio.mp3', 'language': 'en', 'task': 'transcribe', 'model': 'base' } response = requests.post(f"{HTTP_BASE_URL}/transcribe/url", json=data) print(f"Status: {response.status_code}") print(f"Response: {response.json()}") return response.status_code == 200 except Exception as e: print(f"Error: {e}") return False def test_openai_endpoint(audio_file_path): """Test the OpenAI compatible endpoint""" print(f"\nTesting OpenAI compatible endpoint...") print(f"File: {audio_file_path}") if not os.path.exists(audio_file_path): print(f"Error: File {audio_file_path} not found") return False try: files = {'file': open(audio_file_path, 'rb')} data = { 'model': 'whisper-1', 'response_format': 'json' } response = requests.post(f"{HTTP_BASE_URL}/v1/audio/transcriptions", files=files, data=data) print(f"Status: {response.status_code}") if response.status_code == 200: result = response.json() print("OpenAI endpoint successful!") print(f"Response: {result}") return True else: print(f"Error: {response.text}") return False except Exception as e: print(f"Error: {e}") return False def main(): """Main test function""" print("WhisperLive HTTP Endpoints Test") print("=" * 40) # Test health endpoint if not test_health_endpoint(): print("Health check failed. Make sure the server is running.") return # Test file transcription with a sample audio file # You can replace this with any audio file you have sample_audio = "assets/jfk.flac" # Adjust path as needed if os.path.exists(sample_audio): test_file_transcription(sample_audio, language="en", task="transcribe", model="base") test_openai_endpoint(sample_audio) else: print(f"\nSample audio file not found at {sample_audio}") print("You can test with any audio file by calling:") print("test_file_transcription('path/to/your/audio.wav')") # Test URL transcription endpoint test_url_transcription() print("\n" + "=" * 40) print("Test completed!") if __name__ == "__main__": main()