{"record":{"id":"4da4089c19bee60b","repo":"BerriAI/litellm","slug":"api-base-is-required-for-infinity-rerank","errorCode":null,"errorMessage":"api_base is required for Infinity rerank","messagePattern":"api_base is required for Infinity rerank","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"litellm/llms/infinity/rerank/transformation.py","lineNumber":36,"sourceCode":"    RerankResponse,\n    RerankResponseDocument,\n    RerankResponseMeta,\n    RerankResponseResult,\n    RerankTokens,\n)\n\nfrom ..common_utils import InfinityError\n\n\nclass InfinityRerankConfig(CohereRerankConfig):\n    def get_complete_url(\n        self,\n        api_base: str | None,\n        model: str,\n        optional_params: dict | None = None,\n    ) -> str:\n        if api_base is None:\n            raise ValueError(\"api_base is required for Infinity rerank\")\n        # Remove trailing slashes and ensure clean base URL\n        api_base = api_base.rstrip(\"/\")\n        if not api_base.endswith(\"/rerank\"):\n            api_base = f\"{api_base}/rerank\"\n        return api_base\n\n    def validate_environment(\n        self,\n        headers: dict,\n        model: str,\n        api_key: str | None = None,\n        optional_params: dict | None = None,\n    ) -> dict:\n        if api_key is None:\n            api_key = get_secret_str(\"INFINITY_API_KEY\") or get_secret_str(\"INFINITY_API_KEY\") or litellm.infinity_key\n\n        default_headers: Final = {\n            \"Authorization\": f\"Bearer {api_key}\",","sourceCodeStart":18,"sourceCodeEnd":54,"githubUrl":"https://github.com/BerriAI/litellm/blob/6c2dcb801bf2b75c18f1bb24140e7cf57465cc4d/litellm/llms/infinity/rerank/transformation.py#L18-L54","documentation":"Raised by the Infinity rerank config when api_base is None while constructing the /rerank URL. Infinity is self-hosted; litellm has no default endpoint for it, so the call is aborted with a ValueError before any HTTP request.","triggerScenarios":"litellm.rerank(model='infinity/<model>', query=..., documents=...) with api_base omitted (neither passed nor present in proxy model config).","commonSituations":"Proxy config entry for the infinity reranker missing the api_base field; migrating from a cloud reranker and forgetting the self-host URL.","solutions":["Pass api_base explicitly: litellm.rerank(model='infinity/BAAI/bge-reranker-v2-m3', query=q, documents=docs, api_base='http://localhost:7111').","Add api_base to the model entry in the litellm proxy config.","Verify the Infinity instance exposes /rerank (recent Infinity versions) at that base."],"exampleFix":"# before\nlitellm.rerank(model='infinity/BAAI/bge-reranker-v2-m3', query=q, documents=docs)\n\n# after\nlitellm.rerank(model='infinity/BAAI/bge-reranker-v2-m3', query=q, documents=docs, api_base='http://localhost:7111')","handlingStrategy":"validation","validationCode":"def resolve_infinity_rerank_base(cfg: dict) -> str:\n    base = cfg.get('api_base') or os.environ.get('INFINITY_API_BASE')\n    if not base:\n        raise ValueError('api_base required for infinity rerank; set INFINITY_API_BASE')\n    return base","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Schema-validate proxy config files: require api_base for infinity models","Unit-test config loading with api_base absent to catch the failure at build time"],"tags":["infinity","rerank","configuration","api-base","self-hosted"],"backgroundTag":null,"analyzedSha":"6c2dcb801bf2b75c18f1bb24140e7cf57465cc4d","analyzedAt":"2026-08-15T07:12:03.035Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}