From cc67454f1f39001490e1206e9f2216cf4a279c8a Mon Sep 17 00:00:00 2001 From: qiyan233 <111165207+qiyan233@users.noreply.github.com> Date: Fri, 15 May 2026 03:00:35 +0800 Subject: [PATCH] fix(config): accept legacy DeepSeek CN provider aliases Map legacy DeepSeek CN provider names back to the canonical Deepseek provider in both manual parsing and TOML deserialization. Co-authored-by: qiyan233 --- crates/config/src/lib.rs | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/crates/config/src/lib.rs b/crates/config/src/lib.rs index 4e4694d0..d3d7123e 100644 --- a/crates/config/src/lib.rs +++ b/crates/config/src/lib.rs @@ -44,6 +44,12 @@ const DEFAULT_OLLAMA_BASE_URL: &str = "http://localhost:11434/v1"; #[serde(rename_all = "kebab-case")] pub enum ProviderKind { #[default] + #[serde( + alias = "deepseek-cn", + alias = "deepseek_china", + alias = "deepseekcn", + alias = "deepseek-china" + )] Deepseek, NvidiaNim, Openai, @@ -76,7 +82,8 @@ impl ProviderKind { #[must_use] pub fn parse(value: &str) -> Option { match value.trim().to_ascii_lowercase().as_str() { - "deepseek" | "deep-seek" => Some(Self::Deepseek), + "deepseek" | "deep-seek" | "deepseek-cn" | "deepseek_china" | "deepseekcn" + | "deepseek-china" => Some(Self::Deepseek), "nvidia" | "nvidia-nim" | "nvidia_nim" | "nim" => Some(Self::NvidiaNim), "openai" | "open-ai" => Some(Self::Openai), "atlascloud" | "atlas-cloud" | "atlas_cloud" | "atlas" => Some(Self::Atlascloud), @@ -2131,6 +2138,22 @@ mod tests { ); } + #[test] + fn provider_kind_accepts_legacy_deepseek_cn_aliases() { + for alias in [ + "deepseek-cn", + "deepseek_china", + "deepseekcn", + "deepseek-china", + ] { + assert_eq!(ProviderKind::parse(alias), Some(ProviderKind::Deepseek)); + + let parsed: ConfigToml = + toml::from_str(&format!("provider = \"{alias}\"")).expect("legacy provider alias"); + assert_eq!(parsed.provider, ProviderKind::Deepseek); + } + } + #[test] fn openrouter_provider_defaults_to_canonical_endpoint_and_model() { let _lock = env_lock();