#31481 [Bug]: adaptive_router reads model cost from litellm_params.input_cost_per_token, not model_info — silently zeroes out cost-weighted routing
### Check for existing issues
- [x] I have searched the existing issues and checked that my issue is not a duplicate.
### What happened?
When configuring `auto_router/adaptive_router` with `weights: {quality: X, cost: Y}`, the router's cost-aware scoring silently does nothing if `input_cost_per_token` is only declared under `model_info` (the conventional/documented location for cost tracking elsewhere in LiteLLM, e.g. cost logging, budget alerts).
Root cause (found by reading router.py and bandit.py inside the installed package):
`Router.init_adaptive_router_deployment` builds `model_to_cost` by reading `lp_dict.get("input_cost_per_token")` from each model's `litellm_params`, not from `model_info`:
``` lp = d.get("litellm_params") if isinstance(d, dict) else d.litellm_params lp_dict = lp if isinstance(lp, dict) else (lp.model_dump() if lp else {}) cost = lp_dict.get("input_cost_per_token") if cost is not None: model_to_cost[name] = float(cost) ```
### Steps to Reproduce
Configure model_list with at least two models behind auto_router/adaptive_router, declaring input_cost_per_token only under model_info (not litellm_params), e.g.: ``` model_list:
model_name: cheap-mode…