def check_method()

in utils/check_inference_input_params.py [0:0]


def check_method(method_name: str, method: Any):
    input_type_name = "".join(part.capitalize() for part in method_name.split("_")) + "Input"
    if not hasattr(types, input_type_name):
        return [f"Missing input type for method {method_name}"]

    input_type = getattr(types, input_type_name)
    docstring = method.__doc__

    if method_name == "chat_completion":
        # Special case for chat_completion
        parameters_type = input_type
    else:
        parameters_field = input_type.__dataclass_fields__.get("parameters", None)
        if parameters_field is None:
            return [f"Missing 'parameters' field for type {input_type}"]

        parameters_type = get_args(parameters_field.type)[0]
        if not is_dataclass(parameters_type):
            return [f"'parameters' field is not a dataclass for type {input_type} ({parameters_type})"]

    # For each expected parameter, check it is defined
    logs = []
    method_params = inspect.signature(method).parameters
    for param_name in parameters_type.__dataclass_fields__:
        if param_name in PARAMETERS_TO_SKIP[method_name]:
            continue
        if param_name not in method_params:
            logs.append(f"Missing parameter {param_name} in method signature")

    # Check parameter is documented in docstring
    for param_name in method_params:
        if param_name in UNDOCUMENTED_PARAMETERS:
            continue
        if param_name in PARAMETERS_TO_SKIP[method_name]:
            continue
        if f"            {param_name} (" not in docstring:
            logs.append(f"Parameter {param_name} is not documented")

    return logs