Protokoll #30942

ID30942
Zeitstempel2025-12-31 00:23:06.325362
Clientroot
IP145.224.72.245
Modellclaude-sonnet-4-20250514
Statuscompleted
Tokens694 (Input: 34, Output: 660)
Dauer138 ms
Request-Zeit2025-12-31 00:23:06.325362
Response-Zeit2025-12-31 00:23:06.463733

Request

{
    "event": "PreToolUse",
    "tool_name": "Read",
    "tool_input": {
        "file_path": "\/var\/www\/scripts\/pipeline\/generators\/critic.py",
        "limit": 80
    }
}

Response

{
    "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
        }
    }
}
← Vorheriger Zur Liste Nächster →