Home / File/ pydantic.py — langchain Source File

pydantic.py — langchain Source File

Architecture documentation for pydantic.py, a python file in the langchain codebase. 8 imports, 4 dependents.

File python OutputParsing StructuredValidation 8 imports 4 dependents 1 classes

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

Dependencies

  • json.py
  • langchain_core.exceptions
  • langchain_core.output_parsers
  • langchain_core.outputs
  • langchain_core.utils.pydantic
  • pydantic.py
  • typing
  • typing_extensions

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