Model calls image-generations_create? Use generate_image

New LLMs may emit old Sume tool names. The hosted server maps dots to underscores and documents two retired aliases that now point at new names.

5 min readSume
All posts

Use generate_image and generate_video, and remap old names in your wrapper. Sume's tools page says the live tool ids are underscore names, that the server canonicalizes . to _ on each call, and that two aliases are retired: image-generations_create became generate_image, and video-router_create became generate_video (read 2026-10-05 in the repo docs). A model that learned the old names can still emit them.

Why an agent emits an old name

Models are trained on documentation and code from earlier months. If an older Sume tool name appeared in that material, the model may produce it, especially when your prompt does not list the live tools. Dotted forms are another source: the CLI uses dotted ids such as avatars.create, and the hosted server accepts dotted aliases like tools.list.

Tool name forms and what the hosted server does, read 2026-10-05
Name the model sendsWhat happensBetter practice
tools.listCanonicalized to tools_list and worksUse the underscore id
generate_imageLive tool idUse it
image-generations_createRetired alias for generate_imageUpdate the prompt and wrapper
video-router_createRetired alias for generate_videoUpdate the prompt and wrapper
images_create / videos_createNot on hosted MCP; REST-onlyUse the Developer API

Normalize names in one place

Do not depend on the server to forgive old names. Resolve them before the call so logs and approvals show the live id. The function below applies the documented rules and runs offline.

RETIRED = {
    "image-generations_create": "generate_image",
    "video-router_create": "generate_video",
}

def live_name(name: str) -> str:
    name = name.replace(".", "_")
    return RETIRED.get(name, name)

if __name__ == "__main__":
    for n in ("tools.list", "image-generations_create",
              "video-router_create", "generate_image"):
        print(n, "->", live_name(n))

Keep the model on the live list

The best fix is upstream. Give the agent the live names from tools_list at the start of each session instead of relying on memory. Sume's tool descriptions guide the model, which is also why forcing a specific tool choice is rarely needed.

Pin an allow list of live names in your agent framework so that a stale name fails closed. A call for an unlisted tool is an error you see, not a silent substitution.

How the failure shows up

The Sume docs say the dotted aliases still work and that retired aliases exist, but they do not promise that every old name resolves forever. Treat the alias table as a migration aid. A model that emits a name you do not recognize can produce a tool error in the agent loop, and the model may then retry with a variant and spend turns.

Count how often the normalizer rewrites a name. A rising count after a model upgrade is a sign that the prompt, not the server, needs fixing.

Checklist

Run through this list when a new model version joins your agent.

  • Replay a prompt that asks for an image and a clip, and log the tool names it emits.
  • Add every retired alias to the normalizer, and alert when one is hit.
  • Keep idempotency_key on paid calls whatever the name used.

Sources

Related posts

More in Developers

All Developers posts

Written by Sume