Helpers on another model, chosen by logic rather than by the model

A helper still runs on the chat's own model by default. Other models are
designated per main model -- offered to it, or by hand only -- by the
instance or, with helpers.designate, by a person. subagent_run gains a
model argument whose enum is exactly the candidates that passed two
checks: capacity (a model that serves one request at a time cannot be
its own helper; a connection that holds one model at a time cannot serve
a helper on another of its models) and the model rules. A helper on
another model takes that model's own effort and data group. The composer
gains a Helpers picker; the model page, the connection form and Settings
gain their switches and lists.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-09-29 17:37:53 +00:00
co-authored by Claude Opus 5.5
parent c27fe47d4d
commit 216e3a20d1
24 changed files with 1385 additions and 48 deletions
@@ -121,6 +121,15 @@
</p>
</div>
<div class="field">
<label class="checkbox">
<input type="checkbox" name="one_model_at_a_time" value="true"
{{ 'checked' if connection.one_model_at_a_time }}>
<span>{{ t("Holds one model at a time") }}</span>
</label>
<p class="field__hint">{{ t("Tick this for llama-swap in front of one GPU, or anything else that unloads one model to serve another. A model here may then be its own helper, but never send a helper to another model on this connection: loading it would unload the model whose reply is waiting.") }}</p>
</div>
<div class="field">
<label class="checkbox">
<input type="checkbox" name="enabled" value="true"