def test_feature_importance(): num_significant_features = 6 ion_instance_id = ION1.ION_INSTANCE_ID ion_node_id = ION1.NODE_1_ID pipeline_instance_id = ION1.PIPELINE_INST_ID_1 set_mlops_env(ion_id=ion_instance_id, ion_node_id=ion_node_id, model_id=ION1.MODEL_ID) rest_helper = MlOpsRestFactory().get_rest_helper(MLOpsMode.AGENT, mlops_server="localhost", mlops_port="3456", token="") rest_helper.set_prefix(Constants.URL_MLOPS_PREFIX) with requests_mock.mock() as m: m.get(rest_helper.url_get_workflow_instance(ion_instance_id), json=test_workflow_instances) m.get(rest_helper.url_get_ees(), json=test_ee_info) m.get(rest_helper.url_get_agents(), json=test_agents_info) m.get(rest_helper.url_get_model_list(), json=test_models_info) m.get(rest_helper.url_get_health_thresholds(ion_instance_id), json=test_health_info) m.get(rest_helper.url_get_model_stats(ION1.MODEL_ID), json=test_model_stats) m.get(rest_helper.url_get_uuid("model"), json={"id": "model_5906255e-0a3d-4fef-8653-8d41911264fb"}) m.post(rest_helper.url_post_stat(pipeline_instance_id), json={}) # Test Python channel mlops.init(ctx=None, mlops_mode=MLOpsMode.AGENT) published_model = mlops.Model(name="dtr_mlops_model", model_format=ModelFormat.SPARKML, description="model of decision tree regression with explainability") published_model.feature_importance(model=FinalModel, feature_names=FinalModel.feature_names, num_significant_features=num_significant_features) mlops.done()
def test_mlops_structure_api(): ion_instance_id = ION1.ION_INSTANCE_ID ion_node_id = ION1.NODE_1_ID token = ION1.TOKEN set_mlops_env(ion_id=ion_instance_id, ion_node_id=ion_node_id, token=token, model_id=ION1.MODEL_ID) rest_helper = MlOpsRestFactory().get_rest_helper(MLOpsMode.AGENT, mlops_server="localhost", mlops_port="3456", token=token) rest_helper.set_prefix(Constants.URL_MLOPS_PREFIX) with requests_mock.mock() as m: m.get(rest_helper.url_get_workflow_instance(ion_instance_id), json=test_workflow_instances) m.get(rest_helper.url_get_ees(), json=test_ee_info) m.get(rest_helper.url_get_agents(), json=test_agents_info) m.get(rest_helper.url_get_model_list(), json=test_models_info) m.get(rest_helper.url_get_health_thresholds(ion_instance_id), json=test_health_info) m.get(rest_helper.url_get_model_stats(ION1.MODEL_ID), json=test_model_stats) m.get(rest_helper.url_get_uuid("model"), json={"id": "model_5906255e-0a3d-4fef-8653-8d41911264fb"}) pm.init(ctx=None, mlops_mode=MLOpsMode.AGENT) assert pm.get_mlapp_id() == ION1.ION_ID assert pm.get_mlapp_name() == ION1.ION_NAME curr_node = pm.get_current_node() assert curr_node.id == ion_node_id nodes = pm.get_nodes() assert len(nodes) == 2 node0 = pm.get_node('1') assert node0 is not None assert node0.pipeline_pattern_id == ION1.PIPELINE_PATTERN_ID_1 assert node0.pipeline_instance_id == ION1.PIPELINE_INST_ID_1 node0_agents = pm.get_agents('1') assert len(node0_agents) == 1 assert node0_agents[0].id == ION1.AGENT_ID_0 assert node0_agents[0].hostname == 'localhost' agent = pm.get_agent('1', ION1.AGENT_ID_0) assert agent.id == ION1.AGENT_ID_0 assert agent.hostname == 'localhost' model = pm.current_model() assert model is not None assert model.metadata.modelId == ION1.MODEL_ID pm.done()
def build_ion_ctx(): ion_instance_id = ION1.ION_ID ion_node_id = ION1.NODE_1_ID token = "token_token_token" set_mlops_env(ion_id=ion_instance_id, ion_node_id=ion_node_id, token=token) rest_helper = MlOpsRestFactory().get_rest_helper(MLOpsMode.AGENT, mlops_server="localhost", mlops_port="3456", token=token) with requests_mock.mock() as m: m.get(rest_helper.url_get_workflow_instance(ion_instance_id), json=test_workflow_instances) m.get(rest_helper.url_get_ees(), json=test_ee_info) m.get(rest_helper.url_get_agents(), json=test_agents_info) m.get(rest_helper.url_get_health_thresholds(ion_instance_id), json=test_health_info) ci = ConfigInfo().read_from_env() mlops_ctx = MLOpsCtx(config=ci, mode=MLOpsMode.ATTACH) return mlops_ctx
def test_attach(): mlapp_id = "144a045d-c927-4afb-a85c-5224bd68f1bb" ion_instance_id = ION1.ION_INSTANCE_ID ion_node_id = ION1.NODE_1_ID token = ION1.TOKEN set_mlops_env(ion_id=ion_instance_id, ion_node_id=ion_node_id, token=token, model_id=ION1.MODEL_ID) rest_helper = MlOpsRestFactory().get_rest_helper(MLOpsMode.AGENT, mlops_server="localhost", mlops_port="3456", token=token) with requests_mock.mock() as m: m.get(rest_helper.url_get_workflow_instance(ion_instance_id), json=test_workflow_instances) m.get(rest_helper.url_get_ees(), json=test_ee_info) m.get(rest_helper.url_get_agents(), json=test_agents_info) m.get(rest_helper.url_get_model_list(), json=test_models_info) m.get(rest_helper.url_get_health_thresholds(ion_instance_id), json=test_health_info) m.get(rest_helper.url_get_model_stats(ION1.MODEL_ID), json=test_model_stats) m.get(rest_helper.url_get_uuid("model"), json={"id": "model_5906255e-0a3d-4fef-8653-8d41911264fb"}) m.post(rest_helper.url_login(), json={"token": token}) pm.attach(mlapp_id=ION1.ION_INSTANCE_ID, mlops_server="localhost", mlops_port=3456, password="******") mlapp_id_ret = pm.get_mlapp_id() assert (mlapp_id_ret == ION1.ION_ID) mlapp_policy_ret = pm.get_mlapp_policy() assert (str(mlapp_policy_ret) == "Policy:\nhealthThreshold: 0.2\ncanaryThreshold: 0.5\n") pm.done()
def test_suppress_connection_errors(): import requests from parallelm.mlops.events.event import Event from parallelm.mlops.mlops_env_constants import MLOpsEnvConstants ion_instance_id = ION1.ION_INSTANCE_ID ion_node_id = ION1.NODE_1_ID token = ION1.TOKEN pipeline_instance_id = ION1.PIPELINE_INST_ID_1 set_mlops_env(ion_id=ion_instance_id, ion_node_id=ion_node_id, token=token, model_id=ION1.MODEL_ID) os.environ[MLOpsEnvConstants.MLOPS_AGENT_PUBLIC_ADDRESS] = "placeholder" rest_helper = MlOpsRestFactory().get_rest_helper(MLOpsMode.AGENT, mlops_server="localhost", mlops_port="3456", token=token) rest_helper.set_prefix(Constants.URL_MLOPS_PREFIX) with requests_mock.mock() as m: m.get(rest_helper.url_get_workflow_instance(ion_instance_id), json=test_workflow_instances) m.get(rest_helper.url_get_health_thresholds(ion_instance_id), json=test_health_info) m.get(rest_helper.url_get_ees(), json=test_ee_info) m.get(rest_helper.url_get_agents(), json=test_agents_info) m.get(rest_helper.url_get_model_list(), json=test_models_info) m.get(rest_helper.url_get_model_stats(ION1.MODEL_ID), json=test_model_stats) m.post(rest_helper.url_post_event(pipeline_instance_id), exc=requests.exceptions.ConnectionError) m.post(rest_helper.url_post_stat(pipeline_instance_id), exc=requests.exceptions.ConnectionError) pm.init(ctx=None, mlops_mode=MLOpsMode.AGENT) event_obj = Event(label="event_name", event_type=EventType.System, description=None, data="123", is_alert=False, timestamp=None) with pytest.raises(MLOpsConnectionException): pm.set_event(name="event_name", data="123", type=EventType.System) with pytest.raises(MLOpsConnectionException): pm.event(event_obj) with pytest.raises(MLOpsConnectionException): pm.set_stat("stat_same", 3) pm.suppress_connection_errors(True) pm.set_event(name="event_name", data="123", type=EventType.System) pm.event(event_obj) pm.set_stat("stat_same", 3) pm.suppress_connection_errors(False) pm.done()