{
"event": "PreToolUse",
"tool_name": "Bash",
"tool_input": {
"command": "cat << 'PYTHON' | DB_PASSWORD=\"v8mFLmkF2fth_r\" timeout 300 .\/venv\/bin\/python\nimport sys\nimport json\nimport requests\nimport mysql.connector\nsys.path.insert(0, \"\/var\/www\/scripts\/pipeline\")\nfrom db import db\ndb.connect()\n\nOLLAMA_HOST = \"http:\/\/localhost:11434\"\nMODEL = \"gemma3:27b-it-qat\"\n\n# Connect to ki_dev for prompts\ndev_conn = mysql.connector.connect(\n host=\"localhost\",\n database=\"ki_dev\",\n user=\"root\",\n password=\"v8mFLmkF2fth_r\",\n charset=\"utf8mb4\"\n)\ndev_cursor = dev_conn.cursor(dictionary=True)\ndev_cursor.execute(\"SELECT content FROM prompts WHERE name = 'entity_extraction_pass2'\")\nrow = dev_cursor.fetchone()\ndev_cursor.close()\ndev_conn.close()\n\nprompt_template = row['content']\nprint(f\"Prompt loaded ({len(prompt_template)} chars)\")\n\n# Get all PERSON entities from ki_content\ncursor = db.execute(\"SELECT id, name FROM entities WHERE type = 'PERSON'\")\npersons = cursor.fetchall()\ncursor.close()\n\nprint(f\"Re-kategorisiere {len(persons)} PERSON-Einträge...\")\n\nentity_names = [p['name'] for p in persons]\nprint(f\"Entities: {entity_names}\")\nprint()\n\nentities_json = json.dumps(entity_names, ensure_ascii=False)\nprompt = prompt_template.replace(\"{entities}\", entities_json)\n\nprint(\"Calling LLM...\")\nresp = requests.post(\n f\"{OLLAMA_HOST}\/api\/generate\",\n json={\"model\": MODEL, \"prompt\": prompt, \"stream\": False, \"format\": \"json\"},\n timeout=120\n)\ndata = resp.json()\nresult = json.loads(data.get(\"response\", \"{}\"))\ncategorized = result.get(\"kategorisiert\", [])\n\nprint(f\"Got {len(categorized)} categorizations\\n\")\n\n# Update entities\nupdated = 0\nfor cat in categorized:\n name = cat.get(\"name\")\n new_type = cat.get(\"type\", \"\").upper()\n \n if new_type and new_type != \"PERSON\":\n cursor = db.execute(\n \"UPDATE entities SET type = %s WHERE name = %s AND type = 'PERSON'\",\n (new_type, name)\n )\n if cursor.rowcount > 0:\n print(f\" {name}: PERSON -> {new_type}\")\n updated += 1\n db.commit()\n cursor.close()\n\nprint(f\"\\n{'='*60}\")\nprint(f\"Updated {updated} entities\")\n\n# Show new stats\ncursor = db.execute(\"SELECT type, COUNT(*) as cnt FROM entities GROUP BY type ORDER BY cnt DESC\")\nprint(\"\\nNeue Verteilung:\")\nfor t in cursor.fetchall():\n print(f\" {t['type']:12s}: {t['cnt']}\")\ncursor.close()\nPYTHON",
"timeout": 300000,
"description": "Re-categorize with ki_dev connection"
}
}