Skip to content

Commit 6748a04

Browse files
committed
fixing windows build target
1 parent 8f02dde commit 6748a04

File tree

2 files changed

+73
-0
lines changed

2 files changed

+73
-0
lines changed

pkg/localllm/yzma_bindings.go

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -535,6 +535,69 @@ func (m *Model) Close() error {
535535
return nil
536536
}
537537

538+
// ============================================================================
539+
// RERANKER (Stage-2 search reranking)
540+
// ============================================================================
541+
542+
// RerankerModel wraps a model for reranking (query, document) pairs.
543+
//
544+
// Note: yzma does not currently expose a dedicated reranker/logit API here,
545+
// so we approximate relevance with embedding cosine similarity.
546+
type RerankerModel struct {
547+
model *Model
548+
}
549+
550+
// LoadRerankerModel loads a GGUF model for reranking.
551+
func LoadRerankerModel(opts Options) (*RerankerModel, error) {
552+
model, err := LoadModel(opts)
553+
if err != nil {
554+
return nil, err
555+
}
556+
return &RerankerModel{model: model}, nil
557+
}
558+
559+
// Score returns a relevance score in [0,1] for a (query, document) pair.
560+
//
561+
// Implementation detail:
562+
// - Computes normalized embeddings for query and document
563+
// - Uses cosine similarity
564+
// - Maps from [-1,1] to [0,1]
565+
func (r *RerankerModel) Score(ctx context.Context, query, document string) (float32, error) {
566+
if r == nil || r.model == nil {
567+
return 0, fmt.Errorf("reranker model not loaded")
568+
}
569+
570+
qVec, err := r.model.Embed(ctx, query)
571+
if err != nil {
572+
return 0, err
573+
}
574+
dVec, err := r.model.Embed(ctx, document)
575+
if err != nil {
576+
return 0, err
577+
}
578+
if len(qVec) == 0 || len(dVec) == 0 {
579+
return 0, fmt.Errorf("reranker returned empty embedding")
580+
}
581+
582+
cos := vector.CosineSimilarity(qVec, dVec)
583+
if cos > 1 {
584+
cos = 1
585+
}
586+
if cos < -1 {
587+
cos = -1
588+
}
589+
590+
return float32((cos + 1.0) / 2.0), nil
591+
}
592+
593+
// Close releases reranker resources.
594+
func (r *RerankerModel) Close() error {
595+
if r == nil || r.model == nil {
596+
return nil
597+
}
598+
return r.model.Close()
599+
}
600+
538601
// ============================================================================
539602
// TEXT GENERATION (for Heimdall SLM)
540603
// ============================================================================

ui/package-lock.json

Lines changed: 10 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)