Problem
A file can upload successfully without all of its contents being readable by the assistant. People need to know what was processed before relying on an answer.
Solution
Show attached files near the message field. Each item should display its name, type, and status, with a way to remove it before sending.
Distinguish uploading from processing and ready to use. Explain problems such as unreadable scanned text or spreadsheet formulas that were not imported. If only part of a file was used, say which part.
Make clear whether attachments remain available for follow-up questions. Explain where files are sent and how long they are kept, with more detail available when needed.
Use when
People can attach files, images, or documents to a request.
Don’t use when
The context comes from the product rather than the person, which is scoped context and needs a different treatment. A tray implies something was added and can be removed, and applying it to the ambient contents of a workspace overstates the viewer’s control.
Trade-offs
File details take space near the message field, but hiding processing limits can make a partial answer look complete. Keeping attachments available helps with follow-up questions and requires clear controls for removing them.
Checklist
- Does a chip distinguish uploaded from extracted from ready?
- What does a scanned PDF with no text layer look like here?
- If the document exceeds the context budget, does the viewer learn how much was used?
- Can an attachment be removed before send, and after?
- Is it clear whether the file stays in context on later turns?
- Where does the file go, how long does it live, and is that said at attach time?
- What happens when extraction fails, and is that distinguishable from an empty document?
- Does the chip name the file in a way that survives two files with similar names?
- Is the drop target big enough to hit with a dragged file?
- Can a screen reader user tell what’s attached and remove it?
Compare
ChatGPT puts the chip in the composer and keeps the file available for later turns, so the attachment behaves like conversation state rather than a one-shot payload. Claude separates a per-message attachment from project-level knowledge, which makes the lifetime question explicit in the interface instead of leaving it to be inferred. Gemini reaches into Drive rather than asking for an upload, so the attached thing is a live reference to a document that can change underneath the conversation. Notion replaces attachment with an @-mention of a page, so context is addressed by name in the prompt text itself and there is no tray at all.
Related
Composer holds the message and attachments. Scoped context covers material selected from within the app. Context meter shows how much room attachments use.
Source list identifies material used in an answer. Generation error handles failures that prevent an answer.