From 02463e40d4a08f3667a8aabe009725a1920f5e0f Mon Sep 17 00:00:00 2001 From: fds2610-bot Date: Sun, 26 Apr 2026 13:07:04 +0200 Subject: [PATCH] =?UTF-8?q?Fix=20#55:=20Ollama-Erreichbarkeit=20aktiv=20pr?= =?UTF-8?q?=C3=BCfen,=20Fehler=20ins=20PHP-Log=20schreiben?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Changes.md | 8 ++++++++ src/Services/LlmService.php | 24 ++++++++++++++++++++++-- src/Views/settings/form.php | 18 +++++++++++++----- 3 files changed, 43 insertions(+), 7 deletions(-) diff --git a/Changes.md b/Changes.md index 46b3527..d6ce612 100644 --- a/Changes.md +++ b/Changes.md @@ -2,6 +2,14 @@ --- +## 2026-04-26 – KI-Diagnose: Erreichbarkeitsprüfung und Fehlerlog für Ollama + +### Geändert +- `src/Services/LlmService.php`: Neue Methode `isReachable()` für Diagnosezwecke; Fehlerlog in `callOllama()` bei cURL-Fehler oder leerer Antwort +- `src/Views/settings/form.php`: Einstellungsseite prüft jetzt aktiv, ob der Ollama-Server erreichbar ist (nicht nur ob er konfiguriert ist); zeigt bei Verbindungsfehler einen konkreten Hinweis auf `OLLAMA_HOST=0.0.0.0:11434` + +--- + ## 2026-04-26 – Leistungszeitraum als freies Textfeld ### Geändert diff --git a/src/Services/LlmService.php b/src/Services/LlmService.php index 22b9007..f144826 100644 --- a/src/Services/LlmService.php +++ b/src/Services/LlmService.php @@ -93,6 +93,17 @@ class LlmService return $data['message']['content'] ?? ''; } + /** + * Prüft ohne Timeout-Kosten, ob der Provider überhaupt erreichbar ist. + * Nur für Diagnosezwecke (Einstellungsseite) – nicht im normalen Request-Pfad nutzen. + */ + public function isReachable(): bool + { + if ($this->mode === null) return false; + if ($this->mode === 'ollama') return $this->probeOllama($this->url); + return true; // OpenAI-Modus: kein schneller Probe verfügbar + } + private function detect(): void { $ollamaUrl = getenv('OLLAMA_URL') ?: ($_ENV['OLLAMA_URL'] ?? ''); @@ -147,7 +158,8 @@ class LlmService 'stream' => false, ]; - $ch = curl_init($this->url . '/api/generate'); + $endpoint = $this->url . '/api/generate'; + $ch = curl_init($endpoint); curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true, @@ -157,9 +169,17 @@ class LlmService ]); $response = curl_exec($ch); $err = curl_error($ch); + $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); - if ($err || !$response) return ''; + if ($err) { + error_log("[Steuerkram] LlmService::callOllama() cURL-Fehler auf {$endpoint}: {$err}"); + return ''; + } + if (!$response) { + error_log("[Steuerkram] LlmService::callOllama() leere Antwort von {$endpoint} (HTTP {$httpCode})"); + return ''; + } return json_decode($response, true)['response'] ?? ''; } diff --git a/src/Views/settings/form.php b/src/Views/settings/form.php index 96b5e3b..22a0f8e 100644 --- a/src/Views/settings/form.php +++ b/src/Views/settings/form.php @@ -140,14 +140,22 @@ Konfiguration via .env (lokales Ollama oder Remote-API).

getProviderLabel(); + $reachable = $providerLabel !== null ? $llm->isReachable() : false; + $ollamaUrlEnv = getenv('OLLAMA_URL') ?: ($_ENV['OLLAMA_URL'] ?? ''); ?> -

- - ✓ Provider erkannt: +

+ + ✓ Provider erreichbar: + + ✗ Provider konfiguriert (), aber Server nicht erreichbar. + Prüfe ob Ollama auf dem Host läuft und auf allen Interfaces hört (OLLAMA_HOST=0.0.0.0:11434). + Details im PHP-Fehlerlog des Webservers (docker compose logs web). + + ✗ OLLAMA_URL gesetzt (), aber kein Provider erkannt. - — Kein LLM-Provider konfiguriert oder erreichbar (Auto-Discovery localhost:11434 fehlgeschlagen) + — Kein LLM-Provider konfiguriert (Auto-Discovery localhost:11434 fehlgeschlagen)