/**
 * Policy for when AI-SDK structured output (experimental_output) must be
 * disabled because the provider cannot combine tool calls with JSON-schema
 * enforcement.
 *
 * Two provider surfaces have this conflict:
 *   - Gemini (google-ai, or Vertex with a non-Claude model).
 *   - The native Anthropic Messages API surface (provider "anthropic"/"bedrock",
 *     including via a proxy/base-URL override). experimental_output silently
 *     drops tool_use blocks when tools are also present (finishReason=tool-calls
 *     but zero parsed tool calls), so structured output must be disabled there too.
 *
 * Vertex+Claude (provider "vertex", modelName starts with "claude-") uses a
 * different transport that supports both simultaneously and must NOT be excluded —
 * a gate keyed on "any Vertex model" wrongly disables it for the primary
 * production config and forces fragile hand-parsed JSON.
 */
/** True when the provider+model is a Gemini model (the only family with the tools↔schema conflict). */
export declare function isGeminiProvider(providerName: string, modelName: string | undefined): boolean;
/**
 * True when the provider is the native Anthropic Messages API surface
 * (provider "anthropic" — including via a proxy/base-URL override — or "bedrock").
 * experimental_output + tools silently drops tool_use blocks on this surface, so
 * structured output must be disabled when tools are active. Vertex+Claude is NOT
 * matched here (different transport, no conflict).
 */
export declare function isNativeAnthropicProvider(providerName: string): boolean;
/**
 * True when structured output must be disabled for this call because tools are
 * active on a provider that cannot combine them (Gemini, or the native Anthropic
 * Messages API surface). Mirrors the AI-SDK constraint exactly.
 */
export declare function isToolsSchemaExclusionInForce(providerName: string, modelName: string | undefined, shouldUseTools: boolean, toolCount: number): boolean;
/**
 * True when a provider error indicates the request was rejected because JSON /
 * structured output and tool-calling cannot be combined for that provider
 * (e.g. Groq: "json mode cannot be combined with tool/function calling").
 *
 * This is the runtime, provider-agnostic complement to the static Gemini gate:
 * any provider with the same limitation can be detected from its error message
 * and retried without structured output instead of failing the call.
 */
export declare function isToolsSchemaConflictError(error: unknown): boolean;
/**
 * True when a provider error indicates the request was rejected because the
 * JSON schema is too complex for the provider's constrained decoding. Vertex
 * Gemini enforces response schemas as a state machine and rejects
 * "complex" schemas (regex patterns, string min/max lengths, nested array
 * caps, long enums) with a deterministic 400 INVALID_ARGUMENT:
 *
 *   "The specified schema produces a constraint that has too many states
 *    for serving. Typical causes of this error are schemas with lots of
 *    text …, schemas with long array length limits …, or schemas using
 *    complex value matchers …"
 *
 * The error arrives wrapped (provider error formatter + upstream JSON
 * envelope), so match on the distinctive substring. Retrying with the same
 * schema can never succeed — the correct recovery is to drop native schema
 * enforcement and coerce the text response into the schema instead
 * (same flow as isToolsSchemaConflictError).
 */
export declare function isSchemaComplexityError(error: unknown): boolean;
/**
 * True when a provider error indicates the request was rejected because the
 * `temperature` parameter is deprecated / unsupported for the model. The newest
 * Anthropic models (e.g. claude-opus-4-8, with tools + advanced beta features)
 * reject `temperature` — "`temperature` is deprecated for this model." — in
 * favour of reasoning-effort controls. Detect this so the call can be retried
 * once without `temperature` instead of failing the turn.
 */
export declare function isTemperatureDeprecatedError(error: unknown): boolean;
/**
 * True when the model is known to reject the `temperature` parameter (the
 * reasoning-effort Anthropic models — claude-opus-4-8 and newer — deprecate it
 * in favour of effort controls). Used to omit `temperature` proactively so the
 * request does not fail-then-retry on every turn: the reactive
 * isTemperatureDeprecatedError() retry remains the safety net for any model not
 * matched here, but a guaranteed-to-fail first request is pure wasted latency.
 *
 * Matches opus 4.8+ (4-8, 4-9, 4-10, …) while leaving 4.1/4.5/4.6 and Sonnet/
 * Haiku — which still accept `temperature` — untouched.
 */
export declare function modelDeprecatesTemperature(modelName: string | undefined): boolean;
