mirror of https://github.com/hwchase17/langchain
add tests
parent
1f5c579ef4
commit
e805f8e263
@ -0,0 +1,151 @@
|
||||
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)
|
@ -0,0 +1,79 @@
|
||||
from langchain.pydantic_v1 import BaseModel, Field
|
||||
from langchain.utils.openai_functions import convert_pydantic_to_openai_function
|
||||
|
||||
|
||||
def test_convert_pydantic_to_openai_function() -> None:
|
||||
class Data(BaseModel):
|
||||
"""The data to return."""
|
||||
|
||||
key: str = Field(..., description="API key")
|
||||
days: int = Field(default=0, description="Number of days to forecast")
|
||||
|
||||
actual = convert_pydantic_to_openai_function(Data)
|
||||
expected = {
|
||||
"name": "Data",
|
||||
"description": "The data to return.",
|
||||
"parameters": {
|
||||
"title": "Data",
|
||||
"description": "The data to return.",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"key": {"title": "Key", "description": "API key", "type": "string"},
|
||||
"days": {
|
||||
"title": "Days",
|
||||
"description": "Number of days to forecast",
|
||||
"default": 0,
|
||||
"type": "integer",
|
||||
},
|
||||
},
|
||||
"required": ["key"],
|
||||
},
|
||||
}
|
||||
assert actual == expected
|
||||
|
||||
|
||||
def test_convert_pydantic_to_openai_function_nested() -> None:
|
||||
class Data(BaseModel):
|
||||
"""The data to return."""
|
||||
|
||||
key: str = Field(..., description="API key")
|
||||
days: int = Field(default=0, description="Number of days to forecast")
|
||||
|
||||
class Model(BaseModel):
|
||||
"""The model to return."""
|
||||
|
||||
data: Data
|
||||
|
||||
actual = convert_pydantic_to_openai_function(Model)
|
||||
expected = {
|
||||
"name": "Model",
|
||||
"description": "The model to return.",
|
||||
"parameters": {
|
||||
"title": "Model",
|
||||
"description": "The model to return.",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"data": {
|
||||
"title": "Data",
|
||||
"description": "The data to return.",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"key": {
|
||||
"title": "Key",
|
||||
"description": "API key",
|
||||
"type": "string",
|
||||
},
|
||||
"days": {
|
||||
"title": "Days",
|
||||
"description": "Number of days to forecast",
|
||||
"default": 0,
|
||||
"type": "integer",
|
||||
},
|
||||
},
|
||||
"required": ["key"],
|
||||
}
|
||||
},
|
||||
"required": ["data"],
|
||||
},
|
||||
}
|
||||
assert actual == expected
|
Loading…
Reference in New Issue