Home / File/ json.py — langchain Source File

json.py — langchain Source File

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

File python OutputParsing StreamingParsers 11 imports 4 dependents 1 classes

Entity Profile

Dependency Diagram

graph LR
  73622474_3901_c3da_bce7_e7f2cbdfa6c6["json.py"]
  73622474_3901_c3da_bce7_e7f2cbdfa6c6["json.py"]
  73622474_3901_c3da_bce7_e7f2cbdfa6c6 --> 73622474_3901_c3da_bce7_e7f2cbdfa6c6
  8e2034b7_ceb8_963f_29fc_2ea6b50ef9b3["typing"]
  73622474_3901_c3da_bce7_e7f2cbdfa6c6 --> 8e2034b7_ceb8_963f_29fc_2ea6b50ef9b3
  42c4a887_240e_d092_b770_25ae8eb73a14["jsonpatch"]
  73622474_3901_c3da_bce7_e7f2cbdfa6c6 --> 42c4a887_240e_d092_b770_25ae8eb73a14
  00fb336c_8832_626d_1bf9_f4f07a04d663["pydantic.py"]
  73622474_3901_c3da_bce7_e7f2cbdfa6c6 --> 00fb336c_8832_626d_1bf9_f4f07a04d663
  63ae09a2_4a67_3eaf_7888_b0fd11776a0e["pydantic.v1"]
  73622474_3901_c3da_bce7_e7f2cbdfa6c6 --> 63ae09a2_4a67_3eaf_7888_b0fd11776a0e
  91721f45_4909_e489_8c1f_084f8bd87145["typing_extensions"]
  73622474_3901_c3da_bce7_e7f2cbdfa6c6 --> 91721f45_4909_e489_8c1f_084f8bd87145
  75137834_4ba7_dc43_7ec5_182c05eceedf["langchain_core.exceptions"]
  73622474_3901_c3da_bce7_e7f2cbdfa6c6 --> 75137834_4ba7_dc43_7ec5_182c05eceedf
  257644e6_b2c3_affb_f498_0d9182256432["langchain_core.output_parsers.format_instructions"]
  73622474_3901_c3da_bce7_e7f2cbdfa6c6 --> 257644e6_b2c3_affb_f498_0d9182256432
  5d37c56a_542f_e309_4416_d58ad5f08a28["langchain_core.output_parsers.transform"]
  73622474_3901_c3da_bce7_e7f2cbdfa6c6 --> 5d37c56a_542f_e309_4416_d58ad5f08a28
  ac2a9b92_4484_491e_1b48_ec85e71e1d58["langchain_core.outputs"]
  73622474_3901_c3da_bce7_e7f2cbdfa6c6 --> ac2a9b92_4484_491e_1b48_ec85e71e1d58
  78c5ca66_f675_3ca1_fdb7_d5a994dcf4bf["langchain_core.utils.json"]
  73622474_3901_c3da_bce7_e7f2cbdfa6c6 --> 78c5ca66_f675_3ca1_fdb7_d5a994dcf4bf
  73622474_3901_c3da_bce7_e7f2cbdfa6c6["json.py"]
  73622474_3901_c3da_bce7_e7f2cbdfa6c6 --> 73622474_3901_c3da_bce7_e7f2cbdfa6c6
  d083bb96_f642_0585_b68e_6b3fea430962["openai_functions.py"]
  d083bb96_f642_0585_b68e_6b3fea430962 --> 73622474_3901_c3da_bce7_e7f2cbdfa6c6
  7d2ea6eb_ed7a_3052_c920_cb5cdc943964["openai_tools.py"]
  7d2ea6eb_ed7a_3052_c920_cb5cdc943964 --> 73622474_3901_c3da_bce7_e7f2cbdfa6c6
  00fb336c_8832_626d_1bf9_f4f07a04d663["pydantic.py"]
  00fb336c_8832_626d_1bf9_f4f07a04d663 --> 73622474_3901_c3da_bce7_e7f2cbdfa6c6
  style 73622474_3901_c3da_bce7_e7f2cbdfa6c6 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

"""Parser for JSON output."""

from __future__ import annotations

import json
from json import JSONDecodeError
from typing import Annotated, Any, TypeVar

import jsonpatch  # type: ignore[import-untyped]
import pydantic
from pydantic import SkipValidation
from pydantic.v1 import BaseModel
from typing_extensions import override

from langchain_core.exceptions import OutputParserException
from langchain_core.output_parsers.format_instructions import JSON_FORMAT_INSTRUCTIONS
from langchain_core.output_parsers.transform import BaseCumulativeTransformOutputParser
from langchain_core.outputs import Generation
from langchain_core.utils.json import (
    parse_and_check_json_markdown,
    parse_json_markdown,
    parse_partial_json,
)

# Union type needs to be last assignment to PydanticBaseModel to make mypy happy.
PydanticBaseModel = BaseModel | pydantic.BaseModel

TBaseModel = TypeVar("TBaseModel", bound=PydanticBaseModel)


class JsonOutputParser(BaseCumulativeTransformOutputParser[Any]):
    """Parse the output of an LLM call to a JSON object.

    Probably the most reliable output parser for getting structured data that does *not*
    use function calling.

    When used in streaming mode, it will yield partial JSON objects containing all the
    keys that have been returned so far.

    In streaming, if `diff` is set to `True`, yields `JSONPatch` operations describing
    the difference between the previous and the current object.
    """

    pydantic_object: Annotated[type[TBaseModel] | None, SkipValidation()] = None  # type: ignore[valid-type]
    """The Pydantic object to use for validation.

    If `None`, no validation is performed.
    """

    @override
    def _diff(self, prev: Any | None, next: Any) -> Any:
        return jsonpatch.make_patch(prev, next).patch

    @staticmethod
    def _get_schema(pydantic_object: type[TBaseModel]) -> dict[str, Any]:
        if issubclass(pydantic_object, pydantic.BaseModel):
            return pydantic_object.model_json_schema()
        return pydantic_object.schema()

    @override
// ... (80 more lines)

Domain

Subdomains

Dependencies

  • json.py
  • jsonpatch
  • langchain_core.exceptions
  • langchain_core.output_parsers.format_instructions
  • langchain_core.output_parsers.transform
  • langchain_core.outputs
  • langchain_core.utils.json
  • pydantic.py
  • pydantic.v1
  • typing
  • typing_extensions

Frequently Asked Questions

What does json.py do?
json.py is a source file in the langchain codebase, written in python. It belongs to the OutputParsing domain, StreamingParsers subdomain.
What does json.py depend on?
json.py imports 11 module(s): json.py, jsonpatch, langchain_core.exceptions, langchain_core.output_parsers.format_instructions, langchain_core.output_parsers.transform, langchain_core.outputs, langchain_core.utils.json, pydantic.py, and 3 more.
What files import json.py?
json.py is imported by 4 file(s): json.py, openai_functions.py, openai_tools.py, pydantic.py.
Where is json.py in the architecture?
json.py is located at libs/core/langchain_core/output_parsers/json.py (domain: OutputParsing, subdomain: StreamingParsers, 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