Skip to content

FallbackSpec

Defined in: core/src/fallback.ts:64

A fallback named by PRESET id rather than hand-built: the endpoint, auth style, effort dialect and every measured quirk come from the presets table, so a consumer writes neither a baseUrl nor a model-spelling rule. A hand-built Provider is still accepted wherever a spec is.

apiKey: string;

Defined in: core/src/providers/factory.ts:40

The credential: an API key for key/bearer presets, an ACCESS TOKEN for oauth ones. @providerkit/core/auth signs in and renews it.

PresetProviderConfig.apiKey


optional baseUrl?: string;

Defined in: core/src/providers/factory.ts:50

Replaces the preset’s API root. For a vendor that gives each account its own host (Copilot: credential.baseUrl from the sign-in).

PresetProviderConfig.baseUrl


optional dataCollection?: "allow" | "deny";

Defined in: core/src/providers/factory.ts:91

OpenRouter-only: provider.data_collection. "deny" keeps the request on hosts that don’t train on the prompt. Not zero retention: that is OpenRouter’s separate zdr. Absent = the account’s own setting. Never sent to another host.

PresetProviderConfig.dataCollection


optional effort?: "none" | "low" | "medium" | "high" | "max";

Defined in: core/src/providers/factory.ts:51

PresetProviderConfig.effort


optional fallbackOptions?: FallbackOptions<Provider>;

Defined in: core/src/fallback.ts:94

Custom cooldown or telemetry options for the fallback pool.

PresetProviderConfig.fallbackOptions


optional fallbacks?: readonly FallbackCandidate[];

Defined in: core/src/fallback.ts:88

Secondary and tertiary providers to try if this provider fails/exhausts: hand-built Providers, preset-id FallbackSpecs, or both.

PresetProviderConfig.fallbacks


optional fetchImpl?: (input, init?) => Promise<Response>;

Defined in: core/src/providers/factory.ts:95

MDN Reference

Parameter Type
input RequestInfo | URL
init? RequestInit

Promise<Response>

PresetProviderConfig.fetchImpl


optional headers?: Record<string, string>;

Defined in: core/src/providers/factory.ts:56

Per-request headers (request ids, ChatGPT-Account-Id) on top of the preset’s static protocol headers.

PresetProviderConfig.headers


optional instanceSessionId?: string;

Defined in: core/src/providers/factory.ts:67

The session id for a call without StreamOptions.sessionId, on a preset that sends one (opencode-go, opencode-zen, chatgpt). Absent, the provider mints its own when it is built. Pass one when you build the provider per attempt (withKeyPool, withToken): each build would mint a new id, and a gateway that pins a session to one upstream host then treats every call as a new session, re-routes it and misses its prompt cache. Every model in a chain sends the same one. A preset without a session header has nowhere to put it and ignores it.

PresetProviderConfig.instanceSessionId


optional maxTokens?: number;

Defined in: core/src/providers/factory.ts:53

Output ceiling. The Anthropic shape requires one; adapters default it.

PresetProviderConfig.maxTokens


optional model?: string;

Defined in: core/src/providers/factory.ts:43

Which model to run. Absent = the preset’s defaultModel; a preset without either throws rather than sending a request nobody chose.

PresetProviderConfig.model


optional models?: readonly string[];

Defined in: core/src/providers/factory.ts:47

A model chain on this one endpoint and key: the first answers, the rest take over in order when it fails (quota, rate, outage). Wins over model and the preset’s rotation; fallbacks still run after the chain.

PresetProviderConfig.models


preset:
| "anthropic"
| "openai"
| "google"
| "google-openai"
| "deepseek"
| "openrouter"
| "groq"
| "mistral"
| "xai"
| "together"
| "fireworks"
| "cerebras"
| "moonshot"
| "zhipu"
| "minimax"
| "minimax-openai"
| "nvidia"
| "perplexity"
| "deepinfra"
| "nebius"
| "novita"
| "chutes"
| "siliconflow"
| "volcengine"
| "stepfun"
| "digitalocean"
| "crusoe"
| "baseten"
| "huggingface"
| "zai"
| "zai-openai"
| "opencode-go"
| "qwen"
| "opencode-zen"
| "kimi"
| "kimi-openai"
| "alibaba-coding-plan"
| "qwen-token-plan-openai"
| "alibaba"
| "qwen-api"
| "ollama"
| "lmstudio"
| "vllm"
| "claude"
| "chatgpt"
| "grok"
| "kimi-plan"
| "github-copilot"
| "antigravity";

Defined in: core/src/fallback.ts:65


optional projectId?: string;

Defined in: core/src/providers/factory.ts:69

Google Antigravity (Cloud Code Assist) project id for the request envelope.

PresetProviderConfig.projectId


optional providerOrder?: string[];

Defined in: core/src/providers/factory.ts:86

OpenRouter-only: preferred upstream hosts, in order. OpenRouter’s cache lives on the upstream host’s account and default routing hops hosts between rounds. Pinning keeps a conversation’s rounds (and their cache) on one host. Empty/absent = default routing.

PresetProviderConfig.providerOrder


optional serviceTier?: ServiceTier;

Defined in: core/src/providers/factory.ts:94

Default service_tier for every call on the OpenAI and Responses shapes; StreamOptions.serviceTier wins. Anthropic and Gemini presets refuse it.

PresetProviderConfig.serviceTier


optional siteName?: string;

Defined in: core/src/providers/factory.ts:81

App name for OpenRouter’s rankings, sent as X-Title. See siteUrl.

PresetProviderConfig.siteName


optional siteUrl?: string;

Defined in: core/src/providers/factory.ts:77

App attribution for OpenRouter’s rankings. The site URL rides as HTTP-Referer, the app name as X-Title. Public, not secret. Sent on the OpenAI-compatible and Anthropic shapes (OpenRouter reads them for app attribution); the Gemini and Responses shapes ignore them. An explicit entry in headers always wins.

PresetProviderConfig.siteUrl


optional watchdog?: WatchdogOptions;

Defined in: core/src/fallback.ts:92

Watch every candidate separately. A silent candidate then times out and rotates; wrapping the completed pool would abort the whole chain instead. Fallback specs inherit this unless they set their own watchdog.

PresetProviderConfig.watchdog