code: def call(self, history, functions, skills):
      model_info = self.model_info
  
      if model_info["mode"] != "conversational":
          raise BotException("Not supported")
  
      messages = self._chat_history_to_conversation(history, model_info)
      if model_info["engine"] == "langchain":
          all_tools = []
          for function in functions:
              all_tools.append(
                  {
                      "name": function.name,
                      "func": function.callback,
                      "description": function.description,
                  }
              )
  
          context_list = [
              f"- Today's date is {dt.datetime.now().strftime('%Y-%m-%d')}."
              f" It must be used to understand the input date from string like 'tomorrow', 'today', 'yesterday'"
          ]
          context = "\n".join(context_list)
  
          # call model
          params = {
              "tools": all_tools,
              "skills": skills,
              "context": context,
              "prompt": self.prompt,
          }
  
          predictions = self.chat_task.project_datanode.predict(
              model_name=model_info["model_name"],
              data=messages,
              params=params,
          )
  
      elif model_info["engine"] == "llama_index":
          predictions = self.chat_task.project_datanode.predict(
              model_name=model_info["model_name"],
              data=messages,
              params={"prompt": self.prompt},
          )
  
      else:
          raise BotException("Not supported")
  
      output_col = model_info["output"]
      model_output = predictions.iloc[-1][output_col]
      return model_output
  
imports: import datetime
  from mindsdb.interfaces.storage import db
  from .types import BotException
label_desc: Use image node_id 2 for calling the ModelExecutor obj's underlying member method code with example usage: obj.call(history, functions, skills) and returns: model_output