From 477b6bcf242e14a2660650274de29abd56c1baa0 Mon Sep 17 00:00:00 2001 From: utsab Date: Tue, 30 Jun 2026 22:26:13 +0545 Subject: [PATCH] fix: don't overwrite extra_volumes defaults with empty dict in get_factor_env/get_model_env Both get_factor_env() and get_model_env() used extra_volumes: dict = {} as default and unconditionally assigned env.conf.extra_volumes = extra_volumes.copy(), which wiped out the correct defaults set by QlibDockerConf (e.g., mounting ~/.qlib/ to /root/.qlib/). This caused StopIteration in QTDockerEnv.prepare() when calling next(iter(self.conf.extra_volumes.keys())) on the empty dict. Changed default to None and only overwrite when a non-None value is explicitly passed. --- rdagent/components/coder/factor_coder/config.py | 5 +++-- rdagent/components/coder/model_coder/conf.py | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/rdagent/components/coder/factor_coder/config.py b/rdagent/components/coder/factor_coder/config.py index a09ae666a..809d6a9d5 100644 --- a/rdagent/components/coder/factor_coder/config.py +++ b/rdagent/components/coder/factor_coder/config.py @@ -31,14 +31,15 @@ class FactorCoSTEERSettings(CoSTEERSettings): def get_factor_env( conf_type: Optional[str] = None, - extra_volumes: dict = {}, + extra_volumes: Optional[dict] = None, running_timeout_period: int = 600, enable_cache: Optional[bool] = None, ) -> Env: conf = FactorCoSTEERSettings() if hasattr(conf, "python_bin"): env = LocalEnv(conf=(CondaConf(conda_env_name=os.environ.get("CONDA_DEFAULT_ENV")))) - env.conf.extra_volumes = extra_volumes.copy() + if extra_volumes is not None: + env.conf.extra_volumes = extra_volumes.copy() env.conf.running_timeout_period = running_timeout_period if enable_cache is not None: env.conf.enable_cache = enable_cache diff --git a/rdagent/components/coder/model_coder/conf.py b/rdagent/components/coder/model_coder/conf.py index 1cb8d2d35..e7251aa9d 100644 --- a/rdagent/components/coder/model_coder/conf.py +++ b/rdagent/components/coder/model_coder/conf.py @@ -15,7 +15,7 @@ class ModelCoSTEERSettings(CoSTEERSettings): def get_model_env( conf_type: Optional[str] = None, - extra_volumes: dict = {}, + extra_volumes: Optional[dict] = None, running_timeout_period: int = 600, enable_cache: Optional[bool] = None, ) -> Env: @@ -27,7 +27,8 @@ def get_model_env( else: raise ValueError(f"Unknown env type: {conf.env_type}") - env.conf.extra_volumes = extra_volumes.copy() + if extra_volumes is not None: + env.conf.extra_volumes = extra_volumes.copy() env.conf.running_timeout_period = running_timeout_period if enable_cache is not None: env.conf.enable_cache = enable_cache