Protokoll #5332

ID5332
Zeitstempel2025-12-22 22:08:14.737688
Clientroot
IP145.224.96.190
Modellclaude-sonnet-4-20250514
Statuscompleted
Tokens1,472 (Input: 1,210, Output: 262)
Dauer27468 ms
Request-Zeit2025-12-22 22:08:14.737688
Response-Zeit2025-12-22 22:08:42.205912

Request

{
    "event": "PreToolUse",
    "tool_name": "Bash",
    "tool_input": {
        "command": "source \/var\/www\/dev.campus.systemische-tools.de\/.env && export DB_PASSWORD=\"$MARIADB_ROOT_PASSWORD\" && .\/venv\/bin\/python -c \"\nimport json\nimport time\nimport requests\nfrom db import db\n\nOLLAMA_HOST = 'http:\/\/localhost:11434'\nMODEL = 'gemma3:27b-it-qat'\n\ndef run_ollama(prompt, timeout=300):\n    start = time.time()\n    try:\n        response = requests.post(\n            f'{OLLAMA_HOST}\/api\/generate',\n            json={\n                'model': MODEL,\n                'prompt': prompt,\n                'stream': False,\n                'format': 'json',\n                'options': {'temperature': 0.3, 'num_predict': 2000}\n            },\n            timeout=timeout,\n        )\n        response.raise_for_status()\n        data = response.json()\n        elapsed = time.time() - start\n        return {\n            'response': data.get('response', ''),\n            'tokens': data.get('eval_count', 0),\n            'duration_ms': elapsed * 1000,\n            'success': True\n        }\n    except Exception as e:\n        return {'response': '', 'error': str(e), 'success': False, 'duration_ms': (time.time() - start) * 1000}\n\n# Get document content\ndb.connect()\ncursor = db.execute(\n    '''SELECT c.content FROM chunks c\n       WHERE c.document_id = 2\n       ORDER BY c.chunk_index''',\n    ()\n)\nchunks = cursor.fetchall()\ncursor.close()\ndb.disconnect()\n\nfull_text = '\\n\\n'.join([c['content'] for c in chunks])\n\n# Test 2: Taxonomy Classification\nprint('[2\/3] Taxonomy Classification...')\nprompt2 = f'''Klassifiziere den folgenden Text in passende Kategorien.\n\nWähle aus diesen Hauptkategorien:\n- Methoden (Therapiemethoden, Coaching-Techniken)\n- Theorie (Konzepte, Modelle, Grundlagen)\n- Praxis (Anwendung, Fallbeispiele, Übungen)\n- Organisation (Strukturen, Prozesse, Rollen)\n- Kommunikation (Gesprächsführung, Interaktion)\n- Entwicklung (Persönliche Entwicklung, Veränderung)\n- Teamarbeit (Teamdynamik, Zusammenarbeit)\n\nAntworte NUR im JSON-Format:\n{{\\\"categories\\\": [\\\"...\\\", \\\"...\\\"], \\\"confidence\\\": 0.0-1.0, \\\"reasoning\\\": \\\"kurze Begründung\\\"}}\n\nText:\n{full_text[:2500]}'''\n\nresult2 = run_ollama(prompt2)\nprint(f'  Duration: {result2[\\\"duration_ms\\\"]:.0f}ms')\nprint(f'  Tokens: {result2.get(\\\"tokens\\\", \\\"?\\\")}')\nif result2['success']:\n    try:\n        import re\n        json_match = re.search(r'\\{[\\s\\S]*\\}', result2['response'])\n        if json_match:\n            data = json.loads(json_match.group())\n            categories = data.get('categories', [])\n            confidence = data.get('confidence', 0)\n            reasoning = data.get('reasoning', '')\n            print(f'  Categories: {categories}')\n            print(f'  Confidence: {confidence}')\n            print(f'  Reasoning: {reasoning[:150]}...')\n        else:\n            print('  JSON parsing failed')\n            print(f'  Raw: {result2[\\\"response\\\"][:200]}...')\n    except Exception as ex:\n        print(f'  JSON parsing error: {ex}')\n        print(f'  Raw: {result2[\\\"response\\\"][:200]}...')\nelse:\n    print(f'  Error: {result2.get(\\\"error\\\")}')\n\n# Test 3: Question Generation\nprint()\nprint('[3\/3] Question Generation...')\nprompt3 = f'''Erstelle 3 Verständnisfragen zu folgendem Lerntext.\nDie Fragen sollen das Verständnis der Kernkonzepte prüfen.\n\nAntworte NUR im JSON-Format:\n{{\\\"questions\\\": [\n  {{\\\"question\\\": \\\"...\\\", \\\"answer\\\": \\\"...\\\", \\\"difficulty\\\": \\\"leicht|mittel|schwer\\\"}}\n]}}\n\nText:\n{full_text[:2500]}'''\n\nresult3 = run_ollama(prompt3)\nprint(f'  Duration: {result3[\\\"duration_ms\\\"]:.0f}ms')\nprint(f'  Tokens: {result3.get(\\\"tokens\\\", \\\"?\\\")}')\nif result3['success']:\n    try:\n        import re\n        json_match = re.search(r'\\{[\\s\\S]*\\}', result3['response'])\n        if json_match:\n            data = json.loads(json_match.group())\n            questions = data.get('questions', [])\n            print(f'  Questions generated: {len(questions)}')\n            for i, q in enumerate(questions[:3], 1):\n                print(f'    {i}. {q.get(\\\"question\\\", \\\"?\\\")[:70]}...')\n                print(f'       Answer: {q.get(\\\"answer\\\", \\\"?\\\")[:60]}...')\n                print(f'       Difficulty: {q.get(\\\"difficulty\\\", \\\"?\\\")}')\n        else:\n            print('  JSON parsing failed')\n            print(f'  Raw: {result3[\\\"response\\\"][:200]}...')\n    except Exception as ex:\n        print(f'  JSON parsing error: {ex}')\n        print(f'  Raw: {result3[\\\"response\\\"][:200]}...')\nelse:\n    print(f'  Error: {result3.get(\\\"error\\\")}')\n\"\n",
        "timeout": 600000,
        "description": "Run taxonomy and question tests with gemma3:27b"
    }
}

Response

{
    "tool_response": {
        "stdout": "[2\/3] Taxonomy Classification...\n  Duration: 7789ms\n  Tokens: 91\n  Categories: ['Praxis', 'Kommunikation', 'Teamarbeit', 'Entwicklung']\n  Confidence: 0.9\n  Reasoning: Der Text beschreibt die Anwendung der Auftragsklärung (Praxis), die damit verbundene Gesprächsführung (Kommunikation) und die verschiedenen Kontexte i...\n\n[3\/3] Question Generation...\n  Duration: 19444ms\n  Tokens: 256\n  Questions generated: 3\n    1. Warum ist eine gute Auftragsklärung so wichtig?...\n       Answer: Eine gute Auftragsklärung ist wichtig, da sie eng mit den Er...\n       Difficulty: leicht\n    2. Nenne mindestens drei Beispiele für mögliche Aufgaben, die im Rahmen e...\n       Answer: Mögliche Aufgaben sind: Teambuilding, Prozessbegleitung bei ...\n       Difficulty: mittel\n    3. Der Text beschreibt die Auftragsklärung als mehr als nur eine Servicel...\n       Answer: Die Auftragsklärung wird als erste Intervention betrachtet, ...\n       Difficulty: schwer",
        "stderr": "",
        "interrupted": false,
        "isImage": false
    }
}
← Vorheriger Zur Liste Nächster →