- 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
157 lines
4.3 KiB
Bash
Executable File
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)" |