haiku.rag/haiku_rag_slim/haiku/rag/reranking/__init__.py
Yiorgis Gozadinos 543aba7547
Multimodal reranking: send picture chunks to vllm rerankers as images
reranking.multimodal (vllm provider only) attaches picture bytes to
synthetic picture chunks before rerank; VLLMReranker sends them as
content-parts documents (base64 data URI + description text) in the
same /v1/rerank request as plain text documents.
2026-07-24 12:29:20 +03:00

54 lines
1.9 KiB
Python

from haiku.rag.config import AppConfig, Config
from haiku.rag.reranking.base import RerankerBase
def get_reranker(config: AppConfig = Config) -> RerankerBase | None:
"""Build the configured reranker, or None if reranking is disabled or its
optional dependency is not installed."""
model = config.reranking.model
if model is None:
return None
if config.reranking.multimodal and model.provider != "vllm":
raise ValueError("reranking.multimodal is only supported on the vllm provider")
try:
if model.provider == "cohere":
from haiku.rag.reranking.cohere import CohereReranker
return CohereReranker()
if model.provider == "vllm":
if not model.base_url:
raise ValueError("vLLM reranker requires base_url in reranking.model")
from haiku.rag.reranking.vllm import VLLMReranker
return VLLMReranker(model.name, model.base_url)
if model.provider == "zeroentropy":
from haiku.rag.reranking.zeroentropy import ZeroEntropyReranker
return ZeroEntropyReranker(model.name or "zerank-1")
if model.provider == "jina":
from haiku.rag.reranking.jina import JinaReranker
return JinaReranker(model.name or "jina-reranker-v3")
if model.provider == "jina-local":
from haiku.rag.reranking.jina_local import JinaLocalReranker
return JinaLocalReranker(model.name or "jinaai/jina-reranker-v3")
if model.provider == "cross-encoder":
if not model.name:
raise ValueError(
"cross-encoder reranker requires name in reranking.model"
)
from haiku.rag.reranking.cross_encoder import CrossEncoderReranker
return CrossEncoderReranker(model.name)
except ImportError: # pragma: no cover
return None
raise ValueError(f"Unknown reranking provider: {model.provider}")