from contextlib import asynccontextmanager

import aiohttp


@asynccontextmanager
async def model_http_session(*, proxy_url: str, http=None, timeout=None):
    """Borrow direct sessions; isolate CONNECT from unrelated HTTP clients."""
    if http is not None and not proxy_url:
        yield http
        return

    connector = None
    if proxy_url:
        from aiohttp_socks import ProxyConnector

        # Binary multipart must use the proxy's streaming CONNECT protocol,
        # not its JSON HTTP request envelope. Never fall back on proxy failure.
        connector = ProxyConnector.from_url(proxy_url)
    async with aiohttp.ClientSession(connector=connector, timeout=timeout) as session:
        yield session
