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.

6 min readSume
All posts

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 fields to check after the pick, Sume docs read 2026-10-13
Catalog fieldCheck
idThe picked id is in the list
supported_durationsYour length is in the array
supported_resolutionsYour resolution is in the array
supported_aspect_ratiosYour ratio is in the array
pricing_skusSume'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

All Developers posts

Written by Sume