From 8499dbf132338c0979421b1cac62a34fad015073 Mon Sep 17 00:00:00 2001 From: ZJUCQR <310857001@qq.com> Date: Tue, 3 Feb 2026 16:27:15 +0800 Subject: [PATCH] add dashscope support --- nanobot/config/schema.py | 4 +++- nanobot/providers/litellm_provider.py | 9 +++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/nanobot/config/schema.py b/nanobot/config/schema.py index 71e3361..695d769 100644 --- a/nanobot/config/schema.py +++ b/nanobot/config/schema.py @@ -52,6 +52,7 @@ class ProvidersConfig(BaseModel): openrouter: ProviderConfig = Field(default_factory=ProviderConfig) groq: ProviderConfig = Field(default_factory=ProviderConfig) zhipu: ProviderConfig = Field(default_factory=ProviderConfig) + dashscope: ProviderConfig = Field(default_factory=ProviderConfig) # 阿里云通义千问 vllm: ProviderConfig = Field(default_factory=ProviderConfig) gemini: ProviderConfig = Field(default_factory=ProviderConfig) @@ -92,13 +93,14 @@ class Config(BaseSettings): return Path(self.agents.defaults.workspace).expanduser() def get_api_key(self) -> str | None: - """Get API key in priority order: OpenRouter > Anthropic > OpenAI > Gemini > Zhipu > Groq > vLLM.""" + """Get API key in priority order: OpenRouter > Anthropic > OpenAI > Gemini > Zhipu > DashScope > Groq > vLLM.""" return ( self.providers.openrouter.api_key or self.providers.anthropic.api_key or self.providers.openai.api_key or self.providers.gemini.api_key or self.providers.zhipu.api_key or + self.providers.dashscope.api_key or self.providers.groq.api_key or self.providers.vllm.api_key or None diff --git a/nanobot/providers/litellm_provider.py b/nanobot/providers/litellm_provider.py index 547626d..18e19ff 100644 --- a/nanobot/providers/litellm_provider.py +++ b/nanobot/providers/litellm_provider.py @@ -51,6 +51,8 @@ class LiteLLMProvider(LLMProvider): os.environ.setdefault("GEMINI_API_KEY", api_key) elif "zhipu" in default_model or "glm" in default_model or "zai" in default_model: os.environ.setdefault("ZHIPUAI_API_KEY", api_key) + elif "dashscope" in default_model or "qwen" in default_model.lower(): + os.environ.setdefault("DASHSCOPE_API_KEY", api_key) elif "groq" in default_model: os.environ.setdefault("GROQ_API_KEY", api_key) @@ -95,6 +97,13 @@ class LiteLLMProvider(LLMProvider): model.startswith("openrouter/") ): model = f"zhipu/{model}" + + # For DashScope/Qwen, ensure prefix is present + if ("qwen" in model.lower() or "dashscope" in model.lower()) and not ( + model.startswith("dashscope/") or + model.startswith("openrouter/") + ): + model = f"dashscope/{model}" # For vLLM, use hosted_vllm/ prefix per LiteLLM docs # Convert openai/ prefix to hosted_vllm/ if user specified it