Skip to main content

概要

TokenLab の Agent-First API は、エラー応答を AI エージェントが即座に解析して対処できる構造化ヒントで拡張します — ウェブ検索もドキュメント参照も推測も不要です。 OpenAI 互換の Chat Completions と Responses の gateway エラーでは、error オブジェクト内に did_you_meansuggestionshintretryableretry_after などの任意フィールドを含める場合があります。Anthropic Messages と Gemini はネイティブのエラー形状を保持し、これらの拡張を保証しません。

エラー・ヒントフィールド

OpenAI 互換 gateway エラーでは、すべてのヒントフィールドは error オブジェクト内の任意拡張です:

エラーコード例

model_not_found (400)

モデル名がアクティブなモデルに一致しない場合:
did_you_mean の解決には以下を使用します:
  1. 本番エラーデータに基づく静的エイリアスマッピング
  2. 正規化された文字列マッチ(ハイフンを削除、大小文字を区別しない)
  3. 編集距離マッチ(閾値 ≤ 3)
公開ルートは、非公開・遅延・隠蔽モデルに対して別個のエラーコードを公開しません。公開されていないモデルはミスと同様に扱ってください: did_you_meansuggestionshint を確認し、サポートされている公開モデルで再試行してください。

insufficient_balance (402)

口座残高が推定コストに対して不足している場合:
suggestions には、推定コストより安価でエージェントが切り替え可能なモデルが含まれます。

all_channels_failed (503)

あるモデルの全てのアップストリームチャネルが利用不可の場合:
retryable は理由が no_channels(このモデルにチャネルが設定されていない) の場合は false になります。サーキットブレーカーの発動やクォータ枯渇のような一時的な障害の場合にのみ true になります。

rate_limit_exceeded (429)

retry_after の値は、実際のレート制限ウィンドウのリセット時間から算出されます。
OpenAI 互換 endpoints は rate_limit_exceededupstream_errorall_channels_failed などの TokenLab の安定した公開エラータイプを使用します。Anthropic-compatible および Gemini-compatible エンドポイントはそれぞれのネイティブなレスポンス形式を使用します。

context_length_exceeded (400)

入力がモデルのコンテキストウィンドウを超えた場合(アップストリームエラー、ヒントを付与):

ネイティブエンドポイントの検出

モデル名やプロバイダー名、Chat レスポンスヘッダーからネイティブプロトコルの利用可否を推測しないでください。ネイティブエンドポイントを選ぶ前に GET /v1/models/{model} を確認し、モデル詳細で公開され、かつ同一プロトコルのルートがあるリクエスト形式だけを使用します。 確認するフィールドは tokenlab.accepted_request_formats です。 公開されたリクエスト形式はエンドポイントの利用可否を示します。個々のフィールドやツールへの対応は upstream ごとに異なります。

/v1/models の拡張

/v1/models は、エージェントが画像、ビデオ、音楽、3D、TTS、STT、embedding、rerank、翻訳エンドポイントを呼ぶ前に利用できる非チャットの推奨メタデータを持つようになりました。
recommended_for がある場合、agent_preferences は 24 時間の成功率スナップショットのキャッシュから派生します:
  • ウィンドウ: 24 時間
  • スナップショットキャッシュ: stale-while-revalidate
  • status = "ready" はモデルが最近のサンプルを十分に持ち、ランキングに参加できることを意味します
  • status = "insufficient_samples" はモデルが表示はされるが、スコア付きモデルよりも優先されないことを意味します

カテゴリフィルタリング

推奨の発見フロー

非チャットのワークフローでは、エージェントはまず現在の推奨ショートリストを取得するべきです:
有効な recommended_for の値は次のとおりです:
  • image
  • video
  • music
  • 3d
  • tts
  • stt
  • embedding
  • rerank
  • translation
categoryrecommended_for の両方が存在する場合、それらは完全に一致する必要があります。 推奨されるエージェントのフロー:
  1. GET /v1/models?recommended_for=<scene>
  2. 最初の agent_preferences.<scene>.status == "ready" のモデルを選択する
  3. 明示的に model=<selected> でエンドポイントを呼び出す
  4. 一時的なエラーに限り、次の ready モデルで再試行する

llms.txt

機械可読の API 概要は次で取得できます:
これには以下が含まれます:
  • 最初の呼び出しテンプレートと動作する例
  • 一般的なモデル名(使用データから動的生成)
  • 全12の API エンドポイント
  • モデル発見のためのフィルタパラメータ
  • エラーハンドリングのガイダンス
最初の API 呼び出しの前に llms.txt を参照するエージェントは、通常、最初の試行で成功できます。

エージェントコードでの使用例

Python (OpenAI SDK)

JavaScript (OpenAI SDK)

設計原則

早く失敗し、情報を明確に返す

エラーはエージェントが自己修正するために必要なすべてのデータを即座に返します。

自動ルーティングなし

API は別のモデルを黙って代替することは決してしません。エージェント自身が決定します。

データに基づく提案

すべての推奨はハードコードされたリストではなく、本番データに基づきます。

後方互換

すべてのヒントフィールドは任意です。既存のクライアントには違いが見えません。