4444from .optimizely_config import OptimizelyConfig , OptimizelyConfigService
4545from .optimizely_user_context import OptimizelyUserContext , UserAttributes
4646from .project_config import ProjectConfig
47+ from .cmab .cmab_service import DefaultCmabService
4748
4849if TYPE_CHECKING :
4950 # prevent circular dependency by skipping import at runtime
@@ -69,7 +70,8 @@ def __init__(
6970 datafile_access_token : Optional [str ] = None ,
7071 default_decide_options : Optional [list [str ]] = None ,
7172 event_processor_options : Optional [dict [str , Any ]] = None ,
72- settings : Optional [OptimizelySdkSettings ] = None
73+ settings : Optional [OptimizelySdkSettings ] = None ,
74+ cmab_service : Optional [DefaultCmabService ] = None
7375 ) -> None :
7476 """ Optimizely init method for managing Custom projects.
7577
@@ -98,6 +100,7 @@ def __init__(
98100 default_decide_options: Optional list of decide options used with the decide APIs.
99101 event_processor_options: Optional dict of options to be passed to the default batch event processor.
100102 settings: Optional instance of OptimizelySdkSettings for sdk configuration.
103+ cmab_service: Optional instance of DefaultCmabService for Contextual Multi-Armed Bandit (CMAB) support.
101104 """
102105 self .logger_name = '.' .join ([__name__ , self .__class__ .__name__ ])
103106 self .is_valid = True
@@ -169,7 +172,10 @@ def __init__(
169172 self ._setup_odp (self .config_manager .get_sdk_key ())
170173
171174 self .event_builder = event_builder .EventBuilder ()
172- self .decision_service = decision_service .DecisionService (self .logger , user_profile_service )
175+ if cmab_service :
176+ cmab_service .logger = self .logger
177+ self .cmab_service = cmab_service
178+ self .decision_service = decision_service .DecisionService (self .logger , user_profile_service , cmab_service )
173179 self .user_profile_service = user_profile_service
174180
175181 def _validate_instantiation_options (self ) -> None :
0 commit comments