Affichage des crédits extra_usage + parser validé contre réponse réelle
This commit is contained in:
@@ -64,6 +64,22 @@ class Window:
|
||||
return f"{m}min"
|
||||
|
||||
|
||||
@dataclass
|
||||
class ExtraUsage:
|
||||
"""Crédits « extra usage » (pay-as-you-go au-delà de l'abonnement)."""
|
||||
|
||||
used: float
|
||||
limit: float | None
|
||||
currency: str = "EUR"
|
||||
|
||||
@property
|
||||
def label(self) -> str:
|
||||
sym = "€" if self.currency == "EUR" else self.currency
|
||||
if self.limit:
|
||||
return f"Extra : {self.used:.0f}{sym} / {self.limit:.0f}{sym}"
|
||||
return f"Extra : {self.used:.0f}{sym}"
|
||||
|
||||
|
||||
@dataclass
|
||||
class ClaudeUsage:
|
||||
ok: bool
|
||||
@@ -72,6 +88,7 @@ class ClaudeUsage:
|
||||
seven_day: Window | None = None
|
||||
seven_day_opus: Window | None = None
|
||||
seven_day_sonnet: Window | None = None
|
||||
extra: ExtraUsage | None = None
|
||||
burn_rate: float | None = None # tokens/min (ccusage, optionnel)
|
||||
|
||||
|
||||
@@ -208,11 +225,22 @@ async def fetch_usage() -> ClaudeUsage:
|
||||
|
||||
data = resp.json()
|
||||
burn = _burn_rate_from_ccusage() if config.ccusage_enabled else None
|
||||
|
||||
extra = None
|
||||
eu = data.get("extra_usage") or {}
|
||||
if eu.get("is_enabled") and eu.get("used_credits"):
|
||||
extra = ExtraUsage(
|
||||
used=float(eu.get("used_credits", 0)),
|
||||
limit=float(eu["monthly_limit"]) if eu.get("monthly_limit") else None,
|
||||
currency=eu.get("currency", "EUR"),
|
||||
)
|
||||
|
||||
return ClaudeUsage(
|
||||
ok=True,
|
||||
five_hour=_parse_window(data.get("five_hour")),
|
||||
seven_day=_parse_window(data.get("seven_day")),
|
||||
seven_day_opus=_parse_window(data.get("seven_day_opus")),
|
||||
seven_day_sonnet=_parse_window(data.get("seven_day_sonnet")),
|
||||
extra=extra,
|
||||
burn_rate=burn,
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user