package embedding import ( "context" "testing" "git.yeij.top/AskaEth/Cyrene_v2/internal/config" ) func TestManager_SelectsAPIWhenConfigured(t *testing.T) { t.Parallel() cfg := config.EmbeddingConfig{ APIURL: "http://localhost:9999/v1/embeddings", APIKey: "secret", Model: "text-embedding-3-small", } m := New(cfg) if m.Embedder() == nil { t.Fatal("Embedder() returned nil") } if _, ok := m.Embedder().(*APIEmbedder); !ok { t.Fatalf("Embedder() = %T, want *APIEmbedder", m.Embedder()) } } func TestManager_SelectsNGramByDefault(t *testing.T) { t.Parallel() m := New(config.EmbeddingConfig{}) emb, ok := m.Embedder().(*NGramEmbedder) if !ok { t.Fatalf("Embedder() = %T, want *NGramEmbedder", m.Embedder()) } if emb.Dim() != defaultNGramDim { t.Errorf("default ngram dim = %d, want %d", emb.Dim(), defaultNGramDim) } } func TestManager_BlankAPIURLSelectsNGram(t *testing.T) { t.Parallel() cfg := config.EmbeddingConfig{APIURL: " "} // whitespace counts as unset m := New(cfg) if _, ok := m.Embedder().(*NGramEmbedder); !ok { t.Fatalf("Embedder() = %T, want *NGramEmbedder for blank URL", m.Embedder()) } } func TestManager_EmbedDelegatesToSelectedEmbedder(t *testing.T) { t.Parallel() m := New(config.EmbeddingConfig{}) vectors, err := m.Embed(context.Background(), []string{"hello"}) if err != nil { t.Fatalf("Embed() error: %v", err) } if len(vectors) != 1 { t.Fatalf("got %d vectors, want 1", len(vectors)) } if len(vectors[0]) != defaultNGramDim { t.Errorf("vector length = %d, want %d", len(vectors[0]), defaultNGramDim) } }