in src/smolagents/_function_type_hints_utils.py [0:0]
def _convert_type_hints_to_json_schema(func: Callable, error_on_missing_type_hints: bool = True) -> dict:
type_hints = get_type_hints(func)
signature = inspect.signature(func)
properties = {}
for param_name, param_type in type_hints.items():
properties[param_name] = _parse_type_hint(param_type)
required = []
for param_name, param in signature.parameters.items():
if param.annotation == inspect.Parameter.empty and error_on_missing_type_hints:
raise TypeHintParsingException(f"Argument {param.name} is missing a type hint in function {func.__name__}")
if param_name not in properties:
properties[param_name] = {}
if param.default == inspect.Parameter.empty:
required.append(param_name)
else:
properties[param_name]["nullable"] = True
# Return: multi‐type union -> treat as any
if (
"return" in properties
and (return_type := properties["return"].get("type"))
and not isinstance(return_type, str)
):
properties["return"]["type"] = "any"
schema = {"type": "object", "properties": properties}
if required:
schema["required"] = required
return schema