Open drawnwren opened 1 month ago
Here's the type signature of the httpx:AsyncClient.request method:
httpx:AsyncClient.request
async def request( self, method: str, url: URL | str, *, content: RequestContent | None = None, data: RequestData | None = None, files: RequestFiles | None = None, json: typing.Any | None = None, params: QueryParamTypes | None = None, headers: HeaderTypes | None = None, cookies: CookieTypes | None = None, auth: AuthTypes | UseClientDefault | None = USE_CLIENT_DEFAULT, follow_redirects: bool | UseClientDefault = USE_CLIENT_DEFAULT, timeout: TimeoutTypes | UseClientDefault = USE_CLIENT_DEFAULT, extensions: RequestExtensions | None = None, ) -> Response:
It's important that they use a custom type to indicate that no timeout is set. When you wrap their client here:
https://github.com/elevenlabs/elevenlabs-python/blob/317b471eebfea68c70c35839a1d5c6264018446f/src/elevenlabs/core/client_wrapper.py#L63
You use None as the default timeout, and pass the default timeout value to get here: https://github.com/elevenlabs/elevenlabs-python/blob/317b471eebfea68c70c35839a1d5c6264018446f/src/elevenlabs/core/http_client.py#L352
None
httpx treats timeout=None as no timeout at all (not the client default timeout), and this means that we're seeing some stuck connections in our code.
timeout=None
Here's the type signature of the
httpx:AsyncClient.request
method:It's important that they use a custom type to indicate that no timeout is set. When you wrap their client here:
https://github.com/elevenlabs/elevenlabs-python/blob/317b471eebfea68c70c35839a1d5c6264018446f/src/elevenlabs/core/client_wrapper.py#L63
You use
None
as the default timeout, and pass the default timeout value to get here: https://github.com/elevenlabs/elevenlabs-python/blob/317b471eebfea68c70c35839a1d5c6264018446f/src/elevenlabs/core/http_client.py#L352httpx treats
timeout=None
as no timeout at all (not the client default timeout), and this means that we're seeing some stuck connections in our code.