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.created
    • response.output_item.added
    • response.content_part.added
    • response.output_text.delta(必要に応じて繰り返し)
    • response.output_text.done
    • response.content_part.done
    • response.completed
    • [DONE]

テストと検証計画

  • /v1/responsesのE2Eカバレッジを追加:
    • 認証必須
    • 非ストリームレスポンス形式
    • ストリームイベント順序と[DONE]
    • ヘッダーとuserによるセッションルーティング
  • src/gateway/openai-http.test.tsは変更なし。
  • 手動テスト: stream: true/v1/responsesにcurlし、イベント順序と終端[DONE]を確認。