Simplify the logic for Docker provider

This commit is contained in:
yuanmengqi
2025-07-23 17:19:47 +00:00
parent fd7381210e
commit 0a2929137b

View File

@@ -163,7 +163,6 @@ class DesktopEnv(gym.Env):
self.vlc_port = 8080 self.vlc_port = 8080
# Initialize with default (no proxy) provider # Initialize with default (no proxy) provider
self.current_use_proxy = False
self.manager, self.provider = create_vm_manager_and_provider(provider_name, region, use_proxy=False) self.manager, self.provider = create_vm_manager_and_provider(provider_name, region, use_proxy=False)
self.os_type = os_type self.os_type = os_type
@@ -194,15 +193,8 @@ class DesktopEnv(gym.Env):
self.require_terminal = require_terminal self.require_terminal = require_terminal
# Initialize emulator and controller # Initialize emulator and controller
# Docker provider needs delayed initialization due to container lifecycle logger.info("Initializing...")
if provider_name == "docker": self._start_emulator()
logger.info("Docker provider detected - will initialize on first reset()")
# Initialize controllers as None for Docker - they'll be set up in reset()
self.controller = None
self.setup_controller = None
else:
logger.info("Initializing...")
self._start_emulator()
# mode: human or machine # mode: human or machine
self.instruction = None self.instruction = None
@@ -232,6 +224,7 @@ class DesktopEnv(gym.Env):
# Get the ip from the virtual machine, and setup the controller # Get the ip from the virtual machine, and setup the controller
vm_ip_ports = self.provider.get_ip_address(self.path_to_vm).split(':') vm_ip_ports = self.provider.get_ip_address(self.path_to_vm).split(':')
self.vm_ip = vm_ip_ports[0] self.vm_ip = vm_ip_ports[0]
# Get the ports from the virtual machine (for Docker provider only)
if len(vm_ip_ports) > 1: if len(vm_ip_ports) > 1:
self.server_port = int(vm_ip_ports[1]) self.server_port = int(vm_ip_ports[1])
self.chromium_port = int(vm_ip_ports[2]) self.chromium_port = int(vm_ip_ports[2])
@@ -271,17 +264,6 @@ class DesktopEnv(gym.Env):
self.action_history.clear() self.action_history.clear()
for attempt in range(MAX_RETRIES): for attempt in range(MAX_RETRIES):
# Check and handle proxy requirement changes BEFORE starting emulator
if task_config is not None:
# Only consider task proxy requirement if proxy is enabled at system level
task_use_proxy = task_config.get("proxy", False) and self.enable_proxy
if not self.enable_proxy and task_config.get("proxy", False):
logger.info("Task requires proxy but proxy is disabled at system level, ignoring proxy requirement.")
if task_use_proxy != self.current_use_proxy:
# keep because get_info_from_website depend on this
self.current_use_proxy = task_use_proxy
# Only revert to snapshot if environment has been used (step/setup) # Only revert to snapshot if environment has been used (step/setup)
# This optimization is especially important for cloud providers like AWS # This optimization is especially important for cloud providers like AWS
# where unnecessary snapshot operations are costly and time-consuming # where unnecessary snapshot operations are costly and time-consuming
@@ -296,11 +278,6 @@ class DesktopEnv(gym.Env):
else: else:
logger.info("Environment is clean, skipping snapshot revert (provider: {}).".format(self.provider_name)) logger.info("Environment is clean, skipping snapshot revert (provider: {}).".format(self.provider_name))
# Initialize Docker provider controllers if not already done
if self.provider_name == "docker" and self.controller is None:
logger.info("Initializing Docker provider controllers...")
self._start_emulator()
if task_config is not None: if task_config is not None:
if task_config.get("proxy", False) and self.enable_proxy: if task_config.get("proxy", False) and self.enable_proxy:
# If using proxy and proxy is enabled, set up the proxy configuration # If using proxy and proxy is enabled, set up the proxy configuration