#29064 upsert_deployment does not clean up stale entries in team_pattern_routers / pattern_router on model update
### Check for existing issues
- [x] I have searched the existing issues and checked that my issue is not a duplicate.
### What happened?
When a wildcard deployment's `litellm_params` are updated (e.g. correcting the `model` field via `PATCH /model/{id}/update`), `upsert_deployment` removes the old deployment from `model_list` but does **not** remove the stale entry from `team_pattern_routers` or `pattern_router`. The subsequent `add_deployment` call appends a new entry alongside the stale one. The router then round-robins between the correct and stale deployments, causing **intermittent routing failures**.
We discovered this in production after patching a team BYOK wildcard model (`openai/*`) that had a double-prefixed `litellm_params.model` (`openai/openai/*`). After the DB fix via `PATCH /model/{id}/update`, ~50% of requests still failed because stale deployment entries persisted in the in-memory pattern router across all replicas. Only a full pod restart resolved the issue.
**Root Cause:**
`upsert_deployment` (router.py:7910) handles updates by: 1. Removing the old deployment from `self.model_list` (line 7945) 2. Calling `self.add_deployment(deployment)` (line 7953) → `_ad…