siyuan-note/siyuan · error

image model is not configured

Error message

image model is not configured

What it means

Returned by validateImageModel when Conf.AI.GetImageGenerationModel() returned nil provider or nil model. GetImageGenerationModel returns nil,nil if AI.ImageGeneration is nil, if ImageGeneration.ModelID is empty, or if GetModel cannot find the referenced model in any provider. The image-generation feature therefore has no target model configured.

Source

Thrown at kernel/model/assets.go:481

	return GenerateDocumentImageResult{
		Artifact: ImageArtifactRef{
			Kind: "image", Path: assetPath, MIMEType: generated.MIMEType, DocumentID: bt.RootID,
		},
		RevisedPrompt: generated.RevisedPrompt,
	}, nil
}

func resolveMultimodalDocument(documentID string) (*treenode.BlockTree, error) {
	bt := treenode.GetBlockTree(strings.TrimSpace(documentID))
	if bt == nil {
		return nil, errors.New("document not found: " + documentID)
	}
	return bt, nil
}

func validateImageModel(provider *conf.Provider, imageModel *conf.Model) error {
	if provider == nil || imageModel == nil {
		return errors.New("image model is not configured")
	}
	if provider.Protocol != "" && provider.Protocol != "openai" {
		return fmt.Errorf("unsupported multimodal provider protocol: %s", provider.Protocol)
	}
	return nil
}

func documentReferencesImage(rootID, assetPath string) bool {
	paths, err := DocImageAssets(rootID)
	if err != nil {
		return false
	}
	wanted := AssetPathWithoutQuery(assetPath)
	for _, current := range paths {
		if AssetPathWithoutQuery(current) == wanted {
			return true
		}
	}

View on GitHub (pinned to 251596fc0d)

Solutions

  1. Open Settings - AI - Image generation and select a model, or set Conf.AI.ImageGeneration.ModelID programmatically.
  2. Ensure the chosen model belongs to an enabled provider and is itself enabled.
  3. Run ReconcileModelIDs to clean stale references, then pick a fresh model.

Example fix

// before
res, err := model.GenerateImage(ctx, req)

// after — verify a model is configured first
if p, m := model.Conf.AI.GetImageGenerationModel(); p == nil || m == nil {
    return errors.New("no image-generation model configured")
}
res, err := model.GenerateImage(ctx, req)
Defensive patterns

Strategy: validation

Validate before calling

if p, m := model.Conf.AI.GetImageGenerationModel(); p == nil || m == nil {
    return errors.New("no image-generation model configured")
}

Prevention

When it happens

Trigger: Conf.AI.ImageGeneration.ModelID is unset; the referenced model ID no longer exists in any provider (deleted by the user); ImageGeneration block is missing from conf.json; the provider containing the model was disabled.

Common situations: User never selected an image-generation model in settings; a conf.json edit removed the model; the model's parent provider was toggled off; a conf migration reset ImageGeneration.ModelID.

Related errors


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