File size: 1,864 Bytes
7edb85f | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | 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(),
) |