What is the proper way to adjust the signature of a function basing on actual caller types? I have two ideas: 1. using get_function_signature_hook, manually inferring all types from FunctionSigContext.args list 2. using get_function_hook, calling `FunctionContext.api.fail` every time when arguments are invalid Are there any better ways?