localhost
.______ ______ __ __ __ __ ______ __ __ /__ _ / __ / / / / "-./ / __ / "-. /_/ / / _"-. -./ / -. _ _____ _ _ _ _ _____ _\"_ /_/ /_____/ /_//_/ /_/ /_/ /_____/ /_/ /_/ Utilidad CLI para monitorear el uso del token API OpenAI
tokmon
?? - CLI para monitorear el uso de la API OpenAI tokmon
( Tok en Mon itor) le permite realizar un seguimiento del uso del token de la API OpenAI de su programa.
Puede usar tokmon
tal como usaría la utilidad time
, pero en lugar del tiempo de ejecución, obtiene estadísticas de costos y uso de OpenAI.
pip install tokmon
Nota : tokmon funciona para modelos
gpt-*
(gpt-3.5-turbo
,gpt-4
, etc.). Si necesita soporte para otros modelos (por ejemplo,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
Después de que su programa termine de ejecutarse (o ctrl^C
), tokmon
imprimirá un resumen similar al anterior. tokmon
también genera un informe detallado y lo guarda como un archivo JSON.
Puede utilizar el indicador --beam <url>
para transmitir datos de uso de token a un servidor. Consulte tokmon --beam para obtener más información.
# 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
también soporta esto:tokmon
simultáneamente. Cada invocación generará un informe de uso independiente.--json_out /your/path/report.json
para obtener un desglose detallado + historial de conversaciones en formato JSON. tokmon
con su aplicación o scriptAdvertencia Esta es una herramienta de depuración. No está destinado a ser utilizado en ningún entorno importante. ¡Usa tu mejor criterio!
Anteponga tokmon
a la invocación normal de su programa así:
$ tokmon /path/to/your/ < your program > [arg1] [arg2] ...
Ejecute y use su programa como lo haría normalmente (argumentos y todo). También se admite el uso interactivo.
Simplemente agregue tokmon
al comienzo de su invocación habitual.
$ tokmon python /path/to/your/script.py
Esto funcionará para scripts y programas de larga ejecución como servidores Django/Flask/FastAPI.
Para guiones:
$ tokmon node /path/to/your/script.js
npm run
Edite la entrada "scripts" de su 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
utiliza la biblioteca mitmproxy para interceptar solicitudes y respuestas HTTP entre su programa y la API de OpenAI. Luego procesa los datos de solicitud y respuesta para calcular el uso y el costo del token en función de tokmon/openai-pricing.json.
tokmon
funciona para programas enpython
/node
(usando clientes de OpenAI) ocurl
(se ejecuta directamente y no, es decir, en un script bash). Consulte las instrucciones de Golang para obtener instrucciones sobre cómo usartokmon
con programas de Golang.
Si instala manualmente el certificado CA de
mitmproxy
, debería funcionar para todos los ejecutables (nota: no lo he probado).
En la mayoría de los casos, tokmon
se basa en el campo 'usage'
en las respuestas de la API de OpenAI para el recuento de tokens. Sin embargo, para las solicitudes de transmisión, tokmon
usa la biblioteca tiktoken de OpenAI directamente para contar los tokens. Al momento de escribir, la API de OpenAI no devuelve datos de uso para solicitudes de transmisión (referencia).
Los datos de precios se extrajeron del sitio web de OpenAI con la ayuda de ChatGPT.
tokmon
está usando tokmon/openai-pricing.json de su paquete.
{
"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 }
}
Puede anular el precio predeterminado con: tokmon --pricing /path/to/your/custom-openai-pricing.json ...
Este JSON de precios está incompleto (falta DALL-E, etc.), puede ser incorrecto y puede estar desactualizado.
Para obtener mejores resultados, asegúrese de verificar que tiene los precios más recientes.
Solución alternativa hacky para los programas Golang. Añade esto a tu 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
almacena en buffer los eventos enviados por el servidor (SSE) hasta que se reciben los data: [DONE]
. Si el programa monitoreado aprovecha la transmisión de eventos, se modificará su comportamiento.gpt-3.5-turbo
, gpt-4
y variantes)Si desea contribuir al proyecto, siga estos pasos:
tokmon
viene sin garantía ni garantía alguna.tokmon
se probó únicamente en macOS. Puede que no funcione en otras plataformas.openai-pricing.json
pueden estar desactualizados.