test_pydantic_tools_parser_with_nested_models() — langchain Function Reference
Architecture documentation for the test_pydantic_tools_parser_with_nested_models() function in test_openai_tools.py from the langchain codebase.
Entity Profile
Dependency Diagram
graph TD 73bcc9bb_b66e_b9bb_5f96_c7c9c864dbb7["test_pydantic_tools_parser_with_nested_models()"] 0f94a062_f577_31c7_fb9c_0f526b273e64["test_openai_tools.py"] 73bcc9bb_b66e_b9bb_5f96_c7c9c864dbb7 -->|defined in| 0f94a062_f577_31c7_fb9c_0f526b273e64 style 73bcc9bb_b66e_b9bb_5f96_c7c9c864dbb7 fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
libs/core/tests/unit_tests/output_parsers/test_openai_tools.py lines 1050–1190
def test_pydantic_tools_parser_with_nested_models() -> None:
"""Test PydanticToolsParser with nested Pydantic v1 and v2 models."""
# Nested v1 models
if sys.version_info >= (3, 14):
AddressV1 = pydantic.v1.create_model( # noqa: N806
"AddressV1",
__doc__="Address using Pydantic v1.",
street=(str, ...),
city=(str, ...),
zip_code=(str, ...),
)
PersonV1 = pydantic.v1.create_model( # noqa: N806
"PersonV1",
__doc__="Person with nested address using Pydantic v1.",
name=(str, ...),
age=(int, ...),
address=(AddressV1, ...),
)
else:
class AddressV1(pydantic.v1.BaseModel):
"""Address using Pydantic v1."""
street: str
city: str
zip_code: str
class PersonV1(pydantic.v1.BaseModel):
"""Person with nested address using Pydantic v1."""
name: str
age: int
address: AddressV1
# Nested v2 models
class CoordinatesV2(BaseModel):
"""Coordinates using Pydantic v2."""
latitude: float
longitude: float
class LocationV2(BaseModel):
"""Location with nested coordinates using Pydantic v2."""
name: str
coordinates: CoordinatesV2
# Test with nested Pydantic v1 model
parser_v1 = PydanticToolsParser(tools=[PersonV1])
message_v1 = AIMessage(
content="",
tool_calls=[
{
"id": "call_person",
"name": "PersonV1",
"args": {
"name": "Alice",
"age": 30,
"address": {
"street": "123 Main St",
"city": "Springfield",
"zip_code": "12345",
},
},
}
],
)
generation_v1 = ChatGeneration(message=message_v1)
result_v1 = parser_v1.parse_result([generation_v1])
assert len(result_v1) == 1
assert isinstance(result_v1[0], PersonV1)
assert result_v1[0].name == "Alice" # type: ignore[attr-defined,unused-ignore]
assert result_v1[0].age == 30 # type: ignore[attr-defined,unused-ignore]
assert isinstance(result_v1[0].address, AddressV1) # type: ignore[attr-defined,unused-ignore]
assert result_v1[0].address.street == "123 Main St" # type: ignore[attr-defined,unused-ignore]
assert result_v1[0].address.city == "Springfield" # type: ignore[attr-defined,unused-ignore]
# Test with nested Pydantic v2 model
parser_v2 = PydanticToolsParser(tools=[LocationV2])
message_v2 = AIMessage(
Domain
Subdomains
Source
Frequently Asked Questions
What does test_pydantic_tools_parser_with_nested_models() do?
test_pydantic_tools_parser_with_nested_models() is a function in the langchain codebase, defined in libs/core/tests/unit_tests/output_parsers/test_openai_tools.py.
Where is test_pydantic_tools_parser_with_nested_models() defined?
test_pydantic_tools_parser_with_nested_models() is defined in libs/core/tests/unit_tests/output_parsers/test_openai_tools.py at line 1050.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free