siyuan-note/siyuan · warning
prompt is required for image generation
Error message
prompt is required for image generation
What it means
Returned by GenerateImage when strings.TrimSpace(request.Prompt) is empty. Pure input validation, checked after AI config and model validation but before any provider call. A non-empty prompt is mandatory because the image model has nothing to render otherwise.
Source
Thrown at kernel/model/assets.go:423
Artifact: ImageArtifactRef{Kind: "image", Path: assetPath, DocumentID: bt.RootID},
Data: prepared.Data,
MIMEType: prepared.MIMEType,
Prepared: prepared,
}, nil
}
// GenerateImage 使用全局图片生成配置创建图片字节,可供文档资源、编辑器和其他图片入口复用。
func GenerateImage(ctx context.Context, request GenerateImageRequest) (GenerateImageResult, error) {
if Conf == nil || Conf.AI == nil {
return GenerateImageResult{}, errors.New("AI configuration is unavailable")
}
provider, generationModel := Conf.AI.GetImageGenerationModel()
if err := validateImageModel(provider, generationModel); err != nil {
return GenerateImageResult{}, err
}
prompt := strings.TrimSpace(request.Prompt)
if prompt == "" {
return GenerateImageResult{}, errors.New("prompt is required for image generation")
}
size := multimodalValueOrDefault(request.Size, Conf.AI.ImageGeneration.Size)
quality := multimodalValueOrDefault(request.Quality, Conf.AI.ImageGeneration.Quality)
outputFormat := strings.ToLower(multimodalValueOrDefault(request.OutputFormat, Conf.AI.ImageGeneration.OutputFormat))
if outputFormat != "png" && outputFormat != "jpeg" && outputFormat != "webp" {
return GenerateImageResult{}, errors.New("unsupported image output format")
}
generated, err := util.NewOpenAIImageAdapter(
provider.APIKey, provider.BaseURL, generationModel.Name, Conf.AI.ImageGeneration.RequestTimeout,
).Generate(ctx, util.GenerateImageRequest{
Prompt: prompt, Size: size, Quality: quality, OutputFormat: outputFormat,
})
if err != nil {
return GenerateImageResult{}, markImageExecutionUnknown(fmt.Errorf("generate image failed: %w", err))
}
if ctx.Err() != nil {
return GenerateImageResult{}, markImageExecutionUnknown(errors.New("image generation was cancelled"))
}View on GitHub (pinned to 251596fc0d)
Solutions
- Validate prompt is non-empty after trimming at the API/UI boundary and return a 400 there.
- Disable the generate button until the user has typed at least one non-whitespace character.
Example fix
// before
res, err := model.GenerateImage(ctx, model.GenerateImageRequest{Prompt: prompt})
// after
if strings.TrimSpace(prompt) == "" {
return errors.New("prompt is required")
}
res, err := model.GenerateImage(ctx, model.GenerateImageRequest{Prompt: prompt}) Defensive patterns
Strategy: validation
Validate before calling
if strings.TrimSpace(request.Prompt) == "" {
return errors.New("prompt is required")
} Prevention
- Disable the generate button until non-whitespace prompt text exists.
- Return a 400 at the HTTP boundary for empty prompts rather than reaching the kernel.
When it happens
Trigger: Calling GenerateImage with request.Prompt = "" or whitespace; a UI that submits the form before the user types; a caller that forwards a request whose prompt field was omitted in JSON.
Common situations: An empty form submit; a programmatic caller that builds the request conditionally and skipped the prompt; whitespace-only prompt after a failed template substitution.
Related errors
- unsupported image output format
- assetPath is required for analyze
- only local assets/... images are supported
- asset path is required
- block updates are empty
AI-assisted analysis of siyuan-note/siyuan@251596fc0d (2026-08-12).
Data as JSON: /api/errors/7c7c94e9f79f9c94.
Report an issue: GitHub.