package embedding import ( "context" "fmt" "ai-operator/internal/config" ) type Vector []float32 type Provider interface { Embed(ctx context.Context, input []string) ([]Vector, error) Dimensions() int Model() string ProviderName() string } func NewProvider(cfg config.Config, override string) (Provider, error) { name := cfg.Embedding.Provider if override != "" { name = override } switch name { case "fake": return NewFakeProvider(cfg.Embedding.Dimensions, cfg.Embedding.Model), nil case "openai": if cfg.OpenAI.APIKey == "" { return nil, fmt.Errorf("OPENAI_API_KEY is required for openai embedding provider") } return NewOpenAIProvider(cfg.OpenAI.APIKey, cfg.Embedding.Model, cfg.Embedding.Dimensions), nil default: return nil, fmt.Errorf("unknown embedding provider: %s", name) } }