36 lines
820 B
Go
36 lines
820 B
Go
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)
|
|
}
|
|
}
|