From 5191bc474ae01a8305ff5b709c6eebfd48e94dae Mon Sep 17 00:00:00 2001 From: Lukasz Raczylo Date: Fri, 19 Jun 2026 14:01:43 +0100 Subject: [PATCH] refactor: extract magic numbers to named constants reranking.DefaultAlpha (was 0.7 duplicated) and scoring.retrievalLogFactor (was inline 0.1). --- internal/reranking/service.go | 8 ++++++-- internal/scoring/calculator.go | 7 ++++++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/internal/reranking/service.go b/internal/reranking/service.go index f6a5bb4..825c7df 100644 --- a/internal/reranking/service.go +++ b/internal/reranking/service.go @@ -34,6 +34,10 @@ const ( CrossEncoderAssetURL = "https://huggingface.co/cross-encoder/ms-marco-MiniLM-L6-v2/resolve/main/onnx/model.onnx" // CrossEncoderModelSHA256 is the expected SHA-256 of the cross-encoder model file. CrossEncoderModelSHA256 = "5d3e70fd0c9ff14b9b5169a51e957b7a9c74897afd0a35ce4bd318150c1d4d4a" + + // DefaultAlpha is the default score-combining weight, favoring the + // cross-encoder: combined = alpha*rerank + (1-alpha)*original. + DefaultAlpha = 0.7 ) // Candidate represents a search result candidate for reranking. @@ -79,7 +83,7 @@ type Config struct { // DefaultConfig returns sensible defaults for reranking. func DefaultConfig() Config { return Config{ - Alpha: 0.7, // Favor cross-encoder by default + Alpha: DefaultAlpha, // Favor cross-encoder by default } } @@ -121,7 +125,7 @@ func NewService(cfg Config) (*Service, error) { alpha := cfg.Alpha if alpha <= 0 || alpha > 1 { - alpha = 0.7 + alpha = DefaultAlpha } return &Service{ diff --git a/internal/scoring/calculator.go b/internal/scoring/calculator.go index b20ac67..3f5c324 100644 --- a/internal/scoring/calculator.go +++ b/internal/scoring/calculator.go @@ -8,6 +8,11 @@ import ( "github.com/lukaszraczylo/claude-mnemonic/pkg/models" ) +// retrievalLogFactor scales the diminishing-returns retrieval boost: +// log2(retrieval_count + 1) is multiplied by this factor before applying +// the configured retrieval weight. +const retrievalLogFactor = 0.1 + // Calculator computes importance scores for observations. type Calculator struct { config *models.ScoringConfig @@ -72,7 +77,7 @@ func (c *Calculator) CalculateComponents(obs *models.Observation, now time.Time) retrievalContrib := 0.0 if obs.RetrievalCount > 0 { // log2(count + 1) gives diminishing returns: 1→1, 3→2, 7→3, 15→4, etc. - retrievalBoost := math.Log2(float64(obs.RetrievalCount)+1) * 0.1 + retrievalBoost := math.Log2(float64(obs.RetrievalCount)+1) * retrievalLogFactor retrievalContrib = retrievalBoost * c.config.RetrievalWeight }