localhost
から実行されます。______ ______ __ __ __ ______ __ __ /__ _ / __ / / / / "-./ / __ / "-. /_/ / / _"-. -./ / -. _ _____ _ _ _ _ _____ _\"_ /_/ /_____/ /_//_/ /_/ /_/ /_____/ /_/ /_/ OpenAI API トークンの使用状況を監視する CLI ユーティリティ
tokmon
?? - OpenAI API の使用状況を監視する CLI tokmon
( Tok en Monitor ) を使用すると、プログラムの OpenAI API トークンの使用状況を追跡できます。
tokmon
はtime
ユーティリティを使用するのと同じように使用できますが、実行時間の代わりに OpenAI の使用量とコストの統計が取得されます。
pip install tokmon
注: tokmon は
gpt-*
モデル (gpt-3.5-turbo
、gpt-4
など) で動作します。他のモデル (例:davinci
) のサポートが必要な場合は、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
プログラムの実行が終了すると (またはctrl^C
て終了すると)、 tokmon
上記のような概要を出力します。 tokmon
詳細なレポートも生成し、JSON ファイルとして保存します。
--beam <url>
フラグを使用して、トークン使用状況データをサーバーにストリーミングできます。詳細については、「tokmon --beam」を参照してください。
# 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
もこれをサポートしています。tokmon
の複数のインスタンスを同時に実行できます。呼び出しごとに個別の使用状況レポートが生成されます。--json_out /your/path/report.json
を渡すと、詳細な内訳と会話履歴が JSON 形式で取得されます。 tokmon
使用する警告これはデバッグツールです。結果的な設定で使用することは意図されていません。最善の判断を行ってください。
次のように、通常のプログラム呼び出しの前にtokmon
追加します。
$ tokmon /path/to/your/ < your program > [arg1] [arg2] ...
通常と同じようにプログラムを実行して使用します (引数など)。インタラクティブな使用もサポートされています。
通常の呼び出しの先頭にtokmon
追加するだけです
$ tokmon python /path/to/your/script.py
これは、スクリプトや、Django / Flask / FastAPI サーバーなどの長時間実行されるプログラムで機能します。
スクリプトの場合:
$ tokmon node /path/to/your/script.js
npm run
package.json
の「scripts」エントリを編集して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
、mitmproxy ライブラリを使用して、プログラムと OpenAI API の間の HTTP リクエストとレスポンスをインターセプトします。次に、リクエストとレスポンスのデータを処理して、tokmon/openai-pricing.json に基づいてトークンの使用量とコストを計算します。
tokmon
、python
/node
(OpenAI のクライアントを使用) またはcurl
(bash スクリプトではなく直接実行) のプログラムで機能します。 Golang プログラムでtokmon
使用する方法については、Golang の説明を参照してください。
mitmproxy
の CA 証明書を手動でインストールすると、すべての実行可能ファイルで機能するはずです (注: これはテストしていません)。
ほとんどの場合、 tokmon
トークン数について OpenAI の API 応答の'usage'
フィールドに依存します。ただし、ストリーミング リクエストの場合、 tokmon
OpenAI の tiktoken ライブラリを直接使用してトークンをカウントします。執筆時点では、OpenAI の API はストリーミング リクエストの使用状況データを返しません (参照)。
価格データは、ChatGPT を利用して OpenAI の Web サイトから抽出されました。
tokmon
、パッケージの tokmon/openai-pricing.json を使用しています。
{
"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 }
}
tokmon --pricing /path/to/your/custom-openai-pricing.json ...
を使用してデフォルトの価格設定をオーバーライドできます。
この価格設定 JSON は不完全 (DALL-E が欠落しているなど) で、間違っている可能性があり、古くなっている可能性があります。
最良の結果を得るために、最新の価格設定があることを必ず確認してください。
Golang プログラムの巧妙な回避策。これをプログラムに追加します。
// 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
、 data: [DONE]
チャンクが受信されるまでサーバー送信イベント (SSE) をバッファーします。監視対象プログラムがイベント ストリーミングを利用している場合、その動作は変更されます。gpt-3.5-turbo
、 gpt-4
およびバリアント)プロジェクトに貢献したい場合は、次の手順に従ってください。
tokmon
いかなる保証も保証もありません。tokmon
macOS でのみテストされました。他のプラットフォームでは動作しない可能性があります。openai-pricing.json
の価格データは古くなっている可能性があります。