From a96e5e45ca911c622d655170a151eaf65a198413 Mon Sep 17 00:00:00 2001 From: dzyuan8 Date: Sun, 24 May 2026 18:15:58 +0800 Subject: [PATCH] fix: address PR review feedback and enable cache telemetry for Volcengine - Remove Volcengine from reasoning_effort 'off' no-auth group (HIGH) - Add Volcengine to proper reasoning_effort handling (like DeepSeek) - Remove 'deepseek-reasoner' alias from DeepSeek-V4-Flash (MEDIUM) - Separate WanjieArk and Volcengine env vars in CLI (MEDIUM) - Group config keys by provider for readability (MEDIUM) - Use 'codewhale' instead of 'deepseek' in login hints (MEDIUM) - Enable cache_telemetry_supported for Volcengine provider --- crates/agent/src/lib.rs | 1 - crates/cli/src/lib.rs | 12 ++++++++---- crates/config/src/lib.rs | 28 ++++++++++++++-------------- crates/tui/src/client.rs | 10 ++++------ crates/tui/src/config.rs | 2 +- crates/tui/src/main.rs | 2 +- 6 files changed, 28 insertions(+), 27 deletions(-) diff --git a/crates/agent/src/lib.rs b/crates/agent/src/lib.rs index d78624dc..8d00ce80 100644 --- a/crates/agent/src/lib.rs +++ b/crates/agent/src/lib.rs @@ -114,7 +114,6 @@ impl Default for ModelRegistry { aliases: vec![ "deepseek-v4-flash".to_string(), "deepseek-chat".to_string(), - "deepseek-reasoner".to_string(), "volcengine-deepseek-v4-flash".to_string(), "ark-deepseek-v4-flash".to_string(), ], diff --git a/crates/cli/src/lib.rs b/crates/cli/src/lib.rs index 2fc3d36c..00f4f285 100644 --- a/crates/cli/src/lib.rs +++ b/crates/cli/src/lib.rs @@ -1452,10 +1452,12 @@ fn build_tui_command( if resolved_runtime.provider == ProviderKind::Atlascloud { cmd.env("ATLASCLOUD_API_KEY", api_key); } - if resolved_runtime.provider == ProviderKind::WanjieArk || resolved_runtime.provider == ProviderKind::Volcengine { - cmd.env("VOLCENGINE_API_KEY", api_key); + if resolved_runtime.provider == ProviderKind::WanjieArk { cmd.env("WANJIE_ARK_API_KEY", api_key); } + if resolved_runtime.provider == ProviderKind::Volcengine { + cmd.env("VOLCENGINE_API_KEY", api_key); + } let source = resolved_runtime .api_key_source .unwrap_or(RuntimeApiKeySource::Env) @@ -1492,10 +1494,12 @@ fn build_tui_command( if resolved_runtime.provider == ProviderKind::Atlascloud { cmd.env("ATLASCLOUD_API_KEY", api_key); } - if resolved_runtime.provider == ProviderKind::WanjieArk || resolved_runtime.provider == ProviderKind::Volcengine { - cmd.env("VOLCENGINE_API_KEY", api_key); + if resolved_runtime.provider == ProviderKind::WanjieArk { cmd.env("WANJIE_ARK_API_KEY", api_key); } + if resolved_runtime.provider == ProviderKind::Volcengine { + cmd.env("VOLCENGINE_API_KEY", api_key); + } cmd.env("DEEPSEEK_API_KEY_SOURCE", "cli"); } if let Some(base_url) = cli.base_url.as_ref() { diff --git a/crates/config/src/lib.rs b/crates/config/src/lib.rs index 21655086..3d9ac4e1 100644 --- a/crates/config/src/lib.rs +++ b/crates/config/src/lib.rs @@ -470,10 +470,10 @@ impl ConfigToml { serialize_http_headers(&self.providers.atlascloud.http_headers) } "providers.wanjie_ark.api_key" => self.providers.wanjie_ark.api_key.clone(), - "providers.volcengine.api_key" => self.providers.volcengine.api_key.clone(), "providers.wanjie_ark.base_url" => self.providers.wanjie_ark.base_url.clone(), - "providers.volcengine.base_url" => self.providers.volcengine.base_url.clone(), "providers.wanjie_ark.model" => self.providers.wanjie_ark.model.clone(), + "providers.volcengine.api_key" => self.providers.volcengine.api_key.clone(), + "providers.volcengine.base_url" => self.providers.volcengine.base_url.clone(), "providers.volcengine.model" => self.providers.volcengine.model.clone(), "providers.wanjie_ark.http_headers" => { serialize_http_headers(&self.providers.wanjie_ark.http_headers) @@ -588,15 +588,6 @@ impl ConfigToml { "providers.atlascloud.http_headers" => { self.providers.atlascloud.http_headers = parse_http_headers(value)?; } - "providers.volcengine.api_key" => { - self.providers.volcengine.api_key = Some(value.to_string()); - } - "providers.volcengine.base_url" => { - self.providers.volcengine.base_url = Some(value.to_string()); - } - "providers.volcengine.model" => { - self.providers.volcengine.model = Some(value.to_string()); - } "providers.wanjie_ark.api_key" => { self.providers.wanjie_ark.api_key = Some(value.to_string()); } @@ -606,6 +597,15 @@ impl ConfigToml { "providers.wanjie_ark.model" => { self.providers.wanjie_ark.model = Some(value.to_string()); } + "providers.volcengine.api_key" => { + self.providers.volcengine.api_key = Some(value.to_string()); + } + "providers.volcengine.base_url" => { + self.providers.volcengine.base_url = Some(value.to_string()); + } + "providers.volcengine.model" => { + self.providers.volcengine.model = Some(value.to_string()); + } "providers.wanjie_ark.http_headers" => { self.providers.wanjie_ark.http_headers = parse_http_headers(value)?; } @@ -741,12 +741,12 @@ impl ConfigToml { "providers.atlascloud.base_url" => self.providers.atlascloud.base_url = None, "providers.atlascloud.model" => self.providers.atlascloud.model = None, "providers.atlascloud.http_headers" => self.providers.atlascloud.http_headers.clear(), - "providers.volcengine.api_key" => self.providers.volcengine.api_key = None, - "providers.volcengine.base_url" => self.providers.volcengine.base_url = None, - "providers.volcengine.model" => self.providers.volcengine.model = None, "providers.wanjie_ark.api_key" => self.providers.wanjie_ark.api_key = None, "providers.wanjie_ark.base_url" => self.providers.wanjie_ark.base_url = None, "providers.wanjie_ark.model" => self.providers.wanjie_ark.model = None, + "providers.volcengine.api_key" => self.providers.volcengine.api_key = None, + "providers.volcengine.base_url" => self.providers.volcengine.base_url = None, + "providers.volcengine.model" => self.providers.volcengine.model = None, "providers.wanjie_ark.http_headers" => { self.providers.wanjie_ark.http_headers.clear(); } diff --git a/crates/tui/src/client.rs b/crates/tui/src/client.rs index 2ca7747c..1e6ad1d7 100644 --- a/crates/tui/src/client.rs +++ b/crates/tui/src/client.rs @@ -883,7 +883,8 @@ pub(super) fn apply_reasoning_effort( | ApiProvider::DeepseekCN | ApiProvider::Openrouter | ApiProvider::Novita - | ApiProvider::Sglang => { + | ApiProvider::Sglang + | ApiProvider::Volcengine => { body["thinking"] = json!({ "type": "disabled" }); } ApiProvider::Fireworks => {} @@ -904,7 +905,6 @@ pub(super) fn apply_reasoning_effort( ApiProvider::Openai | ApiProvider::Atlascloud | ApiProvider::WanjieArk - | ApiProvider::Volcengine | ApiProvider::Ollama => {} ApiProvider::NvidiaNim => { body["chat_template_kwargs"] = json!({ @@ -914,7 +914,7 @@ pub(super) fn apply_reasoning_effort( }, "low" | "minimal" | "medium" | "mid" | "high" | "" => match provider { // DeepSeek compatibility: low/medium both map to high - ApiProvider::Deepseek | ApiProvider::DeepseekCN | ApiProvider::Sglang => { + ApiProvider::Deepseek | ApiProvider::DeepseekCN | ApiProvider::Sglang | ApiProvider::Volcengine => { body["reasoning_effort"] = json!("high"); body["thinking"] = json!({ "type": "enabled" }); } @@ -942,7 +942,6 @@ pub(super) fn apply_reasoning_effort( ApiProvider::Openai | ApiProvider::Atlascloud | ApiProvider::WanjieArk - | ApiProvider::Volcengine | ApiProvider::Ollama => {} ApiProvider::NvidiaNim => { body["chat_template_kwargs"] = json!({ @@ -952,7 +951,7 @@ pub(super) fn apply_reasoning_effort( } }, "xhigh" | "max" | "highest" => match provider { - ApiProvider::Deepseek | ApiProvider::DeepseekCN | ApiProvider::Sglang => { + ApiProvider::Deepseek | ApiProvider::DeepseekCN | ApiProvider::Sglang | ApiProvider::Volcengine => { body["reasoning_effort"] = json!("max"); body["thinking"] = json!({ "type": "enabled" }); } @@ -972,7 +971,6 @@ pub(super) fn apply_reasoning_effort( ApiProvider::Openai | ApiProvider::Atlascloud | ApiProvider::WanjieArk - | ApiProvider::Volcengine | ApiProvider::Ollama => {} ApiProvider::NvidiaNim => { body["chat_template_kwargs"] = json!({ diff --git a/crates/tui/src/config.rs b/crates/tui/src/config.rs index 6ded05fa..42b3f092 100644 --- a/crates/tui/src/config.rs +++ b/crates/tui/src/config.rs @@ -305,7 +305,7 @@ pub fn provider_capability(provider: ApiProvider, resolved_model: &str) -> Provi // Cache telemetry: returned only by DeepSeek-native and NVIDIA NIM endpoints. let cache_telemetry_supported = matches!( provider, - ApiProvider::Deepseek | ApiProvider::DeepseekCN | ApiProvider::NvidiaNim + ApiProvider::Deepseek | ApiProvider::DeepseekCN | ApiProvider::NvidiaNim | ApiProvider::Volcengine ); // Request payload mode: all current providers use chat completions. diff --git a/crates/tui/src/main.rs b/crates/tui/src/main.rs index 42c3ec05..8175bb80 100644 --- a/crates/tui/src/main.rs +++ b/crates/tui/src/main.rs @@ -1503,7 +1503,7 @@ fn run_setup_status(config: &Config, workspace: &Path) -> Result<()> { ("OLLAMA_API_KEY", "codewhale auth set --provider ollama") } crate::config::ApiProvider::Volcengine => { - ("VOLCENGINE_API_KEY", "deepseek auth set --provider volcengine") + ("VOLCENGINE_API_KEY", "codewhale auth set --provider volcengine") } crate::config::ApiProvider::Deepseek | crate::config::ApiProvider::DeepseekCN => { ("DEEPSEEK_API_KEY", "codewhale auth set --provider deepseek")