Protokoll #30707

ID30707
Zeitstempel2025-12-30 23:21:58.689159
Clientroot
IP145.224.72.245
Modellclaude-sonnet-4-20250514
Statuscompleted
Tokens894 (Input: 40, Output: 854)
Dauer79 ms
Request-Zeit2025-12-30 23:21:58.689159
Response-Zeit2025-12-30 23:21:58.767854

Request

{
    "event": "PreToolUse",
    "tool_name": "Read",
    "tool_input": {
        "file_path": "\/var\/www\/scripts\/pipeline\/generators\/content_generator.py",
        "offset": 200,
        "limit": 100
    }
}

Response

{
    "tool_response": {
        "type": "text",
        "file": {
            "filePath": "\/var\/www\/scripts\/pipeline\/generators\/content_generator.py",
            "content": "    Call LLM to generate content with protokoll logging.\n\n    Args:\n        prompt: The prompt to send\n        model: 'anthropic' or 'ollama'\n        client_name: Identifier for protokoll logging\n\n    Returns:\n        Generated text content\n    \"\"\"\n    start_time = time.time()\n    response_text = \"\"\n    tokens_input = 0\n    tokens_output = 0\n    model_name = \"\"\n    error_message = None\n    status = \"completed\"\n\n    try:\n        if model == \"anthropic\" and ANTHROPIC_API_KEY:\n            import anthropic\n\n            client = anthropic.Anthropic(api_key=ANTHROPIC_API_KEY)\n            model_name = ANTHROPIC_MODEL\n\n            message = client.messages.create(\n                model=ANTHROPIC_MODEL, max_tokens=4000, messages=[{\"role\": \"user\", \"content\": prompt}]\n            )\n            response_text = message.content[0].text\n\n            # Extract token usage from Anthropic response\n            if hasattr(message, \"usage\"):\n                tokens_input = getattr(message.usage, \"input_tokens\", 0)\n                tokens_output = getattr(message.usage, \"output_tokens\", 0)\n        else:\n            # Fallback to Ollama\n            import requests\n\n            model_name = OLLAMA_CHAT_MODEL\n\n            response = requests.post(\n                f\"{OLLAMA_HOST}\/api\/generate\",\n                json={\"model\": OLLAMA_CHAT_MODEL, \"prompt\": prompt, \"stream\": False},\n                timeout=900,  # 15 min for large models\n            )\n            response.raise_for_status()\n            result = response.json()\n            response_text = result.get(\"response\", \"\")\n\n            # Extract token counts from Ollama response\n            tokens_input = result.get(\"prompt_eval_count\", 0)\n            tokens_output = result.get(\"eval_count\", 0)\n\n        # Clean up model artifacts (Gemma, Llama, etc.)\n        artifacts = [\n            \"<start_of_turn>\",\n            \"<\/start_of_turn>\",\n            \"<end_of_turn>\",\n            \"<\/end_of_turn>\",\n            \"<\/s>\",\n            \"<|eot_id|>\",\n            \"<|im_end|>\",\n        ]\n        for artifact in artifacts:\n            response_text = response_text.replace(artifact, \"\").strip()\n\n    except Exception as e:\n        status = \"error\"\n        error_message = str(e)\n        raise\n\n    finally:\n        # Calculate duration\n        duration_ms = int((time.time() - start_time) * MS_PER_SECOND)\n\n        # Log to protokoll\n        db.log_to_protokoll(\n            client_name=client_name,\n            request=prompt,\n            response=response_text if status == \"completed\" else None,\n            model_name=model_name,\n            tokens_input=tokens_input,\n            tokens_output=tokens_output,\n            duration_ms=duration_ms,\n            status=status,\n            error_message=error_message,\n        )\n\n    return response_text\n\n\ndef generate_content(\n    order_id: int, model: str = \"anthropic\", collection: str = \"documents\", context_limit: int = 5\n) -> dict:\n    \"\"\"\n    Main content generation function.\n\n    Args:\n        order_id: Content order ID\n        model: 'anthropic' or 'ollama'",
            "numLines": 100,
            "startLine": 200,
            "totalLines": 401
        }
    }
}
← Vorheriger Zur Liste Nächster →