Skip to main content
A user message’s content can be an array of content parts, so a single request can mix text and files. There are six Input Types — Text, Image, Audio, Video, Document, and Archive — and the Guardian inspects each part whose Input Type is enabled.
{
  "messages": [{
    "role": "user",
    "content": [
      { "type": "text", "text": "Please review the attached file." },
      { "type": "image_url", "image_url": { "url": "data:image/png;base64,iVBORw0..." } }
    ]
  }],
  "processType": "input"
}

Content part types

typeInput TypeEncoding
textTextplain string in text
image_urlImageimage_url.url as a data: URI (PNG, JPG, WebP, GIF, BMP, TIFF, AVIF, HEIC)
input_audioAudioinput_audio.data (base64) + input_audio.format (wav, mp3)
fileDocument / Archivefile.file_data as a data: URI + file.filename (PDF, DOCX, XLSX, PPTX, TXT, CSV, …, ZIP)
video_urlVideovideo_url.url as a data: URI (MP4) — a Starfort extension
Document and Archive both use type: "file"; Starfort routes them to the right Input Type by the file’s actual MIME / magic-byte type, not by the type field. Encode data: URI payloads with standard base64 (+, /, =) — URL-safe base64 (-, _) is not supported.

Rules

  • A part is only inspected if its Input Type is enabled on the Guardian. Otherwise the request is rejected, or the part is skipped, depending on the Guardian’s unsupported-file handling (below).
  • In the response, each part is reported as its own input_results[] entry with a type of text / image / audio / video / document / archive, and file parts carry an identifier (filename).

Unsupported files

When a file part’s category or extension isn’t enabled on the Guardian, the Guardian’s Unsupported File Handling setting decides what happens:
  • BLOCK (default) — a single unsupported file blocks the whole request during pre-validation. The supported parts (text, allowed files) aren’t inspected either.
  • PASS — only the unsupported file part is skipped (passed through without Guardian analysis); the rest of the request is inspected normally. If every input is unsupported, the request passes with no Guardian call. Skipped files are recorded in the trace (skippedUnsupportedFiles metadata + an unsupported_file:skipped tag).
A disguised file is always blocked. Even under PASS, a file whose extension is allowed but whose real content (magic bytes) doesn’t match its declared type is blocked — the check is on actual content, not the file name.
Enable the Input Types you intend to send when you register the Guardian. The default VLM-OCR preset supports text plus a broad set of image, document, and archive formats.