{
"event": "PreToolUse",
"tool_name": "Read",
"tool_input": {
"file_path": "\/opt\/scripts\/pipeline\/generate.py",
"offset": 445,
"limit": 70
}
}
{
"tool_response": {
"type": "text",
"file": {
"filePath": "\/opt\/scripts\/pipeline\/generate.py",
"content": " return result\n\n\ndef run_critic(content, critic_id, model=\"anthropic\"):\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\n prompt = f\"\"\"Du bist ein kritischer Lektor mit dem Fokus auf: {\", \".join(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: {\", \".join(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\"],\n \"summary\": \"Kurze Zusammenfassung\"\n}}\"\"\"\n\n response = call_llm(prompt, model, client_name=\"content-studio-critique\")\n\n # Parse JSON from response\n import re\n\n json_match = re.search(r\"\\{[\\s\\S]*\\}\", response)\n if json_match:\n feedback = json.loads(json_match.group())\n feedback[\"critic_name\"] = critic[\"name\"]\n return feedback\n\n return {\n \"critic_name\": critic[\"name\"],\n \"rating\": 5,\n \"passed\": False,\n \"issues\": [\"Konnte Feedback nicht parsen\"],\n \"suggestions\": [],\n \"summary\": response[:500],\n }\n\n except Exception as e:\n return {\"error\": str(e)}\n finally:\n db.disconnect()\n\n\ndef run_critique_round(version_id, model=\"anthropic\"):\n \"\"\"\n Run all active critics on a content version.\n",
"numLines": 70,
"startLine": 445,
"totalLines": 699
}
}
}