pydantic.py — langchain Source File
Architecture documentation for pydantic.py, a python file in the langchain codebase. 8 imports, 4 dependents.
Entity Profile
Dependency Diagram
graph LR 00fb336c_8832_626d_1bf9_f4f07a04d663["pydantic.py"] 73622474_3901_c3da_bce7_e7f2cbdfa6c6["json.py"] 00fb336c_8832_626d_1bf9_f4f07a04d663 --> 73622474_3901_c3da_bce7_e7f2cbdfa6c6 8e2034b7_ceb8_963f_29fc_2ea6b50ef9b3["typing"] 00fb336c_8832_626d_1bf9_f4f07a04d663 --> 8e2034b7_ceb8_963f_29fc_2ea6b50ef9b3 00fb336c_8832_626d_1bf9_f4f07a04d663["pydantic.py"] 00fb336c_8832_626d_1bf9_f4f07a04d663 --> 00fb336c_8832_626d_1bf9_f4f07a04d663 91721f45_4909_e489_8c1f_084f8bd87145["typing_extensions"] 00fb336c_8832_626d_1bf9_f4f07a04d663 --> 91721f45_4909_e489_8c1f_084f8bd87145 75137834_4ba7_dc43_7ec5_182c05eceedf["langchain_core.exceptions"] 00fb336c_8832_626d_1bf9_f4f07a04d663 --> 75137834_4ba7_dc43_7ec5_182c05eceedf 83d7c7fd_1989_762c_9cf3_cecb50ada22b["langchain_core.output_parsers"] 00fb336c_8832_626d_1bf9_f4f07a04d663 --> 83d7c7fd_1989_762c_9cf3_cecb50ada22b ac2a9b92_4484_491e_1b48_ec85e71e1d58["langchain_core.outputs"] 00fb336c_8832_626d_1bf9_f4f07a04d663 --> ac2a9b92_4484_491e_1b48_ec85e71e1d58 1014fe78_cb2c_fde4_a624_ae899aa7ca8e["langchain_core.utils.pydantic"] 00fb336c_8832_626d_1bf9_f4f07a04d663 --> 1014fe78_cb2c_fde4_a624_ae899aa7ca8e 73622474_3901_c3da_bce7_e7f2cbdfa6c6["json.py"] 73622474_3901_c3da_bce7_e7f2cbdfa6c6 --> 00fb336c_8832_626d_1bf9_f4f07a04d663 d083bb96_f642_0585_b68e_6b3fea430962["openai_functions.py"] d083bb96_f642_0585_b68e_6b3fea430962 --> 00fb336c_8832_626d_1bf9_f4f07a04d663 7d2ea6eb_ed7a_3052_c920_cb5cdc943964["openai_tools.py"] 7d2ea6eb_ed7a_3052_c920_cb5cdc943964 --> 00fb336c_8832_626d_1bf9_f4f07a04d663 00fb336c_8832_626d_1bf9_f4f07a04d663["pydantic.py"] 00fb336c_8832_626d_1bf9_f4f07a04d663 --> 00fb336c_8832_626d_1bf9_f4f07a04d663 style 00fb336c_8832_626d_1bf9_f4f07a04d663 fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
"""Output parsers using Pydantic."""
import json
from typing import Annotated, Generic, Literal, overload
import pydantic
from pydantic import SkipValidation
from typing_extensions import override
from langchain_core.exceptions import OutputParserException
from langchain_core.output_parsers import JsonOutputParser
from langchain_core.outputs import Generation
from langchain_core.utils.pydantic import (
PydanticBaseModel,
TBaseModel,
)
class PydanticOutputParser(JsonOutputParser, Generic[TBaseModel]):
"""Parse an output using a Pydantic model."""
pydantic_object: Annotated[type[TBaseModel], SkipValidation()]
"""The Pydantic model to parse."""
def _parse_obj(self, obj: dict) -> TBaseModel:
try:
if issubclass(self.pydantic_object, pydantic.BaseModel):
return self.pydantic_object.model_validate(obj)
if issubclass(self.pydantic_object, pydantic.v1.BaseModel):
return self.pydantic_object.parse_obj(obj)
msg = f"Unsupported model version for PydanticOutputParser: \
{self.pydantic_object.__class__}"
raise OutputParserException(msg)
except (pydantic.ValidationError, pydantic.v1.ValidationError) as e:
raise self._parser_exception(e, obj) from e
def _parser_exception(
self, e: Exception, json_object: dict
) -> OutputParserException:
json_string = json.dumps(json_object, ensure_ascii=False)
name = self.pydantic_object.__name__
msg = f"Failed to parse {name} from completion {json_string}. Got: {e}"
return OutputParserException(msg, llm_output=json_string)
@overload
def parse_result(
self, result: list[Generation], *, partial: Literal[False] = False
) -> TBaseModel: ...
@overload
def parse_result(
self, result: list[Generation], *, partial: bool = False
) -> TBaseModel | None: ...
def parse_result(
self, result: list[Generation], *, partial: bool = False
) -> TBaseModel | None:
"""Parse the result of an LLM call to a Pydantic object.
Args:
// ... (80 more lines)
Domain
Subdomains
Classes
Dependencies
- json.py
- langchain_core.exceptions
- langchain_core.output_parsers
- langchain_core.outputs
- langchain_core.utils.pydantic
- pydantic.py
- typing
- typing_extensions
Imported By
Source
Frequently Asked Questions
What does pydantic.py do?
pydantic.py is a source file in the langchain codebase, written in python. It belongs to the OutputParsing domain, StructuredValidation subdomain.
What does pydantic.py depend on?
pydantic.py imports 8 module(s): json.py, langchain_core.exceptions, langchain_core.output_parsers, langchain_core.outputs, langchain_core.utils.pydantic, pydantic.py, typing, typing_extensions.
What files import pydantic.py?
pydantic.py is imported by 4 file(s): json.py, openai_functions.py, openai_tools.py, pydantic.py.
Where is pydantic.py in the architecture?
pydantic.py is located at libs/core/langchain_core/output_parsers/pydantic.py (domain: OutputParsing, subdomain: StructuredValidation, directory: libs/core/langchain_core/output_parsers).
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free