Codexのレートリミットを(技術者倫理に反さない方法で)取得する
はじめに
みなさ〜〜ん!!!
技術者倫理、ちゃんと守ってますか〜〜〜?
…………。
CodexのレートリミットをアプリとかCLI以外で取得するには、たぶん以下の方法が挙げられると思います:
- OpenAIの使用量ページを開く
- Dev ToolsのNetworkを開いて、リクエストの中からレートリミットを取得しているものを探す
- リクエストヘッダのAuthorizationヘッダをコピーする
- そして、任意の場所でAPIを叩く
ダメ〜〜〜〜〜! やってることサイゼリヤCLIと変わらんやんけ!!!
というわけで、上記の方法よりも技術者倫理に配慮した方法を紹介します。
技術者倫理に配慮した方法とは?
Codex App Serverというものが存在します。
これはOpenAIが提供するCodex CLIの統合サーバで、
- VSCodeの拡張機能
- WEBエディタ
- CI/CDパイプライン
などなど、複数のクライアントからCodexのエージェント機能を利用できるようにする基盤アプリケーションです。
そして、なんとこのApp Serverは、Codexのレートリミットを取得するAPIを提供しています。 このAPIは、Codex CLIの認証情報を使用して、Codexのレートリミットを取得することができます。
Codex App Serverでレートリミットを取得してみる
Codex App Serverは通信プロトコルとしてJSON-RPC 2.0を採用しており、標準入力・Unix Socket・WebSocket(実験的) を用いて通信できます。
手順としては、
- Codex CLIがインストールされている環境下で、Codex App Serverを起動する
- イニシャライズコマンドを送信する
- レートリミットを取得するコマンドを送信する
です。やってみよう!
① Codex App Serverを起動する
$ codex app-server
で起動します。デフォルトは標準入出力でコマンドをやり取りします。
② イニシャライズコマンドを送信する
最初に、Codex App Serverにイニシャライズコマンドを必ず送信する必要があります。これをしないと、Not Initializedというエラーが返ってきます。
このようなJSONメッセージを送信します:
{
"method": "initialize",
"id": 0,
"params": {
"clientInfo": {
"name": "app_name",
"title": "アプリのタイトル",
"version": "アプリのバージョン"
}
}
}
③ レートリミットを取得するコマンドを送信する
以下のようなリクエストを送信します(IDは連番で指定してください):
{
"method": "account/rateLimits/read",
"id": 1
}
すると、以下のようなレスポンスが返ってきます:
{
"rateLimits":{
"limitId":"codex",
"limitName":null,
"primary":{
"usedPercent":15,
"windowDurationMins":300,
"resetsAt":1700000000
},
"secondary":{
"usedPercent":60,
"windowDurationMins":10080,
"resetsAt":1700000000
},
"credits":{
"hasCredits":false,
"unlimited":false,
"balance":"0"
},
"planType":"plus",
"rateLimitReachedType":null
},
"rateLimitsByLimitId":{
"codex":{
...
}
}
}
primaryとsecondaryは、Codexのレートリミットを表しています。primaryが5時間制限、secondaryが週次制限です。
WebAPIとしてレートリミットを取得できるようにする
このままだとマイコンやブラウザでレートリミットを取得することが難しいので、WebAPIとして何処からでもアクセスできるようにします。
完成したものがこちらになります。 codex-rate-limits-api
Cloudflare Tunnelとかで公開するなり、ローカル内でこっそり使用するなり、いろいろやってみてください。