localhost
.______ ______ __ __ __ __ ______ __ __ /__ _ / __ / / / / "-./ / __ / "-. /_/ / / _"-. -./ / -. _ _____ _ _ _ _ ______ _\"_ /_/ /_____/ /_//_/ /_/ /_/ /_____/ /_/ /_/ Utilitaire CLI pour surveiller l'utilisation de votre jeton API OpenAI
tokmon
?? - CLI pour surveiller l'utilisation de l'API OpenAI tokmon
( Tok et Mon itor) vous permet de suivre l'utilisation des jetons de l'API OpenAI de votre programme.
Vous pouvez utiliser tokmon
comme vous utiliseriez l'utilitaire time
, mais au lieu du temps d'exécution, vous obtenez des statistiques d'utilisation et de coût d'OpenAI.
pip install tokmon
Remarque : tokmon fonctionne pour les modèles
gpt-*
(gpt-3.5-turbo
,gpt-4
, etc.). Si vous avez besoin de support pour d'autres modèles (par exempledavinci
), consultez tokmon#6.
$ tokmon /path/to/your/ < your program > [arg1] [arg2] ...
tokmon cost report :
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
Monitored invocation : python3 . / tests / python_example . py --prompt say 'hello, tokmon!'
Models : [ 'gpt-3.5-turbo-0301' ]
Total Usage : { 'total_prompt_tokens' : 26 , 'total_completion_tokens' : 12 , 'total_tokens' : 38}
Pricing : { 'gpt-3.5-turbo-0301' : { 'prompt_cost' : 0.002 , 'completion_cost' : 0.002 , 'per_tokens' : 1000}}
Total Cost : $0.000076
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
Writing cost summary to JSON file : . / tokmon_usage_summary_1682039505 . json
Une fois l'exécution de votre programme terminée (ou après avoir ctrl^C
), tokmon
imprimera un résumé qui ressemble à celui ci-dessus. tokmon
génère également un rapport détaillé et l'enregistre sous forme de fichier JSON.
Vous pouvez utiliser l'indicateur --beam <url>
pour diffuser les données d'utilisation du jeton vers un serveur. Voir tokmon --beam pour plus d'informations.
# Install tokmon
pip install tokmon
# Clone this repo and `cd` into it
git clone https://github.com/yagil/tokmon.git && cd tokmon/
# export your OpenAI API key. This will be used in the test program (source in ./tests/python_example.py)
export OPENAI_API_KEY= " YOUR_OPENAI_API_KEY "
# Run tokmon (save the JSON summary to the current folder)
# The test uses the openai python package. Install it if you don't have it: `pip install openai`
tokmon --json_out=. python3 ./tests/python_example.py --prompt " say 'hello, tokmon!' "
tokmon
prend également en charge ceci :tokmon
simultanément. Chaque appel générera un rapport d'utilisation distinct.--json_out /your/path/report.json
pour obtenir une répartition détaillée + l'historique des conversations au format JSON. tokmon
avec votre application ou votre scriptAvertissement Ceci est un outil de débogage. Il n’est pas destiné à être utilisé dans un contexte conséquent. Utilisez votre meilleur jugement !
Ajoutez tokmon
à votre invocation normale de programme comme ceci :
$ tokmon /path/to/your/ < your program > [arg1] [arg2] ...
Exécutez et utilisez votre programme comme vous le feriez normalement (arguments et tout). L'utilisation interactive est également prise en charge.
Ajoutez simplement tokmon
au début de votre invocation régulière
$ tokmon python /path/to/your/script.py
Cela fonctionnera pour les scripts et les programmes de longue durée comme les serveurs Django / Flask / FastAPI.
Pour les scripts :
$ tokmon node /path/to/your/script.js
npm run
Modifiez l'entrée "scripts" de votre package.json
pour inclure tokmon
.
{
"scripts" : {
"dev" : "tokmon next dev" ,
...
}
}
{
"total_cost" : 0.0019199999999999998 ,
"total_usage" : {
"total_prompt_tokens" : 18 ,
"total_completion_tokens" : 23 ,
"total_tokens" : 41
},
"pricing_data" : " {'gpt-4-0314': {'prompt_cost': 0.03, 'completion_cost': 0.06, 'per_tokens': 1000}} " ,
"models" : [
" gpt-4-0314 "
],
"raw_data" : [
{
"model" : " gpt-4-0314 " ,
"usage" : {
"prompt_tokens" : 18 ,
"completion_tokens" : 23 ,
"total_tokens" : 41
},
"cost" : 0.0019199999999999998 ,
"messages" : [
{
"role" : " system " ,
"content" : " You're a helpful assistant. "
},
{
"role" : " user " ,
"content" : " hello "
},
{
"role" : " assistant " ,
"content" : " Hello! How can I help you today? If you have any questions or need assistance, feel free to ask. "
}
]
}
]
}
tokmon
utilise la bibliothèque mitmproxy pour intercepter les requêtes et réponses HTTP entre votre programme et l'API OpenAI. Il traite ensuite les données de demande et de réponse pour calculer l'utilisation et le coût du jeton en fonction de tokmon/openai-pricing.json.
tokmon
fonctionne pour les programmes enpython
/node
(en utilisant les clients d'OpenAI), oucurl
(exécutés directement, et non dans un script bash). Voir les instructions de Golang pour savoir comment utilisertokmon
avec les programmes Golang.
si vous installez manuellement le certificat CA de
mitmproxy
, cela devrait fonctionner pour tous les exécutables (remarque : je n'ai pas testé cela.)
Dans la plupart des cas, tokmon
s'appuie sur le champ 'usage'
dans les réponses de l'API d'OpenAI pour le nombre de jetons. Cependant, pour les demandes de streaming, tokmon
utilise directement la bibliothèque tiktoken d'OpenAI pour compter les jetons. Au moment de la rédaction, l'API d'OpenAI ne renvoie pas de données d'utilisation pour les demandes de streaming (référence.)
Les données de tarification ont été extraites du site Web d'OpenAI à l'aide de ChatGPT.
tokmon
utilise tokmon/openai-pricing.json à partir de son package.
{
"last_updated" : " 2023-04-12 " ,
"data_sources" : [
" https://openai.com/pricing " ,
" https://platform.openai.com/docs/models/model-endpoint-compatibility "
],
"gpt-4" : { "prompt_cost" : 0.03 , "completion_cost" : 0.06 , "per_tokens" : 1000 },
"gpt-4-0314" : { "prompt_cost" : 0.03 , "completion_cost" : 0.06 , "per_tokens" : 1000 },
"gpt-4-32k" : { "prompt_cost" : 0.06 , "completion_cost" : 0.12 , "per_tokens" : 1000 },
"gpt-4-32k-0314" : { "prompt_cost" : 0.06 , "completion_cost" : 0.12 , "per_tokens" : 1000 },
"gpt-3.5-turbo" : { "prompt_cost" : 0.002 , "completion_cost" : 0.002 , "per_tokens" : 1000 },
"gpt-3.5-turbo-0301" : { "prompt_cost" : 0.002 , "completion_cost" : 0.002 , "per_tokens" : 1000 },
"text-davinci-003" : { "cost" : 0.02 , "per_tokens" : 1000 },
"text-curie-001" : { "cost" : 0.002 , "per_tokens" : 1000 },
"text-babbage-001" : { "cost" : 0.0005 , "per_tokens" : 1000 },
"text-ada-001" : { "cost" : 0.0004 , "per_tokens" : 1000 },
"text-embedding-ada-002" : { "cost" : 0.0004 , "per_tokens" : 1000 }
}
Vous pouvez remplacer la tarification par défaut avec : tokmon --pricing /path/to/your/custom-openai-pricing.json ...
Ce JSON de tarification est incomplet (DALL-E manquant, etc.), il peut être incorrect et il peut devenir obsolète.
Pour de meilleurs résultats, assurez-vous de vérifier que vous disposez des derniers tarifs.
Solution de contournement hacky pour les programmes Golang. Ajoutez ceci à votre programme :
// Import these packages
import (
"os"
"crypto/tls"
"crypto/x509"
"io/ioutil"
"net/http"
)
// Place this code somewhere in your go program *before* you make any calls to OpenAI's API.
certFile := os . Getenv ( "TOKMON_SSL_CERT_FILE" ) // This env variable will be set by tokmon
caCert , err := ioutil . ReadFile ( certFile )
if err == nil {
caCertPool , _ := x509 . SystemCertPool ()
caCertPool . AppendCertsFromPEM ( caCert )
http . DefaultTransport .( * http. Transport ). TLSClientConfig = & tls. Config {
RootCAs : caCertPool ,
}
}
tokmon
met en mémoire tampon les événements envoyés par le serveur (SSE) jusqu'à ce que le bloc data: [DONE]
soit reçu. Si le programme surveillé exploite le streaming d’événements, son comportement sera modifié.gpt-3.5-turbo
, gpt-4
et variantes)Si vous souhaitez contribuer au projet, veuillez suivre ces étapes :
tokmon
est livré sans aucune garantie ou garantie d'aucune sorte.tokmon
a été testé sur macOS uniquement. Cela pourrait ne pas fonctionner sur d'autres plateformes.openai-pricing.json
peuvent être obsolètes.