fix: hydrate Gemini CLI project metadata

This commit is contained in:
Mas0nShi
2026-05-21 17:10:17 +08:00
parent e53d5f07e8
commit 3e6ce6cf4a
7 changed files with 386 additions and 36 deletions
@@ -133,6 +133,7 @@ pub(crate) async fn resolve_local_same_format_provider_candidate_payload_parts(
)
.await;
let effective_headers = input.effective_headers(&parts.headers);
let mut transport = Arc::clone(&prepared.transport);
let Some(mut base_provider_request_body) =
super::super::request::build_same_format_provider_request_body(
@@ -199,7 +200,7 @@ pub(crate) async fn resolve_local_same_format_provider_candidate_payload_parts(
let antigravity_auth = if prepared.is_antigravity {
match classify_local_antigravity_request_support(
&prepared.transport,
&transport,
&base_provider_request_body,
AntigravityEnvelopeRequestType::Agent,
) {
@@ -222,20 +223,32 @@ pub(crate) async fn resolve_local_same_format_provider_candidate_payload_parts(
None
};
let gemini_cli_project_id = if prepared.behavior.is_gemini_cli {
match resolve_gemini_cli_project_id(&prepared.transport) {
match resolve_gemini_cli_project_id(&transport) {
Some(project_id) => Some(project_id),
None => {
mark_skipped_local_same_format_provider_candidate(
state,
input,
trace_id,
candidate,
attempt.candidate_index,
&attempt.candidate_id,
"transport_auth_unavailable",
)
.await;
return None;
match state
.hydrate_gemini_cli_project_metadata_for_transport(&transport)
.await
{
Some(hydrated) => {
let project_id = resolve_gemini_cli_project_id(&hydrated);
transport = Arc::new(hydrated);
project_id
}
None => {
mark_skipped_local_same_format_provider_candidate(
state,
input,
trace_id,
candidate,
attempt.candidate_index,
&attempt.candidate_id,
"transport_auth_unavailable",
)
.await;
return None;
}
}
}
}
} else {
@@ -308,14 +321,13 @@ pub(crate) async fn resolve_local_same_format_provider_candidate_payload_parts(
.provider_type
.trim()
.eq_ignore_ascii_case("grok");
let transport_profile =
crate::ai_serving::transport::resolve_transport_profile(&prepared.transport);
let transport_profile = crate::ai_serving::transport::resolve_transport_profile(&transport);
let upstream_url = if is_grok {
Some(build_grok_upstream_url(&prepared.transport, GROK_CHAT_PATH))
Some(build_grok_upstream_url(&transport, GROK_CHAT_PATH))
} else {
super::super::request::build_same_format_upstream_url(
parts,
&prepared.transport,
&transport,
&prepared.mapped_model,
prepared.provider_api_format.as_str(),
spec,
@@ -352,12 +364,12 @@ pub(crate) async fn resolve_local_same_format_provider_candidate_payload_parts(
}
let Some(provider_request_headers) = (if is_grok {
build_grok_browser_headers(GrokHeaderInput {
transport: &prepared.transport,
transport: &transport,
transport_profile: transport_profile.as_ref(),
request_headers: Some(effective_headers),
content_type: "application/json",
accept: "text/event-stream",
header_rules: prepared.transport.endpoint.header_rules.as_ref(),
header_rules: transport.endpoint.header_rules.as_ref(),
provider_request_body: &provider_request_body,
original_request_body: body_json,
})
@@ -366,12 +378,12 @@ pub(crate) async fn resolve_local_same_format_provider_candidate_payload_parts(
headers: effective_headers,
provider_request_body: &provider_request_body,
original_request_body: body_json,
header_rules: prepared.transport.endpoint.header_rules.as_ref(),
header_rules: transport.endpoint.header_rules.as_ref(),
behavior: prepared.behavior,
auth_header: prepared.auth_header.as_deref(),
auth_value: prepared.auth_value.as_deref(),
extra_headers: &extra_headers,
key_fingerprint: prepared.transport.key.fingerprint.as_ref(),
key_fingerprint: transport.key.fingerprint.as_ref(),
kiro_auth_config: prepared.kiro_auth.as_ref().map(|auth| &auth.auth_config),
kiro_machine_id: prepared
.kiro_auth
@@ -398,7 +410,7 @@ pub(crate) async fn resolve_local_same_format_provider_candidate_payload_parts(
};
Some(LocalSameFormatProviderCandidatePayloadParts {
transport: prepared.transport,
transport,
is_antigravity: prepared.is_antigravity,
is_gemini_cli: prepared.behavior.is_gemini_cli,
is_kiro: prepared.is_kiro,