linshenkx/prompt-optimizer · error · APIError

Responses API request failed

Error message

Responses API request failed

What it means

During Responses API streaming, the terminal 'response.failed' event fired: OpenAI accepted the request but the response generation failed server-side, so the adapter aborts with a generic APIError (response.failed carries no usable message here).

Source

Thrown at packages/core/src/services/llm/adapters/openai-adapter.ts:593

              callbacks.onToolCall(currentToolCall)
            } catch {
              // Ignore incomplete JSON deltas until the payload becomes valid.
            }
          }
          break
        }
        case 'response.completed': {
          const completedResponse = event.response
          if (!accumulatedContent && completedResponse?.output_text) {
            accumulatedContent = completedResponse.output_text
          }
          if (!accumulatedReasoning) {
            accumulatedReasoning = this.extractResponsesReasoning(completedResponse?.output)
          }
          break
        }
        case 'response.failed': {
          throw new APIError('Responses API request failed')
        }
        case 'response.error': {
          throw new APIError(event.error?.message || 'Responses API request failed')
        }
        default:
          break
      }
    }

    callbacks.onComplete({
      content: accumulatedContent,
      reasoning: accumulatedReasoning || undefined,
      toolCalls: toolCalls.size > 0 ? Array.from(toolCalls.values()) : undefined,
      metadata: {
        model: config.modelMeta.id
      }
    })
  }

View on GitHub (pinned to 3e677b1d9f)

Solutions

  1. Simply retry the request — most response.failed events are transient
  2. If recurring, check status.openai.com and try a different model ID
  3. Inspect event.response.error in raw SSE for detail (adapter discards it)
  4. Add a fallback path to the chat-completions API if Responses is unstable for your workload

Example fix

// before
const stream = await adapter.sendMessageStream(msgs)

// after
async function robustStream(adapter, msgs, tries = 3) {
  for (let i = 0; ; i++) {
    try { return await adapter.sendMessageStream(msgs) }
    catch (e) {
      if (i < tries - 1 && e instanceof APIError && /Responses API request failed/.test(e.message)) continue
      throw e
    }
  }
}
Defensive patterns

Strategy: retry

Validate before calling

null

Type guard

function isResponsesFailed(e: unknown): boolean {
  return e instanceof APIError && e.message === 'Responses API request failed'
}

Try / catch

try { return await consume(adapter.sendMessageStream(msgs)) }
catch (e) {
  if (isResponsesFailed(e) && retriesLeft) { await sleep(backoffMs); return retry() }
  throw e
}

Prevention

When it happens

Trigger: Server-side failures during generation: internal errors, content-filter/system issues, or model crashes mid-response; happens after streaming has begun.

Common situations: OpenAI incidents, overloaded models, long generations timing out server-side, rarely reproducible transient failures.

Related errors


AI-assisted analysis of linshenkx/prompt-optimizer@3e677b1d9f (2026-08-27). Data as JSON: /api/errors/b869fdca816265e0. Report an issue: GitHub.