#35459 [Bug]: LowestCostLoggingHandler.log_success_event raises AttributeError when litellm_params["model_info"] is explicitly None (usage-based-routing-v2)
In `litellm/router_strategy/lowest_cost.py`, both `log_success_event` and `async_log_success_event` read the deployment id via:
```python kwargs["litellm_params"].get("model_info", {}).get("id", None) ```
`dict.get(key, default)` only returns `default` when the key is *absent* — not when it's present but explicitly `None`. When a request's `litellm_params` has `model_info` explicitly set to `None` (observed on calls through the MCP gateway aggregate endpoint, which don't carry a full router deployment), the first `.get()` returns `None` itself, and the chained `.get("id", None)` throws `AttributeError: 'NoneType' object has no attribute 'get'`.
Both call sites wrap this in a bare `except Exception` that logs and swallows, so it's not a request failure — but the cost map silently never updates for these calls (degrading the lowest-cost routing signal) and it spams exception logs on every affected request.
**Repro:** enable `routing_strategy: usage-based-routing-v2`, configure an MCP server, hit the aggregate `/mcp` endpoint, grep proxy logs for an `AttributeError` originating in `lowest_cost.py`.
**Suggested fix:** ```python (kwargs["litellm_params"].get("model_info") or {}).ge…