Add multi-model panel with Fusion mode
Panel agents answer the user prompt in parallel (read-only, non-streaming); their responses are merged into the worker's last user message as a <panel_responses> block, and the session agent synthesizes one final streamed answer. The RunPanel engine is built layer-ready for future MoA. - New session fields: multi_model_mode (off/fusion), panel_agent_ids (CSV) with idempotent column migration - New partial Services/AnthropicService.Panel.cs holding the RunPanel engine - Provider-agnostic members: Anthropic RunNonStreamingToolLoop / OpenAI CompleteText / CLI plan-mode; all forced read-only, persisted with Tag=panel - SSE events: panel_start, panel_member_start, panel_member_done, panel_done - Frontend: multi-agent picker, live panel bubbles, history rendering - Graceful degradation: panel errors fall back to worker-only Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
1 parent
b23eba32b4
commit
268f11fa6d
20 files changed
+647
-35
No files matched your search
@@ -143,6 +143,22 @@ public class ChatService
|
||||
var finalizerContext = await BuildSubAgentContext(
|
||||
session.FinalizerAgentId, sessionId, workspace, session, user);
|
||||
|
||||
// Multi-Modell-Panel (Fusion): Panel-Agenten (Proposer) bauen, falls aktiviert.
|
||||
// Jeder Panel-Agent ist ein vollwertiger SubAgentContext (Modell/Provider/Key/Prompt/Effort).
|
||||
var panelContexts = new List<SubAgentContext>();
|
||||
if (!string.IsNullOrEmpty(session.MultiModelMode) && session.MultiModelMode != "off"
|
||||
&& !string.IsNullOrWhiteSpace(session.PanelAgentIds))
|
||||
{
|
||||
var panelIds = session.PanelAgentIds
|
||||
.Split(',', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries)
|
||||
.Distinct();
|
||||
foreach (var pid in panelIds)
|
||||
{
|
||||
var pc = await BuildSubAgentContext(pid, sessionId, workspace, session, user);
|
||||
if (pc != null) panelContexts.Add(pc);
|
||||
}
|
||||
}
|
||||
|
||||
if (preparerContext != null)
|
||||
{
|
||||
preparerContext.AllowUserChoice = preparerContext.Agent?.AllowUserChoice ?? false;
|
||||
@@ -204,6 +220,8 @@ Für welche Plattform soll die App entwickelt werden? Web, Mobile oder Desktop?
|
||||
Preparer = preparerContext,
|
||||
Review = reviewContext,
|
||||
Finalizer = finalizerContext,
|
||||
MultiModelMode = session.MultiModelMode,
|
||||
PanelAgents = panelContexts,
|
||||
PlanMode = planMode
|
||||
};
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user