def run_fit(predictor_id: int, df: pd.DataFrame) -> None: try: predictor_record = session.query(db.Predictor).filter_by(id=predictor_id).first() assert predictor_record is not None fs_store = FsStore() config = Config() predictor_record.data = {'training_log': 'training'} session.commit() predictor: lightwood.PredictorInterface = lightwood.predictor_from_code(predictor_record.code) predictor.learn(df) session.refresh(predictor_record) fs_name = f'predictor_{predictor_record.company_id}_{predictor_record.id}' pickle_path = os.path.join(config['paths']['predictors'], fs_name) predictor.save(pickle_path) fs_store.put(fs_name, fs_name, config['paths']['predictors']) predictor_record.data = predictor.model_analysis.to_dict() predictor_record.dtype_dict = predictor.dtype_dict session.commit() dbw = DatabaseWrapper(predictor_record.company_id) mi = ModelInterfaceWrapper(ModelInterface(), predictor_record.company_id) dbw.register_predictors([mi.get_model_data(predictor_record.name)]) except Exception as e: session.refresh(predictor_record) predictor_record.data = {'error': f'{traceback.format_exc()}\nMain error: {e}'} session.commit() raise e
def run_fit(predictor_id: int, df: pd.DataFrame) -> None: try: predictor_record = Predictor.query.with_for_update().get(predictor_id) assert predictor_record is not None fs_store = FsStore() config = Config() predictor_record.data = {'training_log': 'training'} session.commit() predictor: lightwood.PredictorInterface = lightwood.predictor_from_code( predictor_record.code) predictor.learn(df) session.refresh(predictor_record) fs_name = f'predictor_{predictor_record.company_id}_{predictor_record.id}' pickle_path = os.path.join(config['paths']['predictors'], fs_name) predictor.save(pickle_path) fs_store.put(fs_name, fs_name, config['paths']['predictors']) predictor_record.data = predictor.model_analysis.to_dict() # getting training time for each tried model. it is possible to do # after training only fit_mixers = list(predictor.runtime_log[x] for x in predictor.runtime_log if isinstance(x, tuple) and x[0] == "fit_mixer") submodel_data = predictor_record.data.get("submodel_data", []) # add training time to other mixers info if submodel_data and fit_mixers and len(submodel_data) == len( fit_mixers): for i, tr_time in enumerate(fit_mixers): submodel_data[i]["training_time"] = tr_time predictor_record.data["submodel_data"] = submodel_data predictor_record.dtype_dict = predictor.dtype_dict session.commit() dbw = DatabaseWrapper(predictor_record.company_id) mi = WithKWArgsWrapper(ModelInterface(), company_id=predictor_record.company_id) except Exception as e: session.refresh(predictor_record) predictor_record.data = { 'error': f'{traceback.format_exc()}\nMain error: {e}' } session.commit() raise e try: dbw.register_predictors([mi.get_model_data(predictor_record.name)]) except Exception as e: log.warn(e)
def __init__(self, config): mongodb_config = config['api'].get('mongodb') assert mongodb_config is not None, 'is no mongodb config!' host = mongodb_config['host'] port = mongodb_config['port'] log.debug(f'start mongo server on {host}:{port}') super().__init__((host, int(port)), MongoRequestHandler) self.mindsdb_env = { 'config': config, 'origin_data_store': DataStore(), 'origin_model_interface': ModelInterface(), 'origin_datasource_controller': DatasourceController(), } self.mindsdb_env['mindsdb_native'] = WithKWArgsWrapper( self.mindsdb_env['origin_model_interface'], company_id=None) self.mindsdb_env['data_store'] = WithKWArgsWrapper( self.mindsdb_env['origin_data_store'], company_id=None) self.mindsdb_env['datasource_controller'] = WithKWArgsWrapper( self.mindsdb_env['origin_datasource_controller'], company_id=None) respondersCollection = RespondersCollection() opQueryResponder = OpQueryResponder(respondersCollection) opMsgResponder = OpMsgResponder(respondersCollection) opInsertResponder = OpInsertResponder(respondersCollection) self.operationsHandlersMap = { OP_QUERY: opQueryResponder, OP_MSG: opMsgResponder, OP_INSERT: opInsertResponder } respondersCollection.add(when={'drop': 'system.sessions'}, result={'ok': 1}) respondersCollection.add(when={'update': 'system.version'}, result={'ok': 1}) respondersCollection.add( when={'setFeatureCompatibilityVersion': helpers.is_true}, result={'ok': 1}) # OpMSG=OrderedDict([('features', 1), ('$clusterTime', OrderedDict([('clusterTime', Timestamp(1599748325, 1)), ('signature', OrderedDict([('hash', b'\xb8\xc3\x03\x18\xca\xe6bh\xf0\xcb47,\x924\x8a >\xfc\x91'), ('keyId', 6870854312365391875)]))])), ('$configServerState', OrderedDict([('opTime', OrderedDict([('ts', Timestamp(1599748325, 1)), ('t', 1)]))])), ('$db', 'admin')]) respondersCollection.add(when={'features': helpers.is_true}, result={'ok': 1}) # OpMSG=OrderedDict([('serverStatus', 1), ('$clusterTime', OrderedDict([('clusterTime', Timestamp(1599748366, 1)), ('signature', OrderedDict([('hash', b'\xa1E}\xbbIU\xc2D\x95++\x82\x88\xb5\x84\xf5\xda)+B'), ('keyId', 6870854312365391875)]))])), ('$configServerState', OrderedDict([('opTime', OrderedDict([('ts', Timestamp(1599748366, 1)), ('t', 1)]))])), ('$db', 'admin')]) respondersCollection.add(when={'serverStatus': helpers.is_true}, result={'ok': 1}) # OpMSG=OrderedDict([('ismaster', 1), ('$db', 'admin'), ('$clusterTime', OrderedDict([('clusterTime', Timestamp(1599749031, 1)), ('signature', OrderedDict([('hash', b'6\x87\xd5Y\xa7\xc7\xcf$\xab\x1e\xa2{\xe5B\xe5\x99\xdbl\x8d\xf4'), ('keyId', 6870854312365391875)]))])), ('$client', OrderedDict([('application', OrderedDict([('name', 'MongoDB Shell')])), ('driver', OrderedDict([('name', 'MongoDB Internal Client'), ('version', '3.6.3')])), ('os', OrderedDict([('type', 'Linux'), ('name', 'Ubuntu'), ('architecture', 'x86_64'), ('version', '18.04')])), ('mongos', OrderedDict([('host', 'maxs-comp:27103'), ('client', '127.0.0.1:52148'), ('version', '3.6.3')]))])), ('$configServerState', OrderedDict([('opTime', OrderedDict([('ts', Timestamp(1599749031, 1)), ('t', 1)]))]))]) respondersCollection.responders += responders
def __init__(self, name, predictor, stream_in, stream_out, anomaly_stream=None, learning_stream=None, learning_threshold=100): self.name = name self.predictor = predictor self.stream_in = stream_in self.stream_out = stream_out self.anomaly_stream = anomaly_stream self.learning_stream = learning_stream self.learning_threshold = learning_threshold self.learning_data = [] self.company_id = os.environ.get('MINDSDB_COMPANY_ID', None) self.stop_event = Event() self.model_interface = ModelInterfaceWrapper(ModelInterface()) self.data_store = DataStore() self.config = Config() p = db.session.query(db.Predictor).filter_by( company_id=self.company_id, name=self.predictor).first() if p is None: raise Exception(f'Predictor {predictor} doesn\'t exist') self.target = p.to_predict[0] ts_settings = p.learn_args.get('timeseries_settings', None) if not ts_settings['is_timeseries']: ts_settings = None if ts_settings is None: self.thread = Thread(target=StreamController._make_predictions, args=(self, )) else: self.ts_settings = ts_settings self.thread = Thread(target=StreamController._make_ts_predictions, args=(self, )) self.thread.start()
os.environ['DEFAULT_LOG_LEVEL'] = config['log']['level']['console'] os.environ['LIGHTWOOD_LOG_LEVEL'] = config['log']['level']['console'] # Switch to this once the native interface has it's own thread :/ ctx = mp.get_context('spawn') from mindsdb.__about__ import __version__ as mindsdb_version print(f'Version {mindsdb_version}') print(f'Configuration file:\n {config.config_path}') print(f"Storage path:\n {config['paths']['root']}") # @TODO Backwards compatibiltiy for tests, remove later from mindsdb.interfaces.database.integrations import DatasourceController dbw = DatabaseWrapper(COMPANY_ID) model_interface = WithKWArgsWrapper(ModelInterface(), company_id=COMPANY_ID) datasource_interface = WithKWArgsWrapper(DatasourceController(), company_id=COMPANY_ID) raw_model_data_arr = model_interface.get_models() model_data_arr = [] for model in raw_model_data_arr: if model['status'] == 'complete': x = model_interface.get_model_data(model['name']) try: model_data_arr.append( model_interface.get_model_data(model['name'])) except Exception: pass is_cloud = config.get('cloud', False)
def __init__(self): self.config = Config() self.fs_store = FsStore() self.dir = self.config['paths']['datasources'] self.model_interface = ModelInterface()
def initialize_interfaces(app): app.original_data_store = DataStore() app.original_model_interface = ModelInterface() config = Config() app.config_obj = config
os.environ['DEFAULT_LOG_LEVEL'] = config['log']['level']['console'] os.environ['LIGHTWOOD_LOG_LEVEL'] = config['log']['level']['console'] # Switch to this once the native interface has it's own thread :/ ctx = mp.get_context('spawn') from mindsdb.__about__ import __version__ as mindsdb_version print(f'Version {mindsdb_version}') print(f'Configuration file:\n {config.config_path}') print(f"Storage path:\n {config['paths']['root']}") # @TODO Backwards compatibiltiy for tests, remove later from mindsdb.interfaces.database.integrations import add_db_integration, get_db_integration, remove_db_integration dbw = DatabaseWrapper(COMPANY_ID) model_interface = ModelInterfaceWrapper(ModelInterface(), COMPANY_ID) raw_model_data_arr = model_interface.get_models() model_data_arr = [] for model in raw_model_data_arr: if model['status'] == 'complete': x = model_interface.get_model_data(model['name']) try: model_data_arr.append( model_interface.get_model_data(model['name'])) except Exception: pass is_cloud = config.get('cloud', False) if not is_cloud: for integration_name in get_db_integrations(COMPANY_ID, sensitive_info=True):