wire streaming adapters into transcriber factory

This commit is contained in:
leonardotrapani
2026-02-01 01:58:23 +01:00
parent f0f125b62f
commit 319a0ef8e2
4 changed files with 49 additions and 6 deletions
+14 -3
View File
@@ -95,12 +95,23 @@ func NewTranscriber(config Config) (Transcriber, error) {
return nil, fmt.Errorf("model %s is not a transcription model", config.Model)
}
// streaming models not supported yet
// streaming models use StreamingTranscriber
if model.Streaming {
return nil, fmt.Errorf("streaming model %s not supported yet (coming soon)", config.Model)
var streamingAdapter StreamingAdapter
switch model.AdapterType {
case "elevenlabs-streaming":
streamingAdapter = NewElevenLabsStreamingAdapter(model.Endpoint, config.APIKey, model.ID, config.Language)
case "deepgram":
streamingAdapter = NewDeepgramAdapter(model.Endpoint, config.APIKey, model.ID, config.Language)
case "openai-realtime":
streamingAdapter = NewOpenAIRealtimeAdapter(model.Endpoint, config.APIKey, model.ID, config.Language)
default:
return nil, fmt.Errorf("unsupported streaming adapter type: %s", model.AdapterType)
}
return NewStreamingTranscriber(streamingAdapter, config.Language), nil
}
// create adapter based on model.AdapterType
// batch models use SimpleTranscriber
var adapter BatchAdapter
switch model.AdapterType {
case "openai":
+22 -2
View File
@@ -155,14 +155,34 @@ func TestNewTranscriber(t *testing.T) {
wantErr: false, // uses default model when empty
},
{
name: "streaming model returns error",
name: "elevenlabs streaming model creates StreamingTranscriber",
config: Config{
Provider: "elevenlabs",
APIKey: "test-key",
Language: "en",
Model: "scribe_v1-streaming",
},
wantErr: true, // streaming not yet supported
wantErr: false, // streaming is now supported
},
{
name: "deepgram streaming model creates StreamingTranscriber",
config: Config{
Provider: "deepgram",
APIKey: "test-key",
Language: "en",
Model: "nova-3",
},
wantErr: false,
},
{
name: "openai realtime streaming model creates StreamingTranscriber",
config: Config{
Provider: "openai",
APIKey: "test-key",
Language: "en",
Model: "gpt-4o-realtime-preview",
},
wantErr: false,
},
{
name: "unknown model returns error",
+12
View File
@@ -406,3 +406,15 @@ Started: Sun Feb 1 12:22:47 AM CET 2026
- Context cancellation stops reconnection attempts (checked in reconnect loop)
- TestOpenAIRealtimeAdapter_Reconnection verifies behavior
- All tests passing with -race flag, typecheck passes
### Task 39: Update factory to create streaming transcribers
- Updated `NewTranscriber()` in internal/transcriber/transcriber.go
- Added streaming model check: `if model.Streaming {...}`
- For streaming models, creates appropriate StreamingAdapter based on AdapterType:
- `elevenlabs-streaming` -> `NewElevenLabsStreamingAdapter()`
- `deepgram` -> `NewDeepgramAdapter()`
- `openai-realtime` -> `NewOpenAIRealtimeAdapter()`
- Wraps streaming adapter in `NewStreamingTranscriber(adapter, config.Language)`
- Updated tests: streaming models now succeed (not error)
- Added tests for deepgram and openai-realtime streaming models
- All tests passing with -race flag, typecheck passes
+1 -1
View File
@@ -911,7 +911,7 @@
"Factory creates SimpleTranscriber for whisper-1",
"Typecheck passes"
],
"passes": false
"passes": true
},
{
"title": "Write tests for streaming adapters",