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
- 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
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
- Pin the xAI images endpoint as base URL
- Add a response logging interceptor to capture raw payloads
- Monitor xAI API changelogs for schema changes
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.