import type { Tool, ToolChoice } from "../types/index.js";
export declare function resolveToolChoice(options: {
    toolChoice?: ToolChoice<Record<string, Tool>>;
}, tools: Record<string, Tool> | undefined, shouldUseTools: boolean): ToolChoice<Record<string, Tool>> | "none";
/**
 * Normalise an already-resolved tool choice into the shape
 * `toolChoiceToAnthropic` (and its peers) accept.
 *
 * A provider's model handle sees a value that has *already* been through
 * `resolveToolChoice` upstream, so it must translate rather than re-resolve —
 * re-resolving there would apply the `auto`/`none` defaulting twice, and the
 * `tools`/`shouldUseTools` inputs it needs are not in scope at that layer
 * anyway.
 *
 * What does vary is the shape. The value arrives either as a bare string
 * (`"auto"` / `"none"` / `"required"`), as `{ type: "tool", toolName }`, or —
 * on the native loop's tool-free re-ask — as an injected `{ type: "none" }`
 * object. Reading `.type` off the string forms yields `undefined`, which is
 * how string choices were silently dropped from the Anthropic generate
 * request. This exists so that normalisation lives in one place instead of
 * being re-derived at each call site.
 */
export declare function normalizeResolvedToolChoice(value: unknown): ToolChoice<Record<string, Tool>> | undefined;
