Skip to content

PresetProviderConfig

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

Standard options that any provider config can accept to configure fallbacks inline.

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.


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).


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.


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

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


optional fallbackOptions?: FallbackOptions<Provider>;

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

Custom cooldown or telemetry options for the fallback pool.

ProviderFallbackConfig.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.

ProviderFallbackConfig.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>


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.


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.


optional maxTokens?: number;

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

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


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.


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.


optional projectId?: string;

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

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


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.


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.


optional siteName?: string;

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

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


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.


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.

ProviderFallbackConfig.watchdog