# Zed с OpenCheese

> Панель агента Zed и OpenCheese: провайдер openai_compatible в settings.json, API-ключ в хранилище ключей или OPEN_CHEESE_API_KEY, модель по умолчанию.
>
> Веб-страница: https://opencheese.dev/ru/docs/zed/ · Все страницы документации: https://opencheese.dev/ru/docs.md

Панель агента Zed подключается к OpenCheese через провайдер `openai_compatible` в файле
`settings.json` редактора и обращается к нему через OpenAI Chat Completions API по адресу
`https://api.opencheese.dev/v1`.

## 1. Откройте settings.json

Zed хранит все пользовательские настройки в одном файле. Откройте его из палитры команд командой
**zed: open settings file** или отредактируйте напрямую:

| Система | Файл |
| --- | --- |
| macOS и Linux | `~/.config/zed/settings.json` |
| Windows | `%APPDATA%\Zed\settings.json` |

Дополняйте файл, а не заменяйте его: в нём же хранятся ваша тема, сочетания клавиш, шрифты и
языковые серверы.

## 2. Добавьте провайдер

На странице **Настройка** в панели, на вкладке **Zed**, генерируется этот блок со всеми моделями
вашего тарифа и лимитами каждой из них. Вручную одна модель выглядит так:

```json
{
  "language_models": {
    "openai_compatible": {
      "OpenCheese": {
        "api_url": "https://api.opencheese.dev/v1",
        "available_models": [
          {
            "name": "MODEL_ID",
            "display_name": "Model name",
            "max_tokens": 1000000,
            "max_output_tokens": 131000,
            "max_completion_tokens": 126000,
            "reasoning_effort": "low",
            "capabilities": {
              "tools": true,
              "images": true,
              "parallel_tool_calls": false,
              "prompt_cache_key": true,
              "chat_completions": true,
              "interleaved_reasoning": false,
              "max_tokens_parameter": true
            }
          }
        ]
      }
    }
  }
}
```

- В `api_url` оставьте `/v1`: Zed сам добавляет `/chat/completions`.
- Если в файле уже есть раздел `language_models`, добавьте только ключ `OpenCheese` внутрь его
  объекта `openai_compatible`.
- `max_tokens` — это контекстное окно модели, а `max_output_tokens` — максимальная длина её ответа:
  возьмите их из `context_window` и `max_output_tokens` в [`/v1/models`](https://opencheese.dev/ru/docs/models.md). Каждой
  модели нужны оба значения, иначе Zed отклоняет весь провайдер.
- `reasoning_effort` должен быть одним из значений `none`, `minimal`, `low`, `medium`, `high`, `xhigh`
  или `max`; из-за любого другого значения Zed отклоняет весь провайдер. Для модели без уровней не
  указывайте его.
- Оставьте `prompt_cache_key` включённым: с ним каждый диалог Zed отображается в панели как одна
  сессия.
- `images` равно `true` только для моделей, у которых `modalities.input` содержит `image`.

## 3. Передайте Zed API-ключ

Ключ никогда не записывается в `settings.json`: для него там нет поля. Есть два способа:

1. Откройте панель агента, выполните **agent: open settings**, найдите **OpenCheese** в разделе
   LLM Providers, вставьте ключ в его поле API key и нажмите Enter. Zed сохранит ключ в системном
   хранилище ключей.
2. Или задайте переменную окружения, которую Zed читает для этого провайдера:

```bash
export OPEN_CHEESE_API_KEY='YOUR_OPENCHEESE_API_KEY'
```

Обратите внимание на подчёркивание: Zed строит имя из ID провайдера и разбивает `OpenCheese` на
`OPEN_CHEESE`. `OPENCHEESE_API_KEY` не читается никогда. Кроме того, переменная имеет приоритет над
хранилищем ключей, поэтому, если позже смените ключ, удалите переменную и перезапустите Zed.

## 4. Выберите модель OpenCheese (необязательно)

Zed оставляет ту модель, которая была выбрана раньше. Чтобы сделать модель OpenCheese моделью по
умолчанию для новых диалогов, добавьте в файл:

```json
{
  "agent": {
    "default_model": {
      "provider": "OpenCheese",
      "model": "MODEL_ID"
    }
  }
}
```

`provider` — это просто ID провайдера, без префикса `openai_compatible/`. После правки
`settings.json` перезапустите Zed или перезагрузите окно.

## Решение проблем

- **Моделей OpenCheese нет совсем**: JSON содержит ошибку, или в записи модели нет `max_tokens`
  либо указан неизвестный `reasoning_effort`. Скопируйте сгенерированный блок заново, а не
  исправляйте его вручную.
- **Модели видны, но каждый запрос завершается ошибкой**: ключ так и не дошёл до Zed; повторите
  шаг 3.
- **Модель не используется**: ID провайдера должен быть `OpenCheese` в обоих блоках и написан
  одинаково.
