From 28072cb31f0d91a69afa8b7e7cedad03e73cf396 Mon Sep 17 00:00:00 2001 From: Mario Zechner Date: Tue, 13 Jan 2026 17:08:56 +0100 Subject: [PATCH] Add more models to stream.test.ts for Vercel, set infinite timeout on OpenAI responses, closes #690 --- packages/ai/src/providers/openai-responses.ts | 2 +- packages/ai/test/stream.test.ts | 54 +++++++++++++++++++ 2 files changed, 55 insertions(+), 1 deletion(-) diff --git a/packages/ai/src/providers/openai-responses.ts b/packages/ai/src/providers/openai-responses.ts index abe8e318..72b53d9d 100644 --- a/packages/ai/src/providers/openai-responses.ts +++ b/packages/ai/src/providers/openai-responses.ts @@ -87,7 +87,7 @@ export const streamOpenAIResponses: StreamFunction<"openai-responses"> = ( const apiKey = options?.apiKey || getEnvApiKey(model.provider) || ""; const client = createClient(model, context, apiKey); const params = buildParams(model, context, options); - const openaiStream = await client.responses.create(params, { signal: options?.signal }); + const openaiStream = await client.responses.create(params, { signal: options?.signal, timeout: undefined }); stream.push({ type: "start", partial: output }); let currentItem: ResponseReasoningItem | ResponseOutputMessage | ResponseFunctionToolCall | null = null; diff --git a/packages/ai/test/stream.test.ts b/packages/ai/test/stream.test.ts index bbbba237..53150a84 100644 --- a/packages/ai/test/stream.test.ts +++ b/packages/ai/test/stream.test.ts @@ -625,6 +625,60 @@ describe("Generate E2E Tests", () => { }, ); + describe.skipIf(!process.env.AI_GATEWAY_API_KEY)( + "Vercel AI Gateway Provider (anthropic/claude-opus-4.5 via Anthropic Messages)", + () => { + const llm = getModel("vercel-ai-gateway", "anthropic/claude-opus-4.5"); + + it("should complete basic text generation", { retry: 3 }, async () => { + await basicTextGeneration(llm); + }); + + it("should handle tool calling", { retry: 3 }, async () => { + await handleToolCall(llm); + }); + + it("should handle streaming", { retry: 3 }, async () => { + await handleStreaming(llm); + }); + + it("should handle image input", { retry: 3 }, async () => { + await handleImage(llm); + }); + + it("should handle multi-turn with tools", { retry: 3 }, async () => { + await multiTurn(llm); + }); + }, + ); + + describe.skipIf(!process.env.AI_GATEWAY_API_KEY)( + "Vercel AI Gateway Provider (openai/gpt-5.1-codex-max via Anthropic Messages)", + () => { + const llm = getModel("vercel-ai-gateway", "openai/gpt-5.1-codex-max"); + + it("should complete basic text generation", { retry: 3 }, async () => { + await basicTextGeneration(llm); + }); + + it("should handle tool calling", { retry: 3 }, async () => { + await handleToolCall(llm); + }); + + it("should handle streaming", { retry: 3 }, async () => { + await handleStreaming(llm); + }); + + it("should handle image input", { retry: 3 }, async () => { + await handleImage(llm); + }); + + it("should handle multi-turn with tools", { retry: 3 }, async () => { + await multiTurn(llm); + }); + }, + ); + describe.skipIf(!process.env.ZAI_API_KEY)("zAI Provider (glm-4.5-air via OpenAI Completions)", () => { const llm = getModel("zai", "glm-4.5-air");