> ## Documentation Index
> Fetch the complete documentation index at: https://docs.devin.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Fichier de modèles de Devin en air gap

> Référence du schéma et exemple annoté du fichier models.json qui oriente Devin en air gap vers vos endpoints de modèles compatibles OpenAI, ainsi que les codes MDL.

> [!NOTE]
>
> Cette documentation concerne les déploiements fédéraux de Devin. [Retour à la documentation de Devin](/fr/get-started/devin-intro)

Devin en air gap lit sa configuration de modèles dans un fichier JSON unique, que vous rédigez vous-même. Ce fichier fait référence pour les endpoints de modèles : les requêtes d'inférence sont envoyées aux endpoints compatibles OpenAI qu'il répertorie.

## Emplacement

| Priorité | Source |
| - | - |
| 1 | `$DEVIN_MODELS_FILE` (chemin absolu) |
| 2 | `/etc/devin/models.json` (Windows : `C:\ProgramData\Devin\models.json`) |

La CLI, `devin models validate` et la section **Modèles** des paramètres de Desktop localisent toutes le fichier de la même manière. Le chemin système appartient généralement à root ; utilisez `DEVIN_MODELS_FILE` pour les dérogations par utilisateur. Sous Windows, [verrouillez `C:\ProgramData\Devin\`](/fr/federal/air-gapped/install#windows-lock-down-the-configuration-folder) avant d'y placer le fichier.

## Exemple complet

```json theme={null}
{
  "schema_version": 0,
  "models": [
    {
      "name": "llama-3.3-70b",
      "display_name": "Llama 3.3 70B (vLLM)",
      "base_url": "https://models.internal:8000/v1",
      "api_key": { "env": "VLLM_API_KEY" },
      "api": "chat_completions",
      "capabilities": ["parallel_tool_calls"],
      "max_context_tokens": 131072,
      "max_output_tokens": 8192,
      "default": true
    },
    {
      "name": "qwen3-vl-32b",
      "display_name": "Qwen3 VL 32B (vision)",
      "base_url": "https://gateway.internal/openai/v1",
      "api_key": { "env": "GATEWAY_API_KEY" },
      "api": "chat_completions",
      "capabilities": ["vision", "reasoning", "parallel_tool_calls"],
      "max_context_tokens": 65536,
      "max_output_tokens": 16384
    },
    {
      "name": "gpt-oss-120b",
      "display_name": "gpt-oss 120B (Responses API)",
      "base_url": "https://responses.internal:8080/v1",
      "api_key": { "env": "RESPONSES_API_KEY" },
      "api": "responses",
      "capabilities": ["reasoning"],
      "max_context_tokens": 131072
    },
    {
      "name": "llama3.1:8b",
      "display_name": "Llama 3.1 8B (Ollama)",
      "base_url": "http://localhost:11434/v1",
      "api_key": { "env": "OLLAMA_API_KEY" },
      "max_context_tokens": 32768
    }
  ]
}
```

L'exemple présente tous les champs, les deux interfaces d'API (`chat_completions` et `responses`) ainsi qu'un endpoint `http://` en loopback. Copiez-le dans `/etc/devin/models.json` (`C:\ProgramData\Devin\models.json` sous Windows), puis modifiez-le.

## Référence du schéma (version 0)

Niveau supérieur :

| Champ | Obligatoire | Signification |
| - | - | - |
| `schema_version` | oui | Doit valoir `0`. |
| `models` | oui | Tableau non vide d’entrées de modèle. |

Chaque entrée de `models` :

| Champ | Obligatoire | Signification |
| - | - | - |
| `name` | oui | Slug unique du modèle. Les utilisateurs le sélectionnent avec `--model` dans la CLI ou `/model` dans une session. |
| `display_name` | non | Libellé lisible par un humain, affiché dans les menus. Vaut `name` par défaut. |
| `base_url` | oui | URL de base de l’endpoint compatible OpenAI. Doit utiliser `https://` ; `http://` n’est accepté que pour les hôtes de loopback (`localhost`, `127.0.0.0/8`, `[::1]`), par exemple un serveur vLLM ou Ollama sur la même machine. |
| `api_key.env` | oui | **Nom** de la variable d’environnement contenant la clé d’API. La valeur de la clé n’apparaît jamais dans le fichier, dans les données de diagnostic ni dans l’interface Settings de Desktop. |
| `api` | non | `chat_completions` (par défaut) ou `responses`. |
| `capabilities` | non | Toute combinaison de `vision`, `reasoning` et `parallel_tool_calls`. |
| `max_context_tokens` | oui | Fenêtre de contexte en tokens ; doit être non nulle. |
| `max_output_tokens` | non | Plafond de sortie en tokens ; doit être non nul et ne pas dépasser `max_context_tokens`. |
| `default` | non | Désigne le modèle par défaut. Une seule entrée au maximum peut le définir. |

Le schéma est strict : **les champs inconnus sont rejetés**, si bien qu’une faute de frappe fait échouer la validation au lieu d’être ignorée silencieusement. Il n’existe ni bloc d’endpoint top-level ni clé d’API en ligne.

## Variables d’environnement de clé d’API

`api_key.env` est une indirection : l’agent lit la clé dans **l’environnement de son propre processus** au démarrage. La variable doit être **définie** pour chaque modèle listé, même pour les endpoints qui ignorent la clé (comme Ollama ou un vLLM sans authentification) ; elle peut toutefois être vide. À défaut, l’agent ne démarre pas et renvoie l’erreur `model '<name>': API key environment variable '<VAR>' is not set`.

* **CLI :** exportez la variable dans le shell, ou dans l’unité systemd/launchd, qui exécute `devin`.
* **Desktop :** l’agent intégré hérite de l’environnement de **l’application Desktop**, et non de celui de votre terminal. Une variable exportée dans `~/.zshrc` n’est généralement pas visible par une application lancée depuis le Dock, le Finder ou Spotlight. Fournissez-la de l’une des manières suivantes :
  * **Recommandé :** le paramètre `devin.acp.agentEnv` (**Settings → Devin Local → Environment Variables**, ou dans `settings.json`) :

    ```json theme={null}
    "devin.acp.agentEnv": {
      "devin-cli": { "VLLM_API_KEY": "...", "OLLAMA_API_KEY": "ollama" }
    }
    ```

    Les valeurs sont fusionnées dans l’environnement de l’agent au moment de son lancement. Redémarrez l’agent ou l’application après les avoir modifiées. Utilisez ce même paramètre pour `DEVIN_MODELS_FILE` si le fichier ne se trouve pas à l’emplacement par défaut.
  * **Environnement de lancement :** sur macOS, `open` ne transmet pas l’environnement de votre shell à l’application. Deux options : exécutez `launchctl setenv VAR value` pour rendre une variable visible aux applications lancées depuis le Dock et le Finder jusqu’à la prochaine connexion, ou démarrez l’application depuis un shell où les variables sont exportées, en exécutant directement l’exécutable situé dans `/Applications/Devin - Airgap.app/Contents/MacOS/`. Sous Linux, définissez les variables dans le lanceur `.desktop` ou dans l’environnement utilisateur systemd.

Vérifiez depuis l’environnement dans lequel l’agent s’exécute :

```sh theme={null}
devin airgap doctor
```

```text theme={null}
…
pass  model 'llama-3.3-70b': API key env var  VLLM_API_KEY is set
FAIL  model 'qwen3-vl-32b': API key env var   CFG002: environment variable 'GATEWAY_API_KEY' (referenced by `api_key.env`) is not set
…
```

## Valider le fichier

```sh theme={null}
devin models validate
```

```text theme={null}
/etc/devin/models.json: OK
```

Options :

| Option | Signification |
| - | - |
| `--file <path>` | Valide un fichier autre que celui déterminé par défaut. |
| `--format text` (par défaut) ou `--format json` | Format de sortie. |

En cas de problème, chaque diagnostic est affiché avec son code et le modèle concerné, et la commande se termine avec un code de sortie non nul :

```sh theme={null}
devin models validate --file ./models.json
```

```text theme={null}
./models.json: 2 problem(s) found
  MDL005 [model 'llama-3.3-70b']: duplicate model name 'llama-3.3-70b'
  MDL010 [model 'qwen3-vl-32b']: model 'qwen3-vl-32b': `base_url` must be an https:// URL (plain http:// is only allowed for loopback addresses: localhost, 127.0.0.0/8, or [::1])
```

La sortie JSON renvoie `{"path": …, "valid": false, "diagnostics": [...]}` pour l'automatisation. `devin models validate` fonctionne même sans licence valide : vous pouvez donc préparer le fichier avant d'installer la licence.

## Appliquer les modifications

Les backends de modèles s'initialisent au démarrage du processus. Après avoir modifié le fichier, redémarrez la CLI, ou l'agent intégré dans Desktop, pour charger la nouvelle configuration.

Si le fichier est absent ou invalide, la CLI autonome refuse de démarrer et affiche l'erreur. L'agent intégré de Desktop démarre en mode **dégradé**, sans aucun modèle : les sessions ne peuvent pas effectuer d'inférence, et la section de paramètres **Modèles** affiche les données de diagnostic `MDL` pour que vous puissiez corriger le fichier directement. Desktop valide le fichier avant de l'enregistrer, n'écrit jamais de fichier invalide, procède à des écritures atomiques et refuse (`MDL014`) de remplacer un fichier appartenant à un autre utilisateur : un fichier `/etc/devin/models.json` appartenant à root ne peut donc être modifié que par un administrateur, directement sur le disque. Sous Windows, lorsque le fichier de modèles appartient à un administrateur, un utilisateur standard ne peut pas enregistrer les paramètres de modèles depuis Desktop (l'enregistrement est refusé avec `MDL014`) ; seul un administrateur peut le faire.

## Codes d’erreur

| Code | Signification | Que faire |
| - | - | - |
| `MDL001` | Le fichier n’est pas un JSON valide pour le schéma v0, notamment en raison de champs inconnus | Corrigez le JSON ; supprimez les champs absents du tableau du schéma ci-dessus |
| `MDL002` | `schema_version` non pris en charge | Définissez `"schema_version": 0` |
| `MDL003` | `models` est vide | Ajoutez au moins une entrée de modèle |
| `MDL004` | Un modèle a un `name` vide | Attribuez un `name` unique à chaque entrée |
| `MDL005` | `name` de modèle en double | Renommez l’une des entrées |
| `MDL006` | `base_url` vide | Définissez l’URL de l’endpoint |
| `MDL007` | `api_key.env` vide | Indiquez le nom de la variable d’environnement qui contient la clé |
| `MDL008` | `max_context_tokens` vaut zéro | Définissez la fenêtre de contexte du modèle |
| `MDL009` | Plusieurs modèles sont marqués `default` | Ne conservez `default: true` que sur une seule entrée |
| `MDL010` | `base_url` n’est pas une URL `https://` comportant un hôte (`http://` est autorisé uniquement en loopback) | Utilisez `https://`, ou une adresse de loopback pour un serveur situé sur le même hôte |
| `MDL011` | `max_output_tokens` dépasse `max_context_tokens` | Réduisez `max_output_tokens` |
| `MDL012` | Le fichier existe mais n’a pas pu être lu (autorisations ou UTF-8 invalide) | Corrigez les autorisations de l’utilisateur qui exécute Devin ; enregistrez le fichier en UTF-8 |
| `MDL013` | `max_output_tokens` vaut zéro | Supprimez le champ ou définissez une valeur positive |
| `MDL014` | Le fichier appartient à un autre utilisateur ; Desktop refuse donc de le remplacer | Modifiez le fichier sur le disque en tant que propriétaire, ou faites pointer `DEVIN_MODELS_FILE` vers un fichier qui vous appartient |

Les problèmes d’accessibilité des endpoints et d’inférence détectés par `devin airgap doctor` sont signalés par des codes `NET` et `CFG` ; consultez [Codes d’erreur](/fr/federal/air-gapped/error-codes).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.