/**
 * Model-card descriptor: the static capability + pricing sheet for a single model.
 *
 * A `ModelCard` is pure data — it carries no
 * behavior; connectors read it to shape their wire requests, and the pricing
 * helpers read it to turn token counts into money.
 */
/**
 * The upstream organization that owns a model. This is the *vendor* identity,
 * independent of which HTTP dialect we speak to reach it (see {@link ApiKind}).
 */
export type ProviderId = "anthropic" | "openai" | "google" | "google-vertex" | "amazon" | "azure" | "nvidia" | "kimi" | "ollama" | "mock";
/**
 * The concrete request/response wire protocol a connector implements. Several
 * providers share a dialect (everything OpenAI-compatible speaks
 * `openai-completions`), and one provider can expose several dialects.
 */
export type ApiKind = "anthropic-messages" | "openai-completions" | "openai-responses" | "google-generative" | "google-vertex" | "amazon-bedrock" | "azure-openai" | "nvidia-openai-compatible" | "kimi-openai-compatible" | "ollama" | "mock";
/** Kinds of content a model can accept or emit. */
export type Modality = "text" | "image" | "audio";
/** Per-million-token pricing. Optional tiers are absent when a model has no cache pricing. */
export interface CostSheet {
    readonly inputPerMTok: number;
    readonly outputPerMTok: number;
    readonly cacheReadPerMTok?: number;
    readonly cacheWritePerMTok?: number;
}
/**
 * Static descriptor for one model. Identified by `id` within a `provider`.
 */
export interface ModelCard {
    readonly id: string;
    readonly provider: ProviderId;
    readonly api: ApiKind;
    readonly displayName: string;
    readonly baseUrl?: string;
    readonly contextWindow: number;
    readonly maxOutputTokens: number;
    readonly modalities: readonly Modality[];
    readonly reasoning: boolean;
    readonly cost: CostSheet;
}
