Factory Droid のカスタムモデル設定:自分の API キーで Claude と GPT を使う
settings.json 1 つで、Droid 1.0.0 は同じキーのまま Claude Sonnet 5.5、GPT-6.1 Terra、MiniMax M3.1 Flash を動かしました。設定ファイル、モデルごとの provider、実際に踏んだ 4 つのエラーをまとめます。
このページの内容
Droid 1.0.0 では、カスタムモデルを ~/.factory/settings.json の customModels に書きます。1 件ごとに model、baseUrl、apiKey、provider の 4 項目が必要です。Claude は anthropic でホスト名だけを指定し、GPT は openai、それ以外は generic-chat-completion-api を使います。同じバグを 3 モデルが直し、かかった時間は 33.7 秒、77.4 秒、30.7 秒でした。
3 回とも OmniaKey の同じキーで実行しました。使ったのは Claude Sonnet 5.5、GPT-6.1 Terra、MiniMax M3.1 Flash です。どれも同じ壊れた median() 関数を渡し、3 つとも直しました。
先に結論
- 書く場所。
~/.factory/settings.jsonのcustomModelsです。項目はmodel、baseUrl、apiKey、providerの 4 つです(Factory の設定ドキュメント、2026 年 10 月 30 日確認)。 - provider の選び方。 Claude は
anthropic、GPT モデルはopenai、Chat Completions に対応するその他のモデルはgeneric-chat-completion-apiです。 /v1の要否。anthropicはホスト名だけを指定します。Droid が/v1/messagesを足すためです。openaiとgeneric-chat-completion-apiは/v1で終わる URL を指定します。droid execの id。custom:のあとに、空白をハイフンに変えた表示名、そのあとに 0 始まりの位置を続けます:custom:Claude-Sonnet-5.5-[OmniaKey]-0。- 実行結果。 3 モデルともバグを直しました。Flash が 30.7 秒、Claude が 33.7 秒、GPT-6.1 Terra が 77.4 秒です。
provider にはどの値を入れるか
モデル名ではなく、エンドポイントが対応する API で選びます。
anthropicは Anthropic Messages API のリクエストを送ります。Claude 用です。Anthropic の URL はhttps://api.anthropic.comです。openaiは OpenAI Responses API のリクエストを送ります。GPT モデル用です。OpenAI の URL はhttps://api.openai.com/v1です。generic-chat-completion-apiは OpenAI Chat Completions のリクエストを送ります。その他の多くのモデル、ゲートウェイ、ローカルサーバー用で、各サービスの/v1URL を指定します。
Factory は generic-chat-completion-api を OpenRouter、Fireworks、Together AI、Ollama、vLLM と多くのオープンソース系サービス向けに挙げています。OpenAI か Anthropic の公式 API を呼ぶ場合を除き、この値を使うよう勧めています(Factory の BYOK ドキュメント、2026 年 10 月 30 日確認)。
Messages API や Responses API にも対応するゲートウェイなら、anthropic や openai を選べます。OmniaKey 経由で設定した Claude と GPT-6.1 Terra の項目がそうで、どちらも動きました。OmniaKey の GPT モデルは POST /v1/responses で提供しています(OmniaKey の OpenAI 互換ドキュメント、2026 年 10 月 30 日確認)。
4 つ目の値 bedrock-converse は AWS Bedrock の Converse API 上のモデル用です。Factory は、公式 API 上の Anthropic と OpenAI のモデルだけが十分なテストとベンチマークを受けていると注意しています。パラメータ数が 300 億未満のモデルは、エージェント型のコーディングで明確に劣るとしています(Factory の BYOK ドキュメント、2026 年 10 月 30 日確認)。
使った settings.json
Droid は初回起動時に ~/.factory/settings.json を作ります。すでにあるファイルに customModels を足すだけです(Factory の設定ドキュメント、2026 年 10 月 30 日確認)。手元のファイルはこうです:
{
"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は API に送る id です。サービスのモデル一覧からそのままコピーします。displayNameは自分で付ける名前で、/modelに表示され、custom:id の組み立てにも使います。baseUrlはanthropicならホスト名だけ、残り 2 つは/v1で終わります。apiKey: "${OMNIAKEY_API_KEY}"は環境変数からキーを読みます。キーはファイルに残りません(Factory の BYOK ドキュメント、2026 年 10 月 30 日確認)。providerは使う API を決めます。ここを打ち間違えると、後述の "Invalid provider" エラーになります。maxOutputTokens: 16000は 1 回の回答の長さを制限します。
キー 1 つと 2 つの 接続先 URL で 3 モデルすべてをまかなえます。Claude は OmniaKey のホスト名だけの URL、残り 2 つは /v1 の URL です。OmniaKey のコーディングエージェント設定ドキュメント の手順で設定したなら、同じキーがそのまま使えます。
Factory は、キーはローカルに残り、Factory のサーバーにはアップロードされないと説明しています(Factory の BYOK ドキュメント、2026 年 10 月 30 日確認)。古い記事はモデルを ~/.factory/config.json に書いていました。Factory の BYOK ドキュメントは今も、Droid が起動時にそれを settings.json へコピーすると書いています。Factory のリポジトリの pull request(#76)は、2026 年 10 月 15 日にマージされた変更でこのコピーがなくなったと述べています。新しいモデルは settings.json に直接書いてください。
Droid でカスタムモデルを選ぶ方法
アプリでは /model を開き、Custom Models の欄を見ます。コマンドラインでは droid exec に custom: で始まる id を渡します。
Factory のドキュメントによると、保存したモデルは displayName 付きでそこに表示されます。/settings > Custom models からも、/model > Manage custom models からも追加できます(2026 年 10 月 30 日確認)。
droid exec の id は 3 つの部分からなります。custom:、空白をハイフンにした表示名、そして customModels 内の 0 始まりの位置です(Factory の droid exec ドキュメント、2026 年 10 月 30 日確認)。手元では custom:Claude-Sonnet-5.5-[OmniaKey]-0、custom:GPT-6.1-Terra-[OmniaKey]-1、custom:MiniMax-M3.1-Flash-[OmniaKey]-2 になりました。
位置は配列の順番に従います。上に 1 つ挿入すると、それ以降の id はすべてずれます。ファイルを編集したら id をコピーし直してください。
droid exec の -r / --reasoning-effort はカスタムモデルには効きません(Factory の droid exec ドキュメント、2026 年 10 月 30 日確認)。代わりに項目へ reasoningEffort を書いてください。
3 モデルで同じバグを直す
ファイル 2 つ、コマンド 1 つ、モデルごとに 1 回ずつ実行しました。stats.py:
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:
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 の値だけ変えています:
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 s | 3 | 702 |
| GPT-6.1 Terra | 77.4 s | 4 | 451 |
| MiniMax M3.1 Flash | 30.7 s | 4 | 525 |
数値は Droid 自身が返したものです(duration_ms、num_turns、output_tokens)。Flash が 30.7 秒で最短、Claude はターン数が最少、GPT-6.1 Terra は 77.4 秒で最長でした。最初のトークンまでの時間は Claude が 8.7 秒、Terra が 17.8 秒、Flash が 7.0 秒です。3 つとも test_stats.py に触れずにバグを直し、テストは all tests passed を出力しました。
Claude の変更:
- return ordered[mid]
+ if len(ordered) % 2:
+ return ordered[mid]
+ return (ordered[mid - 1] + ordered[mid]) / 2
GPT-6.1 Terra は元の return 行の上に同じ分岐を足し、MiniMax M3.1 Flash は % 2 == 1 で書きました。3 つの回答はどれもこの直し方を説明しています。要素数が偶数のときは中央 2 つの平均を返す、という内容です。MiniMax M3.1 Flash のレビュー では、このモデルをより詳しく扱っています。
Droid の JSON 結果は毎回 factory_credits も出力しました。こちらは一度もログインしていません。値は Claude Sonnet 5.5 が 31,534、GPT-6.1 Terra が 4,830、MiniMax M3.1 Flash が 835 です。この数字が何を測っているのか、BYOK の枠とどう関係するのかは Factory のドキュメントに書かれていません(2026 年 10 月 30 日確認)。
Factory アカウントやプランは必要か
手元の実行では、custom: モデルを使う droid exec に Factory アカウントは不要でした。Factory 自身のモデルと対話型アプリでは必要でした。
Droid CLI 1.0.0 は 2026 年 10 月 29 日に公開されました(Factory の変更履歴、2026 年 10 月 30 日確認)。Factory にログインしていないきれいなホームフォルダで、custom: モデルを使った droid exec はすべて自分のキーで動きました。同じコマンドから --model を外すと即座に止まり、"Authentication failed. Please log in using /login or set a valid FACTORY_API_KEY environment variable."(認証に失敗しました。/login でログインするか、有効な FACTORY_API_KEY 環境変数を設定してください。)と表示されました。Factory の v0.236.0 の変更履歴(2026 年 10 月 8 日)にはこうあります:"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 と thinking の設定、Windows、1 つのタスクより長いセッション、古い config.json は試していません。
Factory の Individual プランは月額 $20(Pro)、$100(Plus)、$200(Max)です。料金ページには Teams もあり、1 チームあたり月額 $60 に 1 席あたり $40 が加わります。個人向けの無料プランはありません(Factory の料金ドキュメントと料金ページ、2026 年 10 月 30 日確認)。
Individual の料金ドキュメントにはこうあります:"BYOK is free up to an allowance on all Individual plans. After that, usage is charged according to your specific plan."(BYOK はすべての Individual プランで一定の枠まで無料です。それを超えると、利用中のプランに従って課金されます。)Factory はその枠の大きさも、超えた後の請求額も示していません。
個人のカスタムモデルは CLI とデスクトップアプリで動きます。Factory がホストする Web 版とモバイル版には表示されません(Factory の BYOK ドキュメント、2026 年 10 月 30 日確認)。
どんなエラーが出て、どう直すか
どれも、それ以外は動いている設定の中で 1 つの値が間違っていた例です。環境は Droid 1.0.0 です。
-
anthropicのbaseUrlに/v1を付けた場合。Droid は 0.9 秒後に "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です。 -
openaiにホスト名だけを指定した場合。1.4 秒後に Droid は404と nginx の "404 Not Found" ページを出しました。Responses API は/v1の下にあります。直し方はhttps://api.openai.com/v1かhttps://api.omniakey.com/v1です。 -
モデル id にドットを入れた
claude-sonnet-5.5を使った場合。正しくはclaude-sonnet-5-5です。エンドポイントは503とエラーコードmodel_not_foundを返し、メッセージは "No available channel for model claude-sonnet-5.5"(このモデルを処理できるチャネルがありません)でした。Droid のログは各失敗を "overloaded" と記録し、259.7 秒(約 4 分 20 秒)かけて 10 回試してから終了しました。文言はゲートウェイのもので、再試行は Droid 側です。直し方は、サービスのモデル一覧から正確な id をコピーすることです。 -
Droid を起動したシェルで
OMNIAKEY_API_KEYが空だった場合。2.8 秒後に Droid は401と "Invalid token"(トークンが無効です)を受け取りました。直し方は、droidを起動するシェルでキーを export し、新しいセッションを始めることです。
Factory のトラブルシューティングにはさらに 2 つあります。"Invalid provider" は値の綴りか大文字小文字が違う場合で、anthropic、openai、generic-chat-completion-api、bedrock-converse のいずれかと完全に一致する必要があります。モデルが選択肢に出ない場合は、~/.factory/settings.json の JSON 構文を確認し、各項目に必須フィールドがあるかを確かめるようドキュメントは案内しています(2026 年 10 月 30 日確認)。
よくある質問
Windows で Droid の設定ファイルはどこにある?
%USERPROFILE%\.factory\settings.json です。macOS と Linux の ~/.factory/settings.json と同じファイルです(Factory の設定ドキュメント、2026 年 10 月 30 日確認)。customModels はここに書きます。
カスタムモデルが /model に出ないのはなぜ?
まず ~/.factory/settings.json の JSON 構文を見て、次に model、baseUrl、provider の各フィールドを確認します。Droid はファイル監視で保存された変更を検知します(Factory の BYOK ドキュメント、2026 年 10 月 30 日確認)。Desktop 0.184.0 と CLI 0.227.0 の組み合わせで、カスタムモデルがデスクトップの選択肢に一瞬出て消え、droid exec --help には 14 個すべてが並ぶという報告がありました。この issue はすでにクローズされています(Factory-AI issue #40、2026 年 10 月 30 日確認)。
カスタムモデルは画像を読める?
anthropic と openai では既定で有効、generic-chat-completion-api では既定で無効です。noImageSupport の既定値が true です(Factory の BYOK ドキュメント、2026 年 10 月 30 日確認)。generic の項目で noImageSupport: false にすると有効になります。CLI v0.205.1 でそう設定しても画像が取り除かれた、という報告が 1 件あります(Factory-AI issue #24、2026 年 10 月 30 日確認)。
カスタムモデルに reasoning effort は設定できる?
droid exec の -r / --reasoning-effort はカスタムモデルには効きません。項目に reasoningEffort を書いてください。Droid が認識しないモデルの既定の強さを決め、選択肢に off、low、medium、high を加えます(Factory の BYOK ドキュメント、2026 年 10 月 30 日確認)。
デスクトップ版 Droid でもカスタムモデルは使える?
使えます。個人のカスタムモデルは CLI とデスクトップアプリで利用でき、ホスト型の Web 版とモバイル版には出ません。CLI とデスクトップアプリのモデル編集画面はどちらも ~/.factory/settings.json に保存します(Factory の BYOK ドキュメント、2026 年 10 月 30 日確認)。
確認した情報源
- Factory の BYOK ドキュメント、2026 年 10 月 30 日確認
- Factory の設定ドキュメント、2026 年 10 月 30 日確認
- Factory の droid exec ドキュメント、2026 年 10 月 30 日確認
- Factory のリリースノート、2026 年 10 月 30 日確認
- Factory の Individual プラン、2026 年 10 月 30 日確認
- Factory の料金、2026 年 10 月 30 日確認
- Factory-AI issue #40:デスクトップの選択肢からカスタムモデルが消える、2026 年 10 月 30 日確認
- Factory-AI issue #24:画像が取り除かれる、2026 年 10 月 30 日確認
- Factory-AI pull request #76:config.json の移行、2026 年 10 月 30 日確認
OmniaKey 自身のドキュメント(2026 年 10 月 30 日確認):API 概要 と OpenAI 互換 API。
この記事で紹介しているモデル
関連記事
DeepSeek Harness で Claude と GPT の API を使う方法
OpenAI プロトコルのカスタムプロバイダーを 1 つ用意し、各モデルに推論レベルと 128K の出力上限を設定すれば、DeepSeek Harness で Claude Opus 5.5、Claude Sonnet 5.5、GPT-6.1 が動きます。内蔵の DeepSeek プロバイダーは、Claude が拒否する thinking 設定を送ります。
Claude CodeをOmniaKey APIで使う方法
Claude Code を OmniaKey の Anthropic ネイティブ エンドポイントにポイントします。2 つの環境変数、サイレントにスワップされることのないクロード モデル、月額プランなしでトークンごとに課金されます。
Claude Codeのおすすめモデル
日常のコーディングは100万入力トークンあたり2ドルのSonnet 5.5から始め、複数ファイルにまたがる作業は4ドルのOpus 5.5へ。最難関の長時間セッションはFable 5.1に残し、素早い修正やサブエージェントはHaiku 5.5に任せます。