リクエストでキャッシュを有効にする
Forge-Cache-Mode リクエストヘッダーに、次のいずれかのモードを設定します。
キャッシュを使用しない場合は、このヘッダーを省略します。
- Python
- JavaScript
- cURL
readWrite または readOnly) では、応答に Forge-Cache-Status ヘッダーが含まれ、その値は hit または miss になります。writeOnly リクエストの応答には、このヘッダーは含まれません。
2 つのリクエストが同一と見なされる条件
プロキシは、project のバージョンとルーティングリビジョンを解決した後、プロバイダーを選択する前に、キャッシュされた応答を検索します。モデルオーバーライドの場合、検索はプロキシがオーバーライドのプロバイダーを解決した後に行われます。キャッシュキーは次の値を組み合わせたものです。- プロキシが
OpenAI-Projectヘッダーとforge.project_versionメタデータから解決する Weights & Biases の entity、project、および project のバージョン。 - リクエストの到着時にそのバージョンに適用されているルーティングリビジョン。
- リクエストのパスとクエリ文字列。
- オブジェクトキーをソートしてシリアライズし、次に示す値を除外したリクエストボディの SHA-256 ハッシュ。
- ルーティングされるリクエストの生の
model文字列。解決後の project、バージョン、ルーティングリビジョンはすでにキーに含まれているため、modelに"router"を指定した場合、modelを空にした場合、modelを省略した場合は、いずれも同じエントリを共有します。異なるバージョン間でエントリが共有されることはありません。 forge.またはwandb.で始まるメタデータキー (forge.project_versionなど)。gen_ai.conversation.id内の会話識別子。stream: false。プロキシはこれをstreamを省略した場合と同じように扱います。- 空の
metadataオブジェクト。プロキシはこれをmetadataを省略した場合と同じように扱います。
messages、tools、tool_choice、response_format、temperature、top_p、max_tokens、seed、n、stop、user、プロバイダー固有のフィールド、および user.id など forge. または wandb. で始まらないメタデータキーがあります。オブジェクト内のキーの順序は影響しませんが、messages などの配列内の項目の順序は影響します。
エントリのスコープは、お使いの Weights & Biases の entity と project に限定されます。別の entity からの同一リクエストや、同じ entity 内の別の project に対するリクエストが、お使いのエントリと一致することはありません。
キャッシュされた応答には、その応答を生成したルーティングターゲットが記録されます。キャッシュヒット時、プロキシは重み付けルーティングやスティッキールーティングを適用せず、そのターゲットの応答を返します。
モデルオーバーライドでは、model に provider/model の値を指定し、OpenAI-Project ヘッダーとともに送信します。プロキシは、ルーティングされるトラフィックと同様に、選択された project のバージョン内でこれをキャッシュします。そのキーにはプロバイダー、モデル参照、およびプロバイダーの設定も含まれるため、オーバーライドがルーティングされたエントリや別のモデルのエントリと一致することはありません。
制限
キャッシュには次の制限があります。- 非ストリーミングリクエストのみが対象です。
stream: trueを指定したリクエストでキャッシュヘッダーを設定すると、400 Bad Requestが返されます。 - 成功した応答のみが対象です。 プロキシが保存するのは、8 MiB までの 2xx 応答のみです。
- 保持期間は 7 日間です。 エントリは書き込まれてから 7 日後に削除されます。キャッシュヒットしても保持期間は延長されません。
- 無効なモードは拒否されます。
Forge-Cache-Modeに記載以外の値を指定した場合は、400 Bad Requestが返されます。
トレースと Analytics
キャッシュヒットの場合も、プロキシはそれを project のトレースとして記録します。このトレースには元の応答とそのトークン使用量が保持され、cache_hit=true が付与されます。プロバイダーのレイテンシーは記録されません。キャッシュ読み取りを有効にしていても、リクエストがプロバイダーに転送された場合は cache_hit=false が付与されます。
キャッシュヒットでは推論が実行されないため、Analytics ではプロバイダーの利用料金がゼロとして計上されます。一方、トークンの合計には再利用された使用量も含まれます。データセットの作成時には同一の入力が重複排除されるため、再利用された応答によってトレーニング用の行が重複して追加されることはありません。
ブラウザークライアント
プロキシは、クロスオリジンリクエストでOpenAI-Project および Forge-Cache-Mode リクエストヘッダーを許可し、Forge-Cache-Status と x-proxy-request-id をブラウザー側のコードに公開します。
チャット補完
プロキシによるプロバイダーへのリクエストの構築、ストリーミングの処理、ツールと構造化出力の転送の仕組みについて説明します。