diff --git a/design/src/evolve.ts b/design/src/evolve.ts index c88ae6c660..f23b759445 100644 --- a/design/src/evolve.ts +++ b/design/src/evolve.ts @@ -52,7 +52,8 @@ export async function evolve(options: EvolveOptions): Promise { ].join("\n"); const controller = new AbortController(); - const timeout = setTimeout(() => controller.abort(), 120_000); + // 240s — matches generate.ts; see comment there for rationale. + const timeout = setTimeout(() => controller.abort(), 240_000); try { const response = await fetch("https://api.openai.com/v1/responses", { diff --git a/design/src/generate.ts b/design/src/generate.ts index 383c51aeeb..fa18cc5220 100644 --- a/design/src/generate.ts +++ b/design/src/generate.ts @@ -37,7 +37,10 @@ async function callImageGeneration( quality: string, ): Promise<{ responseId: string; imageData: string }> { const controller = new AbortController(); - const timeout = setTimeout(() => controller.abort(), 120_000); + // 240s: gpt-image-1 at quality:"high" size:"1536x1024" routinely takes + // 60-180s and can spike past 120s under provider load (observed in + // production). 240s gives ~2x headroom while staying under user patience. + const timeout = setTimeout(() => controller.abort(), 240_000); try { const response = await fetch("https://api.openai.com/v1/responses", { diff --git a/design/src/iterate.ts b/design/src/iterate.ts index c85eacee9b..bca3f7c752 100644 --- a/design/src/iterate.ts +++ b/design/src/iterate.ts @@ -82,7 +82,8 @@ async function callWithThreading( feedback: string, ): Promise<{ responseId: string; imageData: string }> { const controller = new AbortController(); - const timeout = setTimeout(() => controller.abort(), 120_000); + // 240s — matches generate.ts; see comment there for rationale. + const timeout = setTimeout(() => controller.abort(), 240_000); try { const response = await fetch("https://api.openai.com/v1/responses", { @@ -130,7 +131,8 @@ async function callFresh( prompt: string, ): Promise<{ responseId: string; imageData: string }> { const controller = new AbortController(); - const timeout = setTimeout(() => controller.abort(), 120_000); + // 240s — matches generate.ts; see comment there for rationale. + const timeout = setTimeout(() => controller.abort(), 240_000); try { const response = await fetch("https://api.openai.com/v1/responses", { diff --git a/design/src/variants.ts b/design/src/variants.ts index d52eb22829..c5c7df27e4 100644 --- a/design/src/variants.ts +++ b/design/src/variants.ts @@ -58,7 +58,8 @@ export async function generateVariant( skipLeadingDelay = false; const controller = new AbortController(); - const timeout = setTimeout(() => controller.abort(), 120_000); + // 240s — matches generate.ts; see comment there for rationale. + const timeout = setTimeout(() => controller.abort(), 240_000); try { const response = await fetchFn("https://api.openai.com/v1/responses", {