From 3e49f0f82713e0ea551a5dbae0e8ebfec154ff67 Mon Sep 17 00:00:00 2001 From: OpenHands Date: Sun, 1 Dec 2024 17:05:01 -0500 Subject: [PATCH] Fix issue #5277: [Bug]: AttributeError: 'EventStreamRuntime' object has no attribute 'sid' if runtime_extra_deps is not None (#5330) Co-authored-by: Engel Nyst --- .../runtime/impl/eventstream/eventstream_runtime.py | 13 +++++++------ openhands/runtime/impl/remote/remote_runtime.py | 1 - openhands/server/session/README.md | 12 ++++++------ openhands/server/session/session.py | 2 -- 4 files changed, 13 insertions(+), 15 deletions(-) diff --git a/openhands/runtime/impl/eventstream/eventstream_runtime.py b/openhands/runtime/impl/eventstream/eventstream_runtime.py index 30f78f88a2de..8cedcbe54603 100644 --- a/openhands/runtime/impl/eventstream/eventstream_runtime.py +++ b/openhands/runtime/impl/eventstream/eventstream_runtime.py @@ -188,12 +188,6 @@ def __init__( # Buffer for container logs self.log_buffer: LogBuffer | None = None - if self.config.sandbox.runtime_extra_deps: - self.log( - 'debug', - f'Installing extra user-provided dependencies in the runtime image: {self.config.sandbox.runtime_extra_deps}', - ) - self.init_base_runtime( config, event_stream, @@ -205,6 +199,13 @@ def __init__( headless_mode, ) + # Log runtime_extra_deps after base class initialization so self.sid is available + if self.config.sandbox.runtime_extra_deps: + self.log( + 'debug', + f'Installing extra user-provided dependencies in the runtime image: {self.config.sandbox.runtime_extra_deps}', + ) + async def connect(self): self.send_status_message('STATUS$STARTING_RUNTIME') try: diff --git a/openhands/runtime/impl/remote/remote_runtime.py b/openhands/runtime/impl/remote/remote_runtime.py index 548e8a0ee23e..4226bfef8f15 100644 --- a/openhands/runtime/impl/remote/remote_runtime.py +++ b/openhands/runtime/impl/remote/remote_runtime.py @@ -10,7 +10,6 @@ import tenacity from openhands.core.config import AppConfig -from openhands.core.logger import openhands_logger as logger from openhands.events import EventStream from openhands.events.action import ( BrowseInteractiveAction, diff --git a/openhands/server/session/README.md b/openhands/server/session/README.md index b367ba586495..12f7e270d622 100644 --- a/openhands/server/session/README.md +++ b/openhands/server/session/README.md @@ -8,19 +8,19 @@ interruptions are recoverable. There are 3 main server side event handlers: * `connect` - Invoked when a new connection to the server is established. (This may be via http or WebSocket) -* `oh_action` - Invoked when a connected client sends an event (Such as `INIT` or a prompt for the Agent) - +* `oh_action` - Invoked when a connected client sends an event (Such as `INIT` or a prompt for the Agent) - this is distinct from the `oh_event` sent from the server to the client. * `disconnect` - Invoked when a connected client disconnects from the server. ## Init Each connection has a unique id, and when initially established, is not associated with any session. An -`INIT` event must be sent to the server in order to attach a connection to a session. The `INIT` event -may optionally include a GitHub token and a token to connect to an existing session. (Which may be running -locally or may need to be hydrated). If no token is received as part of the init event, it is assumed a +`INIT` event must be sent to the server in order to attach a connection to a session. The `INIT` event +may optionally include a GitHub token and a token to connect to an existing session. (Which may be running +locally or may need to be hydrated). If no token is received as part of the init event, it is assumed a new session should be started. ## Disconnect -The (manager)[manager.py] manages connections and sessions. Each session may have zero or more connections +The (manager)[manager.py] manages connections and sessions. Each session may have zero or more connections associated with it, managed by invocations of `INIT` and disconnect. When a session no longer has any connections associated with it, after a set amount of time (determined by `config.sandbox.close_delay`), -the session and runtime are passivated (So will need to be rehydrated to continue.) +the session and runtime are passivated (So will need to be rehydrated to continue.) diff --git a/openhands/server/session/session.py b/openhands/server/session/session.py index e26d237a8764..2b0ec8742cff 100644 --- a/openhands/server/session/session.py +++ b/openhands/server/session/session.py @@ -8,7 +8,6 @@ from openhands.core.const.guide_url import TROUBLESHOOTING_URL from openhands.core.logger import openhands_logger as logger from openhands.core.schema import AgentState -from openhands.core.schema.action import ActionType from openhands.core.schema.config import ConfigType from openhands.events.action import MessageAction, NullAction from openhands.events.event import Event, EventSource @@ -23,7 +22,6 @@ from openhands.llm.llm import LLM from openhands.server.session.agent_session import AgentSession from openhands.storage.files import FileStore -from openhands.utils.async_utils import call_coro_in_bg_thread ROOM_KEY = 'room:{sid}'