> ## 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.

# Modelldatei für air-gapped Devin

> Schema-Referenz und kommentiertes Beispiel für die Datei models.json, mit der air-gapped Devin auf Ihre OpenAI-kompatiblen Modell-Endpunkte verwiesen wird, sowie MDL-Codes.

> [!NOTE]
>
> Diese Dokumentation gilt für föderale Deployments von Devin. [Zurück zur Devin-Dokumentation](/de/get-started/devin-intro)

Air-gapped Devin bezieht seine Modellkonfiguration aus einer einzigen JSON-Datei, die Sie selbst erstellen. Diese Datei dient als Quelle für die Modell-Endpunkte; Inferenzanfragen werden an die darin aufgeführten OpenAI-kompatiblen Endpunkte gesendet.

## Speicherort

| Vorrang | Quelle |
| - | - |
| 1 | `$DEVIN_MODELS_FILE` (absoluter Pfad) |
| 2 | `/etc/devin/models.json` (Windows: `C:\ProgramData\Devin\models.json`) |

Die CLI, `devin models validate` und der Einstellungsbereich **Modelle** in der Desktop-App beziehen die Datei alle auf dieselbe Weise. Der Systempfad gehört in der Regel dem Benutzer root; verwenden Sie `DEVIN_MODELS_FILE` für Nutzerüberschreibungen. Unter Windows sollten Sie [`C:\ProgramData\Devin\` absichern](/de/federal/air-gapped/install#windows-lock-down-the-configuration-folder), bevor Sie die Datei dort ablegen.

## Vollständiges Beispiel

```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
    }
  ]
}
```

Das Beispiel zeigt alle Felder, beide API-Oberflächen (`chat_completions` und `responses`) sowie einen Loopback-Endpunkt mit `http://`. Kopieren Sie es nach `/etc/devin/models.json` (unter Windows nach `C:\ProgramData\Devin\models.json`) und passen Sie es an.

## Schema-Referenz (Version 0)

Oberste Ebene:

| Feld | Erforderlich | Bedeutung |
| - | - | - |
| `schema_version` | ja | Muss `0` sein. |
| `models` | ja | Nicht leeres Array von Modelleinträgen. |

Jeder Eintrag in `models`:

| Feld | Erforderlich | Bedeutung |
| - | - | - |
| `name` | ja | Eindeutiger Modell-Slug. Nutzer wählen das Modell mit `--model` in der CLI oder mit `/model` in einer Sitzung aus. |
| `display_name` | nein | Für Menschen lesbare Bezeichnung, die in Menüs angezeigt wird. Standardwert ist `name`. |
| `base_url` | ja | Basis-URL des OpenAI-kompatiblen Endpunkts. Muss mit `https://` beginnen; einfaches `http://` wird nur für Loopback-Hosts (`localhost`, `127.0.0.0/8`, `[::1]`) akzeptiert, zum Beispiel für einen vLLM- oder Ollama-Server auf derselben Maschine. |
| `api_key.env` | ja | **Name** der Umgebungsvariable, die den API-Schlüssel enthält. Der Schlüsselwert erscheint weder in der Datei noch in Diagnosedaten oder in der Settings-UI von Desktop. |
| `api` | nein | `chat_completions` (Standard) oder `responses`. |
| `capabilities` | nein | Beliebige Kombination aus `vision`, `reasoning`, `parallel_tool_calls`. |
| `max_context_tokens` | ja | Kontextfenster in Tokens; muss größer als null sein. |
| `max_output_tokens` | nein | Obergrenze für die Ausgabe in Tokens; muss größer als null sein und darf `max_context_tokens` nicht überschreiten. |
| `default` | nein | Kennzeichnet das Standardmodell. Dieses Feld darf in höchstens einem Eintrag gesetzt sein. |

Das Schema ist strikt: **Unbekannte Felder werden abgelehnt**. Ein Tippfehler führt also zu einem Validierungsfehler, statt stillschweigend ignoriert zu werden. Es gibt weder einen Endpunkt-Block auf oberster Ebene noch einen inline angegebenen API-Schlüssel.

## Umgebungsvariablen für API-Schlüssel

`api_key.env` ist eine Indirektion. Der Agent liest den Schlüssel beim Start aus seiner **eigenen Prozessumgebung**. Die Variable muss für jedes aufgeführte Modell **gesetzt** sein, auch für Endpunkte, die den Schlüssel ignorieren (etwa Ollama oder ein vLLM ohne Authentifizierung); sie darf leer sein. Andernfalls startet der Agent nicht und meldet `model '<name>': API key environment variable '<VAR>' is not set`.

* **CLI:** Exportieren Sie die Variable in der Shell oder in der systemd-/launchd-Unit, die `devin` ausführt.
* **Desktop:** Der gebündelte Agent erbt die Umgebung der **Desktop-App**, nicht die Ihres Terminals. Eine in `~/.zshrc` exportierte Variable ist für eine über Dock, Finder oder Spotlight gestartete App in der Regel nicht sichtbar. Stellen Sie sie auf eine der folgenden Arten bereit:
  * **Empfohlen:** über die Einstellung `devin.acp.agentEnv` (**Settings → Devin Local → Environment Variables** oder in `settings.json`):

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

    Die Werte werden beim Starten des Agents mit dessen Umgebung zusammengeführt. Starten Sie den Agent oder die App nach einer Änderung neu. Verwenden Sie dieselbe Einstellung für `DEVIN_MODELS_FILE`, falls die Datei nicht unter dem Standardpfad liegt.
  * **Startumgebung:** Unter macOS übergibt `open` die Umgebung Ihrer Shell nicht an die App. Führen Sie entweder `launchctl setenv VAR value` aus, um eine Variable bis zur nächsten Anmeldung für Starts über Dock und Finder sichtbar zu machen, oder starten Sie die App aus einer Shell mit exportierten Variablen, indem Sie die ausführbare Datei unter `/Applications/Devin - Airgap.app/Contents/MacOS/` direkt ausführen. Unter Linux setzen Sie die Variablen im `.desktop`-Starter oder in der systemd-Benutzerumgebung.

Prüfen Sie dies in derselben Umgebung, in der auch der Agent läuft:

```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
…
```

## Datei validieren

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

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

Optionen:

| Option | Bedeutung |
| - | - |
| `--file <path>` | Validiert eine andere Datei als die ermittelte Standarddatei. |
| `--format text` (Standard) oder `--format json` | Ausgabeformat. |

Bei Problemen wird jede Diagnosemeldung mit ihrem Code und dem Modell ausgegeben, auf das sie sich bezieht, und der Befehl wird mit einem Exit-Code ungleich null beendet:

```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])
```

Für automatisierte Abläufe gibt die JSON-Ausgabe `{"path": …, "valid": false, "diagnostics": [...]}` zurück. `devin models validate` funktioniert auch ohne gültige Lizenz, sodass Sie die Datei schon vor der Installation der Lizenz vorbereiten können.

## Änderungen anwenden

Modell-Backends werden beim Prozessstart initialisiert. Starten Sie nach dem Bearbeiten der Datei die CLI bzw. den gebündelten Agent in Desktop neu, damit die neue Konfiguration geladen wird.

Fehlt die Datei oder ist sie ungültig, startet die eigenständige CLI nicht und gibt den Fehler aus. Der gebündelte Agent von Desktop startet hingegen **eingeschränkt** und ohne Modelle: Sitzungen können keine Inferenz ausführen, und der Einstellungsbereich **Modelle** zeigt die `MDL`-Diagnosedaten an, sodass Sie die Datei direkt dort korrigieren können. Desktop validiert die Datei vor dem Speichern, schreibt niemals eine ungültige Datei, speichert atomar und verweigert (`MDL014`) das Ersetzen einer Datei, die einem anderen Nutzer gehört. Eine `/etc/devin/models.json`, deren Eigentümer root ist, kann daher nur von einem Administrator direkt auf dem Datenträger geändert werden. Gehört die Modelldatei unter Windows einem Administrator, kann ein Standardnutzer in Desktop keine Modelleinstellungen speichern (das Speichern wird mit `MDL014` verweigert); ein Administrator hingegen schon.

## Fehlercodes

| Code | Bedeutung | Vorgehensweise |
| - | - | - |
| `MDL001` | Die Datei ist kein gültiges JSON gemäß Schema v0 (z. B. wegen unbekannter Felder) | Korrigieren Sie das JSON; entfernen Sie Felder, die nicht in der obigen Schema-Tabelle aufgeführt sind |
| `MDL002` | Nicht unterstützte `schema_version` | Setzen Sie `"schema_version": 0` |
| `MDL003` | `models` ist leer | Fügen Sie mindestens einen Modelleintrag hinzu |
| `MDL004` | Ein Modell hat einen leeren `name` | Geben Sie jedem Eintrag einen eindeutigen `name` |
| `MDL005` | Doppelter Modell-`name` | Benennen Sie einen der Einträge um |
| `MDL006` | Leere `base_url` | Legen Sie die Endpunkt-URL fest |
| `MDL007` | Leeres `api_key.env` | Geben Sie die Umgebungsvariable an, die den Schlüssel enthält |
| `MDL008` | `max_context_tokens` ist null | Legen Sie das Kontextfenster des Modells fest |
| `MDL009` | Mehr als ein Modell ist als `default` markiert | Belassen Sie `default: true` nur bei genau einem Eintrag |
| `MDL010` | `base_url` ist keine `https://`-URL mit Host (`http://` nur für Loopback) | Verwenden Sie `https://` oder für einen Server auf demselben Host eine Loopback-Adresse |
| `MDL011` | `max_output_tokens` überschreitet `max_context_tokens` | Verringern Sie `max_output_tokens` |
| `MDL012` | Die Datei existiert, konnte aber nicht gelesen werden (Berechtigungen oder ungültiges UTF-8) | Korrigieren Sie die Berechtigungen für den Nutzer, unter dem Devin ausgeführt wird; speichern Sie die Datei als UTF-8 |
| `MDL013` | `max_output_tokens` ist null | Entfernen Sie das Feld oder setzen Sie einen positiven Wert |
| `MDL014` | Die Datei gehört einem anderen Nutzer, daher verweigert Desktop das Ersetzen | Bearbeiten Sie die Datei direkt auf dem Datenträger als deren Eigentümer oder lassen Sie `DEVIN_MODELS_FILE` auf eine Datei verweisen, die Ihnen gehört |

Probleme mit der Erreichbarkeit von Endpunkten und der Inferenz, die `devin airgap doctor` feststellt, werden als `NET`- und `CFG`-Codes gemeldet; siehe [Fehlercodes](/de/federal/air-gapped/error-codes).


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