Home / Function/ convert_to_openai_function() — langchain Function Reference

convert_to_openai_function() — langchain Function Reference

Architecture documentation for the convert_to_openai_function() function in function_calling.py from the langchain codebase.

Entity Profile

Dependency Diagram

graph TD
  8dd6ec0a_3761_ea6f_0c59_c034b831f0df["convert_to_openai_function()"]
  344b2838_87a8_d5dc_b550_fdb443ff6c4e["function_calling.py"]
  8dd6ec0a_3761_ea6f_0c59_c034b831f0df -->|defined in| 344b2838_87a8_d5dc_b550_fdb443ff6c4e
  985b3428_1598_3c9f_dd21_7949746dfdbf["convert_to_openai_tool()"]
  985b3428_1598_3c9f_dd21_7949746dfdbf -->|calls| 8dd6ec0a_3761_ea6f_0c59_c034b831f0df
  ef4a01c9_4cc0_5ea1_2379_249d4dc402ef["is_basemodel_subclass()"]
  8dd6ec0a_3761_ea6f_0c59_c034b831f0df -->|calls| ef4a01c9_4cc0_5ea1_2379_249d4dc402ef
  ea8becf8_0367_1814_460c_decdc8cfa61d["_convert_pydantic_to_openai_function()"]
  8dd6ec0a_3761_ea6f_0c59_c034b831f0df -->|calls| ea8becf8_0367_1814_460c_decdc8cfa61d
  afe6c584_4f78_9f27_a452_c0af79a40037["_convert_typed_dict_to_openai_function()"]
  8dd6ec0a_3761_ea6f_0c59_c034b831f0df -->|calls| afe6c584_4f78_9f27_a452_c0af79a40037
  4776d470_7c16_396f_5ac7_df8d1e1eeb46["_format_tool_to_openai_function()"]
  8dd6ec0a_3761_ea6f_0c59_c034b831f0df -->|calls| 4776d470_7c16_396f_5ac7_df8d1e1eeb46
  bec7d5d3_e1d0_0526_a4dc_7a24d93ddc26["_convert_python_function_to_openai_function()"]
  8dd6ec0a_3761_ea6f_0c59_c034b831f0df -->|calls| bec7d5d3_e1d0_0526_a4dc_7a24d93ddc26
  93b93d40_4003_ab0c_4132_2e7d4ae7d2e9["_recursive_set_additional_properties_false()"]
  8dd6ec0a_3761_ea6f_0c59_c034b831f0df -->|calls| 93b93d40_4003_ab0c_4132_2e7d4ae7d2e9
  style 8dd6ec0a_3761_ea6f_0c59_c034b831f0df fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

libs/core/langchain_core/utils/function_calling.py lines 361–480

def convert_to_openai_function(
    function: Mapping[str, Any] | type | Callable | BaseTool,
    *,
    strict: bool | None = None,
) -> dict[str, Any]:
    """Convert a raw function/class to an OpenAI function.

    Args:
        function: A dictionary, Pydantic `BaseModel` class, `TypedDict` class, a
            LangChain `Tool` object, or a Python function.

            If a dictionary is passed in, it is assumed to already be a valid OpenAI
            function, a JSON schema with top-level `title` key specified, an Anthropic
            format tool, or an Amazon Bedrock Converse format tool.
        strict: If `True`, model output is guaranteed to exactly match the JSON Schema
            provided in the function definition.

            If `None`, `strict` argument will not be included in function definition.

    Returns:
        A dict version of the passed in function which is compatible with the OpenAI
            function-calling API.

    Raises:
        ValueError: If function is not in a supported format.

    !!! warning "Behavior changed in `langchain-core` 0.3.16"

        `description` and `parameters` keys are now optional. Only `name` is
        required and guaranteed to be part of the output.
    """
    # an Anthropic format tool
    if isinstance(function, dict) and all(
        k in function for k in ("name", "input_schema")
    ):
        oai_function = {
            "name": function["name"],
            "parameters": function["input_schema"],
        }
        if "description" in function:
            oai_function["description"] = function["description"]
    # an Amazon Bedrock Converse format tool
    elif isinstance(function, dict) and "toolSpec" in function:
        oai_function = {
            "name": function["toolSpec"]["name"],
            "parameters": function["toolSpec"]["inputSchema"]["json"],
        }
        if "description" in function["toolSpec"]:
            oai_function["description"] = function["toolSpec"]["description"]
    # already in OpenAI function format
    elif isinstance(function, dict) and "name" in function:
        oai_function = {
            k: v
            for k, v in function.items()
            if k in {"name", "description", "parameters", "strict"}
        }
    # a JSON schema with title and description
    elif isinstance(function, dict) and "title" in function:
        function_copy = function.copy()
        oai_function = {"name": function_copy.pop("title")}
        if "description" in function_copy:
            oai_function["description"] = function_copy.pop("description")
        if function_copy and "properties" in function_copy:
            oai_function["parameters"] = function_copy
    elif isinstance(function, type) and is_basemodel_subclass(function):
        oai_function = cast("dict", _convert_pydantic_to_openai_function(function))
    elif is_typeddict(function):
        oai_function = cast(
            "dict", _convert_typed_dict_to_openai_function(cast("type", function))
        )
    elif isinstance(function, langchain_core.tools.base.BaseTool):
        oai_function = cast("dict", _format_tool_to_openai_function(function))
    elif callable(function):
        oai_function = cast(
            "dict", _convert_python_function_to_openai_function(function)
        )
    else:
        if isinstance(function, dict) and (
            "type" in function or "properties" in function
        ):
            msg = (

Subdomains

Frequently Asked Questions

What does convert_to_openai_function() do?
convert_to_openai_function() is a function in the langchain codebase, defined in libs/core/langchain_core/utils/function_calling.py.
Where is convert_to_openai_function() defined?
convert_to_openai_function() is defined in libs/core/langchain_core/utils/function_calling.py at line 361.
What does convert_to_openai_function() call?
convert_to_openai_function() calls 6 function(s): _convert_pydantic_to_openai_function, _convert_python_function_to_openai_function, _convert_typed_dict_to_openai_function, _format_tool_to_openai_function, _recursive_set_additional_properties_false, is_basemodel_subclass.
What calls convert_to_openai_function()?
convert_to_openai_function() is called by 1 function(s): convert_to_openai_tool.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free