APIMaster.ai
Back to Blog
APIMaster Blog

Corriger OpenCode « Le modèle ne prend pas en charge l'entrée d'image » — Vision GPT et Claude qui ne fonctionne pas

OpenCode ne lit pas votre image avec GPT ou Claude ? Le modèle gère la vision, mais OpenCode n'envoie que le nom du fichier. Corrigez-le en déclarant attachment et modalities pour gpt-5.5 et les modèles Claude dans opencode.jsonc.

OpenCodeimage inputVisionGPTClaudeopencode.jsonc

Published 2026-07-14

Quick Answer

Vous avez joint un PNG/JPG dans OpenCode, demandé à GPT ou Claude de le décrire, et reçu quelque chose comme « le modèle actuel ne prend pas en charge l'entrée d'image » — ou le modèle ne mentionne que le nom du fichier, pas l'image. Dans la quasi-totalité des cas, le modèle gère bien la vision ; le problème est qu'OpenCode n'a jamais envoyé l'image en tant qu'entrée multimodale.

Cause racine : OpenCode ne transmet une image que lorsque le modèle est déclaré compatible image dans opencode.jsonc. Sans cette déclaration, il traite la pièce jointe comme une simple référence de fichier et abandonne les pixels.

Correction rapide : ajoutez deux champs au modèle dans opencode.jsonc, puis redémarrez OpenCode :

"attachment": true,
"modalities": {
  "input": ["text", "image"],
  "output": ["text"]
}

Si vous avez besoin dès aujourd'hui d'un endpoint compatible OpenAI et capable de vision qui fonctionne avec cette configuration, APIMaster sert gpt-5.5 et les modèles vision Claude sur https://apimaster.ai/v1. Configuration complète : guide de configuration OpenCode.

À quoi ressemble ce problème

  • Vous passez à un modèle GPT ou Claude dans OpenCode, vous glissez une capture d'écran et vous demandez « décris cette image ».
  • La réponse est une variante de « Je ne peux pas lire les images », « l'entrée d'image n'est pas prise en charge pour ce modèle », ou le modèle répond à propos d'un nom de fichier (screenshot.png) au lieu du contenu réel.
  • La même image fonctionne parfaitement lorsque vous la collez directement dans ChatGPT ou Claude.

Ce n'est pas une limitation du modèle ni une clé API cassée. gpt-5.5, claude-sonnet-4-6, claude-opus-4-7, claude-opus-4-8 et claude-haiku-4-5 acceptent tous l'entrée d'image via l'API Chat Completions compatible OpenAI. L'image n'a simplement jamais quitté OpenCode.

Pourquoi cela se produit

OpenCode décide modèle par modèle si une pièce jointe peut être envoyée, et si cette pièce jointe peut être une image. Il lit cette information dans la configuration de votre fournisseur dans opencode.jsonc. Si votre entrée de modèle ressemble à ceci :

"gpt-5.5": {
  "name": "gpt-5.5"
}

…alors OpenCode n'a aucun signal indiquant que le modèle accepte les images. Selon la version, il refuse de joindre le fichier ou ne transmet que le nom de la pièce jointe dans le texte du prompt. Le modèle reçoit "[attachment: diagram.png]" — une chaîne de caractères, pas une image — et répond à juste titre qu'aucune image ne lui a été fournie.

La solution consiste à indiquer explicitement deux choses à OpenCode :

Champ Signification
"attachment": true Ce modèle est autorisé à recevoir des pièces jointes.
"modalities": { "input": ["text", "image"] } Ce modèle accepte l'entrée image, donc OpenCode convertit le fichier en bloc de contenu multimodal image_url.

Une fois les deux définis, OpenCode encode l'image en base64 et l'envoie comme véritable entrée vision — et le modèle la lit.

Comment le corriger

1. Localisez votre opencode.jsonc

OS Chemin
macOS / Linux ~/.config/opencode/opencode.jsonc
Windows C:\Users\<username>\.config\opencode\opencode.jsonc

2. Ajoutez attachment + modalities à chaque modèle vision

Voici un bloc de fournisseur fonctionnel pour GPT et Claude sur un endpoint compatible OpenAI :

{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "apimaster": {
      "name": "APIMaster.ai",
      "npm": "@ai-sdk/openai-compatible",
      "options": {
        "baseURL": "https://apimaster.ai/v1"
      },
      "models": {
        "gpt-5.5": {
          "name": "gpt-5.5",
          "attachment": true,
          "modalities": {
            "input": ["text", "image"],
            "output": ["text"]
          }
        },
        "claude-sonnet-4-6": {
          "name": "claude-sonnet-4-6",
          "attachment": true,
          "modalities": {
            "input": ["text", "image"],
            "output": ["text"]
          }
        }
      }
    }
  }
}

L'exemple complet couvrant claude-opus-4-7, claude-opus-4-8, claude-haiku-4-5 et les variantes de raisonnement se trouve dans le guide de configuration OpenCode. Vous pouvez activer l'entrée d'image pour un seul modèle — seul ce modèle a besoin des deux champs.

3. Utilisez la bonne base URL

L'hôte compatible OpenAI est :

https://apimaster.ai/v1

N'utilisez pas https://api.apimaster.ai/v1 — l'hôte avec le préfixe api. peut provoquer des échecs TLS / de connexion.

4. Redémarrez OpenCode

Les modifications de configuration sont chargées au démarrage. Quittez complètement puis rouvrez OpenCode, ou au minimum démarrez une nouvelle session, sinon l'ancienne configuration (aveugle aux images) reste active.

5. Préférez l'upload local / base64 aux URL publiques

Uploadez un PNG/JPG local dans OpenCode — il est converti en URL de données base64, ce qui est la voie fiable. Passer directement une URL d'image publique peut échouer, car l'upstream doit la télécharger et peut se heurter à des limites de format, de taille, de MIME ou de hotlink :

Error while downloading file. Upstream status code: 400.

Si vous voyez cela, passez à un fichier local / URL de données base64 au lieu d'une URL distante.

Vérifiez que ça fonctionne

Dans OpenCode

Passez à apimaster/gpt-5.5 ou apimaster/claude-sonnet-4-6, uploadez une image et demandez :

Describe the main content of this image.

Une configuration correcte renvoie une vraie description. Si le modèle ne voit toujours qu'un nom de fichier, les champs attachment / modalities sont manquants ou OpenCode n'a pas été redémarré.

Directement via l'API (isoler le problème)

Pour confirmer que l'endpoint lui-même gère la vision — en séparant un problème de configuration OpenCode d'un problème de fournisseur — envoyez une image base64. Ne codez jamais en dur une vraie clé ; utilisez une variable d'environnement :

export APIMASTER_API_KEY="your APIMaster API key"

curl https://apimaster.ai/v1/chat/completions \
  -H "Authorization: Bearer $APIMASTER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-5.5",
    "messages": [
      {
        "role": "user",
        "content": [
          { "type": "text", "text": "Describe this image." },
          {
            "type": "image_url",
            "image_url": { "url": "data:image/png;base64,YOUR_IMAGE_BASE64" }
          }
        ]
      }
    ],
    "max_tokens": 1000
  }'

Remplacez model par claude-sonnet-4-6 pour tester Claude de la même manière. Une réponse 200 qui décrit l'image signifie que la vision fonctionne au niveau de l'API — donc tout échec restant est du côté de la configuration OpenCode.

Gardez votre clé API en sécurité

  • Ne mettez jamais la clé API dans opencode.jsonc. Ce fichier ne contient que le fournisseur, les modèles et les capacités.
  • Configurez la clé via le flux /connect d'OpenCode, l'interface Connect Provider, ou une variable d'environnement.
  • Ne collez pas la clé dans des chats, captures d'écran, tickets ou dépôts publics. En cas de fuite, révoquez-la et régénérez-la immédiatement dans la console de votre fournisseur.

Comment APIMaster vous aide

Si vous voulez un unique endpoint compatible OpenAI où la vision GPT et Claude « fonctionne tout simplement » avec la configuration ci-dessus, APIMaster est conçu exactement pour cela :

Avantage Ce que vous obtenez
Un endpoint, plusieurs modèles vision gpt-5.5, claude-sonnet-4-6, claude-opus-4-7, claude-opus-4-8, claude-haiku-4-5 — tous compatibles image, tous sur https://apimaster.ai/v1 avec une seule clé.
Remise Tarification Marketplace jusqu'à ~90 % de réduction sur les tarifs catalogue d'OpenAI et ~85 % de réduction sur ceux de Claude (prix en direct sur le site).
Fidélité du modèle Un relais bon marché peut discrètement substituer les modèles — confirmez que vous obtenez le vrai modèle avec la détection d'empreinte.

À partir d'un rechargement de 1 $, paiement à l'usage, sans abonnement. La configuration OpenCode complète étape par étape — y compris l'entrée d'image — se trouve dans le guide de configuration OpenCode.

S'inscrire sur APIMaster →

Guides connexes

FAQ

OpenCode prend-il en charge l'entrée d'image ? Oui. OpenCode peut envoyer des images à tout modèle capable de vision, mais vous devez déclarer attachment: true et modalities.input: ["text", "image"] pour ce modèle dans opencode.jsonc. Sans cette déclaration, il n'envoie que le nom du fichier.

Quels modèles APIMaster peuvent lire les images dans OpenCode ? gpt-5.5, claude-sonnet-4-6, claude-opus-4-7, claude-opus-4-8 et claude-haiku-4-5 acceptent tous l'entrée d'image. Ajoutez les deux champs de capacité à chacun de ceux que vous voulez utiliser avec des images.

Pourquoi le modèle ne voit-il que le nom du fichier ? OpenCode n'a pas converti la pièce jointe en entrée d'image — il a mis le nom de la pièce jointe dans le texte du prompt à la place. C'est le signe révélateur que les champs attachment / modalities sont manquants.

J'ai ajouté les champs et ça échoue encore. Que faire ? Redémarrez complètement OpenCode, démarrez une nouvelle session et confirmez que le modèle actif est bien celui que vous avez configuré. Testez ensuite l'endpoint directement avec le curl base64 ci-dessus pour vérifier si le problème vient d'OpenCode ou du fournisseur.

Pourquoi une URL d'image publique a-t-elle échoué ? L'upstream doit télécharger les URL distantes et peut être bloqué par la taille, le format, le MIME ou la protection anti-hotlink (Error while downloading file. Upstream status code: 400.). Utilisez plutôt un upload local / URL de données base64.