feat: cockpit

This commit is contained in:
OpenSquared
2026-07-21 16:48:12 +02:00
parent 24e5e4b03b
commit b6e9b96dc4
10 changed files with 644 additions and 142 deletions

View File

@@ -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": [],
}