const API_BASE = 'http://localhost:9826/api'; export interface Provider { id: string; name: string; api_key: string; base_url: string; enabled: boolean; created_at: string; updated_at: string; } export interface Model { id: string; provider_id: string; model_name: string; enabled: boolean; created_at: string; } export interface UsageStats { id: number; provider_id: string; model_name: string; request_count: number; date: string; } // Provider API export async function listProviders(): Promise { const response = await fetch(`${API_BASE}/providers`); if (!response.ok) throw new Error('Failed to fetch providers'); return response.json(); } export async function createProvider(provider: Omit): Promise { const response = await fetch(`${API_BASE}/providers`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(provider), }); if (!response.ok) throw new Error('Failed to create provider'); return response.json(); } export async function updateProvider(id: string, updates: Partial): Promise { const response = await fetch(`${API_BASE}/providers/${id}`, { method: 'PUT', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(updates), }); if (!response.ok) throw new Error('Failed to update provider'); return response.json(); } export async function deleteProvider(id: string): Promise { const response = await fetch(`${API_BASE}/providers/${id}`, { method: 'DELETE' }); if (!response.ok) throw new Error('Failed to delete provider'); } // Model API export async function listModels(providerId?: string): Promise { const url = providerId ? `${API_BASE}/models?provider_id=${providerId}` : `${API_BASE}/models`; const response = await fetch(url); if (!response.ok) throw new Error('Failed to fetch models'); return response.json(); } export async function createModel(model: Omit): Promise { const response = await fetch(`${API_BASE}/models`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(model), }); if (!response.ok) throw new Error('Failed to create model'); return response.json(); } export async function updateModel(id: string, updates: Partial): Promise { const response = await fetch(`${API_BASE}/models/${id}`, { method: 'PUT', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(updates), }); if (!response.ok) throw new Error('Failed to update model'); return response.json(); } export async function deleteModel(id: string): Promise { const response = await fetch(`${API_BASE}/models/${id}`, { method: 'DELETE' }); if (!response.ok) throw new Error('Failed to delete model'); } // Stats API export async function getStats(params?: { provider_id?: string; model_name?: string; start_date?: string; end_date?: string; }): Promise { const query = new URLSearchParams(); if (params?.provider_id) query.set('provider_id', params.provider_id); if (params?.model_name) query.set('model_name', params.model_name); if (params?.start_date) query.set('start_date', params.start_date); if (params?.end_date) query.set('end_date', params.end_date); const response = await fetch(`${API_BASE}/stats?${query}`); if (!response.ok) throw new Error('Failed to fetch stats'); return response.json(); } export async function getAggregatedStats(params?: { provider_id?: string; model_name?: string; start_date?: string; end_date?: string; group_by?: 'provider' | 'model' | 'date'; }): Promise { const query = new URLSearchParams(); if (params?.provider_id) query.set('provider_id', params.provider_id); if (params?.model_name) query.set('model_name', params.model_name); if (params?.start_date) query.set('start_date', params.start_date); if (params?.end_date) query.set('end_date', params.end_date); if (params?.group_by) query.set('group_by', params.group_by); const response = await fetch(`${API_BASE}/stats/aggregate?${query}`); if (!response.ok) throw new Error('Failed to fetch aggregated stats'); return response.json(); }