OpenResponses Gateway統合計画
背景
OpenClaw Gatewayは現在、/v1/chat/completionsでOpenAI互換の最小限なChat Completionsエンドポイントを公開している(OpenAI Chat Completions参照)。
Open ResponsesはOpenAI Responses APIに基づくオープンな推論標準。エージェンティックなワークフロー向けに設計され、アイテムベースの入力とセマンティックストリーミングイベントを使用する。OpenResponses仕様は/v1/chat/completionsではなく/v1/responsesを定義する。
目標
- OpenResponsesセマンティクスに準拠した
/v1/responsesエンドポイントを追加。 - Chat Completionsを互換レイヤーとして維持し、無効化と最終的な削除を容易に。
- 分離された再利用可能なスキーマでバリデーションとパースを標準化。
非目標
- 最初のパスでのOpenResponses完全機能同等性(画像、ファイル、ホスティングツール)。
- 内部エージェント実行ロジックやツールオーケストレーションの置き換え。
- 最初のフェーズでの既存
/v1/chat/completions動作の変更。
提案アーキテクチャ
src/gateway/open-responses.schema.tsにZodスキーマのみを追加(gatewayインポートなし)。src/gateway/openresponses-http.tsに/v1/responsesを追加。src/gateway/openai-http.tsはレガシー互換アダプターとしてそのまま維持。- 設定
gateway.http.endpoints.responses.enabledを追加(デフォルトfalse)。 gateway.http.endpoints.chatCompletions.enabledは独立。両エンドポイントを個別にトグル可能。- Chat Completionsが有効な場合、起動時に警告を出してレガシーステータスを通知。
Chat Completionsの廃止パス
- responsesとChat Completions間で共有スキーマ型を持たず、厳密なモジュール境界を維持。
- Chat Completionsを設定でオプトインにし、コード変更なしで無効化可能に。
/v1/responsesが安定したら、Chat Completionsをレガシーとしてドキュメントを更新。- オプションの将来ステップ: Chat CompletionsリクエストをResponsesハンドラーにマッピングし、削除パスを簡素化。
フェーズ1 ストリーミング実装
event:とdata:の両方を含むSSE行。- 必須シーケンス(最小限の実用版):
response.createdresponse.output_item.addedresponse.content_part.addedresponse.output_text.delta(必要に応じて繰り返し)response.output_text.doneresponse.content_part.doneresponse.completed[DONE]
テストと検証計画
/v1/responsesのE2Eカバレッジを追加:- 認証必須
- 非ストリームレスポンス形式
- ストリームイベント順序と
[DONE] - ヘッダーと
userによるセッションルーティング
src/gateway/openai-http.test.tsは変更なし。- 手動テスト:
stream: trueで/v1/responsesにcurlし、イベント順序と終端[DONE]を確認。