import os import tiktoken from modules.logger import log_event # Table de tarification OpenRouter par token (à synchroniser ou mettre à jour) TARIFS_OPENROUTER = { "meta-llama/llama-3.1-8b-instruct:free": 0.0, "qwen/qwen-2.5-coder-32b-instruct:free": 0.0, "google/gemini-2.5-pro": 0.000005 } def compter_tokens(texte, modele="cl100k_base"): """Compte localement les tokens pour estimer le coût avant l'envoi.""" try: enc = tiktoken.get_encoding(modele) return len(enc.encode(texte)) except Exception as e: log_event("ERROR", "BILLING", f"Erreur comptage tokens : {e}") return 0 def estimer_et_valider_consommation(prompt, modele_id, solde_disponible_utilisateur, utilisateur_vip=False): """ Simule le coût de la requête, applique la majoration de marge (15% via / 0.85) et vérifie que l'utilisateur possède un solde suffisant. """ tokens = compter_tokens(prompt) cout_brut_api = tokens * TARIFS_OPENROUTER.get(modele_id, 0.0) if cout_brut_api <= 0.0: return True, 0.0 # Gratuit # Application de votre règle de marge commerciale (15%) prix_facture_ht = round(cout_brut_api / 0.85, 6) if utilisateur_vip: log_event("INFO", "BILLING", f"Utilisateur VIP : Pas de prélèvement de marge.") return True, 0.0 # Vérification stricte du solde if solde_disponible_utilisateur < prix_facture_ht: raise Exception(f"SOLDE_INSUFFISANT|{prix_facture_ht}|{solde_disponible_utilisateur}") return True, prix_facture_ht