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
- Identify which model failed from the wrapped error
- Validate the model payload against DB constraints (unique ids/names)
- 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.