e2b-dev / E2B

Secure open source cloud runtime for AI apps & AI agents
https://e2b.dev/docs
Apache License 2.0
6.97k stars 455 forks source link

WebSocket exception leading to program being stuck #429

Open Neeraj319 opened 2 months ago

Neeraj319 commented 2 months ago

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.

  1. Go to '...'
  2. Click on '....'
  3. Scroll down to '....'
  4. 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):

Smartphone (please complete the following information):

Additional context Add any other context about the problem here.

ValentaTomas commented 2 months ago

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.

ValentaTomas commented 2 months ago

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.

ValentaTomas commented 1 month ago

Hey @Neeraj319 was this solved in the end?

Neeraj319 commented 1 month ago

No, thanks for suggestion though. We can close this.