export type ModelKind = 'chat' | 'other' | 'reasoning'; export type RateLimitTier = 'free' | 'tier_free' | 'tier_1' | 'tier_2' | 'tier_3' | 'tier_4' | 'tier_5'; export interface RateLimit { rpm?: number | string; rpd?: number; tpm?: number | string; ipm?: number | string; batch_queue_limit?: number; } export interface RateLimitGroup { name: string; tooltip?: string; rate_limits: Partial>; } export type RateLimits = Record | RateLimitGroup[]; export type SupportedTool = 'function_calling' | 'web_search' | 'file_search' | 'image_generation' | 'code_interpreter' | 'mcp'; export interface ModelConfig { name: string; slug: string; display_name?: string; current_snapshot: string; tagline?: string; description?: string; type: ModelKind; supported_tools?: SupportedTool[]; snapshots: string[]; compare_prices?: string[]; point_to?: string; examples?: string[] | null; grouped_models?: string[] | null; playground_url?: string; video_url?: string; video_thumbnail?: string; /** either a map keyed by RateLimitTier… */ rate_limits?: Partial> /** …or an array of named groups */ | RateLimitGroup[]; deprecated?: boolean; } export type Modality = 'audio' | 'image' | 'text'; export type Endpoint = 'assistants' | 'batch' | 'chat_completions' | 'completions' | 'embeddings' | 'fine_tuning' | 'image_edit' | 'image_generation' | 'moderation' | 'realtime' | 'responses' | 'speech_generation' | 'transcription' | 'translation'; export type Feature = 'agents' | 'distillation' | 'evals' | 'file_search' | 'file_uploads' | 'fine_tuning' | 'function_calling' | 'image_input' | 'inpainting' | 'predicted_outputs' | 'prompt_caching' | 'stored_completions' | 'streaming' | 'structured_outputs' | 'system_messages' | 'web_search'; export interface Modalities { input: Modality[]; output: Modality[]; } export interface PriceData { main?: { input?: number; output?: number; cached_input?: number; cached_output?: number; }; batch?: { input?: number; output?: number; cached_input?: number; cached_output?: number; }; } export interface ModelSpec { name: string; slug: string; performance?: number; latency?: number; modalities: Modalities; context_window?: number; max_output_tokens?: number; knowledge_cutoff?: Date; supported_endpoints: Endpoint[]; supported_features?: Feature[]; reasoning_tokens?: boolean; price_data?: PriceData; current_snapshot?: string; deprecated?: boolean; }