import type { SystemConfig } from "./system"; export interface GPU { id?: string; uuid?: string; pci_bus_id?: string; index: number; name: string; memory_total_mb: number; memory_used_mb: number; memory_free_mb: number; utilization_pct: number; temp_c: number; power_draw?: number; power_limit?: number; memory_shared?: boolean; memory_usage_available?: boolean; utilization_available?: boolean; temperature_available?: boolean; power_available?: boolean; } export interface Metrics { model_id?: string | null; model_path?: string | null; served_model_name?: string | null; requests_total?: number; tokens_total?: number; latency_avg?: number; throughput?: number; gpu_utilization?: number; memory_used?: number; avg_ttft_ms?: number; kv_cache_usage?: number; generation_throughput?: number; prompt_throughput?: number; request_success?: number; generation_tokens_total?: number; prompt_tokens_total?: number; running_requests?: number; pending_requests?: number; // VRAM (aggregated across GPUs) vram_used_gb?: number; vram_capacity_gb?: number; power_limit_watts?: number; // Session averages (since first token this session) session_avg_prefill?: number; session_avg_generation?: number; // Session peaks (best this session) — reset on model switch session_peak_prefill?: number; session_peak_generation?: number; session_peak_prompt_throughput?: number; session_peak_generation_throughput?: number; session_peak_ttft_ms?: number; session_peak_kv_cache_usage?: number; session_peak_running_requests?: number; session_peak_power_watts?: number; session_peak_vram_used_gb?: number; session_peak_id?: string | null; session_peak_prefill_tps?: number; session_peak_generation_tps?: number; session_peak_best_ttft_ms?: number; best_session_peak_id?: string | null; best_session_prefill_tps?: number; best_session_generation_tps?: number; best_session_ttft_ms?: number; // All-time peak metrics (stored best values) peak_prefill_tps?: number; peak_generation_tps?: number; peak_ttft_ms?: number; total_tokens?: number; total_requests?: number; // Lifetime metrics (cumulative across all sessions) lifetime_tokens?: number; lifetime_prompt_tokens?: number; lifetime_completion_tokens?: number; lifetime_requests?: number; lifetime_energy_wh?: number; lifetime_energy_kwh?: number; lifetime_uptime_hours?: number; kwh_per_million_tokens?: number; kwh_per_million_input?: number; kwh_per_million_output?: number; current_power_watts?: number; } // VRAM calculation export interface VRAMCalculation { model_size_gb: number; context_memory_gb: number; overhead_gb: number; total_gb: number; fits_in_vram: boolean; fits: boolean; utilization_percent: number; breakdown: { model_weights_gb: number; kv_cache_gb: number; activations_gb: number; per_gpu_gb: number; total_gb: number; }; } export interface PeakMetrics { model_id: string; prefill_tps: number | null; generation_tps: number | null; ttft_ms: number | null; best_session_id?: string | null; best_session_prefill_tps?: number | null; best_session_generation_tps?: number | null; best_session_ttft_ms?: number | null; total_tokens: number; total_requests: number; } export interface ProcessInfo { pid: number; backend: string; model_path: string | null; port: number; served_model_name?: string | null; } export interface LogSession { id: string; recipe_id?: string; recipe_name?: string; model_path?: string; model?: string; backend?: string; started_at?: string; created_at: string; ended_at?: string; status: "running" | "stopped" | "crashed"; } export interface StudioSettings { config_path: string; persisted: { models_dir?: string; ui_preferences?: Record; }; effective: { models_dir: string; }; } export interface StudioDiagnostics { app_version: string; timestamp: string; platform: string; arch: string; release: string; cpu_model: string | null; cpu_cores: number; memory_total: number; memory_free: number; gpus: GPU[]; runtime: { vllm_installed: boolean; vllm_version: string | null; python_path: string | null; vllm_bin: string | null; }; disks: Array<{ path: string; total_bytes: number | null; free_bytes: number | null; available_bytes: number | null; }>; config: SystemConfig; }