Skip to main content
Send the image the way your model provider expects and keep the call inside a trace. There is no upload step and no extra API call: LangWatch reads the image out of the messages at ingestion, stores it, and leaves a reference in its place.

Send the image with the model call

The examples below use setupObservability(). Read Integration Guide first if you have not set that up yet.

Vercel AI SDK

Put the image in a file part inside the user message. experimental_telemetry turns tracing on for the call.

OpenAI SDK

Put the image in an image_url part, as a data URL.

Image shapes LangWatch understands

Send any of these and the picture is captured. The list covers the shapes the major providers and agent frameworks produce. Always set the media type. Without one, LangWatch leaves the bytes inline in the trace instead of storing them, because it cannot serve them back as a picture.

What happens to the bytes

LangWatch moves the image out of the span at ingestion. The bytes go into content-addressed object storage and the message part becomes a /api/files/<projectId>/<id> reference, around 60 characters where the base64 was. Storage is addressed by SHA-256, so identical bytes are stored once. For example, the same picture sent on ten traces costs one stored object. On read, LangWatch serves the original media type for images, audio, video and PDF files. Anything else is served as a download.

Where the image appears

The trace list draws a thumbnail next to the input preview, so you can spot a run with a picture without opening it.
LangWatch trace list with image thumbnails on the input previews

Trace list rows showing image thumbnails next to the input text, and a paperclip on the row whose attachment is a document

Open the trace and the Summary tab shows the picture inline under the question. The Conversation tab shows it in the message it belongs to, and the Trace tab shows the full message payload.
LangWatch trace drawer showing a captured image below the input question

The trace drawer Summary tab, with the captured picture rendered inline below the input text and the model answer below it