feat(articles): headline_en persistieren + Sprache aus Quell-Konfig übernehmen
Zwei Lücken beim Befund Lage 96 (Verfassungsänderung Japan): die japanische Asahi-Shimbun-Quelle wurde durch das Sprach-aware Keyword-Matching (#27) und Pre-Topic-Translate (#28) erstmals durchgereicht, landete aber mit language='en' und ohne englische Headline in der DB. Damit ist sie im Frontend nur als Kanji-Headline zu lesen und das Summary-LLM kann den Treffer nicht aussagekräftig referenzieren. 1. INSERT INTO articles erweitert um headline_en und content_en. Werte stammen primär vom Translator (headline_en, falls TRANSLATOR_ENABLED den Pfad einmal in Englisch befüllt), Fallback auf die für den Topic-Filter angefertigte Mini-Übersetzung (headline_en_for_topic / content_en_for_topic). So liegt die englische Variante dauerhaft in der DB statt nur während des Refresh-Laufs im Speicher. 2. RSS- und Telegram-Parser setzen 'language' nun primär aus der Quell-/ Kanal-Konfiguration (primary_language). Vorher war es hart 'de' wenn die Headline deutsch wirkte, sonst 'en' - mit dem Resultat, dass ein Kanji-Titel als language='en' landete. Mit dem Fix bekommen Asahi & Co. korrekt language='ja', russische Telegram-Kanäle 'ru' etc. - src/agents/orchestrator.py: INSERT erweitert, Kommentar zur Fallback-Logik - src/feeds/rss_parser.py: language aus feed_config.primary_language - src/feeds/telegram_parser.py: channel_lang durch _fetch_channel reichen Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Dieser Commit ist enthalten in:
@@ -1174,18 +1174,28 @@ class AgentOrchestrator:
|
||||
new_count = 0
|
||||
new_articles_for_analysis = []
|
||||
for article in new_candidates:
|
||||
# headline_en / content_en: zuerst die vollwertige Übersetzung
|
||||
# vom Translator (wenn TRANSLATOR_ENABLED), sonst die für den
|
||||
# Topic-Filter angefertigte Mini-Übersetzung wiederverwenden.
|
||||
# Ohne diesen Fallback würden fremdsprachige Artikel zwar
|
||||
# gefiltert, aber ohne englische Headline in der DB landen und
|
||||
# später im Frontend bzw. im Summary-LLM unlesbar bleiben.
|
||||
headline_en = article.get("headline_en") or article.get("headline_en_for_topic")
|
||||
content_en = article.get("content_en") or article.get("content_en_for_topic")
|
||||
cursor = await db.execute(
|
||||
"""INSERT INTO articles (incident_id, headline, headline_de, source,
|
||||
source_url, content_original, content_de, language, published_at, tenant_id)
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)""",
|
||||
"""INSERT INTO articles (incident_id, headline, headline_de, headline_en, source,
|
||||
source_url, content_original, content_de, content_en, language, published_at, tenant_id)
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)""",
|
||||
(
|
||||
incident_id,
|
||||
article.get("headline", ""),
|
||||
article.get("headline_de"),
|
||||
headline_en,
|
||||
article.get("source", "Unbekannt"),
|
||||
article.get("source_url"),
|
||||
article.get("content_original"),
|
||||
article.get("content_de"),
|
||||
content_en,
|
||||
article.get("language", "de"),
|
||||
article.get("published_at"),
|
||||
tenant_id,
|
||||
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren