44"""
55from __future__ import annotations
66
7- import logging
7+ import os
88from pathlib import Path
99
1010from msgspec import ValidationError
1111from msgspec .yaml import decode as yaml_decode
12- from pioreactor .logging import create_logger
1312from pioreactor .structs import Model
14- from pioreactor .whoami import get_pioreactor_model
15- from pioreactor .whoami import get_pioreactor_version
1613from pioreactor .whoami import is_testing_env
1714
1815
19- if not is_testing_env ():
20- MODEL_DEFINITIONS_PATH = Path ("/home" ) / "pioreactor" / ".pioreactor" / "models"
21- else :
22- MODEL_DEFINITIONS_PATH = Path (".pioreactor" ) / "models"
23-
24-
2516## Built-in Pioreactor models with hard-coded defaults
2617CORE_MODELS = {
2718 ("pioreactor_20ml" , "1.0" ): Model (
3021 display_name = "Pioreactor 20ml, v1.0" ,
3122 reactor_capacity_ml = 20.0 ,
3223 reactor_max_fill_volume_ml = 18.0 ,
33- reactor_diameter_mm = 20 .0 ,
24+ reactor_diameter_mm = 27 .0 ,
3425 max_temp_to_reduce_heating = 63.0 ,
3526 max_temp_to_disable_heating = 65.0 ,
3627 max_temp_to_shutdown = 66.0 ,
4132 display_name = "Pioreactor 20ml, v1.1" ,
4233 reactor_capacity_ml = 20.0 ,
4334 reactor_max_fill_volume_ml = 18.0 ,
44- reactor_diameter_mm = 20 .0 ,
45- max_temp_to_reduce_heating = 63 .0 ,
46- max_temp_to_disable_heating = 65 .0 ,
47- max_temp_to_shutdown = 66 .0 ,
35+ reactor_diameter_mm = 27 .0 ,
36+ max_temp_to_reduce_heating = 78 .0 ,
37+ max_temp_to_disable_heating = 80 .0 ,
38+ max_temp_to_shutdown = 85 .0 ,
4839 ),
4940 ("pioreactor_40ml" , "1.0" ): Model (
5041 model_name = "pioreactor_40ml" ,
5142 model_version = "1.0" ,
5243 display_name = "Pioreactor 40ml, v1.0" ,
5344 reactor_capacity_ml = 40.0 ,
5445 reactor_max_fill_volume_ml = 38.0 ,
55- reactor_diameter_mm = 40 .0 ,
46+ reactor_diameter_mm = 27 .0 ,
5647 max_temp_to_reduce_heating = 78.0 ,
5748 max_temp_to_disable_heating = 80.0 ,
5849 max_temp_to_shutdown = 85.0 ,
6253
6354def load_contrib_model_definitions () -> list [Model ]:
6455 """Load all model definitions from YAML files under MODEL_DEFINITIONS_PATH."""
56+
57+ if not is_testing_env ():
58+ MODEL_DEFINITIONS_PATH = Path ("/home" ) / "pioreactor" / ".pioreactor" / "models"
59+ else :
60+ MODEL_DEFINITIONS_PATH = Path (os .environ ["DOT_PIOREACTOR" ]) / "models"
61+
6562 models : list [Model ] = []
6663 if not MODEL_DEFINITIONS_PATH .exists ():
6764 return models
@@ -70,6 +67,8 @@ def load_contrib_model_definitions() -> list[Model]:
7067 m = yaml_decode (file .read_bytes (), type = Model )
7168 models .append (m )
7269 except ValidationError as e :
70+ from pioreactor .logging import create_logger
71+
7372 create_logger ("models" , experiment = "$experiment" ).error (
7473 f"Error loading model definition { file } : { e } "
7574 )
@@ -81,16 +80,3 @@ def load_contrib_model_definitions() -> list[Model]:
8180 ** CORE_MODELS ,
8281 ** {(m .model_name , m .model_version ): m for m in load_contrib_model_definitions ()},
8382}
84-
85-
86- def get_current_model () -> Model :
87- """Return the Model struct for this Pioreactor (by env/EERPOM/HARDWARE env).
88- Falls back to the 20ml v1.0 factory default if unrecognized.
89- """
90- name = get_pioreactor_model ()
91- version = "." .join (map (str , get_pioreactor_version ()))
92- try :
93- return registered_models [(name , version )]
94- except KeyError :
95- logging .getLogger ("pioreactor.models" ).error (f"Unknown Pioreactor model { name } v{ version } " )
96- raise ValueError (f"Unknown Pioreactor model { name } v{ version } ." )
0 commit comments