code: def test_create_kb(self):
      # create knowledge base
      sql = f"""
              CREATE KNOWLEDGE BASE test_kb
              USING
              MODEL = {self.embedding_model_name},
              STORAGE = {self.vector_database_name}.{self.vector_database_table_name}
          """
      self.run_sql(sql)
  
      # verify the knowledge base is created
      kb_obj = (
          self.db.session.query(KnowledgeBase)
          .filter_by(name="test_kb")
          .first()
      )
      assert kb_obj is not None
  
      # create a knowledge base from select
      # todo this should be supported but isn't yet
  
      # sql = f"""
      #     CREATE KNOWLEDGE BASE test_kb2
      #     FROM (
      #         SELECT content, embeddings, metadata
      #         FROM {self.vector_database_name}.{self.vector_database_table_name}
      #     )
      #     USING
      #     MODEL = {self.embedding_model_name},
      #     STORAGE = {self.vector_database_name}.{self.vector_database_table_name}
      # """
      #
      # self.run_sql(sql)
      #
      # # verify the knowledge base is created
      # kb_obj = self.db.session.query(KnowledgeBase).filter_by(name="test_kb2").first()
      # assert kb_obj is not None
  
      # create a knowledge base with invalid model and storage name should throw an exception
      sql = f"""
              CREATE KNOWLEDGE BASE test_kb3
              USING
              MODEL = invalid_model_name,
              STORAGE = {self.vector_database_name}.{self.vector_database_table_name}
          """
      with pytest.raises(Exception):
          self.run_sql(sql)
  
      sql = f"""
              CREATE KNOWLEDGE BASE test_kb4
              USING
              MODEL = {self.embedding_model_name},
              STORAGE = invalid_storage_name
          """
      with pytest.raises(Exception):
          self.run_sql(sql)
  
      # create a knowledge base without a storage name, default should be used
  
      sql = f"""
              CREATE KNOWLEDGE BASE test_kb5
              USING
              MODEL = {self.embedding_model_name}
          """
  
      self.run_sql(sql)
  
      # verify the knowledge base is created
      kb_obj = (
          self.db.session.query(KnowledgeBase)
          .filter_by(name="test_kb5")
          .first()
      )
      assert kb_obj is not None
      assert kb_obj.vector_database.name == "test_kb5_chromadb"
  
      # create a knowledge base without a model name, default should be used
      sql = f"""
              CREATE KNOWLEDGE BASE test_kb6
              USING
              STORAGE = {self.vector_database_name}.{self.vector_database_table_name}
          """
  
      self.run_sql(sql)
  
      # verify the knowledge base is created
      kb_obj = (
          self.db.session.query(KnowledgeBase)
          .filter_by(name="test_kb6")
          .first()
      )
      assert kb_obj is not None
      assert kb_obj.embedding_model.name == "test_kb6_default_model"
  
      # create a knowledge base without a model or storage
      # todo this should be supported but requires a fix to the sql parser
      sql = """
              CREATE KNOWLEDGE BASE test_kb7
          """
  
      with pytest.raises(Exception):
          self.run_sql(sql)
  
imports: import tempfile
  import time
  from unittest.mock import patch
  import pandas
  import pytest
  from mindsdb_sql import parse_sql
  from mindsdb.interfaces.storage.db import KnowledgeBase
  from .executor_test_base import BaseExecutorTest
label_desc: Use image node_id 5 for calling the TestKnowledgeBase obj's underlying member method code with example usage: obj.test_create_kb() without return types