| from pydantic import BaseModel, Field | |
| from typing import List, Optional, Literal | |
| Mode = Literal["plan", "summary", "patch-diff"] | |
| class PlanConstraints(BaseModel): | |
| risk: Optional[str] = "low" | |
| max_steps: int = Field(default=3, ge=1, le=10) | |
| class PlanContext(BaseModel): | |
| app_id: str | |
| symptoms: List[str] = Field(default_factory=list) | |
| lkg: Optional[str] = None | |
| class PlanRequest(BaseModel): | |
| mode: Mode = "plan" | |
| context: PlanContext | |
| constraints: PlanConstraints = Field(default_factory=PlanConstraints) | |
| class PlanResponse(BaseModel): | |
| plan_id: str | |
| steps: List[str] | |
| risk: str | |
| explanation: str | |
| class ChatRequest(BaseModel): | |
| question: str = Field(..., min_length=3, max_length=512) | |
| class ChatResponse(BaseModel): | |
| answer: str | |
| sources: List[str] = Field(default_factory=list) | |