core[patch]: Fix utils.json_schema.dereference_refs (#24335 KeyError: 400 in JSON schema processing) (#24337)

Description:
This PR fixes a KeyError: 400 that occurs in the JSON schema processing
within the reduce_openapi_spec function. The _retrieve_ref function in
json_schema.py was modified to handle missing components gracefully by
continuing to the next component if the current one is not found. This
ensures that the OpenAPI specification is fully interpreted and the
agent executes without errors.

Issue:
Fixes issue #24335

Dependencies:
No additional dependencies are required for this change.

Twitter handle:
@lunara_x
pull/24451/head
Eun Hye Kim 2 months ago committed by GitHub
parent 06f47678ae
commit 9aae8ef416
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -13,10 +13,12 @@ def _retrieve_ref(path: str, schema: dict) -> dict:
)
out = schema
for component in components[1:]:
if component.isdigit():
if component in out:
out = out[component]
elif component.isdigit() and int(component) in out:
out = out[int(component)]
else:
out = out[component]
raise KeyError(f"Reference '{path}' not found.")
return deepcopy(out)

@ -183,6 +183,38 @@ def test_dereference_refs_integer_ref() -> None:
assert actual == expected
def test_dereference_refs_string_ref() -> None:
schema = {
"type": "object",
"properties": {
"error_400": {"$ref": "#/$defs/400"},
},
"$defs": {
"400": {
"type": "object",
"properties": {"description": "Bad Request"},
},
},
}
expected = {
"type": "object",
"properties": {
"error_400": {
"type": "object",
"properties": {"description": "Bad Request"},
},
},
"$defs": {
"400": {
"type": "object",
"properties": {"description": "Bad Request"},
},
},
}
actual = dereference_refs(schema)
assert actual == expected
def test_dereference_refs_cyclical_refs() -> None:
schema = {
"type": "object",

Loading…
Cancel
Save