# Свои модели в Factory Droid: как подключить Claude и GPT со своим API-ключом

> Как добавить Claude, GPT и другие модели в Factory Droid через customModels в settings.json: какой provider выбрать, рабочая конфигурация и четыре ошибки.

- Canonical HTML: https://omniakey.com/ru/blog/factory-droid-custom-models
- Markdown: https://omniakey.com/ru/blog/factory-droid-custom-models.md
- Published: 2026-10-30 (updated 2026-10-30)
- Author: Kiki, COO at OmniaKey
- Language: ru
- Category: API setup
- Reading time: 9 min
- All posts: https://omniakey.com/blog/llms.txt

---

Добавьте каждую модель в `customModels` файла `~/.factory/settings.json` с полями `model`, `baseUrl`, `apiKey` и `provider`: `anthropic` для Claude с чистым хостом, `openai` для GPT и `generic-chat-completion-api` для всего остального. На Droid 1.0.0 Claude Sonnet 5.5, GPT-6.1 Terra и MiniMax M3.1 Flash исправили один и тот же баг за 33,7, 77,4 и 30,7 секунды.

Все три прогона шли через OmniaKey на одном ключе — так мы получили доступ к [Claude Sonnet 5.5](https://omniakey.com/ru/claude-sonnet-5-5), [GPT-6.1 Terra](https://omniakey.com/ru/gpt-6-1-terra) и [MiniMax M3.1 Flash](https://omniakey.com/ru/minimax-m3-1-flash). Каждой модели досталась одна и та же сломанная функция `median()`, и каждая её починила.

## Коротко

- **Куда писать.** `customModels` в `~/.factory/settings.json` (документация Factory по настройкам, проверена 30 октября 2026), с полями `model`, `baseUrl`, `apiKey` и `provider`.
- **Какой provider.** `anthropic` для Claude, `openai` для моделей GPT, `generic-chat-completion-api` для всего остального, что говорит на Chat Completions.
- **Куда ставить `/v1`.** `anthropic` получает чистый хост, потому что Droid сам добавляет `/v1/messages`; `openai` и `generic-chat-completion-api` получают URL, оканчивающийся на `/v1`.
- **ID для `droid exec`.** `custom:`, отображаемое имя с дефисами вместо пробелов, затем позиция с нуля: `custom:Claude-Sonnet-5.5-[OmniaKey]-0`.
- **Что показали прогоны.** Все три исправили баг; 30,7 с у Flash, 33,7 с у Claude, 77,4 с у GPT-6.1 Terra.

## Какой provider выбрать?

Выбирайте provider по API, на котором говорит ваш эндпоинт, а не по названию модели.

- `anthropic` отправляет запросы в Anthropic Messages API. Подходит для Claude; базовый URL Anthropic — `https://api.anthropic.com`.
- `openai` отправляет запросы в OpenAI Responses API. Подходит для моделей GPT; базовый URL OpenAI — `https://api.openai.com/v1`.
- `generic-chat-completion-api` отправляет запросы в OpenAI Chat Completions. Подходит для большинства других моделей, шлюзов и локальных серверов — с URL `/v1` самого провайдера.

Factory указывает `generic-chat-completion-api` для OpenRouter, Fireworks, Together AI, Ollama, vLLM и большинства open-source провайдеров и советует этот вариант, пока вы не обращаетесь к официальному API OpenAI или Anthropic (документация Factory по BYOK, проверена 30 октября 2026).

Шлюз, который тоже понимает Messages API или Responses API, может использовать `anthropic` или `openai`. Наши записи для Claude и GPT-6.1 Terra работали так через OmniaKey, и обе запустились; OmniaKey отдаёт модели GPT на `POST /v1/responses` (документация OmniaKey о совместимости с OpenAI, проверена 30 октября 2026).

Есть и четвёртое значение — `bedrock-converse`, для моделей на Converse API в AWS Bedrock. Factory предупреждает, что полностью протестированы и прогнаны через бенчмарки только модели Anthropic и OpenAI на их официальных API, а модели меньше 30 миллиардов параметров заметно хуже справляются с агентным программированием (документация Factory по BYOK, проверена 30 октября 2026).

## Наш settings.json

Droid создаёт `~/.factory/settings.json` при первом запуске, поэтому добавьте `customModels` в уже существующий файл (документация Factory по настройкам, проверена 30 октября 2026). Наш выглядит так:

```json
{
  "customModels": [
    {
      "model": "claude-sonnet-5-5",
      "displayName": "Claude Sonnet 5.5 [OmniaKey]",
      "baseUrl": "https://api.omniakey.com",
      "apiKey": "${OMNIAKEY_API_KEY}",
      "provider": "anthropic",
      "maxOutputTokens": 16000
    },
    {
      "model": "gpt-6.1-terra",
      "displayName": "GPT-6.1 Terra [OmniaKey]",
      "baseUrl": "https://api.omniakey.com/v1",
      "apiKey": "${OMNIAKEY_API_KEY}",
      "provider": "openai",
      "maxOutputTokens": 16000
    },
    {
      "model": "minimax-m3.1-flash",
      "displayName": "MiniMax M3.1 Flash [OmniaKey]",
      "baseUrl": "https://api.omniakey.com/v1",
      "apiKey": "${OMNIAKEY_API_KEY}",
      "provider": "generic-chat-completion-api",
      "maxOutputTokens": 16000
    }
  ]
}
```

- `model` — это id, который уходит в API; скопируйте его из списка моделей провайдера. `displayName` — ваша метка: она видна в `/model` и образует id `custom:`.
- `baseUrl` — чистый хост для `anthropic` и адрес с `/v1` на конце для двух других.
- `apiKey: "${OMNIAKEY_API_KEY}"` читает ключ из переменной окружения, поэтому в файле его нет (документация Factory по BYOK, проверена 30 октября 2026).
- `provider` задаёт API; опечатка здесь даёт ошибку «Invalid provider» ниже.
- `maxOutputTokens: 16000` ограничивает длину каждого ответа.

Один ключ и два [базовых URL](https://docs.omniakey.com/ru/api/overview) покрывают все три модели: чистый хост OmniaKey для Claude и хост `/v1` для двух других. Если вы уже прошли [настройку OmniaKey для кодовых агентов](https://docs.omniakey.com/ru/coding), тот же ключ работает и здесь.

Factory пишет, что ключи остаются локально и не загружаются на серверы Factory (документация Factory по BYOK, проверена 30 октября 2026). Старые руководства кладут модели в `~/.factory/config.json`. Документация Factory по BYOK по-прежнему утверждает, что Droid копирует их в `settings.json` при старте. В pull request #76 в репозитории Factory на GitHub сказано, что изменение кода, слитое 15 октября 2026, эту копию убрало, так что новые модели сразу пишите в `settings.json`.

## Как выбрать свою модель в Droid?

В приложении откройте `/model` и посмотрите раздел Custom Models; в командной строке передайте id `custom:` в `droid exec`.

Документация Factory говорит, что сохранённые модели показываются там с их `displayName`, а добавить модель можно ещё в `/settings` > Custom models или `/model` > Manage custom models (проверена 30 октября 2026).

ID для `droid exec` — это `custom:`, затем отображаемое имя с дефисами вместо пробелов, дефис и позиция модели в `customModels` с нуля (документация Factory по `droid exec`, проверена 30 октября 2026). У нас получились `custom:Claude-Sonnet-5.5-[OmniaKey]-0`, `custom:GPT-6.1-Terra-[OmniaKey]-1` и `custom:MiniMax-M3.1-Flash-[OmniaKey]-2`.

Индекс идёт по порядку массива, поэтому вставка модели выше сдвигает все id под ней; скопируйте id заново после правки файла.

`-r` / `--reasoning-effort` в `droid exec` не действует для своих моделей (документация Factory по `droid exec`, проверена 30 октября 2026). Задайте `reasoningEffort` в самой записи.

## Три модели на одном баге

Два файла, одна команда, один прогон на модель. `stats.py`:

```python
def median(values):
    """Return the median of a non-empty list of numbers."""
    ordered = sorted(values)
    mid = len(ordered) // 2
    return ordered[mid]
```

`test_stats.py`:

```python
from stats import median

assert median([3, 1, 2]) == 2
assert median([4, 1, 3, 2]) == 2.5
assert median([5]) == 5
assert median([1.5, 2.5]) == 2.0
print("all tests passed")
```

Команда, где между прогонами меняется только значение `--model`:

```bash
droid exec --auto medium -o json --model "custom:Claude-Sonnet-5.5-[OmniaKey]-0" "python3 test_stats.py fails. Fix the bug in stats.py without changing the tests, run python3 test_stats.py again, and tell me in one sentence what you changed."
```

|Модель|Время|Шаги|Токены вывода|
|-|-|-|-|
|Claude Sonnet 5.5|33,7 с|3|702|
|GPT-6.1 Terra|77,4 с|4|451|
|MiniMax M3.1 Flash|30,7 с|4|525|

Это собственные цифры Droid (`duration_ms`, `num_turns`, `output_tokens`). Flash финишировал быстрее всех за 30,7 с, Claude сделал меньше всех шагов, а GPT-6.1 Terra работал дольше всех — 77,4 с. Первый токен Droid отдал через 8,7 с у Claude, 17,8 с у Terra и 7,0 с у Flash. Все три исправили баг, не тронув `test_stats.py`, и тесты напечатали `all tests passed`.

Изменение Claude:

```diff
-    return ordered[mid]
+    if len(ordered) % 2:
+        return ordered[mid]
+    return (ordered[mid - 1] + ordered[mid]) / 2
```

GPT-6.1 Terra добавил ту же ветку над старой строкой возврата, а MiniMax M3.1 Flash написал её через `% 2 == 1`. Все три ответа описывали одно и то же исправление: усреднить два средних значения, когда длина списка чётная. [Обзор MiniMax M3.1 Flash](https://omniakey.com/ru/blog/minimax-m3-1-flash-review) разбирает эту модель подробнее.

В JSON-результате Droid каждый раз печаталось ещё и `factory_credits`, хотя мы ни разу не входили в аккаунт: 31 534 для Claude Sonnet 5.5, 4 830 для GPT-6.1 Terra и 835 для MiniMax M3.1 Flash. Документация Factory не объясняет, что измеряет это число и как оно связано с лимитом BYOK (проверена 30 октября 2026).

## Нужен ли аккаунт или план Factory?

В наших прогонах `droid exec` с моделью `custom:` обходился без аккаунта Factory. Собственные модели Factory и интерактивное приложение его требовали.

Droid CLI 1.0.0 вышел 29 октября 2026 (changelog Factory, проверен 30 октября 2026). В чистой домашней папке без входа в Factory каждый вызов `droid exec` с моделью `custom:` шёл на нашем собственном ключе. Та же команда без `--model` сразу останавливалась с «Authentication failed. Please log in using /login or set a valid FACTORY\_API\_KEY environment variable.» («Не удалось пройти аутентификацию. Войдите через /login или задайте действующую переменную окружения FACTORY\_API\_KEY.»). Запись changelog Factory v0.236.0 (8 октября 2026) описывает возобновление сессий: «Droid exec now resumes a session on your own model credentials without a Factory sign-in.» («Droid exec теперь продолжает сессию на ваших собственных учётных данных модели, без входа в Factory.»)

Запуск `droid` без аргументов в той же папке останавливался на «Please login with your Factory account to continue.» («Войдите в свой аккаунт Factory, чтобы продолжить.»). Без входа мы не смогли попробовать свои модели в интерактивном приложении и в приложении для десктопа, а ввод изображений, Bedrock, `apiKeyHelper`, `reasoningEffort`, настройки рассуждений, Windows, сессии длиннее одной задачи и старый файл `config.json` мы не проверяли.

Индивидуальные планы Factory стоят $20 (Pro), $100 (Plus) и $200 (Max) в месяц; на странице цен есть ещё Teams за $60 в месяц за команду плюс $40 за место, а бесплатного индивидуального плана нет (документация и страница цен Factory, проверены 30 октября 2026).

Документация по индивидуальным планам говорит: «BYOK is free up to an allowance on all Individual plans. After that, usage is charged according to your specific plan.» («BYOK бесплатен до определённого лимита на всех индивидуальных планах. Дальше использование оплачивается по вашему плану.») Каков размер этого лимита и как выглядит оплата после него, Factory не сообщает.

Личные свои модели работают в CLI и в приложении для десктопа и не появляются в облачных веб- и мобильном приложениях Factory (документация Factory по BYOK, проверена 30 октября 2026).

## Какие ошибки встретятся и что их исправляет?

Каждая возникала из-за одного неверного значения в настройке, которая в остальном работала, на Droid 1.0.0.

1. `anthropic` с `/v1` в базовом URL. Через 0,9 с Droid вывел «Requested model was not found on the API provider» («Запрошенная модель не найдена у провайдера API»), а в логе было `404` на `Invalid URL (POST /v1/v1/messages)`. Droid сам добавляет `/v1/messages`, поэтому наш `/v1` его удваивал. Решение: чистый хост, `https://api.anthropic.com` или `https://api.omniakey.com`.

2. `openai` с чистым хостом. Через 1,4 с Droid вывел `404` и страницу nginx «404 Not Found»; Responses API живёт под `/v1`. Решение: `https://api.openai.com/v1` или `https://api.omniakey.com/v1`.

3. ID модели с точками, `claude-sonnet-5.5`, вместо `claude-sonnet-5-5`. Эндпоинт ответил `503` с кодом `model_not_found` и сообщением «No available channel for model claude-sonnet-5.5» («Нет доступного канала для модели claude-sonnet-5.5»). В логе Droid каждая неудача помечалась как «overloaded», и он сделал 10 попыток за 259,7 секунды (около 4 минут 20 секунд), прежде чем выйти с этим сообщением. Формулировка от шлюза, повторные попытки от Droid. Решение: скопировать точный id из списка моделей провайдера.

4. `OMNIAKEY_API_KEY` пустая в оболочке, из которой запустили Droid. Через 2,8 с Droid получил `401` с «Invalid token» («Недействительный токен»). Решение: экспортировать ключ в той оболочке, откуда вы запускаете `droid`, и начать новую сессию.

В списке решения проблем у Factory есть ещё два пункта. «Invalid provider» значит, что значение написано с ошибкой или с другой заглавной буквой, и должно быть ровно `anthropic`, `openai`, `generic-chat-completion-api` или `bedrock-converse`. Если модели нет в списке выбора, документация советует проверить синтаксис JSON в `~/.factory/settings.json` и наличие обязательных полей в каждой записи (проверена 30 октября 2026).

## FAQ

### Где файл настроек Droid в Windows?

`%USERPROFILE%\.factory\settings.json`, тот же файл, что `~/.factory/settings.json` в macOS и Linux (документация Factory по настройкам, проверена 30 октября 2026). `customModels` пишите туда.

### Почему моя модель не появляется в `/model`?

Проверьте сначала синтаксис JSON в `~/.factory/settings.json`, затем поля `model`, `baseUrl` и `provider`. Droid замечает сохранённые изменения через отслеживание файла (документация Factory по BYOK, проверена 30 октября 2026). В одном отчёте на Desktop 0.184.0 с CLI 0.227.0 свои модели на миг появлялись в десктопном списке выбора и исчезали, хотя `droid exec --help` по-прежнему перечислял все 14; сейчас эта проблема закрыта (Factory-AI issue #40, проверена 30 октября 2026).

### Умеют ли свои модели читать изображения?

У `anthropic` и `openai` изображения включены по умолчанию, у `generic-chat-completion-api` выключены: там `noImageSupport` по умолчанию равен `true` (документация Factory по BYOK, проверена 30 октября 2026). Поставьте `noImageSupport: false` в универсальной записи, чтобы их разрешить. Согласно одному сообщению, изображения всё равно вырезались на CLI v0.205.1 с этим значением (Factory-AI issue #24, проверена 30 октября 2026).

### Можно ли задать reasoning effort для своей модели?

`-r` / `--reasoning-effort` в `droid exec` не действует для своих моделей. Задайте `reasoningEffort` в записи: значение задаёт усилие по умолчанию для модели, которую Droid не знает, и добавляет off, low, medium и high в список выбора (документация Factory по BYOK, проверена 30 октября 2026).

### Работают ли свои модели в приложении Droid для десктопа?

Да: личные свои модели доступны в CLI и в приложении для десктопа и не попадают в облачные веб- и мобильное приложения. Редакторы моделей в CLI и в десктопном приложении сохраняют всё в `~/.factory/settings.json` (документация Factory по BYOK, проверена 30 октября 2026).

## Проверенные источники

- [Документация Factory по BYOK](https://docs.factory.com/model-independence/byok.md), проверена 30 октября 2026
- [Документация Factory по настройкам](https://docs.factory.com/droid-cli/settings.md), проверена 30 октября 2026
- [Документация Factory по droid exec](https://docs.factory.com/droid-exec/overview.md), проверена 30 октября 2026
- [Release notes Factory](https://docs.factory.com/changelog/release-notes.md), проверены 30 октября 2026
- [Индивидуальные планы Factory](https://docs.factory.com/pricing/individuals.md), проверены 30 октября 2026
- [Цены Factory](https://factory.com/pricing), проверены 30 октября 2026
- [Factory-AI issue #40: свои модели исчезают из десктопного списка](https://github.com/Factory-AI/factory/issues/40), проверена 30 октября 2026
- [Factory-AI issue #24: изображения вырезаются](https://github.com/Factory-AI/factory/issues/24), проверена 30 октября 2026
- [Factory-AI pull request #76: миграция config.json](https://github.com/Factory-AI/factory/pull/76), проверена 30 октября 2026

Собственная документация OmniaKey, проверена 30 октября 2026: [обзор API](https://docs.omniakey.com/ru/api/overview) и [API, совместимый с OpenAI](https://docs.omniakey.com/ru/api/openai-compatible).
