diff --git a/backend/open_webui/utils/misc.py b/backend/open_webui/utils/misc.py index 7b52f0afd..345165db2 100644 --- a/backend/open_webui/utils/misc.py +++ b/backend/open_webui/utils/misc.py @@ -906,10 +906,16 @@ async def cleanup_response( ): if response: if not response.closed: - await response.close() + # aiohttp 3.9+ made ClientResponse.close() synchronous (returns None). + # Older versions returned a coroutine. Handle both gracefully. + result = response.close() + if result is not None: + await result if session: if not session.closed: - await session.close() + result = session.close() + if result is not None: + await result async def stream_wrapper(response, session, content_handler=None): diff --git a/backend/open_webui/utils/session_pool.py b/backend/open_webui/utils/session_pool.py index e91579f4a..d74eae4f0 100644 --- a/backend/open_webui/utils/session_pool.py +++ b/backend/open_webui/utils/session_pool.py @@ -93,10 +93,16 @@ async def cleanup_response( """ if response: if not response.closed: - await response.close() + # aiohttp 3.9+ made ClientResponse.close() synchronous (returns None). + # Older versions returned a coroutine. Handle both gracefully. + result = response.close() + if result is not None: + await result if session: if not session.closed: - await session.close() + result = session.close() + if result is not None: + await result async def stream_wrapper(response, session=None, content_handler=None):