code: def vector_search(self, payload, db_name="default", timeout=10):
      time.sleep(1)
      url = f"{self.protocol}://{self.url}/vector/search"
      if self.db_name is not None:
          payload["dbName"] = self.db_name
      if db_name != "default":
          payload["dbName"] = db_name
      response = self.post(
          url, headers=self.update_headers(), data=payload
      )
      rsp = response.json()
      if "data" in rsp and len(rsp["data"]) == 0:
          t0 = time.time()
          while time.time() - t0 < timeout:
              response = self.post(
                  url, headers=self.update_headers(), data=payload
              )
              rsp = response.json()
              if len(rsp["data"]) > 0:
                  break
              time.sleep(1)
          else:
              response = self.post(
                  url, headers=self.update_headers(), data=payload
              )
              rsp = response.json()
              if "data" in rsp and len(rsp["data"]) == 0:
                  logger.info(f"after {timeout}s, still no data")
  
      return response.json()
  
imports: import json
  import requests
  import time
  import uuid
  from utils.util_log import test_log
label_desc: Use image node_id 3 for calling the VectorClient obj's underlying member method code with example usage: obj.vector_search(payload, db_name, timeout) and returns: response