From 971bcbad10332aaf2dd1386a6cf4f73e1289f69f Mon Sep 17 00:00:00 2001 From: Yokami <95584793+kawayiYokami@users.noreply.github.com> Date: Sat, 28 Mar 2026 21:27:53 +0800 Subject: [PATCH] fix(provider): fix Bailian rerank payload compatibility for qwen3-rerank (#6222) * fix(provider): align bailian qwen3 rerank payload with latest API schema * fix(provider): explicitly ignore unsupported return_documents for qwen3 rerank --- .../provider/sources/bailian_rerank_source.py | 32 +++++++++++++++---- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/astrbot/core/provider/sources/bailian_rerank_source.py b/astrbot/core/provider/sources/bailian_rerank_source.py index 9e079d4a9..a515d2b9d 100644 --- a/astrbot/core/provider/sources/bailian_rerank_source.py +++ b/astrbot/core/provider/sources/bailian_rerank_source.py @@ -33,6 +33,8 @@ class BailianNetworkError(BailianRerankError): class BailianRerankProvider(RerankProvider): """阿里云百炼文本重排序适配器.""" + QWEN3_RERANK_MODEL = "qwen3-rerank" + def __init__(self, provider_config: dict, provider_settings: dict) -> None: super().__init__(provider_config, provider_settings) self.provider_config = provider_config @@ -83,19 +85,35 @@ class BailianRerankProvider(RerankProvider): Returns: 请求载荷字典 """ + normalized_model = self.model.strip().lower() + normalized_top_n = top_n if top_n is not None and top_n > 0 else None + + # qwen3-rerank follows a model-specific payload: + # query/documents/top_n/instruct should be at the top level. + if normalized_model == self.QWEN3_RERANK_MODEL: + payload = { + "model": self.model, + "query": query, + "documents": documents, + } + if normalized_top_n is not None: + payload["top_n"] = normalized_top_n + if self.instruct: + payload["instruct"] = self.instruct + if self.return_documents: + logger.warning( + "qwen3-rerank does not support return_documents; " + "this option will be ignored." + ) + return payload + base = {"model": self.model, "input": {"query": query, "documents": documents}} params = { k: v for k, v in [ - ("top_n", top_n if top_n is not None and top_n > 0 else None), + ("top_n", normalized_top_n), ("return_documents", True if self.return_documents else None), - ( - "instruct", - self.instruct - if self.instruct and self.model == "qwen3-rerank" - else None, - ), ] if v is not None }