diff --git a/libs/core/langchain_core/utils/function_calling.py b/libs/core/langchain_core/utils/function_calling.py index e341191d972e0..fcb199914d968 100644 --- a/libs/core/langchain_core/utils/function_calling.py +++ b/libs/core/langchain_core/utils/function_calling.py @@ -446,12 +446,6 @@ def convert_to_openai_function( raise ValueError(msg) oai_function["strict"] = strict if strict: - # As of 08/06/24, OpenAI requires that additionalProperties be supplied and - # set to False if strict is True. - # All properties layer needs 'additionalProperties=False' - oai_function["parameters"] = _recursive_set_additional_properties_false( - oai_function["parameters"] - ) # All fields must be `required` parameters = oai_function.get("parameters") if isinstance(parameters, dict): @@ -460,6 +454,13 @@ def convert_to_openai_function( parameters = dict(parameters) parameters["required"] = list(fields.keys()) oai_function["parameters"] = parameters + + # As of 08/06/24, OpenAI requires that additionalProperties be supplied and + # set to False if strict is True. + # All properties layer needs 'additionalProperties=False' + oai_function["parameters"] = _recursive_set_additional_properties_false( + oai_function["parameters"] + ) return oai_function diff --git a/libs/core/tests/unit_tests/utils/test_function_calling.py b/libs/core/tests/unit_tests/utils/test_function_calling.py index c4edce261be37..1dcdf2ef6378d 100644 --- a/libs/core/tests/unit_tests/utils/test_function_calling.py +++ b/libs/core/tests/unit_tests/utils/test_function_calling.py @@ -1168,3 +1168,14 @@ class MyModel(BaseModel): func = convert_to_openai_function(MyModel, strict=True) actual = func["parameters"]["required"] assert actual == expected + + +def test_convert_to_openai_function_strict_defaults() -> None: + class MyModel(BaseModel): + """Dummy schema.""" + + arg1: int = Field(default=3, description="foo") + arg2: str | None = Field(default=None, description="bar") + + func = convert_to_openai_function(MyModel, strict=True) + assert func["parameters"]["additionalProperties"] is False