Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 19 additions & 11 deletions astrbot/core/provider/sources/bailian_rerank_source.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import os
from typing import Any

import aiohttp

Expand Down Expand Up @@ -88,8 +89,6 @@ def _build_payload(
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,
Expand All @@ -107,8 +106,7 @@ def _build_payload(
)
return payload

base = {"model": self.model, "input": {"query": query, "documents": documents}}

payload_input = {"query": query, "documents": documents}
params = {
k: v
for k, v in [
Expand All @@ -118,6 +116,7 @@ def _build_payload(
if v is not None
}

base: dict[str, Any] = {"model": self.model, "input": payload_input}
if params:
base["parameters"] = params

Expand All @@ -136,14 +135,23 @@ def _parse_results(self, data: dict) -> list[RerankResult]:
BailianAPIError: API返回错误
KeyError: 结果缺少必要字段
"""
# 检查响应状态
if data.get("code", "200") != "200":
raise BailianAPIError(
f"百炼 API 错误: {data.get('code')} – {data.get('message', '')}"
)
is_compatible_api = "compatible-api" in self.base_url

if is_compatible_api:
code = data.get("code")
if code:
raise BailianAPIError(
f"百炼 API 错误: {code} – {data.get('message', '')}"
)
results = data.get("results", [])
else:
code = data.get("code", "200")
if code != "200":
raise BailianAPIError(
f"百炼 API 错误: {code} – {data.get('message', '')}"
)
results = data.get("output", {}).get("results", [])

# 兼容旧版 API (output.results) 和新版 compatible API (results)
results = (data.get("output") or {}).get("results") or data.get("results") or []
if not results:
logger.warning(f"百炼 Rerank 返回空结果: {data}")
return []
Expand Down
Loading