Merge branch 'main' into support_older_ydotool

This commit is contained in:
Leonardo Trapani
2026-01-08 10:11:19 +01:00
committed by GitHub
9 changed files with 308 additions and 22 deletions
+52 -6
View File
@@ -166,7 +166,8 @@ func runInteractiveConfig() error {
fmt.Println(" 2. groq-transcription - Groq Whisper API (fast transcription)")
fmt.Println(" 3. groq-translation - Groq Whisper API (translate to English)")
fmt.Println(" 4. mistral-transcription - Mistral Voxtral API (excellent for European languages)")
fmt.Printf("Provider [1-4] (current: %s): ", cfg.Transcription.Provider)
fmt.Println(" 5. elevenlabs - ElevenLabs Scribe API (99 languages, excellent accuracy)")
fmt.Printf("Provider [1-5] (current: %s): ", cfg.Transcription.Provider)
if !scanner.Scan() {
break
}
@@ -183,10 +184,12 @@ func runInteractiveConfig() error {
cfg.Transcription.Provider = "groq-translation"
case "4":
cfg.Transcription.Provider = "mistral-transcription"
case "openai", "groq-transcription", "groq-translation", "mistral-transcription":
case "5":
cfg.Transcription.Provider = "elevenlabs"
case "openai", "groq-transcription", "groq-translation", "mistral-transcription", "elevenlabs":
cfg.Transcription.Provider = input
default:
fmt.Println("❌ Error: invalid provider. Please enter 1-4 or provider name.")
fmt.Println("❌ Error: invalid provider. Please enter 1-5 or provider name.")
fmt.Println()
continue
}
@@ -275,6 +278,38 @@ func runInteractiveConfig() error {
}
break
}
case "elevenlabs":
for {
fmt.Println("\nElevenLabs Scribe Model:")
fmt.Println(" Language Support:")
fmt.Println(" scribe_v1: 99 languages (96.7% accuracy for English, ≤5% WER for Portuguese)")
fmt.Println(" scribe_v2: 90 languages (real-time optimized, lower latency)")
fmt.Println()
fmt.Println(" Available Models:")
fmt.Println(" 1. scribe_v1 - Best accuracy, full timestamps (recommended)")
fmt.Println(" 2. scribe_v2 - Real-time streaming, lower latency")
fmt.Printf("Model [1-2] (current: %s): ", cfg.Transcription.Model)
if !scanner.Scan() {
break
}
input := strings.TrimSpace(scanner.Text())
switch input {
case "1":
cfg.Transcription.Model = "scribe_v1"
case "2":
cfg.Transcription.Model = "scribe_v2"
case "scribe_v1", "scribe_v2":
cfg.Transcription.Model = input
case "":
if cfg.Transcription.Model == "" {
cfg.Transcription.Model = "scribe_v1"
}
default:
fmt.Println("❌ Error: invalid model. Please enter 1, 2 or model name.")
continue
}
break
}
}
// API Key (provider-aware)
@@ -284,6 +319,8 @@ func runInteractiveConfig() error {
envVarName = "OPENAI_API_KEY"
case "mistral-transcription":
envVarName = "MISTRAL_API_KEY"
case "elevenlabs":
envVarName = "ELEVENLABS_API_KEY"
default:
envVarName = "GROQ_API_KEY"
}
@@ -299,6 +336,13 @@ func runInteractiveConfig() error {
if cfg.Transcription.Provider == "groq-translation" {
fmt.Printf("\nSource language hint (empty for auto-detect, current: %s): ", cfg.Transcription.Language)
fmt.Println("\n Note: Translation always outputs English. Language hints at source audio language.")
} else if cfg.Transcription.Provider == "elevenlabs" {
fmt.Println("\nLanguage Performance:")
fmt.Println(" Excellent (≤5% WER): English, Portuguese, +25 languages")
fmt.Println(" High (5-10% WER): French, German, Spanish, Italian, etc.")
fmt.Println(" Good (10-20% WER): Most supported languages")
fmt.Println(" Leave empty for auto-detection (recommended)")
fmt.Printf("Language (current: %s): ", cfg.Transcription.Language)
} else {
fmt.Printf("\nLanguage (empty for auto-detect, current: %s): ", cfg.Transcription.Language)
}
@@ -608,10 +652,10 @@ func saveConfig(cfg *config.Config) error {
# Speech Transcription Configuration
[transcription]
provider = "%s" # Transcription service: "openai", "groq-transcription", "groq-translation", or "mistral-transcription"
api_key = "%s" # API key (or set OPENAI_API_KEY/GROQ_API_KEY/MISTRAL_API_KEY environment variable)
provider = "%s" # Transcription service: "openai", "groq-transcription", "groq-translation", "mistral-transcription", or "elevenlabs"
api_key = "%s" # API key (or set OPENAI_API_KEY/GROQ_API_KEY/MISTRAL_API_KEY/ELEVENLABS_API_KEY environment variable)
language = "%s" # Language code (empty for auto-detect, "en", "it", "es", "fr", etc.)
model = "%s" # Model: OpenAI="whisper-1", Groq="whisper-large-v3", Mistral="voxtral-mini-latest"
model = "%s" # Model: OpenAI="whisper-1", Groq="whisper-large-v3", Mistral="voxtral-mini-latest", ElevenLabs="scribe_v1" or "scribe_v2"
# Text Injection Configuration
[injection]
@@ -635,6 +679,8 @@ func saveConfig(cfg *config.Config) error {
# Models: whisper-large-v3 only (turbo not supported for translation)
# - "mistral-transcription": Mistral Voxtral API (excellent for European languages, requires MISTRAL_API_KEY)
# Models: voxtral-mini-latest or voxtral-mini-2507
# - "elevenlabs": ElevenLabs Scribe API (excellent accuracy, 99 languages, requires ELEVENLABS_API_KEY)
# Models: scribe_v1 (99 languages, best accuracy) or scribe_v2 (90 languages, real-time)
#
# Language codes: Use empty string ("") for automatic detection, or specific codes like:
# "en" (English), "it" (Italian), "es" (Spanish), "fr" (French), "de" (German), etc.