234 lines · 6.7 KB · TypeScript
RawDownload
import { Schema } from "effect"; const ControllerTotalsSchema = Schema.Struct({  total_requests: Schema.Number,  successful_requests: Schema.Number,  failed_requests: Schema.Number,  success_rate: Schema.Number,}); const ControllerLatencySchema = Schema.Struct({  avg_ms: Schema.NullOr(Schema.Number),  max_ms: Schema.NullOr(Schema.Number),}); const ControllerRecentActivitySchema = Schema.Struct({  last_hour_requests: Schema.Number,  last_24h_requests: Schema.Number,  last_24h_failed_requests: Schema.Number,}); const ControllerPathSchema = Schema.Struct({  method: Schema.String,  path: Schema.String,  requests: Schema.Number,  successful: Schema.Number,  failed: Schema.Number,  success_rate: Schema.Number,  avg_duration_ms: Schema.NullOr(Schema.Number),  max_duration_ms: Schema.NullOr(Schema.Number),}); const ControllerStatusSchema = Schema.Struct({  status: Schema.Number,  requests: Schema.Number,}); const ControllerErrorSchema = Schema.Struct({  method: Schema.String,  path: Schema.String,  status: Schema.Number,  error_class: Schema.NullOr(Schema.String),  error_message: Schema.NullOr(Schema.String),  created_at: Schema.String,}); const FunctionTotalsSchema = Schema.Struct({  total_calls: Schema.Number,  successful_calls: Schema.Number,  failed_calls: Schema.Number,  success_rate: Schema.Number,}); const FunctionUsageSchema = Schema.Struct({  function_name: Schema.String,  calls: Schema.Number,  successful: Schema.Number,  failed: Schema.Number,  success_rate: Schema.Number,  avg_duration_ms: Schema.NullOr(Schema.Number),  max_duration_ms: Schema.NullOr(Schema.Number),}); const FunctionErrorSchema = Schema.Struct({  function_name: Schema.String,  error_class: Schema.NullOr(Schema.String),  error_message: Schema.NullOr(Schema.String),  created_at: Schema.String,}); const FunctionCallsSchema = Schema.Struct({  totals: FunctionTotalsSchema,  latency: ControllerLatencySchema,  by_function: Schema.mutable(Schema.Array(FunctionUsageSchema)),  recent_errors: Schema.mutable(Schema.Array(FunctionErrorSchema)),}); export const ControllerUsageStatsSchema = Schema.Struct({  totals: ControllerTotalsSchema,  latency: ControllerLatencySchema,  recent_activity: ControllerRecentActivitySchema,  by_path: Schema.mutable(Schema.Array(ControllerPathSchema)),  by_status: Schema.mutable(Schema.Array(ControllerStatusSchema)),  recent_errors: Schema.mutable(Schema.Array(ControllerErrorSchema)),  function_calls: Schema.optionalKey(FunctionCallsSchema),}); const UsageTotalsSchema = Schema.Struct({  total_tokens: Schema.Number,  prompt_tokens: Schema.Number,  completion_tokens: Schema.Number,  total_requests: Schema.Number,  successful_requests: Schema.Number,  failed_requests: Schema.Number,  success_rate: Schema.Number,  unique_sessions: Schema.Number,  unique_users: Schema.Number,}); const UsageLatencySchema = Schema.Struct({  avg_ms: Schema.NullOr(Schema.Number),  p50_ms: Schema.NullOr(Schema.Number),  p95_ms: Schema.NullOr(Schema.Number),  p99_ms: Schema.NullOr(Schema.Number),  min_ms: Schema.NullOr(Schema.Number),  max_ms: Schema.NullOr(Schema.Number),}); const UsageTtftSchema = Schema.Struct({  avg_ms: Schema.NullOr(Schema.Number),  p50_ms: Schema.NullOr(Schema.Number),  p95_ms: Schema.NullOr(Schema.Number),  p99_ms: Schema.NullOr(Schema.Number),}); const TokensPerRequestSchema = Schema.Struct({  avg: Schema.Number,  avg_prompt: Schema.Number,  avg_completion: Schema.Number,  max: Schema.Number,  p50: Schema.Number,  p95: Schema.Number,}); const CacheSchema = Schema.Struct({  hits: Schema.Number,  misses: Schema.Number,  hit_tokens: Schema.Number,  miss_tokens: Schema.Number,  hit_rate: Schema.Number,}); const WeekSchema = Schema.Struct({  requests: Schema.Number,  tokens: Schema.Number,  successful: Schema.Number,}); const WeekOverWeekSchema = Schema.Struct({  this_week: WeekSchema,  last_week: WeekSchema,  change_pct: Schema.Struct({    requests: Schema.NullOr(Schema.Number),    tokens: Schema.NullOr(Schema.Number),  }),}); const RecentActivitySchema = Schema.Struct({  last_hour_requests: Schema.Number,  last_24h_requests: Schema.Number,  prev_24h_requests: Schema.Number,  last_24h_tokens: Schema.Number,  change_24h_pct: Schema.NullOr(Schema.Number),}); const PeakDaySchema = Schema.Struct({  date: Schema.String,  requests: Schema.Number,  tokens: Schema.Number,}); const PeakHourSchema = Schema.Struct({  hour: Schema.Number,  requests: Schema.Number,}); const ModelUsageSchema = Schema.Struct({  model: Schema.String,  requests: Schema.Number,  successful: Schema.Number,  success_rate: Schema.Number,  total_tokens: Schema.Number,  prompt_tokens: Schema.Number,  completion_tokens: Schema.Number,  avg_tokens: Schema.Number,  avg_latency_ms: Schema.NullOr(Schema.Number),  p50_latency_ms: Schema.NullOr(Schema.Number),  avg_ttft_ms: Schema.NullOr(Schema.Number),  tokens_per_sec: Schema.NullOr(Schema.Number),  prefill_tps: Schema.NullOr(Schema.Number),  generation_tps: Schema.NullOr(Schema.Number),}); const DailyUsageSchema = Schema.Struct({  date: Schema.String,  requests: Schema.Number,  successful: Schema.Number,  success_rate: Schema.Number,  total_tokens: Schema.Number,  prompt_tokens: Schema.Number,  completion_tokens: Schema.Number,  avg_latency_ms: Schema.Number,}); const DailyModelUsageSchema = Schema.Struct({  date: Schema.String,  model: Schema.String,  requests: Schema.Number,  successful: Schema.Number,  success_rate: Schema.Number,  total_tokens: Schema.Number,  prompt_tokens: Schema.Number,  completion_tokens: Schema.Number,}); const HourlyUsageSchema = Schema.Struct({  hour: Schema.Number,  requests: Schema.Number,  successful: Schema.Number,  tokens: Schema.Number,}); export const UsageStatsSchema = Schema.Struct({  totals: UsageTotalsSchema,  latency: UsageLatencySchema,  ttft: UsageTtftSchema,  tokens_per_request: TokensPerRequestSchema,  cache: CacheSchema,  week_over_week: WeekOverWeekSchema,  recent_activity: RecentActivitySchema,  peak_days: Schema.mutable(Schema.Array(PeakDaySchema)),  peak_hours: Schema.mutable(Schema.Array(PeakHourSchema)),  by_model: Schema.mutable(Schema.Array(ModelUsageSchema)),  daily: Schema.mutable(Schema.Array(DailyUsageSchema)),  daily_by_model: Schema.optionalKey(Schema.mutable(Schema.Array(DailyModelUsageSchema))),  hourly_pattern: Schema.mutable(Schema.Array(HourlyUsageSchema)),  controller: Schema.optionalKey(ControllerUsageStatsSchema),}); const isUsageStats = Schema.is(UsageStatsSchema); export const validateUsageStats = (value: unknown): typeof UsageStatsSchema.Type => {  if (!isUsageStats(value)) throw new TypeError("Invalid normalized usage projection");  return value;};