Вынес агентов в отдельные файлы
This commit is contained in:
@@ -4,8 +4,8 @@ from langgraph.graph import StateGraph, END
|
||||
from langgraph.checkpoint.memory import MemorySaver
|
||||
import uuid
|
||||
from datetime import datetime
|
||||
from models import Task, TaskStatus, CodeSolution, ReviewResult
|
||||
from agents import DeveloperAgent, ReviewerAgent
|
||||
from models import Task, TaskStatus, CodeSolution, ReviewResult, IterationRecord
|
||||
from agent import DeveloperAgent, ReviewerAgent
|
||||
from config import MAX_REVIEW_RETRIES
|
||||
|
||||
class Orchestrator:
|
||||
@@ -20,6 +20,22 @@ class Orchestrator:
|
||||
self.workflow = self._build_workflow()
|
||||
self.checkpointer = MemorySaver()
|
||||
self.app = self.workflow.compile()
|
||||
|
||||
def _add_history(self, task: Task, agent: str, action: str,
|
||||
input_summary: str = None, output_summary: str = None,
|
||||
details: Dict = None, error: str = None):
|
||||
"""Добавляет запись в историю задачи"""
|
||||
record = IterationRecord(
|
||||
iteration=task.iteration,
|
||||
timestamp=datetime.now().isoformat(),
|
||||
agent=agent,
|
||||
action=action,
|
||||
input_summary=input_summary,
|
||||
output_summary=output_summary,
|
||||
details=details or {},
|
||||
error=error
|
||||
)
|
||||
task.history.append(record)
|
||||
|
||||
def _build_workflow(self) -> StateGraph:
|
||||
"""Строит граф процесса разработки"""
|
||||
@@ -57,6 +73,13 @@ class Orchestrator:
|
||||
task = state["task"]
|
||||
print(f"\n🔧 [Iteration {task.iteration}] Разработчик начал работу...")
|
||||
|
||||
# Логируем начало работы разработчика
|
||||
self._add_history(
|
||||
task, "developer", "start",
|
||||
input_summary=f"Requirement: {task.requirement[:100]}...",
|
||||
details={"iteration": task.iteration, "previous_comments_count": len(task.last_review.comments) if task.last_review else 0}
|
||||
)
|
||||
|
||||
# Получаем замечания с предыдущего ревью
|
||||
previous_comments = []
|
||||
if task.last_review and task.last_review.comments:
|
||||
@@ -71,6 +94,13 @@ class Orchestrator:
|
||||
task.solution = solution
|
||||
task.status = TaskStatus.REVIEW
|
||||
|
||||
# Логируем успех
|
||||
self._add_history(
|
||||
task, "developer", "complete",
|
||||
output_summary=f"Generated {len(solution.files)} file(s), {len(solution.tests)} test(s)",
|
||||
details={"files": list(solution.files.keys()), "tests": list(solution.tests.keys())}
|
||||
)
|
||||
|
||||
print(f"✅ Разработчик создал решение: {len(solution.files)} файлов")
|
||||
for filename in solution.files:
|
||||
print(f" - {filename}")
|
||||
@@ -78,6 +108,13 @@ class Orchestrator:
|
||||
except Exception as e:
|
||||
task.status = TaskStatus.FAILED
|
||||
task.error_log.append(f"Developer error: {str(e)}")
|
||||
|
||||
# Логируем ошибку
|
||||
self._add_history(
|
||||
task, "developer", "error",
|
||||
error=error_msg,
|
||||
details={"exception": str(e)}
|
||||
)
|
||||
print(f"❌ Ошибка разработчика: {e}")
|
||||
|
||||
return {"task": task}
|
||||
@@ -87,9 +124,18 @@ class Orchestrator:
|
||||
task = state["task"]
|
||||
print(f"\n🔍 [Iteration {task.iteration}] Ревьювер проверяет код...")
|
||||
|
||||
# Логируем начало ревью
|
||||
self._add_history(
|
||||
task, "reviewer", "start",
|
||||
input_summary=f"Reviewing {len(task.solution.files)} file(s)" if task.solution else "No solution",
|
||||
details={"iteration": task.iteration}
|
||||
)
|
||||
|
||||
if not task.solution:
|
||||
task.status = TaskStatus.FAILED
|
||||
task.error_log.append("No solution to review")
|
||||
error_msg = "No solution to review"
|
||||
task.error_log.append(error_msg)
|
||||
self._add_history(task, "reviewer", "error", error=error_msg)
|
||||
return {"task": task}
|
||||
|
||||
try:
|
||||
@@ -98,6 +144,17 @@ class Orchestrator:
|
||||
task.last_review = review
|
||||
task.iteration += 1
|
||||
|
||||
# Логируем результат ревью
|
||||
self._add_history(
|
||||
task, "reviewer", "complete",
|
||||
output_summary=f"Verdict: {review.status}, Comments: {len(review.comments)}",
|
||||
details={
|
||||
"verdict": review.status,
|
||||
"comments_count": len(review.comments),
|
||||
"summary": review.summary
|
||||
}
|
||||
)
|
||||
|
||||
print(f"📊 Вердикт: {review.status}")
|
||||
if review.comments:
|
||||
print(f" Найдено замечаний: {len(review.comments)}")
|
||||
@@ -117,8 +174,9 @@ class Orchestrator:
|
||||
|
||||
except Exception as e:
|
||||
task.status = TaskStatus.FAILED
|
||||
task.error_log.append(f"Reviewer error: {str(e)}")
|
||||
print(f"❌ Ошибка ревьювера: {e}")
|
||||
error_msg = f"Reviewer error: {str(e)}"
|
||||
task.error_log.append(error_msg)
|
||||
self._add_history(task, "reviewer", "error", error=error_msg, details={"exception": str(e)})
|
||||
|
||||
return {"task": task}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user