Skip to content

TokenMeter

会話がコンテキストウィンドウをどれだけ使っているか。

使いどころ:コンテキスト上限のあるモデルに対してチャット UI を作っているとき。これを見せない クライアントは最初こそ動きますが、やがて壊れます。ターンごとに履歴全体を送り直すのでリクエストは 大きくなる一方で、いずれプロバイダーが上限超過として拒むからです。このコンポーネントは、拒まれる 前にその成長を見せます。

クイックスタート

基本的な使い方

html
<r-token-meter limit="65536" used="12800"></r-token-meter>
js
const meter = document.createElement('r-token-meter');
meter.limit = 65536;
meter.used = 41200; // 次のリクエストが運ぶコンテキスト
meter.spent = 128431; // 会話全体で課金されたトークン、任意
composer.append(meter);

バーは used / limit まで満ち、三つの段階を上がっていきます:okwarn(上限の 80% から)、 overlevel はホストに反映されるので、ページもバーと同じ段階に反応できます。

css
r-token-meter[level='warn'] ~ .composer-hint {
  display: block;
}

usedspent は別の数です

  • used次のリクエスト が運ぶ量、つまり履歴であって会話全体ではありません。上限が適用され、 バーが描くのはこの数です。
  • spent:これまでに会話全体で課金された量。増える一方で、ウィンドウの大きさに縛られません。

会話を切り詰めると used は下がりますが spent はそのままです。どちらか一方だけを見せると、 ユーザーが持つ二つの問い(「次のメッセージは入るのか」「これまでいくらかかったのか」)の片方にしか 答えられません。

上限がない場合

limit が未設定またはゼロならバーは消え、数だけが残ります。ウィンドウの大きさが分からない あいだに便利です。

ラベルの付け替え

html
<r-token-meter label="コンテキスト" limit="65536" used="41200"></r-token-meter>
<!-- label="" にすると数だけが残ります -->

API リファレンス

プロパティ

プロパティ属性既定値説明
limitlimitnumber0コンテキストウィンドウの大きさ(トークン数)。ゼロまたは未設定でバーを隠します。
usedusednumber0次のリクエストが運ぶトークン数。
spentspentnumber0これまでに会話全体で課金されたトークン数。
labellabelstring'Context'表示の接頭辞。'' にすると数だけが残ります。
levellevel'ok' | 'warn' | 'over'導出ウィンドウの埋まり具合。要素が設定します:書き込んでも次の更新で上書きされます。
sheetsheetstring''shadow root に注入する CSS。

数は素早く読めるように整形されます。千未満は正確に(847 は正確に読めるほど短い)、それ以上は 略記で(41.2k128k)。128,431 の三桁目は、読み手の行動を何も変えません。

Part

Part要素
meter要素全体
trackバーの背景
fill満ちた部分
textラベルと数

アクセシビリティ

この要素は常に数値を述べる title を持ちます。したがって色が警告の唯一の担い手になることは ありません。バーが琥珀色になるのは二つ目の合図であって、唯一の合図ではありません。段階の見た目を 変えるときも、この性質は保ってください。

スタイリング

<r-token-meter> は自前の CSS カスタムプロパティを 9 個、そしてテーマから読むセマンティック トークンを公開しています。継承が届く場所ならどこにでも設定できます(:root、外側のコンテナ、要素そのもの)。

css
r-token-meter {
  --ran-token-meter-fill-background: var(--ran-color-bg-subtle);
}

Part:fill · meter · text · track

一覧はスタイルトークンに、どのトークンを選ぶかはデザインシステムにあります。

ベストプラクティス

  • used はリクエストを組み立てるのと同じ場所から更新する、描画のパスからではなく。人が信じるのは 次のリクエストが実際に送る数だからです。
  • 段階への対応はメーターの外で。 level="over" のときに役立つ UI は提案(要約する、新しいスレッドを 始める)であり、それはアプリの仕事です。
  • テーマ切り替えで満ち具合をアニメーションさせないデザインガイドライン を参照。

MIT ライセンスのもとで公開されています。