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") } }