# Harness AI с OpenCheese

> OpenCheese в Harness AI Desktop как пользовательский провайдер: ID провайдера, базовый URL, API-ключ, уровни рассуждений в settings.yaml, файл учётных данных.
>
> Веб-страница: https://opencheese.dev/ru/docs/harness-ai/ · Все страницы документации: https://opencheese.dev/ru/docs.md

Harness AI Desktop (DeepSeek Harness) добавляет OpenCheese как пользовательский провайдер рядом со
встроенным провайдером DeepSeek и обращается к нему через OpenAI Chat Completions API по адресу
`https://api.opencheese.dev/v1`.

Harness хранит всё в одной папке: `%USERPROFILE%\.dsh` в Windows, `~/.dsh` в Linux и macOS или там,
куда указывает `$DSH_HOME`.

## 1. Установите Harness AI

Скачайте сборку для своей платформы из
[репозитория Harness AI](https://github.com/deepseek-ai/deepseek-harness) и завершите установку.

## 2. Добавьте OpenCheese как пользовательский провайдер

1. Откройте **Settings** на боковой панели и выберите **Models**.
2. Нажмите **Add a custom provider** и заполните поля:

| Поле | Значение |
| --- | --- |
| Provider ID | `opencheese` |
| Display name | оставьте пустым (подставится Provider ID) |
| API protocol | `openai-completions` |
| Base URL | `https://api.opencheese.dev/v1` |
| API key | ваш API-ключ OpenCheese |

3. Нажмите **Fetch available models**, оставьте все модели выбранными и нажмите **Create provider**.

- Provider ID должен быть ровно `opencheese`: по нему Harness называет сохранённые учётные данные
  (`OPENCHEESE_API_KEY`), а при любом другом написании провайдер ссылается на учётные данные, которые
  никто не задаёт.
- В Base URL оставьте `/v1`: путь эндпоинта Harness добавляет сам.
- На странице **Настройка** в панели, на вкладке **Harness AI**, показаны те же значения, а ключ
  становится виден после того, как вы подтвердите его пароль.

Теперь OpenCheese отображается в списке Models со значком Custom и зелёной точкой, а его модели
можно выбрать в чате.

## 3. Добавьте уровни рассуждений (необязательно)

На странице Settings нельзя задать уровни рассуждений, поэтому список уровней остаётся пустым,
пока они не объявлены в `settings.yaml`. Добавьте этот блок в `%USERPROFILE%\.dsh\settings.yaml`
(`~/.dsh/settings.yaml`), сохранив все остальные разделы файла, затем перезапустите Harness AI.
Вкладка **Harness AI** генерирует этот блок со всеми моделями вашего тарифа.

```yaml
llm-pi-ai:
    providers:
        opencheese:
            apiKeyEnv: OPENCHEESE_API_KEY
            api: openai-completions
            baseURL: https://api.opencheese.dev/v1
            timeoutMs: 120000
            models:
                - id: MODEL_ID
                  name: Model name
                  contextWindow: 1000000
                  maxTokens: 131000
                  reasoningEfforts:
                      max: max
                      medium: medium
                      low: low
```

- `contextWindow` и `maxTokens` возьмите из полей `context_window` и `max_output_tokens` модели в
  [`/v1/models`](https://opencheese.dev/ru/docs/models.md), а уровни — из её `supported_reasoning_levels`. Оба числа должны
  быть положительными целыми.
- Harness принимает только уровни `off`, `minimal`, `low`, `medium`, `high`, `xhigh` и `max`.
  Хватит одного другого названия или пропущенного числа, чтобы Harness отбросил весь раздел
  `llm-pi-ai`, и тогда все модели OpenCheese пропадут разом.
- У модели без уровней нет ключа `reasoningEfforts`: она рассуждает на своём уровне по
  умолчанию.
- API-ключа в этом файле нет: `apiKeyEnv` называет учётные данные, которые Harness сохранил на шаге 2.

## Настройка без страницы Settings

Чтобы пропустить шаг 2, сохраните учётные данные сами в файл `.credentials.yaml` в той же папке, что
и `settings.yaml`, в дополнение к блоку выше:

```yaml
version: 1
refs:
    OPENCHEESE_API_KEY: YOUR_OPENCHEESE_API_KEY
```

- `version: 1` обязателен.
- В Linux и macOS выполните `chmod 600 ~/.dsh/.credentials.yaml`: Harness не принимает файл учётных
  данных, который могут прочитать другие пользователи.
- Chrome, Edge и другие браузеры на основе Chromium сохраняют скачанный `.credentials.yaml` как
  `credentials.yaml`; верните ему исходное имя.
- В этом файле ваш ключ хранится открытым текстом. Никогда не добавляйте его в репозиторий.

## Расход и стоимость

Каждый запрос отображается в панели на странице **Транзакции** с расходом токенов и
стоимостью; запросы одного разговора объединены в одну сессию.
