---
title: "Image Support: route requirements and budgets"
description: "Explains route requirements and per-request budgets for carrying images in Library Tool Results, and when Duale AI replaces an image with a note."
lang: en
status: public-preview
lastUpdated: 2026-11-05
url: https://dev.duale.ai/en/docs/model-routing/images
---

## AI-generated summary

This page covers how images in Library Tool Results reach the model, route image capabilities, profile limits, replacement conditions, safety check behavior, and restoration.

- Image delivery checks and route image capability requirements.
- Image profile limits and provider-type ceilings.
- Conditions that replace an image with a note.
- Safety check behavior when reading images.
- Restoring a dropped image.

Summaries were generated by AI.

---

Image Support covers images inside Library Tool Results: the images of a Library document that a Task reads. A request
cannot attach an image directly as model input. Use this reference to configure a route that can carry images and to
predict when the model receives a short note instead of an image.

## What decides whether an image reaches the model

Duale AI checks each image again for every provider request that would carry it.

```mermaid
flowchart TB
    accTitle: What decides whether an image reaches the model
    accDescr {
      An image inside a Library Tool Result reaches the model only when every check passes for that provider request. The Agent Identity of the Task must still be able to read the Library, and the document must still exist. The selected route must have an Image Support profile and a provider type that carries images. The image must fit the limits for one image and for the whole request. If a check fails, the model receives a short note instead, and text from the document stays available unless a safety check withholds the whole result.
    }
    Image[Image in a Library Tool Result]
    Access{Agent Identity can still read it, and the document exists?}
    Route{Route has Image Support and a provider type that carries images?}
    Limits{Fits the limits for one image and for the request?}
    Sent[Image sent with this provider request]
    Placeholder[Short note in place of the image]
    Image --> Access
    Access -- Yes --> Route
    Access -- No --> Placeholder
    Route -- Yes --> Limits
    Route -- No --> Placeholder
    Limits -- Yes --> Sent
    Limits -- No --> Placeholder
```

## Check whether the route can carry an image

Both checks must pass before an image can reach the model:

- The route carries an **Image Support** profile. Absent means no image is ever sent to that model.
- The provider type can carry an image inside a Tool Result. Anthropic, AWS Bedrock, OpenAI Responses, and Mistral can.
  Other provider types, including Microsoft Foundry and DashScope Qwen, send no image bytes.

On Mistral, enable the profile only after verifying that the selected endpoint accepts Tool Result images.

These conditions also affect route choice. When at least one route can carry at least one image,
Duale AI uses only routes that can carry at least one. When no route can, all routes remain available
and every image is replaced by a note.

The **Image Support** form appears on every provider type. You can therefore save a profile on a route
that cannot receive an image. A saved profile alone does not prove that the provider type carries images.

Every provider request carries its included images in full. Duale AI stores no file at the provider; see
[Data protection](https://dev.duale.ai/en/docs/security/data-protection.md#external-data-paths) for the provider-retention boundary.

## Set the image profile and budget

The profile needs three values: images per request, bytes per image, and the largest width or height in pixels. The
form accepts 1 to 1,000 images, up to 128 MiB per image, and up to 65,535 px. Enter limits verified on the selected
endpoint. The ceilings below can tighten those values.

Duale AI applies its own ceilings on top of your profile. A ceiling can only tighten your values, never raise them:

| Provider type    | Images per request | Bytes per image   | Long-edge rule                               | Request ceiling  |
| ---------------- | ------------------ | ----------------- | -------------------------------------------- | ---------------- |
| Anthropic        | 100                | 7,500,000         | Above 20 images, the limit drops to 2,000 px | 28,000,000 bytes |
| AWS Bedrock      | 20                 | 3,750,000         | None                                         | 20,000,000 bytes |
| OpenAI Responses | Your profile only  | Your profile only | None                                         | None             |
| Mistral          | Your profile only  | Your profile only | None                                         | None             |

A **Request ceiling** counts the whole provider request, not only its images. A long Task history leaves less room for
images in the same request.

One more limit applies to every provider request, on every provider type, and is not in the table: about 42.9 MiB of
image files in one request. Above it, Duale AI replaces the oldest images with a short note until the request fits,
keeping the newest. On OpenAI
Responses and Mistral routes, use your profile to express the remaining limits of the selected endpoint.

An OpenAI Responses route also carries **Image Detail**. `low` requests low detail; `auto` and `high`
both request high detail. The selected endpoint determines image processing and billed tokens.

Budget image workloads using measured input-token usage and configured prices. Duale AI estimates image tokens to fit
each request into the context window. Usage that the provider bills can differ, so validate it with representative
images on the selected endpoint.

## When an image is replaced by a note

Duale AI replaces an image with a short note and can still return a successful answer from text in these cases:

- The selected route cannot carry images: every image is replaced.
- One image exceeds a byte or dimension limit for one image, or cannot fit the request by itself: that image is
  replaced.
- The request exceeds the image count, the request ceiling of the provider type, or the total image limit: the
  oldest images are replaced, keeping the newest.
- The source document no longer exists, or its image reference or bytes are permanently invalid or corrupt: that image
  is replaced.
- The Agent Identity of the Task can no longer read the Library that holds the image, including for an image from
  earlier work or a parent Task: that image is replaced. The
  [Grant rule](https://dev.duale.ai/en/docs/libraries/access.md#a-grant-change-applies-to-images-already-in-use) describes this check.

Above 20 images on an Anthropic route, the same oldest-first rule applies. While any image exceeds the tightened
2,000 px long edge, Duale AI replaces the oldest images, whatever their size, until 20 remain or none exceeds that edge.
It never makes an image smaller.

Every route receives the same short note in place of a removed image, in every provider request where the image is
unavailable. Text derived from that image, such as recognized characters or a caption, stays, as does text extracted
from the document itself. Each provider request makes its own image selection, so an image replaced in one request can
still reach a later request on an image-capable route, except in the cases [a safety check
decides](#when-a-safety-check-reads-the-images). Replacing an image does not rewrite the stored Task history.

A temporary failure to read an image is not a replacement. Duale AI retries it like a
[provider outage](https://dev.duale.ai/en/docs/model-routing/contract-and-limits.md#keep-a-task-through-a-provider-outage).

## When a safety check reads the images

Duale AI's safety check reads each new Library Tool Result with its images. Two outcomes differ from the notes above:

- When a limit of the route that runs the check drops one of the result's images, the check cannot read the result
  whole. Duale AI withholds the whole result, text included: later model calls of the Task and its continuations read
  a notice in its place, and the Task continues without that document. Keep the images of your documents within the
  limits of every image-capable route in your pool, or read the document at a lower resolution.
- When no route in your pool can carry images, or an image cannot be read or cannot fit any request by itself, the
  check reads the result's text alone. The model keeps that text, and no later model call of that Task or its
  continuations receives the image, even after you enable an image-capable route. To use the image, read the document
  again in a new Task.

## Restore a dropped image

Ask for a value that only the image carries, and check it against a source outside the model. To restore a dropped
image, bring it under the limits: read the document at a lower resolution, or split a document that exceeds the count
or request ceiling across several requests.

## Related content

- [Model routing: route selection and configuration](https://dev.duale.ai/en/docs/model-routing.md)
- [Procurement: every supplier, invoice and bid checked](https://dev.duale.ai/en/use-cases/procurement.md)
- [Tools troubleshooting: catalog, calls, recovery](https://dev.duale.ai/en/docs/tools/troubleshooting.md)
- [Manage Libraries: create, upload, and verify ingestion](https://dev.duale.ai/en/docs/sdk/manage-libraries.md)
- [AI agents for R&D, every claim sourced before your review](https://dev.duale.ai/en/use-cases/research-and-development.md)
- [Library security: encryption, checks, deletion](https://dev.duale.ai/en/docs/libraries/security.md)

---

## Sitemap

See the full [Markdown sitemap](https://dev.duale.ai/sitemap.md) for all pages.
