thread_id, checkpoints, interrupt et quotas : le même graphe pourra tourner des heures sur un portable comme sur un Mac distant sans défaillances mystérieuses.
Ce texte complète notre matrice d’inférence LLM locale (llama.cpp / Ollama), le guide RAG chunks, batch d’embedding et quotas vectoriels, l’article OpenClaw : validation JSON Schema, timeouts et retries et le playbook pont IDE, sandbox minimal, diff et sonde de santé — ensemble ils couvrent la chaîne complète des workflows LLM sur Mac. Pour le contexte produit, ouvrez l’accueil ; pour comparer les régions et les offres, la page d’achat reste consultable sans connexion (parcourir tarifs et plans ne nécessite pas de compte).
| Dimension | Angle de conception | Indication Mac distant (run long) |
|---|---|---|
| thread_id | Un identifiant stable par session ; lien avec l’identité d’audit ; interdiction d’écrivains concurrents sur la même clé. | Émettre les id côté passerelle pour éviter les collisions ; journaliser les transferts après reconnexion SSH ou WebSocket. |
| Checkpoint | Aligner unité de déploiement et espace de noms ; prévoir migrations quand le graphe ou le sérialiseur change. | Surveiller l’amplification d’écriture : croissance DB, WAL SQLite, VACUUM planifié ou fenêtres autovacuum Postgres. |
| SQLite / Postgres | SQLite + WAL sur SSD local pour agent mono-processus et faible fan-out. | Postgres + pool pour multi-workers ou audit central ; ne jamais placer les fichiers SQLite sur un montage réseau (latence, verrous). |
| interrupt | Pause aux nœuds d’approbation humaine ; persister l’état d’attente et une copie exploitable par l’UI. | Après longue inactivité, basculer vers une branche sûre ou libérer le worker pour ne pas bloquer la file des jobs nocturnes. |
| Timeout d’outil | Plafonds durs par outil + budget de sous-graphe ; distinguer premier jeton LLM et temps mural total. | Intégrer RTT et latence p95 ; harmoniser les champs de journaux avec le modèle « fusible » décrit dans l’article OpenClaw outils. |
| Quota de répertoires | Isoler espace de travail, artefacts de checkpoint, téléchargements et scratch avec seuils souples et durs. | Surveiller tempêtes d’inodes et cadence de nettoyage — voir aussi le playbook sandbox IDE pour diff git et sondes. |
Pourquoi l’état prime sur « encore plus d’outils »
LangGraph transforme l’agent en machine à états : chaque transition de nœud peut être checkpointée. C’est puissant jusqu’au jour où deux clients réutilisent le même thread_id, ou où un déploiement modifie le graphe sans migrer les tuples stockés. Traitez les checkpoints comme une partie de votre schéma : versionnez le graphe, documentez les montées de version du sérialiseur, et testez les chemins de reprise comme des migrations SQL. Sur Apple Silicon, le CPU et la mémoire unifiée ne sont souvent pas le premier goulot — ce sont le threading ambigu et les répertoires scratch non bornés.
Backends de checkpoint : SQLite contre Postgres
SQLite convient lorsqu’un seul processus possède le checkpointer, que la concurrence reste modeste et que le fichier vit sur un volume local rapide avec WAL activé. Gardez-le hors des racines synchronisées iCloud ou Dropbox, et surveillez la taille du fichier pendant les tests de charge : les runs autonomes longs peuvent insérer de nombreuses lignes par fil. Postgres s’impose avec plusieurs workers qui écrivent des checkpoints, un besoin d’audit au niveau ligne, ou un stockage central plus proche de votre API que du Mac lui-même. Utilisez un pool, des migrations explicites pour les tables du checkpointer, et des tests d’intégration couvrant décalage d’horloge et tempêtes de reconnexion. Si la base est distante alors que l’agent tourne sur un Mac loué, mesurez la latence vers le checkpointer : des commits lents se traduisent en latence de queue visible à chaque nœud.
Interruptions et humain dans la boucle
interrupt est la sortie de secours pour validations, CAPTCHA ou garde-fous policy. Persistez assez de contexte pour qu’un humain puisse approuver hors ligne : identifiant de checkpoint, arguments d’outil proposés, courte justification. À la reprise, vérifiez que le binaire du graphe correspond à celui qui a écrit le checkpoint en attente — les écarts expliquent souvent les rapports du type « ça a repris mais un nœud a sauté ». Pour les sessions distantes, ajoutez un TTL d’inactivité : si personne ne répond sous N minutes, routez vers un nœud d’échec contrôlé pour ne pas réserver indéfiniment GPU et workers.
Superposer les timeouts d’outils
Exposez trois horloges : exécution par outil, budget de sous-graphe ou de branche, et budget d’appel LLM (premier jeton contre total). Associez chaque timeout soit à une erreur structurée retentable, soit à une fin de parcours que le modèle a le droit de voir. Propagez des identifiants de corrélation à travers les sous-processus d’outils pour distinguer un client HTTP bloqué d’un CPU saturé. Cela s’aligne sur le récit JSON Schema et disjoncteur de OpenClaw sur Mac distant : réutilisez le même vocabulaire dans vos tableaux de bord.
Quotas de répertoires sandbox
Les agents écrivent : dépôts clonés, modèles téléchargés, artefacts de diff et conversions temporaires. Séparez les racines pour qu’un téléchargement incontrôlé ne remplisse pas le volume des checkpoints. Appliquez des alertes souples vers 70–80 % et des arrêts durs avant l’erreur système, et surveillez les inodes lorsque les outils créent de très nombreux petits fichiers. Couplez quotas et tâches de nettoyage périodiques liées au cycle de vie du thread_id pour éviter les fuites disque sur sessions abandonnées.
Checklist d’acceptation avant mise en production
- thread_id : préfixes de scratch cohérents pour qu’effacer une session fasse disparaître tout son espace de travail.
- Checkpoint : stockage séparé des répertoires d’upload utilisateur et du cache modèles.
- Plafonds fichier, répertoire et inodes par outil, avec alertes opérationnelles.
- interrupt : file d’attente avec TTL ou règles de réaffectation des workers.
- Après timeout d’outil : les processus enfants reçoivent SIGTERM puis SIGKILL — pas de zombies.
- Drills crash : tuer le runner (
kill -9), redémarrer, reprendre depuis le dernier checkpoint, vérifier les invariants métier.
Exploitation longue durée sur Mac distant
Sous launchd ou un conteneur léger, colocalisez journaux, checkpoints et scratch sur le même volume APFS local pour que les alertes disque aient du sens. Rejouez des jobs multi-heures sur matériel dédié : observez les courbes de croissance des checkpoints, le comportement du WAL, la latence de queue des outils et l’usage octets du sandbox dans le temps. C’est la même discipline opérationnelle que l’indexation RAG longue décrite dans notre matrice quotas vectoriels, sauf que le risque dominant devient la dérive d’état plutôt que la taille des batchs d’embedding.
Rappel HowTo
Ancrer thread_id → choisir SQLite ou Postgres et migrer → définir les contrats interrupt/reprise → superposer les timeouts → appliquer quotas et nettoyage en CI → tremper la charge sur un Mac distant dédié avec trafic réaliste. Le bloc JSON-LD HowTo dans l’en-tête détaille chaque étape pour les moteurs.
# Exemple de nommage — adaptez les préfixes à votre org
CHECKPOINT_DIR="$HOME/agent-state/checkpoints"
SANDBOX_WORKSPACE="$HOME/agent-state/scratch/$THREAD_ID"Pour industrialiser sans saturer votre machine personnelle, envisagez un nœud Mac mini M4 loué : comparez les régions sur la page d’achat, croisez avec la page tarifs, et gardez vos runbooks dans le centre d’aide. Lorsque vous serez prêt, la console reste accessible depuis l’accueil.
Voir aussi : pipelines d’outils OpenClaw · Accueil · Achat