#!/usr/bin/env python3 """ Test script to verify all components work without GUI. This can run in headless environments. """ import sys from pathlib import Path # Add project root to Python path project_root = Path(__file__).parent sys.path.insert(0, str(project_root)) print("=" * 60) print("Testing Local Transcription Components (No GUI)") print("=" * 60) # Test 1: Configuration print("\n1. Testing Configuration System...") try: from client.config import Config config = Config() print(f" ✓ Config loaded: {config.config_path}") print(f" ✓ User name: {config.get('user.name')}") print(f" ✓ Model: {config.get('transcription.model')}") except Exception as e: print(f" ✗ Config failed: {e}") sys.exit(1) # Test 2: Device Detection print("\n2. Testing Device Detection...") try: from client.device_utils import DeviceManager device_mgr = DeviceManager() print(f" ✓ Available devices: {device_mgr.available_devices}") print(f" ✓ Current device: {device_mgr.current_device}") print(f" ✓ GPU available: {device_mgr.is_gpu_available()}") device_info = device_mgr.get_device_info() for dev_id, dev_desc in device_info: print(f" - {dev_id}: {dev_desc}") except Exception as e: print(f" ✗ Device detection failed: {e}") sys.exit(1) # Test 3: Audio Devices print("\n3. Testing Audio Capture...") try: from client.audio_capture import AudioCapture devices = AudioCapture.get_input_devices() print(f" ✓ Found {len(devices)} audio input device(s)") for idx, name in devices[:5]: # Show first 5 print(f" - [{idx}] {name}") if len(devices) > 5: print(f" ... and {len(devices) - 5} more") except Exception as e: print(f" ✗ Audio capture failed: {e}") # Test 4: Noise Suppression print("\n4. Testing Noise Suppression...") try: from client.noise_suppression import NoiseSuppressor import numpy as np suppressor = NoiseSuppressor(sample_rate=16000, method="noisereduce", strength=0.7) print(f" ✓ Noise suppressor created: {suppressor}") # Test with dummy audio test_audio = np.random.randn(16000).astype(np.float32) * 0.1 processed = suppressor.process(test_audio, skip_silent=False) print(f" ✓ Processed audio shape: {processed.shape}") except Exception as e: print(f" ✗ Noise suppression failed: {e}") # Test 5: Transcription Engine print("\n5. Testing Transcription Engine (Loading Model)...") try: from client.transcription_engine import TranscriptionEngine device = device_mgr.get_device_for_whisper() compute_type = device_mgr.get_compute_type() print(f" → Using device: {device} with compute type: {compute_type}") print(f" → Loading model (this may take 1-2 minutes on first run)...") engine = TranscriptionEngine( model_size="tiny", # Use tiny for faster testing device=device, compute_type=compute_type, language="en" ) success = engine.load_model() if success: print(f" ✓ Model loaded successfully!") print(f" ✓ Engine: {engine}") # Test transcription with dummy audio print(f"\n Testing transcription with silent audio...") test_audio = np.zeros(48000, dtype=np.float32) # 3 seconds of silence result = engine.transcribe(test_audio, sample_rate=16000, user_name="Test") if result: print(f" ✓ Transcription result: '{result.text}'") else: print(f" ℹ No transcription (expected for silent audio)") engine.unload_model() else: print(f" ✗ Model loading failed") sys.exit(1) except Exception as e: print(f" ✗ Transcription engine failed: {e}") import traceback traceback.print_exc() sys.exit(1) print("\n" + "=" * 60) print("✓ All Components Tested Successfully!") print("=" * 60) print("\nThe application is ready to use!") print("Run 'uv run python main.py' on a system with a display.") print("=" * 60)