feat: cockpit
This commit is contained in:
@@ -1747,7 +1747,7 @@ def ai_score_geo_risk(news: List[Dict], algo_score: Dict, log_meta: Optional[Dic
|
||||
if not get_client() or not news:
|
||||
return {
|
||||
"score": algo_score.get("score", 0), "level": algo_score.get("level", "low"),
|
||||
"rationale": "IA indisponible — score algorithmique utilisé tel quel.",
|
||||
"rationale": "AI unavailable — algorithmic score used as-is.",
|
||||
"top_risks": [],
|
||||
}
|
||||
|
||||
@@ -1757,31 +1757,31 @@ def ai_score_geo_risk(news: List[Dict], algo_score: Dict, log_meta: Optional[Dic
|
||||
for n in top_news
|
||||
]
|
||||
|
||||
user = f"""Evalue le niveau de risque geopolitique global actuel pour les marches financiers, sur une echelle de 0 a 100.
|
||||
user = f"""Assess the current overall geopolitical risk level for financial markets, on a scale of 0 to 100.
|
||||
|
||||
Score algorithmique de reference (formule ponderee par categorie, a titre indicatif seulement — exerce ton propre jugement, ne le recopie pas mecaniquement) : {algo_score.get('score')}/100 ({algo_score.get('level')}).
|
||||
Repartition par categorie : {json.dumps(algo_score.get('breakdown', {}), ensure_ascii=False)}
|
||||
Reference algorithmic score (category-weighted formula, indicative only — use your own judgment, don't just copy it): {algo_score.get('score')}/100 ({algo_score.get('level')}).
|
||||
Breakdown by category: {json.dumps(algo_score.get('breakdown', {}), ensure_ascii=False)}
|
||||
|
||||
Top actualites (triees par impact) :
|
||||
Top news (sorted by impact):
|
||||
{json.dumps(compact, ensure_ascii=False)}
|
||||
|
||||
Consignes :
|
||||
- Un score eleve doit refleter un risque REEL et actuel pour les marches (escalade militaire active, rupture commerciale majeure, crise politique...), pas juste un volume de news.
|
||||
- Un evenement de desescalade/resolution doit FAIRE BAISSER le score meme si son impact brut est eleve.
|
||||
- Ne t'ancre pas mecaniquement sur le score algorithmique si le contexte reel (titres) justifie un score different.
|
||||
- rationale : 2-3 phrases en francais expliquant precisement pourquoi ce score, en citant les evenements les plus determinants.
|
||||
- top_risks : 3 a 5 items les plus determinants pour ce score (titres courts).
|
||||
Instructions:
|
||||
- A high score must reflect a REAL, current risk to markets (active military escalation, major trade rupture, political crisis...), not just a volume of news.
|
||||
- A de-escalation/resolution event should LOWER the score even if its raw impact is high.
|
||||
- Don't mechanically anchor on the algorithmic score if the real context (headlines) justifies a different one.
|
||||
- rationale: 2-3 sentences in English precisely explaining why this score, citing the most determining events.
|
||||
- top_risks: the 3 to 5 most determining items for this score (short titles).
|
||||
|
||||
JSON: {{"score": <0-100 float>, "level": "low"|"medium"|"high"|"extreme", "rationale": "...", "top_risks": ["...", ...]}}"""
|
||||
|
||||
result = _chat(
|
||||
"Tu es un analyste geopolitique senior qui evalue le risque marche global, pas evenement par evenement.",
|
||||
"You are a senior geopolitical analyst assessing overall market risk, not event by event.",
|
||||
user, model="gpt-4o", json_mode=True, max_tokens=700, log_meta=log_meta,
|
||||
)
|
||||
if not result:
|
||||
return {
|
||||
"score": algo_score.get("score", 0), "level": algo_score.get("level", "low"),
|
||||
"rationale": "Erreur IA — score algorithmique utilisé tel quel.",
|
||||
"rationale": "AI error — algorithmic score used as-is.",
|
||||
"top_risks": [],
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user