fix(openai): normalize Lite requests in WS HTTP bridge

This commit is contained in:
Jiao Ziang
2026-08-25 03:46:46 +08:00
parent d6012b0b35
commit d5e43ef7d1
2 changed files with 12 additions and 1 deletions
@@ -349,6 +349,15 @@ func (s *OpenAIGatewayService) proxyOpenAIWSHTTPBridgeTurn(
LoweredTools: loweredTools,
})
}
if account.Platform != PlatformGrok && isOpenAIResponsesLiteWebSocketPayload(payload) {
liteBody, liteChanged, liteErr := normalizeOpenAIResponsesLitePayloadForAccount(body, account)
if liteErr != nil {
return nil, fmt.Errorf("normalize responses Lite payload: %w", liteErr)
}
if liteChanged {
body = liteBody
}
}
buildUpstreamRequest := func(requestBody []byte) (*http.Request, error) {
upstreamCtx, releaseUpstreamCtx := detachUpstreamContext(ctx)
@@ -1239,7 +1239,7 @@ func TestOpenAIWSHTTPBridgeRelaysSSEFramesAsWebSocketMessages(t *testing.T) {
Concurrency: 1,
Status: StatusActive,
}
payload := []byte(`{"type":"response.create","generate":true,"model":"gpt-5","stream":true,"client_metadata":{"ws_request_header_x_openai_internal_codex_responses_lite":"true"},"input":"hi"}`)
payload := []byte(`{"type":"response.create","generate":true,"model":"gpt-5","stream":true,"client_metadata":{"ws_request_header_x_openai_internal_codex_responses_lite":"true"},"input":"hi","tools":[{"type":"function","name":"lookup","parameters":{"type":"object"}}],"parallel_tool_calls":true}`)
type bridgeResult struct {
result *OpenAIForwardResult
@@ -1325,6 +1325,8 @@ func TestOpenAIWSHTTPBridgeRelaysSSEFramesAsWebSocketMessages(t *testing.T) {
require.False(t, gjson.GetBytes(upstream.lastBody, "type").Exists())
require.False(t, gjson.GetBytes(upstream.lastBody, "generate").Exists())
require.True(t, gjson.GetBytes(upstream.lastBody, "stream").Bool())
require.True(t, gjson.GetBytes(upstream.lastBody, "parallel_tool_calls").Exists())
require.False(t, gjson.GetBytes(upstream.lastBody, "parallel_tool_calls").Bool())
}
func TestProxyOpenAIWSHTTPBridgeTurnForGrokDefaultsEmptyModelTo45(t *testing.T) {