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 = (
Domain
Subdomains
Calls
Called By
Source
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