from typing import Dict, Any from core.llm_router import get_llm from schemas import AgentState, PlanOutput def planner_node(state: AgentState) -> Dict[str, Any]: """ Tworzy dynamiczny plan sesji i osadza go w Blackboard. Uruchamiany jako pierwszy lub wywoływany w przypadku drastycznej zmiany intencji. """ llm = get_llm(task_type="standard", structured_output_schema=PlanOutput) prompt = f""" Jesteś Planner Agentem. Skonstruuj plan dzialania dla klienta w systemie decyzyjnym dotyczącym dotacji. Cel: Na podstawie konwersacji, stwórz listę max 5 kroków, co należy zrobić dalej. Ostatnia wiadomość od klienta: {state.messages[-1].content if state.messages else 'Nowa sesja'} Obecny profil firmy: {state.profile.model_dump() if state.profile else 'Brak'} Zwróć wynik jako uporządkowaną listę kroków w formacie schematu ustrukturyzowanego. PISZ ZAWSZE I WYŁĄCZNIE W JĘZYKU POLSKIM. """ try: response = llm.invoke(prompt) steps = response.steps except Exception as e: print(f"Błąd plannera: {e}") steps = [] # Przełącznik awaryjny - jeśli nie uda się sparsować to używamy domyślnego if not steps: steps = [ "Zebrać pełen profil firmy (Profiler)", "Znaleźć dopasowane dotacje (Matcher)", ] return { "task_plan": steps, "current_agent": "supervisor", # Handoff back to supervisor }