Decision-1 picks a video model; check it against Sume's catalog
Let a choice question pick among three model ids, then validate the pick against GET /v1/videos/models and fall back to sume/auto when it is missing.

You can let Microsoft-Decision-1 choose between a few Sume video model ids, but the answer is only a suggestion until it passes Sume's own catalog. Ask a choice question whose options are model ids, then check the pick against GET /v1/videos/models; if the id is absent or cannot do the length you need, send model: "sume/auto" and let Sume route. The catalog, not the decision model, is the source of truth for what a model accepts.
Why the catalog check is not optional
The Videos API says the catalog controls validation: a resolution, aspect ratio, duration or reference type that the model does not advertise returns a 400, and the field is never silently dropped. Some rows are also conditional. The Video Router docs note that higgsfield-genjutsu appears only when its provider is configured, and the veo-3.1 rows only where Google Cloud serves them. A decision model cannot know which rows your environment lists today.
| Catalog field | Check |
|---|---|
| id | The picked id is in the list |
| supported_durations | Your length is in the array |
| supported_resolutions | Your resolution is in the array |
| supported_aspect_ratios | Your ratio is in the array |
| pricing_skus | Sume's billable rate, provider list x 1.25 per the docs |
The check
Set SUME_API_KEY. The function returns the id to put in model.
import json, os, urllib.request
def pick_model(picked: str, seconds: int, resolution: str) -> str:
req = urllib.request.Request(
"https://api.sume.com/v1/videos/models",
headers={"x-api-key": os.environ["SUME_API_KEY"]})
with urllib.request.urlopen(req, timeout=30) as resp:
catalog = {m["id"]: m for m in json.load(resp)["data"]}
row = catalog.get(picked)
if (row and seconds in row["supported_durations"]
and resolution in row["supported_resolutions"]):
return picked
return "sume/auto"
if __name__ == "__main__":
print(pick_model("seedance-2.5", 8, "720p"))When to skip the decision model
If you have no strong preference, skip the choice question and send sume/auto. Sume documents it as a pure function of the normalized request plus the catalog version, so an idempotent replay gets the same route and price. Use a named id when you are comparing models, matching a brand look, or need a feature only one row has. Note that sume/auto is not listed in the catalog because it is not a model, and a named id means the same id on every retry: keep it in your idempotency key's source data, not in the model's answer.
Sources
Related posts
More in Developers
- Microsoft-Decision-1 returns 422 or 404: deployment name and endpoint
Decision-1 wants your deployment name in `model`, not the model name. A 422 means a bad name or question; a 404 means a wrong endpoint or path.
- Microsoft-Decision-1: gate a text brief before a paid Sume video job
Send the brief to Decision-1 as a choice question, render only on 'render', and fail closed on any error. Python sample using the Foundry systemone path.
- Decision-1 score question: order a Sume render queue by urgency
A Decision-1 score is a probability-weighted index, good for ordering but not an absolute grade. Sort briefs with it, then respect Sume's queue limits.
- Decision-1: judge a pending generate_video call as JSON state
Decision-1 accepts JSON as state. Pass the tool arguments of a pending Sume call and ask one noul question; keep keys and signed URLs out of the state.
Written by Sume