1212
1313import pytest
1414import torch
15- from omegaconf import DictConfig
16- from tensordict import TensorDict
17- from tensordict .tensorclass import NonTensorData
1815
1916import torchrl .envs .libs .openenv as openenv_mod
2017import torchrl .envs .llm .libs .openenv as openenv_chat_mod
18+ from tensordict import TensorDict
19+ from tensordict .tensorclass import NonTensorData
2120from torchrl .data import LazyStackStorage , ReplayBuffer
2221from torchrl .data .llm import History
2322from torchrl .envs .libs .openenv import OpenEnvEnv , OpenEnvWrapper
2625from torchrl .modules .llm .policies .common import ChatHistory
2726from torchrl .objectives .llm .grpo import MCAdvantage
2827
28+ _has_omegaconf = importlib .util .find_spec ("omegaconf" ) is not None
29+
2930
3031@dataclass
3132class _StepResult :
@@ -46,6 +47,23 @@ def model_dump(self):
4647 return {"prompt" : ["nested" , {"value" : 1 }], "reward" : 2.0 , "done" : True }
4748
4849
50+ class _Config (dict ):
51+ def __init__ (self , data ):
52+ super ().__init__ ((key , self ._convert (value )) for key , value in data .items ())
53+
54+ @classmethod
55+ def _convert (cls , value ):
56+ if isinstance (value , dict ):
57+ return cls (value )
58+ return value
59+
60+ def __getattr__ (self , name ):
61+ try :
62+ return self [name ]
63+ except KeyError as err :
64+ raise AttributeError (name ) from err
65+
66+
4967class _SyncOpenEnv :
5068 def __init__ (self ):
5169 self .connected = False
@@ -226,6 +244,8 @@ def test_rand_step_check_env_specs_and_rollout(self):
226244
227245class TestOpenEnvGRPO :
228246 def test_make_env_openenv_with_local_fixture (self , monkeypatch ):
247+ if not _has_omegaconf :
248+ pytest .skip ("omegaconf is required to import the GRPO recipe helpers" )
229249 pytest .importorskip ("transformers" )
230250 pytest .importorskip ("openenv" )
231251 spec = importlib .util .spec_from_file_location (
@@ -246,7 +266,7 @@ def test_make_env_openenv_with_local_fixture(self, monkeypatch):
246266 "from_env" ,
247267 staticmethod (lambda name : _TextAction ),
248268 )
249- cfg = DictConfig (
269+ cfg = _Config (
250270 {
251271 "env" : {
252272 "dataset" : "openenv" ,
0 commit comments