{
"event": "PreToolUse",
"tool_name": "Read",
"tool_input": {
"file_path": "\/var\/www\/scripts\/pipeline\/generators\/critic.py",
"limit": 80
}
}
{
"tool_response": {
"type": "text",
"file": {
"filePath": "\/var\/www\/scripts\/pipeline\/generators\/critic.py",
"content": "\"\"\"\nCritic Functions - Content critique and revision.\n\"\"\"\n\nimport json\nimport re\nimport sys\n\nsys.path.insert(0, \"\/var\/www\/scripts\/pipeline\")\n\nfrom db import db\n\nfrom .config_loader import get_prompt\nfrom .content_generator import call_llm\nfrom .persistence import save_version, update_order_status\nfrom .utils import repair_json\n\n\ndef get_critic(critic_id: int) -> dict | None:\n \"\"\"Load critic from content_config table.\"\"\"\n cursor = db.execute(\n \"\"\"SELECT cc.id, cc.name, cc.content, cc.prompt_id, cc.sort_order,\n p.content as prompt_content\n FROM content_config cc\n LEFT JOIN prompts p ON cc.prompt_id = p.id\n WHERE cc.id = %s AND cc.type = 'critic' AND cc.status = 'active'\"\"\",\n (critic_id,),\n )\n result = cursor.fetchone()\n cursor.close()\n\n if result:\n # Extract fokus from content JSON\n content = json.loads(result[\"content\"]) if isinstance(result[\"content\"], str) else result[\"content\"]\n result[\"fokus\"] = content.get(\"fokus\", [])\n\n return result\n\n\ndef run_critic(content: str, critic_id: int, model: str = \"anthropic\") -> dict:\n \"\"\"\n Run a single critic on content.\n\n Returns:\n dict with feedback and rating\n \"\"\"\n db.connect()\n\n try:\n critic = get_critic(critic_id)\n if not critic:\n return {\"error\": f\"Critic {critic_id} not found\"}\n\n fokus = json.loads(critic[\"fokus\"]) if isinstance(critic[\"fokus\"], str) else critic[\"fokus\"]\n fokus_str = \", \".join(fokus)\n\n # Load prompt from database (via critic.prompt_id or fallback to generic)\n prompt_template = critic.get(\"prompt_content\")\n if not prompt_template:\n prompt_template = get_prompt(\"critic-generic\")\n if not prompt_template:\n # Ultimate fallback - should never happen if DB is properly set up\n prompt_template = \"\"\"Du bist ein kritischer Lektor mit dem Fokus auf: {fokus}\n\nAnalysiere den folgenden Text und gib strukturiertes Feedback:\n\n## Text:\n{content}\n\n## Deine Aufgabe:\n1. Prüfe den Text auf die Aspekte: {fokus}\n2. Identifiziere konkrete Verbesserungspunkte\n3. Bewerte die Qualität (1-10)\n\nAntworte im JSON-Format:\n{{\n \"rating\": 8,\n \"passed\": true,\n \"issues\": [\"Issue 1\", \"Issue 2\"],\n \"suggestions\": [\"Suggestion 1\"],",
"numLines": 80,
"startLine": 1,
"totalLines": 353
}
}
}