code: def test_06_train_predictor_custom_jsonai(self):
      # TODO: turn this into a decorator?
      if (
          self.test_model_1b
          in self.handler.get_tables().data_frame.values
      ):  # TODO this accesor feels weird, maybe rethink output format?
          self.handler.native_query(
              f"DROP PREDICTOR {self.test_model_1b}"
          )
  
      using_str = 'model.args={"submodels": [{"module": "LightGBM", "args": {"stop_after": 12, "fit_on_dev": true}}]}'
      query = f"""
              CREATE PREDICTOR {self.test_model_1b}
              FROM {PG_HANDLER_NAME} (SELECT * FROM {self.data_table_1} limit 50)
              PREDICT rental_price
              USING {using_str}
          """
      response = self.handler.native_query(query)
      self.assertTrue(response.type == RESPONSE_TYPE.OK)
  
imports: import os
  import time
  import unittest
  import tempfile
  from mindsdb.migrations import migrate
  from mindsdb.utilities.config import Config
  from mindsdb.integrations.utilities.test_utils import HandlerControllerMock, PG_HANDLER_NAME, PG_CONNECTION_DATA
  from mindsdb.interfaces.database.integrations import integration_controller
  from mindsdb.integrations.handlers.lightwood_handler.lightwood_handler.lightwood_handler import LightwoodHandler
  from mindsdb.interfaces.storage.fs import FsStore
  from mindsdb.interfaces.model.model_controller import ModelController
  from mindsdb.integrations.libs.response import RESPONSE_TYPE
  import mindsdb.interfaces.storage.db
label_desc: Use image node_id 8 for calling the LightwoodHandlerTest obj's underlying member method code with example usage: obj.test_06_train_predictor_custom_jsonai() without return types