// Core provider data structure based on provider-api-spec.md export interface ProviderEntry { provider: string; status?: "live" | "offline" | "deprecated"; context_length?: number; pricing?: { input: number; // $ per 1M tokens output: number; // $ per 1M tokens }; quantization?: string; max_completion_tokens?: number; supported_parameters?: string[]; // Model identification model_id?: string; created?: number; // Capability flags supports_tools?: boolean; supports_function_calling?: boolean; supports_structured_output?: boolean; supports_response_format?: boolean; supports_streaming?: boolean; supports_logprobs?: boolean; supports_stop_sequences?: boolean; supports_seed?: boolean; supports_temperature?: boolean; supports_top_p?: boolean; supports_frequency_penalty?: boolean; supports_presence_penalty?: boolean; supports_repetition_penalty?: boolean; supports_top_k?: boolean; supports_min_p?: boolean; supports_max_tokens?: boolean; supports_logit_bias?: boolean; supports_top_logprobs?: boolean; supports_image_input?: boolean; // Performance metrics latency_s?: number; throughput_tps?: number; performance_error?: string; performance_tested_at?: string; // Additional metadata owned_by?: string; model_type?: string; description?: string; deprecated_at?: string; model_class?: string; is_gated?: boolean; } // Provider-specific response types export interface GroqModel { id: string; object: string; created: number; owned_by: string; active: boolean; context_window: number; public_apps: any; max_completion_tokens: number; } export interface CohereModel { name: string; endpoints: string[]; finetuned: boolean; context_length: number; tokenizer_url: string; supports_vision: boolean; features: string[]; default_endpoints: string[]; is_deprecated?: boolean; } export interface FireworksModel { id: string; object: string; owned_by: string; created: number; kind: string; supports_chat: boolean; supports_image_input: boolean; supports_tools: boolean; context_length: number; } export interface FireworksDetailedModel { name: string; displayName: string; description: string; contextLength: number; baseModelDetails: { checkpointFormat: string; defaultPrecision: string; modelType: string; moe: boolean; parameterCount: string; supportsFireattention: boolean; tunable: boolean; worldSize: number; }; defaultSamplingParams: { temperature?: number; top_p?: number; max_tokens?: number; [key: string]: any; }; supportsImageInput: boolean; supportsLora: boolean; supportsTools: boolean; state: string; deprecationDate: string | null; huggingFaceUrl: string; supportedPrecisions: string[]; deployedModelRefs: any[]; } export interface TogetherModel { id: string; object: string; created: number; type: string; display_name: string; organization: string; context_length: number; pricing: { input: number; // $ per million tokens output: number; // $ per million tokens hourly: number; base: number; finetune: number; }; config: { chat_template: string; stop: string[]; bos_token: string; eos_token: string; }; } export interface SambaNovaModel { id: string; object: string; owned_by: string; context_length: number; max_completion_tokens: number; pricing: { prompt: string; // $ per token completion: string; // $ per token }; sn_metadata: any; } export interface NovitaModel { id: string; object: string; created: number; owned_by: string; input_token_price_per_m: number; // Cents per million tokens output_token_price_per_m: number; // Cents per million tokens title: string; description: string; context_size: number; max_output_tokens: number; model_type: string; features: string[]; endpoints: string[]; status: number; display_name: string; } export interface FeatherlessModel { id: string; is_gated: boolean; created: number; model_class: string; owned_by: string; context_length: number; max_completion_tokens: number; available_on_current_plan: boolean; } // Minimal response types export interface CerebrasModel { id: string; object: string; created: number; owned_by: string; } export interface NebiusModel { id: string; created: number; object: string; owned_by: string; } export interface LambdaModel { id: string; object: string; created: number; owned_by: string; } // Base provider fetcher interface export interface ProviderFetcher { name: string; fetchModels(): Promise; } // Configuration for rate limiting export interface RateLimitConfig { requestsPerMinute?: number; requestsPerHour?: number; retryAttempts?: number; initialBackoffMs?: number; } // Feature mapping types export interface FeatureMapping { [key: string]: keyof ProviderEntry | string[] | null; } // Static pricing data structure export interface StaticPricing { [provider: string]: { [modelId: string]: { input: number; // $ per 1M tokens output: number; // $ per 1M tokens }; }; }