add streaming models to elevenlabs provider

This commit is contained in:
leonardotrapani
2026-02-01 00:49:37 +01:00
parent b6807d674f
commit 80b263a682
4 changed files with 104 additions and 2 deletions
+27 -1
View File
@@ -23,13 +23,16 @@ func (p *ElevenLabsProvider) IsLocal() bool {
} }
func (p *ElevenLabsProvider) Models() []Model { func (p *ElevenLabsProvider) Models() []Model {
// ElevenLabs Scribe supports 90+ languages, including all 57 from our master list
// See: https://elevenlabs.io/speech-to-text
allLangs := language.AllLanguageCodes() allLangs := language.AllLanguageCodes()
return []Model{ return []Model{
// batch models
{ {
ID: "scribe_v1", ID: "scribe_v1",
Name: "Scribe v1", Name: "Scribe v1",
Description: "99 languages, best accuracy", Description: "90+ languages, best accuracy",
Type: Transcription, Type: Transcription,
Streaming: false, Streaming: false,
Local: false, Local: false,
@@ -48,6 +51,29 @@ func (p *ElevenLabsProvider) Models() []Model {
SupportedLanguages: allLangs, SupportedLanguages: allLangs,
Endpoint: &EndpointConfig{BaseURL: "https://api.elevenlabs.io", Path: "/v1/speech-to-text"}, Endpoint: &EndpointConfig{BaseURL: "https://api.elevenlabs.io", Path: "/v1/speech-to-text"},
}, },
// streaming models
{
ID: "scribe_v1-streaming",
Name: "Scribe v1 Streaming",
Description: "Real-time transcription, 90+ languages",
Type: Transcription,
Streaming: true,
Local: false,
AdapterType: "elevenlabs-streaming",
SupportedLanguages: allLangs,
Endpoint: &EndpointConfig{BaseURL: "wss://api.elevenlabs.io", Path: "/v1/speech-to-text/realtime"},
},
{
ID: "scribe_v2-streaming",
Name: "Scribe v2 Streaming",
Description: "Real-time with <150ms latency",
Type: Transcription,
Streaming: true,
Local: false,
AdapterType: "elevenlabs-streaming",
SupportedLanguages: allLangs,
Endpoint: &EndpointConfig{BaseURL: "wss://api.elevenlabs.io", Path: "/v1/speech-to-text/realtime"},
},
} }
} }
+67
View File
@@ -262,3 +262,70 @@ func TestValidateModelLanguage(t *testing.T) {
t.Error("ValidateModelLanguage with unknown model should return error") t.Error("ValidateModelLanguage with unknown model should return error")
} }
} }
func TestElevenLabsProvider(t *testing.T) {
p := GetProvider("elevenlabs")
if p == nil {
t.Fatal("GetProvider('elevenlabs') returned nil")
}
models := p.Models()
// ElevenLabsProvider.Models() returns 4 models
if len(models) != 4 {
t.Errorf("ElevenLabsProvider.Models() = %d models, want 4", len(models))
}
// Check batch models
scribeV1, err := GetModel("elevenlabs", "scribe_v1")
if err != nil {
t.Fatalf("GetModel('elevenlabs', 'scribe_v1') error: %v", err)
}
if scribeV1.Streaming {
t.Error("scribe_v1 should have Streaming=false")
}
if scribeV1.AdapterType != "elevenlabs" {
t.Errorf("scribe_v1 AdapterType=%q, want 'elevenlabs'", scribeV1.AdapterType)
}
scribeV2, err := GetModel("elevenlabs", "scribe_v2")
if err != nil {
t.Fatalf("GetModel('elevenlabs', 'scribe_v2') error: %v", err)
}
if scribeV2.Streaming {
t.Error("scribe_v2 should have Streaming=false")
}
if scribeV2.AdapterType != "elevenlabs" {
t.Errorf("scribe_v2 AdapterType=%q, want 'elevenlabs'", scribeV2.AdapterType)
}
// Check streaming models
scribeV1S, err := GetModel("elevenlabs", "scribe_v1-streaming")
if err != nil {
t.Fatalf("GetModel('elevenlabs', 'scribe_v1-streaming') error: %v", err)
}
if !scribeV1S.Streaming {
t.Error("scribe_v1-streaming should have Streaming=true")
}
if scribeV1S.AdapterType != "elevenlabs-streaming" {
t.Errorf("scribe_v1-streaming AdapterType=%q, want 'elevenlabs-streaming'", scribeV1S.AdapterType)
}
scribeV2S, err := GetModel("elevenlabs", "scribe_v2-streaming")
if err != nil {
t.Fatalf("GetModel('elevenlabs', 'scribe_v2-streaming') error: %v", err)
}
if !scribeV2S.Streaming {
t.Error("scribe_v2-streaming should have Streaming=true")
}
if scribeV2S.AdapterType != "elevenlabs-streaming" {
t.Errorf("scribe_v2-streaming AdapterType=%q, want 'elevenlabs-streaming'", scribeV2S.AdapterType)
}
// All models have explicit SupportedLanguages from docs (subset of our 57)
for _, m := range models {
if len(m.SupportedLanguages) != 57 {
t.Errorf("model %q has %d languages, want 57", m.ID, len(m.SupportedLanguages))
}
}
}
+9
View File
@@ -95,3 +95,12 @@ Started: Sun Feb 1 12:22:47 AM CET 2026
- SupportedLanguages set to all 57 language codes (multilingual per Mistral docs) - SupportedLanguages set to all 57 language codes (multilingual per Mistral docs)
- Researched Mistral API docs - language parameter is optional, no specific list of restrictions - Researched Mistral API docs - language parameter is optional, no specific list of restrictions
- All tests passing, typecheck passes - All tests passing, typecheck passes
### Task 11: Migrate ElevenLabs provider to new Model structure
- Added 4 models: 2 batch (scribe_v1, scribe_v2) + 2 streaming (scribe_v1-streaming, scribe_v2-streaming)
- Batch models: AdapterType='elevenlabs', Streaming=false, Endpoint.BaseURL='https://api.elevenlabs.io'
- Streaming models: AdapterType='elevenlabs-streaming', Streaming=true, Endpoint.BaseURL='wss://api.elevenlabs.io'
- Researched ElevenLabs docs: Scribe supports 90+ languages, including all 57 from our master list
- SupportedLanguages set to all 57 language codes
- Added TestElevenLabsProvider test verifying all requirements
- All tests passing, typecheck passes
+1 -1
View File
@@ -288,7 +288,7 @@
"All models have explicit SupportedLanguages list from docs (subset of our 57)", "All models have explicit SupportedLanguages list from docs (subset of our 57)",
"Typecheck passes" "Typecheck passes"
], ],
"passes": false "passes": true
}, },
// ============================================================================ // ============================================================================
// PHASE 3: CONSOLIDATE BATCH ADAPTER IMPLEMENTATIONS // PHASE 3: CONSOLIDATE BATCH ADAPTER IMPLEMENTATIONS