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

  1. Validate prompt is non-empty after trimming at the API/UI boundary and return a 400 there.
  2. 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

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


AI-assisted analysis of siyuan-note/siyuan@251596fc0d (2026-08-12). Data as JSON: /api/errors/7c7c94e9f79f9c94. Report an issue: GitHub.