plandex-ai/plandex · error

error deleting model packs: %w

Error message

error deleting model packs: %w

What it means

Wrapped error raised in the org model-import transaction when db.DeleteModelPacks fails while removing org model packs whose names are absent from the submitted config. The WithTx closure aborts, rolling back the entire import, and the handler returns 500.

Source

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

				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)
			}
		}

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

		if len(toDeleteModelPackIds) > 0 {
			if err := db.DeleteModelPacks(tx, auth.OrgId, toDeleteModelPackIds); err != nil {
				return fmt.Errorf("error deleting model packs: %w", err)
			}
		}

		return nil
	})

	if err != nil {
		log.Printf("Error: %v\n", err)
		http.Error(w, "Failed to import custom models/providers/model packs: "+err.Error(), http.StatusInternalServerError)
		return
	}

	w.WriteHeader(http.StatusOK)

	log.Println("Successfully imported custom models/providers/model packs")
}

func GetCustomModelHandler(w http.ResponseWriter, r *http.Request) {

View on GitHub (pinned to e2d772072e)

Solutions

  1. Repoint or delete any plan/org settings that reference the model pack before removing it from the config
  2. Read the wrapped error in server logs to identify the failing constraint
  3. Retry the import once the reference is removed; the rollback keeps prior state consistent
  4. Check DB health/pool if the underlying error is a connection issue

Example fix

// before: pack deleted while still the org default
config.ModelPacks = otherPacks
// after: set default elsewhere or keep the pack
config.ModelPacks = otherPacks
setDefaultPlanConfigForOrg("gpt-4-pack")
Defensive patterns

Strategy: validation

Validate before calling

// don't drop a pack that is the org/user default or referenced by plans
const packNames = new Set(config.ModelPacks?.map(p => p.Name) ?? [])
if (defaultPackName && !packNames.has(defaultPackName)) {
  throw new Error('cannot delete default model pack ' + defaultPackName)
}

Type guard

function keepsDefaultPack(config, defaultPackName) {
  const names = new Set((config.ModelPacks ?? []).map(p => p.Name))
  return names.has(defaultPackName)
}

Try / catch

try {
  await client.ImportCustomModels(config)
} catch (err) {
  if (String(err.message).includes('error deleting model packs')) {
    // repoint plans/org defaults away from the pack, then retry
  }
}

Prevention

When it happens

Trigger: POST of a custom model config where existing org model packs are omitted from the payload and db.DeleteModelPacks(tx, auth.OrgId, toDeleteModelPackIds) returns a DB error (FK constraint from plans/default settings referencing the pack, connection failure, deadlock).

Common situations: A plan or org default settings still points at the model pack being removed; renaming a pack in config so the old one is treated as deleted; DB connectivity issues.

Related errors


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