Vercel AI Gateway、アカウント残高が0になるとBYOKリクエストをブロックするようだ
AI Gatewayのクレジットが枯渇(残高ゼロ)すると、BYOK(自前のキー)を使用すべきリクエストも含め、すべてのリクエストがブロックされます。これはダッシュボード統合またはプログラム上のproviderOptions.byokでBYOKが設定されているかどうかに関わらず発生します。
AI Gatewayクレジットが枯渇(残高ゼロ)すると、BYOK(Bring Your Own Key)の認証情報を使用すべきリクエストも含め、すべてのリクエストがブロックされます。これはBYOKがダッシュボード統合(「テストキー」検証が正常に動作)を介して設定されているか、コード内のproviderOptions.byokを介して設定されているかに関わらず発生します。
期待される動作
BYOK認証情報が設定されている場合(ダッシュボードまたはproviderOptions.byokのいずれか)、リクエストはその認証情報を使用してプロバイダに直接ルーティングされるべきであり、AI Gatewayクレジットを必要としないはずです。
ドキュメントには次のように記載されています: > 「外部AIプロバイダで独自の認証情報を使用することで、AI Gatewayは追加マークアップなしでリクエストを認証できます。」
これはBYOKがクレジットシステムを完全にバイパスすることを示唆しています。
実際の動作
すべてのリクエストが次のエラーで失敗します:
残高不足。AIサービスを利用するにはアカウントにクレジットを追加してください。次の状況でも同様です:
- ダッシュボードでBYOK統合が設定され、「テストキー」が成功する
- リクエスト内で
providerOptions.byokが明示的に設定されている
再現手順
- Vercelダッシュボード(AI Gateway → 統合)でBYOK統合を設定
- 「テストキー」機能を使用してキーが機能することを確認 ✓
- AI Gatewayクレジットを$0まで枯渇させる
createGateway()を使用してリクエストを送信:
import { createGateway, generateText } from "ai";
const gateway = createGateway();
// 方法1: ダッシュボードのBYOK設定に依存
const response1 = await generateText({
model: gateway("anthropic/claude-3-5-haiku-latest"),
prompt: "Hello",
});
// 方法2: providerOptionsで明示的にBYOKを指定
const response2 = await generateText({
model: gateway("anthropic/claude-3-5-haiku-latest"),
prompt: "Hello",
providerOptions: {
gateway: {
byok: {
anthropic: [{ apiKey: process.env.ANTHROPIC_API_KEY }],
},
},
},
});両方とも「残高不足」エラーで失敗します。
検証
APIキーは有効です。直接プロバイダを呼び出すと正常に動作します:
import { anthropic } from "@ai-sdk/anthropic";
import { generateText } from "ai";
// これは完全に機能する
const response = await generateText({
model: anthropic("claude-3-5-haiku-latest"),
prompt: "Hello",
});環境
aiパッケージバージョン: 6.0.0-beta.128@ai-sdk/gateway: 最新- Node.js: v25.2.1
影響
以下のユーザー:
- Vercelクレジットコストを回避するためにBYOKを設定した
- 有効なプロバイダAPIキーと利用可能なクォータを持っている
- AI Gatewayクレジットが(たとえ偶然でも)枯渇した
...AI Gatewayを完全に使用できなくなり、BYOKの目的が無効化されます。
提案される修正
次の条件が満たされる場合、クレジットチェックをバイパスする必要があります:
- 要求されたプロバイダに対してダッシュボードで有効なBYOK認証情報が設定されている
- 要求されたプロバイダに対して
providerOptions.byokに有効な認証情報が含まれている
GatewayはVercelのシステム認証情報を使用する場合のみクレジットを要求するべきです。