Files
Dorod-Sky/skyvern/forge/forge_openai_client.py
2025-12-01 18:02:17 -07:00

25 lines
706 B
Python

import asyncio
from openai import DefaultAsyncHttpxClient
class ForgeAsyncHttpxClientWrapper(DefaultAsyncHttpxClient):
"""
Wrapper around OpenAI's AsyncHttpxClientWrapper to mask teardown races.
The upstream `__del__` checks `self.is_closed`, but during interpreter
shutdown httpx internals may already be None, which raises:
AttributeError: 'NoneType' object has no attribute 'CLOSED'
We defensively swallow that destructor error so shutdown logs stay clean.
"""
def __del__(self) -> None:
try:
if self.is_closed:
return
asyncio.get_running_loop().create_task(self.aclose())
except Exception:
pass