linshenkx/prompt-optimizer · error · ImageError

INVALID_RESPONSE_FORMAT

INVALID_RESPONSE_FORMAT

Error message

INVALID_RESPONSE_FORMAT

What it means

The Grok image adapter throws INVALID_RESPONSE_FORMAT when the API response body does not contain a data array in parseImageResponse. The adapter expects an OpenAI-images-style JSON payload ({ data: [...] }); anything else is treated as a malformed/unexpected response.

Source

Thrown at packages/core/src/services/image/adapters/grok.ts:260

    return params
  }

  private getJsonHeaders(config: ImageModelConfig): Record<string, string> {
    return {
      Authorization: `Bearer ${config.connectionConfig?.apiKey}`,
      'Content-Type': 'application/json'
    }
  }

  private toDataUrl(inputImage: ImageInputRef): string {
    const mimeType = inputImage.mimeType || 'image/png'
    const b64 = inputImage.b64.includes(',') ? inputImage.b64.split(',')[1] : inputImage.b64
    return `data:${mimeType};base64,${b64}`
  }

  private parseImageResponse(response: any, config: ImageModelConfig): ImageResult {
    if (!response.data || !Array.isArray(response.data)) {
      throw new ImageError(IMAGE_ERROR_CODES.INVALID_RESPONSE_FORMAT)
    }

    const images = response.data.map((item: any) => {
      const b64Json = typeof item.b64_json === 'string' ? item.b64_json : ''
      const responseUrl = typeof item.url === 'string' ? item.url : ''

      if (b64Json) {
        const parsed = this.parseBase64Image(b64Json)
        return {
          b64: parsed.b64,
          mimeType: parsed.mimeType,
          url: `data:${parsed.mimeType};base64,${parsed.b64}`
        }
      }

      if (responseUrl) {
        if (responseUrl.startsWith('data:')) {
          const parsed = this.parseDataUrl(responseUrl)

View on GitHub (pinned to 3e677b1d9f)

Solutions

  1. Log the raw response body to see what the API actually returned
  2. Verify the base URL points to xAI's images endpoint (v1/images/generations)
  3. Confirm the configured model supports image generation on xAI
  4. Check for an error object in the payload indicating auth or model issues
Defensive patterns

Strategy: validation

Type guard

function hasImageDataArray(r: unknown): r is { data: unknown[] } {
  return !!r && typeof r === 'object' && Array.isArray((r as any).data)
}

Try / catch

try { await grok.generate(...) } catch (e) {
  if (e instanceof ImageError && e.code === IMAGE_ERROR_CODES.INVALID_RESPONSE_FORMAT) {
    // log raw body captured by interceptor; likely endpoint/schema mismatch
  }
}

Prevention

When it happens

Trigger: generateImage or generateImageEdit receives a response whose body lacks a data field or where data is not an array — e.g. xAI returns an error object ({ error: {...} }) with 200, an HTML error page, or an API version change alters the payload shape.

Common situations: Wrong base URL pointing to a non-images endpoint, xAI API schema drift, proxy/gateway stripping the response, or model not enabled for image generation so the API returns a different payload.

Related errors


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