#27390 [Bug]: router.aspeech() missing _update_kwargs_with_deployment() โ TTS spend always $0 for custom-priced router deployments
### Check for existing issues
- [x] I have searched the existing issues and checked that my issue is not a duplicate.
### What happened?
`Router.aspeech()` is the only router method that does not call `self._update_kwargs_with_deployment()` after `_update_kwargs_before_fallbacks()`. TTS requests through the proxy always record `spend = $0` when the model uses custom pricing (`input_cost_per_character` in `model_info`).
**Expected:** spend > $0, calculated from `input_cost_per_character ร character_count` **Actual:** `spend = 0.0` for every TTS call
**Root cause:** `_update_kwargs_with_deployment()` stores the deployment's UUID into `kwargs["metadata"]["model_info"]["id"]`. The cost callback reads this UUID via `get_router_model_id()` to look up the deployment's custom pricing. Without the call, `get_router_model_id()` returns `None`, the cost calculator falls back to the bare model name which has no pricing entry, and spend = $0.
Every other router method makes this call โ `aspeech` is the only exception:
| Method | calls `_update_kwargs_with_deployment`? | |---|---| | `acompletion` | โ | | `aembedding` | โ | | `atranscription` | โ | | `arerank` | โ | | `aimage_generation` |โฆ