From 75038939b459bb9edbd95a04336b819cfc9845e8 Mon Sep 17 00:00:00 2001 From: claude-dev Date: Thu, 21 May 2026 19:03:36 +0000 Subject: [PATCH] =?UTF-8?q?feat(topic-filter):=20jeden=20verworfenen=20Art?= =?UTF-8?q?ikel=20einzeln=20loggen=20+=20Pre-Topic-Content=20auf=20500=20Z?= =?UTF-8?q?eichen=20erh=C3=B6hen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Beim Aktualisieren von Lage 96 (Verfassungsänderung Japan) ist der Topic-Filter in den letzten Refreshes auf 2/15, 4/26 bzw. 7/23 zurückgefallen. Die jp-RSS- Treffer aus Asahi-Politik, NHK-Politik und Mainichi werden offenbar verworfen, aber ohne Detail-Log lässt sich nicht beurteilen, ob das gerechtfertigt ist. - analyzer.filter_relevant_articles: pro verworfenem Artikel eine INFO-Zeile mit laufendem Index, Quelle, Original-Headline und (falls vorhanden) der englischen Pre-Topic-Übersetzung. Ohne zusätzlichen Claude-Call, nur Logging des bereits vorhandenen Materials. - translator._TOPIC_TRANSLATE_CONTENT_MAX von 240 auf 500 erhöht. Bei dichten Kanji- oder kyrillischen Headlines reichten 240 Zeichen oft nicht aus, um dem nachgelagerten Topic-Filter den thematischen Kontext zu vermitteln. Mehrkosten pro Refresh: vernachlässigbar (Haiku, einmal pro Refresh). Co-Authored-By: Claude Opus 4.7 (1M context) --- src/agents/analyzer.py | 13 ++++++++++++- src/agents/translator.py | 2 +- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/agents/analyzer.py b/src/agents/analyzer.py index f40ab73..f7bd80a 100644 --- a/src/agents/analyzer.py +++ b/src/agents/analyzer.py @@ -566,7 +566,10 @@ class AnalyzerAgent: } filtered = [a for i, a in enumerate(articles, 1) if i in relevant_set] - rejected = len(articles) - len(filtered) + rejected_articles = [ + (idx, a) for idx, a in enumerate(articles, 1) if idx not in relevant_set + ] + rejected = len(rejected_articles) if not filtered and articles: logger.warning( f"Topic-Filter hat ALLE {len(articles)} Artikel verworfen — " @@ -578,6 +581,14 @@ class AnalyzerAgent: f"Topic-Filter: {len(filtered)}/{len(articles)} Artikel thematisch relevant " f"({rejected} verworfen)" ) + for idx, a in rejected_articles: + src = a.get("source", "Unbekannt") + hl = (a.get("headline_de") or a.get("headline") or "").strip() + hl_en = (a.get("headline_en_for_topic") or "").strip() + if hl_en and hl_en.lower() != hl.lower(): + logger.info("Topic-Filter REJECT [%d] %s | %s | EN: %s", idx, src, hl[:120], hl_en[:120]) + else: + logger.info("Topic-Filter REJECT [%d] %s | %s", idx, src, hl[:120]) return filtered, usage async def generate_latest_developments( diff --git a/src/agents/translator.py b/src/agents/translator.py index 2564f40..9ecfe58 100644 --- a/src/agents/translator.py +++ b/src/agents/translator.py @@ -233,7 +233,7 @@ async def translate_articles_batch( # sie wird auch dann gemacht, wenn der nachgelagerte Volltext-Translator # deaktiviert ist (Pflicht für korrektes Topic-Filtering, sehr kleine Kosten). -_TOPIC_TRANSLATE_CONTENT_MAX = 240 +_TOPIC_TRANSLATE_CONTENT_MAX = 500 def _needs_pretopic_translate(article: dict) -> bool: -- 2.49.1