plandex-ai/plandex · error

error creating custom model: %w

Error message

error creating custom model: %w

What it means

Inside UpsertCustomModelsHandler's tx, db.UpsertCustomModel fails for one of the custom models being synced, aborting the whole transaction. DB insert/update failure for that model row (constraint, validation, connection).

Source

Thrown at app/server/handlers/models.go:293

	}

	for _, modelPack := range customModelPacks {
		if _, exists := inputModelPackNames[modelPack.Name]; !exists {
			toDeleteModelPackIds = append(toDeleteModelPackIds, modelPack.Id)
		}
	}

	numChanges := len(toUpsertCustomModels) + len(toUpsertCustomProviders) + len(toUpsertModelPacks) + len(toDeleteCustomModelIds) + len(toDeleteCustomProviderIds) + len(toDeleteModelPackIds)
	if numChanges == 0 {
		w.WriteHeader(http.StatusOK)
		log.Println("No changes to custom models/providers/model packs")
		return
	}

	err = db.WithTx(r.Context(), "create custom models/providers/model packs", func(tx *sqlx.Tx) error {
		for _, model := range toUpsertCustomModels {
			if err := db.UpsertCustomModel(tx, model); err != nil {
				return fmt.Errorf("error creating custom model: %w", err)
			}
		}

		for _, provider := range toUpsertCustomProviders {
			if err := db.UpsertCustomProvider(tx, provider); err != nil {
				return fmt.Errorf("error creating custom provider: %w", err)
			}
		}

		for _, modelPack := range toUpsertModelPacks {
			if err := db.UpsertModelPack(tx, modelPack); err != nil {
				return fmt.Errorf("error creating model pack: %w", err)
			}
		}

		if len(toDeleteCustomModelIds) > 0 {
			if err := db.DeleteCustomModels(tx, auth.OrgId, toDeleteCustomModelIds); err != nil {
				return fmt.Errorf("error deleting custom models: %w", err)

View on GitHub (pinned to e2d772072e)

Solutions

  1. Identify which model failed from the wrapped error
  2. Validate the model payload against DB constraints (unique ids/names)
  3. Retry the upsert; the tx rollback keeps state consistent
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at app/server/handlers/models.go:293 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of plandex-ai/plandex@e2d772072e (2026-09-05). Data as JSON: /api/errors/bd0de10be4dc07a7. Report an issue: GitHub.