fix(proxy): post-merge fixes for forward return type and clippy warnings

- Restore forward() return type to (ProxyResponse, Option<String>)
  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
This commit is contained in:
YoVinchen
2026-03-29 17:02:22 +08:00
parent 08014f99e6
commit 3551e3c496
4 changed files with 32 additions and 24 deletions
+6 -4
View File
@@ -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"
}
+6 -2
View File
@@ -745,7 +745,7 @@ impl RequestForwarder {
headers: &axum::http::HeaderMap,
extensions: &Extensions,
adapter: &dyn ProviderAdapter,
) -> Result<ProxyResponse, ProxyError> {
) -> Result<(ProxyResponse, Option<String>), 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,
};
@@ -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<String> = 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)
})
+11 -15
View File
@@ -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 };