feat: Quelleneinordnung (Bias) in Lageberichten fuer kritische Quellen
Parteiische Quellen (pro-russisch, pro-iranisch, rechtsextrem etc.) werden jetzt im Lagebericht-Fliesstext als solche gekennzeichnet, damit der Leser die Informationen einordnen kann. Aenderungen: - Orchestrator reichert Artikel mit source_bias aus der sources-Tabelle an - Analyzer zeigt Einordnung im Artikel-Kontext fuer den Claude-Prompt - Alle 4 Prompt-Templates enthalten neue Regel zur Quellenkennzeichnung Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Dieser Commit ist enthalten in:
@@ -884,6 +884,45 @@ class AgentOrchestrator:
|
||||
"data": {"status": "analyzing", "detail": "Analyse und Faktencheck laufen parallel...", "started_at": now_utc},
|
||||
}, visibility, created_by, tenant_id)
|
||||
|
||||
# Quelleneinordnung (Bias) an Artikel anhaengen
|
||||
try:
|
||||
cursor = await db.execute(
|
||||
"SELECT name, domain, bias FROM sources WHERE bias IS NOT NULL"
|
||||
)
|
||||
_bias_rows = await cursor.fetchall()
|
||||
_bias_by_domain = {}
|
||||
_bias_by_name = {}
|
||||
for br in _bias_rows:
|
||||
brd = dict(br)
|
||||
if brd.get("domain"):
|
||||
_bias_by_domain[brd["domain"].lower()] = brd["bias"]
|
||||
if brd.get("name"):
|
||||
_bias_by_name[brd["name"].lower()] = brd["bias"]
|
||||
|
||||
def _enrich_bias(articles_list):
|
||||
if not articles_list:
|
||||
return
|
||||
for art in articles_list:
|
||||
if art.get("source_bias"):
|
||||
continue
|
||||
src = (art.get("source") or "").lower()
|
||||
url = (art.get("source_url") or "").lower()
|
||||
# Match by name
|
||||
bias = _bias_by_name.get(src)
|
||||
if not bias:
|
||||
# Match by domain in URL
|
||||
for dom, b in _bias_by_domain.items():
|
||||
if dom and dom in url:
|
||||
bias = b
|
||||
break
|
||||
if bias:
|
||||
art["source_bias"] = bias
|
||||
|
||||
_enrich_bias(new_articles_for_analysis)
|
||||
_enrich_bias(all_articles_preloaded)
|
||||
except Exception as e:
|
||||
logger.warning("Bias-Anreicherung fehlgeschlagen (Pipeline laeuft weiter): %s", e)
|
||||
|
||||
# --- Analyse-Task ---
|
||||
async def _do_analysis():
|
||||
analyzer = AnalyzerAgent()
|
||||
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren