{"id":196,"date":"2026-10-09T16:01:30","date_gmt":"2026-10-09T12:01:30","guid":{"rendered":"https:\/\/demensdeum.com\/blog\/2026\/10\/09\/opencode-gigachat\/"},"modified":"2026-10-09T16:01:30","modified_gmt":"2026-10-09T12:01:30","slug":"opencode-gigachat","status":"publish","type":"post","link":"https:\/\/demensdeum.com\/blog\/fr\/2026\/10\/09\/opencode-gigachat\/","title":{"rendered":"Fournisseurs d&#8217;IA russes pour OpenCode"},"content":{"rendered":"<p>OpenCode est un agent de programmation ouvert qui fonctionne directement dans le terminal : lit les fichiers du projet, \u00e9dite le code, ex\u00e9cute des commandes et des tests, recherche dans le r\u00e9f\u00e9rentiel et fonctionne avec git. Sa force r\u00e9side dans le fait qu\u2019il n\u2019est pas li\u00e9 \u00e0 un seul fournisseur mod\u00e8le et qu\u2019il peut connecter des dizaines de fournisseurs.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/demensdeum.com\/blog\/wp-content\/uploads\/2026\/10\/aibank.jpg\"\/><\/p>\n<p>GigaChat est un grand mod\u00e8le de langage de Sber. Il ne figure pas dans la liste pr\u00eate des fournisseurs OpenCode, mais ce n&#8217;est pas un probl\u00e8me : OpenCode connecte des fournisseurs arbitraires via les packages Vercel AI SDK. Pour GigaChat, il existe un package <b>gigachat-ai-sdk-provider<\/b>, qui s&#8217;occupe de l&#8217;autorisation OAuth et de la mise \u00e0 jour du jeton d&#8217;acc\u00e8s. Une nuance distincte concerne les certificats du minist\u00e8re du D\u00e9veloppement num\u00e9rique : sans eux, Node ne fait pas confiance aux serveurs GigaChat et les demandes \u00e9chouent avec une erreur de v\u00e9rification du certificat.<\/p>\n<p>Dans cet article, je vais d\u00e9crire comment obtenir une cl\u00e9, installer des certificats et connecter GigaChat \u00e0 OpenCode.<\/p>\n<h2>Ce dont vous avez besoin<\/h2>\n<p>Pour travailler, vous avez besoin de trois choses :<\/p>\n<ul>\n<li><b>OpenCode install\u00e9.<\/b> Si l&#8217;agent n&#8217;est pas encore install\u00e9, j&#8217;ai discut\u00e9 de la proc\u00e9dure d&#8217;installation dans une note s\u00e9par\u00e9e sur OpenCode et DeepSeek.<\/li>\n<li><b>Compte GigaChat.<\/b> Inscription dans GigaChat Studio et cl\u00e9 d&#8217;autorisation\u00a0: vous aurez besoin de l&#8217;identifiant Sber pour vous connecter.<\/li>\n<li><b>Terminal moderne.<\/b> WezTerm, Alacritty, Ghostty, Kitty ou tout autre feront l&#8217;affaire.<\/li>\n<\/ul>\n<h2>Cl\u00e9 d&#8217;autorisation GigaChat<\/h2>\n<p>La cl\u00e9 est cr\u00e9\u00e9e dans votre compte personnel GigaChat Studio. Acc\u00e9dez \u00e0 Developers.sber.ru\/studio, connectez-vous et cr\u00e9ez un projet dans la section <b>API GigaChat<\/b>. Dans les param\u00e8tres du projet, il y a un bloc avec les donn\u00e9es d&#8217;autorisation : la ligne qui est copi\u00e9e \u00e0 partir de l\u00e0 est une cl\u00e9 d&#8217;autorisation pr\u00eate \u00e0 l&#8217;emploi en base64. C&#8217;est celle-ci qui est substitu\u00e9e dans la variable d&#8217;environnement, et non la paire client-secret s\u00e9par\u00e9ment.<\/p>\n<p>Avec la cl\u00e9, la <b>port\u00e9e<\/b> est sp\u00e9cifi\u00e9e &#8211; la zone d&#8217;acc\u00e8s\u00a0:<\/p>\n<ul>\n<li><b>GIGACHAT_API_PERS<\/b> &#8211; pour les particuliers.<\/li>\n<li><b>GIGACHAT_API_B2B<\/b> &#8211; pour les entrepreneurs individuels et les personnes morales.<\/li>\n<li><b>GIGACHAT_API_CORP<\/b>\u00a0&#8211;\u00a0acc\u00e8s d&#8217;entreprise.<\/li>\n<\/ul>\n<p>La valeur de cl\u00e9 affich\u00e9e doit \u00eatre enregistr\u00e9e imm\u00e9diatement : elle ne sera plus affich\u00e9e plus tard, et si n\u00e9cessaire, une nouvelle devra \u00eatre \u00e9mise.<\/p>\n<p>Il est important de comprendre quelle est cette ligne. La cl\u00e9 d&#8217;autorisation n&#8217;est pas un secret distinct, mais une paire de <b>client_id:client_secret<\/b> d\u00e9j\u00e0 encod\u00e9 en base64. La biblioth\u00e8que gigachat-js remplace cet en-t\u00eate dans la requ\u00eate OAuth\u00a0:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism undefined-numbers lang-unknown\" data-lang=\"unknown\"><code>Authorization: Basic \u0432\u0430\u0448_\u043a\u043b\u044e\u0447_\u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438\n<\/code><\/pre>\n<\/div>\n<p>En r\u00e9ponse, un jeton d&#8217;acc\u00e8s JWE a une dur\u00e9e de vie d&#8217;environ une demi-heure, puis la biblioth\u00e8que le met \u00e0 jour automatiquement. Le package lui-m\u00eame v\u00e9rifie que la valeur est similaire \u00e0 base64 et avertit si la variable contient accidentellement un secret client \u00ab brut \u00bb. Par cons\u00e9quent, il est n\u00e9cessaire de transf\u00e9rer la cha\u00eene base64 pr\u00eate \u00e0 l&#8217;emploi du compte vers la variable de configuration et d&#8217;environnement, et non la paire client_id et client_secret s\u00e9par\u00e9ment.<\/p>\n<h2>Certificats du Minist\u00e8re du D\u00e9veloppement Num\u00e9rique<\/h2>\n<p>L&#8217;API GigaChat utilise des certificats du minist\u00e8re du D\u00e9veloppement num\u00e9rique de la NCA. Le magasin de racines de confiance standard ne les a pas, donc lorsque vous essayez d&#8217;obtenir un jeton d&#8217;acc\u00e8s, la demande \u00e9choue avec une erreur telle que\u00a0:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism undefined-numbers lang-unknown\" data-lang=\"unknown\"><code>self-signed certificate in certificate chain\n<\/code><\/pre>\n<\/div>\n<p>Les certificats peuvent \u00eatre install\u00e9s au niveau du syst\u00e8me d&#8217;exploitation &#8211; ils seront alors approuv\u00e9s par le navigateur et les utilitaires syst\u00e8me. Mais OpenCode fonctionne sur Node et Bun, il est donc plus s\u00fbr et plus facile de sp\u00e9cifier le fichier de certificat directement dans la variable <b>NODE_EXTRA_CA_CERTS<\/b>. T\u00e9l\u00e9chargez les certificats racine et \u00e9metteur et placez-les dans un seul fichier PEM\u00a0:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism undefined-numbers lang-unknown\" data-lang=\"unknown\"><code>curl -s https:\/\/gu-st.ru\/content\/lending\/russian_trusted_root_ca_pem.crt -o russian_trusted_root_ca_pem.crt\ncurl -s https:\/\/gu-st.ru\/content\/lending\/russian_trusted_sub_ca_pem.crt -o russian_trusted_sub_ca_pem.crt\ncat russian_trusted_root_ca_pem.crt russian_trusted_sub_ca_pem.crt > russian_trusted_ca_bundle.pem\n<\/code><\/pre>\n<\/div>\n<p>Le fichier peut \u00eatre plac\u00e9 dans un emplacement pratique et son chemin complet peut \u00eatre sp\u00e9cifi\u00e9 lors du d\u00e9marrage de l&#8217;agent.<\/p>\n<p>Il y a un pi\u00e8ge ici. Les fichiers t\u00e9l\u00e9charg\u00e9s utilisent des sauts de ligne CRLF et le certificat racine n&#8217;a pas de saut de ligne de fin. Par cons\u00e9quent, un chat ordinaire concat\u00e8ne la fin du premier certificat et le d\u00e9but du second en une seule ligne\u00a0:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism undefined-numbers lang-unknown\" data-lang=\"unknown\"><code>-----END CERTIFICATE----------BEGIN CERTIFICATE-----\n<\/code><\/pre>\n<\/div>\n<p>LibreSSL &#8211; et le syst\u00e8me openssl sur macOS, je vous le rappelle, est exactement LibreSSL &#8211; n&#8217;accepte pas un tel fichier et r\u00e9pond par une erreur :<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism undefined-numbers lang-unknown\" data-lang=\"unknown\"><code>PEM routines:CRYPTO_internal:bad end line\n<\/code><\/pre>\n<\/div>\n<p>Cela signifie que le chat seul ne suffit pas. Chaque certificat doit d&#8217;abord \u00eatre ex\u00e9cut\u00e9 via openssl\u00a0: il le recodera en PEM canonique avec des sauts de ligne LF et un saut de ligne final, puis fusionn\u00e9\u00a0:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism undefined-numbers lang-unknown\" data-lang=\"unknown\"><code>openssl x509 -in russian_trusted_root_ca_pem.crt -out russian_trusted_root_ca.pem\nopenssl x509 -in russian_trusted_sub_ca_pem.crt -out russian_trusted_sub_ca.pem\ncat russian_trusted_root_ca.pem russian_trusted_sub_ca.pem > russian_trusted_ca_bundle.pem\n<\/code><\/pre>\n<\/div>\n<p>Vous pouvez v\u00e9rifier que le fichier est lu comme ceci\u00a0:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism undefined-numbers lang-unknown\" data-lang=\"unknown\"><code>openssl x509 -in russian_trusted_ca_bundle.pem -noout -subject\n<\/code><\/pre>\n<\/div>\n<p>Si les certificats proviennent d&#8217;une autre source et sont au format DER ou PKCS#7, ils peuvent \u00e9galement \u00eatre recod\u00e9s en PEM :<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism undefined-numbers lang-unknown\" data-lang=\"unknown\"><code>openssl x509 -in cert.crt -inform DER -outform PEM -out cert.pem\nopenssl pkcs7 -print_certs -in bundle.p7b -out cert.pem\n<\/code><\/pre>\n<\/div>\n<h2>Connectez-vous \u00e0 OpenCode<\/h2>\n<p>Le fournisseur est d\u00e9crit dans le fichier de configuration <b>opencode.jsonc<\/b>. OpenCode lui-m\u00eame t\u00e9l\u00e9chargera et connectera le package npm sp\u00e9cifi\u00e9 dans le champ <b>npm<\/b>, y trouvera l&#8217;usine <b>createGigaChat<\/b> et lui transmettra les options. Il suffit de lister les mod\u00e8les par leurs identifiants depuis l&#8217;API.<\/p>\n<p>Le fichier peut \u00eatre plac\u00e9 \u00e0 deux endroits :<\/p>\n<ul>\n<li><b>Global<\/b> &#8211; ~\/.config\/opencode\/opencode.jsonc. Les param\u00e8tres s&#8217;appliquent \u00e0 tous les projets utilisateur.<\/li>\n<li><b>Dans le projet<\/b> &#8211; opencode.jsonc \u00e0 la racine du projet. Cette configuration a une priorit\u00e9 plus \u00e9lev\u00e9e et peut \u00eatre valid\u00e9e en toute s\u00e9curit\u00e9 sur git.<\/li>\n<\/ul>\n<p>Les deux fichiers utilisent le m\u00eame sch\u00e9ma et sont combin\u00e9s : le fichier de projet chevauche le fichier global uniquement avec les cl\u00e9s correspondantes, les param\u00e8tres restants sont enregistr\u00e9s. L&#8217;extension .jsonc est \u00e9galement prise en charge. Si GigaChat n&#8217;est n\u00e9cessaire que pour certains r\u00e9f\u00e9rentiels, il est plus pratique de conserver le fournisseur dans la configuration du projet plut\u00f4t que dans la configuration globale.<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism undefined-numbers lang-unknown\" data-lang=\"unknown\"><code>{\n  \"$schema\": \"https:\/\/opencode.ai\/config.json\",\n  \"provider\": {\n    \"gigachat\": {\n      \"npm\": \"gigachat-ai-sdk-provider\",\n      \"name\": \"GigaChat\",\n      \"models\": {\n        \"GigaChat-2-Max\": { \"name\": \"GigaChat 2 Max\" },\n        \"GigaChat-2-Pro\": { \"name\": \"GigaChat 2 Pro\" },\n        \"GigaChat-2\": { \"name\": \"GigaChat 2 Lite\" },\n        \"GigaChat\": { \"name\": \"GigaChat\" }\n      }\n    }\n  }\n}\n<\/code><\/pre>\n<\/div>\n<p>Les mod\u00e8les disponibles avec une cl\u00e9 personnelle sont r\u00e9pertori\u00e9s ici. Si vous avez un projet pour un entrepreneur individuel ou une personne morale ayant acc\u00e8s \u00e0 GigaChat 3, ajoutez les identifiants n\u00e9cessaires de la m\u00e9thode mod\u00e8les au bloc mod\u00e8les.<\/p>\n<p>Il est plus pratique de ne pas stocker la cl\u00e9 elle-m\u00eame dans un fichier, mais de la transmettre \u00e0 une variable d&#8217;environnement : le package gigachat-js la lit automatiquement. La valeur de port\u00e9e peut \u00e9galement \u00eatre d\u00e9finie sur une variable. Il ne reste plus qu&#8217;\u00e0 d\u00e9finir le chemin d&#8217;acc\u00e8s aux certificats et \u00e0 lancer l&#8217;agent :<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism undefined-numbers lang-unknown\" data-lang=\"unknown\"><code>export GIGACHAT_CREDENTIALS=\u0432\u0430\u0448_\u043a\u043b\u044e\u0447_\u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438\nexport GIGACHAT_SCOPE=GIGACHAT_API_PERS\nexport NODE_EXTRA_CA_CERTS=\/\u043f\u0443\u0442\u044c\/\u043a\/russian_trusted_ca_bundle.pem\nopencode\n<\/code><\/pre>\n<\/div>\n<p>Cette option est \u00e9galement int\u00e9ressante car le secret ne se retrouve pas dans le stockage local auth.json : il vit uniquement dans l&#8217;environnement du processus. Ceci est plus pratique pour les lancements CI et ponctuels.<\/p>\n<h2>Mod\u00e8les<\/h2>\n<p>L&#8217;ensemble des mod\u00e8les disponibles d\u00e9pend de la cl\u00e9 de port\u00e9e. La cl\u00e9 personnelle (GIGACHAT_API_PERS) est disponible pour la famille GigaChat et GigaChat 2 :<\/p>\n<ul>\n<li><b>GigaChat<\/b> &#8211; mod\u00e8le de base.<\/li>\n<li><b>GigaChat-2<\/b>\u00a0: un mod\u00e8le rapide et l\u00e9ger pour les t\u00e2ches quotidiennes, affich\u00e9 en version Lite dans l&#8217;interface.<\/li>\n<li><b>GigaChat-2-Pro<\/b>\u00a0: un mod\u00e8le am\u00e9lior\u00e9 pour les t\u00e2ches gourmandes en ressources.<\/li>\n<li><b>GigaChat-2-Max<\/b> est le plus puissant disponible en utilisant une cl\u00e9 personnelle.<\/li>\n<\/ul>\n<p>La famille GigaChat 3 (GigaChat-3-Ultra, GigaChat-3-Pro, mod\u00e8les ouverts comme GigaChat3.5-432B-A28B-Reasoning) est visible dans le catalogue de la console, mais elle n&#8217;est pas disponible \u00e0 la cl\u00e9 personnelle : elle n\u00e9cessite un projet d&#8217;entrepreneur individuel ou une personne morale de port\u00e9e GIGACHAT_API_B2B ou GIGACHAT_API_CORP et un tarif adapt\u00e9. Sur une cl\u00e9 personnelle, un tel mod\u00e8le r\u00e9pond par une erreur :<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism undefined-numbers lang-unknown\" data-lang=\"unknown\"><code>{\"status\":404,\"message\":\"No such model\"}\n<\/code><\/pre>\n<\/div>\n<p>Vous pouvez v\u00e9rifier ce que votre cl\u00e9 g\u00e9n\u00e8re r\u00e9ellement en interrogeant la liste des mod\u00e8les\u00a0:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism undefined-numbers lang-unknown\" data-lang=\"unknown\"><code>curl -H \"Authorization: Bearer <\u0442\u043e\u043a\u0435\u043d_\u0434\u043e\u0441\u0442\u0443\u043f\u0430>\" https:\/\/gigachat.devices.sberbank.ru\/api\/v1\/models\n<\/code><\/pre>\n<\/div>\n<p>Encore deux points. Les ID de mod\u00e8le dans l&#8217;API ne correspondent pas aux noms affich\u00e9s\u00a0: le mod\u00e8le l\u00e9ger est appel\u00e9 <b>GigaChat-2<\/b> et non GigaChat-2-Lite. Et le catalogue dans la console ne montre pas la m\u00eame chose que ce qui est disponible sur votre cl\u00e9, vous devez donc vous concentrer sur la r\u00e9ponse de la m\u00e9thode des mod\u00e8les, et non sur la liste avec les prix.<\/p>\n<p>Dans l&#8217;interface, la liste des mod\u00e8les s&#8217;ouvre avec la commande :<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism undefined-numbers lang-unknown\" data-lang=\"unknown\"><code>\/models\n<\/code><\/pre>\n<\/div>\n<p>Pour le travail de routine dans le r\u00e9f\u00e9rentiel &#8211; navigation dans les fichiers, modifications mineures, ex\u00e9cution de tests &#8211; GigaChat-2 est largement suffisant. Pour les t\u00e2ches et la conception complexes, il est logique de passer \u00e0 Pro ou Max.<\/p>\n<h2>Premier lancement dans le projet<\/h2>\n<p>Acc\u00e9dez au r\u00e9pertoire du projet et lancez l&#8217;agent\u00a0:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism undefined-numbers lang-unknown\" data-lang=\"unknown\"><code>cd \u0432\u0430\u0448_\u043f\u0440\u043e\u0435\u043a\u0442\nopencode\n<\/code><\/pre>\n<\/div>\n<p>La premi\u00e8re \u00e9tape consiste \u00e0 initialiser l&#8217;agent\u00a0:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism undefined-numbers lang-unknown\" data-lang=\"unknown\"><code>\/init\n<\/code><\/pre>\n<\/div>\n<p>OpenCode analysera la structure du projet et cr\u00e9era un fichier <b>AGENTS.md<\/b> &#8211; instructions pour l&#8217;agent. Ce fichier vaut la peine d&#8217;\u00eatre engag\u00e9 dans git\u00a0: il aide l&#8217;agent \u00e0 comprendre les conventions et les mod\u00e8les adopt\u00e9s dans le projet.<\/p>\n<h2>Alternative\u00a0: proxy local<\/h2>\n<p>Si, pour une raison quelconque, vous ne souhaitez pas utiliser le fournisseur npm, un proxy local donne le m\u00eame r\u00e9sultat. L&#8217;\u00e9quipe GigaChat dispose d&#8217;un service officiel <b>gpt2giga<\/b> &#8211; FastAPI qui traduit les requ\u00eates au format OpenAI, Anthropic et Gemini dans l&#8217;API GigaChat et met \u00e0 jour le jeton d&#8217;acc\u00e8s lui-m\u00eame. Il est g\u00e9n\u00e9r\u00e9 localement sur le port 8090, apr\u00e8s quoi un fournisseur compatible OpenAI standard est configur\u00e9 dans OpenCode via le package <b>@ai-sdk\/openai-compatible<\/b> avec l&#8217;adresse de base http:\/\/localhost:8090\/v1. L&#8217;inconv\u00e9nient de cette voie est que vous devez \u00e9galement conserver un service Python en cours d&#8217;ex\u00e9cution \u00e0 c\u00f4t\u00e9 d&#8217;OpenCode.<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism undefined-numbers lang-unknown\" data-lang=\"unknown\"><code>{\n  \"$schema\": \"https:\/\/opencode.ai\/config.json\",\n  \"provider\": {\n    \"gigachat\": {\n      \"npm\": \"@ai-sdk\/openai-compatible\",\n      \"name\": \"GigaChat (proxy)\",\n      \"options\": {\n        \"baseURL\": \"http:\/\/localhost:8090\/v1\"\n      },\n      \"models\": {\n        \"GigaChat-2-Max\": { \"name\": \"GigaChat 2 Max\" }\n      }\n    }\n  }\n}\n<\/code><\/pre>\n<\/div>\n<h2>DeepSeek et autres mod\u00e8les via Cloud.ru<\/h2>\n<p>L&#8217;API GigaChat elle-m\u00eame n&#8217;a pas de mod\u00e8les DeepSeek : il existe uniquement la famille GigaChat et des mod\u00e8les pour les int\u00e9grations. Si vous avez besoin de DeepSeek dans OpenCode, mais via une passerelle cloud russe, le service Foundation Models de Cloud.ru convient. Il fournit des mod\u00e8les utilisant le protocole compatible OpenAI, il est donc connect\u00e9 \u00e0 l&#8217;aide du package standard <b>@ai-sdk\/openai-compatible<\/b>.<\/p>\n<p>Dans le catalogue Cloud.ru Foundation Models, il existe, par exemple, les mod\u00e8les suivants\u00a0:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism undefined-numbers lang-unknown\" data-lang=\"unknown\"><code>deepseek-ai\/DeepSeek-V4.1-Flash\ndeepseek-ai\/DeepSeek-V4-Flash\ndeepseek-ai\/DeepSeek-V4-Pro\n<\/code><\/pre>\n<\/div>\n<p>La cl\u00e9 est \u00e9mise dans la console Cloud.ru : section Utilisateurs, onglet Comptes de service. Nous cr\u00e9ons un compte de service au niveau du projet, puis dans ses informations d&#8217;identification, nous cr\u00e9ons une cl\u00e9 API avec le service Foundation Models. La cl\u00e9 secr\u00e8te est affich\u00e9e une fois et nous la sauvegardons.<\/p>\n<p>La configuration du fournisseur dans opencode.json ressemble \u00e0 ceci\u00a0:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism undefined-numbers lang-unknown\" data-lang=\"unknown\"><code>{\n  \"$schema\": \"https:\/\/opencode.ai\/config.json\",\n  \"provider\": {\n    \"cloudru\": {\n      \"npm\": \"@ai-sdk\/openai-compatible\",\n      \"name\": \"Cloud.ru Foundation Models\",\n      \"options\": {\n        \"baseURL\": \"https:\/\/foundation-models.api.cloud.ru\/v1\",\n        \"apiKey\": \"{env:CLOUDRU_API_KEY}\"\n      },\n      \"models\": {\n        \"deepseek-ai\/DeepSeek-V4.1-Flash\": { \"name\": \"DeepSeek V4.1 Flash\", \"limit\": { \"context\": 1048576, \"output\": 1048576 } },\n        \"deepseek-ai\/DeepSeek-V4-Flash\": { \"name\": \"DeepSeek V4 Flash\", \"limit\": { \"context\": 1048576, \"output\": 1048576 } },\n        \"deepseek-ai\/DeepSeek-V4-Pro\": { \"name\": \"DeepSeek V4 Pro\", \"limit\": { \"context\": 1048576, \"output\": 1048576 } }\n      }\n    }\n  }\n}\n<\/code><\/pre>\n<\/div>\n<p>On passe la cl\u00e9 \u00e0 la variable d&#8217;environnement :<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism undefined-numbers lang-unknown\" data-lang=\"unknown\"><code>export CLOUDRU_API_KEY=\u0432\u0430\u0448_\u043a\u043b\u044e\u0447_cloudru\nopencode\n<\/code><\/pre>\n<\/div>\n<p>Les certificats du minist\u00e8re du D\u00e9veloppement num\u00e9rique ne sont pas n\u00e9cessaires ici : le domaine api.cloud.ru a un TLS r\u00e9gulier, contrairement \u00e0 GigaChat. Mais cela vaut la peine de surveiller le reste du projet. Si le compte est nul, l&#8217;autorisation est accept\u00e9e et les demandes sont abandonn\u00e9es avec la r\u00e9ponse de facturation\u00a0:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism undefined-numbers lang-unknown\" data-lang=\"unknown\"><code>{\"message\":\"Not enough money\"}\n<\/code><\/pre>\n<\/div>\n<p>Ce n&#8217;est pas une erreur de configuration, mais un signal indiquant que vous devez mettre \u00e0 jour le projet dans la console Cloud.ru.<\/p>\n<h2>\u00c0 quoi faire attention<\/h2>\n<p>Quelques points pratiques qui g\u00eanent le plus souvent lors de la premi\u00e8re mise en place :<\/p>\n<ul>\n<li><b>Erreur de v\u00e9rification du certificat.<\/b> Le message concernant le certificat auto-sign\u00e9 dans la cha\u00eene signifie que la variable NODE_EXTRA_CA_CERTS n&#8217;a pas \u00e9t\u00e9 r\u00e9cup\u00e9r\u00e9e. V\u00e9rifiez le chemin d&#8217;acc\u00e8s au fichier, que l&#8217;agent s&#8217;ex\u00e9cute dans le m\u00eame environnement, ainsi que le fichier lui-m\u00eame\u00a0: si, lors de la fusion de deux certificats \u00e0 l&#8217;aide de cat, leurs extr\u00e9mit\u00e9s se retrouvent sur la m\u00eame ligne, LibreSSL renverra une mauvaise ligne de fin et le bundle devra \u00eatre reconstruit via openssl, comme dans la section sur les certificats.<\/li>\n<li><b>Erreur 401.<\/b> En r\u00e8gle g\u00e9n\u00e9rale, il s&#8217;agit d&#8217;une cl\u00e9 d&#8217;autorisation incorrecte ou d&#8217;un champ d&#8217;application incompatible\u00a0: pour un individu, vous avez besoin de GIGACHAT_API_PERS.<\/li>\n<li><b>Erreur 404 avec le texte Aucun mod\u00e8le de ce type.<\/b> Il ne s&#8217;agit pas d&#8217;un \u00e9chec de connexion, mais d&#8217;un manque d&#8217;acc\u00e8s \u00e0 un mod\u00e8le sp\u00e9cifique. Supprimez-le de la configuration ou remplacez-le par un disponible. Dans un message tel que GigaChat 404\u00a0: Erreur inconnue, la m\u00eame r\u00e9ponse GigaChat est \u00e0 bl\u00e2mer\u00a0: le fournisseur n&#8217;a tout simplement pas pu analyser le corps de l&#8217;erreur.<\/li>\n<li><b>Co\u00fbt.<\/b> OpenCode ne n\u00e9cessite pas d&#8217;abonnement\u00a0: vous payez GigaChat directement lorsque vous d\u00e9pensez des jetons, le prix des longues sessions est donc pr\u00e9visible.<\/li>\n<li><b>Qualit\u00e9 du mod\u00e8le.<\/b> Pour les t\u00e2ches architecturales complexes, les mod\u00e8les de diff\u00e9rentes classes diff\u00e8rent. Par cons\u00e9quent, pour la conception, il est logique de prendre un mod\u00e8le plus solide et de confier la routine \u00e0 un mod\u00e8le plus rapide.<\/li>\n<\/ul>\n<h2>Liens<\/h2>\n<p><a href=\"https:\/\/opencode.ai\/\" rel=\"noopener\" target=\"_blank\">https:\/\/opencode.ai\/<\/a><br \/>\n<a href=\"https:\/\/opencode.ai\/docs\/providers\/\" rel=\"noopener\" target=\"_blank\">https:\/\/opencode.ai\/docs\/providers\/<\/a><br \/>\n<a href=\"https:\/\/developers.sber.ru\/studio\/\" rel=\"noopener\" target=\"_blank\">https:\/\/developers.sber.ru\/studio\/<\/a><br \/>\n<a href=\"https:\/\/developers.sber.ru\/docs\/ru\/gigachat\/guides\/main\" rel=\"noopener\" target=\"_blank\">https:\/\/developers.sber.ru\/docs\/ru\/gigachat\/guides\/main<\/a><br \/>\n<a href=\"https:\/\/github.com\/nyddle\/gigachat-ai-sdk-provider\" rel=\"noopener\" target=\"_blank\">https:\/\/github.com\/nyddle\/gigachat-ai-sdk-provider<\/a><br \/>\n<a href=\"https:\/\/github.com\/ai-forever\/gpt2giga\" rel=\"noopener\" target=\"_blank\">https:\/\/github.com\/ai-forever\/gpt2giga<\/a><br \/>\n<a href=\"https:\/\/cloud.ru\/docs\/foundation-models\/ug\/topics\/quickstart\" rel=\"noopener\" target=\"_blank\">https:\/\/cloud.ru\/docs\/foundation-models\/ug\/topics\/quickstart<\/a><\/p>\n<h2>Sources<\/h2>\n<p><a href=\"https:\/\/opencode.ai\/docs\/providers\/#custom-provider\" rel=\"noopener\" target=\"_blank\">https:\/\/opencode.ai\/docs\/providers\/#custom-provider<\/a><br \/>\n<a href=\"https:\/\/developers.sber.ru\/docs\/ru\/gigachat\/certificates\" rel=\"noopener\" target=\"_blank\">https:\/\/developers.sber.ru\/docs\/ru\/gigachat\/certificates<\/a><br \/>\n<a href=\"https:\/\/developers.sber.ru\/docs\/ru\/gigachat\/models\/main\" rel=\"noopener\" target=\"_blank\">https:\/\/developers.sber.ru\/docs\/ru\/gigachat\/models\/main<\/a><br \/>\n<a href=\"https:\/\/developers.sber.ru\/docs\/ru\/gigachat\/guides\/selecting-a-model\" rel=\"noopener\" target=\"_blank\">https:\/\/developers.sber.ru\/docs\/ru\/gigachat\/guides\/selecting-a-model<\/a><br \/>\n<a href=\"https:\/\/github.com\/nyddle\/gigachat-ai-sdk-provider\" rel=\"noopener\" target=\"_blank\">https:\/\/github.com\/nyddle\/gigachat-ai-sdk-provider<\/a><br \/>\n<a href=\"https:\/\/github.com\/ai-forever\/gpt2giga\" rel=\"noopener\" target=\"_blank\">https:\/\/github.com\/ai-forever\/gpt2giga<\/a><br \/>\n<a href=\"https:\/\/cloud.ru\/docs\/foundation-models\/ug\/topics\/quickstart\" rel=\"noopener\" target=\"_blank\">https:\/\/cloud.ru\/docs\/foundation-models\/ug\/topics\/quickstart<\/a><br \/>\n<a href=\"https:\/\/cloud.ru\/docs\/foundation-models\/ug\/topics\/overview__available__models\" rel=\"noopener\" target=\"_blank\">https:\/\/cloud.ru\/docs\/foundation-models\/ug\/topics\/overview__available__models<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>OpenCode est un agent de programmation ouvert qui fonctionne directement dans le terminal : lit les fichiers du projet, \u00e9dite le code, ex\u00e9cute des commandes et des tests, recherche dans le r\u00e9f\u00e9rentiel et fonctionne avec git. Sa force r\u00e9side dans le fait qu\u2019il n\u2019est pas li\u00e9 \u00e0 un seul fournisseur mod\u00e8le et qu\u2019il peut connecter [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[],"class_list":["post-196","post","type-post","status-publish","format-standard","hentry","category-notes"],"translation":{"provider":"WPGlobus","version":"3.0.6","language":"fr","enabled_languages":["en","ru","zh","de","ja","fr","es","pt","hi"],"languages":{"en":{"title":true,"content":true,"excerpt":false},"ru":{"title":true,"content":true,"excerpt":false},"zh":{"title":true,"content":true,"excerpt":false},"de":{"title":true,"content":true,"excerpt":false},"ja":{"title":true,"content":true,"excerpt":false},"fr":{"title":true,"content":true,"excerpt":false},"es":{"title":true,"content":true,"excerpt":false},"pt":{"title":true,"content":true,"excerpt":false},"hi":{"title":true,"content":true,"excerpt":false}}},"_links":{"self":[{"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/posts\/196","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/comments?post=196"}],"version-history":[{"count":0,"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/posts\/196\/revisions"}],"wp:attachment":[{"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/media?parent=196"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/categories?post=196"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/tags?post=196"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}