src / api.ts

// src/api.ts
// Модуль для загрузки списка моделей с OpenRouter API

export interface ModelData {
  id: string;
  name?: string;
  description?: string;
  context_length?: number;
  pricing?: any;
}

export interface ModelsResponse {
  data: ModelData[];
}

/**
 * Загружает список моделей с OpenRouter API
 * @param baseUrl - базовый URL API (например, https://openrouter.ai/api/v1)
 * @param apiKey - опциональный API ключ для авторизации
 * @returns массив идентификаторов моделей
 */
export async function fetchModels(
  baseUrl: string,
  apiKey?: string
): Promise<string[]> {
  try {
    const modelsUrl = `${baseUrl}/models`;
    
    if (typeof fetch === 'undefined') {
      throw new Error('fetch is not available in this environment');
    }
    
    const headers: Record<string, string> = {};
    if (apiKey && apiKey.trim()) {
      headers["Authorization"] = `Bearer ${apiKey}`;
    }
    
    const response = await fetch(modelsUrl, { 
      method: 'GET',
      headers 
    });

    if (!response.ok) {
      const errorText = await response.text();
      throw new Error(`HTTP ${response.status}: ${errorText}`);
    }

    const data = await response.json() as ModelsResponse;
    
    if (!data.data || !Array.isArray(data.data)) {
      console.warn("[API] Invalid response format from models endpoint");
      return [];
    }

    const allModels = data.data.map((m: ModelData) => m.id).filter(Boolean);
    
    return allModels;

  } catch (error) {
    console.error("[API] Failed to fetch models:", error);
    return [];
  }
}

/**
 * Фильтрует список моделей, оставляя только бесплатные (с суффиксом :free)
 * @param models - полный список моделей
 * @returns отфильтрованный список бесплатных моделей
 */
export function filterFreeModels(models: string[]): string[] {
  return models.filter((id: string) => id.includes(":free"));
}