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 ¶
- func ApplyCompositeScoring(observations []*models.Observation, similarityScores map[int64]float64)
- func ApplyDiversityPenalty(observations []*models.Observation, scores map[int64]float64, ...)
- func ApplySessionBoost(observations []*models.Observation, scores map[int64]float64, ...)
- func BM25Normalize(score float64) float64
- type LLMFilter
- type Manager
- func (m *Manager) CacheStats() map[string]any
- func (m *Manager) Changes(ctx context.Context, params SearchParams) (*UnifiedSearchResult, error)
- func (m *Manager) ClearCache()
- func (m *Manager) Close()
- func (m *Manager) Decisions(ctx context.Context, params SearchParams) (*UnifiedSearchResult, error)
- func (m *Manager) GetFrequentQueries(limit int) []RecentQuery
- func (m *Manager) GetProjectThreshold(ctx context.Context, project string, globalDefault float64) float64
- func (m *Manager) GetRecentQueries(limit int) []RecentQuery
- func (m *Manager) HowItWorks(ctx context.Context, params SearchParams) (*UnifiedSearchResult, error)
- func (m *Manager) Metrics() *SearchMetrics
- func (m *Manager) SetDocumentStore(ds *gorm.DocumentStore, es *embedding.Service)
- func (m *Manager) SetGraphStore(gs graphpkg.GraphStore)
- func (m *Manager) SetProjectSettingsStore(ps *gorm.ProjectSettingsStore)
- func (m *Manager) UnifiedSearch(ctx context.Context, params SearchParams) (*UnifiedSearchResult, error)
- type RecentQuery
- type ScoredID
- type SearchMetrics
- type SearchParams
- type SearchResult
- type UnifiedSearchResult
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 ¶
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
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 ¶
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 ¶
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.