From 781520afd89ef1100b84f4347656f2a3f0200667 Mon Sep 17 00:00:00 2001 From: Michael SCHAL Date: Mon, 17 Aug 2026 16:57:30 +0200 Subject: [PATCH] Vision : la sonde /props s'authentifie MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit engineSeesImages interrogeait /props sans en-tête Bearer. Moteur lancé avec --api-key (backend_serve.go), la sonde recevait 401, concluait « pas de vision » et les deux appelants — pièces jointes et captures — retombaient sur le texte seul : aucune image ne partait, projecteur chargé ou non. Le modèle brodait à partir du seul chemin de fichier. Vérifié en production : /props authentifié renvoie modalities.vision true avec le mmproj bien passé au moteur. authHeader est le helper déjà utilisé par tous les autres appels internes ; c'était le seul client.Get nu du paquet. Co-Authored-By: Claude Opus 5 --- internal/loki/chat_screenshot.go | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/internal/loki/chat_screenshot.go b/internal/loki/chat_screenshot.go index 5aedc7f..5e13291 100644 --- a/internal/loki/chat_screenshot.go +++ b/internal/loki/chat_screenshot.go @@ -105,6 +105,11 @@ func screenshotVisionNote() string { // modèle, ou avec un modèle sans vision (gpt-oss), le gabarit sérialise le // base64 de l'image en TEXTE — la requête vue en production pesait 55 000 // tokens pour 32 768 de contexte, et tous les tours suivants échouaient. +// +// La sonde est un appel interne comme les autres : elle DOIT s'authentifier. +// Sans l'en-tête Bearer, un moteur protégé par API_KEY répond 401 et la sonde +// conclut « pas de vision » — le projecteur était bien chargé, les images ne +// partaient jamais et le modèle brodait à partir du seul chemin de fichier. var ( visionProbeMu sync.Mutex visionProbeAt time.Time @@ -120,7 +125,12 @@ func engineSeesImages() bool { visionProbeAt = time.Now() visionProbeSeen = false client := &http.Client{Timeout: 2 * time.Second} - resp, err := client.Get(fmt.Sprintf("http://localhost:%d/props", LLMPort())) + req, err := http.NewRequest(http.MethodGet, fmt.Sprintf("http://localhost:%d/props", LLMPort()), nil) + if err != nil { + return false + } + authHeader(req) + resp, err := client.Do(req) if err != nil { return false }