mirror of
https://github.com/hwchase17/langchain
synced 2024-11-10 01:10:59 +00:00
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
This commit is contained in:
parent
06f47678ae
commit
9aae8ef416
@ -13,10 +13,12 @@ def _retrieve_ref(path: str, schema: dict) -> dict:
|
|||||||
)
|
)
|
||||||
out = schema
|
out = schema
|
||||||
for component in components[1:]:
|
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)]
|
out = out[int(component)]
|
||||||
else:
|
else:
|
||||||
out = out[component]
|
raise KeyError(f"Reference '{path}' not found.")
|
||||||
return deepcopy(out)
|
return deepcopy(out)
|
||||||
|
|
||||||
|
|
||||||
|
@ -183,6 +183,38 @@ def test_dereference_refs_integer_ref() -> None:
|
|||||||
assert actual == expected
|
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:
|
def test_dereference_refs_cyclical_refs() -> None:
|
||||||
schema = {
|
schema = {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
|
Loading…
Reference in New Issue
Block a user