Déboguer les Timeouts du Modèle Local OpenClaw + Ollama : Cinq Correctifs pour les Pannes Silencieuses

✍️ OpenClawRadar📅 Publié: April 15, 2026🔗 Source
Déboguer les Timeouts du Modèle Local OpenClaw + Ollama : Cinq Correctifs pour les Pannes Silencieuses
Ad

Problème : Les agents OpenClaw échouent silencieusement avec les modèles Ollama locaux

Un développeur débuguant OpenClaw 2026.4.2 avec Ollama 0.20.2 et le modèle Gemma 4 26B-A4B Q8_0 sur un Mac Studio M4 Max a constaté que les agents ne répondaient pas après une commande /new, bien que le modèle fonctionne instantanément via ollama run. Aucune erreur n'apparaissait dans les logs, et l'agent n'affichait aucun indicateur de saisie.

Causes profondes et correctifs

  • Cause profonde n°1 : Générateur de slug bloquant : Le hook session-memory d'OpenClaw exécute un générateur de slug qui envoie une requête à Ollama avec un délai d'attente codé en dur de 15 secondes. Si le modèle ne peut pas traiter le prompt système d'OpenClaw à temps, OpenClaw abandonne la requête, mais Ollama continue de la traiter, bloquant ainsi les requêtes d'agent suivantes.
    Correctif : openclaw hooks disable session-memory
  • Cause profonde n°2 : Prompt système volumineux : OpenClaw injecte environ 38 500 caractères de prompt système (identité, outils, fichiers d'amorçage) par requête. Les modèles locaux nécessitent 40 à 60 secondes pour la phase de préremplissage.
    Correctif : Ajouter à la configuration pour ignorer l'injection d'amorçage et limiter les caractères :
    { "agents": { "defaults": { "skipBootstrap": true, "bootstrapTotalMaxChars": 500 } } }
    Cela réduit le prompt à environ 19 000 caractères.
  • Cause profonde n°3 : Délai d'attente inactif caché : OpenClaw a un DEFAULT_LLM_IDLE_TIMEOUT_MS de 60 secondes. Si le modèle ne produit pas un premier jeton dans ce délai, il interrompt la connexion et bascule silencieusement vers un modèle de secours (par exemple, Claude Sonnet).
    Correctif : Définir une clé de configuration non documentée :
    { "agents": { "defaults": { "llm": { "idleTimeoutSeconds": 300 } } } }
  • Cause profonde n°4 : Traitement séquentiel d'Ollama : Ollama traite les requêtes de manière séquentielle, donc les requêtes abandonnées du générateur de slug peuvent occuper des emplacements de traitement.
    Correctif : Ajouter à la configuration plist/service d'Ollama : OLLAMA_NUM_PARALLEL=4
  • Cause profonde n°5 : Délai du mode réflexion : Gemma 4 utilise par défaut une phase de réflexion/raisonnement qui ajoute 20 à 30 secondes avant le premier jeton.
    Correctif : Désactiver dans la configuration :
    { "agents": { "defaults": { "thinkingDefault": "off" } } }
Ad

Configuration complète fonctionnelle

Le développeur a fourni cette configuration complète pour une installation fonctionnelle :

{ "agents": { "defaults": { "model": { "primary": "ollama/gemma4:26b-a4b-it-q8_0", "fallbacks": ["anthropic/claude-sonnet-4-6"] }, "thinkingDefault": "off", "timeoutSeconds": 600, "skipBootstrap": true, "bootstrapTotalMaxChars": 500, "llm": { "idleTimeoutSeconds": 300 } } } }

De plus, épingler le modèle en mémoire pour éviter son déchargement entre les requêtes :

curl http://localhost:11434/api/generate -d '{"model":"gemma4:26b-a4b-it-q8_0","keep_alive":-1,"options":{"num_ctx":16384}}'

Résultats et compromis

Après application des correctifs, le premier message après /new prend environ 60 secondes en raison du préremplissage du prompt système, ce qui est décrit comme inévitable pour les modèles locaux. Les messages suivants sont rapides car Ollama met en cache l'état KV. L'installation utilise 31 Go de VRAM, 100 % du GPU et une fenêtre de contexte de 16 K, fonctionnant entièrement en local sans aucun coût d'API.

Le délai initial est le compromis pour une opération entièrement locale, la confidentialité et l'absence de coût. Le développeur note que cela en vaut la peine si ces facteurs sont prioritaires.

📖 Lire la source complète : r/LocalLLaMA

Ad

👀 See Also