{"record":{"id":"5518a2d16d509610","repo":"linshenkx/prompt-optimizer","slug":"invalid-response-format","errorCode":"INVALID_RESPONSE_FORMAT","errorMessage":"INVALID_RESPONSE_FORMAT","messagePattern":"INVALID_RESPONSE_FORMAT","errorType":"error_code","errorClass":"ImageError","httpStatus":null,"severity":"error","filePath":"packages/core/src/services/image/adapters/grok.ts","lineNumber":260,"sourceCode":"    return params\n  }\n\n  private getJsonHeaders(config: ImageModelConfig): Record<string, string> {\n    return {\n      Authorization: `Bearer ${config.connectionConfig?.apiKey}`,\n      'Content-Type': 'application/json'\n    }\n  }\n\n  private toDataUrl(inputImage: ImageInputRef): string {\n    const mimeType = inputImage.mimeType || 'image/png'\n    const b64 = inputImage.b64.includes(',') ? inputImage.b64.split(',')[1] : inputImage.b64\n    return `data:${mimeType};base64,${b64}`\n  }\n\n  private parseImageResponse(response: any, config: ImageModelConfig): ImageResult {\n    if (!response.data || !Array.isArray(response.data)) {\n      throw new ImageError(IMAGE_ERROR_CODES.INVALID_RESPONSE_FORMAT)\n    }\n\n    const images = response.data.map((item: any) => {\n      const b64Json = typeof item.b64_json === 'string' ? item.b64_json : ''\n      const responseUrl = typeof item.url === 'string' ? item.url : ''\n\n      if (b64Json) {\n        const parsed = this.parseBase64Image(b64Json)\n        return {\n          b64: parsed.b64,\n          mimeType: parsed.mimeType,\n          url: `data:${parsed.mimeType};base64,${parsed.b64}`\n        }\n      }\n\n      if (responseUrl) {\n        if (responseUrl.startsWith('data:')) {\n          const parsed = this.parseDataUrl(responseUrl)","sourceCodeStart":242,"sourceCodeEnd":278,"githubUrl":"https://github.com/linshenkx/prompt-optimizer/blob/3e677b1d9f7e0493c142c175560531e7ae786dce/packages/core/src/services/image/adapters/grok.ts#L242-L278","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","solutions":["Log the raw response body to see what the API actually returned","Verify the base URL points to xAI's images endpoint (v1/images/generations)","Confirm the configured model supports image generation on xAI","Check for an error object in the payload indicating auth or model issues"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":"function hasImageDataArray(r: unknown): r is { data: unknown[] } {\n  return !!r && typeof r === 'object' && Array.isArray((r as any).data)\n}","tryCatchPattern":"try { await grok.generate(...) } catch (e) {\n  if (e instanceof ImageError && e.code === IMAGE_ERROR_CODES.INVALID_RESPONSE_FORMAT) {\n    // log raw body captured by interceptor; likely endpoint/schema mismatch\n  }\n}","preventionTips":["Pin the xAI images endpoint as base URL","Add a response logging interceptor to capture raw payloads","Monitor xAI API changelogs for schema changes"],"tags":["grok","response-validation","image-generation","api-contract"],"backgroundTag":"invalid-api-response-shape","analyzedSha":"3e677b1d9f7e0493c142c175560531e7ae786dce","analyzedAt":"2026-08-27T21:29:16.709Z","schemaVersion":2},"datasetVersion":"2026-08-28T00:17:15.603Z"}