add deepgram provider with nova-3 and nova-2 streaming models

This commit is contained in:
leonardotrapani
2026-02-01 01:43:50 +01:00
parent 29ea33bc9d
commit 5f614b19c5
5 changed files with 219 additions and 2 deletions
+110
View File
@@ -0,0 +1,110 @@
package provider
import "testing"
func TestDeepgramProvider(t *testing.T) {
p := GetProvider("deepgram")
if p == nil {
t.Fatal("deepgram provider not registered")
}
if p.Name() != "deepgram" {
t.Errorf("Name() = %q, want %q", p.Name(), "deepgram")
}
if !p.RequiresAPIKey() {
t.Error("RequiresAPIKey() should return true")
}
if p.IsLocal() {
t.Error("IsLocal() should return false")
}
}
func TestDeepgramProvider_Models(t *testing.T) {
p := &DeepgramProvider{}
models := p.Models()
if len(models) != 4 {
t.Errorf("Models() returned %d models, want 4", len(models))
}
// all models should be streaming
for _, m := range models {
if !m.Streaming {
t.Errorf("model %s should be streaming", m.ID)
}
if m.AdapterType != "deepgram" {
t.Errorf("model %s has AdapterType %q, want 'deepgram'", m.ID, m.AdapterType)
}
if m.Local {
t.Errorf("model %s should not be local", m.ID)
}
}
}
func TestDeepgramProvider_Nova3Languages(t *testing.T) {
p := &DeepgramProvider{}
models := p.Models()
var nova3 *Model
for i := range models {
if models[i].ID == "nova-3" {
nova3 = &models[i]
break
}
}
if nova3 == nil {
t.Fatal("nova-3 model not found")
}
// nova-3 should support many languages from our list
supportedTests := []struct {
code string
want bool
}{
{"en", true},
{"es", true},
{"fr", true},
{"de", true},
{"ja", true},
{"", true}, // auto always supported
}
for _, tt := range supportedTests {
got := nova3.SupportsLanguage(tt.code)
if got != tt.want {
t.Errorf("nova-3.SupportsLanguage(%q) = %v, want %v", tt.code, got, tt.want)
}
}
}
func TestDeepgramProvider_DefaultModel(t *testing.T) {
p := &DeepgramProvider{}
if got := p.DefaultModel(Transcription); got != "nova-3" {
t.Errorf("DefaultModel(Transcription) = %q, want 'nova-3'", got)
}
if got := p.DefaultModel(LLM); got != "" {
t.Errorf("DefaultModel(LLM) = %q, want empty (no LLM support)", got)
}
}
func TestDeepgramProvider_Endpoint(t *testing.T) {
p := &DeepgramProvider{}
models := p.Models()
for _, m := range models {
if m.Endpoint == nil {
t.Errorf("model %s has nil Endpoint", m.ID)
continue
}
if m.Endpoint.BaseURL != "wss://api.deepgram.com" {
t.Errorf("model %s has BaseURL %q, want 'wss://api.deepgram.com'", m.ID, m.Endpoint.BaseURL)
}
if m.Endpoint.Path != "/v1/listen" {
t.Errorf("model %s has Path %q, want '/v1/listen'", m.ID, m.Endpoint.Path)
}
}
}