跳到主要内容

Model Capabilities

Suzent keeps a registry of per-model metadata — context window, capability flags (vision, function calling, reasoning, prompt caching), and pricing. This data drives context compression, role routing, cost estimation, and what the UI shows for each model.

The registry is loaded from three layers, each overlaying the previous one:

LayerPathTracked in git?Written by
1. Shipped defaultsconfig/capabilities/{provider}.jsonYesMaintainers (curated)
2. Local overlay<data dir>/capabilities/{provider}.jsonNoRuntime discovery
3. Global overridesconfig/model_capabilities.jsonYesMaintainers (applied last)

<data dir> defaults to ~/.suzent (override with SUZENT_DATA_DIR).

For a model ID present in more than one layer, the shipped curated entry wins over the local overlay — the overlay only supplies models that aren't shipped. The global override file is applied last and takes precedence over everything.

Why the overlay exists

The app discovers models at runtime — when you click FETCH for a provider, and via a periodic LiteLLM sync that refreshes context windows and pricing. Those writes go to the local overlay, never to the tracked config/capabilities/ files.

This keeps the repo clean: suzent update runs git pull, and if runtime discovery had been writing into tracked files, every update would conflict. With the overlay, discovered models persist across updates in your data directory while the shipped files stay pristine. (For safety, suzent update also discards any stale local edits under config/capabilities/ before pulling.)

The overlay is auto-generated and safe to delete; it will be repopulated on the next discovery.

Developer mode: writing to the repo

If you maintain Suzent and want newly discovered models to land in the tracked files so you can commit them, start the backend in developer mode:

suzent start --dev      # desktop dev environment
suzent serve --dev # headless backend only

In dev mode the CLI sets SUZENT_CAPABILITIES_TO_REPO=1, which redirects all runtime capability writes (FETCH discovery, LiteLLM sync, stale-model pruning) into config/capabilities/ instead of the overlay. Run a provider FETCH or let the sync run, review the diff, then commit the curated additions.

Without --dev (the default for normal use and production builds), writes go to the overlay and the repo is never touched.

Adding a model by hand

To curate a model permanently, add it to its provider file in config/capabilities/. The minimal entry is just a mode; fill in the rest to improve context-window and cost accuracy:

{
"models": {
"anthropic/claude-opus-4-8": {
"mode": "chat",
"max_input_tokens": 200000,
"max_output_tokens": 32000,
"supports_vision": true,
"supports_function_calling": true,
"supports_reasoning": true,
"supports_prompt_caching": true,
"supports_response_schema": true
}
}
}

mode is one of chat, embedding, image_generation, or tts. Keys starting with _ (e.g. _doc) are treated as comments and ignored.