mirror of
https://github.com/hwchase17/langchain.git
synced 2025-10-01 18:29:07 +00:00
152 lines
3.9 KiB
Python
152 lines
3.9 KiB
Python
import pytest
|
|
|
|
from langchain.utils.json_schema import dereference_refs
|
|
|
|
|
|
def test_dereference_refs_no_refs() -> None:
|
|
schema = {
|
|
"type": "object",
|
|
"properties": {
|
|
"first_name": {"type": "string"},
|
|
},
|
|
}
|
|
actual = dereference_refs(schema)
|
|
assert actual == schema
|
|
|
|
|
|
def test_dereference_refs_one_ref() -> None:
|
|
schema = {
|
|
"type": "object",
|
|
"properties": {
|
|
"first_name": {"$ref": "#/$defs/name"},
|
|
},
|
|
"$defs": {"name": {"type": "string"}},
|
|
}
|
|
expected = {
|
|
"type": "object",
|
|
"properties": {
|
|
"first_name": {"type": "string"},
|
|
},
|
|
"$defs": {"name": {"type": "string"}},
|
|
}
|
|
actual = dereference_refs(schema)
|
|
assert actual == expected
|
|
|
|
|
|
def test_dereference_refs_multiple_refs() -> None:
|
|
schema = {
|
|
"type": "object",
|
|
"properties": {
|
|
"first_name": {"$ref": "#/$defs/name"},
|
|
"other": {"$ref": "#/$defs/other"},
|
|
},
|
|
"$defs": {
|
|
"name": {"type": "string"},
|
|
"other": {"type": "object", "properties": {"age": "int", "height": "int"}},
|
|
},
|
|
}
|
|
expected = {
|
|
"type": "object",
|
|
"properties": {
|
|
"first_name": {"type": "string"},
|
|
"other": {"type": "object", "properties": {"age": "int", "height": "int"}},
|
|
},
|
|
"$defs": {
|
|
"name": {"type": "string"},
|
|
"other": {"type": "object", "properties": {"age": "int", "height": "int"}},
|
|
},
|
|
}
|
|
actual = dereference_refs(schema)
|
|
assert actual == expected
|
|
|
|
|
|
def test_dereference_refs_nested_refs_skip() -> None:
|
|
schema = {
|
|
"type": "object",
|
|
"properties": {
|
|
"info": {"$ref": "#/$defs/info"},
|
|
},
|
|
"$defs": {
|
|
"name": {"type": "string"},
|
|
"info": {
|
|
"type": "object",
|
|
"properties": {"age": "int", "name": {"$ref": "#/$defs/name"}},
|
|
},
|
|
},
|
|
}
|
|
expected = {
|
|
"type": "object",
|
|
"properties": {
|
|
"info": {
|
|
"type": "object",
|
|
"properties": {"age": "int", "name": {"type": "string"}},
|
|
},
|
|
},
|
|
"$defs": {
|
|
"name": {"type": "string"},
|
|
"info": {
|
|
"type": "object",
|
|
"properties": {"age": "int", "name": {"$ref": "#/$defs/name"}},
|
|
},
|
|
},
|
|
}
|
|
actual = dereference_refs(schema)
|
|
assert actual == expected
|
|
|
|
|
|
def test_dereference_refs_nested_refs_no_skip() -> None:
|
|
schema = {
|
|
"type": "object",
|
|
"properties": {
|
|
"info": {"$ref": "#/$defs/info"},
|
|
},
|
|
"$defs": {
|
|
"name": {"type": "string"},
|
|
"info": {
|
|
"type": "object",
|
|
"properties": {"age": "int", "name": {"$ref": "#/$defs/name"}},
|
|
},
|
|
},
|
|
}
|
|
expected = {
|
|
"type": "object",
|
|
"properties": {
|
|
"info": {
|
|
"type": "object",
|
|
"properties": {"age": "int", "name": {"type": "string"}},
|
|
},
|
|
},
|
|
"$defs": {
|
|
"name": {"type": "string"},
|
|
"info": {
|
|
"type": "object",
|
|
"properties": {"age": "int", "name": {"type": "string"}},
|
|
},
|
|
},
|
|
}
|
|
actual = dereference_refs(schema, skip_keys=())
|
|
assert actual == expected
|
|
|
|
|
|
def test_dereference_refs_missing_ref() -> None:
|
|
schema = {
|
|
"type": "object",
|
|
"properties": {
|
|
"first_name": {"$ref": "#/$defs/name"},
|
|
},
|
|
"$defs": {},
|
|
}
|
|
with pytest.raises(KeyError):
|
|
dereference_refs(schema)
|
|
|
|
|
|
def test_dereference_refs_remote_ref() -> None:
|
|
schema = {
|
|
"type": "object",
|
|
"properties": {
|
|
"first_name": {"$ref": "https://somewhere/else/name"},
|
|
},
|
|
}
|
|
with pytest.raises(ValueError):
|
|
dereference_refs(schema)
|