fix: support codex /responses/compact route (#1194)

This commit is contained in:
Tsukumi
2026-03-04 23:47:38 +08:00
committed by GitHub
parent 3d33f299a8
commit 0135abde1c
2 changed files with 58 additions and 0 deletions
+41
View File
@@ -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<ProxyState>,
headers: axum::http::HeaderMap,
Json(body): Json<Value>,
) -> Result<axum::response::Response, ProxyError> {
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 处理器
// ============================================================================
+17
View File
@@ -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))