fix(billing): surface quota saturation events for admin auditing

Thread int32 saturation clamps from tiered settlement and video task
recompute into the consume/task logs under admin_info, so oversized or
malformed billing inputs stay auditable. Clamp negative audio duration
before token conversion and gate the saturation UI markers on admin.
This commit is contained in:
CaIon
2026-07-07 12:20:07 +08:00
parent c9943d37ad
commit bae799ccb1
32 changed files with 710 additions and 104 deletions
+9 -1
View File
@@ -807,6 +807,7 @@
"Choose the default charts, range, and time granularity for model analytics.": "Choisissez les graphiques, la plage et la granularité temporelle par défaut pour l'analyse des modèles.",
"Choose where to fetch upstream metadata.": "Choisissez où récupérer les métadonnées amont.",
"Choose which charts are selected by default when opening model analytics.": "Choisissez les graphiques sélectionnés par défaut à l'ouverture de l'analyse des modèles.",
"Clamped to": "Limité à",
"Classic (Legacy Frontend)": "Classique (Ancien frontend)",
"Claude": "Claude",
"Claude CLI Header Passthrough": "Passthrough en-tête Claude CLI",
@@ -2284,6 +2285,7 @@
"Internal Notes": "Notes internes",
"Internal notes (not shown to users)": "Notes internes (non visibles par les utilisateurs)",
"Internal Server Error!": "Erreur interne du serveur !",
"Invalid (NaN)": "Invalide (NaN)",
"Invalid chat link. Please contact the administrator.": "Lien de chat invalide. Veuillez contacter l'administrateur.",
"Invalid chat link. Please contact your administrator.": "Lien de chat invalide. Veuillez contacter votre administrateur.",
"Invalid code": "Code invalide",
@@ -2364,6 +2366,7 @@
"Key Summary": "Résumé de clé",
"Key Update Mode": "Mode de mise à jour de la clé",
"Keys, OAuth credentials, and multi-key update behavior.": "Clés, identifiants OAuth et comportement de mise à jour multi-clés.",
"Kind": "Type",
"Kling": "Kling",
"Knowledge Base ID *": "ID de la base de connaissances *",
"Knowledge cutoff": "Date de coupure des connaissances",
@@ -3089,6 +3092,7 @@
"Order Payment Method": "Moyen de paiement (commande)",
"org-...": "org-...",
"Original Model": "Modèle Original",
"Original value": "Valeur d'origine",
"Other": "Autre",
"Other channels": "Autres canaux",
"Other groups": "Autres groupes",
@@ -3106,6 +3110,7 @@
"Output Tokens": "Tokens de sortie",
"Overage limited": "Dépassement limité",
"overall": "global",
"Overflow": "Débordement",
"Overflow items": "Éléments excédentaires",
"Overnight range": "Plage nocturne",
"override": "remplacer",
@@ -3492,6 +3497,7 @@
"Quota": "Quota",
"Quota ({{currency}})": "Quota ({{currency}})",
"Quota adjusted successfully": "Quota ajusté avec succès",
"Quota clamped": "Quota plafonné",
"Quota consumed before charging users": "Quota consommé avant de facturer les utilisateurs",
"Quota Distribution": "Distribution des quotas",
"Quota given to invited users": "Quota attribué aux utilisateurs invités",
@@ -3501,6 +3507,7 @@
"Quota Per Unit": "Quota par unité",
"Quota reminder (tokens)": "Rappel de quota (jetons)",
"Quota Reset": "Réinitialisation du quota",
"Quota saturation protection triggered": "Protection contre la saturation du quota déclenchée",
"Quota Settings": "Paramètres de quota",
"Quota Types": "Types de quotas",
"Quota Warning Threshold": "Seuil d'avertissement de quota",
@@ -4411,6 +4418,7 @@
"This FAQ entry will be removed from the list.": "Cette entrée de FAQ sera retirée de la liste.",
"This feature is experimental. Configuration format and behavior may change.": "Cette fonctionnalité est expérimentale. Le format de configuration et le comportement peuvent changer.",
"This feature requires server-side WeChat configuration": "Cette fonctionnalité nécessite une configuration WeChat côté serveur",
"This historical record predates audit-info tracking and cannot be backfilled. The current instance already records server IP, callback IP, payment method, and system version for new top-ups going forward.": "Cet enregistrement historique date d'avant le suivi des informations d'audit et ne peut pas être complété rétroactivement. La version actuelle enregistre déjà l'IP du serveur, l'IP de rappel, le mode de paiement et la version du système pour les nouveaux paiements à venir.",
"This identifier is sent to the payment backend when creating an order. Use alipay for Alipay, wxpay for WeChat Pay, stripe for Stripe. Custom values must be supported by your payment provider.": "Cet identifiant est envoyé au backend de paiement lors de la création dune commande. Utilisez alipay pour Alipay, wxpay pour WeChat Pay, stripe pour Stripe. Les valeurs personnalisées doivent être prises en charge par votre fournisseur de paiement.",
"This instance is using an automatic hostname. Set NODE_NAME to a stable unique value for multi-instance management.": "Cette instance utilise un nom dhôte automatique. Définissez NODE_NAME sur une valeur stable et unique pour la gestion multi-instance.",
"This may cause cache failures.": "Cela peut provoquer des échecs de cache.",
@@ -4423,7 +4431,6 @@
"This page has not been created yet.": "Cette page n'a pas encore été créée.",
"This plan does not allow balance redemption": "Ce forfait ne permet pas le paiement avec le solde",
"This project must be used in compliance with the": "Ce projet doit être utilisé conformément aux",
"This historical record predates audit-info tracking and cannot be backfilled. The current instance already records server IP, callback IP, payment method, and system version for new top-ups going forward.": "Cet enregistrement historique date d'avant le suivi des informations d'audit et ne peut pas être complété rétroactivement. La version actuelle enregistre déjà l'IP du serveur, l'IP de rappel, le mode de paiement et la version du système pour les nouveaux paiements à venir.",
"This removes {{count}} failed models from this channel. This action cannot be undone.": "Cela supprime {{count}} modèles en échec de ce canal. Cette action est irréversible.",
"This site currently has {{count}} models enabled": "Ce site compte actuellement {{count}} modèles activés",
"This tier catches any request that did not match earlier tiers.": "Ce palier récupère toute requête qui ne correspond à aucun palier précédent.",
@@ -4639,6 +4646,7 @@
"Unbind": "Dissocier",
"Unbind failed": "Échec de la dissociation",
"Unbound {{provider}}": "{{provider}} dissocié",
"Underflow": "Sous-dépassement",
"Underground": "Underground",
"Understand how user groups, token groups, ratios, and special rules work together.": "Comprendre comment les groupes utilisateur, groupes de jetons, ratios et règles spéciales fonctionnent ensemble.",
"Understand image inputs alongside text": "Comprendre des entrées image en complément du texte",