Files
MultiAgent/models.py

50 lines
1.6 KiB
Python

# models.py
from typing import List, Dict, Any, Optional, Literal
from pydantic import BaseModel, Field
from enum import Enum
class TaskStatus(str, Enum):
PENDING = "pending"
CODING = "coding"
REVIEW = "review"
REWORK = "rework"
APPROVED = "approved"
REJECTED = "rejected"
FAILED = "failed"
class ReviewComment(BaseModel):
line: Optional[int] = None
file: Optional[str] = None
severity: Literal["critical", "major", "minor", "suggestion", "warning", "info"] = "major"
text: str
class ReviewResult(BaseModel):
status: Literal["approved", "changes_requested", "rejected"]
comments: List[ReviewComment] = Field(default_factory=list)
summary: str
class CodeSolution(BaseModel):
files: Dict[str, str] = Field(default_factory=dict) # filename -> content
description: str
tests: Dict[str, str] = Field(default_factory=dict) # test_filename -> content
class IterationRecord(BaseModel):
"""Запись одной итерации"""
iteration: int
timestamp: str
agent: Literal["developer", "reviewer"]
action: str # "start", "complete", "error"
input_summary: Optional[str] = None
output_summary: Optional[str] = None
details: Dict[str, Any] = Field(default_factory=dict)
error: Optional[str] = None
class Task(BaseModel):
id: str
requirement: str
status: TaskStatus = TaskStatus.PENDING
iteration: int = 0
solution: Optional[CodeSolution] = None
last_review: Optional[ReviewResult] = None
error_log: List[str] = Field(default_factory=list)
history: List[IterationRecord] = Field(default_factory=list) # <-- новая история