From de5e10623471c4b80736595c9daba97f9a527f8d Mon Sep 17 00:00:00 2001 From: Ed_ Date: Thu, 11 Jun 2026 01:26:53 -0400 Subject: [PATCH] fix(qwen): align with dashscope 1.25.21 API; remove InvalidApiKey monkey-patch --- src/ai_client.py | 4 ++++ src/qwen_adapter.py | 6 ++---- tests/test_qwen_provider.py | 4 ++-- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/ai_client.py b/src/ai_client.py index e15702be..08c5f9d5 100644 --- a/src/ai_client.py +++ b/src/ai_client.py @@ -2390,6 +2390,10 @@ def _ensure_qwen_client() -> None: if not api_key: raise ValueError("Qwen API key not found in credentials.toml") _qwen_region = creds.get("qwen", {}).get("region", "china") + if _qwen_region == "international": + dashscope.base_http_api_url = "https://dashscope-intl.aliyuncs.com/api/v1" + else: + dashscope.base_http_api_url = "https://dashscope.aliyuncs.com/api/v1" dashscope.api_key = api_key _qwen_client = dashscope.Generation diff --git a/src/qwen_adapter.py b/src/qwen_adapter.py index aadb6faf..358019e0 100644 --- a/src/qwen_adapter.py +++ b/src/qwen_adapter.py @@ -10,8 +10,6 @@ from dashscope.common.error import ( ) from src.ai_client import ProviderError -dashscope.common.error.InvalidApiKey = dashscope.common.error.AuthenticationError - def build_dashscope_tools(openai_tools: list[dict[str, Any]]) -> list[dict[str, Any]]: out: list[dict[str, Any]] = [] for t in openai_tools: @@ -29,9 +27,9 @@ def classify_dashscope_error(exc: Exception) -> ProviderError: if isinstance(exc, AuthenticationError): return ProviderError(kind="auth", provider="qwen", original=exc) if isinstance(exc, TimeoutException): - return ProviderError(kind="rate_limit", provider="qwen", original=exc) + return ProviderError(kind="network", provider="qwen", original=exc) if isinstance(exc, ServiceUnavailableError): - return ProviderError(kind="quota", provider="qwen", original=exc) + return ProviderError(kind="network", provider="qwen", original=exc) if isinstance(exc, InvalidParameter): return ProviderError(kind="quota", provider="qwen", original=exc) if isinstance(exc, RequestFailure): diff --git a/tests/test_qwen_provider.py b/tests/test_qwen_provider.py index 75345a02..a297dfe6 100644 --- a/tests/test_qwen_provider.py +++ b/tests/test_qwen_provider.py @@ -41,8 +41,8 @@ def test_qwen_tool_format_translation() -> None: def test_qwen_error_classification() -> None: from src.ai_client import ProviderError from src.qwen_adapter import classify_dashscope_error - import dashscope - err = classify_dashscope_error(dashscope.common.error.InvalidApiKey("bad key")) + from dashscope.common.error import AuthenticationError + err = classify_dashscope_error(AuthenticationError("bad key")) assert err.kind == "auth" assert err.provider == "qwen"