Commits vergleichen

..

2 Commits

Autor SHA1 Nachricht Datum
7fe62df529 Promote develop → main (2026-05-21 19:21 UTC) 2026-05-21 21:21:44 +02:00
claude-dev
75038939b4 feat(topic-filter): jeden verworfenen Artikel einzeln loggen + Pre-Topic-Content auf 500 Zeichen erhöhen
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) <noreply@anthropic.com>
2026-05-21 19:03:36 +00:00
2 geänderte Dateien mit 13 neuen und 2 gelöschten Zeilen

Datei anzeigen

@@ -566,7 +566,10 @@ class AnalyzerAgent:
} }
filtered = [a for i, a in enumerate(articles, 1) if i in relevant_set] 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: if not filtered and articles:
logger.warning( logger.warning(
f"Topic-Filter hat ALLE {len(articles)} Artikel verworfen — " 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"Topic-Filter: {len(filtered)}/{len(articles)} Artikel thematisch relevant "
f"({rejected} verworfen)" 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 return filtered, usage
async def generate_latest_developments( async def generate_latest_developments(

Datei anzeigen

@@ -233,7 +233,7 @@ async def translate_articles_batch(
# sie wird auch dann gemacht, wenn der nachgelagerte Volltext-Translator # sie wird auch dann gemacht, wenn der nachgelagerte Volltext-Translator
# deaktiviert ist (Pflicht für korrektes Topic-Filtering, sehr kleine Kosten). # 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: def _needs_pretopic_translate(article: dict) -> bool: