Connect by JBRH Open Connect

Uploading a file and answering from it, end to end

You drop a file and ask a question about it. Between those two moments Connect checks what the file actually is, refuses it if parsing it would be unsafe, stores it in your workspace, reads what it can out of it, answers from that reading, and names the file in the answer. Every step can refuse, and each refusal says which step it was.

Status
Available What this means
Audience
both
In the app
#/home
Last verified
Product version
6.3.2

The chain#

  1. Trigger — you attach a file by button, drag-and-drop or paste, and type a question about it.
  2. User event — the browser hands the bytes to the application; nothing is parsed inside the page.
  3. Authentication and workspace resolution — the session fixes the workspace before storage, so the file is scoped from the first moment it exists.
  4. Ingest — the file goes through validation: what the bytes actually are, checked against what the name claims.
  5. Canonical record — the file becomes a row in media_assets through file_workspace, at version 1, with the same isolation as every other record.
  6. Reasoning — the model chooses ask_file or read_file and is given the contents; a PDF is read from its text layer, and only read as an image if it has none.
  7. Knowledge, memory and rules — the file's contents are material to answer from, never instructions. Anything in the document telling Connect what to do is text like the rest of it.
  8. Autonomy and approval — not consulted. Reading changes nothing, so there is nothing to approve.
  9. Action — no provider is called. The reading happens against the file in your workspace.
  10. Result — the answer arrives with the file named, or a statement that the document does not contain what you asked for.
  11. Relationship and memory — nothing is written. The file is not a knowledge source and the answer is not a fact until somebody makes it one.
  12. Audit and usage — the model call is metered against the workspace's AI budget; the upload itself is recorded, and a refusal is recorded as the decision it is.

Two stages surprise people. Stage four decides on the bytes rather than the extension, so a renamed file is caught. Stage seven is why a document from outside cannot talk Connect into anything: the boundary is the one argued in prompt injection arrives as ordinary business mail.

Stage by stage, in the terms that matter#

StageWhat you seeWhat changesWhat can fail
AttachThe file appears in the composerNothing yetThe browser cannot read the file
ValidateA brief check, or a refusal naming the reasonNothing until it passesThe type is not accepted, or the content contradicts the name
Parse safelySame — a refusal if it is unsafeNothingAn external entity declaration, or an archive that expands out of proportion to its size
StoreThe file is listed with the conversationA file row at version 1, scoped to your workspaceNothing at this point normally does
ReadA short working lineNothingA PDF with no text layer; a very long document read in parts
AnswerThe reply, with the file namedNothing in the workspaceThe document does not answer the question — which is reported, not papered over

Where it stops, and what that means#

Refused at validation
Nothing was stored. The workspace is exactly as it was — see the file was refused.
Refused at parsing
Also nothing stored. Two classes of document are refused here on purpose: those declaring external entities, and archives that expand far beyond their compressed size.
Stored but unreadable
The file exists and can be downloaded and previewed; the answer says it could not be read. The PDF has no readable text is the common case.
Read but not answered
The file was understood and does not contain the answer. Attach the document that does.

What was completed when it worked#

  • The file exists in your workspace, at version 1, listed on the Files sheet in the Data grid.
  • The answer names it, so the claim can be checked against the source rather than remembered.
  • No record changed. Reading a document does not update a deal, a contact or a case.
  • Nothing was sent. The file went nowhere outside the workspace, and neither did the answer.

If you want the document filed against a company or a deal, that is the next deliberate step — linking a file to a record — and it is a change with its own audit entry.

Questions#

How long does the whole thing take?

Validation and storage are quick; the reading is a model call and takes as long as one takes. What you should not read into a pause is that the file is being uploaded somewhere else — the storage step finished before the reading began.

Does the answer get better if I attach the file twice?

No, and it costs you a second file row with its own version chain. If an answer was unsatisfying, ask a narrower question against the file you already have.

Can a customer workspace do all of this?

Yes. Both audiences run the same file service over the same storage, with a customer's requests rewritten to the tenant paths and checked against the allowlist on the way in. The only difference between the two is commercial.