Compter les tokens et estimer le coût
Avant et après l'appel
flowchart LR
T["Transcription"] --> CT["count_tokens : combien en entrée ?"]
CT --> D{"Budget ok ?"}
D -->|"oui"| G["generate_content"]
G --> U["usage_metadata : entrée, sortie, pensée"]
U --> C["coût = entrée x prix_entrée + (sortie + pensée) x prix_sortie"]
| Outil | Quand | Ce qu'il donne | Coût de l'appel |
|---|---|---|---|
client.models.count_tokens | avant | tokens d'entrée seulement | pas de génération |
response.usage_metadata | après | prompt_token_count, candidates_token_count, thoughts_token_count, total_token_count | inclus dans l'appel |
On ne peut pas connaître la sortie à l'avance : count_tokens sert à vérifier qu'un document tient dans la fenêtre de contexte et à estimer la part « entrée » du prix.
Le code
# Prix en dollars par million de tokens. Valeurs d'EXEMPLE : recopiez celles de la page
# https://ai.google.dev/gemini-api/docs/pricing pour votre modèle.
PRIX_ENTREE_1M = float(os.environ.get("PRIX_ENTREE_1M", "0.30"))
PRIX_SORTIE_1M = float(os.environ.get("PRIX_SORTIE_1M", "2.50"))
def cout(usage) -> float:
"""Coût estimé d'un appel à partir de usage_metadata (la pensée est facturée en sortie)."""
entree = usage.prompt_token_count or 0
sortie = (usage.candidates_token_count or 0) + (usage.thoughts_token_count or 0)
return (entree * PRIX_ENTREE_1M + sortie * PRIX_SORTIE_1M) / 1_000_000
def tokens(client, transcription: str) -> int:
r = avec_reessais(lambda: client.models.count_tokens(model=MODEL, contents=transcription))
return r.total_tokensLa formule, pour un appel :
Un appel affiche prompt=1000, candidates=200, thoughts=300. Avec 1 $ / million en entrée et 10 $ / million en sortie, combien coûte-t-il ?
1000 x 1 + (200 + 300) x 10 = 6000, divisé par un million : 0,006 $. Oublier la pensée donnerait 0,003 $, soit deux fois moins que la réalité.
Que renvoie count_tokens ?
count_tokens mesure l'entrée. La sortie n'existe pas encore ; on la lit après coup dans usage_metadata.
Résultat obtenu
Sur la transcription fictive reunion_exemple.txt, le 2026-10-15 (prix d'exemple) :
[mode : clé d'API | modèle : gemini-3.5-flash]
302 tokens en entrée, soit environ 0.000091 $ avant la réponse[coût estimé : 0.003344 $]Pour la même transcription, Vertex AI compte 301 tokens au lieu de 302 : les deux plateformes peuvent différer d'une unité, ce qui ne change rien à l'ordre de grandeur. Surtout, le compte rendu complet coûte environ 37 fois la part entrée (0,003344 / 0,000091) : c'est la sortie et la pensée qui pèsent.
Exercice
Votre équipe tient 40 réunions par semaine, chacune d'environ 6 000 tokens de transcription. Un compte rendu consomme, par exemple, 1 500 tokens de sortie et de pensée. Avec les prix d'exemple du code, estimez le coût hebdomadaire.
Voir la solution
Par réunion : entrée 6 000 x 0,30 = 1 800 ; sortie 1 500 x 2,50 = 3 750 ; total 5 550, divisé par un million = 0,00555 $.
Par semaine : 40 x 0,00555 ≈ 0,22 $.
Méthode à retenir : mesurer usage_metadata sur quelques vrais appels, faire la moyenne, multiplier par le volume, puis remplacer les prix d'exemple par les tarifs réels de votre modèle.
Je sais faire
- Compter les tokens d'entrée avec
count_tokens - Lire
usage_metadataet ses quatre compteurs - Calculer un coût en comptant la pensée comme de la sortie
- Ne jamais présenter un prix d'exemple comme un tarif réel