code: def get_completed_prompts(base_template, df):
      """
      Helper method that produces formatted prompts given a template and data in a Pandas DataFrame.
      It also returns the ID of any empty templates that failed to be filled due to missing data.
      """
      columns = []
      spans = []
      matches = list(re.finditer("{{(.*?)}}", base_template))
  
      assert (
          len(matches) > 0
      ), "No placeholders found in the prompt, please provide a valid prompt template."
  
      first_span = matches[0].start()
      last_span = matches[-1].end()
  
      for m in matches:
          columns.append(m[0].replace("{", "").replace("}", ""))
          spans.extend((m.start(), m.end()))
  
      spans = spans[
          1:-1
      ]  # omit first and last, they are added separately
      template = [
          base_template[s:e]
          for s, e in list(zip(spans, spans[1:]))[::2]
      ]  # take every other to skip placeholders  # noqa
      template.insert(
          0, base_template[0:first_span]
      )  # add prompt start
      template.append(base_template[last_span:])  # add prompt end
  
      empty_prompt_ids = np.where(
          df[columns].isna().all(axis=1).values
      )[0]
  
      df["__mdb_prompt"] = ""
      for i in range(len(template)):
          atom = template[i]
          if i < len(columns):
              col = df[columns[i]].replace(
                  to_replace=[None], value=""
              )  # add empty quote if data is missing
              df["__mdb_prompt"] = df["__mdb_prompt"].apply(
                  lambda x: x + atom
              ) + col.astype("string")
          else:
              df["__mdb_prompt"] = df["__mdb_prompt"].apply(
                  lambda x: x + atom
              )
      prompts = list(df["__mdb_prompt"])
  
      return prompts, empty_prompt_ids
  
label_desc: Use image node_id 1 for calling a global function with example usage: get_completed_prompts(base_template, df) and returns: prompts,  empty_prompt_ids