Skip to content

Conversation

@sgaluza
Copy link

@sgaluza sgaluza commented Jan 14, 2026

Summary

Add configurable reranker (cross-encoder) support to MCP server for 2-stage retrieval:

  1. Embeddings find candidate passages (fast, approximate)
  2. Reranker scores each passage against query (slower, but more precise)

Changes

  • mcp_server/src/config/schema.py: Add RerankerConfig and RerankerProvidersConfig
  • mcp_server/src/services/factories.py: Add RerankerFactory with OpenAI and Gemini support

Configuration

Environment Variables

# Enable OpenAI reranker (default)
RERANKER__PROVIDER=openai
RERANKER__MODEL=gpt-4.1-nano
RERANKER__PROVIDERS__OPENAI__API_KEY=sk-...

# Or use Gemini
RERANKER__PROVIDER=gemini
RERANKER__MODEL=gemini-2.5-flash
RERANKER__PROVIDERS__GEMINI__API_KEY=...

# Disable reranker
RERANKER__PROVIDER=none

YAML Config

reranker:
  provider: openai  # openai, gemini, none, disabled
  model: gpt-4.1-nano
  providers:
    openai:
      api_key: ${OPENAI_API_KEY}
    gemini:
      api_key: ${GOOGLE_API_KEY}

Graceful Degradation

If graphiti-core version doesn't include cross_encoder module, the factory will raise a clear error:

OpenAI Reranker not available in current graphiti-core version

Why gpt-4.1-nano as default?

Reranker performs simple True/False classification per passage. The task is lightweight, so:

  • gpt-4.1-nano — faster, good for high-throughput
  • gpt-5-nano — 2x cheaper input ($0.05 vs $0.10/1M), but has reasoning overhead

Users can choose based on their latency vs cost preferences.


Built OnSteroids

sgaluza and others added 2 commits January 14, 2026 21:19
Add RerankerFactory and RerankerConfig to enable 2-stage retrieval:
1. Embeddings find candidate passages (fast, approximate)
2. Reranker scores each passage against query (slower, precise)

Configuration options:
- provider: openai, gemini, none/disabled
- model: defaults to gpt-4.1-nano
- providers: API keys for each provider

Graceful fallback when graphiti-core version doesn't support
cross_encoder module (HAS_OPENAI_RERANKER, HAS_GEMINI_RERANKER flags).

Built with [OnSteroids](https://onsteroids.ai)

Co-Authored-By: OnSteroids <built@onsteroids.ai>
Add tests for RerankerFactory:
- Test disabled reranker returns None
- Test OpenAI reranker creation (with API key check)
- Test unsupported provider raises ValueError

Built with [OnSteroids](https://onsteroids.ai)

Co-Authored-By: OnSteroids <built@onsteroids.ai>
@sgaluza sgaluza marked this pull request as ready for review January 14, 2026 20:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant