From 3551e3c496e557da5fb9f596dd9a04f0573a7f4d Mon Sep 17 00:00:00 2001 From: YoVinchen Date: Sun, 29 Mar 2026 17:02:22 +0800 Subject: [PATCH] fix(proxy): post-merge fixes for forward return type and clippy warnings - Restore forward() return type to (ProxyResponse, Option) to pass claude_api_format through to callers - Inline format args in log::warn! macro (clippy::uninlined_format_args) - Suppress too_many_arguments for check_claude_stream --- src-tauri/src/commands/stream_check.rs | 10 ++++--- src-tauri/src/proxy/forwarder.rs | 8 ++++-- .../proxy/providers/streaming_responses.rs | 12 ++++++--- src-tauri/src/services/stream_check.rs | 26 ++++++++----------- 4 files changed, 32 insertions(+), 24 deletions(-) diff --git a/src-tauri/src/commands/stream_check.rs b/src-tauri/src/commands/stream_check.rs index 7afe21018..cc7e4d519 100644 --- a/src-tauri/src/commands/stream_check.rs +++ b/src-tauri/src/commands/stream_check.rs @@ -216,7 +216,11 @@ async fn resolve_claude_api_format_override( .and_then(|meta| meta.managed_account_id_for("github_copilot")); let vendor_result = match account_id.as_deref() { - Some(id) => auth_manager.get_model_vendor_for_account(id, &model_id).await, + Some(id) => { + auth_manager + .get_model_vendor_for_account(id, &model_id) + .await + } None => auth_manager.get_model_vendor(&model_id).await, }; @@ -225,9 +229,7 @@ async fn resolve_claude_api_format_override( Ok(Some(_)) | Ok(None) => "openai_chat", Err(err) => { log::warn!( - "[StreamCheck] Failed to resolve Copilot model vendor for {}: {}. Falling back to chat/completions", - model_id, - err + "[StreamCheck] Failed to resolve Copilot model vendor for {model_id}: {err}. Falling back to chat/completions" ); "openai_chat" } diff --git a/src-tauri/src/proxy/forwarder.rs b/src-tauri/src/proxy/forwarder.rs index 82acea3d4..f9dd145ed 100644 --- a/src-tauri/src/proxy/forwarder.rs +++ b/src-tauri/src/proxy/forwarder.rs @@ -745,7 +745,7 @@ impl RequestForwarder { headers: &axum::http::HeaderMap, extensions: &Extensions, adapter: &dyn ProviderAdapter, - ) -> Result { + ) -> Result<(ProxyResponse, Option), ProxyError> { // 使用适配器提取 base_url let base_url = adapter.extract_base_url(provider)?; @@ -1215,7 +1215,11 @@ impl RequestForwarder { .and_then(|m| m.managed_account_id_for("github_copilot")); let vendor_result = match account_id.as_deref() { - Some(id) => copilot_auth.get_model_vendor_for_account(id, model_id).await, + Some(id) => { + copilot_auth + .get_model_vendor_for_account(id, model_id) + .await + } None => copilot_auth.get_model_vendor(model_id).await, }; diff --git a/src-tauri/src/proxy/providers/streaming_responses.rs b/src-tauri/src/proxy/providers/streaming_responses.rs index 7840b68fa..4ad941f09 100644 --- a/src-tauri/src/proxy/providers/streaming_responses.rs +++ b/src-tauri/src/proxy/providers/streaming_responses.rs @@ -997,12 +997,17 @@ mod tests { .iter() .filter(|event| { event.get("type").and_then(|v| v.as_str()) == Some("content_block_start") - && event.pointer("/content_block/type").and_then(|v| v.as_str()) == Some("text") + && event + .pointer("/content_block/type") + .and_then(|v| v.as_str()) + == Some("text") }) .count(); let text_stops = events .iter() - .filter(|event| event.get("type").and_then(|v| v.as_str()) == Some("content_block_stop")) + .filter(|event| { + event.get("type").and_then(|v| v.as_str()) == Some("content_block_stop") + }) .count(); let text_deltas: Vec = events .iter() @@ -1011,7 +1016,8 @@ mod tests { && event.pointer("/delta/type").and_then(|v| v.as_str()) == Some("text_delta") }) .filter_map(|event| { - event.pointer("/delta/text") + event + .pointer("/delta/text") .and_then(|v| v.as_str()) .map(ToString::to_string) }) diff --git a/src-tauri/src/services/stream_check.rs b/src-tauri/src/services/stream_check.rs index e4ec20cbc..39e21d054 100644 --- a/src-tauri/src/services/stream_check.rs +++ b/src-tauri/src/services/stream_check.rs @@ -95,15 +95,14 @@ impl StreamCheckService { let mut last_result = None; for attempt in 0..=effective_config.max_retries { - let result = - Self::check_once( - app_type, - provider, - &effective_config, - auth_override.clone(), - claude_api_format_override.clone(), - ) - .await; + let result = Self::check_once( + app_type, + provider, + &effective_config, + auth_override.clone(), + claude_api_format_override.clone(), + ) + .await; match &result { Ok(r) if r.success => { @@ -304,6 +303,7 @@ impl StreamCheckService { /// 根据供应商的 api_format 选择请求格式: /// - "anthropic" (默认): Anthropic Messages API (/v1/messages) /// - "openai_chat": OpenAI Chat Completions API (/v1/chat/completions) + #[allow(clippy::too_many_arguments)] async fn check_claude_stream( client: &Client, base_url: &str, @@ -339,12 +339,8 @@ impl StreamCheckService { .unwrap_or(false); let is_openai_chat = effective_api_format == "openai_chat"; let is_openai_responses = effective_api_format == "openai_responses"; - let url = Self::resolve_claude_stream_url( - base, - auth.strategy, - effective_api_format, - is_full_url, - ); + let url = + Self::resolve_claude_stream_url(base, auth.strategy, effective_api_format, is_full_url); let max_tokens = if is_openai_responses { 16 } else { 1 };