Block C: Prompt-Umlaute korrigiert + Timeout parametrisiert
- ENHANCE_PROMPT_ADHOC und ENHANCE_PROMPT_RESEARCH: Umschreibungen durch echte Umlaute ersetzt (fuer -> fuer, praezises -> praezises, ...). Behebt den Widerspruch, dass der Prompt "echte Umlaute verwenden" forderte, die Anweisung selbst aber ae/oe/ue/ss nutzte. - call_claude() bekommt neuen timeout-Parameter. None = Fallback auf CLAUDE_TIMEOUT (1800s), sonst Override in Sekunden. asyncio.wait_for und die cancel-aware Variante nutzen durchgaengig den effective_timeout. - Enhance-Endpoint ruft call_claude mit timeout=60 auf (Haiku-Single-Shot, vorher global 1800s). - chat.py _call_claude_chat: Timeout von 60s auf 120s erhoeht (Chat-Antworten koennen etwas laenger dauern, haben aber keinen Anspruch auf 30 Min).
Dieser Commit ist enthalten in:
@@ -51,7 +51,7 @@ async def _call_claude_chat(prompt: str) -> tuple[str, int, ClaudeUsage]:
|
||||
)
|
||||
try:
|
||||
stdout, stderr = await asyncio.wait_for(
|
||||
process.communicate(input=prompt.encode("utf-8")), timeout=60
|
||||
process.communicate(input=prompt.encode("utf-8")), timeout=120
|
||||
)
|
||||
except asyncio.TimeoutError:
|
||||
process.kill()
|
||||
|
||||
@@ -197,31 +197,31 @@ async def get_refreshing_incidents(
|
||||
# --- Beschreibung generieren (Prompt Enhancement) ---
|
||||
|
||||
ENHANCE_PROMPT_RESEARCH = """Du bist ein Recherche-Planer in einem OSINT-Lagemonitoring-System.
|
||||
Deine Aufgabe: Strukturiere ein Recherche-Briefing, das Analysten als Leitfaden fuer ihre Suche verwenden.
|
||||
Deine Aufgabe: Strukturiere ein Recherche-Briefing, das Analysten als Leitfaden für ihre Suche verwenden.
|
||||
Du behauptest KEINE Fakten und musst das Thema NICHT kennen oder verifizieren.
|
||||
Der Nutzer gibt das Thema vor -- du definierst Suchrichtungen, Schwerpunkte und Stichworte.
|
||||
Erstelle das Briefing IMMER, auch wenn dir das Thema unbekannt ist.
|
||||
|
||||
WICHTIG: Verwende IMMER echte UTF-8-Umlaute (ae, oe, ue, ss) und KEINE Umschreibungen.
|
||||
WICHTIG: Verwende IMMER echte Umlaute (ä, ö, ü, ß) und KEINE Umschreibungen.
|
||||
|
||||
Titel: {title}
|
||||
Vorhandener Kontext: {context}
|
||||
Typ: Hintergrundrecherche
|
||||
|
||||
Erstelle ein praezises Recherche-Briefing mit:
|
||||
1. Fallbezeichnung (vollstaendige Benennung des Themas basierend auf Titel und Kontext)
|
||||
2. Recherche-Schwerpunkte (5-8 thematische Punkte, z.B. Sachverhalt, beteiligte Parteien, rechtliche Aspekte, mediale Rezeption, Hintergruende, Chronologie)
|
||||
3. Relevante Suchbegriffe (deutsch + englisch, inkl. Abkuerzungen und alternative Schreibweisen)
|
||||
Erstelle ein präzises Recherche-Briefing mit:
|
||||
1. Fallbezeichnung (vollständige Benennung des Themas basierend auf Titel und Kontext)
|
||||
2. Recherche-Schwerpunkte (5-8 thematische Punkte, z.B. Sachverhalt, beteiligte Parteien, rechtliche Aspekte, mediale Rezeption, Hintergründe, Chronologie)
|
||||
3. Relevante Suchbegriffe (deutsch + englisch, inkl. Abkürzungen und alternative Schreibweisen)
|
||||
|
||||
Schreibe NUR das Briefing als Fliesstext mit Aufzaehlungen. Keine Erklaerungen, Rueckfragen oder Disclaimer."""
|
||||
Schreibe NUR das Briefing als Fließtext mit Aufzählungen. Keine Erklärungen, Rückfragen oder Disclaimer."""
|
||||
|
||||
ENHANCE_PROMPT_ADHOC = """Du bist ein Recherche-Planer in einem OSINT-Lagemonitoring-System.
|
||||
Deine Aufgabe: Erstelle eine knappe Vorfallsbeschreibung, die als Suchauftrag fuer Live-Monitoring dient.
|
||||
Deine Aufgabe: Erstelle eine knappe Vorfallsbeschreibung, die als Suchauftrag für Live-Monitoring dient.
|
||||
Du behauptest KEINE Fakten und musst den Vorfall NICHT kennen oder verifizieren.
|
||||
Der Nutzer gibt das Thema vor -- du strukturierst, wonach gesucht werden soll.
|
||||
Erstelle die Beschreibung IMMER, auch wenn dir der Vorfall unbekannt ist.
|
||||
|
||||
WICHTIG: Verwende IMMER echte UTF-8-Umlaute (ae, oe, ue, ss) und KEINE Umschreibungen.
|
||||
WICHTIG: Verwende IMMER echte Umlaute (ä, ö, ü, ß) und KEINE Umschreibungen.
|
||||
|
||||
Titel: {title}
|
||||
Vorhandener Kontext: {context}
|
||||
@@ -230,10 +230,10 @@ Typ: Live-Monitoring (aktuelle Ereignisse)
|
||||
Erstelle eine knappe, informative Beschreibung mit:
|
||||
1. Was ist passiert / worum geht es (basierend auf Titel und Kontext)
|
||||
2. Wo (geographischer Kontext, falls ableitbar)
|
||||
3. Wer ist beteiligt (Akteure, Organisationen, Laender)
|
||||
4. Wonach soll gesucht werden (aktuelle Entwicklungen, Reaktionen, Hintergruende)
|
||||
3. Wer ist beteiligt (Akteure, Organisationen, Länder)
|
||||
4. Wonach soll gesucht werden (aktuelle Entwicklungen, Reaktionen, Hintergründe)
|
||||
|
||||
Schreibe NUR die Beschreibung als Fliesstext (3-5 Zeilen). Keine Erklaerungen, Rueckfragen oder Disclaimer."""
|
||||
Schreibe NUR die Beschreibung als Fließtext (3-5 Zeilen). Keine Erklärungen, Rückfragen oder Disclaimer."""
|
||||
|
||||
_enhance_logger = logging.getLogger("osint.enhance")
|
||||
|
||||
@@ -254,7 +254,7 @@ async def enhance_description(
|
||||
prompt = template.format(title=data.title.strip(), context=context)
|
||||
|
||||
try:
|
||||
result, usage = await call_claude(prompt, tools=None, model=CLAUDE_MODEL_FAST, raw_text=True)
|
||||
result, usage = await call_claude(prompt, tools=None, model=CLAUDE_MODEL_FAST, raw_text=True, timeout=60)
|
||||
except ClaudeCliError as e:
|
||||
_enhance_logger.error(f"Beschreibung generieren: ClaudeCliError [{e.error_type}]: {e.message}")
|
||||
if e.error_type == "auth_error":
|
||||
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren