diff --git a/backend/app/services.py b/backend/app/services.py index efe7d10..2772b24 100644 --- a/backend/app/services.py +++ b/backend/app/services.py @@ -156,14 +156,15 @@ class NewsFetcher: "### Vorliegende Informationen\n" f"{context}\n\n" "### Längenbegrenzungen\n" - "title: max 100 Zeichen\n" + "title: Format \"ORT: Titel\", max 100 Zeichen\n" + "location: nur der ORT-Teil, max 40 Zeichen\n" "summary: 100–160 Wörter\n" "tags: bis zu 6 Schlüsselwörter, durch Komma getrennt, alles Kleinbuchstaben.\n\n" "### Regeln\n" "1. Nutze ausschließlich Informationen, die im bereitgestellten Material eindeutig vorkommen. Externes Wissen ist untersagt.\n" "2. Liegt sowohl Artikel-Text als auch RSS-Metadaten vor, hat der Artikel-Text Vorrang; verwende RSS nur ergänzend.\n" "3. Liegt nur RSS-Titel und/oder -Beschreibung vor, stütze dich ausschließlich darauf.\n" - "4. Sind die Informationen unzureichend, gib exakt {\"title\":\"\",\"summary\":\"\",\"tags\":\"\"} zurück.\n" + "4. Sind die Informationen unzureichend, gib exakt {\"location\":\"\",\"title\":\"\",\"summary\":\"\",\"tags\":\"\"} zurück.\n" "5. Gib nur gültiges, minifiziertes JSON zurück – keine Zeilenumbrüche, kein Markdown, keine Kommentare.\n" "6. Verwende keine hypothetischen Formulierungen (\"könnte\", \"möglicherweise\" etc.).\n" "7. Wörtliche Zitate dürfen höchstens 15 % des Summary-Texts ausmachen.\n" @@ -205,6 +206,8 @@ class NewsFetcher: A dictionary containing the article title and summaries in German and English, or None if summarization failed """ + logger.info("[AI] Fetching article content from: " + url) + article_content = await NewsFetcher.fetch_article_content(client, url) if not article_content: @@ -233,6 +236,9 @@ class NewsFetcher: "items": { "type": "string" } + }, + "location": { + "type": "string" } }, "required": [ @@ -247,6 +253,8 @@ class NewsFetcher: } } + logger.info("[AI] Running summary generation...") + try: response = await client.post( f"{OLLAMA_HOST}/api/generate", @@ -258,6 +266,8 @@ class NewsFetcher: result = response.json() llm_response = result["response"] + logger.info("[AI] " + llm_response) + if isinstance(llm_response, str): summary_data = json.loads(llm_response) else: