Implement transport profile routing

This commit is contained in:
fawney19
2026-05-05 22:21:23 +08:00
parent aacab1a90c
commit f959f02d40
86 changed files with 860 additions and 318 deletions

View File

@@ -210,7 +210,7 @@ async fn admin_gemini_files_upload_single_key(
proxy: state
.resolve_transport_proxy_snapshot_with_tunnel_affinity(&transport)
.await,
tls_profile: state.resolve_transport_tls_profile(&transport),
transport_profile: state.resolve_transport_profile(&transport),
timeouts: state.resolve_transport_execution_timeouts(&transport),
};

View File

@@ -72,7 +72,7 @@ async fn execute_antigravity_quota_plan(
provider_api_format: "antigravity:fetch_available_models".to_string(),
model_name: Some("fetchAvailableModels".to_string()),
proxy,
tls_profile: state.resolve_transport_tls_profile(transport),
transport_profile: state.resolve_transport_profile(transport),
timeouts,
};

View File

@@ -97,7 +97,7 @@ pub(super) async fn execute_codex_quota_plan(
provider_api_format: "openai:responses".to_string(),
model_name: Some("codex-wham-usage".to_string()),
proxy,
tls_profile: state.resolve_transport_tls_profile(transport),
transport_profile: state.resolve_transport_profile(transport),
timeouts,
};
execute_provider_quota_plan(state, transport, plan, "codex").await

View File

@@ -103,7 +103,7 @@ pub(super) async fn execute_kiro_quota_plan(
provider_api_format: "kiro:usage".to_string(),
model_name: Some("kiro-usage-limits".to_string()),
proxy,
tls_profile: state.resolve_transport_tls_profile(transport),
transport_profile: state.resolve_transport_profile(transport),
timeouts,
};

View File

@@ -194,7 +194,6 @@ pub(super) async fn execute_provider_quota_plan(
key_id = %transport.key.id,
endpoint_id = %transport.endpoint.id,
url = %plan.url,
tls_profile = ?plan.tls_profile.as_deref(),
proxy_source = ?proxy_source,
proxy_node_id = ?proxy_node_id,
proxy_url_present,

View File

@@ -179,7 +179,7 @@ async fn admin_provider_ops_execute_request(
provider_api_format: "provider_ops:verify".to_string(),
model_name: Some("verify-auth".to_string()),
proxy: proxy_snapshot.cloned(),
tls_profile: None,
transport_profile: None,
timeouts: Some(ExecutionTimeouts {
connect_ms: Some(ADMIN_PROVIDER_OPS_VERIFY_TIMEOUT_MS),
read_ms: Some(ADMIN_PROVIDER_OPS_VERIFY_TIMEOUT_MS),

View File

@@ -849,7 +849,7 @@ async fn provider_query_execute_kiro_test_candidate(
proxy: state
.resolve_transport_proxy_snapshot_with_tunnel_affinity(&transport)
.await,
tls_profile: state.resolve_transport_tls_profile(&transport),
transport_profile: state.resolve_transport_profile(&transport),
timeouts: state.resolve_transport_execution_timeouts(&transport),
};
@@ -1214,7 +1214,7 @@ async fn provider_query_execute_standard_test_candidate(
proxy: state
.resolve_transport_proxy_snapshot_with_tunnel_affinity(&transport)
.await,
tls_profile: state.resolve_transport_tls_profile(&transport),
transport_profile: state.resolve_transport_profile(&transport),
timeouts: state.resolve_transport_execution_timeouts(&transport),
};

View File

@@ -44,6 +44,8 @@ pub(crate) struct AdminProviderKeyCreateRequest {
pub(crate) model_include_patterns: Option<Vec<String>>,
#[serde(default)]
pub(crate) model_exclude_patterns: Option<Vec<String>>,
#[serde(default)]
pub(crate) fingerprint: Option<serde_json::Value>,
}
#[derive(Debug, Deserialize)]

View File

@@ -170,7 +170,7 @@ pub(crate) async fn build_admin_create_provider_key_record(
normalize_string_list(payload.allowed_models).map(|value| json!(value)),
None,
None,
None,
normalize_json_object(payload.fingerprint, "fingerprint")?,
)
.map_err(|err| err.to_string())?;
key.note = payload

View File

@@ -221,6 +221,13 @@ impl<'a> AdminAppState<'a> {
crate::provider_transport::resolve_transport_tls_profile(transport)
}
pub(crate) fn resolve_transport_profile(
&self,
transport: &AdminGatewayProviderTransportSnapshot,
) -> Option<aether_contracts::ResolvedTransportProfile> {
crate::provider_transport::resolve_transport_profile(transport)
}
pub(crate) fn resolve_transport_execution_timeouts(
&self,
transport: &AdminGatewayProviderTransportSnapshot,

View File

@@ -1261,12 +1261,16 @@ fn build_tunnel_probe_relay_envelope(
timeout_secs: u64,
) -> Result<Vec<u8>, String> {
let meta = crate::tunnel::tunnel_protocol::RequestMeta {
provider_id: None,
endpoint_id: None,
key_id: None,
method: "GET".to_string(),
url: probe_url.trim().to_string(),
headers: std::collections::HashMap::new(),
timeout: timeout_secs,
follow_redirects: Some(false),
http1_only: false,
transport_profile: None,
};
let meta_bytes = serde_json::to_vec(&meta)
.map_err(|error| format!("encode tunnel probe metadata failed: {error}"))?;

View File

@@ -163,7 +163,7 @@ pub(super) async fn maybe_build_local_test_connection_route_response(
if transport.provider.proxy.is_some()
|| transport.endpoint.proxy.is_some()
|| transport.key.proxy.is_some()
|| crate::provider_transport::resolve_transport_tls_profile(&transport).is_some()
|| crate::provider_transport::resolve_transport_profile(&transport).is_some()
{
return None;
}