# Model kustom Factory Droid: Pakai Claude dan GPT dengan API key sendiri

> Tambahkan Claude, GPT, dan model lain ke Factory Droid lewat customModels di settings.json: provider yang tepat, config yang kami jalankan, dan empat error.

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

---

Tambahkan setiap model ke `customModels` di `~/.factory/settings.json` dengan `model`, `baseUrl`, `apiKey`, dan `provider`: pakai `anthropic` untuk Claude dengan host polos, `openai` untuk GPT, dan `generic-chat-completion-api` untuk model lainnya. Di Droid 1.0.0, Claude Sonnet 5.5, GPT-6.1 Terra, dan MiniMax M3.1 Flash masing-masing memperbaiki bug yang sama dalam 33.7, 77.4, dan 30.7 detik.

Ketiga uji coba berjalan lewat OmniaKey dengan satu kunci, dan begitulah kami membuka [Claude Sonnet 5.5](https://omniakey.com/id/claude-sonnet-5-5), [GPT-6.1 Terra](https://omniakey.com/id/gpt-6-1-terra), dan [MiniMax M3.1 Flash](https://omniakey.com/id/minimax-m3-1-flash). Ketiganya menerima fungsi `median()` yang rusak dan sama, lalu memperbaikinya.

## Jawaban singkat

- **Letaknya.** `customModels` di `~/.factory/settings.json` (dokumentasi settings Factory, diperiksa 30 Oktober 2026), dengan `model`, `baseUrl`, `apiKey`, dan `provider`.
- **Provider mana.** `anthropic` untuk Claude, `openai` untuk model GPT, `generic-chat-completion-api` untuk semua yang lain yang berbicara Chat Completions.
- **`/v1` ditaruh di mana.** `anthropic` memakai host polos karena Droid menambahkan `/v1/messages`; `openai` dan `generic-chat-completion-api` memakai URL yang berakhir dengan `/v1`.
- **ID untuk `droid exec`.** `custom:`, nama tampilan dengan spasi menjadi tanda hubung, lalu posisi mulai 0: `custom:Claude-Sonnet-5.5-[OmniaKey]-0`.
- **Hasil uji coba kami.** Ketiganya memperbaiki bug; 30.7 dtk untuk Flash, 33.7 dtk untuk Claude, 77.4 dtk untuk GPT-6.1 Terra.

## Nilai provider mana yang sebaiknya Anda pakai?

Pilih provider berdasarkan API yang dipakai endpoint Anda, bukan berdasarkan nama model.

- `anthropic` mengirim permintaan Anthropic Messages API. Pakai untuk Claude; base URL Anthropic adalah `https://api.anthropic.com`.
- `openai` mengirim permintaan OpenAI Responses API. Pakai untuk model GPT; base URL OpenAI adalah `https://api.openai.com/v1`.
- `generic-chat-completion-api` mengirim permintaan OpenAI Chat Completions. Pakai untuk sebagian besar model lain, gateway, dan server lokal, dengan URL `/v1` milik penyedianya.

Factory mencantumkan `generic-chat-completion-api` untuk OpenRouter, Fireworks, Together AI, Ollama, vLLM, dan sebagian besar penyedia open source, serta menyarankannya kecuali Anda memanggil API resmi OpenAI atau Anthropic (dokumentasi BYOK Factory, diperiksa 30 Oktober 2026).

Gateway yang juga mendukung Messages API atau Responses API bisa memakai `anthropic` atau `openai`. Entri Claude dan GPT-6.1 Terra kami melakukannya lewat OmniaKey, dan keduanya berjalan; OmniaKey menyajikan model GPT di `POST /v1/responses` (dokumentasi API kompatibel OpenAI milik OmniaKey, diperiksa 30 Oktober 2026).

Nilai keempat, `bedrock-converse`, ditujukan untuk model di Converse API AWS Bedrock. Factory memperingatkan bahwa hanya model Anthropic dan OpenAI di API resminya yang diuji penuh dan dijadikan pembanding, dan model di bawah 30 miliar parameter jauh lebih lemah dalam coding agentik (dokumentasi BYOK Factory, diperiksa 30 Oktober 2026).

## settings.json yang kami pakai

Droid membuat `~/.factory/settings.json` saat pertama dijalankan, jadi tambahkan `customModels` ke file yang sudah ada (dokumentasi settings Factory, diperiksa 30 Oktober 2026). Ini file kami:

```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` adalah ID yang dikirim ke API; salin dari daftar model penyedia Anda. `displayName` adalah label Anda sendiri: tampil di `/model` dan membentuk ID `custom:`.
- `baseUrl` berupa host polos untuk `anthropic`, dan berakhir dengan `/v1` untuk dua lainnya.
- `apiKey: "${OMNIAKEY_API_KEY}"` membaca kunci dari variabel lingkungan, jadi kunci tidak ikut tersimpan di file (dokumentasi BYOK Factory, diperiksa 30 Oktober 2026).
- `provider` memilih API; salah ketik di sini memunculkan error "Invalid provider" di bawah.
- `maxOutputTokens: 16000` membatasi panjang setiap jawaban.

Satu kunci dan dua [base URL](https://docs.omniakey.com/en/api/overview) mencakup ketiga model: host polos OmniaKey untuk Claude, host `/v1` untuk dua lainnya. Jika Anda mengikuti [dokumentasi penyiapan coding agent OmniaKey](https://docs.omniakey.com/en/coding), kunci yang sama juga berlaku di sini.

Factory menyatakan kunci tetap lokal dan tidak diunggah ke server Factory (dokumentasi BYOK Factory, diperiksa 30 Oktober 2026). Panduan lama menaruh model di `~/.factory/config.json`. Dokumentasi BYOK Factory masih menyebut Droid menyalinnya ke `settings.json` saat mulai. Sebuah pull request di repositori GitHub Factory (#76) menyebut perubahan kode yang digabungkan pada 15 Oktober 2026 menghapus penyalinan itu, jadi taruh model baru langsung di `settings.json`.

## Bagaimana memilih model kustom di Droid?

Di aplikasi, buka `/model` dan lihat di bawah Custom Models; di baris perintah, berikan ID `custom:` ke `droid exec`.

Dokumentasi Factory menyebut model tersimpan muncul di sana dengan label `displayName`, dan Anda juga bisa menambahkannya dari `/settings` > Custom models atau `/model` > Manage custom models (diperiksa 30 Oktober 2026).

ID `droid exec` dibentuk dari `custom:`, lalu nama tampilan dengan spasi diubah menjadi tanda hubung, lalu satu tanda hubung dan posisi model mulai dari 0 di `customModels` (dokumentasi `droid exec` Factory, diperiksa 30 Oktober 2026). Milik kami menjadi `custom:Claude-Sonnet-5.5-[OmniaKey]-0`, `custom:GPT-6.1-Terra-[OmniaKey]-1`, dan `custom:MiniMax-M3.1-Flash-[OmniaKey]-2`.

Indeks mengikuti urutan array, jadi menyisipkan model di atas model lain menggeser semua ID di bawahnya; salin lagi ID-nya setelah Anda mengedit file.

`-r` / `--reasoning-effort` di `droid exec` tidak berlaku untuk model kustom (dokumentasi `droid exec` Factory, diperiksa 30 Oktober 2026). Setel `reasoningEffort` di entri model.

## Tiga model pada bug yang sama

Dua file yang sama, perintah yang sama, satu kali jalan per model. `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")
```

Perintahnya, dengan hanya nilai `--model` yang berubah antar uji coba:

```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."
```

|Model|Waktu|Giliran|Token keluaran|
|-|-|-|-|
|Claude Sonnet 5.5|33.7 s|3|702|
|GPT-6.1 Terra|77.4 s|4|451|
|MiniMax M3.1 Flash|30.7 s|4|525|

Angka ini dari Droid sendiri (`duration_ms`, `num_turns`, `output_tokens`). Flash selesai paling cepat di 30.7 dtk, Claude memakai giliran paling sedikit, dan GPT-6.1 Terra paling lama di 77.4 dtk. Droid melaporkan token pertama setelah 8.7 dtk untuk Claude, 17.8 dtk untuk Terra, dan 7.0 dtk untuk Flash. Ketiganya memperbaiki bug tanpa menyentuh `test_stats.py`, dan pengujian mencetak `all tests passed`.

Perubahan Claude:

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

GPT-6.1 Terra menambahkan cabang yang sama di atas baris return lama, dan MiniMax M3.1 Flash menulisnya dengan `% 2 == 1`. Ketiga jawaban menjelaskan perbaikan yang sama: rata-ratakan dua nilai tengah untuk daftar berpanjang genap. [Ulasan MiniMax M3.1 Flash](https://omniakey.com/id/blog/minimax-m3-1-flash-review) membahas model itu lebih rinci.

Hasil JSON Droid juga mencetak `factory_credits` di setiap uji coba, padahal kami tidak pernah masuk: 31,534 untuk Claude Sonnet 5.5, 4,830 untuk GPT-6.1 Terra, dan 835 untuk MiniMax M3.1 Flash. Dokumentasi Factory tidak menjelaskan apa yang diukur angka itu atau bagaimana hubungannya dengan kuota BYOK (diperiksa 30 Oktober 2026).

## Apakah perlu akun atau paket Factory?

Pada uji coba kami, `droid exec` dengan model `custom:` tidak memerlukan akun Factory. Model bawaan Factory dan aplikasi interaktif memintanya.

Droid CLI 1.0.0 dirilis pada 29 Oktober 2026 (changelog Factory, diperiksa 30 Oktober 2026). Di folder home bersih tanpa login Factory, setiap panggilan `droid exec` dengan model `custom:` berjalan dengan kunci kami sendiri. Perintah yang sama tanpa `--model` langsung berhenti dengan "Authentication failed. Please log in using /login or set a valid FACTORY\_API\_KEY environment variable." (autentikasi gagal; masuk dengan `/login` atau setel variabel lingkungan `FACTORY_API_KEY` yang valid). Catatan changelog v0.236.0 Factory (8 Oktober 2026) membahas sesi yang dilanjutkan: "Droid exec now resumes a session on your own model credentials without a Factory sign-in." (Droid exec kini melanjutkan sesi dengan kredensial model Anda sendiri tanpa login Factory.)

Menjalankan `droid` tanpa argumen di folder yang sama berhenti di "Please login with your Factory account to continue." (silakan masuk dengan akun Factory Anda untuk melanjutkan). Tanpa login, kami tidak bisa mencoba model kustom di aplikasi interaktif atau desktop, dan kami tidak menguji input gambar, Bedrock, `apiKeyHelper`, `reasoningEffort` atau pengaturan thinking, Windows, sesi lebih dari satu tugas, maupun file `config.json` lama.

Paket Individual Factory berharga $20 (Pro), $100 (Plus), dan $200 (Max) per bulan; halaman harga menambahkan Teams sebesar $60 per bulan per tim plus $40 per kursi, dan tidak ada paket individu gratis (dokumentasi harga dan halaman harga Factory, diperiksa 30 Oktober 2026).

Dokumentasi harga Individual menyebut: "BYOK is free up to an allowance on all Individual plans. After that, usage is charged according to your specific plan." (BYOK gratis sampai batas kuota di semua paket Individual. Setelah itu, pemakaian ditagih sesuai paket Anda.) Factory tidak menyebut berapa besar kuota itu atau bagaimana bentuk tagihannya setelahnya.

Model kustom pribadi berfungsi di CLI dan aplikasi desktop, dan tidak muncul di aplikasi web atau seluler terkelola Factory (dokumentasi BYOK Factory, diperiksa 30 Oktober 2026).

## Error apa yang akan Anda temui, dan apa obatnya?

Masing-masing muncul dari satu nilai salah di penyiapan yang selebihnya berjalan, pada Droid 1.0.0.

1. `anthropic` dengan `/v1` di base URL. Droid mencetak "Requested model was not found on the API provider" (model yang diminta tidak ditemukan di penyedia API) setelah 0.9 dtk, dan log-nya menunjukkan `404` pada `Invalid URL (POST /v1/v1/messages)`. Droid menambahkan `/v1/messages` sendiri, jadi `/v1` kami menjadi ganda. Perbaikan: host polos, `https://api.anthropic.com` atau `https://api.omniakey.com`.

2. `openai` dengan host polos. Droid mencetak `404` dan halaman nginx "404 Not Found" setelah 1.4 dtk; Responses API berada di bawah `/v1`. Perbaikan: `https://api.openai.com/v1` atau `https://api.omniakey.com/v1`.

3. ID model dengan titik, `claude-sonnet-5.5`, alih-alih `claude-sonnet-5-5`. Endpoint menjawab `503` dengan kode `model_not_found` dan pesan "No available channel for model claude-sonnet-5.5" (tidak ada kanal tersedia untuk model claude-sonnet-5.5). Log Droid memberi label "overloaded" pada setiap kegagalan dan melakukan 10 percobaan selama 259.7 detik (sekitar 4 menit 20 detik) sebelum keluar dengan pesan itu. Kalimatnya milik gateway, percobaan ulangnya milik Droid. Perbaikan: salin ID persis dari daftar model penyedia Anda.

4. `OMNIAKEY_API_KEY` kosong di shell yang menjalankan Droid. Droid mendapat `401` dengan "Invalid token" (token tidak valid) setelah 2.8 dtk. Perbaikan: ekspor kunci di shell tempat Anda menjalankan `droid`, lalu mulai sesi baru.

Daftar pemecahan masalah Factory menambahkan dua. "Invalid provider" berarti nilainya salah eja atau beda huruf besar-kecil, dan nilainya harus persis `anthropic`, `openai`, `generic-chat-completion-api`, atau `bedrock-converse`. Untuk model yang tidak muncul di pemilih, dokumentasi menyarankan memeriksa sintaks JSON di `~/.factory/settings.json` dan memastikan setiap entri punya kolom wajibnya (diperiksa 30 Oktober 2026).

## Pertanyaan umum

### Di mana file pengaturan Droid di Windows?

`%USERPROFILE%\.factory\settings.json`, file yang sama dengan `~/.factory/settings.json` di macOS dan Linux (dokumentasi settings Factory, diperiksa 30 Oktober 2026). Taruh `customModels` di sana.

### Mengapa model kustom saya tidak muncul di `/model`?

Periksa sintaks JSON di `~/.factory/settings.json` lebih dulu, lalu kolom `model`, `baseUrl`, dan `provider`. Droid mendeteksi perubahan tersimpan lewat pemantauan file (dokumentasi BYOK Factory, diperiksa 30 Oktober 2026). Sebuah laporan pada Desktop 0.184.0 dengan CLI 0.227.0 melihat model kustom muncul sebentar di pemilih desktop lalu hilang, sementara `droid exec --help` masih mencantumkan 14 model itu semuanya; masalah tersebut kini sudah ditutup (Factory-AI issue #40, diperiksa 30 Oktober 2026).

### Bisakah model kustom membaca gambar?

Gambar aktif secara default untuk `anthropic` dan `openai`, dan mati untuk `generic-chat-completion-api`, tempat `noImageSupport` bernilai default `true` (dokumentasi BYOK Factory, diperiksa 30 Oktober 2026). Setel `noImageSupport: false` pada entri generic untuk mengizinkannya. Seorang pengguna melaporkan gambar tetap dibuang pada CLI v0.205.1 meski nilai itu sudah disetel (Factory-AI issue #24, diperiksa 30 Oktober 2026).

### Bisakah saya mengatur reasoning effort untuk model kustom?

`-r` / `--reasoning-effort` di `droid exec` tidak berlaku untuk model kustom. Setel `reasoningEffort` di entri model: nilai itu menetapkan upaya default untuk model yang tidak dikenali Droid dan menambahkan off, low, medium, serta high ke pemilih (dokumentasi BYOK Factory, diperiksa 30 Oktober 2026).

### Apakah model kustom berfungsi di aplikasi desktop Droid?

Ya: model kustom pribadi tersedia di CLI dan aplikasi desktop, dan tidak muncul di aplikasi web maupun seluler terkelola. Editor model di CLI dan di aplikasi desktop sama-sama menyimpan ke `~/.factory/settings.json` (dokumentasi BYOK Factory, diperiksa 30 Oktober 2026).

## Sumber yang diperiksa

- [Dokumentasi BYOK Factory](https://docs.factory.com/model-independence/byok.md), diperiksa 30 Oktober 2026
- [Dokumentasi settings Factory](https://docs.factory.com/droid-cli/settings.md), diperiksa 30 Oktober 2026
- [Dokumentasi droid exec Factory](https://docs.factory.com/droid-exec/overview.md), diperiksa 30 Oktober 2026
- [Catatan rilis Factory](https://docs.factory.com/changelog/release-notes.md), diperiksa 30 Oktober 2026
- [Paket Individual Factory](https://docs.factory.com/pricing/individuals.md), diperiksa 30 Oktober 2026
- [Harga Factory](https://factory.com/pricing), diperiksa 30 Oktober 2026
- [Factory-AI issue #40: model kustom hilang dari pemilih desktop](https://github.com/Factory-AI/factory/issues/40), diperiksa 30 Oktober 2026
- [Factory-AI issue #24: gambar dibuang](https://github.com/Factory-AI/factory/issues/24), diperiksa 30 Oktober 2026
- [Factory-AI pull request #76: migrasi config.json](https://github.com/Factory-AI/factory/pull/76), diperiksa 30 Oktober 2026

Dokumentasi OmniaKey sendiri, diperiksa 30 Oktober 2026: [Ringkasan API](https://docs.omniakey.com/en/api/overview) dan [API kompatibel OpenAI](https://docs.omniakey.com/en/api/openai-compatible).
