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

# Archivo de modelos de Devin aislado de la red

> Referencia del esquema y ejemplo comentado del archivo models.json que conecta Devin aislado de la red con tus endpoints de modelos compatibles con OpenAI, además de los códigos MDL.

> [!NOTE]
>
> Esta documentación corresponde a las implementaciones federales de Devin. [Volver a la documentación de Devin](/es/get-started/devin-intro)

Devin aislado de la red obtiene su configuración de modelos de un único archivo JSON que creas tú. Este archivo define el origen de los endpoints de modelos, y la inferencia se envía a los endpoints compatibles con OpenAI que figuran en él.

## Ubicación

| Precedencia | Origen |
| - | - |
| 1 | `$DEVIN_MODELS_FILE` (ruta absoluta) |
| 2 | `/etc/devin/models.json` (Windows: `C:\ProgramData\Devin\models.json`) |

La CLI, `devin models validate` y la sección de configuración **Modelos** de la aplicación de escritorio resuelven el archivo de la misma forma. La ruta del sistema suele pertenecer a root; use `DEVIN_MODELS_FILE` para definir anulaciones por usuario. En Windows, [restrinja el acceso a `C:\ProgramData\Devin\`](/es/federal/air-gapped/install#windows-lock-down-the-configuration-folder) antes de colocar allí el archivo.

## Ejemplo completo

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

El ejemplo muestra todos los campos, ambas superficies de API (`chat_completions` y `responses`) y un endpoint `http://` de loopback. Cópialo en `/etc/devin/models.json` (`C:\ProgramData\Devin\models.json` en Windows) y modifícalo según necesites.

## Referencia del esquema (versión 0)

Nivel superior:

| Campo | Obligatorio | Significado |
| - | - | - |
| `schema_version` | sí | Debe ser `0`. |
| `models` | sí | Array no vacío de entradas de modelo. |

Cada entrada en `models`:

| Campo | Obligatorio | Significado |
| - | - | - |
| `name` | sí | Slug único del modelo. Los usuarios lo seleccionan con `--model` en la CLI o con `/model` en una sesión. |
| `display_name` | no | Etiqueta legible para humanos que se muestra en los menús. Su valor predeterminado es `name`. |
| `base_url` | sí | URL base del endpoint compatible con OpenAI. Debe usar `https://`; `http://` sin cifrar solo se acepta para hosts de loopback (`localhost`, `127.0.0.0/8`, `[::1]`), por ejemplo, un servidor vLLM u Ollama en la misma máquina. |
| `api_key.env` | sí | **Nombre** de la variable de entorno que contiene la clave de API. El valor de la clave nunca aparece en el archivo, en los diagnósticos ni en la interfaz de configuración de Desktop. |
| `api` | no | `chat_completions` (predeterminado) o `responses`. |
| `capabilities` | no | Cualquier combinación de `vision`, `reasoning` y `parallel_tool_calls`. |
| `max_context_tokens` | sí | Ventana de contexto en tokens; debe ser distinta de cero. |
| `max_output_tokens` | no | Límite de salida en tokens; debe ser distinto de cero y no puede superar `max_context_tokens`. |
| `default` | no | Marca el modelo predeterminado. Solo una entrada como máximo puede establecerlo. |

El esquema es estricto: **los campos desconocidos se rechazan**, de modo que un error tipográfico provoca un fallo de validación en lugar de ignorarse sin aviso. No existe un bloque de endpoint top-level ni una clave de API inline.

## Variables de entorno de la clave de API

`api_key.env` es una indirección. El agente lee la clave de su **propio entorno de proceso** al iniciarse. La variable debe estar **definida** para cada modelo de la lista, incluso para endpoints que ignoran la clave (como Ollama o un vLLM sin autenticación); puede estar vacía. De lo contrario, el agente no se inicia y muestra `model '<name>': API key environment variable '<VAR>' is not set`.

* **CLI:** exporta la variable en el shell (o en la unidad de systemd/launchd) que ejecuta `devin`.
* **Desktop:** el agente integrado hereda el entorno de la **aplicación Desktop**, no el de tu terminal. Una variable exportada en `~/.zshrc` normalmente no es visible para una aplicación iniciada desde el Dock, Finder o Spotlight. Proporciónala de una de estas formas:
  * **Recomendado:** la configuración `devin.acp.agentEnv` (**Settings → Devin Local → Environment Variables**, o en `settings.json`):

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

    Los valores se combinan con el entorno del agente cuando este se crea. Reinicia el agente o la aplicación después de modificarlos. Usa esta misma configuración para `DEVIN_MODELS_FILE` si el archivo no está en la ruta predeterminada.
  * **Entorno de inicio:** en macOS, `open` no transmite el entorno de tu shell a la aplicación. Puedes ejecutar `launchctl setenv VAR value` para que una variable sea visible para las aplicaciones iniciadas desde el Dock y Finder hasta el siguiente inicio de sesión, o bien iniciar la aplicación desde un shell con las variables exportadas, ejecutando directamente el ejecutable ubicado en `/Applications/Devin - Airgap.app/Contents/MacOS/`. En Linux, define las variables en el lanzador `.desktop` o en el entorno de usuario de systemd.

Compruébalo desde el mismo entorno en el que se ejecuta el agente:

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

## Valida el archivo

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

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

Opciones:

| Opción | Significado |
| - | - |
| `--file <path>` | Valida un archivo distinto del predeterminado resuelto. |
| `--format text` (predeterminado) o `--format json` | Formato de salida. |

Si se detectan problemas, cada diagnóstico se muestra con su código y el modelo al que corresponde, y el comando termina con un código de salida distinto de cero:

```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 forma JSON devuelve `{"path": …, "valid": false, "diagnostics": [...]}` para facilitar la automatización. `devin models validate` se ejecuta sin necesidad de una licencia válida, así que puedes preparar el archivo antes de instalar la licencia.

## Aplicar cambios

Los backends de los modelos se inicializan al arrancar el proceso. Después de editar el archivo, reinicia la CLI (o el agente integrado en Desktop) para cargar la nueva configuración.

Si el archivo no existe o no es válido, la CLI independiente no se inicia y muestra el error. El agente integrado de Desktop se inicia en modo **degradado** sin modelos: las sesiones no pueden ejecutar inferencias y la sección de configuración **Modelos** muestra los diagnósticos `MDL` para que puedas corregir el archivo directamente. Desktop valida el archivo antes de guardarlo, nunca escribe un archivo no válido, escribe de forma atómica y se niega (`MDL014`) a reemplazar un archivo que pertenece a otro usuario, por lo que un `/etc/devin/models.json` propiedad de root solo puede modificarlo un administrador directamente en el disco. En Windows, si el archivo de modelos pertenece a un administrador, un usuario estándar no puede guardar la configuración de modelos desde Desktop (el guardado se rechaza con `MDL014`), pero un administrador sí.

## Códigos de error

| Código | Significado | Qué hacer |
| - | - | - |
| `MDL001` | El archivo no es un JSON válido para el esquema v0 (lo que incluye campos desconocidos) | Corrige el JSON; elimina los campos que no figuren en la tabla del esquema anterior |
| `MDL002` | `schema_version` no compatible | Establece `"schema_version": 0` |
| `MDL003` | `models` está vacío | Agrega al menos una entrada de modelo |
| `MDL004` | Un modelo tiene un `name` vacío | Asigna a cada entrada un `name` único |
| `MDL005` | `name` de modelo duplicado | Renombra una de las entradas |
| `MDL006` | `base_url` vacío | Establece la URL del endpoint |
| `MDL007` | `api_key.env` vacío | Indica el nombre de la variable de entorno que contiene la clave |
| `MDL008` | `max_context_tokens` es cero | Establece la ventana de contexto del modelo |
| `MDL009` | Hay más de un modelo marcado como `default` | Deja `default: true` en una sola entrada |
| `MDL010` | `base_url` no es una URL `https://` con un host (`http://` solo se admite para loopback) | Usa `https://` o una dirección de loopback para un servidor en el mismo host |
| `MDL011` | `max_output_tokens` supera `max_context_tokens` | Reduce `max_output_tokens` |
| `MDL012` | El archivo existe, pero no se pudo leer (por permisos o UTF-8 no válido) | Corrige los permisos del usuario que ejecuta Devin; guarda el archivo en UTF-8 |
| `MDL013` | `max_output_tokens` es cero | Elimina el campo o establece un valor positivo |
| `MDL014` | El archivo pertenece a otro usuario, por lo que Desktop no puede reemplazarlo | Edita el archivo en disco como su propietario o haz que `DEVIN_MODELS_FILE` apunte a un archivo del que seas propietario |

Los problemas de conectividad con los endpoints y de inferencia que detecta `devin airgap doctor` se notifican con los códigos `NET` y `CFG`; consulta [Códigos de error](/es/federal/air-gapped/error-codes).


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