summaryrefslogtreecommitdiff
path: root/backend/app/services/council.py
diff options
context:
space:
mode:
Diffstat (limited to 'backend/app/services/council.py')
-rw-r--r--backend/app/services/council.py9
1 files changed, 7 insertions, 2 deletions
diff --git a/backend/app/services/council.py b/backend/app/services/council.py
index d177f44..ef6fa89 100644
--- a/backend/app/services/council.py
+++ b/backend/app/services/council.py
@@ -21,18 +21,20 @@ async def stage1_collect_responses(
tools_per_model: Optional[List[Optional[List[Dict[str, Any]]]]] = None,
openrouter_api_key: Optional[str] = None,
images: Optional[List[Dict[str, Any]]] = None,
+ contexts_per_model: Optional[List[Optional[Context]]] = None,
) -> AsyncGenerator[Dict[str, Any], None]:
"""
Stage 1: Query all council member models in parallel.
Yields events as each model completes.
- Returns final list via stage1_complete event.
+ If contexts_per_model is provided, each member uses its own context (None = shared context).
"""
async def _query_one(idx: int, config: LLMConfig) -> Dict[str, Any]:
atts = attachments_per_model[idx] if attachments_per_model else None
tls = tools_per_model[idx] if tools_per_model else None
+ member_context = (contexts_per_model[idx] if contexts_per_model and idx < len(contexts_per_model) and contexts_per_model[idx] is not None else context)
try:
response = await query_model_full(
- context, user_prompt, config,
+ member_context, user_prompt, config,
attachments=atts, tools=tls,
openrouter_api_key=openrouter_api_key, images=images,
)
@@ -255,9 +257,11 @@ async def council_event_stream(
tools_per_model: Optional[List[Optional[List[Dict[str, Any]]]]] = None,
openrouter_api_key: Optional[str] = None,
images: Optional[List[Dict[str, Any]]] = None,
+ contexts_per_model: Optional[List[Optional[Context]]] = None,
) -> AsyncGenerator[str, None]:
"""
Master orchestrator yielding SSE JSON events through the 3-stage council process.
+ If contexts_per_model is provided, each member uses its own context (None entries = shared context).
"""
# === Stage 1 ===
yield _sse_event({"type": "stage1_start"})
@@ -269,6 +273,7 @@ async def council_event_stream(
tools_per_model=tools_per_model,
openrouter_api_key=openrouter_api_key,
images=images,
+ contexts_per_model=contexts_per_model,
):
stage1_results.append(result)
yield _sse_event({