Skip to content

W1.2 — EmbeddingsRanker reusing CodeIndexManager provider with BM25 fallback #19

Description

@edelauna

Context

When the user has an embedding provider configured (Roo's CodeIndexManager already wires Ollama / OpenAI-compatible / Anthropic), we get better recall than BM25 — especially for paraphrased queries. We piggyback on the existing config so users don't have to set it up twice.

Foundational; depends on W1.1 being merged so the Ranker interface exists.

Developer Notes

  • New src/services/tools/EmbeddingsRanker.ts implementing the same Ranker interface from W1.1.
  • Reuse the embedding provider exposed by CodeIndexManager (likely needs a thin facade exporting embedText(text: string) → Promise<number[]>).
  • Maintain an in-memory Map<toolKey, vector> cache. Invalidate on MCP server config change (W1.3 owns the invalidation hook; this ticket just respects it).
  • Cosine similarity for ranking. Top-K by score.
  • Auto-selection: in the Ranker factory, prefer EmbeddingsRanker if CodeIndexManager.hasEmbeddingProvider() returns true; fall back to Bm25Ranker if not, or if any embedding call throws.
  • Files: src/services/tools/EmbeddingsRanker.ts, src/services/tools/index.ts (factory).
  • Validation: unit test with mock embedding provider returning known vectors — verify cosine ranking. Integration test: trigger embedding error → factory returns BM25 result instead, no user-visible failure.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions