Spaces:
Running
Running
| 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"} | |