Vous utilisez Kubernetes ? devin-outpost-k8s
est un opérateur open source qui implémente cette boucle pour vous : il surveille la
file d’attente, récupère les sessions en attente et exécute chacune
d’elles sous la forme d’un pod worker sur n’importe quel cluster
certifié (GKE, EKS, …). Installez-le avec son chart Helm au lieu de
développer votre propre orchestrateur.
Le flux principal
1. Enregistrer un outpost
rhel, gpu-h200 ou my-outpost). Créez-en un avec devin worker outpost create :
Dans la fleet API, les outposts sont représentés par des ressources
outposts, dans le périmètre de
votre compte (partagées entre toutes ses organisations). Consultez les
endpoints des outposts.2. Surveiller la fleet API pour repérer les sessions en attente
list-then-watch : parcourez la liste page par page avec le curseur de réponse, puis démarrez une surveillance à partir de l’endroit où la liste s’est arrêtée, en conservant le curseur de chaque événement afin de pouvoir vous reconnecter sans manquer de modifications. La livraison suit une sémantique d’au moins une fois ; effectuez donc un upsert par metadata.session_id et acceptez les doublons. Consultez Lister les sessions en file d’attente et Surveiller les modifications pour les paramètres de requête, les formats de réponse et la sémantique complète de la pagination.
3. Prise en charge avant le provisionnement
acceptor_id — une identité autodéclarée de votre worker :
409. La prise en charge garantit qu’un worker sera prêt dans le délai de prise en charge défini par le serveur (status.claim_deadline) ; les prises en charge expirées retournent automatiquement dans la file d’attente. Si le provisionnement échoue, libérez la prise en charge afin que la session retourne immédiatement dans la file d’attente.
4. Lancer une machine et démarrer le worker
--acceptor-id que celui utilisé pour la prise en charge API, et fournissez le jeton via --token ou DEVIN_OUTPOSTS_TOKEN (voir la liste complète des options). Le worker établit une connexion sortante vers le cloud de Devin, marque la session comme prête et commence à exécuter des appels d’outil.
5. Arrêter la machine lorsque le worker s’arrête
devin worker start s’arrête, la session est terminée (ou a été suspendue). Arrêtez la VM ou le conteneur. Si votre outpost peut reprendre une session, effectuez un snapshot de la machine avant de l’arrêter afin de pouvoir la restaurer si la session reprend.
Votre orchestrateur peut suivre les sessions qu’il a prises en charge et leurs états :
status.session_status égal à pending, running, suspended ou terminated.
Planification sans centralisation
Vous prévoyez d’exécuter plus de ~16 coordinateurs (workers ou orchestrateurs
qui surveillent un outpost et y prennent des sessions en charge) ? Contactez d’abord l’équipe en charge de votre compte — des
flottes plus importantes amplifient la contention sur les prises en charge et la charge de lecture de la file, et nous voulons nous
assurer que l’outpost est correctement dimensionné pour cela.
- Les prises en charge sont le seul mécanisme de coordination. Chaque worker surveille la file d’attente de manière indépendante et entre en concurrence pour prendre en charge les sessions en attente. La prise en charge est un compare-and-swap atomique sur le serveur : un seul worker l’emporte, et tous les autres reçoivent un
409puis passent simplement à la session en attente suivante. Perdre une course à la prise en charge est un comportement normal, pas une erreur. - Chaque worker a sa propre identité.
acceptor_idassocie les prises en charge, les renouvellements et la reprise après redémarrage d’un worker à ce worker uniquement.devin worker starten génère une automatiquement par machine et la stocke de façon persistante, si bien qu’une flotte n’a besoin d’aucune configuration d’identité. Ne partagez jamais un identifiant d’acceptor (ni un répertoire de données de worker copié) entre plusieurs machines — des workers en conflit se voleront mutuellement leurs prises en charge. - Les défaillances se corrigent d’elles-mêmes. Si un worker s’arrête après avoir pris une session en charge, sa prise en charge expire à la deadline de prise en charge et la session retourne dans la file d’attente pour qu’un autre worker la récupère. Aucun suivi de l’état de santé à l’échelle de la flotte n’est nécessaire.
Créer un orchestrateur personnalisé
devin worker start est disponible directement via la fleet API ; vous pouvez donc remplacer entièrement la CLI : récupérez le binaire devin-remote depuis la distribution statique de Devin et lancez-le vous-même avec l’environnement décrit dans la documentation. Consultez Distribution du binaire distant et le contrat de spawn dans la documentation de référence.
