{"version":3,"sources":["../src/index.ts","../src/auth/token-provider.ts","../src/config.ts","../src/http-client.ts","../src/utils/error-handling.ts","../src/resources/apps.ts","../src/utils/validation.ts","../src/resources/balance.ts","../src/supported-models/tools/openai.ts","../src/supported-models/chat/anthropic.ts","../src/supported-models/chat/gemini.ts","../src/supported-models/chat/openai.ts","../src/supported-models/chat/openrouter.ts","../src/supported-models/image/openai.ts","../src/supported-models/responses/openai.ts","../src/supported-models/video/gemini.ts","../src/supported-models/video/vertex-ai.ts","../src/resources/models.ts","../src/resources/payments.ts","../src/resources/users.ts","../src/client.ts","../src/providers/anthropic.ts","../src/providers/google.ts","../src/providers/groq.ts","../src/providers/xai.ts","../src/providers/openai.ts","../src/providers/openrouter.ts","../src/providers/index.ts","../src/supported-models/chat/groq.ts","../src/supported-models/chat/xai.ts","../src/supported-models/video/open-ai.ts"],"sourcesContent":["export { ApiKeyTokenProvider, OAuthTokenProvider } from './auth/token-provider';\nexport type { TokenProvider } from './auth/token-provider';\nexport { EchoClient } from './client';\nexport type { EchoClientOptions } from './client';\n\nexport * from './config';\nexport * from './resources';\nexport * from './types';\nexport * from './api-types';\nexport * from './utils/error-handling';\nexport * from './utils/validation';\nexport * from './providers';\nexport { createEchoXAI } from './providers/xai';\n\n// Export tool-related types and utilities\nexport type {\n  ToolPricing,\n  SupportedToolType,\n  SupportedModel,\n  SupportedImageModel,\n  ImageGenerationQuality,\n  ImageDimensions,\n  WebSearchModel,\n  SupportedTool,\n  ImageGenerationQualityPricing,\n  ImageGenerationModelPricing,\n  ImageGenerationPricing,\n  CodeInterpreterPricing,\n  FileSearchPricing,\n  WebSearchModelPricing,\n  WebSearchPricing,\n  SupportedVideoModel,\n} from './supported-models/types';\n\nexport {\n  SupportedOpenAIResponseModels,\n  SupportedOpenAIResponseTools,\n  SupportedOpenAIResponseToolPricing,\n} from './supported-models/responses/openai';\nexport { OpenAIModels } from './supported-models/chat/openai';\nexport type { OpenAIModel } from './supported-models/chat/openai';\nexport { AnthropicModels } from './supported-models/chat/anthropic';\nexport type { AnthropicModel } from './supported-models/chat/anthropic';\nexport { GeminiModels } from './supported-models/chat/gemini';\nexport type { GeminiModel } from './supported-models/chat/gemini';\nexport { OpenRouterModels } from './supported-models/chat/openrouter';\nexport type { OpenRouterModel } from './supported-models/chat/openrouter';\nexport { GroqModels } from './supported-models/chat/groq';\nexport type { GroqModel } from './supported-models/chat/groq';\nexport { XAIModels } from './supported-models/chat/xai';\nexport type { XAIModel } from './supported-models/chat/xai';\nexport { OpenAIImageModels } from './supported-models/image/openai';\nexport type { OpenAIImageModel } from './supported-models/image/openai';\nexport { GeminiVideoModels } from './supported-models/video/gemini';\nexport type { GeminiVideoModel } from './supported-models/video/gemini';\nexport { VertexAIVideoModels } from './supported-models/video/vertex-ai';\nexport type { VertexAIVideoModel } from './supported-models/video/vertex-ai';\nexport { OpenAIVideoModels } from './supported-models/video/open-ai';\nexport type { OpenAIVideoModel } from './supported-models/video/open-ai';\n","/**\n * Interface for providing access tokens and refresh functionality\n */\nexport interface TokenProvider {\n  /**\n   * Get the current access token\n   * @returns Promise that resolves to the access token or null if not available\n   */\n  getAccessToken(): Promise<string | null>;\n\n  /**\n   * Refresh the access token when it expires or becomes invalid\n   * @returns Promise that resolves when the token is refreshed\n   */\n  refreshToken(): Promise<string | void>;\n\n  /**\n   * Optional callback to be called when a token refresh fails\n   * @param error The error that occurred during refresh\n   */\n  onRefreshError?(error: Error): void;\n}\n\n/**\n * Simple token provider that uses static API keys\n */\nexport class ApiKeyTokenProvider implements TokenProvider {\n  constructor(private apiKey: string) {}\n\n  async getAccessToken(): Promise<string | null> {\n    return this.apiKey;\n  }\n\n  async refreshToken(): Promise<void> {\n    // API keys don't need refreshing\n    return Promise.resolve();\n  }\n}\n\n/**\n * Token provider for OAuth-based authentication (like from React SDK)\n */\ninterface OAuthTokenProviderConfig {\n  getTokenFn: () => Promise<string | null>;\n  refreshTokenFn: () => Promise<string | void>;\n  onRefreshErrorFn?: (error: Error) => void;\n}\n\nexport class OAuthTokenProvider implements TokenProvider {\n  private getTokenFn: () => Promise<string | null>;\n  private refreshTokenFn: () => Promise<string | void>;\n  private onRefreshErrorFn: ((error: Error) => void) | undefined;\n\n  constructor(config: OAuthTokenProviderConfig) {\n    this.getTokenFn = config.getTokenFn;\n    this.refreshTokenFn = config.refreshTokenFn;\n    this.onRefreshErrorFn = config.onRefreshErrorFn;\n  }\n\n  async getAccessToken(): Promise<string | null> {\n    return this.getTokenFn();\n  }\n\n  async refreshToken(): Promise<string | void> {\n    return this.refreshTokenFn();\n  }\n\n  onRefreshError(error: Error): void {\n    if (this.onRefreshErrorFn) {\n      this.onRefreshErrorFn(error);\n    }\n  }\n}\n","export interface EchoClientConfig {\n  baseUrl: string;\n  apiKey?: string;\n}\n\nexport const defaultConfig: EchoClientConfig = {\n  baseUrl:\n    (typeof process !== 'undefined' && process.env?.ECHO_BASE_URL) ||\n    'https://echo.merit.systems',\n};\n\nexport function getConfig(\n  overrides?: Partial<EchoClientConfig>\n): EchoClientConfig {\n  return {\n    ...defaultConfig,\n    ...overrides,\n  };\n}\n\n/**\n * Echo Router base URL for proxying AI model requests\n */\nexport const ROUTER_BASE_URL = 'https://echo.router.merit.systems';\n\n/**\n * Echo base URL for OAuth and token operations\n */\nexport const ECHO_BASE_URL = 'https://echo.merit.systems';\n","import { TokenProvider } from './auth/token-provider';\n\nexport interface RequestOptions extends Omit<RequestInit, 'headers'> {\n  headers?: Record<string, string>;\n}\n\n/**\n * HTTP client with automatic token refresh using native fetch\n */\nexport class HttpClient {\n  private isRefreshing = false;\n  private refreshPromise: Promise<void> | null = null;\n\n  constructor(\n    private baseUrl: string,\n    private tokenProvider: TokenProvider\n  ) {}\n\n  /**\n   * Make an HTTP request with automatic token refresh on 401\n   */\n  async request(url: string, options: RequestOptions = {}): Promise<Response> {\n    const token = await this.tokenProvider.getAccessToken();\n\n    const response = await fetch(`${this.baseUrl}${url}`, {\n      ...options,\n      headers: {\n        'Content-Type': 'application/json',\n        ...options.headers,\n        ...(token && { Authorization: `Bearer ${token}` }),\n      },\n    });\n\n    // Handle 401 with automatic refresh\n    if (response.status === 401 && !options.headers?.['X-Retry']) {\n      await this.handleTokenRefresh();\n\n      // Retry with new token\n      const newToken = await this.tokenProvider.getAccessToken();\n      return fetch(`${this.baseUrl}${url}`, {\n        ...options,\n        headers: {\n          'Content-Type': 'application/json',\n          ...options.headers,\n          ...(newToken && { Authorization: `Bearer ${newToken}` }),\n          'X-Retry': 'true', // Prevent infinite loops\n        },\n      });\n    }\n\n    return response;\n  }\n\n  /**\n   * Handle token refresh with concurrent request protection\n   */\n  private async handleTokenRefresh(): Promise<void> {\n    if (this.isRefreshing && this.refreshPromise) {\n      return this.refreshPromise;\n    }\n\n    this.isRefreshing = true;\n    this.refreshPromise = this.performRefresh();\n\n    try {\n      await this.refreshPromise;\n    } finally {\n      this.isRefreshing = false;\n      this.refreshPromise = null;\n    }\n  }\n\n  /**\n   * Perform the actual token refresh\n   */\n  private async performRefresh(): Promise<void> {\n    try {\n      await this.tokenProvider.refreshToken();\n    } catch (error) {\n      if (this.tokenProvider.onRefreshError) {\n        this.tokenProvider.onRefreshError(error as Error);\n      }\n      throw error;\n    }\n  }\n\n  /**\n   * Convenience methods for common HTTP verbs\n   */\n  async get(\n    url: string,\n    params?: Record<string, string | number | boolean | null | undefined>,\n    options?: RequestOptions\n  ): Promise<Response> {\n    if (params && Object.keys(params).length > 0) {\n      url = `${url}?${new URLSearchParams(Object.entries(params).map(([key, value]) => [key, String(value)])).toString()}`;\n    }\n    return this.request(url, { ...options, method: 'GET' });\n  }\n\n  async post(\n    url: string,\n    body?: unknown,\n    options?: RequestOptions\n  ): Promise<Response> {\n    return this.request(url, {\n      ...options,\n      method: 'POST',\n      body: body ? JSON.stringify(body) : null,\n    });\n  }\n\n  async put(\n    url: string,\n    body?: unknown,\n    options?: RequestOptions\n  ): Promise<Response> {\n    return this.request(url, {\n      ...options,\n      method: 'PUT',\n      body: body ? JSON.stringify(body) : null,\n    });\n  }\n\n  async delete(url: string, options?: RequestOptions): Promise<Response> {\n    return this.request(url, { ...options, method: 'DELETE' });\n  }\n}\n","import { HttpClient } from '../http-client';\n\n/**\n * Base Echo error class\n */\nexport class EchoError extends Error {\n  public readonly code: string;\n  public readonly statusCode?: number;\n  public readonly endpoint?: string;\n\n  constructor(\n    code: string,\n    message: string,\n    options?: {\n      statusCode?: number;\n      endpoint?: string;\n    }\n  ) {\n    super(message);\n    this.name = 'EchoError';\n    this.code = code;\n    if (options?.statusCode !== undefined) this.statusCode = options.statusCode;\n    if (options?.endpoint !== undefined) this.endpoint = options.endpoint;\n  }\n}\n\n/**\n * Parse errors from fetch responses\n */\nexport function parseEchoError(\n  error: Error,\n  context?: string,\n  endpoint?: string\n): EchoError {\n  // Network errors\n  if (error.name === 'TypeError') {\n    return new EchoError(\n      'NETWORK_ERROR',\n      `Network error${context ? ` while ${context}` : ''}`,\n      endpoint ? { endpoint } : undefined\n    );\n  }\n\n  // HTTP errors from our client (format: \"HTTP 401: error details\")\n  const httpMatch = error.message.match(/^HTTP (\\d+): (.*)$/);\n  if (httpMatch && httpMatch[1] && httpMatch[2]) {\n    const status = parseInt(httpMatch[1]);\n    const details = httpMatch[2];\n\n    return new EchoError(\n      `HTTP_${status}`,\n      `${details}${context ? ` while ${context}` : ''}`,\n      endpoint ? { statusCode: status, endpoint } : { statusCode: status }\n    );\n  }\n\n  // Fallback\n  return new EchoError(\n    'UNKNOWN_ERROR',\n    `${error.message}${context ? ` while ${context}` : ''}`,\n    endpoint ? { endpoint } : undefined\n  );\n}\n\n/**\n * Base class for all resources\n */\nexport abstract class BaseResource {\n  constructor(protected http: HttpClient) {}\n\n  /**\n   * Generic wrapper for API calls with error handling\n   */\n  protected async handleRequest<T>(\n    request: () => Promise<Response>,\n    context: string,\n    endpoint?: string\n  ): Promise<T> {\n    try {\n      const response = await request();\n\n      if (!response.ok) {\n        const errorText = await response.text();\n        throw new Error(`HTTP ${response.status}: ${errorText}`);\n      }\n\n      return (await response.json()) as T;\n    } catch (error) {\n      if (error instanceof Error) {\n        throw parseEchoError(error, context, endpoint);\n      }\n      throw new EchoError(\n        'UNKNOWN_ERROR',\n        'Unknown error occurred',\n        endpoint ? { endpoint } : undefined\n      );\n    }\n  }\n}\n","import { HttpClient } from '../http-client';\nimport { ApiRoutes } from '../api-types';\nimport { BaseResource } from '../utils/error-handling';\n\nexport class AppsResource extends BaseResource {\n  constructor(\n    http: HttpClient,\n    private baseUrl: string\n  ) {\n    super(http);\n  }\n\n  /**\n   * List all Echo apps for the authenticated user\n   */\n  async listEchoApps(query?: ApiRoutes['GET /apps']['query']) {\n    const response = await this.handleRequest<\n      ApiRoutes['GET /apps']['response']\n    >(\n      () => this.http.get('/api/v1/apps', query),\n      'listing Echo apps',\n      '/api/v1/apps'\n    );\n    return response;\n  }\n\n  /**\n   * Get a specific Echo app by ID\n   * @param appId The Echo app ID\n   */\n  async getEchoApp(\n    appId: string\n  ): Promise<ApiRoutes['GET /apps/{id}']['response']> {\n    return this.handleRequest<ApiRoutes['GET /apps/{id}']['response']>(\n      () => this.http.get(`/api/v1/apps/${appId}`),\n      'fetching Echo app',\n      `/api/v1/apps/${appId}`\n    );\n  }\n\n  /**\n   * Get app URL for a specific Echo app\n   * @param appId The Echo app ID\n   */\n  getAppUrl(appId: string): string {\n    return `${this.baseUrl}/app/${appId}`;\n  }\n}\n","/**\n * UUID v4 regex pattern\n */\nconst UUID_REGEX =\n  /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\n\n/**\n * Validates that an Echo App ID is a valid UUID v4\n * @param appId - The app ID to validate\n * @param context - Optional context for the error message (e.g., 'createEchoOpenAI')\n * @throws Error if the app ID is invalid\n */\nexport function validateAppId(appId: string, context?: string): void {\n  if (!appId || typeof appId !== 'string') {\n    throw new Error(\n      `Invalid Echo App ID${context ? ` in ${context}` : ''}: App ID must be a non-empty string. Received: ${typeof appId === 'string' ? `\"${appId}\"` : typeof appId}`\n    );\n  }\n\n  if (!UUID_REGEX.test(appId)) {\n    throw new Error(\n      `Invalid Echo App ID${context ? ` in ${context}` : ''}: App ID must be a valid UUID v4 format. Received: \"${appId}\". Expected format: xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx (e.g., \"60601628-cdb7-481e-8f7e-921981220348\")`\n    );\n  }\n}\n","import { HttpClient } from '../http-client';\nimport { ApiRoutes } from '../api-types';\nimport { BaseResource } from '../utils/error-handling';\nimport { validateAppId } from '../utils/validation';\n\nexport class BalanceResource extends BaseResource {\n  constructor(http: HttpClient) {\n    super(http);\n  }\n\n  /**\n   * Get current balance for the authenticated user across all apps\n   */\n  async getBalance(): Promise<ApiRoutes['GET /balance']['response']> {\n    return this.handleRequest(\n      () => this.http.get('/api/v1/balance'),\n      'fetching balance',\n      '/api/v1/balance'\n    );\n  }\n\n  /**\n   * Get free tier balance for a specific app\n   * @param echoAppId The Echo app ID to get free tier balance for\n   */\n  async getFreeBalance(\n    echoAppId: string\n  ): Promise<ApiRoutes['GET /balance/{id}/free']['response']> {\n    validateAppId(echoAppId, 'getFreeBalance');\n\n    return this.handleRequest(\n      () => this.http.get(`/api/v1/balance/${echoAppId}/free`),\n      'fetching free tier balance',\n      '/api/v1/balance/free'\n    );\n  }\n}\n","import { SupportedTool, ToolPricing } from '../types';\n\nexport type OpenAITool =\n  | 'image_generation'\n  | 'code_interpreter'\n  | 'file_search'\n  | 'web_search_preview';\n\nexport const OpenAITools: SupportedTool[] = [\n  {\n    type: 'image_generation',\n    description:\n      'Generate images using AI models with different quality levels and dimensions',\n    pricing_structure: 'per_generation',\n  },\n  {\n    type: 'code_interpreter',\n    description: 'Execute Python code in a secure sandbox environment',\n    pricing_structure: 'per_session',\n  },\n  {\n    type: 'file_search',\n    description:\n      'Search and retrieve information from uploaded files with vector embeddings',\n    pricing_structure: 'per_call',\n  },\n  {\n    type: 'web_search_preview',\n    description: 'Search the web for real-time information (preview feature)',\n    pricing_structure: 'per_call',\n  },\n];\n\nexport const DefaultOpenAIToolPricing: ToolPricing = {\n  image_generation: {\n    gpt_image_1: {\n      low: {\n        '1024x1024': 0.011,\n        '1024x1536': 0.016,\n        '1536x1024': 0.016,\n      },\n      medium: {\n        '1024x1024': 0.042,\n        '1024x1536': 0.063,\n        '1536x1024': 0.063,\n      },\n      high: {\n        '1024x1024': 0.167,\n        '1024x1536': 0.25,\n        '1536x1024': 0.25,\n      },\n    },\n  },\n  code_interpreter: {\n    cost_per_session: 0.03,\n  },\n  file_search: {\n    cost_per_call: 0.00125,\n    storage_cost_per_gb_per_day: 0.1,\n    free_storage_gb: 1,\n  },\n  web_search_preview: {\n    gpt_4o: {\n      cost_per_call: 0.025,\n    },\n    gpt_5: {\n      cost_per_call: 0.01,\n    },\n    o_series: {\n      cost_per_call: 0.01,\n    },\n  },\n};\n","import { SupportedModel } from '../types';\n\n// Union type of all valid Anthropic model IDs\nexport type AnthropicModel =\n  | 'claude-3-5-haiku-20241022'\n  | 'claude-3-5-sonnet-20240620'\n  | 'claude-3-5-sonnet-20241022'\n  | 'claude-3-7-sonnet-20250219'\n  | 'claude-3-haiku-20240307'\n  | 'claude-3-opus-20240229'\n  | 'claude-haiku-4-5-20251001'\n  | 'claude-opus-4-1-20250805'\n  | 'claude-opus-4-20250514'\n  | 'claude-sonnet-4-20250514'\n  | 'claude-sonnet-4-5-20250929';\n\nexport const AnthropicModels: SupportedModel[] = [\n  {\n    model_id: 'claude-3-5-haiku-20241022',\n    input_cost_per_token: 8e-7,\n    output_cost_per_token: 0.000004,\n    provider: 'Anthropic',\n  },\n  {\n    model_id: 'claude-3-5-sonnet-20240620',\n    input_cost_per_token: 0.000003,\n    output_cost_per_token: 0.000015,\n    provider: 'Anthropic',\n  },\n  {\n    model_id: 'claude-3-5-sonnet-20241022',\n    input_cost_per_token: 0.000003,\n    output_cost_per_token: 0.000015,\n    provider: 'Anthropic',\n  },\n  {\n    model_id: 'claude-3-7-sonnet-20250219',\n    input_cost_per_token: 0.000003,\n    output_cost_per_token: 0.000015,\n    provider: 'Anthropic',\n  },\n  {\n    model_id: 'claude-3-haiku-20240307',\n    input_cost_per_token: 2.5e-7,\n    output_cost_per_token: 0.00000125,\n    provider: 'Anthropic',\n  },\n  {\n    model_id: 'claude-3-opus-20240229',\n    input_cost_per_token: 0.000015,\n    output_cost_per_token: 0.000075,\n    provider: 'Anthropic',\n  },\n  {\n    model_id: 'claude-haiku-4-5-20251001',\n    input_cost_per_token: 0.000001,\n    output_cost_per_token: 0.000005,\n    provider: 'Anthropic',\n  },\n  {\n    model_id: 'claude-opus-4-1-20250805',\n    input_cost_per_token: 0.000015,\n    output_cost_per_token: 0.000075,\n    provider: 'Anthropic',\n  },\n  {\n    model_id: 'claude-opus-4-20250514',\n    input_cost_per_token: 0.000015,\n    output_cost_per_token: 0.000075,\n    provider: 'Anthropic',\n  },\n  {\n    model_id: 'claude-sonnet-4-20250514',\n    input_cost_per_token: 0.000003,\n    output_cost_per_token: 0.000015,\n    provider: 'Anthropic',\n  },\n  {\n    model_id: 'claude-sonnet-4-5-20250929',\n    input_cost_per_token: 0.000003,\n    output_cost_per_token: 0.000015,\n    provider: 'Anthropic',\n  },\n];\n","import { SupportedModel } from '../types';\n\n// Union type of all valid Gemini model IDs\nexport type GeminiModel =\n  | 'gemini-2.0-flash'\n  | 'gemini-2.0-flash-001'\n  | 'gemini-2.0-flash-exp'\n  | 'gemini-2.0-flash-exp-image-generation'\n  | 'gemini-2.0-flash-lite'\n  | 'gemini-2.0-flash-lite-001'\n  | 'gemini-2.0-flash-lite-preview'\n  | 'gemini-2.0-flash-lite-preview-02-05'\n  | 'gemini-2.0-flash-preview-image-generation'\n  | 'gemini-2.0-flash-thinking-exp'\n  | 'gemini-2.0-flash-thinking-exp-01-21'\n  | 'gemini-2.0-flash-thinking-exp-1219'\n  | 'gemini-2.5-flash'\n  | 'gemini-2.5-flash-image'\n  | 'gemini-2.5-flash-image-preview'\n  | 'gemini-2.5-flash-lite'\n  | 'gemini-2.5-flash-lite-preview-06-17'\n  | 'gemini-2.5-flash-lite-preview-09-2025'\n  | 'gemini-2.5-flash-preview-05-20'\n  | 'gemini-2.5-flash-preview-09-2025'\n  | 'gemini-2.5-flash-preview-tts'\n  | 'gemini-2.5-pro'\n  | 'gemini-2.5-pro-preview-03-25'\n  | 'gemini-2.5-pro-preview-05-06'\n  | 'gemini-2.5-pro-preview-06-05'\n  | 'gemini-2.5-pro-preview-tts';\n\nexport const GeminiModels: SupportedModel[] = [\n  {\n    model_id: 'gemini-2.0-flash',\n    input_cost_per_token: 1e-7,\n    output_cost_per_token: 4e-7,\n    provider: 'Gemini',\n  },\n  {\n    model_id: 'gemini-2.0-flash-001',\n    input_cost_per_token: 1e-7,\n    output_cost_per_token: 4e-7,\n    provider: 'Gemini',\n  },\n  {\n    model_id: 'gemini-2.0-flash-exp',\n    input_cost_per_token: 1e-7,\n    output_cost_per_token: 4e-7,\n    provider: 'Gemini',\n  },\n  {\n    model_id: 'gemini-2.0-flash-exp-image-generation',\n    input_cost_per_token: 1e-7,\n    output_cost_per_token: 4e-7,\n    provider: 'Gemini',\n  },\n  {\n    model_id: 'gemini-2.0-flash-lite',\n    input_cost_per_token: 7.5e-8,\n    output_cost_per_token: 3e-7,\n    provider: 'Gemini',\n  },\n  {\n    model_id: 'gemini-2.0-flash-lite-001',\n    input_cost_per_token: 7.5e-8,\n    output_cost_per_token: 3e-7,\n    provider: 'Gemini',\n  },\n  {\n    model_id: 'gemini-2.0-flash-lite-preview',\n    input_cost_per_token: 7.5e-8,\n    output_cost_per_token: 3e-7,\n    provider: 'Gemini',\n  },\n  {\n    model_id: 'gemini-2.0-flash-lite-preview-02-05',\n    input_cost_per_token: 7.5e-8,\n    output_cost_per_token: 3e-7,\n    provider: 'Gemini',\n  },\n  {\n    model_id: 'gemini-2.0-flash-preview-image-generation',\n    input_cost_per_token: 1e-7,\n    output_cost_per_token: 4e-7,\n    provider: 'Gemini',\n  },\n  {\n    model_id: 'gemini-2.0-flash-thinking-exp',\n    input_cost_per_token: 1e-7,\n    output_cost_per_token: 4e-7,\n    provider: 'Gemini',\n  },\n  {\n    model_id: 'gemini-2.0-flash-thinking-exp-01-21',\n    input_cost_per_token: 1e-7,\n    output_cost_per_token: 4e-7,\n    provider: 'Gemini',\n  },\n  {\n    model_id: 'gemini-2.0-flash-thinking-exp-1219',\n    input_cost_per_token: 1e-7,\n    output_cost_per_token: 4e-7,\n    provider: 'Gemini',\n  },\n  {\n    model_id: 'gemini-2.5-flash',\n    input_cost_per_token: 3e-7,\n    output_cost_per_token: 0.0000025,\n    provider: 'Gemini',\n  },\n  {\n    model_id: 'gemini-2.5-flash-image',\n    input_cost_per_token: 3e-7,\n    output_cost_per_token: 0.0000025,\n    provider: 'Gemini',\n  },\n  {\n    model_id: 'gemini-2.5-flash-image-preview',\n    input_cost_per_token: 3e-7,\n    output_cost_per_token: 0.0000025,\n    provider: 'Gemini',\n  },\n  {\n    model_id: 'gemini-2.5-flash-lite',\n    input_cost_per_token: 1e-7,\n    output_cost_per_token: 4e-7,\n    provider: 'Gemini',\n  },\n  {\n    model_id: 'gemini-2.5-flash-lite-preview-06-17',\n    input_cost_per_token: 1e-7,\n    output_cost_per_token: 4e-7,\n    provider: 'Gemini',\n  },\n  {\n    model_id: 'gemini-2.5-flash-lite-preview-09-2025',\n    input_cost_per_token: 1e-7,\n    output_cost_per_token: 4e-7,\n    provider: 'Gemini',\n  },\n  {\n    model_id: 'gemini-2.5-flash-preview-05-20',\n    input_cost_per_token: 3e-7,\n    output_cost_per_token: 0.0000025,\n    provider: 'Gemini',\n  },\n  {\n    model_id: 'gemini-2.5-flash-preview-09-2025',\n    input_cost_per_token: 3e-7,\n    output_cost_per_token: 0.0000025,\n    provider: 'Gemini',\n  },\n  {\n    model_id: 'gemini-2.5-flash-preview-tts',\n    input_cost_per_token: 3e-7,\n    output_cost_per_token: 0.0000025,\n    provider: 'Gemini',\n  },\n  {\n    model_id: 'gemini-2.5-pro',\n    input_cost_per_token: 0.00000125,\n    output_cost_per_token: 0.00001,\n    provider: 'Gemini',\n  },\n  {\n    model_id: 'gemini-2.5-pro-preview-03-25',\n    input_cost_per_token: 0.00000125,\n    output_cost_per_token: 0.00001,\n    provider: 'Gemini',\n  },\n  {\n    model_id: 'gemini-2.5-pro-preview-05-06',\n    input_cost_per_token: 0.00000125,\n    output_cost_per_token: 0.00001,\n    provider: 'Gemini',\n  },\n  {\n    model_id: 'gemini-2.5-pro-preview-06-05',\n    input_cost_per_token: 0.00000125,\n    output_cost_per_token: 0.00001,\n    provider: 'Gemini',\n  },\n  {\n    model_id: 'gemini-2.5-pro-preview-tts',\n    input_cost_per_token: 0.00000125,\n    output_cost_per_token: 0.00001,\n    provider: 'Gemini',\n  },\n];\n","import { SupportedModel } from '../types';\n\n// Union type of all valid OpenAI model IDs\nexport type OpenAIModel =\n  | 'gpt-3.5-turbo'\n  | 'gpt-3.5-turbo-0125'\n  | 'gpt-3.5-turbo-1106'\n  | 'gpt-3.5-turbo-16k'\n  | 'gpt-3.5-turbo-instruct'\n  | 'gpt-3.5-turbo-instruct-0914'\n  | 'gpt-4'\n  | 'gpt-4-0125-preview'\n  | 'gpt-4-0613'\n  | 'gpt-4-1106-preview'\n  | 'gpt-4-turbo'\n  | 'gpt-4-turbo-2024-04-09'\n  | 'gpt-4-turbo-preview'\n  | 'gpt-4.1'\n  | 'gpt-4.1-2025-04-14'\n  | 'gpt-4.1-mini'\n  | 'gpt-4.1-mini-2025-04-14'\n  | 'gpt-4.1-nano'\n  | 'gpt-4.1-nano-2025-04-14'\n  | 'gpt-4o'\n  | 'gpt-4o-2024-05-13'\n  | 'gpt-4o-2024-08-06'\n  | 'gpt-4o-2024-11-20'\n  | 'gpt-4o-mini'\n  | 'gpt-4o-mini-2024-07-18'\n  | 'gpt-4o-mini-search-preview'\n  | 'gpt-4o-mini-search-preview-2025-03-11'\n  | 'gpt-4o-search-preview'\n  | 'gpt-4o-search-preview-2025-03-11'\n  | 'gpt-5'\n  | 'gpt-5-2025-08-07'\n  | 'gpt-5-chat-latest'\n  | 'gpt-5-codex'\n  | 'gpt-5-mini'\n  | 'gpt-5-mini-2025-08-07'\n  | 'gpt-5-nano'\n  | 'gpt-5-nano-2025-08-07'\n  | 'gpt-5-pro'\n  | 'gpt-5-pro-2025-10-06'\n  | 'gpt-5-search-api'\n  | 'gpt-5-search-api-2025-10-14'\n  | 'o1'\n  | 'o1-2024-12-17'\n  | 'o1-mini'\n  | 'o1-mini-2024-09-12'\n  | 'o1-pro'\n  | 'o1-pro-2025-03-19'\n  | 'o3'\n  | 'o3-2025-04-16'\n  | 'o3-deep-research'\n  | 'o3-deep-research-2025-06-26'\n  | 'o3-mini'\n  | 'o3-mini-2025-01-31'\n  | 'o3-pro'\n  | 'o3-pro-2025-06-10';\n\nexport const OpenAIModels: SupportedModel[] = [\n  {\n    model_id: 'gpt-3.5-turbo',\n    input_cost_per_token: 5e-7,\n    output_cost_per_token: 0.0000015,\n    provider: 'OpenAI',\n  },\n  {\n    model_id: 'gpt-3.5-turbo-0125',\n    input_cost_per_token: 5e-7,\n    output_cost_per_token: 0.0000015,\n    provider: 'OpenAI',\n  },\n  {\n    model_id: 'gpt-3.5-turbo-1106',\n    input_cost_per_token: 5e-7,\n    output_cost_per_token: 0.0000015,\n    provider: 'OpenAI',\n  },\n  {\n    model_id: 'gpt-3.5-turbo-16k',\n    input_cost_per_token: 5e-7,\n    output_cost_per_token: 0.0000015,\n    provider: 'OpenAI',\n  },\n  {\n    model_id: 'gpt-3.5-turbo-instruct',\n    input_cost_per_token: 0.0000015,\n    output_cost_per_token: 0.000002,\n    provider: 'OpenAI',\n  },\n  {\n    model_id: 'gpt-3.5-turbo-instruct-0914',\n    input_cost_per_token: 0.0000015,\n    output_cost_per_token: 0.000002,\n    provider: 'OpenAI',\n  },\n  {\n    model_id: 'gpt-4',\n    input_cost_per_token: 4e-7,\n    output_cost_per_token: 0.0000016,\n    provider: 'OpenAI',\n  },\n  {\n    model_id: 'gpt-4-0125-preview',\n    input_cost_per_token: 4e-7,\n    output_cost_per_token: 0.0000016,\n    provider: 'OpenAI',\n  },\n  {\n    model_id: 'gpt-4-0613',\n    input_cost_per_token: 4e-7,\n    output_cost_per_token: 0.0000016,\n    provider: 'OpenAI',\n  },\n  {\n    model_id: 'gpt-4-1106-preview',\n    input_cost_per_token: 4e-7,\n    output_cost_per_token: 0.0000016,\n    provider: 'OpenAI',\n  },\n  {\n    model_id: 'gpt-4-turbo',\n    input_cost_per_token: 0.00001,\n    output_cost_per_token: 0.00003,\n    provider: 'OpenAI',\n  },\n  {\n    model_id: 'gpt-4-turbo-2024-04-09',\n    input_cost_per_token: 0.00001,\n    output_cost_per_token: 0.00003,\n    provider: 'OpenAI',\n  },\n  {\n    model_id: 'gpt-4-turbo-preview',\n    input_cost_per_token: 0.00001,\n    output_cost_per_token: 0.00003,\n    provider: 'OpenAI',\n  },\n  {\n    model_id: 'gpt-4.1',\n    input_cost_per_token: 0.000002,\n    output_cost_per_token: 0.000008,\n    provider: 'OpenAI',\n  },\n  {\n    model_id: 'gpt-4.1-2025-04-14',\n    input_cost_per_token: 0.000002,\n    output_cost_per_token: 0.000008,\n    provider: 'OpenAI',\n  },\n  {\n    model_id: 'gpt-4.1-mini',\n    input_cost_per_token: 4e-7,\n    output_cost_per_token: 0.0000016,\n    provider: 'OpenAI',\n  },\n  {\n    model_id: 'gpt-4.1-mini-2025-04-14',\n    input_cost_per_token: 4e-7,\n    output_cost_per_token: 0.0000016,\n    provider: 'OpenAI',\n  },\n  {\n    model_id: 'gpt-4.1-nano',\n    input_cost_per_token: 1e-7,\n    output_cost_per_token: 4e-7,\n    provider: 'OpenAI',\n  },\n  {\n    model_id: 'gpt-4.1-nano-2025-04-14',\n    input_cost_per_token: 1e-7,\n    output_cost_per_token: 4e-7,\n    provider: 'OpenAI',\n  },\n  {\n    model_id: 'gpt-4o',\n    input_cost_per_token: 0.0000025,\n    output_cost_per_token: 0.00001,\n    provider: 'OpenAI',\n  },\n  {\n    model_id: 'gpt-4o-2024-05-13',\n    input_cost_per_token: 0.0000025,\n    output_cost_per_token: 0.00001,\n    provider: 'OpenAI',\n  },\n  {\n    model_id: 'gpt-4o-2024-08-06',\n    input_cost_per_token: 0.0000025,\n    output_cost_per_token: 0.00001,\n    provider: 'OpenAI',\n  },\n  {\n    model_id: 'gpt-4o-2024-11-20',\n    input_cost_per_token: 0.0000025,\n    output_cost_per_token: 0.00001,\n    provider: 'OpenAI',\n  },\n  {\n    model_id: 'gpt-4o-mini',\n    input_cost_per_token: 1.5e-7,\n    output_cost_per_token: 6e-7,\n    provider: 'OpenAI',\n  },\n  {\n    model_id: 'gpt-4o-mini-2024-07-18',\n    input_cost_per_token: 1.5e-7,\n    output_cost_per_token: 6e-7,\n    provider: 'OpenAI',\n  },\n  {\n    model_id: 'gpt-4o-mini-search-preview',\n    input_cost_per_token: 1.5e-7,\n    output_cost_per_token: 6e-7,\n    provider: 'OpenAI',\n  },\n  {\n    model_id: 'gpt-4o-mini-search-preview-2025-03-11',\n    input_cost_per_token: 1.5e-7,\n    output_cost_per_token: 6e-7,\n    provider: 'OpenAI',\n  },\n  {\n    model_id: 'gpt-4o-search-preview',\n    input_cost_per_token: 0.0000025,\n    output_cost_per_token: 0.00001,\n    provider: 'OpenAI',\n  },\n  {\n    model_id: 'gpt-4o-search-preview-2025-03-11',\n    input_cost_per_token: 0.0000025,\n    output_cost_per_token: 0.00001,\n    provider: 'OpenAI',\n  },\n  {\n    model_id: 'gpt-5',\n    input_cost_per_token: 0.00000125,\n    output_cost_per_token: 0.00001,\n    provider: 'OpenAI',\n  },\n  {\n    model_id: 'gpt-5-2025-08-07',\n    input_cost_per_token: 0.00000125,\n    output_cost_per_token: 0.00001,\n    provider: 'OpenAI',\n  },\n  {\n    model_id: 'gpt-5-chat-latest',\n    input_cost_per_token: 0.00000125,\n    output_cost_per_token: 0.00001,\n    provider: 'OpenAI',\n  },\n  {\n    model_id: 'gpt-5-codex',\n    input_cost_per_token: 0.00000125,\n    output_cost_per_token: 0.00001,\n    provider: 'OpenAI',\n  },\n  {\n    model_id: 'gpt-5-mini',\n    input_cost_per_token: 2.5e-7,\n    output_cost_per_token: 0.000002,\n    provider: 'OpenAI',\n  },\n  {\n    model_id: 'gpt-5-mini-2025-08-07',\n    input_cost_per_token: 2.5e-7,\n    output_cost_per_token: 0.000002,\n    provider: 'OpenAI',\n  },\n  {\n    model_id: 'gpt-5-nano',\n    input_cost_per_token: 5e-8,\n    output_cost_per_token: 4e-7,\n    provider: 'OpenAI',\n  },\n  {\n    model_id: 'gpt-5-nano-2025-08-07',\n    input_cost_per_token: 5e-8,\n    output_cost_per_token: 4e-7,\n    provider: 'OpenAI',\n  },\n  {\n    model_id: 'gpt-5-pro',\n    input_cost_per_token: 0.000015,\n    output_cost_per_token: 0.00012,\n    provider: 'OpenAI',\n  },\n  {\n    model_id: 'gpt-5-pro-2025-10-06',\n    input_cost_per_token: 0.000015,\n    output_cost_per_token: 0.00012,\n    provider: 'OpenAI',\n  },\n  {\n    model_id: 'gpt-5-search-api',\n    input_cost_per_token: 0.00000125,\n    output_cost_per_token: 0.00001,\n    provider: 'OpenAI',\n  },\n  {\n    model_id: 'gpt-5-search-api-2025-10-14',\n    input_cost_per_token: 0.00000125,\n    output_cost_per_token: 0.00001,\n    provider: 'OpenAI',\n  },\n  {\n    model_id: 'o1',\n    input_cost_per_token: 0.000015,\n    output_cost_per_token: 0.00006,\n    provider: 'OpenAI',\n  },\n  {\n    model_id: 'o1-2024-12-17',\n    input_cost_per_token: 0.000015,\n    output_cost_per_token: 0.00006,\n    provider: 'OpenAI',\n  },\n  {\n    model_id: 'o1-mini',\n    input_cost_per_token: 0.000015,\n    output_cost_per_token: 0.00006,\n    provider: 'OpenAI',\n  },\n  {\n    model_id: 'o1-mini-2024-09-12',\n    input_cost_per_token: 0.000015,\n    output_cost_per_token: 0.00006,\n    provider: 'OpenAI',\n  },\n  {\n    model_id: 'o1-pro',\n    input_cost_per_token: 0.000015,\n    output_cost_per_token: 0.00006,\n    provider: 'OpenAI',\n  },\n  {\n    model_id: 'o1-pro-2025-03-19',\n    input_cost_per_token: 0.000015,\n    output_cost_per_token: 0.00006,\n    provider: 'OpenAI',\n  },\n  {\n    model_id: 'o3',\n    input_cost_per_token: 0.000002,\n    output_cost_per_token: 0.000008,\n    provider: 'OpenAI',\n  },\n  {\n    model_id: 'o3-2025-04-16',\n    input_cost_per_token: 0.000002,\n    output_cost_per_token: 0.000008,\n    provider: 'OpenAI',\n  },\n  {\n    model_id: 'o3-deep-research',\n    input_cost_per_token: 0.000002,\n    output_cost_per_token: 0.000008,\n    provider: 'OpenAI',\n  },\n  {\n    model_id: 'o3-deep-research-2025-06-26',\n    input_cost_per_token: 0.000002,\n    output_cost_per_token: 0.000008,\n    provider: 'OpenAI',\n  },\n  {\n    model_id: 'o3-mini',\n    input_cost_per_token: 0.0000011,\n    output_cost_per_token: 0.0000044,\n    provider: 'OpenAI',\n  },\n  {\n    model_id: 'o3-mini-2025-01-31',\n    input_cost_per_token: 0.0000011,\n    output_cost_per_token: 0.0000044,\n    provider: 'OpenAI',\n  },\n  {\n    model_id: 'o3-pro',\n    input_cost_per_token: 0.000002,\n    output_cost_per_token: 0.000008,\n    provider: 'OpenAI',\n  },\n  {\n    model_id: 'o3-pro-2025-06-10',\n    input_cost_per_token: 0.000002,\n    output_cost_per_token: 0.000008,\n    provider: 'OpenAI',\n  },\n];\n","import { SupportedModel } from '../types';\n\n// Union type of all valid OpenRouter model IDs\nexport type OpenRouterModel =\n  | 'ai21/jamba-large-1.7'\n  | 'ai21/jamba-mini-1.7'\n  | 'aion-labs/aion-1.0'\n  | 'aion-labs/aion-1.0-mini'\n  | 'aion-labs/aion-rp-llama-3.1-8b'\n  | 'alfredpros/codellama-7b-instruct-solidity'\n  | 'alibaba/tongyi-deepresearch-30b-a3b'\n  | 'allenai/molmo-7b-d'\n  | 'allenai/olmo-2-0325-32b-instruct'\n  | 'alpindale/goliath-120b'\n  | 'amazon/nova-lite-v1'\n  | 'amazon/nova-micro-v1'\n  | 'amazon/nova-pro-v1'\n  | 'anthracite-org/magnum-v4-72b'\n  | 'anthropic/claude-3-haiku'\n  | 'anthropic/claude-3-opus'\n  | 'anthropic/claude-3.5-haiku'\n  | 'anthropic/claude-3.5-sonnet'\n  | 'anthropic/claude-3.5-sonnet-20240620'\n  | 'anthropic/claude-3.7-sonnet'\n  | 'anthropic/claude-3.7-sonnet:thinking'\n  | 'anthropic/claude-haiku-4.5'\n  | 'anthropic/claude-opus-4'\n  | 'anthropic/claude-opus-4.1'\n  | 'anthropic/claude-sonnet-4'\n  | 'anthropic/claude-sonnet-4.5'\n  | 'arcee-ai/afm-4.5b'\n  | 'arcee-ai/coder-large'\n  | 'arcee-ai/maestro-reasoning'\n  | 'arcee-ai/virtuoso-large'\n  | 'baidu/ernie-4.5-21b-a3b'\n  | 'baidu/ernie-4.5-21b-a3b-thinking'\n  | 'baidu/ernie-4.5-300b-a47b'\n  | 'baidu/ernie-4.5-vl-28b-a3b'\n  | 'baidu/ernie-4.5-vl-424b-a47b'\n  | 'bytedance/ui-tars-1.5-7b'\n  | 'cognitivecomputations/dolphin3.0-mistral-24b'\n  | 'cohere/command-a'\n  | 'cohere/command-r-08-2024'\n  | 'cohere/command-r-plus-08-2024'\n  | 'cohere/command-r7b-12-2024'\n  | 'deepcogito/cogito-v2-preview-deepseek-671b'\n  | 'deepcogito/cogito-v2-preview-llama-109b-moe'\n  | 'deepcogito/cogito-v2-preview-llama-405b'\n  | 'deepcogito/cogito-v2-preview-llama-70b'\n  | 'deepseek/deepseek-chat'\n  | 'deepseek/deepseek-chat-v3-0324'\n  | 'deepseek/deepseek-chat-v3.1'\n  | 'deepseek/deepseek-prover-v2'\n  | 'deepseek/deepseek-r1'\n  | 'deepseek/deepseek-r1-0528'\n  | 'deepseek/deepseek-r1-0528-qwen3-8b'\n  | 'deepseek/deepseek-r1-distill-llama-70b'\n  | 'deepseek/deepseek-r1-distill-qwen-14b'\n  | 'deepseek/deepseek-r1-distill-qwen-32b'\n  | 'deepseek/deepseek-v3.1-terminus'\n  | 'deepseek/deepseek-v3.2-exp'\n  | 'eleutherai/llemma_7b'\n  | 'google/gemini-2.0-flash-001'\n  | 'google/gemini-2.0-flash-lite-001'\n  | 'google/gemini-2.5-flash'\n  | 'google/gemini-2.5-flash-lite'\n  | 'google/gemini-2.5-flash-lite-preview-06-17'\n  | 'google/gemini-2.5-flash-lite-preview-09-2025'\n  | 'google/gemini-2.5-flash-preview-09-2025'\n  | 'google/gemini-2.5-pro'\n  | 'google/gemini-2.5-pro-preview'\n  | 'google/gemini-2.5-pro-preview-05-06'\n  | 'google/gemma-2-27b-it'\n  | 'google/gemma-2-9b-it'\n  | 'google/gemma-3-12b-it'\n  | 'google/gemma-3-27b-it'\n  | 'google/gemma-3-4b-it'\n  | 'google/gemma-3n-e4b-it'\n  | 'gryphe/mythomax-l2-13b'\n  | 'inception/mercury'\n  | 'inception/mercury-coder'\n  | 'inclusionai/ling-1t'\n  | 'inclusionai/ring-1t'\n  | 'inflection/inflection-3-pi'\n  | 'inflection/inflection-3-productivity'\n  | 'liquid/lfm-3b'\n  | 'liquid/lfm-7b'\n  | 'mancer/weaver'\n  | 'meituan/longcat-flash-chat'\n  | 'meta-llama/llama-3-70b-instruct'\n  | 'meta-llama/llama-3-8b-instruct'\n  | 'meta-llama/llama-3.1-405b'\n  | 'meta-llama/llama-3.1-405b-instruct'\n  | 'meta-llama/llama-3.1-70b-instruct'\n  | 'meta-llama/llama-3.1-8b-instruct'\n  | 'meta-llama/llama-3.2-11b-vision-instruct'\n  | 'meta-llama/llama-3.2-1b-instruct'\n  | 'meta-llama/llama-3.2-3b-instruct'\n  | 'meta-llama/llama-3.2-90b-vision-instruct'\n  | 'meta-llama/llama-3.3-70b-instruct'\n  | 'meta-llama/llama-4-maverick'\n  | 'meta-llama/llama-4-scout'\n  | 'meta-llama/llama-guard-2-8b'\n  | 'meta-llama/llama-guard-3-8b'\n  | 'meta-llama/llama-guard-4-12b'\n  | 'microsoft/mai-ds-r1'\n  | 'microsoft/phi-3-medium-128k-instruct'\n  | 'microsoft/phi-3-mini-128k-instruct'\n  | 'microsoft/phi-3.5-mini-128k-instruct'\n  | 'microsoft/phi-4'\n  | 'microsoft/phi-4-multimodal-instruct'\n  | 'microsoft/phi-4-reasoning-plus'\n  | 'microsoft/wizardlm-2-8x22b'\n  | 'minimax/minimax-m1'\n  | 'mistralai/codestral-2501'\n  | 'mistralai/codestral-2508'\n  | 'mistralai/devstral-medium'\n  | 'mistralai/devstral-small'\n  | 'mistralai/devstral-small-2505'\n  | 'mistralai/magistral-medium-2506'\n  | 'mistralai/magistral-medium-2506:thinking'\n  | 'mistralai/magistral-small-2506'\n  | 'mistralai/ministral-3b'\n  | 'mistralai/ministral-8b'\n  | 'mistralai/mistral-7b-instruct'\n  | 'mistralai/mistral-7b-instruct-v0.1'\n  | 'mistralai/mistral-7b-instruct-v0.2'\n  | 'mistralai/mistral-7b-instruct-v0.3'\n  | 'mistralai/mistral-large'\n  | 'mistralai/mistral-large-2407'\n  | 'mistralai/mistral-large-2411'\n  | 'mistralai/mistral-medium-3'\n  | 'mistralai/mistral-medium-3.1'\n  | 'mistralai/mistral-nemo'\n  | 'mistralai/mistral-saba'\n  | 'mistralai/mistral-small'\n  | 'mistralai/mistral-small-24b-instruct-2501'\n  | 'mistralai/mistral-small-3.1-24b-instruct'\n  | 'mistralai/mistral-small-3.2-24b-instruct'\n  | 'mistralai/mistral-tiny'\n  | 'mistralai/mixtral-8x22b-instruct'\n  | 'mistralai/mixtral-8x7b-instruct'\n  | 'mistralai/pixtral-12b'\n  | 'mistralai/pixtral-large-2411'\n  | 'moonshotai/kimi-dev-72b'\n  | 'moonshotai/kimi-k2'\n  | 'moonshotai/kimi-k2-0905'\n  | 'morph/morph-v3-fast'\n  | 'morph/morph-v3-large'\n  | 'neversleep/llama-3.1-lumimaid-8b'\n  | 'neversleep/noromaid-20b'\n  | 'nousresearch/deephermes-3-llama-3-8b-preview'\n  | 'nousresearch/deephermes-3-mistral-24b-preview'\n  | 'nousresearch/hermes-2-pro-llama-3-8b'\n  | 'nousresearch/hermes-3-llama-3.1-405b'\n  | 'nousresearch/hermes-4-405b'\n  | 'nousresearch/hermes-4-70b'\n  | 'nvidia/llama-3.1-nemotron-70b-instruct'\n  | 'nvidia/llama-3.1-nemotron-ultra-253b-v1'\n  | 'nvidia/llama-3.3-nemotron-super-49b-v1.5'\n  | 'nvidia/nemotron-nano-9b-v2'\n  | 'openai/chatgpt-4o-latest'\n  | 'openai/codex-mini'\n  | 'openai/gpt-3.5-turbo'\n  | 'openai/gpt-3.5-turbo-0613'\n  | 'openai/gpt-3.5-turbo-16k'\n  | 'openai/gpt-3.5-turbo-instruct'\n  | 'openai/gpt-4'\n  | 'openai/gpt-4-0314'\n  | 'openai/gpt-4-1106-preview'\n  | 'openai/gpt-4-turbo'\n  | 'openai/gpt-4-turbo-preview'\n  | 'openai/gpt-4.1'\n  | 'openai/gpt-4.1-mini'\n  | 'openai/gpt-4.1-nano'\n  | 'openai/gpt-4o'\n  | 'openai/gpt-4o-2024-05-13'\n  | 'openai/gpt-4o-2024-08-06'\n  | 'openai/gpt-4o-2024-11-20'\n  | 'openai/gpt-4o-mini'\n  | 'openai/gpt-4o-mini-2024-07-18'\n  | 'openai/gpt-4o-mini-search-preview'\n  | 'openai/gpt-4o-search-preview'\n  | 'openai/gpt-4o:extended'\n  | 'openai/gpt-5'\n  | 'openai/gpt-5-chat'\n  | 'openai/gpt-5-codex'\n  | 'openai/gpt-5-mini'\n  | 'openai/gpt-5-nano'\n  | 'openai/gpt-5-pro'\n  | 'openai/gpt-oss-120b'\n  | 'openai/gpt-oss-20b'\n  | 'openai/o1'\n  | 'openai/o1-mini'\n  | 'openai/o1-mini-2024-09-12'\n  | 'openai/o1-pro'\n  | 'openai/o3'\n  | 'openai/o3-deep-research'\n  | 'openai/o3-mini'\n  | 'openai/o3-mini-high'\n  | 'openai/o3-pro'\n  | 'openai/o4-mini'\n  | 'openai/o4-mini-deep-research'\n  | 'openai/o4-mini-high'\n  | 'opengvlab/internvl3-78b'\n  | 'perplexity/sonar'\n  | 'perplexity/sonar-deep-research'\n  | 'perplexity/sonar-pro'\n  | 'perplexity/sonar-reasoning'\n  | 'perplexity/sonar-reasoning-pro'\n  | 'qwen/qwen-2.5-72b-instruct'\n  | 'qwen/qwen-2.5-7b-instruct'\n  | 'qwen/qwen-2.5-vl-7b-instruct'\n  | 'qwen/qwen-max'\n  | 'qwen/qwen-plus'\n  | 'qwen/qwen-plus-2025-07-28'\n  | 'qwen/qwen-plus-2025-07-28:thinking'\n  | 'qwen/qwen-turbo'\n  | 'qwen/qwen-vl-max'\n  | 'qwen/qwen-vl-plus'\n  | 'qwen/qwen2.5-coder-7b-instruct'\n  | 'qwen/qwen2.5-vl-32b-instruct'\n  | 'qwen/qwen2.5-vl-72b-instruct'\n  | 'qwen/qwen3-14b'\n  | 'qwen/qwen3-235b-a22b'\n  | 'qwen/qwen3-235b-a22b-2507'\n  | 'qwen/qwen3-235b-a22b-thinking-2507'\n  | 'qwen/qwen3-30b-a3b'\n  | 'qwen/qwen3-30b-a3b-instruct-2507'\n  | 'qwen/qwen3-30b-a3b-thinking-2507'\n  | 'qwen/qwen3-32b'\n  | 'qwen/qwen3-8b'\n  | 'qwen/qwen3-coder'\n  | 'qwen/qwen3-coder-30b-a3b-instruct'\n  | 'qwen/qwen3-coder-flash'\n  | 'qwen/qwen3-coder-plus'\n  | 'qwen/qwen3-max'\n  | 'qwen/qwen3-next-80b-a3b-instruct'\n  | 'qwen/qwen3-vl-235b-a22b-instruct'\n  | 'qwen/qwen3-vl-235b-a22b-thinking'\n  | 'qwen/qwen3-vl-30b-a3b-instruct'\n  | 'qwen/qwen3-vl-30b-a3b-thinking'\n  | 'qwen/qwen3-vl-8b-instruct'\n  | 'qwen/qwen3-vl-8b-thinking'\n  | 'qwen/qwq-32b'\n  | 'raifle/sorcererlm-8x22b'\n  | 'sao10k/l3-euryale-70b'\n  | 'sao10k/l3-lunaris-8b'\n  | 'sao10k/l3.1-70b-hanami-x1'\n  | 'sao10k/l3.1-euryale-70b'\n  | 'sao10k/l3.3-euryale-70b'\n  | 'shisa-ai/shisa-v2-llama3.3-70b'\n  | 'stepfun-ai/step3'\n  | 'switchpoint/router'\n  | 'tencent/hunyuan-a13b-instruct'\n  | 'thedrummer/anubis-70b-v1.1'\n  | 'thedrummer/cydonia-24b-v4.1'\n  | 'thedrummer/rocinante-12b'\n  | 'thedrummer/skyfall-36b-v2'\n  | 'thedrummer/unslopnemo-12b'\n  | 'thudm/glm-4.1v-9b-thinking'\n  | 'thudm/glm-z1-32b'\n  | 'tngtech/deepseek-r1t-chimera'\n  | 'tngtech/deepseek-r1t2-chimera'\n  | 'undi95/remm-slerp-l2-13b'\n  | 'x-ai/grok-3'\n  | 'x-ai/grok-3-beta'\n  | 'x-ai/grok-3-mini'\n  | 'x-ai/grok-3-mini-beta'\n  | 'x-ai/grok-4'\n  | 'x-ai/grok-4-fast'\n  | 'x-ai/grok-code-fast-1'\n  | 'z-ai/glm-4-32b'\n  | 'z-ai/glm-4.5'\n  | 'z-ai/glm-4.5-air'\n  | 'z-ai/glm-4.5v'\n  | 'z-ai/glm-4.6';\n\nexport const OpenRouterModels: SupportedModel[] = [\n  {\n    model_id: 'ai21/jamba-large-1.7',\n    input_cost_per_token: 0.000002,\n    output_cost_per_token: 0.000008,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'ai21/jamba-mini-1.7',\n    input_cost_per_token: 2e-7,\n    output_cost_per_token: 4e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'aion-labs/aion-1.0',\n    input_cost_per_token: 0.000004,\n    output_cost_per_token: 0.000008,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'aion-labs/aion-1.0-mini',\n    input_cost_per_token: 7e-7,\n    output_cost_per_token: 0.0000014,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'aion-labs/aion-rp-llama-3.1-8b',\n    input_cost_per_token: 2e-7,\n    output_cost_per_token: 2e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'alfredpros/codellama-7b-instruct-solidity',\n    input_cost_per_token: 8e-7,\n    output_cost_per_token: 0.0000012,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'alibaba/tongyi-deepresearch-30b-a3b',\n    input_cost_per_token: 9e-8,\n    output_cost_per_token: 4e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'allenai/molmo-7b-d',\n    input_cost_per_token: 1e-7,\n    output_cost_per_token: 2e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'allenai/olmo-2-0325-32b-instruct',\n    input_cost_per_token: 2e-7,\n    output_cost_per_token: 3.5e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'alpindale/goliath-120b',\n    input_cost_per_token: 0.000004,\n    output_cost_per_token: 0.0000055,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'amazon/nova-lite-v1',\n    input_cost_per_token: 6e-8,\n    output_cost_per_token: 2.4e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'amazon/nova-micro-v1',\n    input_cost_per_token: 3.5e-8,\n    output_cost_per_token: 1.4e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'amazon/nova-pro-v1',\n    input_cost_per_token: 8e-7,\n    output_cost_per_token: 0.0000032,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'anthracite-org/magnum-v4-72b',\n    input_cost_per_token: 0.0000025,\n    output_cost_per_token: 0.000005,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'anthropic/claude-3-haiku',\n    input_cost_per_token: 2.5e-7,\n    output_cost_per_token: 0.00000125,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'anthropic/claude-3-opus',\n    input_cost_per_token: 0.000015,\n    output_cost_per_token: 0.000075,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'anthropic/claude-3.5-haiku',\n    input_cost_per_token: 8e-7,\n    output_cost_per_token: 0.000004,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'anthropic/claude-3.5-sonnet',\n    input_cost_per_token: 0.000003,\n    output_cost_per_token: 0.000015,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'anthropic/claude-3.5-sonnet-20240620',\n    input_cost_per_token: 0.000003,\n    output_cost_per_token: 0.000015,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'anthropic/claude-3.7-sonnet',\n    input_cost_per_token: 0.000003,\n    output_cost_per_token: 0.000015,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'anthropic/claude-3.7-sonnet:thinking',\n    input_cost_per_token: 0.000003,\n    output_cost_per_token: 0.000015,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'anthropic/claude-haiku-4.5',\n    input_cost_per_token: 0.000001,\n    output_cost_per_token: 0.000005,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'anthropic/claude-opus-4',\n    input_cost_per_token: 0.000015,\n    output_cost_per_token: 0.000075,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'anthropic/claude-opus-4.1',\n    input_cost_per_token: 0.000015,\n    output_cost_per_token: 0.000075,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'anthropic/claude-sonnet-4',\n    input_cost_per_token: 0.000003,\n    output_cost_per_token: 0.000015,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'anthropic/claude-sonnet-4.5',\n    input_cost_per_token: 0.000003,\n    output_cost_per_token: 0.000015,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'arcee-ai/afm-4.5b',\n    input_cost_per_token: 4.8e-8,\n    output_cost_per_token: 1.5e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'arcee-ai/coder-large',\n    input_cost_per_token: 5e-7,\n    output_cost_per_token: 8e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'arcee-ai/maestro-reasoning',\n    input_cost_per_token: 9e-7,\n    output_cost_per_token: 0.0000033,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'arcee-ai/virtuoso-large',\n    input_cost_per_token: 7.5e-7,\n    output_cost_per_token: 0.0000012,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'baidu/ernie-4.5-21b-a3b',\n    input_cost_per_token: 7e-8,\n    output_cost_per_token: 2.8e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'baidu/ernie-4.5-21b-a3b-thinking',\n    input_cost_per_token: 7e-8,\n    output_cost_per_token: 2.8e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'baidu/ernie-4.5-300b-a47b',\n    input_cost_per_token: 2.8e-7,\n    output_cost_per_token: 0.0000011,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'baidu/ernie-4.5-vl-28b-a3b',\n    input_cost_per_token: 1.4e-7,\n    output_cost_per_token: 5.6e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'baidu/ernie-4.5-vl-424b-a47b',\n    input_cost_per_token: 4.2e-7,\n    output_cost_per_token: 0.00000125,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'bytedance/ui-tars-1.5-7b',\n    input_cost_per_token: 1e-7,\n    output_cost_per_token: 2e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'cognitivecomputations/dolphin3.0-mistral-24b',\n    input_cost_per_token: 4e-8,\n    output_cost_per_token: 1.7e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'cohere/command-a',\n    input_cost_per_token: 0.0000025,\n    output_cost_per_token: 0.00001,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'cohere/command-r-08-2024',\n    input_cost_per_token: 1.5e-7,\n    output_cost_per_token: 6e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'cohere/command-r-plus-08-2024',\n    input_cost_per_token: 0.0000025,\n    output_cost_per_token: 0.00001,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'cohere/command-r7b-12-2024',\n    input_cost_per_token: 3.75e-8,\n    output_cost_per_token: 1.5e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'deepcogito/cogito-v2-preview-deepseek-671b',\n    input_cost_per_token: 0.00000125,\n    output_cost_per_token: 0.00000125,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'deepcogito/cogito-v2-preview-llama-109b-moe',\n    input_cost_per_token: 1.8e-7,\n    output_cost_per_token: 5.9e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'deepcogito/cogito-v2-preview-llama-405b',\n    input_cost_per_token: 0.0000035,\n    output_cost_per_token: 0.0000035,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'deepcogito/cogito-v2-preview-llama-70b',\n    input_cost_per_token: 8.8e-7,\n    output_cost_per_token: 8.8e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'deepseek/deepseek-chat',\n    input_cost_per_token: 3e-7,\n    output_cost_per_token: 8.5e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'deepseek/deepseek-chat-v3-0324',\n    input_cost_per_token: 2.4e-7,\n    output_cost_per_token: 8.4e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'deepseek/deepseek-chat-v3.1',\n    input_cost_per_token: 2e-7,\n    output_cost_per_token: 8e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'deepseek/deepseek-prover-v2',\n    input_cost_per_token: 5e-7,\n    output_cost_per_token: 0.00000218,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'deepseek/deepseek-r1',\n    input_cost_per_token: 4e-7,\n    output_cost_per_token: 0.000002,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'deepseek/deepseek-r1-0528',\n    input_cost_per_token: 4e-7,\n    output_cost_per_token: 0.00000175,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'deepseek/deepseek-r1-0528-qwen3-8b',\n    input_cost_per_token: 3e-8,\n    output_cost_per_token: 1.1e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'deepseek/deepseek-r1-distill-llama-70b',\n    input_cost_per_token: 3e-8,\n    output_cost_per_token: 1.3e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'deepseek/deepseek-r1-distill-qwen-14b',\n    input_cost_per_token: 1.5e-7,\n    output_cost_per_token: 1.5e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'deepseek/deepseek-r1-distill-qwen-32b',\n    input_cost_per_token: 2.7e-7,\n    output_cost_per_token: 2.7e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'deepseek/deepseek-v3.1-terminus',\n    input_cost_per_token: 2.3e-7,\n    output_cost_per_token: 9e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'deepseek/deepseek-v3.2-exp',\n    input_cost_per_token: 2.7e-7,\n    output_cost_per_token: 4e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'eleutherai/llemma_7b',\n    input_cost_per_token: 8e-7,\n    output_cost_per_token: 0.0000012,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'google/gemini-2.0-flash-001',\n    input_cost_per_token: 1e-7,\n    output_cost_per_token: 4e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'google/gemini-2.0-flash-lite-001',\n    input_cost_per_token: 7.5e-8,\n    output_cost_per_token: 3e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'google/gemini-2.5-flash',\n    input_cost_per_token: 3e-7,\n    output_cost_per_token: 0.0000025,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'google/gemini-2.5-flash-lite',\n    input_cost_per_token: 1e-7,\n    output_cost_per_token: 4e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'google/gemini-2.5-flash-lite-preview-06-17',\n    input_cost_per_token: 1e-7,\n    output_cost_per_token: 4e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'google/gemini-2.5-flash-lite-preview-09-2025',\n    input_cost_per_token: 1e-7,\n    output_cost_per_token: 4e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'google/gemini-2.5-flash-preview-09-2025',\n    input_cost_per_token: 3e-7,\n    output_cost_per_token: 0.0000025,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'google/gemini-2.5-pro',\n    input_cost_per_token: 0.00000125,\n    output_cost_per_token: 0.00001,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'google/gemini-2.5-pro-preview',\n    input_cost_per_token: 0.00000125,\n    output_cost_per_token: 0.00001,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'google/gemini-2.5-pro-preview-05-06',\n    input_cost_per_token: 0.00000125,\n    output_cost_per_token: 0.00001,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'google/gemma-2-27b-it',\n    input_cost_per_token: 6.5e-7,\n    output_cost_per_token: 6.5e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'google/gemma-2-9b-it',\n    input_cost_per_token: 1e-8,\n    output_cost_per_token: 3e-8,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'google/gemma-3-12b-it',\n    input_cost_per_token: 3e-8,\n    output_cost_per_token: 1e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'google/gemma-3-27b-it',\n    input_cost_per_token: 9e-8,\n    output_cost_per_token: 1.6e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'google/gemma-3-4b-it',\n    input_cost_per_token: 1.703012e-8,\n    output_cost_per_token: 6.81536e-8,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'google/gemma-3n-e4b-it',\n    input_cost_per_token: 2e-8,\n    output_cost_per_token: 4e-8,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'gryphe/mythomax-l2-13b',\n    input_cost_per_token: 5e-8,\n    output_cost_per_token: 9e-8,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'inception/mercury',\n    input_cost_per_token: 2.5e-7,\n    output_cost_per_token: 0.000001,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'inception/mercury-coder',\n    input_cost_per_token: 2.5e-7,\n    output_cost_per_token: 0.000001,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'inclusionai/ling-1t',\n    input_cost_per_token: 4e-7,\n    output_cost_per_token: 0.000002,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'inclusionai/ring-1t',\n    input_cost_per_token: 5.7e-7,\n    output_cost_per_token: 0.00000228,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'inflection/inflection-3-pi',\n    input_cost_per_token: 0.0000025,\n    output_cost_per_token: 0.00001,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'inflection/inflection-3-productivity',\n    input_cost_per_token: 0.0000025,\n    output_cost_per_token: 0.00001,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'liquid/lfm-3b',\n    input_cost_per_token: 2e-8,\n    output_cost_per_token: 2e-8,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'liquid/lfm-7b',\n    input_cost_per_token: 1e-8,\n    output_cost_per_token: 1e-8,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'mancer/weaver',\n    input_cost_per_token: 0.000001125,\n    output_cost_per_token: 0.000001125,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'meituan/longcat-flash-chat',\n    input_cost_per_token: 1.5e-7,\n    output_cost_per_token: 7.5e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'meta-llama/llama-3-70b-instruct',\n    input_cost_per_token: 3e-7,\n    output_cost_per_token: 4e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'meta-llama/llama-3-8b-instruct',\n    input_cost_per_token: 3e-8,\n    output_cost_per_token: 6e-8,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'meta-llama/llama-3.1-405b',\n    input_cost_per_token: 0.000004,\n    output_cost_per_token: 0.000004,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'meta-llama/llama-3.1-405b-instruct',\n    input_cost_per_token: 8e-7,\n    output_cost_per_token: 8e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'meta-llama/llama-3.1-70b-instruct',\n    input_cost_per_token: 4e-7,\n    output_cost_per_token: 4e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'meta-llama/llama-3.1-8b-instruct',\n    input_cost_per_token: 2e-8,\n    output_cost_per_token: 3e-8,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'meta-llama/llama-3.2-11b-vision-instruct',\n    input_cost_per_token: 4.9e-8,\n    output_cost_per_token: 4.9e-8,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'meta-llama/llama-3.2-1b-instruct',\n    input_cost_per_token: 5e-9,\n    output_cost_per_token: 1e-8,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'meta-llama/llama-3.2-3b-instruct',\n    input_cost_per_token: 2e-8,\n    output_cost_per_token: 2e-8,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'meta-llama/llama-3.2-90b-vision-instruct',\n    input_cost_per_token: 3.5e-7,\n    output_cost_per_token: 4e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'meta-llama/llama-3.3-70b-instruct',\n    input_cost_per_token: 1.3e-7,\n    output_cost_per_token: 3.8e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'meta-llama/llama-4-maverick',\n    input_cost_per_token: 1.5e-7,\n    output_cost_per_token: 6e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'meta-llama/llama-4-scout',\n    input_cost_per_token: 8e-8,\n    output_cost_per_token: 3e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'meta-llama/llama-guard-2-8b',\n    input_cost_per_token: 2e-7,\n    output_cost_per_token: 2e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'meta-llama/llama-guard-3-8b',\n    input_cost_per_token: 2e-8,\n    output_cost_per_token: 6e-8,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'meta-llama/llama-guard-4-12b',\n    input_cost_per_token: 1.8e-7,\n    output_cost_per_token: 1.8e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'microsoft/mai-ds-r1',\n    input_cost_per_token: 3e-7,\n    output_cost_per_token: 0.0000012,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'microsoft/phi-3-medium-128k-instruct',\n    input_cost_per_token: 0.000001,\n    output_cost_per_token: 0.000001,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'microsoft/phi-3-mini-128k-instruct',\n    input_cost_per_token: 1e-7,\n    output_cost_per_token: 1e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'microsoft/phi-3.5-mini-128k-instruct',\n    input_cost_per_token: 1e-7,\n    output_cost_per_token: 1e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'microsoft/phi-4',\n    input_cost_per_token: 6e-8,\n    output_cost_per_token: 1.4e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'microsoft/phi-4-multimodal-instruct',\n    input_cost_per_token: 5e-8,\n    output_cost_per_token: 1e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'microsoft/phi-4-reasoning-plus',\n    input_cost_per_token: 7e-8,\n    output_cost_per_token: 3.5e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'microsoft/wizardlm-2-8x22b',\n    input_cost_per_token: 4.8e-7,\n    output_cost_per_token: 4.8e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'minimax/minimax-m1',\n    input_cost_per_token: 4e-7,\n    output_cost_per_token: 0.0000022,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'mistralai/codestral-2501',\n    input_cost_per_token: 3e-7,\n    output_cost_per_token: 9e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'mistralai/codestral-2508',\n    input_cost_per_token: 3e-7,\n    output_cost_per_token: 9e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'mistralai/devstral-medium',\n    input_cost_per_token: 4e-7,\n    output_cost_per_token: 0.000002,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'mistralai/devstral-small',\n    input_cost_per_token: 7e-8,\n    output_cost_per_token: 2.8e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'mistralai/devstral-small-2505',\n    input_cost_per_token: 5e-8,\n    output_cost_per_token: 2.2e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'mistralai/magistral-medium-2506',\n    input_cost_per_token: 0.000002,\n    output_cost_per_token: 0.000005,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'mistralai/magistral-medium-2506:thinking',\n    input_cost_per_token: 0.000002,\n    output_cost_per_token: 0.000005,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'mistralai/magistral-small-2506',\n    input_cost_per_token: 5e-7,\n    output_cost_per_token: 0.0000015,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'mistralai/ministral-3b',\n    input_cost_per_token: 4e-8,\n    output_cost_per_token: 4e-8,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'mistralai/ministral-8b',\n    input_cost_per_token: 1e-7,\n    output_cost_per_token: 1e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'mistralai/mistral-7b-instruct',\n    input_cost_per_token: 2.8e-8,\n    output_cost_per_token: 5.4e-8,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'mistralai/mistral-7b-instruct-v0.1',\n    input_cost_per_token: 1.1e-7,\n    output_cost_per_token: 1.9e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'mistralai/mistral-7b-instruct-v0.2',\n    input_cost_per_token: 2e-7,\n    output_cost_per_token: 2e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'mistralai/mistral-7b-instruct-v0.3',\n    input_cost_per_token: 2.8e-8,\n    output_cost_per_token: 5.4e-8,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'mistralai/mistral-large',\n    input_cost_per_token: 0.000002,\n    output_cost_per_token: 0.000006,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'mistralai/mistral-large-2407',\n    input_cost_per_token: 0.000002,\n    output_cost_per_token: 0.000006,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'mistralai/mistral-large-2411',\n    input_cost_per_token: 0.000002,\n    output_cost_per_token: 0.000006,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'mistralai/mistral-medium-3',\n    input_cost_per_token: 4e-7,\n    output_cost_per_token: 0.000002,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'mistralai/mistral-medium-3.1',\n    input_cost_per_token: 4e-7,\n    output_cost_per_token: 0.000002,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'mistralai/mistral-nemo',\n    input_cost_per_token: 2e-8,\n    output_cost_per_token: 4e-8,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'mistralai/mistral-saba',\n    input_cost_per_token: 2e-7,\n    output_cost_per_token: 6e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'mistralai/mistral-small',\n    input_cost_per_token: 2e-7,\n    output_cost_per_token: 6e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'mistralai/mistral-small-24b-instruct-2501',\n    input_cost_per_token: 5e-8,\n    output_cost_per_token: 8e-8,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'mistralai/mistral-small-3.1-24b-instruct',\n    input_cost_per_token: 5e-8,\n    output_cost_per_token: 1e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'mistralai/mistral-small-3.2-24b-instruct',\n    input_cost_per_token: 6e-8,\n    output_cost_per_token: 1.8e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'mistralai/mistral-tiny',\n    input_cost_per_token: 2.5e-7,\n    output_cost_per_token: 2.5e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'mistralai/mixtral-8x22b-instruct',\n    input_cost_per_token: 9e-7,\n    output_cost_per_token: 9e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'mistralai/mixtral-8x7b-instruct',\n    input_cost_per_token: 5.4e-7,\n    output_cost_per_token: 5.4e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'mistralai/pixtral-12b',\n    input_cost_per_token: 1e-7,\n    output_cost_per_token: 1e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'mistralai/pixtral-large-2411',\n    input_cost_per_token: 0.000002,\n    output_cost_per_token: 0.000006,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'moonshotai/kimi-dev-72b',\n    input_cost_per_token: 2.9e-7,\n    output_cost_per_token: 0.00000115,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'moonshotai/kimi-k2',\n    input_cost_per_token: 1.4e-7,\n    output_cost_per_token: 0.00000249,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'moonshotai/kimi-k2-0905',\n    input_cost_per_token: 3.9e-7,\n    output_cost_per_token: 0.0000019,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'morph/morph-v3-fast',\n    input_cost_per_token: 8e-7,\n    output_cost_per_token: 0.0000012,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'morph/morph-v3-large',\n    input_cost_per_token: 9e-7,\n    output_cost_per_token: 0.0000019,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'neversleep/llama-3.1-lumimaid-8b',\n    input_cost_per_token: 9e-8,\n    output_cost_per_token: 6e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'neversleep/noromaid-20b',\n    input_cost_per_token: 0.000001,\n    output_cost_per_token: 0.00000175,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'nousresearch/deephermes-3-llama-3-8b-preview',\n    input_cost_per_token: 3e-8,\n    output_cost_per_token: 1.1e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'nousresearch/deephermes-3-mistral-24b-preview',\n    input_cost_per_token: 1.5e-7,\n    output_cost_per_token: 5.9e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'nousresearch/hermes-2-pro-llama-3-8b',\n    input_cost_per_token: 2.5e-8,\n    output_cost_per_token: 8e-8,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'nousresearch/hermes-3-llama-3.1-405b',\n    input_cost_per_token: 0.000001,\n    output_cost_per_token: 0.000001,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'nousresearch/hermes-4-405b',\n    input_cost_per_token: 3e-7,\n    output_cost_per_token: 0.0000012,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'nousresearch/hermes-4-70b',\n    input_cost_per_token: 1.1e-7,\n    output_cost_per_token: 3.8e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'nvidia/llama-3.1-nemotron-70b-instruct',\n    input_cost_per_token: 6e-7,\n    output_cost_per_token: 6e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'nvidia/llama-3.1-nemotron-ultra-253b-v1',\n    input_cost_per_token: 6e-7,\n    output_cost_per_token: 0.0000018,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'nvidia/llama-3.3-nemotron-super-49b-v1.5',\n    input_cost_per_token: 1e-7,\n    output_cost_per_token: 4e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'nvidia/nemotron-nano-9b-v2',\n    input_cost_per_token: 4e-8,\n    output_cost_per_token: 1.6e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'openai/chatgpt-4o-latest',\n    input_cost_per_token: 0.000005,\n    output_cost_per_token: 0.000015,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'openai/codex-mini',\n    input_cost_per_token: 0.0000015,\n    output_cost_per_token: 0.000006,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'openai/gpt-3.5-turbo',\n    input_cost_per_token: 5e-7,\n    output_cost_per_token: 0.0000015,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'openai/gpt-3.5-turbo-0613',\n    input_cost_per_token: 0.000001,\n    output_cost_per_token: 0.000002,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'openai/gpt-3.5-turbo-16k',\n    input_cost_per_token: 0.000003,\n    output_cost_per_token: 0.000004,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'openai/gpt-3.5-turbo-instruct',\n    input_cost_per_token: 0.0000015,\n    output_cost_per_token: 0.000002,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'openai/gpt-4',\n    input_cost_per_token: 0.00003,\n    output_cost_per_token: 0.00006,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'openai/gpt-4-0314',\n    input_cost_per_token: 0.00003,\n    output_cost_per_token: 0.00006,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'openai/gpt-4-1106-preview',\n    input_cost_per_token: 0.00001,\n    output_cost_per_token: 0.00003,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'openai/gpt-4-turbo',\n    input_cost_per_token: 0.00001,\n    output_cost_per_token: 0.00003,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'openai/gpt-4-turbo-preview',\n    input_cost_per_token: 0.00001,\n    output_cost_per_token: 0.00003,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'openai/gpt-4.1',\n    input_cost_per_token: 0.000002,\n    output_cost_per_token: 0.000008,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'openai/gpt-4.1-mini',\n    input_cost_per_token: 4e-7,\n    output_cost_per_token: 0.0000016,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'openai/gpt-4.1-nano',\n    input_cost_per_token: 1e-7,\n    output_cost_per_token: 4e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'openai/gpt-4o',\n    input_cost_per_token: 0.0000025,\n    output_cost_per_token: 0.00001,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'openai/gpt-4o-2024-05-13',\n    input_cost_per_token: 0.000005,\n    output_cost_per_token: 0.000015,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'openai/gpt-4o-2024-08-06',\n    input_cost_per_token: 0.0000025,\n    output_cost_per_token: 0.00001,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'openai/gpt-4o-2024-11-20',\n    input_cost_per_token: 0.0000025,\n    output_cost_per_token: 0.00001,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'openai/gpt-4o-mini',\n    input_cost_per_token: 1.5e-7,\n    output_cost_per_token: 6e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'openai/gpt-4o-mini-2024-07-18',\n    input_cost_per_token: 1.5e-7,\n    output_cost_per_token: 6e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'openai/gpt-4o-mini-search-preview',\n    input_cost_per_token: 1.5e-7,\n    output_cost_per_token: 6e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'openai/gpt-4o-search-preview',\n    input_cost_per_token: 0.0000025,\n    output_cost_per_token: 0.00001,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'openai/gpt-4o:extended',\n    input_cost_per_token: 0.000006,\n    output_cost_per_token: 0.000018,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'openai/gpt-5',\n    input_cost_per_token: 0.00000125,\n    output_cost_per_token: 0.00001,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'openai/gpt-5-chat',\n    input_cost_per_token: 0.00000125,\n    output_cost_per_token: 0.00001,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'openai/gpt-5-codex',\n    input_cost_per_token: 0.00000125,\n    output_cost_per_token: 0.00001,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'openai/gpt-5-mini',\n    input_cost_per_token: 2.5e-7,\n    output_cost_per_token: 0.000002,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'openai/gpt-5-nano',\n    input_cost_per_token: 5e-8,\n    output_cost_per_token: 4e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'openai/gpt-5-pro',\n    input_cost_per_token: 0.000015,\n    output_cost_per_token: 0.00012,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'openai/gpt-oss-120b',\n    input_cost_per_token: 4e-8,\n    output_cost_per_token: 4e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'openai/gpt-oss-20b',\n    input_cost_per_token: 3e-8,\n    output_cost_per_token: 1.4e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'openai/o1',\n    input_cost_per_token: 0.000015,\n    output_cost_per_token: 0.00006,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'openai/o1-mini',\n    input_cost_per_token: 0.0000011,\n    output_cost_per_token: 0.0000044,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'openai/o1-mini-2024-09-12',\n    input_cost_per_token: 0.0000011,\n    output_cost_per_token: 0.0000044,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'openai/o1-pro',\n    input_cost_per_token: 0.00015,\n    output_cost_per_token: 0.0006,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'openai/o3',\n    input_cost_per_token: 0.000002,\n    output_cost_per_token: 0.000008,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'openai/o3-deep-research',\n    input_cost_per_token: 0.00001,\n    output_cost_per_token: 0.00004,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'openai/o3-mini',\n    input_cost_per_token: 0.0000011,\n    output_cost_per_token: 0.0000044,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'openai/o3-mini-high',\n    input_cost_per_token: 0.0000011,\n    output_cost_per_token: 0.0000044,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'openai/o3-pro',\n    input_cost_per_token: 0.00002,\n    output_cost_per_token: 0.00008,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'openai/o4-mini',\n    input_cost_per_token: 0.0000011,\n    output_cost_per_token: 0.0000044,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'openai/o4-mini-deep-research',\n    input_cost_per_token: 0.000002,\n    output_cost_per_token: 0.000008,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'openai/o4-mini-high',\n    input_cost_per_token: 0.0000011,\n    output_cost_per_token: 0.0000044,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'opengvlab/internvl3-78b',\n    input_cost_per_token: 7e-8,\n    output_cost_per_token: 2.6e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'perplexity/sonar',\n    input_cost_per_token: 0.000001,\n    output_cost_per_token: 0.000001,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'perplexity/sonar-deep-research',\n    input_cost_per_token: 0.000002,\n    output_cost_per_token: 0.000008,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'perplexity/sonar-pro',\n    input_cost_per_token: 0.000003,\n    output_cost_per_token: 0.000015,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'perplexity/sonar-reasoning',\n    input_cost_per_token: 0.000001,\n    output_cost_per_token: 0.000005,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'perplexity/sonar-reasoning-pro',\n    input_cost_per_token: 0.000002,\n    output_cost_per_token: 0.000008,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'qwen/qwen-2.5-72b-instruct',\n    input_cost_per_token: 7e-8,\n    output_cost_per_token: 2.6e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'qwen/qwen-2.5-7b-instruct',\n    input_cost_per_token: 4e-8,\n    output_cost_per_token: 1e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'qwen/qwen-2.5-vl-7b-instruct',\n    input_cost_per_token: 2e-7,\n    output_cost_per_token: 2e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'qwen/qwen-max',\n    input_cost_per_token: 0.0000016,\n    output_cost_per_token: 0.0000064,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'qwen/qwen-plus',\n    input_cost_per_token: 4e-7,\n    output_cost_per_token: 0.0000012,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'qwen/qwen-plus-2025-07-28',\n    input_cost_per_token: 4e-7,\n    output_cost_per_token: 0.0000012,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'qwen/qwen-plus-2025-07-28:thinking',\n    input_cost_per_token: 4e-7,\n    output_cost_per_token: 0.000004,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'qwen/qwen-turbo',\n    input_cost_per_token: 5e-8,\n    output_cost_per_token: 2e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'qwen/qwen-vl-max',\n    input_cost_per_token: 8e-7,\n    output_cost_per_token: 0.0000032,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'qwen/qwen-vl-plus',\n    input_cost_per_token: 2.1e-7,\n    output_cost_per_token: 6.3e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'qwen/qwen2.5-coder-7b-instruct',\n    input_cost_per_token: 3e-8,\n    output_cost_per_token: 9e-8,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'qwen/qwen2.5-vl-32b-instruct',\n    input_cost_per_token: 5e-8,\n    output_cost_per_token: 2.2e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'qwen/qwen2.5-vl-72b-instruct',\n    input_cost_per_token: 8e-8,\n    output_cost_per_token: 3.3e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'qwen/qwen3-14b',\n    input_cost_per_token: 5e-8,\n    output_cost_per_token: 2.2e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'qwen/qwen3-235b-a22b',\n    input_cost_per_token: 1.8e-7,\n    output_cost_per_token: 5.4e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'qwen/qwen3-235b-a22b-2507',\n    input_cost_per_token: 8e-8,\n    output_cost_per_token: 5.5e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'qwen/qwen3-235b-a22b-thinking-2507',\n    input_cost_per_token: 1.1e-7,\n    output_cost_per_token: 6e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'qwen/qwen3-30b-a3b',\n    input_cost_per_token: 6e-8,\n    output_cost_per_token: 2.2e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'qwen/qwen3-30b-a3b-instruct-2507',\n    input_cost_per_token: 8e-8,\n    output_cost_per_token: 3.3e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'qwen/qwen3-30b-a3b-thinking-2507',\n    input_cost_per_token: 8e-8,\n    output_cost_per_token: 2.9e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'qwen/qwen3-32b',\n    input_cost_per_token: 5e-8,\n    output_cost_per_token: 2e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'qwen/qwen3-8b',\n    input_cost_per_token: 3.5e-8,\n    output_cost_per_token: 1.38e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'qwen/qwen3-coder',\n    input_cost_per_token: 2.2e-7,\n    output_cost_per_token: 9.5e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'qwen/qwen3-coder-30b-a3b-instruct',\n    input_cost_per_token: 6e-8,\n    output_cost_per_token: 2.5e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'qwen/qwen3-coder-flash',\n    input_cost_per_token: 3e-7,\n    output_cost_per_token: 0.0000015,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'qwen/qwen3-coder-plus',\n    input_cost_per_token: 0.000001,\n    output_cost_per_token: 0.000005,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'qwen/qwen3-max',\n    input_cost_per_token: 0.0000012,\n    output_cost_per_token: 0.000006,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'qwen/qwen3-next-80b-a3b-instruct',\n    input_cost_per_token: 1e-7,\n    output_cost_per_token: 8e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'qwen/qwen3-vl-235b-a22b-instruct',\n    input_cost_per_token: 3e-7,\n    output_cost_per_token: 0.0000012,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'qwen/qwen3-vl-235b-a22b-thinking',\n    input_cost_per_token: 3e-7,\n    output_cost_per_token: 0.0000012,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'qwen/qwen3-vl-30b-a3b-instruct',\n    input_cost_per_token: 2.9e-7,\n    output_cost_per_token: 9.9e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'qwen/qwen3-vl-30b-a3b-thinking',\n    input_cost_per_token: 2.9e-7,\n    output_cost_per_token: 0.000001,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'qwen/qwen3-vl-8b-instruct',\n    input_cost_per_token: 1.8e-7,\n    output_cost_per_token: 6.9e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'qwen/qwen3-vl-8b-thinking',\n    input_cost_per_token: 1.8e-7,\n    output_cost_per_token: 0.0000021,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'qwen/qwq-32b',\n    input_cost_per_token: 1.5e-7,\n    output_cost_per_token: 4e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'raifle/sorcererlm-8x22b',\n    input_cost_per_token: 0.0000045,\n    output_cost_per_token: 0.0000045,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'sao10k/l3-euryale-70b',\n    input_cost_per_token: 0.00000148,\n    output_cost_per_token: 0.00000148,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'sao10k/l3-lunaris-8b',\n    input_cost_per_token: 4e-8,\n    output_cost_per_token: 5e-8,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'sao10k/l3.1-70b-hanami-x1',\n    input_cost_per_token: 0.000003,\n    output_cost_per_token: 0.000003,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'sao10k/l3.1-euryale-70b',\n    input_cost_per_token: 6.5e-7,\n    output_cost_per_token: 7.5e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'sao10k/l3.3-euryale-70b',\n    input_cost_per_token: 6.5e-7,\n    output_cost_per_token: 7.5e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'shisa-ai/shisa-v2-llama3.3-70b',\n    input_cost_per_token: 5e-8,\n    output_cost_per_token: 2.2e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'stepfun-ai/step3',\n    input_cost_per_token: 5.7e-7,\n    output_cost_per_token: 0.00000142,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'switchpoint/router',\n    input_cost_per_token: 8.5e-7,\n    output_cost_per_token: 0.0000034,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'tencent/hunyuan-a13b-instruct',\n    input_cost_per_token: 3e-8,\n    output_cost_per_token: 3e-8,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'thedrummer/anubis-70b-v1.1',\n    input_cost_per_token: 6.5e-7,\n    output_cost_per_token: 0.000001,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'thedrummer/cydonia-24b-v4.1',\n    input_cost_per_token: 3e-7,\n    output_cost_per_token: 5e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'thedrummer/rocinante-12b',\n    input_cost_per_token: 1.7e-7,\n    output_cost_per_token: 4.3e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'thedrummer/skyfall-36b-v2',\n    input_cost_per_token: 8e-8,\n    output_cost_per_token: 3.3e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'thedrummer/unslopnemo-12b',\n    input_cost_per_token: 4e-7,\n    output_cost_per_token: 4e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'thudm/glm-4.1v-9b-thinking',\n    input_cost_per_token: 3.5e-8,\n    output_cost_per_token: 1.38e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'thudm/glm-z1-32b',\n    input_cost_per_token: 5e-8,\n    output_cost_per_token: 2.2e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'tngtech/deepseek-r1t-chimera',\n    input_cost_per_token: 3e-7,\n    output_cost_per_token: 0.0000012,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'tngtech/deepseek-r1t2-chimera',\n    input_cost_per_token: 3e-7,\n    output_cost_per_token: 0.0000012,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'undi95/remm-slerp-l2-13b',\n    input_cost_per_token: 4.5e-7,\n    output_cost_per_token: 6.5e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'x-ai/grok-3',\n    input_cost_per_token: 0.000003,\n    output_cost_per_token: 0.000015,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'x-ai/grok-3-beta',\n    input_cost_per_token: 0.000003,\n    output_cost_per_token: 0.000015,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'x-ai/grok-3-mini',\n    input_cost_per_token: 3e-7,\n    output_cost_per_token: 5e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'x-ai/grok-3-mini-beta',\n    input_cost_per_token: 3e-7,\n    output_cost_per_token: 5e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'x-ai/grok-4',\n    input_cost_per_token: 0.000003,\n    output_cost_per_token: 0.000015,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'x-ai/grok-4-fast',\n    input_cost_per_token: 2e-7,\n    output_cost_per_token: 5e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'x-ai/grok-code-fast-1',\n    input_cost_per_token: 2e-7,\n    output_cost_per_token: 0.0000015,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'z-ai/glm-4-32b',\n    input_cost_per_token: 1e-7,\n    output_cost_per_token: 1e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'z-ai/glm-4.5',\n    input_cost_per_token: 3.5e-7,\n    output_cost_per_token: 0.00000155,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'z-ai/glm-4.5-air',\n    input_cost_per_token: 1.4e-7,\n    output_cost_per_token: 8.6e-7,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'z-ai/glm-4.5v',\n    input_cost_per_token: 6e-7,\n    output_cost_per_token: 0.0000018,\n    provider: 'OpenRouter',\n  },\n  {\n    model_id: 'z-ai/glm-4.6',\n    input_cost_per_token: 5e-7,\n    output_cost_per_token: 0.00000175,\n    provider: 'OpenRouter',\n  },\n];\n","import { SupportedImageModel } from '../types';\n\nexport type OpenAIImageModel = 'gpt-image-1';\n\nexport const OpenAIImageModels: SupportedImageModel[] = [\n  {\n    model_id: 'gpt-image-1',\n    image_input_cost_per_token: 10.0 / 1_000_000,\n    image_output_cost_per_token: 40.0 / 1_000_000,\n    text_input_cost_per_token: 5.0 / 1_000_000,\n    provider: 'OpenAI',\n  },\n];\n","import { OpenAIModels } from '../chat/openai';\nimport { SupportedModel, SupportedTool, ToolPricing } from '../types';\nimport { DefaultOpenAIToolPricing, OpenAITools } from '../tools/openai';\n\nexport const SupportedOpenAIResponseModels: SupportedModel[] = OpenAIModels;\n\nexport const SupportedOpenAIResponseTools: SupportedTool[] = OpenAITools;\n\nexport const SupportedOpenAIResponseToolPricing: ToolPricing =\n  DefaultOpenAIToolPricing;\n","import { SupportedVideoModel } from 'supported-models/types';\n\nexport type GeminiVideoModel =\n  | 'veo-3.0-generate-001'\n  | 'veo-3.0-fast-generate-001';\n// https://ai.google.dev/gemini-api/docs/pricing\nexport const GeminiVideoModels: SupportedVideoModel[] = [\n  {\n    model_id: 'veo-3.0-generate-001',\n    cost_per_second_with_audio: 0.4,\n    cost_per_second_without_audio: 0.2,\n    provider: 'Gemini',\n  },\n  {\n    model_id: 'veo-3.0-fast-generate-001',\n    cost_per_second_with_audio: 0.15,\n    cost_per_second_without_audio: 0.1,\n    provider: 'Gemini',\n  },\n];\n","import type { SupportedVideoModel } from '../types';\n\nexport type VertexAIVideoModel =\n  | 'veo-3.0-fast-generate-preview'\n  | 'veo-3.0-generate-preview';\n/**\n * Vertex AI video models with official pricing information\n * Based on: https://cloud.google.com/vertex-ai/generative-ai/pricing\n *\n * Veo 3: $0.40/second with audio, $0.20/second video only\n * Veo 3 Fast: $0.15/second with audio, $0.10/second video only\n */\nexport const VertexAIVideoModels: SupportedVideoModel[] = [\n  {\n    model_id: 'veo-3.0-fast-generate-preview',\n    cost_per_second_with_audio: 0.15,\n    cost_per_second_without_audio: 0.1, // Fixed: was 0.1, now 0.10 for clarity\n    provider: 'VertexAI',\n  },\n  {\n    model_id: 'veo-3.0-generate-preview',\n    cost_per_second_with_audio: 0.4, // Fixed: was 0.4, now 0.40 for clarity\n    cost_per_second_without_audio: 0.2, // Fixed: was 0.2, now 0.20 for clarity\n    provider: 'VertexAI',\n  },\n];\n","import { HttpClient } from '../http-client';\nimport { BaseResource } from '../utils/error-handling';\nimport {\n  OpenAIModels,\n  AnthropicModels,\n  GeminiModels,\n  OpenRouterModels,\n  OpenAIImageModels,\n  SupportedModel,\n  SupportedImageModel,\n  SupportedVideoModel,\n  GeminiVideoModels,\n} from '../supported-models';\n\nexport class ModelsResource extends BaseResource {\n  constructor(http: HttpClient) {\n    super(http);\n  }\n\n  /**\n   * Get supported models as a flat array of model names\n   */\n  async listSupportedChatModels(): Promise<SupportedModel[]> {\n    const allModels = [\n      ...OpenAIModels,\n      ...AnthropicModels,\n      ...GeminiModels,\n      ...OpenRouterModels,\n    ];\n\n    return allModels;\n  }\n\n  async listSupportedImageModels(): Promise<SupportedImageModel[]> {\n    return OpenAIImageModels;\n  }\n\n  async listSupportedVideoModels(): Promise<SupportedVideoModel[]> {\n    return GeminiVideoModels;\n  }\n}\n","import { HttpClient } from '../http-client';\nimport { ApiRoutes } from '../api-types';\nimport { BaseResource } from '../utils/error-handling';\n\nexport class PaymentsResource extends BaseResource {\n  constructor(http: HttpClient) {\n    super(http);\n  }\n\n  /**\n   * Create a payment link for purchasing credits\n   * @param request Payment link details\n   */\n  async createPaymentLink(\n    request: ApiRoutes['POST /stripe/payment-link']['body']\n  ) {\n    return this.handleRequest<\n      ApiRoutes['POST /stripe/payment-link']['response']\n    >(\n      () => this.http.post('/api/v1/stripe/payment-link', request),\n      'creating payment link',\n      '/api/v1/stripe/payment-link'\n    );\n  }\n\n  /**\n   * Get payment URL for purchasing credits\n   * @param amount Amount to purchase in USD\n   * @param description Optional description for the payment\n   * @param successUrl Optional URL to redirect to after successful payment\n   */\n  async getPaymentUrl(\n    amount: number,\n    description?: string,\n    successUrl?: string\n  ): Promise<string> {\n    const request: ApiRoutes['POST /stripe/payment-link']['body'] = {\n      amount,\n      description: description || 'Echo Credits',\n    };\n\n    if (successUrl) {\n      request.successUrl = successUrl;\n    }\n\n    try {\n      const response = await this.createPaymentLink(request);\n      return response.paymentLink.url;\n    } catch (error) {\n      throw error;\n    }\n  }\n}\n","import { HttpClient } from '../http-client';\nimport { ApiRoutes } from '../api-types';\nimport { BaseResource } from '../utils/error-handling';\nimport { validateAppId } from '../utils/validation';\n\nexport class UsersResource extends BaseResource {\n  constructor(http: HttpClient) {\n    super(http);\n  }\n\n  /**\n   * Get current user information\n   */\n  async getUserInfo(): Promise<ApiRoutes['GET /user']['response']> {\n    return this.handleRequest(\n      () => this.http.get('/api/v1/user'),\n      'fetching user info',\n      '/api/v1/user'\n    );\n  }\n\n  /**\n   * Register a referral code for the authenticated user\n   * @param echoAppId The Echo app ID to register the referral code for\n   * @param code The referral code to register\n   */\n  async registerReferralCode(echoAppId: string, code: string) {\n    validateAppId(echoAppId, 'registerReferralCode');\n\n    const request: ApiRoutes['POST /user/referral']['body'] = {\n      echoAppId,\n      code,\n    };\n    return this.handleRequest<ApiRoutes['POST /user/referral']['response']>(\n      () => this.http.post('/api/v1/user/referral', request),\n      'registering referral code',\n      '/api/v1/user/referral'\n    );\n  }\n}\n","import { ApiKeyTokenProvider, TokenProvider } from './auth/token-provider';\nimport { EchoClientConfig, getConfig } from './config';\nimport { HttpClient } from './http-client';\nimport {\n  AppsResource,\n  BalanceResource,\n  ModelsResource,\n  PaymentsResource,\n  UsersResource,\n} from './resources';\n\nexport interface EchoClientOptions extends Partial<EchoClientConfig> {\n  tokenProvider?: TokenProvider;\n}\n\nexport class EchoClient {\n  private http: HttpClient;\n  private config: EchoClientConfig;\n  private tokenProvider: TokenProvider;\n\n  // Resource instances\n  public readonly balance: BalanceResource;\n  public readonly payments: PaymentsResource;\n  public readonly apps: AppsResource;\n  public readonly users: UsersResource;\n  public readonly models: ModelsResource;\n\n  constructor(options?: EchoClientOptions) {\n    this.config = getConfig(options);\n\n    // Set up token provider\n    if (options?.tokenProvider) {\n      this.tokenProvider = options.tokenProvider;\n    } else {\n      // Fallback to API key provider\n      const apiKey = this.config.apiKey || process.env.ECHO_API_KEY;\n      if (!apiKey) {\n        throw new Error('No API key or token provider provided');\n      }\n      this.tokenProvider = new ApiKeyTokenProvider(apiKey);\n    }\n\n    // Create fetch-based HTTP client with automatic token refresh\n    this.http = new HttpClient(this.config.baseUrl, this.tokenProvider);\n\n    // Initialize resource instances\n    this.balance = new BalanceResource(this.http);\n    this.payments = new PaymentsResource(this.http);\n    this.apps = new AppsResource(this.http, this.config.baseUrl);\n    this.users = new UsersResource(this.http);\n    this.models = new ModelsResource(this.http);\n  }\n}\n","import {\n  AnthropicProvider,\n  createAnthropic as createAnthropicBase,\n} from '@ai-sdk/anthropic';\nimport { ROUTER_BASE_URL } from '../config';\nimport { EchoConfig } from '../types';\nimport { validateAppId } from '../utils/validation';\nimport { echoFetch } from './index';\n\nexport function createEchoAnthropic(\n  { appId, baseRouterUrl = ROUTER_BASE_URL }: EchoConfig,\n  getTokenFn: (appId: string) => Promise<string | null>,\n  onInsufficientFunds?: () => void\n): AnthropicProvider {\n  validateAppId(appId, 'createEchoAnthropic');\n\n  return createAnthropicBase({\n    baseURL: baseRouterUrl,\n    apiKey: 'placeholder_replaced_by_echoFetch',\n    headers: {\n      // this is safe in Echo because the token is an echo oauth jwt\n      // not a long lived anthropic api key\n      'anthropic-dangerous-direct-browser-access': 'true',\n    },\n    fetch: echoFetch(\n      fetch,\n      async () => await getTokenFn(appId),\n      onInsufficientFunds\n    ),\n  });\n}\n","import {\n  createGoogleGenerativeAI as createGoogleBase,\n  GoogleGenerativeAIProvider,\n} from '@ai-sdk/google';\nimport { ROUTER_BASE_URL } from 'config';\nimport { EchoConfig } from '../types';\nimport { validateAppId } from '../utils/validation';\nimport { echoFetch } from './index';\n\nexport function createEchoGoogle(\n  { appId, baseRouterUrl = ROUTER_BASE_URL }: EchoConfig,\n  getTokenFn: (appId: string) => Promise<string | null>,\n  onInsufficientFunds?: () => void\n): GoogleGenerativeAIProvider {\n  validateAppId(appId, 'createEchoGoogle');\n\n  return createGoogleBase({\n    baseURL: baseRouterUrl,\n    apiKey: 'placeholder_replaced_by_echoFetch',\n    fetch: echoFetch(\n      fetch,\n      async () => await getTokenFn(appId),\n      onInsufficientFunds\n    ),\n  });\n}\n","import { createGroq as createGroqBase, GroqProvider } from '@ai-sdk/groq';\nimport { ROUTER_BASE_URL } from 'config';\nimport { EchoConfig } from '../types';\nimport { validateAppId } from '../utils/validation';\nimport { echoFetch } from './index';\n\nexport function createEchoGroq(\n  { appId, baseRouterUrl = ROUTER_BASE_URL }: EchoConfig,\n  getTokenFn: (appId: string) => Promise<string | null>,\n  onInsufficientFunds?: () => void\n): GroqProvider {\n  validateAppId(appId, 'createEchoGroq');\n\n  return createGroqBase({\n    baseURL: baseRouterUrl,\n    apiKey: 'placeholder_replaced_by_echoFetch',\n    fetch: echoFetch(\n      fetch,\n      async () => await getTokenFn(appId),\n      onInsufficientFunds\n    ),\n  });\n}\n","import { createXai as createXAIBase, XaiProvider } from '@ai-sdk/xai';\nimport { ROUTER_BASE_URL } from 'config';\nimport { EchoConfig } from '../types';\nimport { validateAppId } from '../utils/validation';\nimport { echoFetch } from './index';\n\nexport function createEchoXAI(\n  { appId, baseRouterUrl = ROUTER_BASE_URL }: EchoConfig,\n  getTokenFn: (appId: string) => Promise<string | null>,\n  onInsufficientFunds?: () => void\n): XaiProvider {\n  validateAppId(appId, 'createEchoXAI');\n\n  return createXAIBase({\n    baseURL: baseRouterUrl,\n    apiKey: 'placeholder_replaced_by_echoFetch',\n    fetch: echoFetch(\n      fetch,\n      async () => await getTokenFn(appId),\n      onInsufficientFunds\n    ),\n  });\n}\n","import {\n  createOpenAI as createOpenAIBase,\n  OpenAIProvider,\n} from '@ai-sdk/openai';\nimport { ROUTER_BASE_URL } from 'config';\nimport { EchoConfig } from '../types';\nimport { validateAppId } from '../utils/validation';\nimport { echoFetch } from './index';\n\nexport function createEchoOpenAI(\n  { appId, baseRouterUrl = ROUTER_BASE_URL }: EchoConfig,\n  getTokenFn: (appId: string) => Promise<string | null>,\n  onInsufficientFunds?: () => void\n): OpenAIProvider {\n  validateAppId(appId, 'createEchoOpenAI');\n\n  return createOpenAIBase({\n    baseURL: baseRouterUrl,\n    apiKey: 'placeholder_replaced_by_echoFetch',\n    fetch: echoFetch(\n      fetch,\n      async () => await getTokenFn(appId),\n      onInsufficientFunds\n    ),\n  });\n}\n","import {\n  createOpenRouter as createOpenRouterBase,\n  OpenRouterProvider,\n} from '@openrouter/ai-sdk-provider';\nimport { ROUTER_BASE_URL } from 'config';\nimport { EchoConfig } from '../types';\nimport { validateAppId } from '../utils/validation';\nimport { echoFetch } from './index';\n\nexport function createEchoOpenRouter(\n  { appId, baseRouterUrl = ROUTER_BASE_URL }: EchoConfig,\n  getTokenFn: (appId: string) => Promise<string | null>,\n  onInsufficientFunds?: () => void\n): OpenRouterProvider {\n  validateAppId(appId, 'createEchoOpenRouter');\n\n  return createOpenRouterBase({\n    baseURL: baseRouterUrl,\n    apiKey: 'placeholder_replaced_by_echoFetch',\n    fetch: echoFetch(\n      fetch,\n      async () => await getTokenFn(appId),\n      onInsufficientFunds\n    ),\n  });\n}\n","export * from './anthropic';\nexport * from './google';\nexport * from './groq';\nexport * from './xai';\nexport * from './openai';\nexport * from './openrouter';\n\nexport function echoFetch(\n  originalFetch: typeof fetch,\n  getTokenFn: () => Promise<string | null>,\n  onInsufficientFunds?: () => void\n): typeof fetch {\n  return async (input: RequestInfo | URL, init?: RequestInit) => {\n    const initialToken = await getTokenFn();\n\n    const mergeHeaders = (\n      first?: HeadersInit,\n      second?: HeadersInit\n    ): Headers => {\n      const merged = new Headers(first || {});\n      if (second) new Headers(second).forEach((v, k) => merged.set(k, v));\n      return merged;\n    };\n\n    const composeRequest = (token: string | null): Request => {\n      if (input instanceof Request) {\n        const base = input.clone();\n        const merged = mergeHeaders(base.headers, init?.headers);\n        merged.delete('Authorization');\n        if (token) merged.set('Authorization', `Bearer ${token}`);\n        return new Request(base, { ...init, headers: merged });\n      }\n      const headers = mergeHeaders(undefined, init?.headers);\n      headers.delete('Authorization');\n      if (token) headers.set('Authorization', `Bearer ${token}`);\n      return new Request(input, { ...init, headers });\n    };\n\n    let request = composeRequest(initialToken);\n    // Do the actual fetch\n    let response = await originalFetch(request);\n    if (response.status === 401) {\n      // Hard Refresh of the token, and do a request once more with the new token\n      const token = await getTokenFn();\n      request = composeRequest(token);\n      const newResponse = await originalFetch(request);\n      response = newResponse;\n    }\n\n    // post processing\n    if (response.status === 402) {\n      onInsufficientFunds?.();\n    }\n\n    return response;\n  };\n}\n\n// re-export the underlying types so that next doesn't need to depend on provider specific types\nexport { type AnthropicProvider } from '@ai-sdk/anthropic';\nexport { type GoogleGenerativeAIProvider } from '@ai-sdk/google';\nexport { type GroqProvider } from '@ai-sdk/groq';\nexport { type OpenAIProvider } from '@ai-sdk/openai';\nexport { type OpenRouterProvider } from '@openrouter/ai-sdk-provider';\nexport { type XaiProvider } from '@ai-sdk/xai';\n","import { SupportedModel } from '../types';\n\n// Groq model IDs\n// Pricing sourced from: https://console.groq.com/docs/models\n// Last updated: 2025-10-17\nexport type GroqModel =\n  | 'llama-3.1-8b-instant'\n  | 'llama-3.3-70b-versatile'\n  | 'meta-llama/llama-guard-4-12b'\n  | 'openai/gpt-oss-120b'\n  | 'openai/gpt-oss-20b'\n  | 'meta-llama/llama-4-maverick-17b-128e-instruct'\n  | 'meta-llama/llama-4-scout-17b-16e-instruct'\n  | 'meta-llama/llama-prompt-guard-2-22m'\n  | 'meta-llama/llama-prompt-guard-2-86m'\n  | 'moonshotai/kimi-k2-instruct-0905'\n  | 'qwen/qwen3-32b';\n\nexport const GroqModels: SupportedModel[] = [\n  // Production Models\n  {\n    model_id: 'llama-3.1-8b-instant',\n    input_cost_per_token: 0.00000005, // $0.05 per 1M tokens\n    output_cost_per_token: 0.00000008, // $0.08 per 1M tokens\n    provider: 'Groq',\n  },\n  {\n    model_id: 'llama-3.3-70b-versatile',\n    input_cost_per_token: 0.00000059, // $0.59 per 1M tokens\n    output_cost_per_token: 0.00000079, // $0.79 per 1M tokens\n    provider: 'Groq',\n  },\n  {\n    model_id: 'meta-llama/llama-guard-4-12b',\n    input_cost_per_token: 0.0000002, // $0.20 per 1M tokens\n    output_cost_per_token: 0.0000002, // $0.20 per 1M tokens\n    provider: 'Groq',\n  },\n  {\n    model_id: 'openai/gpt-oss-120b',\n    input_cost_per_token: 0.00000015, // $0.15 per 1M tokens\n    output_cost_per_token: 0.0000006, // $0.60 per 1M tokens\n    provider: 'Groq',\n  },\n  {\n    model_id: 'openai/gpt-oss-20b',\n    input_cost_per_token: 0.000000075, // $0.075 per 1M tokens\n    output_cost_per_token: 0.0000003, // $0.30 per 1M tokens\n    provider: 'Groq',\n  },\n  // Preview Models\n  {\n    model_id: 'meta-llama/llama-4-maverick-17b-128e-instruct',\n    input_cost_per_token: 0.0000002, // $0.20 per 1M tokens\n    output_cost_per_token: 0.0000006, // $0.60 per 1M tokens\n    provider: 'Groq',\n  },\n  {\n    model_id: 'meta-llama/llama-4-scout-17b-16e-instruct',\n    input_cost_per_token: 0.00000011, // $0.11 per 1M tokens\n    output_cost_per_token: 0.00000034, // $0.34 per 1M tokens\n    provider: 'Groq',\n  },\n  {\n    model_id: 'meta-llama/llama-prompt-guard-2-22m',\n    input_cost_per_token: 0.00000003, // $0.03 per 1M tokens\n    output_cost_per_token: 0.00000003, // $0.03 per 1M tokens\n    provider: 'Groq',\n  },\n  {\n    model_id: 'meta-llama/llama-prompt-guard-2-86m',\n    input_cost_per_token: 0.00000004, // $0.04 per 1M tokens\n    output_cost_per_token: 0.00000004, // $0.04 per 1M tokens\n    provider: 'Groq',\n  },\n  {\n    model_id: 'moonshotai/kimi-k2-instruct-0905',\n    input_cost_per_token: 0.000001, // $1.00 per 1M tokens\n    output_cost_per_token: 0.000003, // $3.00 per 1M tokens\n    provider: 'Groq',\n  },\n  {\n    model_id: 'qwen/qwen3-32b',\n    input_cost_per_token: 0.00000029, // $0.29 per 1M tokens\n    output_cost_per_token: 0.00000059, // $0.59 per 1M tokens\n    provider: 'Groq',\n  },\n];\n","import { SupportedModel } from '../types';\n\n// xAI Grok models and pricing (per 1 token). Source: https://docs.x.ai/docs/models\n// Prices below are per-token, converted from $ per 1M tokens\nexport type XAIModel =\n  | 'grok-2-vision-1212'\n  | 'grok-3'\n  | 'grok-3-mini'\n  | 'grok-4-0709'\n  | 'grok-4-fast-non-reasoning'\n  | 'grok-4-fast-reasoning'\n  | 'grok-code-fast-1';\n\nexport const XAIModels: SupportedModel[] = [\n  {\n    model_id: 'grok-2-vision-1212',\n    input_cost_per_token: 0.000002, // $2.00 / 1M\n    output_cost_per_token: 0.00001, // $10.00 / 1M\n    provider: 'xAI',\n  },\n  {\n    model_id: 'grok-3',\n    input_cost_per_token: 0.000003, // $3.00 / 1M\n    output_cost_per_token: 0.000015, // $15.00 / 1M\n    provider: 'xAI',\n  },\n  {\n    model_id: 'grok-3-mini',\n    input_cost_per_token: 0.0000003, // $0.30 / 1M\n    output_cost_per_token: 0.0000005, // $0.50 / 1M\n    provider: 'xAI',\n  },\n  {\n    model_id: 'grok-4-0709',\n    input_cost_per_token: 0.000003, // $3.00 / 1M\n    output_cost_per_token: 0.000015, // $15.00 / 1M\n    provider: 'xAI',\n  },\n  {\n    model_id: 'grok-4-fast-non-reasoning',\n    input_cost_per_token: 0.0000002, // $0.20 / 1M\n    output_cost_per_token: 0.0000005, // $0.50 / 1M\n    provider: 'xAI',\n  },\n  {\n    model_id: 'grok-4-fast-reasoning',\n    input_cost_per_token: 0.0000002, // $0.20 / 1M\n    output_cost_per_token: 0.0000005, // $0.50 / 1M\n    provider: 'xAI',\n  },\n  {\n    model_id: 'grok-code-fast-1',\n    input_cost_per_token: 0.0000002, // $0.20 / 1M\n    output_cost_per_token: 0.0000015, // $1.50 / 1M\n    provider: 'xAI',\n  },\n];\n","import { SupportedVideoModel } from 'supported-models/types';\n\nexport type OpenAIVideoModel = 'sora-2' | 'sora-2-pro';\n\nexport const OpenAIVideoModels: SupportedVideoModel[] = [\n  {\n    model_id: 'sora-2',\n    cost_per_second_with_audio: 0.1,\n    cost_per_second_without_audio: 0.1,\n    provider: 'OpenAI',\n  },\n  {\n    model_id: 'sora-2-pro',\n    cost_per_second_with_audio: 0.3,\n    cost_per_second_without_audio: 0.3,\n    provider: 'OpenAI',\n  },\n];\n"],"mappings":"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","names":["createAnthropicBase","createGoogleBase","createGroqBase","createXAIBase","import_openai","createOpenAIBase","createOpenRouterBase"]}