From 2adacdbfa1d1049a0497e55f2b3ed00551bf876f Mon Sep 17 00:00:00 2001 From: YurenHao0426 Date: Fri, 13 Feb 2026 22:46:06 +0000 Subject: Add per-model council settings, Quick Chat council mode, and per-member trace selection Council members now support individual temperature, reasoning effort, web search, and context trace overrides. Quick Chat inherits council config from the source node and streams through the 3-stage council pipeline. Blueprint loading migrates old string[] council formats to CouncilMemberConfig[]. Co-Authored-By: Claude Opus 4.6 --- frontend/src/store/flowStore.ts | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) (limited to 'frontend/src/store/flowStore.ts') diff --git a/frontend/src/store/flowStore.ts b/frontend/src/store/flowStore.ts index 944b846..f31720e 100644 --- a/frontend/src/store/flowStore.ts +++ b/frontend/src/store/flowStore.ts @@ -73,6 +73,14 @@ export interface MergedTrace { summarizedContent?: string; // For summary strategy, stores the LLM-generated summary } +export interface CouncilMemberConfig { + model: string; + temperature?: number; + reasoningEffort?: 'low' | 'medium' | 'high'; + enableWebSearch?: boolean; + traceId?: string; // Per-member trace selection for council context +} + export interface CouncilData { stage1: Array<{ model: string; response: string }> | null; stage2: { @@ -98,8 +106,8 @@ export interface NodeData { // Council mode councilMode?: boolean; - councilModels?: string[]; - chairmanModel?: string; + councilModels?: CouncilMemberConfig[]; + chairmanModel?: CouncilMemberConfig; councilData?: CouncilData; // Traces logic @@ -1607,8 +1615,18 @@ const useFlowStore = create((set, get) => { }, loadBlueprint: (doc: BlueprintDocument): ViewportState | undefined => { + // Migrate old string[] councilModels to CouncilMemberConfig[] + const migratedNodes = (doc.nodes || []).map((n: any) => { + if (n.data?.councilModels && n.data.councilModels.length > 0 && typeof n.data.councilModels[0] === 'string') { + n.data.councilModels = n.data.councilModels.map((m: string) => ({ model: m })); + } + if (n.data?.chairmanModel && typeof n.data.chairmanModel === 'string') { + n.data.chairmanModel = { model: n.data.chairmanModel }; + } + return n; + }); set({ - nodes: (doc.nodes || []) as LLMNode[], + nodes: migratedNodes as LLMNode[], edges: (doc.edges || []) as Edge[], selectedNodeId: null, lastViewport: doc.viewport || get().lastViewport, -- cgit v1.2.3