Exercices Projets guidés Compter les tokens et estimer les couts
🎉

Bravo!

Intermédiaire 🧠 Fondamentaux 20 XP 0 personnes ont réussi

Compter les tokens et estimer les couts

Tu as un chatbot qui marche, mais combien ca coute ? En production, c'est LA question que ton manager va te poser. "On a 500 employes qui posent 10 questions par jour, ca va nous couter combien par mois ?" Si tu ne sais pas repondre, ton projet ne sera pas valide.

Les LLM facturent au token. Un token, c'est grosso modo un bout de mot. "Bonjour" c'est 1 ou 2 tokens. "anticonstitutionnellement" c'est 5 ou 6 tokens. En francais, compte environ 1 token pour 3-4 caracteres (c'est moins efficace que l'anglais).

La librairie tiktoken te donne le compte exact. Installe-la :

pip install tiktoken

Voici comment ca marche :

import tiktoken

encodeur = tiktoken.encoding_for_model("gpt-4o-mini")
tokens = encodeur.encode("Bonjour le monde")
print(len(tokens)) # 3 ou 4 selon le modele

Les prix actuels de GPT-4o-mini (mars 2024) sont environ :
Input : 0.15 dollar pour 1 million de tokens
Output : 0.60 dollar pour 1 million de tokens

Ecris trois fonctions :

compter_tokens(texte, model="gpt-4o-mini") : renvoie le nombre de tokens dans un texte. Pour que les tests marchent dans le sandbox (sans tiktoken), si tiktoken n'est pas disponible, utilise l'approximation len(texte) // 4.

compter_tokens_conversation(messages, model="gpt-4o-mini") : prend une liste de messages au format OpenAI et renvoie le nombre total de tokens de tous les contenus. Ajoute 4 tokens par message pour les metadonnees (role, delimiteurs). C'est l'approximation officielle d'OpenAI.

estimer_cout(nb_tokens_input, nb_tokens_output, model="gpt-4o-mini") : renvoie le cout en dollars. Utilise un dictionnaire de prix par modele. Pour gpt-4o-mini : input=0.15/1M, output=0.60/1M. Pour gpt-4o : input=2.50/1M, output=10.00/1M.

Exemple :

compter_tokens("Bonjour le monde") # environ 4 (approximation)

messages = [{"role": "system", "content": "Tu es un assistant."},
{"role": "user", "content": "Bonjour"}]
compter_tokens_conversation(messages) # tokens des contenus + 4 par message

estimer_cout(1000, 500, model="gpt-4o-mini")
renvoie 0.00045 (1000*0.15/1M + 500*0.60/1M)

Tests (4/5)

Approximation de tokens
# Teste l'approximation (sans tiktoken dans le sandbox)
r = compter_tokens("Bonjour le monde entier")
assert isinstance(r, int), f"La fonction doit retourner un entier, pas {type(r)}"
assert r > 0, "Le nombre de tokens doit etre positif"
Tokens d'une conversation
messages = [
    {"role": "system", "content": "Tu es un assistant."},
    {"role": "user", "content": "Bonjour"}
]
r = compter_tokens_conversation(messages)
assert isinstance(r, int)
assert r > 0
# Au moins 8 tokens de metadonnees (4 par message) + tokens du contenu
assert r >= 8, "Il doit y avoir au moins 4 tokens de metadonnees par message"
Estimation de cout gpt-4o-mini
r = estimer_cout(1_000_000, 1_000_000, model="gpt-4o-mini")
expected = 0.15 + 0.60
assert abs(r - expected) < 0.001, f"Pour 1M tokens in/out sur gpt-4o-mini, attendu {expected}, obtenu {r}"
Estimation de cout gpt-4o
r = estimer_cout(1000, 500, model="gpt-4o")
expected = 1000 * 2.50 / 1_000_000 + 500 * 10.00 / 1_000_000
assert abs(r - expected) < 0.0001, f"Attendu {expected}, obtenu {r}"

+ 0 tests cachés

Indices (3 disponibles)

solution.py