diff --git a/agent/moa_loop.py b/agent/moa_loop.py index c625220671dd..b987757776ee 100644 --- a/agent/moa_loop.py +++ b/agent/moa_loop.py @@ -880,6 +880,7 @@ def aggregate_moa_context( so the provider default applies — matching single-model agent behavior. Presets may still pin explicit values. """ + reference_models = [slot for slot in reference_models if slot.get("enabled", True)] reference_outputs: list[tuple[str, str, Any]] = [] ref_messages = _reference_messages(api_messages) reference_outputs = _run_references_parallel( @@ -1267,7 +1268,10 @@ class MoAChatCompletions: privacy_mode = _moa_privacy_mode(_moa_raw) self._privacy_mode = privacy_mode messages = list(api_kwargs.get("messages") or []) - reference_models = preset.get("reference_models") or [] + reference_models = [ + slot for slot in (preset.get("reference_models") or []) + if slot.get("enabled", True) + ] aggregator = preset.get("aggregator") or {} # Expose the resolved aggregator slot so session cost accounting can # price the aggregator's acting turn at its REAL model/provider. The diff --git a/apps/desktop/src/app/settings/model-settings.tsx b/apps/desktop/src/app/settings/model-settings.tsx index 52066eab35a3..85f85623f800 100644 --- a/apps/desktop/src/app/settings/model-settings.tsx +++ b/apps/desktop/src/app/settings/model-settings.tsx @@ -1078,6 +1078,21 @@ export function ModelSettings({ onMainModelChanged }: ModelSettingsProps) {
{currentMoaPreset.reference_models.map((slot, index) => ( + updateMoaPreset(prev => ({ + ...prev, + reference_models: prev.reference_models.map((s, i) => + i === index ? { ...s, enabled: checked === true } : s + ) + })) + } + /> + } below={