import type { ProfilerResourceGauge } from '../schemas/profiling.js'; import type { InferenceBackendDiagnostics } from '../schemas/system-resources.js'; export type ProfilingEventKind = 'rpc' | 'handler' | 'download' | 'load'; export interface ProfilingEvent { /** Timestamp when event was recorded (monotonic ms) */ ts: number; op: string; kind: ProfilingEventKind; profileId?: string; phase?: string; ms?: number; /** Count (e.g., chunks, tokens) */ count?: number; bytes?: number; /** Numeric gauges (e.g., throughput, token counters) */ gauges?: Record; resources?: ProfilerResourceGauge; backend?: InferenceBackendDiagnostics; /** String tags (e.g., handlerType, sourceType, modelId) */ tags?: Record; } export interface ProfilerRuntimeOptions { mode?: 'summary' | 'verbose'; includeServerBreakdown?: boolean; includeResourceGauges?: boolean; operationFilters?: string[]; } export interface AggregatedStats { count: number; min: number; max: number; avg: number; sum: number; last: number; } export interface ProfilerExport { config: { enabled: boolean; mode: 'summary' | 'verbose'; includeServerBreakdown: boolean; includeResourceGauges: boolean; operationFilters: string[]; maxRecentEvents: number; }; aggregates: Record; recentEvents?: ProfilingEvent[]; exportedAt: number; } export interface LoadTimingStats { modelInitializationTimeMs?: number; totalLoadTimeMs?: number; }