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, prend en charge les sessions en attente et exécute chacune d’elles sous forme de pod worker sur n’importe quel
cluster certifié (GKE, EKS, …). Installez-le avec son chart Helm au lieu de
créer votre propre orchestrateur.
Le flux de travail principal
1. Enregistrer un outpost
rhel, gpu-h200 ou my-outpost). Créez-le 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. Point de surveillance de la fleet API pour les sessions en attente
metadata.session_id et acceptez les doublons. Consultez Lister les sessions en file d’attente et Point de surveillance des modifications pour les paramètres de requête, les structures de réponse et la sémantique complète de la pagination.
3. Prise en charge avant le provisionnement
acceptor_id — un identifiant déclaré par votre worker lui-même :
409. La prise en charge garantit qu’un worker sera prêt avant l’échéance de prise en charge attribuée 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 exécuter le worker
--acceptor-id que celui utilisé pour la prise en charge via l’API, et fournissez le token via --token ou DEVIN_OUTPOSTS_TOKEN (voir la liste complète des options). Le worker établit une connexion 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 suspendue). Arrêtez la VM ou le conteneur. Si votre outpost permet la reprise, créez 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 en charge des sessions) ? Contactez d’abord votre équipe en charge du 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 l’unique mécanisme de coordination. Chaque worker surveille la file 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 la course à la prise en charge fait partie du fonctionnement normal, ce n’est pas une erreur. - Chaque worker a sa propre identité. L’
acceptor_idlimite à ce seul worker ses prises en charge, ses renouvellements et sa récupération après redémarrage.devin worker starten génère et en conserve automatiquement un par machine, donc une flotte n’a besoin d’aucune configuration d’identité. Ne partagez jamais un ID d’acceptor (ni un répertoire de données de worker copié) entre plusieurs machines — des workers en collision se voleront mutuellement leurs prises en charge. - Les défaillances se résorbent d’elles-mêmes. Si un worker s’arrête après avoir pris en charge une session, sa prise en charge expire à l’échéance de prise en charge et la session revient dans la file 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 à partir de la distribution statique de Devin et lancez-le vous-même avec l’environnement documenté. Consultez Distribution du binaire distant et le contrat de spawn dans la documentation de référence.
