mirror of
https://github.com/fawney19/Aether.git
synced 2026-09-02 09:20:22 +08:00
Normalize canonical API formats
This commit is contained in:
@@ -713,13 +713,17 @@ fn detect_kiro_web_search_request(
|
||||
{
|
||||
return None;
|
||||
}
|
||||
if !plan.stream || !plan.provider_api_format.eq_ignore_ascii_case("claude:cli") {
|
||||
if !plan.stream
|
||||
|| !plan
|
||||
.provider_api_format
|
||||
.eq_ignore_ascii_case("claude:messages")
|
||||
{
|
||||
return None;
|
||||
}
|
||||
if report_context
|
||||
.and_then(|context| context.get("client_api_format"))
|
||||
.and_then(Value::as_str)
|
||||
.is_some_and(|value| !value.eq_ignore_ascii_case("claude:cli"))
|
||||
.is_some_and(|value| !value.eq_ignore_ascii_case("claude:messages"))
|
||||
{
|
||||
return None;
|
||||
}
|
||||
@@ -1200,8 +1204,8 @@ mod tests {
|
||||
content_encoding: None,
|
||||
body: RequestBody::from_json(body),
|
||||
stream: true,
|
||||
client_api_format: "claude:cli".to_string(),
|
||||
provider_api_format: "claude:cli".to_string(),
|
||||
client_api_format: "claude:messages".to_string(),
|
||||
provider_api_format: "claude:messages".to_string(),
|
||||
model_name: Some("claude-sonnet-4.6".to_string()),
|
||||
proxy: None,
|
||||
tls_profile: None,
|
||||
@@ -1227,7 +1231,7 @@ mod tests {
|
||||
let plan = sample_plan(json!({"conversationState": {}}));
|
||||
let report_context = json!({
|
||||
"envelope_name": "kiro:generateAssistantResponse",
|
||||
"client_api_format": "claude:cli",
|
||||
"client_api_format": "claude:messages",
|
||||
"original_request_body": {
|
||||
"model": "claude-haiku-4-5-20251001",
|
||||
"messages": [{
|
||||
@@ -1274,7 +1278,7 @@ mod tests {
|
||||
}));
|
||||
let report_context = json!({
|
||||
"envelope_name": "kiro:generateAssistantResponse",
|
||||
"client_api_format": "claude:cli"
|
||||
"client_api_format": "claude:messages"
|
||||
});
|
||||
|
||||
let detected = detect_kiro_web_search_request(&plan, Some(&report_context))
|
||||
|
||||
@@ -272,17 +272,17 @@ mod tests {
|
||||
#[test]
|
||||
fn execution_contract_helper_appends_unified_fields() {
|
||||
let value = append_execution_contract_fields_to_value(
|
||||
json!({"provider_api_format": "gemini:chat"}),
|
||||
json!({"provider_api_format": "gemini:generate_content"}),
|
||||
ExecutionStrategy::LocalCrossFormat,
|
||||
ConversionMode::Bidirectional,
|
||||
"openai:chat",
|
||||
"gemini:chat",
|
||||
"gemini:generate_content",
|
||||
);
|
||||
|
||||
assert_eq!(value["execution_strategy"], "local_cross_format");
|
||||
assert_eq!(value["conversion_mode"], "bidirectional");
|
||||
assert_eq!(value["client_contract"], "openai:chat");
|
||||
assert_eq!(value["provider_contract"], "gemini:chat");
|
||||
assert_eq!(value["provider_api_format"], "gemini:chat");
|
||||
assert_eq!(value["provider_contract"], "gemini:generate_content");
|
||||
assert_eq!(value["provider_api_format"], "gemini:generate_content");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2354,8 +2354,8 @@ mod tests {
|
||||
assert!(should_skip_direct_finalize_prefetch(
|
||||
Some("claude_cli_sync_finalize"),
|
||||
Some("text/event-stream"),
|
||||
"claude:cli",
|
||||
"claude:cli",
|
||||
"claude:messages",
|
||||
"claude:messages",
|
||||
false,
|
||||
false,
|
||||
));
|
||||
@@ -2366,8 +2366,8 @@ mod tests {
|
||||
assert!(should_skip_direct_finalize_prefetch(
|
||||
Some("claude_cli_sync_finalize"),
|
||||
None,
|
||||
"claude:cli",
|
||||
"claude:cli",
|
||||
"claude:messages",
|
||||
"claude:messages",
|
||||
false,
|
||||
false,
|
||||
));
|
||||
@@ -2378,8 +2378,8 @@ mod tests {
|
||||
assert!(!should_skip_direct_finalize_prefetch(
|
||||
Some("claude_cli_sync_finalize"),
|
||||
Some("application/json"),
|
||||
"claude:cli",
|
||||
"claude:cli",
|
||||
"claude:messages",
|
||||
"claude:messages",
|
||||
false,
|
||||
false,
|
||||
));
|
||||
@@ -2391,7 +2391,7 @@ mod tests {
|
||||
Some("claude_cli_sync_finalize"),
|
||||
Some("text/event-stream"),
|
||||
"openai:chat",
|
||||
"claude:cli",
|
||||
"claude:messages",
|
||||
false,
|
||||
true,
|
||||
));
|
||||
|
||||
@@ -607,7 +607,7 @@ mod tests {
|
||||
let payload = core_finalize_payload(
|
||||
"openai_chat_sync_finalize",
|
||||
"openai:chat",
|
||||
"claude:chat",
|
||||
"claude:messages",
|
||||
200,
|
||||
json!({
|
||||
"type": "error",
|
||||
@@ -647,8 +647,8 @@ mod tests {
|
||||
async fn maybe_build_local_core_error_response_infers_status_from_gemini_status_text() {
|
||||
let payload = core_finalize_payload(
|
||||
"gemini_chat_sync_finalize",
|
||||
"gemini:chat",
|
||||
"gemini:chat",
|
||||
"gemini:generate_content",
|
||||
"gemini:generate_content",
|
||||
200,
|
||||
json!({
|
||||
"error": {
|
||||
|
||||
@@ -187,7 +187,7 @@ fn build_best_effort_local_core_error_body_converts_gemini_chat_error_to_openai_
|
||||
let payload = core_finalize_payload(
|
||||
"openai_chat_sync_finalize",
|
||||
"openai:chat",
|
||||
"gemini:chat",
|
||||
"gemini:generate_content",
|
||||
429,
|
||||
json!({
|
||||
"error": {
|
||||
@@ -222,7 +222,7 @@ fn build_best_effort_local_core_error_body_converts_claude_cli_error_to_openai_r
|
||||
let payload = core_finalize_payload(
|
||||
"openai_responses_sync_finalize",
|
||||
"openai:responses",
|
||||
"claude:cli",
|
||||
"claude:messages",
|
||||
401,
|
||||
json!({
|
||||
"type": "error",
|
||||
@@ -259,7 +259,7 @@ fn build_best_effort_local_core_error_body_converts_sync_errors_across_standard_
|
||||
core_finalize_payload(
|
||||
"openai_chat_sync_finalize",
|
||||
"openai:chat",
|
||||
"claude:chat",
|
||||
"claude:messages",
|
||||
429,
|
||||
json!({
|
||||
"type": "error",
|
||||
@@ -280,7 +280,7 @@ fn build_best_effort_local_core_error_body_converts_sync_errors_across_standard_
|
||||
"openai chat -> claude chat",
|
||||
core_finalize_payload(
|
||||
"claude_chat_sync_finalize",
|
||||
"claude:chat",
|
||||
"claude:messages",
|
||||
"openai:chat",
|
||||
404,
|
||||
json!({
|
||||
@@ -304,7 +304,7 @@ fn build_best_effort_local_core_error_body_converts_sync_errors_across_standard_
|
||||
"openai chat -> gemini chat",
|
||||
core_finalize_payload(
|
||||
"gemini_chat_sync_finalize",
|
||||
"gemini:chat",
|
||||
"gemini:generate_content",
|
||||
"openai:chat",
|
||||
401,
|
||||
json!({
|
||||
@@ -327,7 +327,7 @@ fn build_best_effort_local_core_error_body_converts_sync_errors_across_standard_
|
||||
core_finalize_payload(
|
||||
"openai_responses_sync_finalize",
|
||||
"openai:responses",
|
||||
"gemini:cli",
|
||||
"gemini:generate_content",
|
||||
429,
|
||||
json!({
|
||||
"error": {
|
||||
@@ -349,8 +349,8 @@ fn build_best_effort_local_core_error_body_converts_sync_errors_across_standard_
|
||||
"gemini cli -> claude cli",
|
||||
core_finalize_payload(
|
||||
"claude_cli_sync_finalize",
|
||||
"claude:cli",
|
||||
"gemini:cli",
|
||||
"claude:messages",
|
||||
"gemini:generate_content",
|
||||
503,
|
||||
json!({
|
||||
"error": {
|
||||
@@ -372,8 +372,8 @@ fn build_best_effort_local_core_error_body_converts_sync_errors_across_standard_
|
||||
"claude cli -> gemini cli",
|
||||
core_finalize_payload(
|
||||
"gemini_cli_sync_finalize",
|
||||
"gemini:cli",
|
||||
"claude:cli",
|
||||
"gemini:generate_content",
|
||||
"claude:messages",
|
||||
404,
|
||||
json!({
|
||||
"type": "error",
|
||||
@@ -410,7 +410,7 @@ fn resolve_local_core_error_response_body_json_parses_body_base64_json_for_cross
|
||||
{
|
||||
let mut payload = core_finalize_payload(
|
||||
"claude_cli_sync_finalize",
|
||||
"claude:cli",
|
||||
"claude:messages",
|
||||
"openai:responses",
|
||||
401,
|
||||
json!({}),
|
||||
@@ -441,7 +441,7 @@ fn resolve_local_core_error_response_body_json_parses_body_base64_json_for_cross
|
||||
fn resolve_local_core_error_response_body_json_builds_client_error_from_plain_text_body() {
|
||||
let mut payload = core_finalize_payload(
|
||||
"claude_cli_sync_finalize",
|
||||
"claude:cli",
|
||||
"claude:messages",
|
||||
"openai:responses",
|
||||
400,
|
||||
json!({}),
|
||||
|
||||
@@ -1730,8 +1730,8 @@ mod tests {
|
||||
content_encoding: None,
|
||||
body: RequestBody::from_json(json!({"model": "claude-3.7-sonnet"})),
|
||||
stream: false,
|
||||
client_api_format: "claude:chat".into(),
|
||||
provider_api_format: "claude:chat".into(),
|
||||
client_api_format: "claude:messages".into(),
|
||||
provider_api_format: "claude:messages".into(),
|
||||
model_name: Some("claude-3.7-sonnet".into()),
|
||||
proxy: None,
|
||||
tls_profile: Some("claude_code_nodejs".into()),
|
||||
|
||||
Reference in New Issue
Block a user