dictation-service/test_e2e_complete.sh
Kade Heyborne 73a15d03cd
Fix dictation service: state detection, async processing, and performance optimizations
- Fix state detection priority: dictation now takes precedence over conversation
- Fix critical bug: event loop was created but never started, preventing async coroutines from executing
- Optimize audio processing: reorder AcceptWaveform/PartialResult checks
- Switch to faster Vosk model: vosk-model-en-us-0.22-lgraph for 2-3x speed improvement
- Reduce block size from 8000 to 4000 for lower latency
- Add filtering to remove spurious 'the', 'a', 'an' words from start/end of transcriptions
- Update toggle-dictation.sh to properly clean up conversation lock file
- Improve batch audio processing for better responsiveness
2025-12-04 11:49:07 -07:00

157 lines
4.3 KiB
Bash
Executable File

#!/bin/bash
# End-to-End Dictation Test Script
# This script tests the complete dictation workflow
echo "=== Dictation Service E2E Test ==="
echo
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
print_status() {
if [ $1 -eq 0 ]; then
echo -e "${GREEN}$2${NC}"
else
echo -e "${RED}$2${NC}"
fi
}
# Test 1: Check service status
echo "1. Checking service status..."
systemctl --user is-active dictation.service >/dev/null 2>&1
print_status $? "Dictation service is running"
systemctl --user is-active keybinding-listener.service >/dev/null 2>&1
print_status $? "Keybinding listener service is running"
# Test 2: Check lock file operations
echo
echo "2. Testing lock file operations..."
cd /mnt/storage/Development/dictation-service
# Clean state
rm -f listening.lock conversation.lock
# Test dictation toggle
/mnt/storage/Development/dictation-service/scripts/toggle-dictation.sh >/dev/null 2>&1
if [ -f listening.lock ]; then
print_status 0 "Dictation lock file created"
else
print_status 1 "Dictation lock file not created"
fi
# Toggle off
/mnt/storage/Development/dictation-service/scripts/toggle-dictation.sh >/dev/null 2>&1
if [ ! -f listening.lock ]; then
print_status 0 "Dictation lock file removed"
else
print_status 1 "Dictation lock file not removed"
fi
# Test 3: Check service response to lock files
echo
echo "3. Testing service response to lock files..."
# Create dictation lock
touch listening.lock
sleep 2
# Check logs for state change
if grep -q "\[Dictation\] STARTED" /home/universal/.gemini/tmp/428d098e581799ff7817b2001dd545f7b891975897338dd78498cc16582e004f/debug.log; then
print_status 0 "Service detected dictation lock file"
else
print_status 1 "Service did not detect dictation lock file"
fi
# Remove lock
rm -f listening.lock
sleep 2
# Test 4: Check keybinding functionality
echo
echo "4. Testing keybinding functionality..."
# Test toggle script directly (simulates keybinding)
touch listening.lock
sleep 1
if [ -f listening.lock ]; then
print_status 0 "Keybinding simulation works (lock file created)"
else
print_status 1 "Keybinding simulation failed"
fi
rm -f listening.lock
# Test 5: Check audio processing components
echo
echo "5. Testing audio processing components..."
# Check if audio libraries are available
python3 -c "import sounddevice, vosk" >/dev/null 2>&1
if [ $? -eq 0 ]; then
print_status 0 "Audio processing libraries available"
else
print_status 1 "Audio processing libraries not available"
fi
# Check Vosk model
if [ -d "/home/universal/.shared/models/vosk-models/vosk-model-en-us-0.22" ]; then
print_status 0 "Vosk model directory exists"
else
print_status 1 "Vosk model directory not found"
fi
# Test 6: Check notification system
echo
echo "6. Testing notification system..."
# Try sending a test notification
notify-send "Test" "Dictation service test notification" >/dev/null 2>&1
if [ $? -eq 0 ]; then
print_status 0 "Notification system works"
else
print_status 1 "Notification system failed"
fi
# Test 7: Check keyboard typing
echo
echo "7. Testing keyboard typing..."
# Try to type a test string (this will go to focused window)
/home/universal/.local/bin/uv run python3 -c "
from pynput.keyboard import Controller
import time
k = Controller()
k.type('DICTATION_TEST_STRING')
print('Test string typed')
" >/dev/null 2>&1
if [ $? -eq 0 ]; then
print_status 0 "Keyboard typing system works"
else
print_status 1 "Keyboard typing system failed"
fi
echo
echo "=== Test Summary ==="
echo "The dictation service should now be working. Here's how to use it:"
echo
echo "1. Make sure you have a text input field focused (like a terminal, text editor, etc.)"
echo "2. Press Alt+D to start dictation"
echo "3. You should see a notification: '🎤 Dictation Active - Speak now - text will be typed into focused app!'"
echo "4. Speak clearly into your microphone"
echo "5. Text should appear in the focused application"
echo "6. Press Alt+D again to stop dictation"
echo
echo "If text isn't appearing, make sure:"
echo "- Your microphone is working and not muted"
echo "- You have a text input field focused"
echo "- You're speaking clearly at normal volume"
echo "- The microphone isn't picking up too much background noise"
echo
echo "For AI conversation mode, press Super+Alt+D (Windows key + Alt + D)"