Inspired by Perplexity Computer: Model Council mode for Mixture of Agents

Adds a 'council' synthesis style to MoA (per preset via synthesis_style,
one-shot via the new /council command on CLI + gateway). Reference models
answer independently; the aggregator chairs the deliberation and produces
a user-facing report of consensus, per-model disagreements (with the
differing assumptions behind them), unique contributions, and a
recommendation with an explicit confidence level.

Inspired by Perplexity's Model Council rollout to Perplexity Computer
(changelog 08/04/26): pick a board of 2-8 models, run them independently,
synthesize where they agree/disagree and what each uniquely surfaces.
This commit is contained in:
Hermes Agent
2026-08-12 17:27:23 -07:00
committed by Teknium
parent 1965fde394
commit 8d9e18d40b
10 changed files with 407 additions and 24 deletions
+25
View File
@@ -10678,6 +10678,31 @@ class HermesCLI(CLIAgentSetupMixin, CLICommandsMixin, CLIBillingMixin):
self._pending_moa_disable_after_turn = True
self._pending_agent_seed = payload
_cprint(f" MoA one-shot queued with preset {preset}; previous model will be restored after this turn.")
elif canonical == "council":
# /council <question> — one-shot Model Council (inspired by
# Perplexity Computer's Model Council, Aug 2026): the default MoA
# preset's reference models answer the question independently, the
# preset's aggregator chairs the deliberation, and the council
# report (consensus / disagreements / unique contributions /
# recommendation with confidence) is handed to the current session
# model to present. The session model is never switched.
from hermes_cli.moa_config import build_moa_turn_prompt
parts = cmd_original.split(None, 1)
payload = parts[1].strip() if len(parts) > 1 else ""
if not payload:
_cprint(" Usage: /council <question> (runs the default MoA preset's models as an independent council and reports consensus vs disagreement)")
return True
try:
moa_cfg = self.config.get("moa") if isinstance(self.config, dict) else {}
encoded = build_moa_turn_prompt(
payload, moa_cfg, synthesis_style="council"
)
except Exception as exc:
_cprint(f" Council setup failed: {exc}")
return True
self._pending_input.put(encoded)
_cprint(" ⚖ Council convened — reference models are deliberating.")
elif canonical == "subgoal":
self._handle_subgoal_command(cmd_original)
elif canonical == "skin":