Sections de la base de connaissances ▾

Navigation

▸ Commencez ici Par rôles

Catégories

Outils 52
Glossaire 12

Outils

OpenHands + JoinGonka Gateway : agent sur votre propre endpoint

OpenHands est une plateforme ouverte pour le développement autonome : l'agent lit lui-même le dépôt, exécute des commandes, modifie des fichiers et mène la tâche jusqu'au résultat, tandis que vous définissez l'objectif et vérifiez le résultat. En 2026, son interface principale est Agent Canvas, une console dans le navigateur depuis laquelle vous lancez des conversations avec l'agent et des automatisations sur votre machine, dans Docker, sur un serveur ou dans le cloud OpenHands. Le code est ouvert sous licence MIT.

OpenHands ne vous impose aucun modèle : toute la couche LLM est construite sur LiteLLM, donc l'agent accepte n'importe quel endpoint compatible OpenAI. Pour JoinGonka Gateway, cela se résume à trois champs dans les paramètres : Custom Model — openai/deepseek-ai/DeepSeek-V4-Flash-0731, Base URL — https://gate.joingonka.ai/v1, API Key — votre clé jg-…. Aucun installateur séparé n'est nécessaire : tout se fait dans l'interface en quelques minutes.

Un agent autonome est le consommateur de tokens le plus gourmand : chaque étape contient un system prompt, l'historique et les résultats des outils, et une tâche comporte des dizaines d'étapes. La documentation d'OpenHands prévient explicitement : l'agent envoie beaucoup de requêtes au modèle, surveillez votre consommation. Via la passerelle, un million de tokens d'entrée coûte $0.0069 — identique pour DeepSeek V4 Flash, GLM-5.3 Flash et MiniMax M2.7 — ce qui fait que les exécutions longues ne sont plus un problème budgétaire. Après confirmation de votre adresse, 3M de tokens gratuits seront ajoutés à votre compte : c'est suffisant pour tester l'agent sur une tâche réelle et voir votre propre consommation.

Quel OpenHands utilisez-vous : quatre interfaces et une clé

Le projet possède aujourd'hui plusieurs interfaces, et l'endroit où chercher les paramètres du modèle dépend de celle que vous exécutez. Les valeurs elles-mêmes sont identiques partout, seul le chemin pour y accéder diffère.

InterfaceLancementOù configurer le modèleÉtat en septembre 2026
Agent Canvasnpx @openhands/agent-canvas ou npm install -g @openhands/agent-canvas puis la commande agent-canvas ; s'ouvre sur http://localhost:8000Settings > LLM, onglet Advancedinterface principale du projet
OpenHands CLIuv tool install openhands --python 3.12, puis openhandsassistant de premier lancement, Ctrl+P → Settings, fichier ~/.openhands/agent_settings.jsonfonctionnel, mais marqué comme projet n'étant plus activement développé dans le README
Ancienne interface web dans Dockeropenhands serve ou docker run depuis la documentation ; port 3000Settings → onglet LLM → commutateur Advancednommée Local GUI (Legacy) dans la documentation
OpenHands Cloudcloud géré par le projetmême page de paramètres LLMselon la documentation, le LLM y est configuré de la même manière ; nous n'avons pas vérifié ce chemin

Agent Canvas nécessite Node.js et uv — sur lequel fonctionne le serveur local de l'agent (détails dans les instructions d'installation). La documentation mentionne Node.js 22.12 ou supérieur, mais à partir de la version 1.17, le paquet lui-même déclare Node.js 24 ou supérieur — installez la version 24 pour éviter tout avertissement de version incompatible. Il existe également une option en conteneur : l'image ghcr.io/openhands/agent-canvas propose l'interface sur http://localhost:8000/canvas et ne voit que les répertoires que vous avez montés.

Clé JoinGonka. Inscrivez-vous sur gate.joingonka.ai/register, confirmez votre adresse et créez une clé avec le préfixe jg- dans la section « API-keys ». Une clé et un solde sont valables pour tous les modèles du réseau. La liste des outils de l'installateur @joingonka/setup ne contient pas OpenHands, et ce n'est pas un oubli : ses paramètres vivent dans l'interface et dans le stockage sécurisé du backend, et non dans un fichier de configuration texte que l'on pourrait facilement modifier de l'extérieur.

Connexion dans Agent Canvas : trois champs dans l'onglet Advanced

Étape 1. Lancez Agent Canvas et ouvrez Settings > LLM. L'assistant de premier lancement propose son propre fournisseur OpenHands — cette étape peut être ignorée, il est facile de revenir aux paramètres plus tard.

Étape 2. Cliquez sur Add LLM Profile et accédez à l'onglet Advanced : l'onglet Basic ne propose que les fournisseurs et les modèles de la liste intégrée.

Étape 3. Remplissez les trois champs :

ChampValeur
Custom Modelopenai/deepseek-ai/DeepSeek-V4-Flash-0731
Base URLhttps://gate.joingonka.ai/v1
API Keyvotre clé jg-…

Étape 4. Enregistrez le profil. Avant l'enregistrement, Canvas vérifie la configuration avec une requête depuis le backend : si la clé est refusée ou si le modèle est indisponible, le profil ne sera pas enregistré et vous verrez un message d'erreur.

Étape 5. Commencez une nouvelle conversation et envoyez un court message. Les conversations déjà ouvertes continuent de fonctionner avec le modèle avec lequel elles ont commencé.

Pourquoi openai/. LiteLLM définit le fournisseur par le préfixe du modèle. Le préfixe openai/ ne signifie pas « modèle d'OpenAI », mais « communiquer avec le serveur via le protocole OpenAI Chat Completions ». Seul le premier segment est supprimé, de sorte que le véritable identifiant atteint la passerelle — deepseek-ai/DeepSeek-V4-Flash-0731. Dans la documentation OpenHands, le même schéma est illustré avec l'exemple openai/qwen/qwen3.6-35b-a3b. Sans préfixe, LiteLLM refusera de fonctionner avec le message LLM Provider NOT provided.

Pourquoi /v1 et rien d'autre. LiteLLM accède au serveur via le client officiel OpenAI, et celui-ci ajoute automatiquement /chat/completions. C'est pourquoi l'adresse doit se terminer par /v1 : sans suffixe, la requête ne passera pas par l'API, et avec un suffixe supplémentaire, elle sera dirigée vers un chemin inexistant. Une autre exigence de Canvas : l'adresse doit être accessible depuis le backend, et pas seulement depuis le navigateur. La passerelle est une adresse HTTPS publique, elle est visible depuis le conteneur Docker de la même manière que depuis l'hôte ; les astuces comme host.docker.internal ne sont nécessaires que pour les modèles situés sur votre machine.

Profils pour les trois modèles. Créez un profil pour chaque modèle du réseau et nommez-les brièvement — par exemple deepseek, glm et minimax (la documentation mentionne une limite de dix profils). Vous pouvez basculer directement dans la conversation, sans perdre le contexte : via le bouton de sélection de profil dans le champ de saisie ou par la commande /model glm ; /model sans argument affichera la liste. Pour ne pas insérer la clé dans chaque profil, vous pouvez l'enregistrer une fois dans le bloc Provider Connections — il est disponible sur le backend local.

Ancienne interface dans Docker. Les champs sont les mêmes : Settings → onglet LLM → activer Advanced → Custom Model, Base URL, API Key → Save Changes.

Terminal et automatisation : CLI, variables d'environnement, SDK

Le CLI s'installe en une seule commande via uv et, au premier lancement, vous guide lui-même dans la configuration du modèle ; on y revient ensuite avec Ctrl+P → Settings :

uv tool install openhands --python 3.12
openhands

Pour les scripts, les variables d'environnement sont plus pratiques. Détail important : par défaut, le CLI les ignore et ne les applique qu'avec le drapeau --override-with-envs — pour un seul lancement, sans rien enregistrer :

export LLM_MODEL="openai/deepseek-ai/DeepSeek-V4-Flash-0731"
export LLM_BASE_URL="https://gate.joingonka.ai/v1"
export LLM_API_KEY="jg-your-key"

openhands --override-with-envs

Le même ensemble fonctionne sans interface — pour la CI et les tâches par lots :

openhands --headless --override-with-envs -t "Read calc.py and tell me in one sentence whether it has a bug."

En mode headless, l'agent agit toujours avec auto-approbation : lancez-le donc là où il a les coudées franches, dans un répertoire dédié ou un conteneur. Le drapeau --json transforme la sortie en flux d'événements JSONL — pratique à traiter dans un pipeline. C'est exactement ainsi que nous avons testé l'intégration le 21 septembre 2026 sur le CLI 1.16.0 : en en-tête, le CLI affiche Agent initialized with model: openai/deepseek-ai/DeepSeek-V4-Flash-0731, puis l'agent lit le fichier et répond sur le fond.

MéthodePortéeConservée ?
Settings > LLM dans Agent Canvastoutes les nouvelles conversations sur ce backendoui, dans le stockage du backend (~/.openhands)
Assistant et Ctrl+P → Settings dans le CLItous les lancements du CLIoui, dans ~/.openhands/agent_settings.json
LLM_MODEL, LLM_BASE_URL, LLM_API_KEY avec le drapeau --override-with-envsun seul lancement du CLInon
config.tomlancienne gamme V0 et mode développementclassé Legacy dans la documentation ; dans Agent Canvas et le CLI 1.x, la configuration se fait par les méthodes ci-dessus

Les paramètres enregistrés du CLI se trouvent dans ~/.openhands/agent_settings.json : on y change le modèle en modifiant trois champs du bloc llm — model, api_key et base_url. Mieux vaut ne pas créer le fichier de zéro : l'assistant du premier lancement y écrit aussi les autres réglages de l'agent, dont la compression de l'historique, sans laquelle une longue conversation finira par buter sur la fenêtre de contexte.

Si vous intégrez l'agent dans votre propre code, le SDK OpenHands accepte les trois mêmes valeurs :

from pydantic import SecretStr
from openhands.sdk import LLM

llm = LLM(
    model="openai/deepseek-ai/DeepSeek-V4-Flash-0731",
    base_url="https://gate.joingonka.ai/v1",
    api_key=SecretStr("jg-your-key"),
)

Quel modèle choisir pour de longues exécutions autonomes

Le prix des modèles du réseau est unique, donc le choix dépend du comportement. Deux chiffres sont importants pour un agent autonome. Fenêtre de contexte : chaque étape renvoie l'historique, et plus la fenêtre est longue, plus l'agent travaille longtemps sans perte. Plafond de réponse : l'étape où l'agent écrit un gros fichier en entier doit tenir dans une seule réponse. Le tableau présente les résultats de notre exécution de la même tâche (lire un fichier et trouver une erreur) via OpenHands CLI 1.16.0 avec le SDK 1.21.0.

ModèleCustom Model pour OpenHandsContextePlafond de réponseComportement dans OpenHands
DeepSeek V4 Flashopenai/deepseek-ai/DeepSeek-V4-Flash-0731380K32768A lu le fichier et a répondu de manière pertinente, sans texte superflu. Long contexte et le plus haut plafond de réponse du réseau : le choix par défaut pour les tâches de plusieurs heures
GLM-5.3 Flashopenai/zai-org/GLM-5.3-Flash390K8192Réfléchit avant de répondre ; a passé le cycle avec les outils sans erreur. Profil pour la planification et l'analyse de logique complexe, avec la nuance qu'une partie de la réponse est consacrée à la réflexion
MiniMax M2.7openai/MiniMaxAI/MiniMax-M2.7200K8192A résolu la tâche, mais a montré son raisonnement à voix haute dans le message final. Le modèle possède la plus grande capacité du réseau : profil de secours pour les heures de pointe et pour les titres de conversation

Le schéma de travail pour une tâche longue reprend les conseils de la documentation OpenHands : planifier avec un modèle, exécuter avec un autre. Commencez la conversation sur le profil glm et demandez un plan sans modifier les fichiers ; envoyez ensuite /model deepseek et donnez l'ordre d'exécuter. L'historique, les fichiers et l'état de la tâche sont conservés lors du basculement. Gardez le profil minimax en troisième position : il est pratique d'y passer quand les deux autres n'ont plus de capacité aux heures de pointe, et vous pouvez lui confier la génération des titres de conversation dans Settings > Application.

Compression de l'historique. Même une fenêtre de centaines de milliers de jetons est finie sur une tâche de plusieurs heures. Dans OpenHands, le condenseur s'en charge : il résume les anciens événements en un court résumé, ce qui, selon la documentation, réduit la latence et la consommation de jetons dans les longues conversations. Dans Agent Canvas, il se configure dans la section Settings > Condenser ; lors de notre exécution, le CLI l'a activé lui-même, avec un seuil de 80 événements.

Limites du modèle. OpenHands récupère la fenêtre de contexte et le plafond de réponse depuis le répertoire LiteLLM, et les identifiants du réseau Gonka n'y figurent pas (nous avons vérifié sur LiteLLM 1.81), donc l'agent n'a pas ses propres valeurs pour ces modèles. Cela ne gêne pas le fonctionnement : la passerelle applique elle-même le plafond de réponse, selon le tableau ci-dessus. Si vous souhaitez définir des limites explicitement, utilisez les champs max_input_tokens et max_output_tokens dans le SDK, et dans Canvas, l'onglet All permet d'accéder à l'ensemble complet des champs du profil. Plus de détails sur le modèle par défaut dans la présentation de DeepSeek V4 Flash.

Vérification et erreurs fréquentes

Vous pouvez vérifier que les requêtes passent bien par la passerelle de deux manières. Côté OpenHands : lancez une nouvelle conversation et une tâche courte comme "lis le README et résume-le en une phrase" : l'agent doit appeler un outil et répondre. Côté passerelle : dans votre tableau de bord, section "Utilisation" (Usage), la requête apparaîtra dans la répartition "Par modèles", et le bloc "Par clés" affichera l'heure de la dernière requête. Si c'est vide, la conversation se déroule sur un autre profil : vérifiez lequel est marqué comme actif.

Ce que vous voyezSignificationAction
LLM Provider NOT providedLe champ du modèle ne contient pas de préfixe de fournisseurSaisissez openai/ avant l'identifiant : openai/deepseek-ai/DeepSeek-V4-Flash-0731
Le profil n'est pas enregistré, Canvas affiche une erreur backendCanvas a vérifié la configuration par une requête réelle et a été rejetéLe texte de l'erreur est l'une des lignes ci-dessous : corrigez la clé, l'adresse ou le modèle et enregistrez à nouveau
AuthenticationError … Invalid API keyLa passerelle a répondu 401 : la clé n'est pas acceptéeInsérez la clé complète, sans espaces aux extrémités ; vérifiez dans le tableau de bord qu'elle n'a pas été révoquée
405 Not Allowed et page HTML nginxIl manque le suffixe /v1 dans la Base URLL'adresse doit être exactement https://gate.joingonka.ai/v1
404 … Invalid URL (POST /v1/v1/chat/completions)Il y a un ajout inutile dans la Base URL : un second /v1 ou le chemin /chat/completions completNe gardez que /v1 — LiteLLM ajoute le chemin lui-même
400 … Model "…" not found. Available: …L'identifiant après openai/ ne correspond à aucun modèle du réseauLa passerelle liste elle-même les modèles disponibles ; liste complète : GET https://gate.joingonka.ai/v1/models
429La limite de requêtes par minute de la clé est atteinte ou la capacité du modèle est saturée aux heures de pointeOpenHands répète lui-même la requête avec une pause progressive. Si cela persiste, changez de profil avec la commande /model ; l'état du réseau est visible sur la page de statut
402Solde insuffisantRechargez votre compte dans la section "Facturation" (Billing) ; la clé reste fonctionnelle
L'agent répond comme un chatbot : il ne touche pas aux fichiers, s'emmêle dans les appels d'outilsLe modèle ne gère pas correctement le cycle agentique ; la documentation OpenHands conseille dans ce cas de changer de modèlePassez au profil DeepSeek V4 Flash — lors de nos tests, il a effectué le cycle agentique sans problème

Selon la documentation OpenHands, le nombre de tentatives et les pauses entre elles lors d'une erreur 429 se configurent via les variables LLM_NUM_RETRIES, LLM_RETRY_MIN_WAIT et LLM_RETRY_MAX_WAIT. Les valeurs par défaut différant entre la documentation et le SDK, basez-vous sur les valeurs réelles : dans l'état de conversation CLI 1.16.0, nous avons observé 5 tentatives avec des pauses allant de 8 à 64 secondes.

Combien cela coûte et points d'attention

Via la passerelle JoinGonka, les tokens coûtent $0.0069 par million en entrée et $0.021 par million en sortie — le prix est identique pour tous les modèles du réseau et est récupéré dynamiquement sur cette page.

ScénarioConsommationVia Gateway
Tâche ponctuelle : comprendre un fichier, corrigerdizaines de milliers de tokensquelques centimes
Développement autonome d'une fonctionnalité20-50M de tokensdizaines de centimes
24h d'automatisations en arrière-plan~150M de tokensenviron un dollar

Les estimations de la colonne de droite sont basées sur les prix de septembre 2026 ; le fonctionnement économique des agents est détaillé dans l'article sur l'API la moins chère pour les agents IA.

Plafond de dépenses. OpenHands conseille de définir des limites de dépenses — la passerelle l'intègre nativement via le modèle de paiement : le solde est prépayé, et l'agent ne pourra pas dépenser plus que ce qu'il y a sur le compte. Le solde restant et la consommation quotidienne sont visibles dans le tableau de bord. Pour la CI et les automatisations en arrière-plan, créez une clé séparée afin que leur consommation ne soit pas mélangée à la vôtre ; les clés filles avec limite quotidienne sont décrites dans l'article sur les Management Keys.

Limite de confiance. Agent Canvas, lancé via npm, s'exécute avec vos droits d'utilisateur et accède à tout le système de fichiers. Pour du code externe, utilisez la version Docker : l'agent ne verra que le répertoire monté. Il s'agit d'une caractéristique propre à OpenHands, indépendante du fournisseur du modèle.

La correspondance reste chez vous. OpenHands conserve l'historique des conversations en local, dans ~/.openhands, et l'envoie au modèle à chaque étape ; la passerelle ne stocke aucune correspondance — vos prompts et votre code ne sont pas conservés après la réponse.

Si la tâche contient des images — captures d'écran, schémas — créez un profil dédié avec un modèle vision : les modèles du réseau Gonka sont textuels. Pour le code, les commandes et les fichiers, ce n'est pas une limite.

OpenHands se connecte à JoinGonka Gateway en utilisant trois champs : Custom Model openai/deepseek-ai/DeepSeek-V4-Flash-0731, Base URL https://gate.joingonka.ai/v1 et la clé jg-…. Dans Agent Canvas, cela se trouve sous l'onglet Advanced dans Settings > LLM ; en CLI, utilisez l'assistant de configuration ou définissez les variables d'environnement LLM_MODEL, LLM_BASE_URL et LLM_API_KEY avec l'indicateur --override-with-envs ; config.toml est conservé de la série précédente. Le préfixe openai/ sélectionne le protocole, pas le fournisseur, et le suffixe /v1 est obligatoire. Des exécutions en direct ont confirmé la boucle d'agent sur les trois modèles du réseau : par défaut, utilisez DeepSeek V4 Flash avec un contexte de 380K et une réponse allant jusqu'à 32768 tokens, GLM-5.3 Flash pour la planification, et MiniMax M2.7 comme profil de secours pour les heures de pointe.

Vous voulez en savoir plus ?

Explorez d'autres sections ou commencez à gagner des GNK dès maintenant.

Obtenir une clé et des tokens gratuits →