diff --git a/src-tauri/src/proxy/handlers.rs b/src-tauri/src/proxy/handlers.rs index 644ef353c..6cc9840b0 100644 --- a/src-tauri/src/proxy/handlers.rs +++ b/src-tauri/src/proxy/handlers.rs @@ -348,6 +348,47 @@ pub async fn handle_responses( process_response(response, &ctx, &state, &CODEX_PARSER_CONFIG).await } +/// 处理 /v1/responses/compact 请求(OpenAI Responses Compact API - Codex CLI 透传) +pub async fn handle_responses_compact( + State(state): State, + headers: axum::http::HeaderMap, + Json(body): Json, +) -> Result { + let mut ctx = + RequestContext::new(&state, &body, &headers, AppType::Codex, "Codex", "codex").await?; + + let is_stream = body + .get("stream") + .and_then(|v| v.as_bool()) + .unwrap_or(false); + + let forwarder = ctx.create_forwarder(&state); + let result = match forwarder + .forward_with_retry( + &AppType::Codex, + "/responses/compact", + body, + headers, + ctx.get_providers(), + ) + .await + { + Ok(result) => result, + Err(mut err) => { + if let Some(provider) = err.provider.take() { + ctx.provider = provider; + } + log_forward_error(&state, &ctx, is_stream, &err.error); + return Err(err.error); + } + }; + + ctx.provider = result.provider; + let response = result.response; + + process_response(response, &ctx, &state, &CODEX_PARSER_CONFIG).await +} + // ============================================================================ // Gemini API 处理器 // ============================================================================ diff --git a/src-tauri/src/proxy/server.rs b/src-tauri/src/proxy/server.rs index 9de6b7292..46e3635f5 100644 --- a/src-tauri/src/proxy/server.rs +++ b/src-tauri/src/proxy/server.rs @@ -237,6 +237,23 @@ impl ProxyServer { .route("/v1/responses", post(handlers::handle_responses)) .route("/v1/v1/responses", post(handlers::handle_responses)) .route("/codex/v1/responses", post(handlers::handle_responses)) + // OpenAI Responses Compact API (Codex CLI 远程压缩,透传) + .route( + "/responses/compact", + post(handlers::handle_responses_compact), + ) + .route( + "/v1/responses/compact", + post(handlers::handle_responses_compact), + ) + .route( + "/v1/v1/responses/compact", + post(handlers::handle_responses_compact), + ) + .route( + "/codex/v1/responses/compact", + post(handlers::handle_responses_compact), + ) // Gemini API (支持带前缀和不带前缀) .route("/v1beta/*path", post(handlers::handle_gemini)) .route("/gemini/v1beta/*path", post(handlers::handle_gemini))