Files
ai-operator/internal/ai/provider/factory.go
T

39 lines
1.2 KiB
Go

package provider
import (
"errors"
"log/slog"
"strings"
"ai-operator/internal/ai"
"ai-operator/internal/ai/fake"
realtime "ai-operator/internal/ai/openai/realtime"
"ai-operator/internal/ai/pipeline"
"ai-operator/internal/config"
)
func NewVoiceProvider(cfg config.Config, logger *slog.Logger) (ai.VoiceProvider, error) {
switch strings.TrimSpace(cfg.Voice.Provider) {
case "", "fake":
return fake.New(), nil
case "openai_realtime":
if cfg.OpenAI.APIKey == "" {
return nil, errors.New("OPENAI_API_KEY is required for openai_realtime provider")
}
return realtime.NewProvider(cfg, logger), nil
case "pipeline_elevenlabs", "pipeline_elevenlabs_streaming":
if cfg.Eleven.APIKey == "" {
return nil, errors.New("ELEVENLABS_API_KEY is required for pipeline_elevenlabs_streaming provider")
}
if cfg.Eleven.VoiceIDRU == "" {
return nil, errors.New("ELEVENLABS_VOICE_ID_RU is required for pipeline_elevenlabs_streaming provider")
}
if cfg.OpenAI.APIKey == "" {
return nil, errors.New("OPENAI_API_KEY is required for pipeline_elevenlabs_streaming provider")
}
return pipeline.NewStreamingProvider(cfg, logger), nil
default:
return nil, errors.New("unknown voice provider")
}
}