diff --git a/app/MindWork AI Studio/Chat/FileAttachment.cs b/app/MindWork AI Studio/Chat/FileAttachment.cs
index 5b14f2e6..7f70ace3 100644
--- a/app/MindWork AI Studio/Chat/FileAttachment.cs
+++ b/app/MindWork AI Studio/Chat/FileAttachment.cs
@@ -1,6 +1,57 @@
+using AIStudio.Tools.Rust;
+
namespace AIStudio.Chat;
///
/// Represents an immutable file attachment with details about its type, name, path, and size.
///
-public readonly record struct FileAttachment(FileAttachmentType Type, string FileName, string FilePath, long FileSize);
\ No newline at end of file
+public readonly record struct FileAttachment(FileAttachmentType Type, string FileName, string FilePath, long FileSizeBytes)
+{
+ ///
+ /// Gets a value indicating whether the file still exists on the file system.`
+ ///
+ public bool Exists => File.Exists(this.FilePath);
+
+ ///
+ /// Creates a FileAttachment from a file path by automatically determining the type,
+ /// extracting the filename, and reading the file size.
+ ///
+ /// The full path to the file.
+ /// A FileAttachment instance with populated properties.
+ public static FileAttachment FromPath(string filePath)
+ {
+ var fileName = Path.GetFileName(filePath);
+ var fileSize = File.Exists(filePath) ? new FileInfo(filePath).Length : 0;
+ var type = DetermineFileType(filePath);
+
+ return new FileAttachment(type, fileName, filePath, fileSize);
+ }
+
+ ///
+ /// Determines the file attachment type based on the file extension.
+ /// Uses centrally defined file type filters from .
+ ///
+ /// The file path to analyze.
+ /// The corresponding FileAttachmentType.
+ private static FileAttachmentType DetermineFileType(string filePath)
+ {
+ var extension = Path.GetExtension(filePath).TrimStart('.').ToLowerInvariant();
+
+ // Check if it's an image file:
+ if (FileTypeFilter.AllImages.FilterExtensions.Contains(extension))
+ return FileAttachmentType.IMAGE;
+
+ // Check if it's an audio file:
+ if (FileTypeFilter.AllAudio.FilterExtensions.Contains(extension))
+ return FileAttachmentType.AUDIO;
+
+ // Check if it's an allowed document file (PDF, Text, or Office):
+ if (FileTypeFilter.PDF.FilterExtensions.Contains(extension) ||
+ FileTypeFilter.Text.FilterExtensions.Contains(extension) ||
+ FileTypeFilter.AllOffice.FilterExtensions.Contains(extension))
+ return FileAttachmentType.DOCUMENT;
+
+ // All other file types are forbidden:
+ return FileAttachmentType.FORBIDDEN;
+ }
+}
\ No newline at end of file