search

package
v1.9.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 27, 2026 License: MIT Imports: 21 Imported by: 0

Documentation

Overview

Package search provides unified search capabilities for engram.

Package search provides unified search capabilities for engram.

Package search provides unified search capabilities for engram.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func ApplyCompositeScoring added in v1.4.0

func ApplyCompositeScoring(observations []*models.Observation, similarityScores map[int64]float64)

ApplyCompositeScoring re-ranks observations using multi-signal scoring. Formula: score = similarity × recencyDecay × typeWeight × max(importance, 0.3) × sourceBoost × feedbackBoost This ensures that recent, high-importance decisions rank above old generic discoveries. Explicit saves (store_memory) never decay and receive a source boost.

func ApplyDiversityPenalty added in v1.5.0

func ApplyDiversityPenalty(observations []*models.Observation, scores map[int64]float64, diversityScores map[int64]float64)

ApplyDiversityPenalty adjusts scores based on injection diversity. High diversity (observation injected across many projects) = generic = penalty. Scope=global observations are exempt (they are intentionally cross-project). Only scope=project observations with diversity > 0.5 are penalized. Penalty formula: score *= 1.0 - (diversity - 0.5) * 0.4, floored at multiplier 0.8.

func ApplySessionBoost added in v1.7.0

func ApplySessionBoost(observations []*models.Observation, scores map[int64]float64, recentSessionIDs map[string]bool, boostFactor float64)

ApplySessionBoost multiplies composite scores for observations that belong to recently active sessions. recentSessionIDs is a map[sdk_session_id]bool built once per search call (see ObservationStore.GetRecentSessionIDs). boostFactor should be > 1.0 (e.g. 1.3).

func BM25Normalize

func BM25Normalize(score float64) float64

BM25Normalize converts a raw PostgreSQL ts_rank score to [0,1). formula: |x| / (1 + |x|)

Types

type LLMFilter added in v1.5.0

type LLMFilter struct {
	// contains filtered or unexported fields
}

LLMFilter evaluates observation candidates for behavioral relevance using an LLM.

func NewLLMFilter added in v1.5.0

func NewLLMFilter(client learning.LLMClient, timeout time.Duration) *LLMFilter

NewLLMFilter creates a new LLM-based relevance filter.

func (*LLMFilter) FilterByRelevance added in v1.5.0

func (f *LLMFilter) FilterByRelevance(ctx context.Context, candidates []*models.Observation, project, taskContext string) []int64

FilterByRelevance evaluates candidates against the current task context. Returns the subset of observation IDs that the LLM considers behaviorally relevant. On timeout or error, returns all candidate IDs (fallback to composite scoring).

type Manager

type Manager struct {
	// contains filtered or unexported fields
}

Manager provides unified search across PostgreSQL and pgvector.

func NewManager

func NewManager(
	observationStore *gorm.ObservationStore,
	summaryStore *gorm.SummaryStore,
	promptStore *gorm.PromptStore,
	vectorClient vector.Client,
) *Manager

NewManager creates a new search manager.

func (*Manager) CacheStats

func (m *Manager) CacheStats() map[string]any

CacheStats returns current cache statistics.

func (*Manager) Changes

func (m *Manager) Changes(ctx context.Context, params SearchParams) (*UnifiedSearchResult, error)

Changes performs a semantic search optimized for finding code changes.

func (*Manager) ClearCache

func (m *Manager) ClearCache()

ClearCache clears the result cache. Useful for testing or after data changes.

func (*Manager) Close

func (m *Manager) Close()

Close stops background goroutines and cleans up resources.

func (*Manager) Decisions

func (m *Manager) Decisions(ctx context.Context, params SearchParams) (*UnifiedSearchResult, error)

Decisions performs a semantic search optimized for finding decisions.

func (*Manager) GetFrequentQueries

func (m *Manager) GetFrequentQueries(limit int) []RecentQuery

GetFrequentQueries returns the most frequently used search queries.

func (*Manager) GetProjectThreshold added in v1.7.0

func (m *Manager) GetProjectThreshold(ctx context.Context, project string, globalDefault float64) float64

GetProjectThreshold returns the per-project relevance threshold. Falls back to globalDefault if no project-specific setting exists.

func (*Manager) GetRecentQueries

func (m *Manager) GetRecentQueries(limit int) []RecentQuery

GetRecentQueries returns the most recent search queries, sorted by last used time.

func (*Manager) HowItWorks

func (m *Manager) HowItWorks(ctx context.Context, params SearchParams) (*UnifiedSearchResult, error)

HowItWorks performs a semantic search optimized for understanding architecture.

func (*Manager) Metrics

func (m *Manager) Metrics() *SearchMetrics

Metrics returns the search metrics for monitoring.

func (*Manager) SetDocumentStore added in v0.3.0

func (m *Manager) SetDocumentStore(ds *gorm.DocumentStore, es *embedding.Service)

SetDocumentStore sets the document store and embedding service for document search.

func (*Manager) SetGraphStore

func (m *Manager) SetGraphStore(gs graphpkg.GraphStore)

SetGraphStore sets the graph store for graph-augmented search expansion.

func (*Manager) SetProjectSettingsStore added in v1.7.0

func (m *Manager) SetProjectSettingsStore(ps *gorm.ProjectSettingsStore)

SetProjectSettingsStore sets the project settings store for per-project adaptive thresholds.

func (*Manager) UnifiedSearch

func (m *Manager) UnifiedSearch(ctx context.Context, params SearchParams) (*UnifiedSearchResult, error)

UnifiedSearch performs a unified search across all document types. Uses caching and request coalescing for optimal performance.

type RecentQuery

type RecentQuery struct {
	LastUsed time.Time `json:"last_used"`
	Query    string    `json:"query"`
	Project  string    `json:"project,omitempty"`
	Type     string    `json:"type,omitempty"`
	Count    int64     `json:"count"`
}

RecentQuery represents a recently executed search query.

type ScoredID

type ScoredID struct {
	DocType string // "observation", "session", "prompt"
	Score   float64
	ID      int64
}

ScoredID pairs a database row ID with a composite search score and document type.

func RRF

func RRF(lists ...[]ScoredID) []ScoredID

RRF fuses multiple ranked lists using Reciprocal Rank Fusion (k=60). Each input list must be sorted descending by score (best first).

Weighting rules:

  • First two lists in the variadic args receive 2x weight multiplier
  • Top-rank bonuses: rank=0 -> +0.05, rank<=2 -> +0.02

Returns a deduplicated list sorted by fused score descending. Deduplication key: (ID, DocType) pair — keeps highest accumulated score.

type SearchMetrics

type SearchMetrics struct {
	TotalSearches     int64
	VectorSearches    int64
	FilterSearches    int64
	TotalLatencyNs    int64
	VectorLatencyNs   int64
	FilterLatencyNs   int64
	CacheHits         int64
	CoalescedRequests int64
	SearchErrors      int64
	FTSShortCircuits  int64
	// contains filtered or unexported fields
}

SearchMetrics tracks search performance statistics.

func (*SearchMetrics) GetStats

func (m *SearchMetrics) GetStats() map[string]any

GetStats returns the current search statistics.

type SearchParams

type SearchParams struct {
	Format            string
	Type              string
	Project           string
	ObsType           string
	Concepts          string
	Files             string
	Query             string
	Scope             string
	OrderBy           string
	DateStart         int64
	Offset            int
	Limit             int
	DateEnd           int64
	IncludeGlobal     bool
	ExcludeSuperseded bool
}

SearchParams contains parameters for unified search.

type SearchResult

type SearchResult struct {
	Metadata  map[string]any `json:"metadata,omitempty"`
	Type      string         `json:"type"`
	Title     string         `json:"title,omitempty"`
	Content   string         `json:"content,omitempty"`
	Project   string         `json:"project"`
	Scope     string         `json:"scope,omitempty"`
	ID        int64          `json:"id"`
	CreatedAt int64          `json:"created_at_epoch"`
	Score     float64        `json:"score,omitempty"`
}

SearchResult represents a unified search result. Field order optimized for memory alignment (fieldalignment).

type UnifiedSearchResult

type UnifiedSearchResult struct {
	Query      string         `json:"query,omitempty"`
	Results    []SearchResult `json:"results"`
	TotalCount int            `json:"total_count"`
}

UnifiedSearchResult contains the combined search results.

Directories

Path Synopsis
Package expansion provides context-aware query expansion for improved search recall.
Package expansion provides context-aware query expansion for improved search recall.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL