Home / File/ openai_tools.py — langchain Source File

openai_tools.py — langchain Source File

Architecture documentation for openai_tools.py, a python file in the langchain codebase. 12 imports, 0 dependents.

File python OutputParsing StreamingParsers 12 imports 3 functions 3 classes

Entity Profile

Dependency Diagram

graph LR
  7d2ea6eb_ed7a_3052_c920_cb5cdc943964["openai_tools.py"]
  e874d8a4_cef0_9d0b_d1ee_84999c07cc2c["copy"]
  7d2ea6eb_ed7a_3052_c920_cb5cdc943964 --> e874d8a4_cef0_9d0b_d1ee_84999c07cc2c
  73622474_3901_c3da_bce7_e7f2cbdfa6c6["json.py"]
  7d2ea6eb_ed7a_3052_c920_cb5cdc943964 --> 73622474_3901_c3da_bce7_e7f2cbdfa6c6
  2a7f66a7_8738_3d47_375b_70fcaa6ac169["logging"]
  7d2ea6eb_ed7a_3052_c920_cb5cdc943964 --> 2a7f66a7_8738_3d47_375b_70fcaa6ac169
  8e2034b7_ceb8_963f_29fc_2ea6b50ef9b3["typing"]
  7d2ea6eb_ed7a_3052_c920_cb5cdc943964 --> 8e2034b7_ceb8_963f_29fc_2ea6b50ef9b3
  00fb336c_8832_626d_1bf9_f4f07a04d663["pydantic.py"]
  7d2ea6eb_ed7a_3052_c920_cb5cdc943964 --> 00fb336c_8832_626d_1bf9_f4f07a04d663
  75137834_4ba7_dc43_7ec5_182c05eceedf["langchain_core.exceptions"]
  7d2ea6eb_ed7a_3052_c920_cb5cdc943964 --> 75137834_4ba7_dc43_7ec5_182c05eceedf
  d758344f_537f_649e_f467_b9d7442e86df["langchain_core.messages"]
  7d2ea6eb_ed7a_3052_c920_cb5cdc943964 --> d758344f_537f_649e_f467_b9d7442e86df
  552bc7bf_c1ac_965d_e157_ee750ab1993c["langchain_core.messages.tool"]
  7d2ea6eb_ed7a_3052_c920_cb5cdc943964 --> 552bc7bf_c1ac_965d_e157_ee750ab1993c
  5d37c56a_542f_e309_4416_d58ad5f08a28["langchain_core.output_parsers.transform"]
  7d2ea6eb_ed7a_3052_c920_cb5cdc943964 --> 5d37c56a_542f_e309_4416_d58ad5f08a28
  ac2a9b92_4484_491e_1b48_ec85e71e1d58["langchain_core.outputs"]
  7d2ea6eb_ed7a_3052_c920_cb5cdc943964 --> ac2a9b92_4484_491e_1b48_ec85e71e1d58
  78c5ca66_f675_3ca1_fdb7_d5a994dcf4bf["langchain_core.utils.json"]
  7d2ea6eb_ed7a_3052_c920_cb5cdc943964 --> 78c5ca66_f675_3ca1_fdb7_d5a994dcf4bf
  1014fe78_cb2c_fde4_a624_ae899aa7ca8e["langchain_core.utils.pydantic"]
  7d2ea6eb_ed7a_3052_c920_cb5cdc943964 --> 1014fe78_cb2c_fde4_a624_ae899aa7ca8e
  style 7d2ea6eb_ed7a_3052_c920_cb5cdc943964 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

"""Parse tools for OpenAI tools output."""

import copy
import json
import logging
from json import JSONDecodeError
from typing import Annotated, Any

from pydantic import SkipValidation, ValidationError

from langchain_core.exceptions import OutputParserException
from langchain_core.messages import AIMessage, InvalidToolCall
from langchain_core.messages.tool import invalid_tool_call
from langchain_core.messages.tool import tool_call as create_tool_call
from langchain_core.output_parsers.transform import BaseCumulativeTransformOutputParser
from langchain_core.outputs import ChatGeneration, Generation
from langchain_core.utils.json import parse_partial_json
from langchain_core.utils.pydantic import (
    TypeBaseModel,
    is_pydantic_v1_subclass,
    is_pydantic_v2_subclass,
)

logger = logging.getLogger(__name__)


def parse_tool_call(
    raw_tool_call: dict[str, Any],
    *,
    partial: bool = False,
    strict: bool = False,
    return_id: bool = True,
) -> dict[str, Any] | None:
    """Parse a single tool call.

    Args:
        raw_tool_call: The raw tool call to parse.
        partial: Whether to parse partial JSON.
        strict: Whether to allow non-JSON-compliant strings.
        return_id: Whether to return the tool call id.

    Returns:
        The parsed tool call.

    Raises:
        OutputParserException: If the tool call is not valid JSON.
    """
    if "function" not in raw_tool_call:
        return None

    arguments = raw_tool_call["function"]["arguments"]

    if partial:
        try:
            function_args = parse_partial_json(arguments, strict=strict)
        except (JSONDecodeError, TypeError):  # None args raise TypeError
            return None
    # Handle None or empty string arguments for parameter-less tools
    elif not arguments:
        function_args = {}
// ... (325 more lines)

Domain

Subdomains

Dependencies

  • copy
  • json.py
  • langchain_core.exceptions
  • langchain_core.messages
  • langchain_core.messages.tool
  • langchain_core.output_parsers.transform
  • langchain_core.outputs
  • langchain_core.utils.json
  • langchain_core.utils.pydantic
  • logging
  • pydantic.py
  • typing

Frequently Asked Questions

What does openai_tools.py do?
openai_tools.py is a source file in the langchain codebase, written in python. It belongs to the OutputParsing domain, StreamingParsers subdomain.
What functions are defined in openai_tools.py?
openai_tools.py defines 3 function(s): make_invalid_tool_call, parse_tool_call, parse_tool_calls.
What does openai_tools.py depend on?
openai_tools.py imports 12 module(s): copy, json.py, langchain_core.exceptions, langchain_core.messages, langchain_core.messages.tool, langchain_core.output_parsers.transform, langchain_core.outputs, langchain_core.utils.json, and 4 more.
Where is openai_tools.py in the architecture?
openai_tools.py is located at libs/core/langchain_core/output_parsers/openai_tools.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