{"record":{"id":"d959e7bba9420098","repo":"CherryHQ/cherry-studio","slug":"use-rerankingmodel-for-jina-rerank-endpoint-type","errorCode":null,"errorMessage":"Use rerankingModel() for jina-rerank endpoint type","messagePattern":"Use rerankingModel\\(\\) for jina-rerank endpoint type","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"src/main/ai/provider/custom/newapiProvider.ts","lineNumber":132,"sourceCode":"      headers: authHeaders,\n      fetch: customFetch\n    })\n\n  const createChatModel = (modelId: string): LanguageModelV3 => {\n    switch (endpointType) {\n      case 'anthropic':\n        return createAnthropicModel(modelId)\n      case 'gemini':\n        return createGeminiModel(modelId)\n      case 'openai-response':\n        return createResponsesModel(modelId)\n      case 'openai':\n      case 'image-generation':\n        return createCompatibleModel(modelId)\n      case 'embedding':\n        throw new Error('Use embeddingModel() for embedding endpoint type')\n      case 'jina-rerank':\n        throw new Error('Use rerankingModel() for jina-rerank endpoint type')\n      default:\n        return createCompatibleModel(modelId)\n    }\n  }\n\n  const provider = (modelId: string) => createChatModel(modelId)\n  provider.specificationVersion = 'v3' as const\n\n  provider.languageModel = createChatModel\n\n  provider.embeddingModel = (modelId: string) =>\n    new OpenAICompatibleEmbeddingModel(modelId, {\n      provider: `${NEWAPI_PROVIDER_NAME}.embedding`,\n      url,\n      headers: authHeaders,\n      fetch: customFetch\n    })\n","sourceCodeStart":114,"sourceCodeEnd":150,"githubUrl":"https://github.com/CherryHQ/cherry-studio/blob/726446b54cd69ffe51a276638672f6d95ca0768c/src/main/ai/provider/custom/newapiProvider.ts#L114-L150","documentation":"Thrown by createNewApi's createChatModel() when endpointType === 'jina-rerank'. Same separation principle as the embedding case: reranking models must be resolved via provider.rerankingModel(), and the chat path refuses to instantiate a reranker as a LanguageModelV3.","triggerScenarios":"A NewAPI model with endpoint_type 'jina-rerank' is routed through provider()/languageModel()/chatModel() instead of provider.rerankingModel(). Caused by mis-typed endpoint config or generic chat-resolution code.","commonSituations":"A jina-rerank model flagged as chat-capable in config, or generic dispatcher code that ignores endpoint_type when picking the resolution method.","solutions":["Route jina-rerank NewAPI models through provider.rerankingModel(modelId).","Correct the endpoint_type in the model config so a chat-intended model is not flagged 'jina-rerank'.","Dispatch by resolveEffectiveEndpoint(...).endpointType before choosing the provider method.","Surface a user-facing hint to switch endpoint type or select a chat-capable model."],"exampleFix":"// before\nconst model = newApiProvider.languageModel(modelId) // throws if endpointType==='jina-rerank'\n// after\nconst ep = resolveEffectiveEndpoint(provider, model).endpointType\nconst model = ep === 'jina-rerank'\n  ? newApiProvider.rerankingModel(modelId)\n  : newApiProvider.languageModel(modelId)","handlingStrategy":"validation","validationCode":"const ep = resolveEffectiveEndpoint(provider, model).endpointType\nif (ep === 'jina-rerank') {\n  throw new Error('Use provider.rerankingModel() for jina-rerank models')\n}","typeGuard":"export function isRerankEndpointMisroute(e: unknown): boolean {\n  return e instanceof Error && /Use rerankingModel\\(\\)/.test(e.message)\n}","tryCatchPattern":"try {\n  newApiProvider.languageModel(modelId)\n} catch (e) {\n  if (isRerankEndpointMisroute(e)) return newApiProvider.rerankingModel(modelId)\n  throw e\n}","preventionTips":["Route jina-rerank models through provider.rerankingModel().","Keep endpoint_type assignments accurate in the model catalog.","Test that chat resolution throws for rerank types."],"tags":["newapi","endpoint-type","configuration","misroute","rerank"],"backgroundTag":null,"analyzedSha":"726446b54cd69ffe51a276638672f6d95ca0768c","analyzedAt":"2026-08-12T17:30:37.448Z","schemaVersion":2},"datasetVersion":"2026-08-12T18:17:37.767Z"}