@@ -71,6 +71,7 @@ def __init__(
7171 launcher : Launcher ,
7272 ui_helper : Optional [ui .UiHelper ] = None ,
7373 experimenter_validator : Optional [Callable [[str ], bool ]] = validate_aind_username ,
74+ use_cache : bool = True ,
7475 ):
7576 """
7677 Initializes the DefaultBehaviorPicker.
@@ -80,6 +81,7 @@ def __init__(
8081 launcher: The launcher instance for managing experiment execution
8182 ui_helper: Helper for user interface interactions. If None, uses launcher's ui_helper. Defaults to None
8283 experimenter_validator: Function to validate the experimenter's username. If None, no validation is performed. Defaults to validate_aind_username
84+ use_cache: Whether to use caching for selections. Defaults to True
8385 """
8486 self ._launcher = launcher
8587 self ._ui_helper = launcher .ui_helper if ui_helper is None else ui_helper
@@ -89,6 +91,7 @@ def __init__(
8991 self ._trainer_state : Optional [TrainerState ] = None
9092 self ._session : Optional [AindBehaviorSessionModel ] = None
9193 self ._cache_manager = CacheManager .get_instance ()
94+ self ._use_cache = use_cache
9295
9396 @property
9497 def ui_helper (self ) -> ui .UiHelper :
@@ -202,8 +205,13 @@ def pick_rig(self, model: Type[TRig]) -> TRig:
202205 rig_path : str | None = None
203206
204207 # Check cache for previously used rigs
205- cache = self ._cache_manager .try_get_cache ("rigs" )
208+ if self ._use_cache :
209+ cache = self ._cache_manager .try_get_cache ("rigs" )
210+ else :
211+ cache = None
212+
206213 if cache :
214+ cache .sort ()
207215 rig_path = self .ui_helper .prompt_pick_from_list (
208216 cache ,
209217 prompt = "Choose a rig:" ,
@@ -214,7 +222,7 @@ def pick_rig(self, model: Type[TRig]) -> TRig:
214222 rig = self ._load_rig_from_path (Path (rig_path ), model )
215223
216224 # Prompt user to select a rig if not already selected
217- while rig is None :
225+ while rig_path is None :
218226 available_rigs = glob .glob (os .path .join (self .rig_dir , "*.json" ))
219227 # We raise if no rigs are found to prevent an infinite loop
220228 if len (available_rigs ) == 0 :
@@ -230,23 +238,23 @@ def pick_rig(self, model: Type[TRig]) -> TRig:
230238 if rig_path is not None :
231239 rig = self ._load_rig_from_path (Path (rig_path ), model )
232240 assert rig_path is not None
241+ assert rig is not None
233242 # Add the selected rig path to the cache
234- cache = self ._cache_manager .add_to_cache ("rigs" , rig_path )
243+ self ._cache_manager .add_to_cache ("rigs" , rig_path )
235244 return rig
236245
237246 @staticmethod
238247 def _load_rig_from_path (path : Path , model : Type [TRig ]) -> TRig | None :
239248 """Load a rig configuration from a given path."""
240249 try :
241- if not isinstance (path , str ):
242- raise ValueError ("Invalid choice." )
243250 rig = model_from_json_file (path , model )
244251 logger .info ("Using %s." , path )
245252 return rig
246253 except pydantic .ValidationError as e :
247254 logger .error ("Failed to validate pydantic model. Try again. %s" , e )
248255 except ValueError as e :
249256 logger .info ("Invalid choice. Try again. %s" , e )
257+ return None
250258
251259 def pick_session (self , model : Type [TSession ] = AindBehaviorSessionModel ) -> TSession :
252260 """
@@ -408,8 +416,12 @@ def choose_subject(self, directory: str | os.PathLike) -> str:
408416 subject = picker.choose_subject("Subjects")
409417 ```
410418 """
411- subjects = self ._cache_manager .try_get_cache ("subjects" )
419+ if self ._use_cache :
420+ subjects = self ._cache_manager .try_get_cache ("subjects" )
421+ else :
422+ subjects = None
412423 if subjects :
424+ subjects .sort ()
413425 subject = self .ui_helper .prompt_pick_from_list (
414426 subjects ,
415427 prompt = "Choose a subject:" ,
@@ -446,11 +458,15 @@ def prompt_experimenter(self, strict: bool = True) -> Optional[List[str]]:
446458 print("Experimenters:", names)
447459 ```
448460 """
449- experimenters_cache = self ._cache_manager .try_get_cache ("experimenters" )
461+ if self ._use_cache :
462+ experimenters_cache = self ._cache_manager .try_get_cache ("experimenters" )
463+ else :
464+ experimenters_cache = None
450465 experimenter : Optional [List [str ]] = None
451466 _picked : str | None = None
452467 while experimenter is None :
453468 if experimenters_cache :
469+ experimenters_cache .sort ()
454470 _picked = self .ui_helper .prompt_pick_from_list (
455471 experimenters_cache ,
456472 prompt = "Choose an experimenter:" ,
0 commit comments