{"record":{"id":"ba7cdedb518c7c73","repo":"mem0ai/mem0","slug":"unsupported-reranker-provider-provider","errorCode":null,"errorMessage":"Unsupported reranker provider: ${provider}","messagePattern":"Unsupported reranker provider: (.+?)","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"mem0-ts/src/oss/src/utils/factory.ts","lineNumber":240,"sourceCode":"      case \"zero_entropy\":\n        return new ZeroEntropyReranker(config);\n      case \"sentence_transformer\":\n        return new CrossEncoderReranker(\n          config,\n          \"Xenova/ms-marco-MiniLM-L-6-v2\",\n        );\n      case \"huggingface\":\n        return new CrossEncoderReranker(\n          config,\n          \"Xenova/bge-reranker-base\",\n          512,\n        );\n      case \"llm_reranker\": {\n        const llm = RerankerFactory.buildLLMRerankerLLM(config);\n        return new LLMReranker(config, llm);\n      }\n      default:\n        throw new Error(`Unsupported reranker provider: ${provider}`);\n    }\n  }\n\n  private static buildLLMRerankerLLM(config: RerankerConfig): LLM {\n    const nested = config.llm;\n    let llmProvider: string;\n    let llmConfig: LLMConfig;\n\n    if (nested) {\n      llmProvider = nested.provider || config.provider || \"openai\";\n      llmConfig = { ...(nested.config || {}) };\n      if (llmConfig.model === undefined) {\n        llmConfig.model = config.model ?? \"gpt-5-mini\";\n      }\n      if (llmConfig.temperature === undefined) {\n        llmConfig.temperature = config.temperature ?? 0.0;\n      }\n      if (llmConfig.maxTokens === undefined) {","sourceCodeStart":222,"sourceCodeEnd":258,"githubUrl":"https://github.com/mem0ai/mem0/blob/001c235229be8795e3834520467bd0d661ed8f34/mem0-ts/src/oss/src/utils/factory.ts#L222-L258","documentation":"Thrown by RerankerFactory.create when the reranker provider does not match a supported case (cohere, zero_entropy, sentence_transformer, huggingface, llm_reranker). It fires during construction of the reranker pipeline when the reranker.provider config string is unrecognized.","triggerScenarios":"new Memory({ reranker: { provider: 'cross-encoder', config: {...} } }) (implementation class name instead of provider id), or reranker: { provider: 'hf' } instead of 'huggingface'.","commonSituations":"Reranker names differ from the Python SDK or from the underlying library names; enabling reranking for the first time by guessing the provider identifier; stale docs after a provider rename.","solutions":["Use one of the exact reranker provider ids in RerankerFactory.create (cohere, zero_entropy, sentence_transformer, huggingface, llm_reranker).","For local cross-encoder reranking use 'huggingface' or 'sentence_transformer', not the class name.","For LLM-based reranking use 'llm_reranker' and supply the nested llm config."],"exampleFix":"// before\nreranker: { provider: 'cross-encoder', config: {} }\n// after\nreranker: { provider: 'huggingface', config: {} }","handlingStrategy":"validation","validationCode":"const RERANKERS = ['cohere','zero_entropy','sentence_transformer','huggingface','llm_reranker'];\nfunction assertReranker(provider: string) {\n  if (!RERANKERS.includes(provider.toLowerCase())) throw new Error(`Unsupported reranker '${provider}'`);\n}","typeGuard":"const isKnownReranker = (p: string): boolean => RERANKERS.includes(p.toLowerCase());","tryCatchPattern":"try { new Memory(cfg) } catch (e) { if (e instanceof Error && /Unsupported reranker provider/.test(e.message)) { cfg.reranker = undefined; return new Memory(cfg); } throw e; }","preventionTips":["Treat reranking as optional: catch factory errors and retry without the reranker.","Use the factory's provider ids, not class names like 'CrossEncoderReranker'."],"tags":["configuration","reranker","typescript","factory"],"backgroundTag":null,"analyzedSha":"001c235229be8795e3834520467bd0d661ed8f34","analyzedAt":"2026-08-15T01:55:42.685Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}