Konfiguration, Anpassung, Plattform-Einrichtung und API-Referenzen für Pi.

Benutzerdefiniert Models

Fügen Sie benutzerdefinierte Anbieter und Modelle (Ollama, vLLM, LM Studio, Proxys) über ~/.pi/agent/models.json hinzu.

Inhaltsverzeichnis

Minimales Beispiel

Für lokale Modelle (Ollama, LM Studio, vLLM) ist nur id pro Modell erforderlich:

{
  "providers": {
    "ollama": {
      "baseUrl": "http://localhost:11434/v1",
      "api": "openai-completions",
      "apiKey": "ollama",
      "models": [
        { "id": "llama3.1:8b" },
        { "id": "qwen2.5-coder:7b" }
      ]
    }
  }
}

Der Wert apiKey ist ein Platzhalter, da Ollama ihn ignoriert. pi behandelt Modelle immer noch so, dass eine Authentifizierung erforderlich ist, bevor sie in /model erscheinen, daher sollten schlüssellose lokale Server einen Dummy-Wert behalten, einen Schlüssel für diesen Anbieter mit /login speichern oder --api-key bei der Auswahl des Modells übergeben.

Einige OpenAI-kompatible Server verstehen die developer-Rolle nicht, die für Reasoning-fähige Modelle verwendet wird. Setzen Sie für diese Anbieter compat.supportsDeveloperRole auf false, damit Pi die Systemaufforderung stattdessen als system-Nachricht sendet. Wenn der Server auch reasoning_effort nicht unterstützt, setzen Sie compat.supportsReasoningEffort ebenfalls auf false.

Sie können compat auf Anbieterebene so festlegen, dass es für alle Modelle gilt, oder auf Modellebene, um ein bestimmtes Modell zu überschreiben. Dies gilt im Allgemeinen für Ollama, vLLM, SGLang und ähnliche OpenAI-kompatible Server.

{
  "providers": {
    "ollama": {
      "baseUrl": "http://localhost:11434/v1",
      "api": "openai-completions",
      "apiKey": "ollama",
      "compat": {
        "supportsDeveloperRole": false,
        "supportsReasoningEffort": false
      },
      "models": [
        {
          "id": "gpt-oss:20b",
          "reasoning": true
        }
      ]
    }
  }
}

Vollständiges Beispiel

Überschreiben Sie die Standardwerte, wenn Sie bestimmte Werte benötigen:

{
  "providers": {
    "ollama": {
      "baseUrl": "http://localhost:11434/v1",
      "api": "openai-completions",
      "apiKey": "ollama",
      "models": [
        {
          "id": "llama3.1:8b",
          "name": "Llama 3.1 8B (Local)",
          "reasoning": false,
          "input": ["text"],
          "contextWindow": 128000,
          "maxTokens": 32000,
          "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 }
        }
      ]
    }
  }
}

Die Datei wird jedes Mal neu geladen, wenn Sie /model öffnen. Während der Sitzung bearbeiten; Kein Neustart erforderlich.

Beispiel für Google AI Studio

Verwenden Sie google-generative-ai mit einem baseUrl, um Modelle aus Google AI Studio hinzuzufügen, einschließlich benutzerdefinierter Gemma 4-Einträge:

{
  "providers": {
    "my-google": {
      "baseUrl": "https://generativelanguage.googleapis.com/v1beta",
      "api": "google-generative-ai",
      "apiKey": "$GEMINI_API_KEY",
      "models": [
        {
          "id": "gemma-4-31b-it",
          "name": "Gemma 4 31B",
          "input": ["text", "image"],
          "contextWindow": 262144,
          "reasoning": true
        }
      ]
    }
  }
}

Die baseUrl ist erforderlich, wenn benutzerdefinierte Modelle zum Typ google-generative-ai API hinzugefügt werden.

Unterstützte APIs

API Beschreibung
openai-completions OpenAI-Chat-Abschlüsse (am kompatibelsten)
openai-responses OpenAI-Antworten API
anthropic-messages Anthropische Botschaften API
google-generative-ai Generative KI von Google

Legen Sie api auf Anbieterebene (Standard für alle Modelle) oder Modellebene (Überschreibung pro Modell) fest.

Anbieterkonfiguration

Feld Beschreibung
baseUrl API Endpunkt-URL
api API Typ (siehe oben)
apiKey Optionale API key-Konfiguration (siehe Werteauflösung unten). Lassen Sie es weg, wenn die Authentifizierung durch /login/auth.json oder CLI --api-key bereitgestellt wird.
oauth Dynamischer OAuth Anbietertyp. Unterstützt derzeit "radius"; erfordert das Gateway baseUrl.
headers Benutzerdefinierte Header (siehe Werteauflösung unten)
authHeader Stellen Sie true ein, um Authorization: Bearer <apiKey> automatisch hinzuzufügen
models Reihe von Modellkonfigurationen
modelOverrides Modellspezifische Überschreibungen für integrierte oder erweiterungsregistrierte Modelle bei diesem Anbieter

Für Anbieter mit models benötigen nicht integrierte Anbieterkonfigurationen baseUrl und einen api-Wert entweder auf Anbieter- oder Modellebene. apiKey ist zum Laden der Datei nicht erforderlich: Modelle werden verfügbar, wenn die Authentifizierung über /login/auth.json, CLI --api-key oder Anbieter apiKey konfiguriert wird. Wenn keine Authentifizierung konfiguriert ist, werden die Modelle geladen, bleiben aber in /model und --list-models nicht verfügbar.

Wertauflösung

Die Felder apiKey und headers unterstützen die Befehlsausführung, Umgebungsinterpolation und Literale:

  • Shell-Befehl: "!command" führt beim Start den gesamten Wert als Befehl aus und verwendet stdout
    "apiKey": "!security find-generic-password -ws 'anthropic'"
    "apiKey": "!op read 'op://vault/item/credential'"
  • Umgebungsinterpolation: "$ENV_VAR" oder "${ENV_VAR}" verwendet den Wert der benannten Variablen. Die Interpolation funktioniert innerhalb größerer Literale.
    "apiKey": "$MY_API_KEY"
    "apiKey": "${KEY_PREFIX}_${KEY_SUFFIX}"
    $FOO_BAR ist die Variable FOO_BAR; Verwenden Sie ${FOO}_BAR, wenn BAR wörtlicher Text ist. Fehlende Umgebungsvariablen machen den Wert unaufgelöst.
  • Escapes: "
    quot;
    gibt ein Literal "
    quot;
    aus; "$!" gibt ein Literal "!" aus, ohne die Befehlsausführung auszulösen.
    "apiKey": "$literal-dollar-prefix"
    "apiKey": "$!literal-bang-prefix"
  • Wörtlicher Wert: Wird direkt verwendet. Einfache Zeichenfolgen in Großbuchstaben wie MY_API_KEY sind Literale; Verwenden Sie $MY_API_KEY für Umgebungsvariablen.
    "apiKey": "sk-..."

Für models.json werden Shell-Befehle zum Zeitpunkt der Anforderung aufgelöst. pi wendet absichtlich keine integrierte TTL-, veraltete Wiederverwendungs- oder Wiederherstellungslogik für beliebige Befehle an. Unterschiedliche Befehle erfordern unterschiedliche Caching- und Fehlerstrategien, und Pi kann nicht auf die richtige schließen.

Wenn Ihr Befehl langsam, teuer oder geschwindigkeitsbegrenzt ist oder bei vorübergehenden Fehlern weiterhin einen vorherigen Wert verwenden soll, binden Sie ihn in Ihr eigenes Skript oder Ihren eigenen Befehl ein, der das gewünschte Caching- oder TTL-Verhalten implementiert.

/model Verfügbarkeitsprüfungen nutzen die konfigurierte Authentifizierungspräsenz und führen keine Shell-Befehle aus.

Benutzerdefinierte Header

{
  "providers": {
    "custom-proxy": {
      "baseUrl": "https://proxy.example.com/v1",
      "apiKey": "$MY_API_KEY",
      "api": "anthropic-messages",
      "headers": {
        "x-portkey-api-key": "$PORTKEY_API_KEY",
        "x-secret": "!op read 'op://vault/item/secret'"
      },
      "models": [...]
    }
  }
}

Modellkonfiguration

Feld Erforderlich Standard Beschreibung
id Ja Modell-ID (an API übergeben)
name NEIN id Für Menschen lesbares Modelletikett. Wird für den Abgleich (--model Muster) verwendet und als sekundärer Modelldetailtext angezeigt.
api NEIN Anbieter api Überschreiben Sie die API des Anbieters für dieses Modell
reasoning NEIN false Unterstützt erweitertes Denken
thinkingLevelMap NEIN weggelassen Ordnet die Pi-Denkebenen den Anbieterwerten zu und markiert nicht unterstützte Ebenen (siehe unten).
input NEIN ["text"] Eingabetypen: ["text"] oder ["text", "image"]
contextWindow NEIN 128000 Größe des Kontextfensters in Token
maxTokens NEIN 16384 Maximale Ausgabetoken
samplingParams NEIN weggelassen Stichprobenparameter werden wörtlich in jeden Anfragetext eingefügt (siehe unten)
cost NEIN alles Nullen Preise pro Million Token mit optionalen Preisstufen für die gesamte Anfrage
compat NEIN Anbieter compat Anbieterkompatibilitätsüberschreibungen. Wird mit Anbieterebene compat zusammengeführt, wenn beide festgelegt sind.

Eine Kostenstufe stellt einen vollständigen alternativen Tarifsatz bereit und gilt für die gesamte Anfrage, wenn die Gesamteingabenutzung (input + cacheRead + cacheWrite) inputTokensAbove übersteigt. Wenn mehrere Stufen übereinstimmen, gewinnt der höchste Schwellenwert.

{
  "cost": {
    "input": 5,
    "output": 30,
    "cacheRead": 0.5,
    "cacheWrite": 6.25,
    "tiers": [
      {
        "inputTokensAbove": 272000,
        "input": 10,
        "output": 45,
        "cacheRead": 1,
        "cacheWrite": 12.5
      }
    ]
  }
}

Aktuelles Verhalten:

  • /model, --list-models und die interaktive Fußzeile zeigt Einträge nach Modell an id.
  • Die konfigurierte name wird für den Modellabgleich und sekundären Modelldetailtext verwendet. Es ersetzt nicht die Fußzeilen-/Statusleisten-Modell-ID.

Probenahmeparameter

samplingParams ist ein Freiformobjekt, das wörtlich in jeden Anforderungshauptteil für das Modell eingefügt wird, nachdem sich die Felder pi selbst festgelegt haben, sodass seine Schlüssel gewinnen. Verwenden Sie es, um Stichprobenparameter zu senden, die pi nicht modelliert – einschließlich serverspezifischer Parameter wie llama.cpps min_p oder vLLMs top_k:

{
  "id": "deepseek-v4-flash",
  "samplingParams": {
    "temperature": 1.0,
    "top_p": 0.95,
    "top_k": 0,
    "min_p": 0.0
  }
}

Nur OpenAI-kompatible APIs wenden es an (openai-completions, openai-responses, azure-openai-responses); andere APIs ignorieren es. Schlüssel haben Vorrang vor den benannten Anforderungsfeldern von pi (z. B. übertrifft hier ein temperature-Schlüssel die Temperatur auf Anforderungsebene). Bevorzugen Sie ihn daher als einzige Quelle der Stichprobenwahrheit für ein Modell. In modelOverrides verschmilzt samplingParams pro Schlüssel mit dem Wert des Basismodells.

Denkebenenkarte

Verwenden Sie thinkingLevelMap für ein Modell, um modellspezifische Denkkontrollen zu beschreiben. Schlüssel sind Pi-Denkstufen: off, minimal, low, medium, high, xhigh, max. Karten können Löcher enthalten; Beispielsweise kann ein Modell high und max freilegen, ohne xhigh freizulegen.

Die Werte sind dreistufig:

Wert Bedeutung
weggelassen Standardstufen bis high verwenden die Standardzuordnung des Anbieters; Die erweiterten Stufen xhigh und max werden nicht unterstützt
Zeichenfolge Level wird unterstützt und dieser Wert wird an den Anbieter gesendet
null Ebene ist nicht unterstützt und versteckt/übersprungen/weggeklemmt

Beispiel für ein Modell, das nur Off-, High- und Max-Argumentation unterstützt:

{
  "id": "deepseek-v4-pro",
  "reasoning": true,
  "thinkingLevelMap": {
    "minimal": null,
    "low": null,
    "medium": null,
    "high": "high",
    "xhigh": null,
    "max": "max"
  }
}

Beispiel für ein Modell, bei dem das Denken nicht deaktiviert werden kann:

{
  "id": "always-thinking-model",
  "reasoning": true,
  "thinkingLevelMap": {
    "off": null
  }
}

Migration: Ältere Konfigurationen, die compat.reasoningEffortMap verwendet haben, sollten diese Zuordnung auf Modellebene thinkingLevelMap verschieben. Verwenden Sie null für Ebenen, die nicht in der Benutzeroberfläche angezeigt werden sollen.

Überschreiben der integrierten Providers

Leiten Sie einen integrierten Anbieter über einen Proxy weiter, ohne Modelle neu zu definieren:

{
  "providers": {
    "anthropic": {
      "baseUrl": "https://my-proxy.example.com/v1"
    }
  }
}

Alle eingebauten Anthropic-Modelle bleiben verfügbar. Die vorhandene OAuth- oder API key-Authentifizierung funktioniert weiterhin.

Um benutzerdefinierte Modelle mit einem integrierten Anbieter zusammenzuführen, schließen Sie das Array models ein:

{
  "providers": {
    "anthropic": {
      "baseUrl": "https://my-proxy.example.com/v1",
      "apiKey": "$ANTHROPIC_API_KEY",
      "api": "anthropic-messages",
      "models": [...]
    }
  }
}

Semantik zusammenführen:

  • Eingebaute Modelle bleiben erhalten.
  • Benutzerdefinierte Modelle werden innerhalb des Anbieters durch id ersetzt.
  • Wenn ein benutzerdefiniertes Modell id mit einem integrierten Modell id übereinstimmt, ersetzt das benutzerdefinierte Modell dieses integrierte Modell.
  • Wenn ein benutzerdefiniertes Modell id neu ist, wird es neben den integrierten Modellen hinzugefügt.

Überschreibungen pro Modell

Verwenden Sie modelOverrides, um integrierte Modelle und passende erweiterungsregistrierte Modelle anzupassen, ohne die vollständige Modellliste des Anbieters zu ersetzen.

{
  "providers": {
    "openrouter": {
      "modelOverrides": {
        "anthropic/claude-sonnet-4": {
          "name": "Claude Sonnet 4 (Bedrock Route)",
          "compat": {
            "openRouterRouting": {
              "only": ["amazon-bedrock"]
            }
          }
        }
      }
    }
  }
}

modelOverrides unterstützt diese Felder pro Modell: name, reasoning, thinkingLevelMap, input, cost (teilweise), contextWindow, maxTokens, samplingParams (zusammengeführt pro Schlüssel), headers, compat.

Direct OpenAI GPT-5.6 Sol, Terra und Luna verwenden standardmäßig ein 272000-Kontextfenster, sodass Anfragen innerhalb der Preisstufe für kurze Kontexte von OpenAI bleiben. Um sich für das 1,05-Millionen-Kontextfenster von OpenAI zu entscheiden, vergrößern Sie es für jedes von Ihnen verwendete Modell:

{
  "providers": {
    "openai": {
      "modelOverrides": {
        "gpt-5.6-sol": {
          "contextWindow": 1050000
        }
      }
    }
  }
}

Durch die Überschreibung bleiben die integrierten Preismetadaten erhalten. Anfragen mit insgesamt mehr als 272.000 Eingabetokens verwenden die Long-Context-Raten von GPT-5.6 für die gesamte Anfrage. Wenden Sie bei Bedarf die gleiche Überschreibung auf gpt-5.6-terra oder gpt-5.6-luna an.

Verhaltenshinweise:

  • modelOverrides werden auf integrierte Anbietermodelle und passende erweiterungsregistrierte Anbietermodelle angewendet.
  • Unbekannte Modell-IDs werden ignoriert.
  • Sie können die Anbieterebene baseUrl/headers mit modelOverrides kombinieren.
  • Das Überschreiben von name ändert nur den Modellabgleich und den sekundären Detailtext; In der Fußzeile und in den primären Modelllisten wird weiterhin das Modell id angezeigt.
  • Wenn models auch für einen Anbieter definiert ist, werden benutzerdefinierte Modelle nach integrierten Überschreibungen zusammengeführt. Ein benutzerdefiniertes Modell mit demselben id ersetzt den überschriebenen integrierten Modelleintrag.

Kompatibilität mit anthropischen Nachrichten

Für Anbieter oder Proxys, die api: "anthropic-messages" verwenden, verwenden Sie compat, um die Anthropic-spezifische Anforderungskompatibilität zu steuern.

Standardmäßig sendet pi pro Werkzeug eager_input_streaming: true. Wenn ein Proxy oder ein Anthropic-kompatibles Backend dieses Feld ablehnt, setzen Sie supportsEagerToolInputStreaming auf false. Pi lässt tools[].eager_input_streaming weg und sendet stattdessen den alten Beta-Header fine-grained-tool-streaming-2025-05-14 für Tool-fähige Anfragen.

Einige anthropische Modelle erfordern adaptives Denken (thinking.type: "adaptive" plus output_config.effort) anstelle der alten budgetbasierten Denklast. Bei Einbaumodellen wird dies automatisch eingestellt. Für benutzerdefinierte Anbieter oder Aliase, die an diese Modelle weiterleiten, setzen Sie forceAdaptiveThinking auf true.

Einige Anthropic-kompatible Anbieter geben Denkblöcke mit leeren Signaturen aus und erwarten sie dennoch bei der Wiedergabe. Setzen Sie allowEmptySignature nur für diese Anbieter auf true; Real Anthropic lehnt leere Denksignaturen ab.

Integrierte Anthropic-Modelle ermöglichen supportsStrictTools in ihren Modellmetadaten. Benutzerdefinierte Anthropic-kompatible Modelle müssen es auf true setzen, wenn ihr Endpunkt strikte JSON-Schema-Tooldefinitionen akzeptiert.

{
  "providers": {
    "anthropic-proxy": {
      "baseUrl": "https://proxy.example.com",
      "api": "anthropic-messages",
      "apiKey": "$ANTHROPIC_PROXY_KEY",
      "compat": {
        "supportsEagerToolInputStreaming": false,
        "supportsLongCacheRetention": true,
        "forceAdaptiveThinking": true,
        "allowEmptySignature": true
      },
      "models": [
        {
          "id": "claude-opus-4-7",
          "reasoning": true,
          "input": ["text", "image"]
        }
      ]
    }
  }
}
Feld Beschreibung
supportsEagerToolInputStreaming Ob der Anbieter pro Werkzeug eager_input_streaming akzeptiert. Standard: true. Legen Sie den Wert auf false fest, um dieses Feld wegzulassen und den alten Beta-Header für das feinkörnige Tool-Streaming für Tool-fähige Anfragen zu verwenden.
supportsLongCacheRetention Ob der Anbieter die lange Cache-Aufbewahrung von Anthropic (cache_control.ttl: "1h") akzeptiert, wenn die Cache-Aufbewahrung long ist. Standard: true.
sendSessionAffinityHeaders Ob x-session-affinity von der Sitzungs-ID gesendet werden soll, wenn Caching aktiviert ist. Standard: Bei bekannten Anbietern automatisch erkannt.
supportsCacheControlOnTools Ob der Anbieter cache_control-Markierungen im Anthropic-Stil für Werkzeugdefinitionen akzeptiert. Standard: true.
forceAdaptiveThinking Ob adaptives Denken (thinking.type: "adaptive" plus output_config.effort) für dieses Modell gesendet werden soll. Integrierte adaptive Modelle stellen dies automatisch ein. Standard: false.
allowEmptySignature Ob leere Denksignaturen als signature: "" wiedergegeben werden sollen, anstatt Denken in Text umzuwandeln. Standard: false.
supportsStrictTools Ob der Anbieter strenge JSON-Schema-Tooldefinitionen akzeptiert. Standard: false; Integrierte anthropische Modelle ermöglichen dies in generierten Metadaten.

OpenAI-Kompatibilität

Für Anbieter mit teilweiser OpenAI-Kompatibilität verwenden Sie das Feld compat.

  • Anbieterebene compat wendet Standardeinstellungen auf alle Modelle dieses Anbieters an.
  • Modellebene compat überschreibt Werte auf Anbieterebene für dieses Modell.
{
  "providers": {
    "local-llm": {
      "baseUrl": "http://localhost:8080/v1",
      "api": "openai-completions",
      "compat": {
        "supportsUsageInStreaming": false,
        "maxTokensField": "max_tokens"
      },
      "models": [...]
    }
  }
}
Feld Beschreibung
supportsStore Der Anbieter unterstützt das Feld store
supportsDeveloperRole Verwenden Sie die Rolle developer vs. system
supportsReasoningEffort Unterstützung für den Parameter reasoning_effort
supportsUsageInStreaming Unterstützt stream_options: { include_usage: true } (Standard: true)
supportsFinishReason Ob gestreamte Antworten finish_reason enthalten. Wenn false, leitet pi stop oder toolUse ab, wenn der Stream endet. Standard: true.
maxTokensField Verwenden Sie max_completion_tokens oder max_tokens
requiresToolResultName Fügen Sie name in Werkzeugergebnismeldungen ein
requiresAssistantAfterToolResult Fügen Sie eine Assistentennachricht vor einer Benutzernachricht nach den Werkzeugergebnissen ein
requiresThinkingAsText Konvertieren Sie Denkblöcke in einfachen Text
requiresReasoningContentOnAssistantMessages Fügen Sie in allen wiedergegebenen Assistentennachrichten ein leeres reasoning_content ein, wenn die Argumentation aktiviert ist
thinkingFormat Verwenden Sie die Denkparameter reasoning_effort, openrouter, deepseek, together, baseten, zai, qwen, chat-template oder qwen-chat-template
chatTemplateKwargs chat_template_kwargs Werte für thinkingFormat: "chat-template"; Verwenden Sie { "$var": "thinking.enabled" } oder { "$var": "thinking.effort" } für pi-kontrollierte Denkwerte
chatTemplateArgs chat_template_args Werte für thinkingFormat: "baseten"; Verwenden Sie { "$var": "thinking.enabled" } oder { "$var": "thinking.effort" } für pi-kontrollierte Denkwerte
cacheControlFormat Verwenden Sie cache_control-Markierungen im Anthropic-Stil für die Systemeingabeaufforderung, die letzte Werkzeugdefinition und den Textinhalt des letzten Benutzers, Assistenten oder Werkzeugergebnisses. Derzeit wird nur anthropic unterstützt.
sendSessionAffinityHeaders Senden Sie für openai-completions Sitzungsaffinitätsheader von der Sitzungs-ID, wenn Caching aktiviert ist. Standard: false.
sessionAffinityFormat Für openai-completions und openai-responses gilt das Session-Affinity-Header-Format: openai sendet session_id/x-client-request-id (Vervollständigungen auch x-session-affinity), openai-nosession lässt den Unterstrich enthaltenden session_id-Header weg, openrouter sendet x-session-id. Hat keinen Einfluss auf den Körperparameter prompt_cache_key. Standard: automatisch erkannt.
supportsStrictMode Ob der Anbieter strenge JSON-Schema-Funktionstooldefinitionen akzeptiert. Die Standardeinstellungen hängen von der API ab; Integrierte OpenAI-Modelle enthalten explizite Fähigkeitsmetadaten.
supportsOpenAIGrammarTools Ob OpenAI-kompatible APIs benutzerdefinierte Lark/Regex-Grammatiktools ausgeben. Bei false greifen grammatikbeschränkte Werkzeuge auf normale Funktionswerkzeuge zurück. Standard: false; Der integrierte Modellkatalog ermöglicht dies für GPT-5+-Modelle auf OpenAI, OpenAI Codex, Azure OpenAI, GitHub Copilot, Opencode und Cloudflare AI Gateway.
deferredToolsMode Verwenden Sie die anbieterspezifische verzögerte Tool-Serialisierung. Derzeit wird nur "kimi" für Kimis OpenAI-kompatibles Chat Completions-Format unterstützt.
supportsLongCacheRetention Ob der Anbieter eine lange Cache-Aufbewahrung akzeptiert, wenn die Cache-Aufbewahrung long ist: prompt_cache_retention: "24h" für OpenAI-Prompt-Caching oder cache_control.ttl: "1h", wenn cacheControlFormat anthropic ist. Standard: true.
openRouterRouting Routing-Einstellungen des OpenRouter-Anbieters. Dieses Objekt wird unverändert im Feld provider von OpenRouter API request gesendet.
vercelGatewayRouting Vercel AI Gateway-Routing-Konfiguration für die Anbieterauswahl (only, order)

openrouter verwendet reasoning: { effort }. together verwendet reasoning: { enabled } und auch reasoning_effort, wenn supportsReasoningEffort aktiviert ist. qwen verwendet enable_thinking der obersten Ebene. Verwenden Sie qwen-chat-template für lokale Qwen-kompatible Server, die chat_template_kwargs.enable_thinking und preserve_thinking erfordern. Verwenden Sie chat-template für vLLM/Hugging Face-Chat-Vorlagen, die konfigurierbares chat_template_kwargs benötigen, z. B. chatTemplateKwargs: { "thinking": { "$var": "thinking.enabled" } } für DeepSeek V3.x-Vorlagen. Verwenden Sie thinkingFormat: "baseten" mit chatTemplateArgs für Anbieter, die Umschaltsteuerungen bis chat_template_args verfügbar machen und optional reasoning_effort der obersten Ebene unterstützen.

cacheControlFormat: "anthropic" ist für OpenAI-kompatible Anbieter, die Prompt-Caching im Anthropic-Stil durch cache_control-Markierungen für Textinhalte und Tooldefinitionen verfügbar machen.

Beispiel:

{
  "providers": {
    "openrouter": {
      "baseUrl": "https://openrouter.ai/api/v1",
      "apiKey": "$OPENROUTER_API_KEY",
      "api": "openai-completions",
      "models": [
        {
          "id": "openrouter/anthropic/claude-3.5-sonnet",
          "name": "OpenRouter Claude 3.5 Sonnet",
          "compat": {
            "openRouterRouting": {
              "allow_fallbacks": true,
              "require_parameters": false,
              "data_collection": "deny",
              "zdr": true,
              "enforce_distillable_text": false,
              "order": ["anthropic", "amazon-bedrock", "google-vertex"],
              "only": ["anthropic", "amazon-bedrock"],
              "ignore": ["gmicloud", "friendli"],
              "quantizations": ["fp16", "bf16"],
              "sort": {
                "by": "price",
                "partition": "model"
              },
              "max_price": {
                "prompt": 10,
                "completion": 20
              },
              "preferred_min_throughput": {
                "p50": 100,
                "p90": 50
              },
              "preferred_max_latency": {
                "p50": 1,
                "p90": 3,
                "p99": 5
              }
            }
          }
        }
      ]
    }
  }
}

Beispiel für ein Vercel AI Gateway:

{
  "providers": {
    "vercel-ai-gateway": {
      "baseUrl": "https://ai-gateway.vercel.sh/v1",
      "apiKey": "$AI_GATEWAY_API_KEY",
      "api": "openai-completions",
      "models": [
        {
          "id": "moonshotai/kimi-k2.5",
          "name": "Kimi K2.5 (Fireworks via Vercel)",
          "reasoning": true,
          "input": ["text", "image"],
          "cost": { "input": 0.6, "output": 3, "cacheRead": 0, "cacheWrite": 0 },
          "contextWindow": 262144,
          "maxTokens": 262144,
          "compat": {
            "vercelGatewayRouting": {
              "only": ["fireworks", "novita"],
              "order": ["fireworks", "novita"]
            }
          }
        }
      ]
    }
  }
}