package tools import ( "context" "github.com/google/uuid" "git.warky.dev/wdevs/amcs/internal/ai" "git.warky.dev/wdevs/amcs/internal/config" "git.warky.dev/wdevs/amcs/internal/store" thoughttypes "git.warky.dev/wdevs/amcs/internal/types" ) // semanticSearch runs vector similarity search if embeddings exist for the active model // in the given scope, otherwise falls back to Postgres full-text search. func semanticSearch( ctx context.Context, db *store.DB, provider ai.Provider, search config.SearchConfig, query string, limit int, threshold float64, projectID *uuid.UUID, excludeID *uuid.UUID, ) ([]thoughttypes.SearchResult, error) { hasEmbeddings, err := db.HasEmbeddingsForModel(ctx, provider.EmbeddingModel(), projectID) if err != nil { return nil, err } if hasEmbeddings { embedding, err := provider.Embed(ctx, query) if err != nil { return nil, err } return db.SearchSimilarThoughts(ctx, embedding, provider.EmbeddingModel(), threshold, limit, projectID, excludeID) } return db.SearchThoughtsText(ctx, query, limit, projectID, excludeID) }