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とかで公開するなり、ローカル内でこっそり使用するなり、いろいろやってみてください。