40 lines
1.3 KiB
Python
40 lines
1.3 KiB
Python
from __future__ import annotations
|
|
|
|
from typing import Any, Literal
|
|
|
|
from pydantic import BaseModel, ConfigDict, Field
|
|
|
|
|
|
class ModeCard(BaseModel):
|
|
model_config = ConfigDict(extra="ignore")
|
|
|
|
workflow_mode: Literal["CHAT", "PLAN", "EXECUTE"] = "CHAT"
|
|
mode_state: str = "IDLE"
|
|
allowed_actions: list[str] = Field(default_factory=list)
|
|
forbidden_actions: list[str] = Field(default_factory=list)
|
|
exit_conditions: list[str] = Field(default_factory=list)
|
|
|
|
|
|
class SemanticDecision(BaseModel):
|
|
model_config = ConfigDict(extra="ignore")
|
|
|
|
topic_relation: Literal["continue_current_topic", "new_topic", "uncertain"]
|
|
mode_decision: Literal["stay_plan", "ready_confirm", "request_execute", "answer_only"]
|
|
draft_patch: dict[str, Any] = Field(default_factory=dict)
|
|
assistant_reply: str = ""
|
|
requires_confirmation: bool = False
|
|
requested_actions: list[str] = Field(default_factory=list)
|
|
confidence: float = 0.0
|
|
uncertainties: list[str] = Field(default_factory=list)
|
|
|
|
|
|
class DecisionGateResult(BaseModel):
|
|
model_config = ConfigDict(extra="ignore")
|
|
|
|
accepted: bool
|
|
blocked_reasons: list[str] = Field(default_factory=list)
|
|
allowed_actions: list[str] = Field(default_factory=list)
|
|
next_plan_status: str
|
|
needs_confirmation: bool = False
|
|
mode_state_after: str | None = None
|