@@ -1917,6 +1917,7 @@ describe("createOpenAIWebSocketStreamFn", () => {
|
1917 | 1917 | releaseWsSession("sess-2"); |
1918 | 1918 | releaseWsSession("sess-boundary"); |
1919 | 1919 | releaseWsSession("sess-fallback"); |
| 1920 | +releaseWsSession("sess-explicit-sse"); |
1920 | 1921 | releaseWsSession("sess-boundary-http-fallback"); |
1921 | 1922 | releaseWsSession("sess-full-context-replay"); |
1922 | 1923 | releaseWsSession("sess-encrypted-full-context-replay"); |
@@ -2681,6 +2682,33 @@ describe("createOpenAIWebSocketStreamFn", () => {
|
2681 | 2682 | } |
2682 | 2683 | }); |
2683 | 2684 | |
| 2685 | +it("ends the HTTP fallback stream when explicit SSE transport is selected", async () => { |
| 2686 | +const streamFn = createOpenAIWebSocketStreamFn("sk-test", "sess-explicit-sse"); |
| 2687 | +const stream = await resolveStream( |
| 2688 | +streamFn( |
| 2689 | +modelStub as Parameters<typeof streamFn>[0], |
| 2690 | +contextStub as Parameters<typeof streamFn>[1], |
| 2691 | +{ transport: "sse" } as Parameters<typeof streamFn>[2], |
| 2692 | +), |
| 2693 | +); |
| 2694 | + |
| 2695 | +await expect( |
| 2696 | +Promise.race([ |
| 2697 | +( |
| 2698 | +stream as unknown as { |
| 2699 | +result: () => Promise<{ content?: Array<{ text?: string }> }>; |
| 2700 | +} |
| 2701 | +).result(), |
| 2702 | +new Promise((_, reject) => |
| 2703 | +setTimeout(() => reject(new Error("SSE fallback result timed out")), 100), |
| 2704 | +), |
| 2705 | +]), |
| 2706 | +).resolves.toMatchObject({ |
| 2707 | +content: [{ text: "http fallback response" }], |
| 2708 | +}); |
| 2709 | +expect(streamSimpleCalls).toHaveLength(1); |
| 2710 | +}); |
| 2711 | + |
2684 | 2712 | it("falls back to HTTP when WebSocket errors before any output in auto mode", async () => { |
2685 | 2713 | const streamFn = createOpenAIWebSocketStreamFn("sk-test", "sess-runtime-fallback"); |
2686 | 2714 | const stream = streamFn( |
|