localhost
.______ ______ __ __ __ __ ______ __ __ /__ _ / __ / / / / "-./ / __ / "-. /_/ / / _"-. -./ / -. _ _____ _ _ _ _ _____ _\"_ /_/ /_____/ /_//_/ /_/ /_/ /_____/ /_/ /_/ Utilitário CLI para monitorar o uso do token da API OpenAI
tokmon
?? - CLI para monitorar o uso da API OpenAI tokmon
( Tok en Mon itor) permite acompanhar o uso do token da API OpenAI do seu programa.
Você pode usar tokmon
da mesma forma que usaria o utilitário time
, mas em vez do tempo de execução, você obtém estatísticas de uso e custo do OpenAI.
pip install tokmon
Nota : tokmon funciona para modelos
gpt-*
(gpt-3.5-turbo
,gpt-4
, etc.). Se você precisar de suporte para outros modelos (por exemplo,davinci
), consulte 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
Depois que seu programa terminar de ser executado (ou você pressioná-lo ctrl^C
), tokmon
imprimirá um resumo semelhante ao acima. tokmon
também gera um relatório detalhado e o salva como um arquivo JSON.
Você pode usar o sinalizador --beam <url>
para transmitir dados de uso de token para um servidor. Consulte tokmon --beam para obter mais informações.
# 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
também suporta isso:tokmon
simultaneamente. Cada invocação gerará um relatório de uso separado.--json_out /your/path/report.json
para obter um detalhamento detalhado + histórico de conversas no formato JSON. tokmon
com seu aplicativo ou scriptAviso Esta é uma ferramenta de depuração. Não se destina a ser usado em qualquer ambiente consequencial. Use seu melhor julgamento!
Anexe tokmon
à invocação normal do programa, assim:
$ tokmon /path/to/your/ < your program > [arg1] [arg2] ...
Execute e use seu programa como faria normalmente (com argumentos e tudo). O uso interativo também é suportado.
Basta adicionar tokmon
ao início da sua invocação regular
$ tokmon python /path/to/your/script.py
Isso funcionará para scripts e programas de longa execução, como servidores Django/Flask/FastAPI.
Para roteiros:
$ tokmon node /path/to/your/script.js
npm run
Edite a entrada "scripts" do seu package.json
para incluir 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
usa a biblioteca mitmproxy para interceptar solicitações e respostas HTTP entre seu programa e a API OpenAI. Em seguida, ele processa os dados de solicitação e resposta para calcular o uso e o custo do token com base em tokmon/openai-pricing.json.
tokmon
funciona para programas empython
/node
(usando clientes da OpenAI) oucurl
(executado diretamente, e não em um script bash). Consulte as instruções do Golang para obter instruções sobre como usartokmon
com programas Golang.
se você instalar manualmente o certificado CA do
mitmproxy
, ele deverá funcionar para todos os executáveis (nota: não testei isso).
Na maioria dos casos, tokmon
depende do campo 'usage'
nas respostas da API da OpenAI para contagens de tokens. Para solicitações de streaming, entretanto, tokmon
usa a biblioteca tiktoken da OpenAI diretamente para contar os tokens. No momento da escrita, a API da OpenAI não retorna dados de uso para solicitações de streaming (referência).
Os dados de preços foram extraídos do site da OpenAI com a ajuda do ChatGPT.
tokmon
está usando tokmon/openai-pricing.json de seu pacote.
{
"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 }
}
Você pode substituir o preço padrão com: tokmon --pricing /path/to/your/custom-openai-pricing.json ...
Este JSON de preços está incompleto (falta DALL-E, etc.), pode estar incorreto e pode ficar desatualizado.
Para obter melhores resultados, certifique-se de verificar se você tem os preços mais recentes.
Solução alternativa hacky para programas Golang. Adicione isto ao seu programa:
// 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
armazena eventos enviados pelo servidor (SSE) até que o bloco data: [DONE]
seja recebido. Se o programa monitorado aproveitar o streaming de eventos, seu comportamento será modificado.gpt-3.5-turbo
, gpt-4
e variantes)Se você quiser contribuir com o projeto, siga estas etapas:
tokmon
vem sem qualquer garantia ou garantia de qualquer natureza.tokmon
foi testado apenas no macOS. Pode não funcionar em outras plataformas.openai-pricing.json
podem ficar desatualizados.