diff --git a/libs/core/langchain_core/utils/function_calling.py b/libs/core/langchain_core/utils/function_calling.py index ead26d66aa8..932b329f870 100644 --- a/libs/core/langchain_core/utils/function_calling.py +++ b/libs/core/langchain_core/utils/function_calling.py @@ -203,9 +203,9 @@ def _get_python_function_required_args(function: Callable) -> List[str]: is_function_type = isinstance(function, FunctionType) is_method_type = isinstance(function, MethodType) - if is_function_type and required[0] == "self": + if required and is_function_type and required[0] == "self": required = required[1:] - elif is_method_type and required[0] == "cls": + elif required and is_method_type and required[0] == "cls": required = required[1:] return required 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 1f818fe6bae..9973d972208 100644 --- a/libs/core/tests/unit_tests/utils/test_function_calling.py +++ b/libs/core/tests/unit_tests/utils/test_function_calling.py @@ -146,6 +146,16 @@ def test_function_optional_param() -> None: assert set(req) == {"b"} +def test_function_no_params() -> None: + def nullary_function() -> None: + """nullary function""" + pass + + func = convert_to_openai_function(nullary_function) + req = func["parameters"]["required"] + assert not req + + class FakeCall(BaseModel): data: str