Skip to content

Commit

Permalink
core[patch]: Fix utils.json_schema.dereference_refs (#24335 KeyError:…
Browse files Browse the repository at this point in the history
… 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
  • Loading branch information
eunhye1kim authored Jul 19, 2024
1 parent 06f4767 commit 9aae8ef
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 2 deletions.
6 changes: 4 additions & 2 deletions libs/core/langchain_core/utils/json_schema.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)


Expand Down
32 changes: 32 additions & 0 deletions libs/core/tests/unit_tests/utils/test_json_schema.py
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down

0 comments on commit 9aae8ef

Please sign in to comment.