# reviewer.py from langchain_ollama import ChatOllama from langchain_core.messages import SystemMessage, HumanMessage from typing import List, Dict from config import MODEL_NAME, LLM_HOST import json class PlanReviewerAgent: def __init__(self, llm=None): self.llm = llm or ChatOllama( model=MODEL_NAME, temperature=0.0, base_url=LLM_HOST ) def review(self, original_task: str, plan: List[Dict], execution_results: List[Dict]) -> dict: system_prompt = """Ты - ревьювер. Оцени, достигнута ли цель задачи на основе выполненного плана. Верни JSON с полями: - "status": "approved" / "changes_requested" / "rejected" - "feedback": пояснение - "suggested_plan_correction": если нужно изменить план - предложи новый план (массив шагов) """ user_prompt = f""" Задача: {original_task} План: {json.dumps(plan, indent=2)} Результаты выполнения: {json.dumps(execution_results, indent=2)} Оцени результат. """ response = self.llm.invoke([SystemMessage(content=system_prompt), HumanMessage(content=user_prompt)]) return json.loads(response.content)