mirror of
https://github.com/fawney19/Aether.git
synced 2026-10-09 18:59:50 +08:00
migrate ai format conversion to responses adapters
This commit is contained in:
@@ -22,7 +22,6 @@ use crate::provider_transport::kiro::{
|
||||
build_kiro_provider_request_body, supports_local_kiro_request_transport_with_network,
|
||||
KiroProviderHeadersInput, KIRO_ENVELOPE_NAME,
|
||||
};
|
||||
use crate::provider_transport::url::build_openai_cli_url;
|
||||
use crate::usage::GatewaySyncReportRequest;
|
||||
use crate::{AppState, GatewayError};
|
||||
use aether_admin::provider::pool as admin_provider_pool_pure;
|
||||
@@ -282,10 +281,19 @@ fn provider_query_key_supports_endpoint(
|
||||
return true;
|
||||
}
|
||||
let formats = provider_key_configured_api_formats(key);
|
||||
let endpoint_api_format = provider_query_normalize_api_format_alias(endpoint_api_format);
|
||||
formats.is_empty()
|
||||
|| formats
|
||||
.iter()
|
||||
.any(|value| value.eq_ignore_ascii_case(endpoint_api_format))
|
||||
.any(|value| provider_query_normalize_api_format_alias(value) == endpoint_api_format)
|
||||
}
|
||||
|
||||
fn provider_query_normalize_api_format_alias(value: &str) -> String {
|
||||
match value.trim().to_ascii_lowercase().as_str() {
|
||||
"openai:cli" => "openai:responses".to_string(),
|
||||
"openai:compact" => "openai:responses:compact".to_string(),
|
||||
other => other.to_string(),
|
||||
}
|
||||
}
|
||||
|
||||
fn provider_query_transport_supports_standard_test_execution(
|
||||
@@ -297,7 +305,7 @@ fn provider_query_transport_supports_standard_test_execution(
|
||||
"openai:chat" => {
|
||||
crate::provider_transport::policy::supports_local_openai_chat_transport(transport)
|
||||
}
|
||||
"openai:cli" => {
|
||||
"openai:responses" | "openai:cli" => {
|
||||
crate::provider_transport::policy::supports_local_standard_transport_with_network(
|
||||
transport, api_format,
|
||||
)
|
||||
@@ -977,7 +985,7 @@ async fn provider_query_execute_standard_test_candidate(
|
||||
}
|
||||
provider_request_body
|
||||
}
|
||||
"openai:cli" => {
|
||||
"openai:responses" | "openai:cli" => {
|
||||
let Some(mut provider_request_body) =
|
||||
crate::ai_pipeline::build_cross_format_openai_chat_request_body(
|
||||
&request_body,
|
||||
@@ -1001,14 +1009,14 @@ async fn provider_query_execute_standard_test_candidate(
|
||||
format!("Provider request body rules rejected {provider_api_format}"),
|
||||
));
|
||||
}
|
||||
crate::ai_pipeline::apply_codex_openai_cli_special_body_edits(
|
||||
crate::ai_pipeline::apply_codex_openai_responses_special_body_edits(
|
||||
&mut provider_request_body,
|
||||
transport.provider.provider_type.as_str(),
|
||||
provider_api_format,
|
||||
transport.endpoint.body_rules.as_ref(),
|
||||
Some(candidate.key.id.as_str()),
|
||||
);
|
||||
crate::ai_pipeline::apply_openai_compact_special_body_edits(
|
||||
crate::ai_pipeline::apply_openai_responses_compact_special_body_edits(
|
||||
&mut provider_request_body,
|
||||
provider_api_format,
|
||||
);
|
||||
@@ -1030,12 +1038,12 @@ async fn provider_query_execute_standard_test_candidate(
|
||||
None
|
||||
};
|
||||
let oauth_auth = match provider_api_format {
|
||||
"openai:chat" | "openai:cli" | "claude:chat" | "claude:cli" | "gemini:chat"
|
||||
| "gemini:cli" => state.resolve_local_oauth_header_auth(&transport).await?,
|
||||
"openai:chat" | "openai:responses" | "openai:cli" | "claude:chat" | "claude:cli"
|
||||
| "gemini:chat" | "gemini:cli" => state.resolve_local_oauth_header_auth(&transport).await?,
|
||||
_ => None,
|
||||
};
|
||||
let auth = match provider_api_format {
|
||||
"openai:chat" | "openai:cli" => {
|
||||
"openai:chat" | "openai:responses" | "openai:cli" => {
|
||||
crate::provider_transport::auth::resolve_local_openai_bearer_auth(&transport)
|
||||
.or(oauth_auth)
|
||||
}
|
||||
@@ -1096,7 +1104,7 @@ async fn provider_query_execute_standard_test_candidate(
|
||||
Some("application/json"),
|
||||
)
|
||||
}
|
||||
"openai:cli" => {
|
||||
"openai:responses" | "openai:cli" => {
|
||||
crate::provider_transport::auth::build_complete_passthrough_headers_with_auth(
|
||||
&parts.headers,
|
||||
auth_header.as_deref().unwrap_or_default(),
|
||||
@@ -1150,8 +1158,11 @@ async fn provider_query_execute_standard_test_candidate(
|
||||
response_body: None,
|
||||
});
|
||||
}
|
||||
if provider_api_format == "openai:cli" {
|
||||
crate::ai_pipeline::apply_codex_openai_cli_special_headers(
|
||||
if matches!(
|
||||
provider_api_format.trim().to_ascii_lowercase().as_str(),
|
||||
"openai:responses" | "openai:cli"
|
||||
) {
|
||||
crate::ai_pipeline::apply_codex_openai_responses_special_headers(
|
||||
&mut request_headers,
|
||||
&provider_request_body,
|
||||
&parts.headers,
|
||||
@@ -1254,7 +1265,10 @@ fn provider_query_prefers_chat_standard_test_api_format(api_format: &str) -> boo
|
||||
}
|
||||
|
||||
fn provider_query_supports_cli_standard_test_api_format(api_format: &str) -> bool {
|
||||
matches!(api_format, "openai:cli" | "claude:cli" | "gemini:cli")
|
||||
matches!(
|
||||
api_format,
|
||||
"openai:responses" | "openai:cli" | "claude:cli" | "gemini:cli"
|
||||
)
|
||||
}
|
||||
|
||||
async fn build_admin_provider_query_kiro_failover_response(
|
||||
|
||||
Reference in New Issue
Block a user