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
- Repoint or delete any plan/org settings that reference the model pack before removing it from the config
- Read the wrapped error in server logs to identify the failing constraint
- Retry the import once the reference is removed; the rollback keeps prior state consistent
- 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
- Repoint org/plan default settings before removing a model pack from config
- Rename packs deliberately — a rename is treated as delete+create in this flow
- Retry after failure; the transactional rollback keeps prior packs intact
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
- error creating invite: %v
- error deleting invite: %v
- error adding org membership: %v
- error deleting custom models: %w
- error deleting custom providers: %w
AI-assisted analysis of plandex-ai/plandex@e2d772072e (2026-09-05).
Data as JSON: /api/errors/889776d7fdba0802.
Report an issue: GitHub.