summaryrefslogtreecommitdiff
path: root/backend/app/schemas.py
diff options
context:
space:
mode:
authorYurenHao0426 <blackhao0426@gmail.com>2026-02-13 23:08:05 +0000
committerYurenHao0426 <blackhao0426@gmail.com>2026-02-13 23:08:05 +0000
commitcb59ecf3ac3b38ba883fc74bf810ae9e82e2a469 (patch)
treed0cab16f3ddb7708528ceb3cbb126d9437aed91b /backend/app/schemas.py
parent2adacdbfa1d1049a0497e55f2b3ed00551bf876f (diff)
Add LLM Debate mode for multi-round iterative model discussions
Implements a debate feature alongside Council mode where 2-6 models engage in multi-round discussions with configurable judge modes (external judge, self-convergence, display-only), debate formats (free discussion, structured opposition, iterative improvement, custom), and early termination conditions. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Diffstat (limited to 'backend/app/schemas.py')
-rw-r--r--backend/app/schemas.py29
1 files changed, 29 insertions, 0 deletions
diff --git a/backend/app/schemas.py b/backend/app/schemas.py
index 4213f15..7a657a3 100644
--- a/backend/app/schemas.py
+++ b/backend/app/schemas.py
@@ -76,6 +76,35 @@ class CouncilRunRequest(BaseModel):
attached_file_ids: List[str] = Field(default_factory=list)
scopes: List[str] = Field(default_factory=list)
+class DebateJudgeMode(str, Enum):
+ EXTERNAL_JUDGE = "external_judge"
+ SELF_CONVERGENCE = "self_convergence"
+ DISPLAY_ONLY = "display_only"
+
+class DebateFormat(str, Enum):
+ FREE_DISCUSSION = "free_discussion"
+ STRUCTURED_OPPOSITION = "structured_opposition"
+ ITERATIVE_IMPROVEMENT = "iterative_improvement"
+ CUSTOM = "custom"
+
+class DebateRunRequest(BaseModel):
+ node_id: str
+ incoming_contexts: List[Context] = []
+ user_prompt: str
+ debate_models: List[CouncilMemberConfig] # 2-6 models
+ judge_model: Optional[CouncilMemberConfig] = None
+ judge_mode: DebateJudgeMode = DebateJudgeMode.EXTERNAL_JUDGE
+ debate_format: DebateFormat = DebateFormat.FREE_DISCUSSION
+ custom_format_prompt: Optional[str] = None
+ max_rounds: int = 5
+ system_prompt: Optional[str] = None
+ temperature: float = 0.7
+ reasoning_effort: ReasoningEffort = ReasoningEffort.MEDIUM
+ enable_google_search: bool = False
+ merge_strategy: MergeStrategy = MergeStrategy.SMART
+ attached_file_ids: List[str] = Field(default_factory=list)
+ scopes: List[str] = Field(default_factory=list)
+
class NodeRunResponse(BaseModel):
node_id: str
output_context: Context