/**
 * Base class for model gateway providers
 * Gateways fetch provider configurations and build URLs for model access
 */
import type { LanguageModelV2 } from '../../../_types/@ai-sdk_provider-v5/dist/index.d.ts';
import type { LanguageModelV3 } from '../../../_types/@ai-sdk_provider-v6/dist/index.d.ts';
import type { LanguageModelV4 } from '../../../_types/@ai-sdk_provider-v7/dist/index.d.ts';
import type { StreamTransport } from '../../../stream/types.js';
import type { OpenAITransport, ResponsesWebSocketOptions } from '../provider-options.js';
/**
 * Per-model provider override sourced from a models.dev model's `provider` block.
 * Lets a single provider serve individual models over a different endpoint / request
 * shape / SDK than the provider default (e.g. a model served over the OpenAI
 * Responses API while the provider default is chat-completions).
 */
export interface ModelProviderOverride {
    api?: string;
    shape?: 'responses' | 'completions';
    npm?: string;
}
export interface ProviderConfig {
    url?: string;
    apiKeyHeader?: string;
    apiKeyEnvVar: string | string[];
    name: string;
    models: string[];
    docUrl?: string;
    gateway: string;
    npm?: string;
    modelOverrides?: Record<string, ModelProviderOverride>;
}
/**
 * Compact capability data collected from gateways during generation.
 * Each provider maps to a list of model IDs that support a capability.
 */
export type AttachmentCapabilities = Record<string, string[]>;
export type TemperatureCapabilities = Record<string, string[]>;
/**
 * Union type for language models that can be returned by gateways.
 * Supports AI SDK v5 (LanguageModelV2), v6 (LanguageModelV3), and v7 (LanguageModelV4).
 */
export type GatewayLanguageModel = LanguageModelV2 | LanguageModelV3 | LanguageModelV4;
export type GatewayStreamTransportHandle = Pick<StreamTransport, 'type' | 'close'>;
/** @internal Stream transport handle attached by gateways that own custom streaming transports. */
export declare const MASTRA_GATEWAY_STREAM_TRANSPORT: unique symbol;
export type GatewayLanguageModelWithStreamTransport = GatewayLanguageModel & {
    [MASTRA_GATEWAY_STREAM_TRANSPORT]?: GatewayStreamTransportHandle;
};
export type GatewayAuthSource = 'explicit' | 'gateway' | 'legacy';
export type GatewayAuthRequest = {
    gatewayId: string;
    providerId: string;
    modelId: string;
    routerId: string;
};
export type GatewayAuthResult = {
    apiKey?: string;
    bearerToken?: string;
    headers?: Record<string, string>;
    source?: GatewayAuthSource;
};
export interface MastraModelGatewayInterface {
    /**
     * Unique identifier for the gateway
     * This ID is used as the prefix for all providers from this gateway (e.g., "netlify/anthropic")
     * Exception: models.dev is a provider registry and doesn't use a prefix
     */
    readonly id: string;
    /**
     * Name of the gateway provider
     */
    readonly name: string;
    /**
     * Get the gateway ID. Optional for plain object gateways; defaults to `id`.
     * @deprecated Use `id` instead.
     * @returns The gateway ID.
     */
    getId?(): string;
    /**
     * Whether this gateway should be enabled for the current runtime.
     * Disabled gateways are skipped when syncing and filtered out when reading cached registry data.
     * Optional for plain object gateways; defaults to `true`.
     */
    shouldEnable?(): boolean;
    /**
     * Whether this gateway claims the given model/router id even when the id is
     * not prefixed with the gateway's own id (e.g. a bare `anthropic/...` id that
     * this gateway can authenticate via OAuth/stored credentials).
     * Checked after exact prefix matching but before the models.dev registry
     * fallback. Optional; defaults to `false`.
     */
    handlesModel?(modelId: string): boolean;
    /**
     * Fetch provider configurations from the gateway.
     * Should return providers in the standard format.
     */
    fetchProviders(): Promise<Record<string, ProviderConfig>>;
    /**
     * Build the URL for a specific model/provider combination
     * @param modelId Full model ID (e.g., "openai/gpt-4o" or "netlify/openai/gpt-4o")
     * @param envVars Environment variables available
     * @returns URL string if this gateway can handle the model, false otherwise
     */
    buildUrl(modelId: string, envVars: Record<string, string>): string | undefined | Promise<string | undefined>;
    getApiKey(modelId: string): Promise<string>;
    /**
     * Resolve auth before falling back to getApiKey/env behavior.
     */
    resolveAuth?(request: GatewayAuthRequest): Promise<GatewayAuthResult | undefined> | GatewayAuthResult | undefined;
    /**
     * Resolve a language model from the gateway.
     * Supports returning LanguageModelV2 (AI SDK v5), LanguageModelV3 (AI SDK v6), or LanguageModelV4 (AI SDK v7).
     */
    resolveLanguageModel(args: {
        modelId: string;
        providerId: string;
        apiKey: string;
        headers?: Record<string, string>;
        transport?: OpenAITransport;
        responsesWebSocket?: ResponsesWebSocketOptions;
    }): Promise<GatewayLanguageModel> | GatewayLanguageModel;
    /**
     * Custom serialization for tracing/observability spans.
     * Gateways typically hold credentials (apiKey, OAuth tokens, customFetch
     * closures that capture secrets). The base implementation exposes only
     * the gateway identity so subclasses are safe by default.
     */
    serializeForSpan?(): {
        id: string;
        name: string;
    } & Record<string, unknown>;
}
export declare abstract class MastraModelGateway implements MastraModelGatewayInterface {
    abstract readonly id: string;
    abstract readonly name: string;
    getId(): string;
    shouldEnable(): boolean;
    handlesModel(_modelId: string): boolean;
    abstract fetchProviders(): Promise<Record<string, ProviderConfig>>;
    abstract buildUrl(modelId: string, envVars: Record<string, string>): string | undefined | Promise<string | undefined>;
    abstract getApiKey(modelId: string): Promise<string>;
    abstract resolveLanguageModel(args: {
        modelId: string;
        providerId: string;
        apiKey: string;
        headers?: Record<string, string>;
        transport?: OpenAITransport;
        responsesWebSocket?: ResponsesWebSocketOptions;
    }): Promise<GatewayLanguageModel> | GatewayLanguageModel;
    serializeForSpan(): {
        id: string;
        name: string;
    };
}
//# sourceMappingURL=base.d.ts.map