sync: migrate ai-operator to Gitea (2026-08-10)

This commit is contained in:
konturai-ops
2026-08-10 15:26:52 +00:00
commit 53652b95ad
173 changed files with 16676 additions and 0 deletions
+38
View File
@@ -0,0 +1,38 @@
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")
}
}
+21
View File
@@ -0,0 +1,21 @@
package provider
import (
"ai-operator/internal/config"
"io"
"log/slog"
"testing"
)
func TestFactory(t *testing.T) {
logger := slog.New(slog.NewTextHandler(io.Discard, nil))
if p, err := NewVoiceProvider(config.Config{Voice: config.VoiceConfig{Provider: "fake"}}, logger); err != nil || p == nil {
t.Fatalf("fake %v", err)
}
if _, err := NewVoiceProvider(config.Config{Voice: config.VoiceConfig{Provider: "openai_realtime"}}, logger); err == nil {
t.Fatal("want key error")
}
if _, err := NewVoiceProvider(config.Config{Voice: config.VoiceConfig{Provider: "bad"}}, logger); err == nil {
t.Fatal("want unknown error")
}
}