Protokoll #3719
| ID | 3719 |
|---|---|
| Zeitstempel | 2025-12-22 08:26:05.424524 |
| Client | root |
| IP | Warning: Undefined array key "request_ip" in /var/www/dev.campus.systemische-tools.de/src/View/protokoll/show.php on line 13 Deprecated: htmlspecialchars(): Passing null to parameter #1 ($string) of type string is deprecated in /var/www/dev.campus.systemische-tools.de/src/View/protokoll/show.php on line 13 |
| Modell | claude-sonnet-4-20250514 |
| Status | completed |
| Tokens | 1,210 (Input: 0, Output: 0) |
| Dauer | 94 ms |
| Request-Zeit | Warning: Undefined array key "request_timestamp" in /var/www/dev.campus.systemische-tools.de/src/View/protokoll/show.php on line 18 |
| Response-Zeit | - |
Warning: Undefined array key "error_message" in /var/www/dev.campus.systemische-tools.de/src/View/protokoll/show.php on line 22
Request
{
"event": "PreToolUse",
"tool_name": "Read",
"tool_input": {
"file_path": "\/var\/www\/dev.campus.systemische-tools.de\/src\/Infrastructure\/AI\/OllamaClient.php"
}
}
Response
{
"tool_response": {
"type": "text",
"file": {
"filePath": "\/var\/www\/dev.campus.systemische-tools.de\/src\/Infrastructure\/AI\/OllamaClient.php",
"content": "<?php\n\nnamespace Infrastructure\\AI;\n\nclass OllamaClient implements AIClientInterface\n{\n private string $baseUrl;\n private string $model;\n private int $timeout;\n\n public function __construct(\n string $baseUrl = 'http:\/\/localhost:11434',\n string $model = 'mistral',\n int $timeout = 120\n ) {\n $this->baseUrl = rtrim($baseUrl, '\/');\n $this->model = $model;\n $this->timeout = $timeout;\n }\n\n public function execute(string $prompt, array $options = []): AIResponse\n {\n $model = $options['model'] ?? $this->model;\n $startTime = microtime(true);\n\n try {\n $ch = curl_init($this->baseUrl . '\/api\/generate');\n\n $payload = [\n 'model' => $model,\n 'prompt' => $prompt,\n 'stream' => false,\n ];\n\n if (isset($options['system'])) {\n $payload['system'] = $options['system'];\n }\n\n if (isset($options['temperature'])) {\n $payload['options']['temperature'] = $options['temperature'];\n }\n\n curl_setopt_array($ch, [\n CURLOPT_POST => true,\n CURLOPT_POSTFIELDS => json_encode($payload),\n CURLOPT_RETURNTRANSFER => true,\n CURLOPT_HTTPHEADER => ['Content-Type: application\/json'],\n CURLOPT_TIMEOUT => $this->timeout,\n ]);\n\n $response = curl_exec($ch);\n $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);\n $error = curl_error($ch);\n curl_close($ch);\n\n $durationMs = (int) ((microtime(true) - $startTime) * 1000);\n\n if ($error !== '') {\n return AIResponse::error(\"cURL Error: {$error}\", $model);\n }\n\n if ($httpCode !== 200) {\n return AIResponse::error(\"HTTP Error: {$httpCode}\", $model);\n }\n\n $data = json_decode($response, true);\n\n if (!isset($data['response'])) {\n return AIResponse::error('Invalid response format', $model);\n }\n\n $tokensInput = $data['prompt_eval_count'] ?? $this->estimateTokens($prompt);\n $tokensOutput = $data['eval_count'] ?? $this->estimateTokens($data['response']);\n\n return AIResponse::success(\n $data['response'],\n $tokensInput,\n $tokensOutput,\n $durationMs,\n $model,\n [\n 'total_duration' => $data['total_duration'] ?? null,\n 'load_duration' => $data['load_duration'] ?? null,\n 'eval_duration' => $data['eval_duration'] ?? null,\n ]\n );\n } catch (\\Exception $e) {\n return AIResponse::error($e->getMessage(), $model);\n }\n }\n\n public function isAvailable(): bool\n {\n try {\n $ch = curl_init($this->baseUrl . '\/api\/tags');\n curl_setopt_array($ch, [\n CURLOPT_RETURNTRANSFER => true,\n CURLOPT_TIMEOUT => 5,\n ]);\n\n $response = curl_exec($ch);\n $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);\n curl_close($ch);\n\n return $httpCode === 200;\n } catch (\\Exception $e) {\n return false;\n }\n }\n\n public function getClientName(): string\n {\n return 'ollama';\n }\n\n public function getModelName(): string\n {\n return $this->model;\n }\n\n public function listModels(): array\n {\n try {\n $ch = curl_init($this->baseUrl . '\/api\/tags');\n curl_setopt_array($ch, [\n CURLOPT_RETURNTRANSFER => true,\n CURLOPT_TIMEOUT => 10,\n ]);\n\n $response = curl_exec($ch);\n $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);\n curl_close($ch);\n\n if ($httpCode !== 200) {\n return [];\n }\n\n $data = json_decode($response, true);\n\n return array_column($data['models'] ?? [], 'name');\n } catch (\\Exception $e) {\n return [];\n }\n }\n\n private function estimateTokens(string $text): int\n {\n return max(1, (int) (strlen($text) \/ 4));\n }\n}\n",
"numLines": 151,
"startLine": 1,
"totalLines": 151
}
}
}