Rerank Module¶
The Rerank module provides document reranking functionality with support for two provider modes: OpenAI-compatible and DashScope.
The module uses a strategy pattern with separate handlers for each mode, ensuring a unified interface while hiding provider-specific differences.
Supported Modes¶
openai: OpenAI-compatible standard rerank API (e.g., Jina AI) (default)
dashscope: Alibaba Cloud DashScope rerank API
All modes return the same RerankResult format, hiding provider differences from users.
Unified Result Format¶
Regardless of the backend provider, all modes return a consistent RerankResult:
Results: List of tuples
(index, score)or(index, score, document)Sorting: Always sorted by score in descending order (higher is better)
Index Mapping: Original document indices are preserved correctly
Usage: Unified
Usageobject with token statistics
The internal transformation process handles: - Request format adaptation (parameter name mapping, structure wrapping) - Response parsing (extracting from provider-specific structures) - Result normalization (sorting, filtering, formatting)
See Rerank Modes Comparison for detailed comparison of internal data formats.
Rerank API client.
Provides a simple, function-like API for document reranking with unified usage tracking. Supports multiple provider modes: OpenAI-compatible and DashScope. Supports both sync and async operations with connection pooling.
- class lexilux.rerank.RerankResult(*, results, usage, raw=None)[source]¶
Bases:
ResultBaseRerank result.
The results field contains: - Ranked (List[Tuple[int, float]]) when include_docs=False - RankedWithDoc (List[Tuple[int, float, str]]) when include_docs=True
Results are sorted by score in descending order.
- results¶
Ranked results (with or without documents).
- usage¶
Usage statistics.
- raw¶
Raw API response.
Examples
>>> result = rerank("python http", ["urllib", "requests", "httpx"]) >>> ranked = result.results # List[Tuple[int, float]] >>> print(ranked[0]) # (1, 0.95) - (index, score)
>>> result = rerank("python http", ["urllib", "requests"], include_docs=True) >>> ranked = result.results # List[Tuple[int, float, str]] >>> print(ranked[0]) # (1, 0.95, "requests") - (index, score, doc)
- class lexilux.rerank.RerankModeHandler(base_url, api_key, headers, timeout_s, proxies=None, session=None)[source]¶
Bases:
ABCAbstract base class for rerank mode handlers.
Each handler implements provider-specific request/response format conversion while maintaining a unified interface. Supports connection pooling via shared session.
- __init__(base_url, api_key, headers, timeout_s, proxies=None, session=None)[source]¶
Initialize mode handler.
- abstractmethod build_request(query, docs, model, top_k, include_docs, extra)[source]¶
Build HTTP request for this mode.
- Parameters:
- Returns:
Tuple of (url, payload).
- Return type:
- abstractmethod parse_response(response_data, docs, include_docs, top_k)[source]¶
Parse API response for this mode.
- Parameters:
- Returns:
Tuple of (parsed_results, usage). parsed_results: List of (index, score, optional_doc) tuples.
- Return type:
- async amake_request(url, payload, async_client)[source]¶
Make async HTTP request.
- Parameters:
url (str) – Request URL.
payload (Json) – Request payload.
async_client (httpx.AsyncClient) – httpx.AsyncClient instance.
- Returns:
Response JSON data.
- Raises:
httpx.HTTPError – On network or HTTP errors.
- Return type:
Json
- class lexilux.rerank.OpenAICompatibleHandler(base_url, api_key, headers, timeout_s, proxies=None, session=None)[source]¶
Bases:
RerankModeHandlerHandler for OpenAI-compatible rerank API.
Standard OpenAI rerank format: - Endpoint: POST {base_url}/rerank - Request: {“model”: “…”, “query”: “…”, “documents”: […], “top_n”: …, “return_documents”: …} - Response: {“results”: [{“index”: 0, “relevance_score”: 0.95, “document”: {“text”: “…”}}, …], “usage”: {…}}
- class lexilux.rerank.DashScopeHandler(base_url, api_key, headers, timeout_s, proxies=None, session=None)[source]¶
Bases:
RerankModeHandlerHandler for Alibaba Cloud DashScope rerank API.
DashScope rerank format: - Endpoint: POST {base_url}/text-rerank/text-rerank (full path in base_url) - Request: {“model”: “…”, “input”: {“query”: “…”, “documents”: […]}, “parameters”: {…}} - Response: {“output”: {“results”: […]}, “usage”: {…}}
- class lexilux.rerank.Rerank(*, base_url, api_key=None, model=None, mode='openai', timeout_s=60.0, headers=None, proxies=None, pool_size=10)[source]¶
Bases:
AsyncClientMixinRerank API client with connection pooling.
Provides a simple, function-like API for document reranking. Supports two modes: - “openai”: OpenAI-compatible standard API (default) - “dashscope”: Alibaba Cloud DashScope API
Uses connection pooling for improved performance in high-throughput scenarios.
Examples
>>> # OpenAI-compatible mode (default) >>> rerank = Rerank( ... base_url="https://api.example.com/v1", ... api_key="key", ... model="rerank-model", ... mode="openai" ... ) >>> result = rerank("python http", ["urllib", "requests", "httpx"]) >>> ranked = result.results # List[Tuple[int, float]]
>>> # DashScope mode >>> rerank = Rerank( ... base_url="https://dashscope.aliyuncs.com/api/v1/services/rerank/text-rerank/text-rerank", ... api_key="key", ... model="qwen3-rerank", ... mode="dashscope" ... ) >>> result = rerank("python http", ["urllib", "requests", "httpx"])
>>> # Context manager for proper resource cleanup >>> with Rerank(base_url="...", api_key="key") as rerank: ... result = rerank("query", ["doc1", "doc2"])
- __init__(*, base_url, api_key=None, model=None, mode='openai', timeout_s=60.0, headers=None, proxies=None, pool_size=10)[source]¶
Initialize Rerank client.
- Parameters:
base_url (str) – Base URL for the API (e.g., “https://api.example.com/v1”).
api_key (str | None) – API key for authentication (optional if provided in headers).
model (str | None) – Default model to use (can be overridden in __call__).
mode (str) – Rerank mode. “openai” for OpenAI-compatible, “dashscope” for DashScope. Default is “openai”.
timeout_s (float) – Request timeout in seconds.
headers (dict[str, str] | None) – Additional headers to include in requests.
proxies (dict[str, str] | None) – Optional proxy configuration dict (e.g., {“http”: “http://proxy:port”}). If None, uses environment variables (HTTP_PROXY, HTTPS_PROXY). To disable proxies, pass {}.
pool_size (int) – Connection pool size for HTTP adapter (default: 10, max: 100).
- Raises:
ValueError – If mode is not supported or pool_size is out of range.
- __call__(query, docs, *, model=None, top_k=None, include_docs=False, extra=None, return_raw=False, mode=None)[source]¶
Make a rerank request.
- Parameters:
query (str) – Query string.
docs (Sequence[str]) – Sequence of document strings to rerank.
model (str | None) – Model to use (overrides default).
top_k (int | None) – Number of top results to return (optional).
include_docs (bool) – Whether to include documents in results.
extra (dict[str, Any] | None) – Additional parameters to include in the request.
return_raw (bool) – Whether to include full raw response.
mode (str | None) – Override mode for this call (“openai” or “dashscope”).
- Returns:
RerankResult with ranked results and usage.
- Raises:
requests.RequestException – On network or HTTP errors.
ValueError – On invalid input or response format.
- Return type:
- async acall(query, docs, *, model=None, top_k=None, include_docs=False, extra=None, return_raw=False, mode=None)[source]¶
Make an async rerank request.
This is the async version of
__call__(). All parameters and behavior are identical to the sync version.- Parameters:
query (str) – Query string.
docs (Sequence[str]) – Sequence of document strings to rerank.
model (str | None) – Model to use (overrides default).
top_k (int | None) – Number of top results to return (optional).
include_docs (bool) – Whether to include documents in results.
extra (dict[str, Any] | None) – Additional parameters to include in the request.
return_raw (bool) – Whether to include full raw response.
mode (str | None) – Override mode for this call.
- Returns:
RerankResult with ranked results and usage.
- Return type:
Examples
>>> result = await rerank.acall("python http", ["urllib", "requests"]) >>> ranked = result.results
See Also¶
Rerank Modes Comparison - Comprehensive comparison of rerank modes