fix: use File.validate() for File-typed inputs, Path.validate() for Path-typed
The coerce_url_strings function now introspects the predict/train function's
type annotations to distinguish File vs Path parameters. File-typed inputs
get File.validate() which returns an IO-like URLFile, while Path-typed inputs
get Path.validate() which returns a URLPath for download. Previously all URL
strings were coerced via Path.validate(), causing 'Path object has no attribute
read' errors for File inputs.