mirror of
https://github.com/fawney19/Aether.git
synced 2026-09-02 01:10:23 +08:00
fix(ai): allow null OpenAI Responses error fields
This commit is contained in:
@@ -483,7 +483,7 @@ pub(crate) fn has_nested_error(value: &serde_json::Value) -> bool {
|
||||
return false;
|
||||
};
|
||||
|
||||
if object.contains_key("error") {
|
||||
if object.get("error").is_some_and(|error| !error.is_null()) {
|
||||
return true;
|
||||
}
|
||||
if object
|
||||
@@ -500,7 +500,9 @@ pub(crate) fn has_nested_error(value: &serde_json::Value) -> bool {
|
||||
.is_some_and(|chunks| {
|
||||
chunks.iter().any(|chunk| {
|
||||
chunk.as_object().is_some_and(|chunk_object| {
|
||||
chunk_object.contains_key("error")
|
||||
chunk_object
|
||||
.get("error")
|
||||
.is_some_and(|error| !error.is_null())
|
||||
|| chunk_object
|
||||
.get("type")
|
||||
.and_then(|value| value.as_str())
|
||||
|
||||
@@ -11,8 +11,9 @@ use crate::ai_pipeline_api::{
|
||||
GatewayControlSyncDecisionResponse,
|
||||
};
|
||||
use crate::execution_runtime::submission::{
|
||||
build_best_effort_local_core_error_body, resolve_core_error_background_report_kind,
|
||||
resolve_core_success_background_report_kind, resolve_local_core_error_response_body_json,
|
||||
build_best_effort_local_core_error_body, has_nested_error,
|
||||
resolve_core_error_background_report_kind, resolve_core_success_background_report_kind,
|
||||
resolve_local_core_error_response_body_json,
|
||||
};
|
||||
use crate::execution_runtime::{
|
||||
resolve_local_sync_error_background_report_kind,
|
||||
@@ -251,6 +252,23 @@ fn build_best_effort_local_core_error_body_converts_claude_cli_error_to_openai_r
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn has_nested_error_ignores_null_error_fields() {
|
||||
assert!(!has_nested_error(&json!({
|
||||
"id": "resp_completed_123",
|
||||
"object": "response",
|
||||
"status": "completed",
|
||||
"error": null,
|
||||
"output": []
|
||||
})));
|
||||
assert!(has_nested_error(&json!({
|
||||
"id": "resp_failed_123",
|
||||
"object": "response",
|
||||
"status": "failed",
|
||||
"error": {"message": "quota reached"}
|
||||
})));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn build_best_effort_local_core_error_body_converts_sync_errors_across_standard_families() {
|
||||
let cases = vec![
|
||||
|
||||
Reference in New Issue
Block a user