json.py — langchain Source File
Architecture documentation for json.py, a python file in the langchain codebase. 11 imports, 4 dependents.
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
Classes
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
Imported By
Source
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