Imagine
A picture prompt does not land on a text model.
Media is its own type. vision-1 receives the prompt. If you also ask for a caption, write-1 gets that part alone.
Media lane
The picture waits for the type.
A media prompt receives a type and is checked against the allow-list before a lane is chosen. Image and video are both media, so both stay on vision-1. Add a caption and write-1 receives a second part. Send a patch and this lane is not selected.
The drawing is made in the browser. It does not call vision-1.
Route<Prompt, Media> · vision-1 · image
One contract
Stills and video share the vision lane.
Both are media. The type stays media, the contract stays Route<Prompt, Media>, and the lane stays vision-1. A prompt that says the camera moves does not open a speech contract, and it does not fall through to a text model.
vision-1 · Route<Prompt, Media>
A second hop
A caption is a second, typed call.
Ask for the still and also for words under it. vision-1 keeps the media part. write-1 receives the caption as prose. The caption is not burned into the pixels, and the media call does not inherit a prose contract.
A labeled still, ready to place.
write-1
A labeled still, ready to place.
Refusal
The media call never inherits another contract.
A diff belongs on code-1. If that is the request, vision-1 is not selected. If a team removes vision-1 from the allow-list, a pure media request returns pending. Nothing is rerouted to write-1 to describe the picture instead.
vision-1
code-1The diff is the hop. The picture is not described instead.
Separator
Put a typed route in front of the models you already call.
Decision
explanation
reason-1
4.2 ms