#22100 [Bug]: asyncio.CancelledError in aiohttp transport bypasses retry logic, logging, and exception mapping
### Check for existing issues
- [x] I have searched the existing issues and checked that my issue is not a duplicate.
### What happened?
When using the /v1/responses endpoint with the aiohttp transport (default), intermittent asyncio.CancelledError exceptions during DNS resolution are not caught by any error handling layer in LiteLLM. This results in a bare 500 returned to the client with no retries, no logging, and no visibility in the LiteLLM UI. We don't even know why these errors happen in the first place, but some logging / retry is a must for debugging it.
Root cause:
asyncio.CancelledError inherits from BaseException (Python 3.9+), not Exception. Three layers all miss it:
1. aiohttp_transport.py โ map_aiohttp_exceptions โ catches Exception, so CancelledError passes through 2. router.py โ _acompletion โ catches Exception for retry/logging, so CancelledError is never logged or retried 3. proxy_server.py โ openai_exception_handler โ catches ProxyException only
Impact:
- Router does not retry on a different deployment (even though other healthy deployments are available) - No log entry anywhere โ not in proxy logs, not in the LiteLLM UI spend logs - Client โฆ