CherryHQ/cherry-studio · error · Error
Use rerankingModel() for jina-rerank endpoint type
Error message
Use rerankingModel() for jina-rerank endpoint type
What it means
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.
Source
Thrown at src/main/ai/provider/custom/newapiProvider.ts:132
headers: authHeaders,
fetch: customFetch
})
const createChatModel = (modelId: string): LanguageModelV3 => {
switch (endpointType) {
case 'anthropic':
return createAnthropicModel(modelId)
case 'gemini':
return createGeminiModel(modelId)
case 'openai-response':
return createResponsesModel(modelId)
case 'openai':
case 'image-generation':
return createCompatibleModel(modelId)
case 'embedding':
throw new Error('Use embeddingModel() for embedding endpoint type')
case 'jina-rerank':
throw new Error('Use rerankingModel() for jina-rerank endpoint type')
default:
return createCompatibleModel(modelId)
}
}
const provider = (modelId: string) => createChatModel(modelId)
provider.specificationVersion = 'v3' as const
provider.languageModel = createChatModel
provider.embeddingModel = (modelId: string) =>
new OpenAICompatibleEmbeddingModel(modelId, {
provider: `${NEWAPI_PROVIDER_NAME}.embedding`,
url,
headers: authHeaders,
fetch: customFetch
})
View on GitHub (pinned to 726446b54c)
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.
Example fix
// before const model = newApiProvider.languageModel(modelId) // throws if endpointType==='jina-rerank' // after const ep = resolveEffectiveEndpoint(provider, model).endpointType const model = ep === 'jina-rerank' ? newApiProvider.rerankingModel(modelId) : newApiProvider.languageModel(modelId)
Defensive patterns
Strategy: validation
Validate before calling
const ep = resolveEffectiveEndpoint(provider, model).endpointType
if (ep === 'jina-rerank') {
throw new Error('Use provider.rerankingModel() for jina-rerank models')
} Type guard
export function isRerankEndpointMisroute(e: unknown): boolean {
return e instanceof Error && /Use rerankingModel\(\)/.test(e.message)
} Try / catch
try {
newApiProvider.languageModel(modelId)
} catch (e) {
if (isRerankEndpointMisroute(e)) return newApiProvider.rerankingModel(modelId)
throw e
} Prevention
- Route jina-rerank models through provider.rerankingModel().
- Keep endpoint_type assignments accurate in the model catalog.
- Test that chat resolution throws for rerank types.
When it happens
Trigger: 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.
Common situations: A jina-rerank model flagged as chat-capable in config, or generic dispatcher code that ignores endpoint_type when picking the resolution method.
Related errors
- Use embeddingModel() for embedding endpoint type
- Image generation job: no async transport for '${sdkConfig.pr
- Provider extension "${id}" not found. Did you forget to regi
- [theme-contract] ${label} contains duplicate names
- [theme-contract] ${label} has an invalid or duplicate surfac
AI-assisted analysis of CherryHQ/cherry-studio@726446b54c (2026-08-12).
Data as JSON: /api/errors/d959e7bba9420098.
Report an issue: GitHub.