grantforge-api / backend /agents /risk_scoring.py
GrantForge Bot
Deploy to Hugging Face
3b7f713
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"}