瀏覽代碼

Fix issue #5277: [Bug]: AttributeError: 'EventStreamRuntime' object has no attribute 'sid' if runtime_extra_deps is not None (#5330)

Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
OpenHands 1 年之前
父節點
當前提交
3e49f0f827

+ 7 - 6
openhands/runtime/impl/eventstream/eventstream_runtime.py

@@ -188,12 +188,6 @@ class EventStreamRuntime(Runtime):
         # 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 @@ class EventStreamRuntime(Runtime):
             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:

+ 0 - 1
openhands/runtime/impl/remote/remote_runtime.py

@@ -10,7 +10,6 @@ import requests
 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,

+ 6 - 6
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.)

+ 0 - 2
openhands/server/session/session.py

@@ -8,7 +8,6 @@ from openhands.core.config import AppConfig
 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.events.stream import EventStreamSubscriber
 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}'