fix: adapt gemini cli to v1internal endpoint

This commit is contained in:
MMEXA
2026-05-28 00:24:56 +08:00
parent 14ad6e9b75
commit adca142d1e
19 changed files with 1072 additions and 87 deletions
@@ -9,6 +9,7 @@ use crate::auth::{
};
use crate::claude_code::build_claude_code_passthrough_headers;
use crate::claude_code::local_claude_code_transport_unsupported_reason_with_network;
use crate::gemini_cli::is_gemini_cli_provider_transport;
use crate::grok::{is_grok_provider_transport, resolve_grok_session_auth};
use crate::kiro::{
build_kiro_provider_headers, build_kiro_provider_request_body, is_kiro_provider_transport,
@@ -49,6 +50,7 @@ pub struct SameFormatProviderRequestBehaviorParams<'a> {
pub struct SameFormatProviderRequestBehavior {
pub is_antigravity: bool,
pub is_claude_code: bool,
pub is_gemini_cli: bool,
pub is_vertex: bool,
pub is_kiro: bool,
pub upstream_is_stream: bool,
@@ -103,6 +105,7 @@ pub fn classify_same_format_provider_request_behavior(
params: SameFormatProviderRequestBehaviorParams<'_>,
) -> SameFormatProviderRequestBehavior {
let is_antigravity = is_antigravity_provider_transport(transport);
let is_gemini_cli = is_gemini_cli_provider_transport(transport);
let is_claude_code = transport
.provider
.provider_type
@@ -125,6 +128,12 @@ pub fn classify_same_format_provider_request_behavior(
);
let report_kind = if is_kiro && !params.require_streaming {
"claude_cli_sync_finalize"
} else if is_gemini_cli && !params.require_streaming {
match params.report_kind {
"gemini_chat_sync_success" => "gemini_chat_sync_finalize",
"gemini_cli_sync_success" => "gemini_cli_sync_finalize",
_ => params.report_kind,
}
} else if is_antigravity && !params.require_streaming {
match params.report_kind {
"gemini_chat_sync_success" => "gemini_chat_sync_finalize",
@@ -138,6 +147,7 @@ pub fn classify_same_format_provider_request_behavior(
SameFormatProviderRequestBehavior {
is_antigravity,
is_claude_code,
is_gemini_cli,
is_vertex,
is_kiro,
upstream_is_stream,
@@ -404,6 +414,7 @@ pub fn same_format_provider_transport_unsupported_reason_for_trace(
);
if !behavior.is_antigravity
&& !behavior.is_claude_code
&& !behavior.is_gemini_cli
&& !behavior.is_vertex
&& !behavior.is_kiro
{
@@ -553,6 +564,19 @@ mod tests {
assert!(behavior.is_antigravity);
assert!(behavior.upstream_is_stream);
assert_eq!(behavior.report_kind, "gemini_chat_sync_finalize");
let gemini_cli = sample_transport("gemini_cli");
let behavior = classify_same_format_provider_request_behavior(
&gemini_cli,
SameFormatProviderRequestBehaviorParams {
require_streaming: false,
provider_api_format: "gemini:generate_content",
report_kind: "gemini_cli_sync_success",
},
);
assert!(!behavior.upstream_is_stream);
assert_eq!(behavior.report_kind, "gemini_cli_sync_finalize");
}
#[test]
@@ -994,6 +1018,7 @@ mod tests {
behavior: SameFormatProviderRequestBehavior {
is_antigravity: false,
is_claude_code: false,
is_gemini_cli: false,
is_vertex: false,
is_kiro: false,
upstream_is_stream: true,