Providers
推論する
inferrs は、OpenAI 互換の /v1 API の背後でローカルモデルを提供できます。OpenClaw は汎用の openai-completions パスを通じて inferrs と連携します。
| プロパティ | 値 |
|---|---|
| プロバイダー ID | inferrs (カスタム。models.providers.inferrs の下で設定) |
| Plugin | なし — inferrs はバンドルされた OpenClaw プロバイダー Plugin ではありません |
| 認証環境変数 | 任意。inferrs サーバーに認証がない場合は任意の値で動作します |
| API | OpenAI 互換 (openai-completions) |
| 推奨ベース URL | http://127.0.0.1:8080/v1 (または inferrs サーバーが稼働している場所) |
はじめに
モデル付きで inferrs を起動する
inferrs serve google/gemma-4-E2B-it \ --host 127.0.0.1 \ --port 8080 \ --device metalサーバーに到達できることを確認する
curl http://127.0.0.1:8080/healthcurl http://127.0.0.1:8080/v1/modelsOpenClaw プロバイダーエントリを追加する
明示的なプロバイダーエントリを追加し、デフォルトモデルをそこに向けます。完全な設定例は以下を参照してください。
完全な設定例
この例では、ローカルの inferrs サーバー上で Gemma 4 を使用します。
{ agents: { defaults: { model: { primary: "inferrs/google/gemma-4-E2B-it" }, models: { "inferrs/google/gemma-4-E2B-it": { alias: "Gemma 4 (inferrs)", }, }, }, }, models: { mode: "merge", providers: { inferrs: { baseUrl: "http://127.0.0.1:8080/v1", apiKey: "inferrs-local", api: "openai-completions", models: [ { id: "google/gemma-4-E2B-it", name: "Gemma 4 E2B (inferrs)", reasoning: false, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 4096, compat: { requiresStringContent: true, }, }, ], }, }, },}オンデマンド起動
inferrs/... モデルが選択された場合にのみ、OpenClaw によって Inferrs を起動することもできます。同じプロバイダーエントリに localService を追加します。
{ models: { providers: { inferrs: { baseUrl: "http://127.0.0.1:8080/v1", apiKey: "inferrs-local", api: "openai-completions", timeoutSeconds: 300, localService: { command: "/opt/homebrew/bin/inferrs", args: [ "serve", "google/gemma-4-E2B-it", "--host", "127.0.0.1", "--port", "8080", "--device", "metal", ], healthUrl: "http://127.0.0.1:8080/v1/models", readyTimeoutMs: 180000, idleStopMs: 0, }, models: [ { id: "google/gemma-4-E2B-it", name: "Gemma 4 E2B (inferrs)", reasoning: false, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 4096, compat: { requiresStringContent: true, }, }, ], }, }, },}command は絶対パスである必要があります。Gateway ホストで which inferrs を使用し、そのパスを設定に入れてください。すべてのフィールドリファレンスについては、ローカルモデルサービス を参照してください。
高度な設定
requiresStringContent が重要な理由
一部の inferrs Chat Completions ルートは、構造化された content-part 配列ではなく、文字列の messages[].content のみを受け付けます。
compat: { requiresStringContent: true}OpenClaw はリクエストを送信する前に、純粋なテキストの content part をプレーンな文字列にフラット化します。
Gemma とツールスキーマの注意点
現在の一部の inferrs + Gemma の組み合わせは、小さな直接の /v1/chat/completions リクエストを受け付けますが、完全な OpenClaw agent-runtime ターンではまだ失敗します。
その場合は、まずこれを試してください。
compat: { requiresStringContent: true, supportsTools: false}これにより、そのモデルに対する OpenClaw のツールスキーマサーフェスが無効になり、より厳格なローカルバックエンドへのプロンプト負荷を軽減できます。
ごく小さな直接リクエストは引き続き動作するものの、通常の OpenClaw エージェントターンが inferrs 内でクラッシュし続ける場合、残っている問題は通常、OpenClaw のトランスポート層ではなく、アップストリームのモデルまたはサーバーの挙動です。
手動スモークテスト
設定後、両方の層をテストします。
curl http://127.0.0.1:8080/v1/chat/completions \ -H 'content-type: application/json' \ -d '{"model":"google/gemma-4-E2B-it","messages":[{"role":"user","content":"What is 2 + 2?"}],"stream":false}'openclaw infer model run \ --model inferrs/google/gemma-4-E2B-it \ --prompt "What is 2 + 2? Reply with one short sentence." \ --json最初のコマンドは動作するが、2 番目が失敗する場合は、以下のトラブルシューティングセクションを確認してください。
プロキシ形式の挙動
inferrs はネイティブの OpenAI エンドポイントではなく、プロキシ形式の OpenAI 互換 /v1 バックエンドとして扱われます。
- ネイティブ OpenAI 専用のリクエスト整形はここでは適用されません
service_tier、Responsesstore、プロンプトキャッシュヒント、OpenAI reasoning 互換ペイロード整形はありません- 隠し OpenClaw attribution ヘッダー (
originator、version、User-Agent) はカスタムinferrsベース URL には注入されません
トラブルシューティング
curl /v1/models が失敗する
inferrs が実行されていない、到達できない、または想定された host/port にバインドされていません。サーバーが起動され、設定したアドレスでリッスンしていることを確認してください。
messages[].content expected a string
モデルエントリで compat.requiresStringContent: true を設定してください。詳細は上記の requiresStringContent セクションを参照してください。
直接の /v1/chat/completions 呼び出しは成功するが openclaw infer model run が失敗する
ツールスキーマサーフェスを無効にするために、compat.supportsTools: false を設定してみてください。上記の Gemma ツールスキーマの注意点を参照してください。
inferrs が大きなエージェントターンでまだクラッシュする
OpenClaw がスキーマエラーを受け取らなくなっても、inferrs が大きなエージェントターンでまだクラッシュする場合は、アップストリームの inferrs またはモデルの制限として扱ってください。プロンプト負荷を下げるか、別のローカルバックエンドまたはモデルに切り替えてください。