code: def test_create_function_with_relational_api(self):
      video_file_path = create_sample_video(10)
  
      cursor = self.conn.cursor()
      # load video
      rel = cursor.load(
          video_file_path,
          table_name="dummy_video",
          format="video",
      )
      rel.execute()
  
      create_dummy_object_detector_function = cursor.create_function(
          "DummyObjectDetector",
          if_not_exists=True,
          impl_path="test/util.py",
      )
      create_dummy_object_detector_function.execute()
  
      args = {
          "task": "automatic-speech-recognition",
          "model": "openai/whisper-base",
      }
  
      create_speech_recognizer_function_if_not_exists = (
          cursor.create_function(
              "SpeechRecognizer",
              if_not_exists=True,
              type="HuggingFace",
              **args,
          )
      )
      query = (
          create_speech_recognizer_function_if_not_exists.sql_query()
      )
      self.assertEqual(
          query,
          """CREATE FUNCTION IF NOT EXISTS SpeechRecognizer TYPE HuggingFace TASK 'automatic-speech-recognition' MODEL 'openai/whisper-base'""",
      )
      create_speech_recognizer_function_if_not_exists.execute()
  
      # check if next create call of same Function raises error
      create_speech_recognizer_function = cursor.create_function(
          "SpeechRecognizer",
          if_not_exists=False,
          type="HuggingFace",
          **args,
      )
      query = create_speech_recognizer_function.sql_query()
      self.assertEqual(
          query,
          "CREATE FUNCTION SpeechRecognizer TYPE HuggingFace TASK 'automatic-speech-recognition' MODEL 'openai/whisper-base'",
      )
      with self.assertRaises(ExecutorError):
          create_speech_recognizer_function.execute()
  
      select_query_sql = "SELECT id, DummyObjectDetector(data) FROM dummy_video ORDER BY id;"
      actual_batch = cursor.query(select_query_sql).execute()
      labels = DummyObjectDetector().labels
      expected = [
          {
              "id": i,
              "label": np.array([labels[1 + i % 2]]),
          }
          for i in range(10)
      ]
      expected_batch = Batch(frames=pd.DataFrame(expected))
      self.assertEqual(actual_batch, expected_batch)
  
      # Without dropping alias
      actual_batch = cursor.query(select_query_sql).execute(
          drop_alias=False
      )
      expected = [
          {
              "dummy_video.id": i,
              "dummyobjectdetector.label": np.array(
                  [labels[1 + i % 2]]
              ),
          }
          for i in range(10)
      ]
      expected_batch = Batch(frames=pd.DataFrame(expected))
      self.assertEqual(actual_batch, expected_batch)
  
imports: import unittest
  from test.markers import qdrant_skip_marker
  from test.util import DummyObjectDetector, create_sample_video, load_functions_for_testing, shutdown_ray, suffix_pytest_xdist_worker_id_to_dir
  import numpy
  import pandas
  from pandas.testing import assert_frame_equal
  from evadb.binder.binder_utils import BinderError
  from evadb.configuration.constants import DEFAULT_DOCUMENT_CHUNK_OVERLAP, DEFAULT_DOCUMENT_CHUNK_SIZE, EvaDB_DATABASE_DIR, EvaDB_ROOT_DIR
  from evadb.executor.executor_utils import ExecutorError
  from evadb.interfaces.relational.db import connect
  from evadb.models.storage.batch import Batch
  from evadb.server.command_handler import execute_query_fetch_all
label_desc: Use image node_id 9 for calling the RelationalAPI obj's underlying member method code with example usage: obj.test_create_function_with_relational_api() without return types