#31245 [Bug]: close_litellm_async_clients() never closes cached AsyncOpenAI clients (leaks "Unclosed client session")
### What happened?
`close_litellm_async_clients()` is supposed to close every cached async HTTP client at shutdown. It misses the cached **OpenAI SDK** clients.
litellm caches the OpenAI client as an `openai.AsyncOpenAI` object (via `BaseOpenAILLM.set_cached_openai_client` β `in_memory_llm_clients_cache`), and builds it on litellm's own aiohttp transport (`OpenAIChatCompletion._get_async_http_client` β `AsyncHTTPHandler._create_async_transport`). So each cached OpenAI client owns an aiohttp `ClientSession`.
But the cleanup loop in `async_client_cleanup.py` dispatches on three shapes:
```python if isinstance(handler, BaseLLMAIOHTTPHandler) and hasattr(handler, "close"): ... elif hasattr(handler, "client"): # AsyncHTTPHandler ... elif hasattr(handler, "aclose"): # "any other objects" await handler.aclose() ```
`AsyncOpenAI` matches **none** of these: it is not a `BaseLLMAIOHTTPHandler`, it has no `.client` attribute, and its async teardown is named `.close()`, **not `.aclose()`**. So every cached OpenAI/Azure-OpenAI client falls through all three branches and is never closed β its aiohttp session surfaces as `Unclosed client sessβ¦