pi-custom-model について
カスタムまたはバリアントのモデル ID を登録し、保存したデフォルトが解決されずに別モデルへ切り替わる事態を防ぐ Pi 向けエージェントスキルです。OpenRouter などのプロバイダー設定を扱います。
主な機能
- 01カスタムモデル ID の登録
- 02プロバイダーモデル情報の設定
- 03デフォルトモデルの設定と検証
- 04暗黙のフォールバックの調査
活用シーン
- 01Pi に OpenRouter のルーティングバリアントを追加
- 02デフォルトモデルのフォールバックを修正
- 03プロジェクト単位のモデル設定を確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ davidondrej/ skills --skill pi-custom-modelインストール後、Claude Code で/pi-custom-modelを入力して読み込まれたか確認します。
同梱ファイルagents/openai.yaml
詳細
Pi のカスタムモデル/バリアントモデル
使用する場面
Pi に保存されたデフォルト設定が読み込まれるのは、正確な provider/id がモデルレジストリに存在する場合のみです。Pi にはプロバイダーごとの静的な一覧が同梱されています。そのため、OpenRouter のルーティング用ショートカットバリアント(:nitro = スループット順に並べ替え、:floor = 最安値、:exacto = ツール使用品質)や、新しく追加されたスラッグは一覧に含まれていません。デフォルトを解決できない場合、Pi は組み込みのプロバイダーごとのデフォルト(openrouter の場合は moonshotai/kimi-k2.6)に暗黙的に切り替えるため、Pi がモデルを「リセット」したように見えます。解決方法は、スラッグをカスタムモデルとして登録し、find(provider, id) で一致するようにすることです。
ファイル(グローバル)
~/.pi/agent/settings.json—defaultProvider、defaultModel、defaultThinkingLevel~/.pi/agent/models.json— プロバイダーごとに登録するカスタムモデル~/.pi/agent/auth.json— プロバイダーの認証情報(プロバイダーキーが存在することを確認してください)
手順
- 追加する前に、スラッグが実在することを確認します(例:OpenRouter のモデル/バリアントが存在するか確認します)。
idの入力ミスも暗黙的なフォールバックの原因になります。 - 認証を確認します。 プロバイダーのキーが
auth.json(またはOPENROUTER_API_KEYなどの環境変数)に設定されている必要があります。認証情報がない場合、モデルは登録されても利用できず、引き続きフォールバックします。 - モデルを
models.jsonのproviders.<provider>.modelsの下に追加します。 組み込みプロバイダー(openrouter、anthropic など)の場合、メタデータだけを指定します。api、baseUrl、認証情報は同梱のデフォルト設定から引き継がれます。例:{ "providers": { "openrouter": { "models": [ { "id": "z-ai/glm-5.2:nitro", "name": "Z.ai: GLM 5.2 (nitro)", "reasoning": true, "thinkingLevelMap": { "xhigh": "xhigh" }, "input": ["text"], "cost": { "input": 0.95, "output": 3, "cacheRead": 0.18, "cacheWrite": 0 }, "contextWindow": 1048576, "maxTokens": 32768, "compat": { "supportsDeveloperRole": false, "thinkingFormat": "openrouter" } } ] } } }cost/contextWindow/compatはベースモデルからコピーします(バリアントでも同じ値です)。<pi-pkg>/node_modules/@earendil-works/pi-ai/dist/providers/<provider>.models.jsにある同梱エントリーを探してください。実際のモデルがより大きい場合、汎用的な 128k/16k の値をハードコードしないでください。 settings.jsonでデフォルトを設定します。defaultProviderとdefaultModelに正確な ID を指定します。defaultThinkingLevelはユーザーの設定のままにします。- 検証します。
pi --list-models | grep <id>にモデルが表示され、JSON の構文が正しいことを確認します。必要に応じてスモークテストを実行します:pi --provider <p> --model "<id>" "which model are you?"。
注意点
- 完全一致のみです。
find()はproviderとidが完全に一致する場合のみ該当します。保存されたデフォルトの経路では、あいまい一致やコロンの除去は行われません。settings.jsonとmodels.jsonのスラッグはバイト単位で完全に一致している必要があります。 - 暗黙的なフォールバックです。 デフォルトを解決できなくても、Pi はエラーを表示せず、フッターに別のモデルを表示します。これが見分ける手がかりです。
settings.jsonだけを編集しないでください。defaultModelに未登録のスラッグを設定しても何も起きません。実際の解決方法はmodels.jsonを編集することです。enabledModels(任意)でモデルピッカーに表示するモデルを固定すると、Ctrl+P による切り替えで別のモデルに戻るのを防げます:"enabledModels": ["<provider>/<id>:<thinking>"]。- プロジェクトによる上書き。 リポジトリの
.pi/settings.jsonはグローバル設定を上書きします。デフォルトが特定のプロジェクト内でのみ元に戻る場合は、まずこのファイルを確認してください。 - Pi を完全に再起動してください。レジストリは起動時に読み込まれます。
コメント
Markdown 対応