WebSocket exception leading to program being stuck
Describe the bug If an exception occurs while receiving messages from the e2b servers, the following code fails to place anything in the queue, causing the entire flow to get stuck. There is currently no way for us to detect if a WebSocket error has occurred, as the client code abstracts this part away, only adding a log line. It would be beneficial if the client provided a mechanism, such as a timeout feature, that allows us as users of the client library to be aware of errors, enabling us to handle them ourselves.
The issue is happening in the following function of file eb2/sandbox/webscoket_client.py:
async def _receive_message(self):
try:
if not self._ws:
logger.error("No WebSocket connection")
return
async for message in self._ws:
logger.debug(f"WebSocket received message: {message}".strip())
self._queue_out.put(message)
except Exception as e:
logger.error(f"WebSocket received error while receiving messages: {e}")
To Reproduce Happens at random, Use the CodeInterpreter class and start a websocket.
- Go to '...'
- Click on '....'
- Scroll down to '....'
- See error
Expected behavior Should be a way for the end user to know that there was an error.
Browser console output
Terminal commands & output
WebSocket received error while receiving messages sent 1011 (internal error) keepalive ping timeout; no close frame received
Screenshots If applicable, add screenshots to help explain your problem.
Desktop (please complete the following information):
- OS: Linux
- Browser [e.g. chrome, safari]
- Version : e2b=0.17.1, e2b-code-interpreter=0.0.3
Smartphone (please complete the following information):
- Device: [e.g. iPhone6]
- OS: [e.g. iOS8.1]
- Browser [e.g. stock browser, safari]
- Version [e.g. 22]
Additional context Add any other context about the problem here.
Hey @Neeraj319, can you try switching to the new Beta SDK (https://e2b.dev/docs/guide/beta-migration)? It gets rid of websockets and we are raising more granular exceptions.
We also included a request timeout that you can pass to all requests/operations so you can ensure the SDK won't hang and you will get an error.
Hey @Neeraj319 was this solved in the end?
No, thanks for suggestion though. We can close this.