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 <qiyan233@users.noreply.github.com>
This commit is contained in:
qiyan233
2026-05-15 03:00:35 +08:00
committed by GitHub
parent b84fa98153
commit cc67454f1f
+24 -1
View File
@@ -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<Self> {
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();