from datetime import datetime from typing import Literal from pydantic import BaseModel, Field class UsageLimit(BaseModel): id: str name: str used_percent: float | None = Field(default=None, ge=0, le=100) remaining_percent: float | None = Field(default=None, ge=0, le=100) used: float | None = Field(default=None, ge=0) remaining: float | None = Field(default=None, ge=0) limit: float | None = Field(default=None, ge=0) unit: str | None = None reset_at: datetime | None = None window: str | None = None updated_at: datetime class ProviderUsage(BaseModel): provider: Literal['codex', 'devin'] status: Literal['ok', 'error', 'disabled'] limits: list[UsageLimit] = Field(default_factory=list) error: str | None = None last_successful_update: datetime | None = None source: str | None = None class UsageResponse(BaseModel): codex: ProviderUsage devin: ProviderUsage server_time: datetime demo_mode: bool refresh_interval: int