Protokoll #15644
| ID | 15644 |
|---|---|
| Zeitstempel | 2025-12-25 16:56:10.764418 |
| 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,366 (Input: 0, Output: 0) |
| Dauer | 136 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\/AIConfig.php"
}
}
Response
{
"tool_response": {
"type": "text",
"file": {
"filePath": "\/var\/www\/dev.campus.systemische-tools.de\/src\/Infrastructure\/AI\/AIConfig.php",
"content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Infrastructure\\AI;\n\n\/\/ @responsibility: Zentralisierte Konfiguration und Factory für AI-Services\n\nuse Infrastructure\\Config\\CredentialService;\nuse RuntimeException;\n\nfinal readonly class AIConfig\n{\n \/**\n * Konstruiert eine neue AIConfig-Instanz.\n *\n * @param string $ollamaHost Ollama API Host-URL\n * @param string $qdrantHost Qdrant API Host-URL\n * @param string $anthropicApiKey Anthropic API Key\n * @param string $embeddingModel Embedding-Modell für Ollama\n * @param string $claudeModel Claude-Modell für Anthropic\n * @param string $defaultCollection Standard-Collection für Qdrant\n *\/\n public function __construct(\n public string $ollamaHost,\n public string $qdrantHost,\n public string $anthropicApiKey,\n public string $embeddingModel,\n public string $claudeModel,\n public string $defaultCollection\n ) {\n }\n\n \/**\n * Erstellt AIConfig aus Credentials-Datei mit Default-Werten.\n *\n * Lädt den Anthropic API Key aus der credentials.md Datei und\n * verwendet Default-Werte für alle anderen Konfigurationsparameter.\n *\n * @param string|null $credentialsPath Pfad zur credentials.md Datei (optional, verwendet Environment-Variable oder Default)\n *\n * @return self Konfigurierte AIConfig-Instanz\n *\n * @throws RuntimeException Wenn Credentials-Datei nicht existiert\n * @throws RuntimeException Wenn Credentials-Datei nicht gelesen werden kann\n * @throws RuntimeException Wenn Anthropic API Key nicht gefunden wird\n *\n * @example\n * $config = AIConfig::fromCredentialsFile();\n * $chatService = $config->createChatService();\n *\/\n public static function fromCredentialsFile(?string $credentialsPath = null): self\n {\n $anthropicApiKey = self::loadAnthropicApiKey($credentialsPath);\n\n return new self(\n ollamaHost: CredentialService::getOllamaHost(),\n qdrantHost: CredentialService::getQdrantHost(),\n anthropicApiKey: $anthropicApiKey,\n embeddingModel: 'mxbai-embed-large',\n claudeModel: 'claude-opus-4-5-20251101',\n defaultCollection: 'documents'\n );\n }\n\n \/**\n * Erstellt einen konfigurierten ChatService.\n *\n * Erzeugt alle benötigten Dependencies (OllamaService, QdrantService, ClaudeService)\n * und liefert einen vollständig konfigurierten ChatService zurück.\n *\n * @return ChatService Konfigurierter ChatService\n *\n * @example\n * $config = AIConfig::fromCredentialsFile();\n * $chatService = $config->createChatService();\n * $result = $chatService->chat('Was ist systemisches Coaching?');\n *\/\n public function createChatService(): ChatService\n {\n return new ChatService(\n $this->createOllamaService(),\n $this->createQdrantService(),\n $this->createClaudeService(),\n new ScoringService()\n );\n }\n\n \/**\n * Erstellt einen konfigurierten OllamaService.\n *\n * @return OllamaService Konfigurierter OllamaService\n *\n * @example\n * $config = AIConfig::fromCredentialsFile();\n * $ollama = $config->createOllamaService();\n * $embedding = $ollama->getEmbedding('Hello World');\n *\/\n public function createOllamaService(): OllamaService\n {\n return new OllamaService($this->ollamaHost);\n }\n\n \/**\n * Erstellt einen konfigurierten QdrantService.\n *\n * @return QdrantService Konfigurierter QdrantService\n *\n * @example\n * $config = AIConfig::fromCredentialsFile();\n * $qdrant = $config->createQdrantService();\n * $results = $qdrant->search($vector, 'documents');\n *\/\n public function createQdrantService(): QdrantService\n {\n return new QdrantService($this->qdrantHost);\n }\n\n \/**\n * Erstellt einen konfigurierten ClaudeService.\n *\n * @return ClaudeService Konfigurierter ClaudeService\n *\n * @example\n * $config = AIConfig::fromCredentialsFile();\n * $claude = $config->createClaudeService();\n * $result = $claude->ask('Explain quantum computing');\n *\/\n public function createClaudeService(): ClaudeService\n {\n return new ClaudeService($this->anthropicApiKey);\n }\n\n \/**\n * Lädt den Anthropic API Key aus der Credentials-Datei.\n *\n * @param string|null $credentialsPath Pfad zur credentials.md Datei (unused, kept for BC)\n *\n * @return string Der gefundene API Key\n *\n * @throws RuntimeException Wenn API Key nicht gefunden wird\n *\/\n private static function loadAnthropicApiKey(?string $credentialsPath): string\n {\n $apiKey = CredentialService::getAnthropicApiKey();\n\n if ($apiKey === '') {\n throw new RuntimeException('Anthropic API key not found in credentials file');\n }\n\n return $apiKey;\n }\n}\n",
"numLines": 154,
"startLine": 1,
"totalLines": 154
}
}
}