| from typing import Any | |
| from executor import run_tool_plan | |
| from llm.planner import create_tool_plan | |
| from llm.responder import generate_response | |
| from models.trace_models import ToolExecutionResult | |
| def run_agent( | |
| user_message: str, | |
| ) -> tuple[ | |
| str, | |
| dict[str, Any], | |
| list[dict[str, Any]], | |
| str, | |
| ]: | |
| """ | |
| AI Developer Assistant pipeline'ını çalıştırır. | |
| Akış: | |
| Kullanıcı mesajı | |
| -> Planner | |
| -> ToolPlan | |
| -> Executor | |
| -> Tool sonuçları | |
| -> Responder | |
| -> Nihai cevap | |
| Args: | |
| user_message: | |
| Kullanıcının geliştirici sorusu. | |
| Returns: | |
| thinking: | |
| Planner modelinin analiz metni. | |
| plan_data: | |
| Tool planının sözlük biçimi. | |
| execution_data: | |
| Tool çalışma sonuçlarının sözlük listesi. | |
| final_answer: | |
| Kullanıcıya gösterilecek nihai cevap. | |
| """ | |
| cleaned_message = user_message.strip() | |
| if not cleaned_message: | |
| raise ValueError( | |
| "Lütfen bir soru girin." | |
| ) | |
| # 1. Planner | |
| thinking, plan = create_tool_plan( | |
| cleaned_message | |
| ) | |
| # 2. Executor | |
| tool_results: list[ToolExecutionResult] = ( | |
| run_tool_plan(plan) | |
| ) | |
| # 3. Responder | |
| final_answer = generate_response( | |
| user_message=cleaned_message, | |
| tool_results=tool_results, | |
| ) | |
| # Gradio JSON bileşenlerinin doğrudan | |
| # gösterebilmesi için Pydantic modellerini | |
| # standart Python sözlüklerine dönüştürüyoruz. | |
| plan_data = plan.model_dump(mode="json") | |
| execution_data = [ | |
| result.model_dump(mode="json") | |
| for result in tool_results | |
| ] | |
| return ( | |
| thinking.strip(), | |
| plan_data, | |
| execution_data, | |
| final_answer.strip(), | |
| ) |