Some checks failed
CI / build-and-test (push) Failing after -31m12s
All internal entity lookups now use bigserial primary keys (int64) while GUIDs are retained for external/public identification. Updated store functions (TouchProject, UpdateThoughtMetadata, AddThoughtAttachment) to query by id instead of guid, added GetThoughtByID, changed semanticSearch and all tool helpers to use *int64 project IDs, and updated retry/backfill workers to use int64 thought IDs throughout.
45 lines
1.2 KiB
Go
45 lines
1.2 KiB
Go
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
|
|
// primary embedding model in the given scope, otherwise falls back to Postgres
|
|
// full-text search. Search always uses the primary model so query vectors
|
|
// match rows stored under the primary model name.
|
|
func semanticSearch(
|
|
ctx context.Context,
|
|
db *store.DB,
|
|
embeddings *ai.EmbeddingRunner,
|
|
search config.SearchConfig,
|
|
query string,
|
|
limit int,
|
|
threshold float64,
|
|
projectID *int64,
|
|
excludeID *uuid.UUID,
|
|
) ([]thoughttypes.SearchResult, error) {
|
|
model := embeddings.PrimaryModel()
|
|
hasEmbeddings, err := db.HasEmbeddingsForModel(ctx, model, projectID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if hasEmbeddings {
|
|
embedding, err := embeddings.EmbedPrimary(ctx, query)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return db.SearchSimilarThoughts(ctx, embedding, model, threshold, limit, projectID, excludeID)
|
|
}
|
|
|
|
return db.SearchThoughtsText(ctx, query, limit, projectID, excludeID)
|
|
}
|