diff --git a/backend/generator.py b/backend/generator.py index 905376c..38fe692 100644 --- a/backend/generator.py +++ b/backend/generator.py @@ -199,7 +199,7 @@ async def generate_guide(guide_id: str, topic: str, format_name: str, instructio if guide_id in _cancelled: return if returncode != 0: - await _fail(guide_id, f"Generator-Fehler: {stderr[:1000]}") + await _fail(guide_id, _claude_error("Generator-Fehler", returncode, stdout, stderr)) return if not html_path.exists(): @@ -217,7 +217,7 @@ async def generate_guide(guide_id: str, topic: str, format_name: str, instructio returncode, review_out, review_err = await _run_claude(guide_id, content_prompt, AGENT_TIMEOUT, model=MODEL_GUIDE) if returncode != 0: - await _fail(guide_id, f"Inhalts-Review-Fehler: {review_err[:1000]}") + await _fail(guide_id, _claude_error("Inhalts-Review-Fehler", returncode, review_out, review_err)) return review_text = review_out.strip() @@ -230,10 +230,10 @@ async def generate_guide(guide_id: str, topic: str, format_name: str, instructio current_step = "Inhalts-Korrektur" current_timeout = AGENT_TIMEOUT fix_prompt = _build_fix_prompt(topic, format_name, html_path, feedback) - returncode, _, fix_err = await _run_claude(guide_id, fix_prompt, AGENT_TIMEOUT, model=MODEL_GUIDE) + returncode, fix_out, fix_err = await _run_claude(guide_id, fix_prompt, AGENT_TIMEOUT, model=MODEL_GUIDE) if returncode != 0: - await _fail(guide_id, f"Fix-Fehler: {fix_err[:1000]}") + await _fail(guide_id, _claude_error("Fix-Fehler", returncode, fix_out, fix_err)) return # Step 3: PDF rendern @@ -287,7 +287,7 @@ async def rework_guide(guide_id: str, topic: str, format_name: str, instructions if guide_id in _cancelled: return if returncode != 0: - await _fail(guide_id, f"Rework-Fehler: {stderr[:1000]}") + await _fail(guide_id, _claude_error("Rework-Fehler", returncode, stdout, stderr)) return if not tmp_html.exists(): @@ -320,6 +320,16 @@ async def rework_guide(guide_id: str, topic: str, format_name: str, instructions tmp_pdf.unlink(missing_ok=True) +def _claude_error(label: str, returncode: int, stdout: str, stderr: str) -> str: + stderr = (stderr or "").strip() + if stderr: + return f"{label}: {stderr[:1000]}" + tail = (stdout or "").strip()[-500:] + if tail: + return f"{label} (exit {returncode}, stderr leer): …{tail}" + return f"{label} (exit {returncode}, ohne Ausgabe)" + + async def _fail(guide_id: str, msg: str) -> None: now = datetime.now(timezone.utc).isoformat() await update_guide(guide_id, status="error", progress=None, error_msg=msg, updated_at=now)