{"record":{"id":"98c5b3de881d2171","repo":"sigoden/aichat","slug":"the-client-doesn-t-support-rerank-api","errorCode":null,"errorMessage":"The client doesn't support rerank api","messagePattern":"The client doesn't support rerank api","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/client/common.rs","lineNumber":148,"sourceCode":"        client: &ReqwestClient,\n        handler: &mut SseHandler,\n        data: ChatCompletionsData,\n    ) -> Result<()>;\n\n    async fn embeddings_inner(\n        &self,\n        _client: &ReqwestClient,\n        _data: &EmbeddingsData,\n    ) -> Result<EmbeddingsOutput> {\n        bail!(\"The client doesn't support embeddings api\")\n    }\n\n    async fn rerank_inner(\n        &self,\n        _client: &ReqwestClient,\n        _data: &RerankData,\n    ) -> Result<RerankOutput> {\n        bail!(\"The client doesn't support rerank api\")\n    }\n\n    fn request_builder(\n        &self,\n        client: &reqwest::Client,\n        mut request_data: RequestData,\n    ) -> RequestBuilder {\n        self.patch_request_data(&mut request_data);\n        request_data.into_builder(client)\n    }\n\n    fn patch_request_data(&self, request_data: &mut RequestData) {\n        let model_type = self.model().model_type();\n        if let Some(patch) = self.model().patch() {\n            request_data.apply_patch(patch.clone());\n        }\n\n        let patch_map = std::env::var(get_env_name(&format!(","sourceCodeStart":130,"sourceCodeEnd":166,"githubUrl":"https://github.com/sigoden/aichat/blob/82976d349ad97ac9aae0655ad631dace5e2a6385/src/client/common.rs#L130-L166","documentation":"This is the default trait implementation of Client::rerank_inner in src/client/common.rs. Clients without a rerank implementation inherit this stub which always fails. Calling rerank() on such a client is guaranteed to error because the provider exposes no rerank capability in this library.","triggerScenarios":"Calling client.rerank(data) (rerank -> rerank_inner) on any client that has not overridden rerank_inner — e.g. OpenAI, Claude, or other clients lacking rerank support (Cohere implements it).","commonSituations":"Building RAG pipelines that assume every provider can rerank, switching providers without checking rerank support, or calling rerank on a chat-only client.","solutions":["Use a client that implements rerank (e.g. Cohere's rerank API) for reranking steps","Check provider capability before calling rerank and fall back to another provider","Implement rerank_inner for your provider if it offers a rerank endpoint","Skip the rerank stage for providers without support"],"exampleFix":"// before\nlet ranked = client.rerank(rerank_data).await?;  // fails on non-Cohere clients\n// after\nlet ranked = cohere_client.rerank(rerank_data).await?;","handlingStrategy":"fallback","validationCode":"// capability check before calling\nif !client.supports_rerank() { /* skip or route to Cohere */ }","typeGuard":"fn supports_rerank(client: &dyn Client) -> bool {\n    matches!(client.as_any().downcast_ref::<CohereClient>(), Some(_))\n}","tryCatchPattern":"match client.rerank(data).await {\n    Err(e) if e.to_string().contains(\"doesn't support rerank\") => {\n        cohere_client.rerank(data).await\n    }\n    r => r,\n}","preventionTips":["Use Cohere (or another rerank-capable client) for rerank stages","Make rerank optional in RAG pipelines with a graceful skip","Check capabilities at config load time, not at call time","Keep a capability matrix of providers in project docs"],"tags":["rerank","unsupported-feature","trait-default","capability"],"backgroundTag":"method-not-implemented","analyzedSha":"82976d349ad97ac9aae0655ad631dace5e2a6385","analyzedAt":"2026-09-09T18:33:06.139Z","contentChangedAt":"2026-09-09T18:33:06.139Z","schemaVersion":2},"datasetVersion":"2026-09-16T09:17:16.951Z"}