# Eigene Modelle in Factory Droid: Claude und GPT mit eigenem API-Key nutzen

> Claude, GPT und weitere Modelle über customModels in settings.json in Factory Droid einbinden: welcher Provider passt, eine getestete Konfiguration und vier Fehler.

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

---

Tragen Sie jedes Modell in `customModels` in `~/.factory/settings.json` ein – mit `model`, `baseUrl`, `apiKey` und `provider`. Nehmen Sie `anthropic` für Claude mit blankem Host, `openai` für GPT und `generic-chat-completion-api` für alles andere. Auf Droid 1.0.0 haben Claude Sonnet 5.5, GPT-6.1 Terra und MiniMax M3.1 Flash denselben Bug in 33,7, 77,4 und 30,7 Sekunden behoben.

Alle drei Läufe gingen über OmniaKey mit einem einzigen Schlüssel – so kamen wir an [Claude Sonnet 5.5](https://omniakey.com/de/claude-sonnet-5-5), [GPT-6.1 Terra](https://omniakey.com/de/gpt-6-1-terra) und [MiniMax M3.1 Flash](https://omniakey.com/de/minimax-m3-1-flash). Jedes Modell bekam dieselbe kaputte `median()`-Funktion und reparierte sie.

## Kurz gesagt

- **Wohin es gehört.** `customModels` in `~/.factory/settings.json` (Factorys Settings-Doku, geprüft am 30. Oktober 2026), mit `model`, `baseUrl`, `apiKey` und `provider`.
- **Welcher Provider.** `anthropic` für Claude, `openai` für GPT-Modelle, `generic-chat-completion-api` für alles andere, das Chat Completions spricht.
- **Wohin `/v1` gehört.** `anthropic` bekommt den blanken Host, weil Droid `/v1/messages` selbst anhängt; `openai` und `generic-chat-completion-api` bekommen eine URL, die auf `/v1` endet.
- **Die ID für `droid exec`.** `custom:`, dann der Anzeigename mit Bindestrichen statt Leerzeichen, dann die Position ab 0: `custom:Claude-Sonnet-5.5-[OmniaKey]-0`.
- **Was die Läufe zeigten.** Alle drei haben den Bug behoben; 30,7 s für Flash, 33,7 s für Claude, 77,4 s für GPT-6.1 Terra.

## Welchen Provider-Wert brauchen Sie?

Wählen Sie den Provider nach der API, die Ihr Endpunkt spricht, nicht nach dem Modellnamen.

- `anthropic` schickt Anfragen an die Anthropic Messages API. Passt für Claude; die Basis-URL von Anthropic ist `https://api.anthropic.com`.
- `openai` schickt Anfragen an die OpenAI Responses API. Passt für GPT-Modelle; die Basis-URL von OpenAI ist `https://api.openai.com/v1`.
- `generic-chat-completion-api` schickt Anfragen an die OpenAI Chat Completions API. Passt für die meisten anderen Modelle, Gateways und lokalen Server, mit der `/v1`-URL des jeweiligen Anbieters.

Factory nennt `generic-chat-completion-api` für OpenRouter, Fireworks, Together AI, Ollama, vLLM und die meisten Open-Source-Anbieter und empfiehlt den Wert, solange Sie nicht die offizielle API von OpenAI oder Anthropic aufrufen (Factorys BYOK-Doku, geprüft am 30. Oktober 2026).

Ein Gateway, das auch die Messages API oder die Responses API spricht, kann `anthropic` oder `openai` verwenden. Unsere Einträge für Claude und GPT-6.1 Terra taten das über OmniaKey, und beide liefen; OmniaKey bedient GPT-Modelle unter `POST /v1/responses` (OmniaKeys Doku zur OpenAI-Kompatibilität, geprüft am 30. Oktober 2026).

Es gibt noch einen vierten Wert: `bedrock-converse` ist für Modelle auf der Converse API von AWS Bedrock gedacht. Factory weist darauf hin, dass nur Anthropic- und OpenAI-Modelle auf den offiziellen APIs vollständig getestet und gebenchmarkt sind und dass Modelle unter 30 Milliarden Parametern beim agentischen Programmieren deutlich schlechter abschneiden (Factorys BYOK-Doku, geprüft am 30. Oktober 2026).

## Unsere settings.json

Droid legt `~/.factory/settings.json` beim ersten Start an; ergänzen Sie `customModels` in der Datei, die schon da ist (Factorys Settings-Doku, geprüft am 30. Oktober 2026). Unsere sieht so aus:

```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` ist die ID, die an die API geht; kopieren Sie sie aus der Modellliste des Anbieters. `displayName` ist Ihr eigenes Label: Es erscheint in `/model` und bildet die `custom:`-ID.
- `baseUrl` ist der blanke Host für `anthropic` und endet bei den anderen beiden auf `/v1`.
- `apiKey: "${OMNIAKEY_API_KEY}"` liest den Schlüssel aus einer Umgebungsvariable, damit er nicht in der Datei steht (Factorys BYOK-Doku, geprüft am 30. Oktober 2026).
- `provider` legt die API fest; ein Tippfehler hier führt zum Fehler „Invalid provider“ weiter unten.
- `maxOutputTokens: 16000` begrenzt die Länge jeder Antwort.

Ein Schlüssel und zwei [Basis-URLs](https://docs.omniakey.com/en/api/overview) decken alle drei Modelle ab: der blanke Host von OmniaKey für Claude, sein `/v1`-Host für die anderen beiden. Wenn Sie die [Einrichtung für Coding-Agenten bei OmniaKey](https://docs.omniakey.com/en/coding) schon hinter sich haben, funktioniert derselbe Schlüssel auch hier.

Factory sagt, dass Schlüssel lokal bleiben und nicht auf Factory-Server hochgeladen werden (Factorys BYOK-Doku, geprüft am 30. Oktober 2026). Ältere Anleitungen legen Modelle in `~/.factory/config.json` ab. Die BYOK-Doku von Factory schreibt weiterhin, dass Droid sie beim Start nach `settings.json` kopiert. Ein Pull Request im GitHub-Repository von Factory (#76) besagt, dass eine am 15. Oktober 2026 zusammengeführte Codeänderung dieses Kopieren entfernt hat – legen Sie neue Modelle also direkt in `settings.json` ab.

## Wie wählen Sie ein eigenes Modell in Droid aus?

Öffnen Sie in der App `/model` und schauen Sie unter Custom Models; auf der Kommandozeile übergeben Sie eine `custom:`-ID an `droid exec`.

Laut Factory-Doku erscheinen gespeicherte Modelle dort mit ihrem `displayName`, und Sie können eines unter `/settings` > Custom models oder `/model` > Manage custom models hinzufügen (geprüft am 30. Oktober 2026).

Die `droid exec`-ID besteht aus `custom:`, dem Anzeigenamen mit Bindestrichen statt Leerzeichen, einem Bindestrich und der Position des Modells in `customModels`, ab 0 gezählt (Factorys `droid exec`-Doku, geprüft am 30. Oktober 2026). Bei uns kamen `custom:Claude-Sonnet-5.5-[OmniaKey]-0`, `custom:GPT-6.1-Terra-[OmniaKey]-1` und `custom:MiniMax-M3.1-Flash-[OmniaKey]-2` heraus.

Der Index folgt der Reihenfolge im Array. Schieben Sie ein Modell dazwischen, verschieben sich alle IDs darunter; kopieren Sie die ID nach dem Bearbeiten der Datei neu.

`-r` / `--reasoning-effort` in `droid exec` greift bei eigenen Modellen nicht (Factorys `droid exec`-Doku, geprüft am 30. Oktober 2026). Setzen Sie stattdessen `reasoningEffort` im Eintrag.

## Drei Modelle, derselbe Bug

Zwei Dateien, ein Befehl, ein Lauf pro Modell. `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")
```

Der Befehl, bei dem sich zwischen den Läufen nur der Wert von `--model` ändert:

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

|Modell|Zeit|Turns|Ausgabe-Tokens|
|-|-|-|-|
|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|

Das sind Droids eigene Zahlen (`duration_ms`, `num_turns`, `output_tokens`). Flash war mit 30,7 s am schnellsten, Claude brauchte die wenigsten Turns, und GPT-6.1 Terra brauchte mit 77,4 s am längsten. Das erste Token meldete Droid nach 8,7 s bei Claude, 17,8 s bei Terra und 7,0 s bei Flash. Alle drei haben den Bug behoben, ohne `test_stats.py` anzufassen, und die Tests meldeten `all tests passed`.

Claudes Änderung:

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

GPT-6.1 Terra setzte denselben Zweig über die alte Rückgabezeile, und MiniMax M3.1 Flash schrieb ihn mit `% 2 == 1`. Alle drei Antworten beschrieben genau diese Korrektur: bei gerader Anzahl die beiden mittleren Werte mitteln. Der [Test zu MiniMax M3.1 Flash](https://omniakey.com/de/blog/minimax-m3-1-flash-review) geht ausführlicher auf das Modell ein.

Im JSON-Ergebnis von Droid stand außerdem bei jedem Lauf `factory_credits`, obwohl wir nie angemeldet waren: 31.534 für Claude Sonnet 5.5, 4.830 für GPT-6.1 Terra und 835 für MiniMax M3.1 Flash. Die Doku von Factory erklärt nicht, was die Zahl misst und wie sie mit dem BYOK-Kontingent zusammenhängt (geprüft am 30. Oktober 2026).

## Brauchen Sie ein Factory-Konto oder einen Plan?

Bei unseren Läufen brauchte `droid exec` mit einem `custom:`-Modell kein Factory-Konto. Factorys eigene Modelle und die interaktive App fragten danach.

Droid CLI 1.0.0 erschien am 29. Oktober 2026 (Factorys Changelog, geprüft am 30. Oktober 2026). In einem frischen Home-Verzeichnis ohne Factory-Anmeldung lief jeder Aufruf von `droid exec` mit einem `custom:`-Modell über unseren eigenen Schlüssel. Derselbe Befehl ohne `--model` brach sofort ab mit „Authentication failed. Please log in using /login or set a valid FACTORY\_API\_KEY environment variable.“ („Anmeldung fehlgeschlagen. Bitte melden Sie sich mit /login an oder setzen Sie eine gültige Umgebungsvariable FACTORY\_API\_KEY.“). Der Changelog-Eintrag zu Factory v0.236.0 (8. Oktober 2026) behandelt fortgesetzte Sitzungen: „Droid exec now resumes a session on your own model credentials without a Factory sign-in.“ („Droid exec setzt eine Sitzung jetzt mit Ihren eigenen Modell-Zugangsdaten fort, ohne Anmeldung bei Factory.“)

Der Start von `droid` ohne Argumente im selben Ordner endete mit „Please login with your Factory account to continue.“ („Bitte melden Sie sich mit Ihrem Factory-Konto an, um fortzufahren.“). Ohne Anmeldung konnten wir eigene Modelle in der interaktiven oder der Desktop-App nicht ausprobieren, und Bild-Eingaben, Bedrock, `apiKeyHelper`, `reasoningEffort`, Thinking-Einstellungen, Windows, Sitzungen über eine Aufgabe hinaus sowie die alte `config.json` haben wir nicht getestet.

Factorys Individual-Pläne kosten $20 (Pro), $100 (Plus) und $200 (Max) pro Monat; die Preisseite ergänzt Teams mit $60 pro Monat und Team plus $40 pro Sitz und kennt keinen kostenlosen Individual-Plan (Factorys Preis-Doku und Preisseite, geprüft am 30. Oktober 2026).

Die Preisdoku für Individual-Pläne sagt: „BYOK is free up to an allowance on all Individual plans. After that, usage is charged according to your specific plan.“ („BYOK ist bis zu einem Kontingent in allen Individual-Plänen kostenlos. Danach wird die Nutzung nach Ihrem jeweiligen Plan abgerechnet.“) Wie groß dieses Kontingent ist und wie die Abrechnung danach aussieht, schreibt Factory nicht.

Persönliche eigene Modelle funktionieren in der CLI und in der Desktop-App, erscheinen aber nicht in den gehosteten Web- und Mobile-Apps von Factory (Factorys BYOK-Doku, geprüft am 30. Oktober 2026).

## Welche Fehler treten auf, und was hilft dagegen?

Jeder dieser Fehler kam von einem falschen Wert in einer sonst funktionierenden Einrichtung, auf Droid 1.0.0.

1. `anthropic` mit `/v1` in der Basis-URL. Droid meldete nach 0,9 s „Requested model was not found on the API provider“ („Das angefragte Modell wurde beim API-Anbieter nicht gefunden“), und im Log stand `404` zu `Invalid URL (POST /v1/v1/messages)`. Droid hängt `/v1/messages` selbst an, unser `/v1` verdoppelte es also. Lösung: der blanke Host, `https://api.anthropic.com` oder `https://api.omniakey.com`.

2. `openai` mit dem blanken Host. Droid meldete nach 1,4 s `404` und eine nginx-Seite „404 Not Found“; die Responses API liegt unter `/v1`. Lösung: `https://api.openai.com/v1` oder `https://api.omniakey.com/v1`.

3. Eine Modell-ID mit Punkten, `claude-sonnet-5.5`, statt `claude-sonnet-5-5`. Der Endpunkt antwortete mit `503`, dem Code `model_not_found` und der Meldung „No available channel for model claude-sonnet-5.5“ („Kein verfügbarer Kanal für Modell claude-sonnet-5.5“). Droid protokollierte jeden Fehlschlag als „overloaded“ und machte 259,7 Sekunden lang (etwa 4 Minuten 20 Sekunden) 10 Versuche, bevor es mit dieser Meldung abbrach. Die Formulierung stammt vom Gateway, das Wiederholen von Droid. Lösung: die exakte ID aus der Modellliste Ihres Anbieters kopieren.

4. `OMNIAKEY_API_KEY` in der Shell leer, aus der Droid gestartet wurde. Droid bekam nach 2,8 s `401` mit „Invalid token“ („Ungültiges Token“). Lösung: den Schlüssel in der Shell exportieren, aus der Sie `droid` starten, und eine neue Sitzung beginnen.

Die Fehlersuche-Doku von Factory nennt zwei weitere Punkte. „Invalid provider“ bedeutet, dass der Wert falsch geschrieben oder anders großgeschrieben ist; er muss genau `anthropic`, `openai`, `generic-chat-completion-api` oder `bedrock-converse` lauten. Fehlt ein Modell in der Auswahl, raten die Docs, die JSON-Syntax in `~/.factory/settings.json` zu prüfen und darauf zu achten, dass jeder Eintrag seine Pflichtfelder hat (geprüft am 30. Oktober 2026).

## FAQ

### Wo liegt die Droid-Settings-Datei unter Windows?

`%USERPROFILE%\.factory\settings.json`, dieselbe Datei wie `~/.factory/settings.json` unter macOS und Linux (Factorys Settings-Doku, geprüft am 30. Oktober 2026). Tragen Sie `customModels` dort ein.

### Warum erscheint mein eigenes Modell nicht in `/model`?

Prüfen Sie zuerst die JSON-Syntax in `~/.factory/settings.json`, dann die Felder `model`, `baseUrl` und `provider`. Droid erkennt gespeicherte Änderungen über File Watching (Factorys BYOK-Doku, geprüft am 30. Oktober 2026). Ein Bericht zu Desktop 0.184.0 mit CLI 0.227.0 zeigte eigene Modelle kurz im Desktop-Picker; danach verschwanden sie, während `droid exec --help` weiter alle 14 auflistete; das Issue ist inzwischen geschlossen (Factory-AI Issue #40, geprüft am 30. Oktober 2026).

### Können eigene Modelle Bilder lesen?

Bei `anthropic` und `openai` sind Bilder standardmäßig an, bei `generic-chat-completion-api` aus, wo `noImageSupport` auf `true` steht (Factorys BYOK-Doku, geprüft am 30. Oktober 2026). Setzen Sie `noImageSupport: false` bei einem generischen Eintrag, um sie zu erlauben. Laut einer Meldung wurden Bilder mit CLI v0.205.1 trotz gesetztem Wert entfernt (Factory-AI Issue #24, geprüft am 30. Oktober 2026).

### Kann ich den Reasoning-Aufwand für ein eigenes Modell festlegen?

`-r` / `--reasoning-effort` in `droid exec` greift bei eigenen Modellen nicht. Setzen Sie stattdessen `reasoningEffort` im Eintrag: Der Wert legt den Standardaufwand für ein Modell fest, das Droid nicht kennt, und ergänzt off, low, medium und high in der Auswahl (Factorys BYOK-Doku, geprüft am 30. Oktober 2026).

### Funktionieren eigene Modelle in der Droid-Desktop-App?

Ja: Persönliche eigene Modelle stehen in der CLI und in der Desktop-App bereit und bleiben aus den gehosteten Web- und Mobile-Apps heraus. Die Modell-Editoren in CLI und Desktop-App speichern beide in `~/.factory/settings.json` (Factorys BYOK-Doku, geprüft am 30. Oktober 2026).

## Geprüfte Quellen

- [Factory BYOK-Doku](https://docs.factory.com/model-independence/byok.md), geprüft am 30. Oktober 2026
- [Factory Settings-Doku](https://docs.factory.com/droid-cli/settings.md), geprüft am 30. Oktober 2026
- [Factory droid exec Doku](https://docs.factory.com/droid-exec/overview.md), geprüft am 30. Oktober 2026
- [Factory Release Notes](https://docs.factory.com/changelog/release-notes.md), geprüft am 30. Oktober 2026
- [Factory Individual-Pläne](https://docs.factory.com/pricing/individuals.md), geprüft am 30. Oktober 2026
- [Factory Preise](https://factory.com/pricing), geprüft am 30. Oktober 2026
- [Factory-AI Issue #40: eigene Modelle verschwinden aus dem Desktop-Picker](https://github.com/Factory-AI/factory/issues/40), geprüft am 30. Oktober 2026
- [Factory-AI Issue #24: Bilder werden entfernt](https://github.com/Factory-AI/factory/issues/24), geprüft am 30. Oktober 2026
- [Factory-AI Pull Request #76: config.json-Migration](https://github.com/Factory-AI/factory/pull/76), geprüft am 30. Oktober 2026

OmniaKeys eigene Doku, geprüft am 30. Oktober 2026: [API-Überblick](https://docs.omniakey.com/en/api/overview) und [OpenAI-kompatible API](https://docs.omniakey.com/en/api/openai-compatible).
