Skip to content

Commit a4f2bf2

Browse files
committed
fix(openai): default direct responses to sse
1 parent 5005f5b commit a4f2bf2

4 files changed

Lines changed: 8 additions & 5 deletions

File tree

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ Docs: https://docs.openclaw.ai
5252

5353
### Fixes
5454

55+
- Agents/OpenAI: default direct OpenAI Responses models to the SSE transport instead of WebSocket auto-selection, preventing pi runtime chat turns from hanging on servers where the WebSocket path stalls while the OpenAI HTTP stream works. Thanks @vincentkoc.
5556
- CLI/update: disable and skip plugins that fail package-update plugin sync, so a broken npm/ClawHub/git/marketplace plugin cannot turn a successful OpenClaw package update into a failed update result. Thanks @vincentkoc.
5657
- CLI/update: use an absolute POSIX npm script shell during package-manager updates, so restricted PATH environments can still run dependency lifecycle scripts while updating from `--tag main`. Fixes #77530. Thanks @PeterTremonti.
5758
- Diagnostics: grant the internal diagnostics event bus to official installed diagnostics exporter plugins, so npm-installed `@openclaw/diagnostics-prometheus` can emit metrics without broadening the capability to arbitrary global plugins. Fixes #76628. Thanks @RayWoo.

extensions/openai/openai-provider.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -508,9 +508,9 @@ describe("buildOpenAIProvider", () => {
508508
});
509509

510510
expect(extraParams).toMatchObject({
511-
transport: "auto",
512-
openaiWsWarmup: true,
511+
transport: "sse",
513512
});
513+
expect(extraParams?.openaiWsWarmup).toBeUndefined();
514514
expect(result.payload.store).toBe(true);
515515
expect(result.payload.context_management).toEqual([
516516
{ type: "compaction", compact_threshold: 140_000 },

extensions/openai/openai-provider.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,7 @@ export function buildOpenAIProvider(): ProviderPlugin {
227227
shouldUseOpenAIResponsesTransport({ provider, api, baseUrl })
228228
? { api: "openai-responses", baseUrl }
229229
: undefined,
230-
...buildOpenAIResponsesProviderHooks({ openaiWsWarmup: true }),
230+
...buildOpenAIResponsesProviderHooks({ transport: "sse" }),
231231
matchesContextOverflowError: ({ errorMessage }) =>
232232
/content_filter.*(?:prompt|input).*(?:too long|exceed)/i.test(errorMessage),
233233
resolveReasoningOutputMode: () => "native",

extensions/openai/shared.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,18 +50,19 @@ function hasSupportedOpenAIResponsesTransport(
5050

5151
function defaultOpenAIResponsesExtraParams(
5252
extraParams: Record<string, unknown> | undefined,
53-
options?: { openaiWsWarmup?: boolean },
53+
options?: { openaiWsWarmup?: boolean; transport?: "auto" | "sse" | "websocket" },
5454
): Record<string, unknown> | undefined {
5555
const hasSupportedTransport = hasSupportedOpenAIResponsesTransport(extraParams?.transport);
5656
const hasExplicitWarmup = typeof extraParams?.openaiWsWarmup === "boolean";
57+
const defaultTransport = options?.transport ?? "auto";
5758
const shouldDefaultWarmup = options?.openaiWsWarmup === true;
5859
if (hasSupportedTransport && (!shouldDefaultWarmup || hasExplicitWarmup)) {
5960
return extraParams;
6061
}
6162

6263
return {
6364
...extraParams,
64-
...(hasSupportedTransport ? {} : { transport: "auto" }),
65+
...(hasSupportedTransport ? {} : { transport: defaultTransport }),
6566
...(shouldDefaultWarmup && !hasExplicitWarmup ? { openaiWsWarmup: true } : {}),
6667
};
6768
}
@@ -93,6 +94,7 @@ const wrapOpenAIResponsesProviderStreamFn: NonNullable<
9394

9495
export function buildOpenAIResponsesProviderHooks(options?: {
9596
openaiWsWarmup?: boolean;
97+
transport?: "auto" | "sse" | "websocket";
9698
}): OpenAIResponsesProviderHooks {
9799
return {
98100
buildReplayPolicy: buildOpenAIReplayPolicy,

0 commit comments

Comments
 (0)