from typing import Dict, Any from langchain_core.messages import AIMessage from core.llm_router import get_llm from schemas import AgentState, RiskScoreOutput def risk_scoring_node(state: AgentState) -> Dict[str, Any]: """ Symuluje punktację komisji, nadając punkty od 0 do 100 oraz identyfikuje pięć głównych ryzyk dla sukcesu projektu inwestycyjnego. """ llm = get_llm(task_type="critical", structured_output_schema=RiskScoreOutput) profile_dump = ( state.profile.model_dump() if state.profile else "Brak danych profilu" ) prompt = f""" Na podstawie profilu firmy przydziel jej hipotetyczną ocenę projektową 0-100 dla szans na uzyskanie dotacji UE. Następnie wypunktuj DOKŁADNIE 5 RYZYK, które obniżają tę ocenę (np. słabe wyniki finansowe, brak innowacji). Profil: {profile_dump} """ try: response = llm.invoke(prompt) # Zapis w state.risk_score (dodane w nowej wersji) risk_score_update = {"score": response.score, "risks": response.risks} score_text = f"WYNIK: {response.score}/100\nRYZYKA:\n" + "\n".join( [f"{i+1}. {r}" for i, r in enumerate(response.risks)] ) # Opcjonalny zapis wstecznej zgodności z Blackboard blackboard_update = state.blackboard or {} blackboard_update["last_risk_score"] = score_text return { "messages": [AIMessage(content=score_text)], "risk_score": risk_score_update, "blackboard": blackboard_update, "current_agent": "supervisor", } except Exception as e: print(f"Błąd risk scoring: {e}") return {"current_agent": "supervisor"}