feat(gateway): add OpenResponses /v1/responses endpoint

Add a new `/v1/responses` endpoint implementing the OpenResponses API
standard for agentic workflows. This provides:

- Item-based input (messages, function_call_output, reasoning)
- Semantic streaming events (response.created, response.output_text.delta,
  response.completed, etc.)
- Full SSE event support with both event: and data: lines
- Configuration via gateway.http.endpoints.responses.enabled

The endpoint is disabled by default and can be enabled independently
from the existing Chat Completions endpoint.

Phase 1 implementation supports:
- String or ItemParam[] input
- system/developer/user/assistant message roles
- function_call_output items
- instructions parameter
- Agent routing via headers or model parameter
- Session key management

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Ryan Lisse
2026-01-19 10:44:48 +01:00
committed by Peter Steinberger
parent 7f6e87e918
commit f4b03599f0
11 changed files with 1563 additions and 0 deletions

View File

@@ -111,6 +111,11 @@ export type GatewayServerOptions = {
* Default: config `gateway.http.endpoints.chatCompletions.enabled` (or false when absent).
*/
openAiChatCompletionsEnabled?: boolean;
/**
* If false, do not serve `POST /v1/responses` (OpenResponses API).
* Default: config `gateway.http.endpoints.responses.enabled` (or false when absent).
*/
openResponsesEnabled?: boolean;
/**
* Override gateway auth configuration (merges with config).
*/
@@ -205,6 +210,7 @@ export async function startGatewayServer(
host: opts.host,
controlUiEnabled: opts.controlUiEnabled,
openAiChatCompletionsEnabled: opts.openAiChatCompletionsEnabled,
openResponsesEnabled: opts.openResponsesEnabled,
auth: opts.auth,
tailscale: opts.tailscale,
});
@@ -212,6 +218,7 @@ export async function startGatewayServer(
bindHost,
controlUiEnabled,
openAiChatCompletionsEnabled,
openResponsesEnabled,
controlUiBasePath,
resolvedAuth,
tailscaleConfig,
@@ -250,6 +257,7 @@ export async function startGatewayServer(
controlUiEnabled,
controlUiBasePath,
openAiChatCompletionsEnabled,
openResponsesEnabled,
resolvedAuth,
gatewayTls,
hooksConfig: () => hooksConfig,