mirror of
https://github.com/fawney19/Aether.git
synced 2026-09-02 01:10:23 +08:00
Normalize canonical API formats
This commit is contained in:
@@ -103,16 +103,16 @@ pub fn infer_internal_finalize_signature(payload: &GatewaySyncReportRequest) ->
|
||||
return Some("openai:video".to_string());
|
||||
}
|
||||
if report_kind.starts_with("claude_chat_") {
|
||||
return Some("claude:chat".to_string());
|
||||
return Some("claude:messages".to_string());
|
||||
}
|
||||
if report_kind.starts_with("claude_cli_") {
|
||||
return Some("claude:cli".to_string());
|
||||
return Some("claude:messages".to_string());
|
||||
}
|
||||
if report_kind.starts_with("gemini_chat_") {
|
||||
return Some("gemini:chat".to_string());
|
||||
return Some("gemini:generate_content".to_string());
|
||||
}
|
||||
if report_kind.starts_with("gemini_cli_") {
|
||||
return Some("gemini:cli".to_string());
|
||||
return Some("gemini:generate_content".to_string());
|
||||
}
|
||||
if report_kind.starts_with("gemini_video_") {
|
||||
return Some("gemini:video".to_string());
|
||||
@@ -121,7 +121,7 @@ pub fn infer_internal_finalize_signature(payload: &GatewaySyncReportRequest) ->
|
||||
}
|
||||
|
||||
pub fn resolve_internal_finalize_route(signature: &str) -> Option<InternalFinalizeRoute> {
|
||||
match aether_ai_formats::normalize_legacy_openai_format_alias(signature).as_str() {
|
||||
match aether_ai_formats::normalize_api_format_alias(signature).as_str() {
|
||||
"openai:chat" => Some(InternalFinalizeRoute {
|
||||
public_path: "/v1/chat/completions",
|
||||
route_family: "openai",
|
||||
@@ -147,25 +147,15 @@ pub fn resolve_internal_finalize_route(signature: &str) -> Option<InternalFinali
|
||||
route_family: "openai",
|
||||
route_kind: "video",
|
||||
}),
|
||||
"claude:chat" => Some(InternalFinalizeRoute {
|
||||
"claude:messages" => Some(InternalFinalizeRoute {
|
||||
public_path: "/v1/messages",
|
||||
route_family: "claude",
|
||||
route_kind: "chat",
|
||||
route_kind: "messages",
|
||||
}),
|
||||
"claude:cli" => Some(InternalFinalizeRoute {
|
||||
public_path: "/v1/messages",
|
||||
route_family: "claude",
|
||||
route_kind: "cli",
|
||||
}),
|
||||
"gemini:chat" => Some(InternalFinalizeRoute {
|
||||
"gemini:generate_content" => Some(InternalFinalizeRoute {
|
||||
public_path: "/v1beta/models",
|
||||
route_family: "gemini",
|
||||
route_kind: "chat",
|
||||
}),
|
||||
"gemini:cli" => Some(InternalFinalizeRoute {
|
||||
public_path: "/v1beta/models",
|
||||
route_family: "gemini",
|
||||
route_kind: "cli",
|
||||
route_kind: "generate_content",
|
||||
}),
|
||||
"gemini:video" => Some(InternalFinalizeRoute {
|
||||
public_path: "/v1beta/models",
|
||||
@@ -525,10 +515,7 @@ mod tests {
|
||||
route_kind: "responses:compact",
|
||||
})
|
||||
);
|
||||
assert_eq!(
|
||||
resolve_internal_finalize_route("openai:compact"),
|
||||
resolve_internal_finalize_route("openai:responses:compact")
|
||||
);
|
||||
assert_eq!(resolve_internal_finalize_route("openai:compact"), None);
|
||||
assert_eq!(
|
||||
resolve_internal_finalize_route("gemini:video"),
|
||||
Some(InternalFinalizeRoute {
|
||||
|
||||
@@ -331,7 +331,7 @@ mod tests {
|
||||
"cache_read_input_tokens": 10
|
||||
}
|
||||
}),
|
||||
"claude:chat",
|
||||
"claude:messages",
|
||||
);
|
||||
|
||||
assert_eq!(usage.input_tokens, 0);
|
||||
@@ -411,7 +411,7 @@ mod tests {
|
||||
"cache_creation_input_tokens": 4,
|
||||
"cache_read_input_tokens": 1
|
||||
}),
|
||||
"claude:chat",
|
||||
"claude:messages",
|
||||
);
|
||||
|
||||
assert_eq!(usage.input_tokens, 10);
|
||||
@@ -447,7 +447,7 @@ mod tests {
|
||||
}
|
||||
]
|
||||
}),
|
||||
"claude:chat",
|
||||
"claude:messages",
|
||||
);
|
||||
|
||||
assert_eq!(usage.input_tokens, 5);
|
||||
@@ -474,7 +474,7 @@ mod tests {
|
||||
}
|
||||
]
|
||||
}),
|
||||
"claude:chat",
|
||||
"claude:messages",
|
||||
);
|
||||
|
||||
assert_eq!(usage.input_tokens, 5);
|
||||
@@ -492,7 +492,7 @@ mod tests {
|
||||
"cache_read_input_tokens": 52873,
|
||||
"output_tokens": 973
|
||||
}),
|
||||
"claude:chat",
|
||||
"claude:messages",
|
||||
);
|
||||
|
||||
assert_eq!(usage.input_tokens, 4941);
|
||||
@@ -520,7 +520,7 @@ mod tests {
|
||||
},
|
||||
"service_tier": "standard"
|
||||
}),
|
||||
"claude:chat",
|
||||
"claude:messages",
|
||||
);
|
||||
|
||||
assert_eq!(usage.input_tokens, 2095);
|
||||
@@ -544,7 +544,7 @@ mod tests {
|
||||
"cache_creation_input_tokens": 5191,
|
||||
"cache_read_input_tokens": 97634
|
||||
}),
|
||||
"claude:chat",
|
||||
"claude:messages",
|
||||
);
|
||||
|
||||
assert_eq!(usage.input_tokens, 1);
|
||||
@@ -565,7 +565,7 @@ mod tests {
|
||||
"cachedContentTokenCount": 2
|
||||
}
|
||||
}),
|
||||
"gemini:chat",
|
||||
"gemini:generate_content",
|
||||
);
|
||||
|
||||
assert_eq!(usage.input_tokens, 14);
|
||||
@@ -596,7 +596,7 @@ mod tests {
|
||||
}
|
||||
]
|
||||
}),
|
||||
"gemini:chat",
|
||||
"gemini:generate_content",
|
||||
);
|
||||
|
||||
assert_eq!(usage.input_tokens, 14);
|
||||
|
||||
@@ -2453,7 +2453,7 @@ mod tests {
|
||||
"messages": [{"role": "user", "content": "hello"}]
|
||||
})),
|
||||
stream: false,
|
||||
client_api_format: "claude:cli".to_string(),
|
||||
client_api_format: "claude:messages".to_string(),
|
||||
provider_api_format: "openai:responses".to_string(),
|
||||
model_name: Some("gpt-5.4".to_string()),
|
||||
proxy: None,
|
||||
@@ -2561,7 +2561,7 @@ mod tests {
|
||||
content_encoding: None,
|
||||
body: RequestBody::from_json(json!({"model": "gpt-5.4"})),
|
||||
stream: true,
|
||||
client_api_format: "claude:cli".to_string(),
|
||||
client_api_format: "claude:messages".to_string(),
|
||||
provider_api_format: "openai:responses".to_string(),
|
||||
model_name: Some("gpt-5.4".to_string()),
|
||||
proxy: None,
|
||||
@@ -2618,7 +2618,7 @@ mod tests {
|
||||
content_encoding: None,
|
||||
body: RequestBody::from_json(json!({"model": "gpt-5.4"})),
|
||||
stream: false,
|
||||
client_api_format: "claude:cli".to_string(),
|
||||
client_api_format: "claude:messages".to_string(),
|
||||
provider_api_format: "openai:responses".to_string(),
|
||||
model_name: Some("gpt-5.4".to_string()),
|
||||
proxy: None,
|
||||
@@ -2629,7 +2629,7 @@ mod tests {
|
||||
trace_id: "trace-sync-usage-deep-1".to_string(),
|
||||
report_kind: "claude_cli_sync_success".to_string(),
|
||||
report_context: Some(json!({
|
||||
"client_api_format": "claude:cli",
|
||||
"client_api_format": "claude:messages",
|
||||
"provider_api_format": "openai:responses",
|
||||
"needs_conversion": true,
|
||||
"original_request_body": nested,
|
||||
@@ -3078,7 +3078,7 @@ mod tests {
|
||||
},
|
||||
stream: false,
|
||||
client_api_format: "openai:chat".to_string(),
|
||||
provider_api_format: "gemini:chat".to_string(),
|
||||
provider_api_format: "gemini:generate_content".to_string(),
|
||||
model_name: Some("gpt-5".to_string()),
|
||||
proxy: None,
|
||||
tls_profile: None,
|
||||
@@ -3089,7 +3089,7 @@ mod tests {
|
||||
report_kind: "openai_chat_sync_success".to_string(),
|
||||
report_context: Some(json!({
|
||||
"client_api_format": "openai:chat",
|
||||
"provider_api_format": "gemini:chat",
|
||||
"provider_api_format": "gemini:generate_content",
|
||||
"needs_conversion": true
|
||||
})),
|
||||
status_code: 200,
|
||||
@@ -3293,7 +3293,7 @@ mod tests {
|
||||
},
|
||||
stream: false,
|
||||
client_api_format: "openai:chat".to_string(),
|
||||
provider_api_format: "gemini:chat".to_string(),
|
||||
provider_api_format: "gemini:generate_content".to_string(),
|
||||
model_name: Some("gpt-5".to_string()),
|
||||
proxy: None,
|
||||
tls_profile: None,
|
||||
@@ -3304,7 +3304,7 @@ mod tests {
|
||||
report_kind: "openai_chat_sync_success".to_string(),
|
||||
report_context: Some(json!({
|
||||
"client_api_format": "openai:chat",
|
||||
"provider_api_format": "gemini:chat",
|
||||
"provider_api_format": "gemini:generate_content",
|
||||
"needs_conversion": true
|
||||
})),
|
||||
status_code: 200,
|
||||
@@ -3579,7 +3579,7 @@ mod tests {
|
||||
"input": [{"role": "user", "content": "provider-side compiled body"}],
|
||||
})),
|
||||
stream: false,
|
||||
client_api_format: "claude:cli".to_string(),
|
||||
client_api_format: "claude:messages".to_string(),
|
||||
provider_api_format: "openai:responses".to_string(),
|
||||
model_name: Some("gpt-5.4".to_string()),
|
||||
proxy: None,
|
||||
@@ -3590,7 +3590,7 @@ mod tests {
|
||||
trace_id: "trace-sync-no-client-echo-1".to_string(),
|
||||
report_kind: "claude_cli_sync_success".to_string(),
|
||||
report_context: Some(json!({
|
||||
"client_api_format": "claude:cli",
|
||||
"client_api_format": "claude:messages",
|
||||
"provider_api_format": "openai:responses",
|
||||
"needs_conversion": true,
|
||||
"original_request_body": null,
|
||||
@@ -3633,7 +3633,7 @@ mod tests {
|
||||
content_encoding: None,
|
||||
body: RequestBody::from_json(json!({"model": "gpt-5.4"})),
|
||||
stream: false,
|
||||
client_api_format: "claude:cli".to_string(),
|
||||
client_api_format: "claude:messages".to_string(),
|
||||
provider_api_format: "openai:responses".to_string(),
|
||||
model_name: Some("gpt-5.4".to_string()),
|
||||
proxy: None,
|
||||
@@ -3644,7 +3644,7 @@ mod tests {
|
||||
trace_id: "trace-sync-null-error-1".to_string(),
|
||||
report_kind: "claude_cli_sync_success".to_string(),
|
||||
report_context: Some(json!({
|
||||
"client_api_format": "claude:cli",
|
||||
"client_api_format": "claude:messages",
|
||||
"provider_api_format": "openai:responses",
|
||||
"needs_conversion": true,
|
||||
})),
|
||||
|
||||
Reference in New Issue
Block a user