File size: 1,488 Bytes
3b7f713
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
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
    }