siyuan-note/siyuan · error
image model returned no image
Error message
image model returned no image
What it means
After CreateImage succeeds at the HTTP level, the adapter checks that the response contains at least one item in response.Data. When the provider returns an empty Data array, there is nothing to decode, so Generate returns this error. It guards against providers/proxies that answer 200 with no image payload.
Solutions
- Verify the configured image model is actually an image-capable model (e.g. dall-e-2/3, not a chat model)
- Call the provider directly once (curl) to confirm it returns a non-empty data array — if not, fix the proxy/gateway
- Check provider response for content-policy filtering and surface it to the user
- Retry the generation; transient provider issues can yield empty results
Example fix
// before
resp, err := adapter.client.CreateImage(ctx, req) // resp.Data empty -> 'image model returned no image'
// after
resp, err := adapter.client.CreateImage(ctx, req)
if err != nil { return err }
if len(resp.Data) == 0 {
return fmt.Errorf("image model %s returned no image; check model ID and provider response", adapter.model)
} Defensive patterns
Strategy: validation
Validate before calling
if len(response.Data) == 0 {
// surface a retry/fallback path instead of indexing Data[0]
} Try / catch
if err != nil {
return fmt.Errorf("image generation failed: %w", err)
}
if len(response.Data) == 0 {
return retryOrFail() // handle empty Data explicitly
} Prevention
- Confirm the configured model ID is an image model
- Test the provider/proxy with a direct curl before wiring it in
- Handle empty Data arrays explicitly instead of assuming success means an image
When it happens
Trigger: adapter.client.CreateImage returns a response whose Data slice has length 0 — e.g. the model produced no image, a proxy/gateway stripped the data array, or the configured model ID is not an image model and returned an empty success payload.
Common situations: Pointing the image model setting at a chat model via a compatible proxy; a self-hosted gateway returning an empty JSON body parsed as an empty Data array; provider-side content filtering that silently drops the image; API version mismatch returning a different response shape.
Understand the failure class
Background: "empty response", "returned no data", "empty embeddings": what HTTP 200-with-empty-body errors mean across libraries — this error's family across 36 libraries.
Related errors
- image model returned neither base64 data nor URL
- image prompt is required
- response compaction returned no output
- generate image failed
- image model is not configured
AI-assisted analysis of siyuan-note/siyuan@9f775e8a12 (2026-09-19).
Data as JSON: /api/errors/a36227152637e60d.
Report an issue: GitHub.
Appendix: source
Thrown at kernel/util/openai.go:906
Size: request.Size,
Quality: request.Quality,
}
if strings.HasPrefix(strings.ToLower(adapter.model), "dall-e") {
imageRequest.ResponseFormat = openai.CreateImageResponseFormatB64JSON
if imageRequest.Quality == "auto" {
imageRequest.Quality = ""
}
} else {
imageRequest.OutputFormat = request.OutputFormat
}
requestCtx, cancel := context.WithTimeout(ctx, adapter.timeout)
defer cancel()
response, err := adapter.client.CreateImage(requestCtx, imageRequest)
if err != nil {
return GeneratedImage{}, err
}
if len(response.Data) == 0 {
return GeneratedImage{}, errors.New("image model returned no image")
}
result := response.Data[0]
var data []byte
if result.B64JSON != "" {
data, err = base64.StdEncoding.DecodeString(result.B64JSON)
} else if result.URL != "" {
data, err = downloadGeneratedImage(requestCtx, result.URL)
} else {
err = errors.New("image model returned neither base64 data nor URL")
}
if err != nil {
return GeneratedImage{}, err
}
mimeType, extension, err := ValidateGeneratedImage(data)
if err != nil {
return GeneratedImage{}, err
}
return GeneratedImage{Data: data, MIMEType: mimeType, Extension: extension, RevisedPrompt: result.RevisedPrompt}, nilView on GitHub (pinned to 9f775e8a12)