code: def _get_multi_prompt(
      dfs: List[Any],
      prefix: Optional[str] = None,
      suffix: Optional[str] = None,
      input_variables: Optional[List[str]] = None,
      include_df_in_prompt: Optional[bool] = True,
      number_of_head_rows: int = 5,
  ) -> Tuple[BasePromptTemplate, List[PythonAstREPLTool]]:
      num_dfs = len(dfs)
      if suffix is not None:
          suffix_to_use = suffix
          include_dfs_head = True
      elif include_df_in_prompt:
          suffix_to_use = SUFFIX_WITH_MULTI_DF
          include_dfs_head = True
      else:
          suffix_to_use = SUFFIX_NO_DF
          include_dfs_head = False
      if input_variables is None:
          input_variables = ["input", "agent_scratchpad", "num_dfs"]
          if include_dfs_head:
              input_variables += ["dfs_head"]
  
      if prefix is None:
          prefix = MULTI_DF_PREFIX
  
      df_locals = {}
      for i, dataframe in enumerate(dfs):
          df_locals[f"df{i + 1}"] = dataframe
      tools = [PythonAstREPLTool(locals=df_locals)]
  
      prompt = ZeroShotAgent.create_prompt(
          tools,
          prefix=prefix,
          suffix=suffix_to_use,
          input_variables=input_variables,
      )
  
      partial_prompt = prompt.partial()
      if "dfs_head" in input_variables:
          dfs_head = "\n\n".join(
              [d.head(number_of_head_rows).to_markdown() for d in dfs]
          )
          partial_prompt = partial_prompt.partial(
              num_dfs=str(num_dfs), dfs_head=dfs_head
          )
      if "num_dfs" in input_variables:
          partial_prompt = partial_prompt.partial(num_dfs=str(num_dfs))
      return partial_prompt, tools
  
imports: from io import IOBase
  from typing import Any, Dict, List, Optional, Sequence, Tuple, Union
  from langchain._api import warn_deprecated
  from langchain.agents import AgentExecutor, BaseSingleActionAgent
  from langchain_experimental.agents.agent_toolkits.pandas.prompt import FUNCTIONS_WITH_DF, FUNCTIONS_WITH_MULTI_DF, MULTI_DF_PREFIX, MULTI_DF_PREFIX_FUNCTIONS, PREFIX, PREFIX_FUNCTIONS, SUFFIX_NO_DF, SUFFIX_WITH_DF, SUFFIX_WITH_MULTI_DF
  from langchain.agents.mrkl.base import ZeroShotAgent
  from langchain.agents.mrkl.prompt import FORMAT_INSTRUCTIONS
  from langchain.agents.openai_functions_agent.base import OpenAIFunctionsAgent
  from langchain.agents.types import AgentType
  from langchain.callbacks.base import BaseCallbackManager
  from langchain.chains.llm import LLMChain
  from langchain.schema import BasePromptTemplate
  from langchain.schema.language_model import BaseLanguageModel
  from langchain.schema.messages import SystemMessage
  from langchain.tools import BaseTool
  from langchain_experimental.tools.python.tool import PythonAstREPLTool
label_desc: Use image node_id 1 for calling a global function with example usage: _get_multi_prompt(dfs, prefix, suffix, input_variables, include_df_in_prompt, number_of_head_rows) and returns: partial_prompt,  tools