```diff
--- test_files/403-original.txt	2025-03-07 19:06:53
+++ test_files/403-modified.txt	2025-03-07 19:06:53
@@ -1,6 +1,7 @@
 from __future__ import annotations
 
 import hashlib
+import os
 import typing as t
 from pathlib import Path
 
@@ -8,7 +9,11 @@
 import typing_extensions as te
 from pydantic import BaseModel, ConfigDict, Field
 
-from composio.exceptions import ComposioSDKError
+from composio.exceptions import (
+    ErrorDownloadingFile,
+    ErrorUploadingFile,
+    SDKFileNotFoundError,
+)
 from composio.utils import mimetypes
 
 
@@ -52,10 +57,23 @@
         action: str,
         app: str,
     ) -> te.Self:
+
         file = Path(file)
         if not file.exists():
-            raise ComposioSDKError(f"File not found: {file}")
+            raise SDKFileNotFoundError(
+                f"File not found: {file}. Please provide a valid file path."
+            )
 
+        if not file.is_file():
+            raise SDKFileNotFoundError(
+                f"Not a file: {file}. Please provide a valid file path."
+            )
+
+        if not os.access(file, os.R_OK):
+            raise SDKFileNotFoundError(
+                f"File not readable: {file}. Please check the file permissions."
+            )
+
         mimetype = mimetypes.guess(file=file)
         s3meta = client.actions.create_file_upload(
             app=app,
@@ -64,8 +82,8 @@
             mimetype=mimetype,
             md5=get_md5(file=file),
         )
-        if not upload(url=s3meta.url, file=file):
-            raise ComposioSDKError(f"Error uploading file: {file}")
+        if not s3meta.exists and not upload(url=s3meta.url, file=file):
+            raise ErrorUploadingFile(f"Error uploading file: {file}")
 
         return cls(
             name=file.name,
@@ -86,7 +104,7 @@
         outdir.mkdir(exist_ok=True, parents=True)
         response = requests.get(url=self.s3url, stream=True)
         if response.status_code != 200:
-            raise ComposioSDKError(f"Error downloading file: {self.s3url}")
+            raise ErrorDownloadingFile(f"Error downloading file: {self.s3url}")
 
         with outfile.open("wb") as fd:
             for chunk in response.iter_content(chunk_size=chunk_size):
```
