import type { CoreMessage as CoreMessageV4 } from '../../../_types/@internal_ai-sdk-v4/dist/index.js';
import type { ModelMessage, ToolResultPart } from '../../../_types/@internal_ai-sdk-v5/dist/index.js';
import type { IMastraLogger } from '../../../logger/index.js';
import type { MastraDBMessage } from '../state/types.js';
import type { ResponseItemIdProvider } from './response-item-metadata.js';
/**
 * Tool result with input field (Anthropic requirement)
 */
export type ToolResultWithInput = ToolResultPart & {
    input: Record<string, unknown>;
};
/**
 * Ensures message array is compatible with Gemini API requirements.
 *
 * Gemini API requires:
 * 1. The first non-system message must be from the user role
 * 2. Cannot have only system messages - at least one user/assistant is required
 *
 * @param messages - Array of model messages to validate and fix
 * @param logger - Optional logger for warnings
 * @returns Modified messages array that satisfies Gemini requirements
 *
 * @see https://github.com/mastra-ai/mastra/issues/7287 - Tool call ordering
 * @see https://github.com/mastra-ai/mastra/issues/8053 - Single turn validation
 * @see https://github.com/mastra-ai/mastra/issues/13045 - Empty thread support
 */
export declare function ensureGeminiCompatibleMessages<T extends ModelMessage | CoreMessageV4>(messages: T[], logger?: IMastraLogger): T[];
/**
 * Ensures model messages are compatible with Anthropic API requirements.
 *
 * Anthropic API requires tool-result parts to include an 'input' field
 * that matches the original tool call arguments.
 *
 * @param messages - Array of model messages to transform
 * @param dbMessages - MastraDB messages to look up tool call args from
 * @returns Messages with tool-result parts enriched with input field
 *
 * @see https://github.com/mastra-ai/mastra/issues/11376 - Anthropic models fail with empty object tool input
 */
export declare function ensureAnthropicCompatibleMessages(messages: ModelMessage[], dbMessages: MastraDBMessage[]): ModelMessage[];
/**
 * Removes orphan tool_use / tool_result blocks. Anthropic requires every tool_result
 * to be in the message immediately after its matching tool_use, and every tool_use
 * to have a matching tool_result in the next message. Recall windows can slice
 * through a parallel tool-call group and leave behind half a pair.
 */
export declare function sanitizeOrphanedToolPairs(messages: ModelMessage[]): ModelMessage[];
/**
 * Checks if a message part has an OpenAI reasoning itemId.
 *
 * OpenAI Responses reasoning items are tracked via `providerMetadata.openai.itemId`.
 * Each reasoning item has a unique itemId that must be preserved for proper deduplication.
 *
 * @param part - A message part to check
 * @returns true if the part has an OpenAI itemId
 *
 * @see https://github.com/mastra-ai/mastra/issues/9005 - OpenAI reasoning items filtering
 */
export declare function hasOpenAIReasoningItemId(part: unknown): boolean;
/**
 * Checks if a message part has an OpenAI-compatible Responses itemId.
 *
 * Provider-neutral Responses item IDs are tracked via provider metadata or
 * provider options fields such as `openai.itemId` or `azure.itemId`.
 */
export declare function hasResponseProviderItemId(part: unknown): boolean;
/**
 * Extracts an OpenAI itemId from a message part if present.
 *
 * This only inspects `providerMetadata.openai.itemId`; use
 * `getResponseProviderItemIdFromPart` for provider-aware Azure/OpenAI lookups.
 *
 * @param part - A message part to extract from
 * @returns The itemId string or undefined if not present
 */
export declare function getOpenAIReasoningItemId(part: unknown): string | undefined;
export declare function getResponseProviderItemIdFromPart(part: unknown): {
    provider: ResponseItemIdProvider;
    itemId: string;
} | undefined;
/**
 * Finds the tool call args for a given toolCallId by searching through messages.
 * This is used to reconstruct the input field when converting tool-result parts to StaticToolResult.
 *
 * Searches through messages in reverse order (most recent first) for better performance.
 * Checks both content.parts (v2 format) and toolInvocations (legacy AIV4 format).
 *
 * @param messages - Array of MastraDB messages to search through
 * @param toolCallId - The ID of the tool call to find args for
 * @returns The args object from the matching tool call, or an empty object if not found
 */
export declare function findToolCallArgs(messages: MastraDBMessage[], toolCallId: string): Record<string, unknown>;
//# sourceMappingURL=provider-compat.d.ts.map