8 · Dynamic group routing
Define a named group with levels; ask for the group name and let classification pick the member.
What it is
A type: dynamic catalog entry — a named virtual model (e.g. dynamic-1) with its own levels: {low, medium, high} map. Asking for the group name runs the same low/medium/high classifier as auto, but scoped to this group's own members instead of the global tiers: map. Pins are scoped per convID#group, escalate-only — independent of any other group's stickiness.
Why
Use this when you need more than one routing policy at once — e.g. a "support-bot" group and a "coding-agent" group, each escalating across their own set of models, rather than sharing the single global auto tiers. It's the same mechanism as auto, just named and repeatable.
Configure
- name: dynamic-1
type: dynamic
levels:
low: gpt-cheap
medium: openai/gpt-4o-mini
high: devin/claude-opus-4.8curl -i localhost:8080/v1/chat/completions \
-d '{"model":"dynamic-1","messages":[{"role":"user","content":"summarize this paragraph"}]}'
# → X-Selected-Model: gpt-cheap (classified low)Mechanics: Routing & stickiness. Classification rules: How auto decides.
How to adapt
To route a new tier to an agent, set high: devin/claude-opus-4.8 (or any catalog name — a forward model, a discovered variant, a pull-worker queue) under levels: in the dynamic group. A missing level falls back to the nearest declared one (high → medium → low, and so on), so you can declare only low/high and skip medium if you don't need a middle tier. Members are validated against the catalog at server start (after discovery), so a typo'd or not-yet-discovered name fails fast rather than 500ing on first use. Nesting one dynamic group inside another is rejected.