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.

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.
| Name the model sends | What happens | Better practice |
|---|---|---|
| tools.list | Canonicalized to tools_list and works | Use the underscore id |
| generate_image | Live tool id | Use it |
| image-generations_create | Retired alias for generate_image | Update the prompt and wrapper |
| video-router_create | Retired alias for generate_video | Update the prompt and wrapper |
| images_create / videos_create | Not on hosted MCP; REST-only | Use 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_keyon paid calls whatever the name used.
Sources
Related posts
More in Developers
- 'model_params has an empty allowlist': omit it or send {}
Video Router v1 has no pass-through knobs. model_params with any key gets a 400; {} is fine. /v1/videos refuses provider.options the same way. What to change.
- Move an edit call from /v1/image-1.0/generate to POST /v1/images
Field map for moving an image edit call from the retiring Image 1.0 URL to POST /v1/images: image_urls becomes input_references, num_images becomes n.
- Move from polling to Sume webhooks in three steps, keeping the poll
Add webhook_url to submits, verify sume-v1 signatures, dedupe on job_id, and keep a slow poll for canceled and skipped runs. Roll it out one route at a time.
- mp3 or wav for an AI voiceover? What each allows on Sume TTS
Sume TTS defaults to mp3 at 44.1 kHz. Choose wav for slicing and exact joins, mu-law at 8 kHz for phones, and mp3 for delivery: what each container permits.
Written by Sume