code: def __init__(self, task, template=None):
      if task == "completions":
          template = template or "{prompt}"
          if not isinstance(template, str):
              raise mlflow.MlflowException.invalid_parameter_value(
                  f"Template for task {task} expects type `str`, but got {type(template)}."
              )
  
          self.template = template
          self.format_fn = self.format_prompt
          self.variables = sorted(_parse_format_fields(self.template))
      elif task == "chat.completions":
          if not template:
              template = [{"role": "user", "content": "{content}"}]
          if not all(map(_is_valid_message, template)):
              raise mlflow.MlflowException.invalid_parameter_value(
                  f"Template for task {task} expects type `dict` with keys 'content' "
                  f"and 'role', but got {type(template)}."
              )
  
          self.template = template.copy()
          self.format_fn = self.format_chat
          self.variables = sorted(
              set(
                  itertools.chain.from_iterable(
                      _parse_format_fields(message.get("content"))
                      | _parse_format_fields(message.get("role"))
                      for message in self.template
                  )
              )
          )
          if not self.variables:
              self.template.append(
                  {"role": "user", "content": "{content}"}
              )
              self.variables.append("content")
      else:
          raise mlflow.MlflowException.invalid_parameter_value(
              f"Task type ``{task}`` is not supported for formatting."
          )
  
imports: import itertools
  import logging
  import os
  import warnings
  from string import Formatter
  from typing import Any, Dict, Optional, Set
  import yaml
  import mlflow
  from mlflow import pyfunc
  from mlflow.environment_variables import _MLFLOW_TESTING, MLFLOW_OPENAI_SECRET_SCOPE
  from mlflow.exceptions import MlflowException
  from mlflow.models import Model, ModelInputExample, ModelSignature
  from mlflow.models.model import MLMODEL_FILE_NAME
  from mlflow.models.utils import _save_example
  from mlflow.protos.databricks_pb2 import INVALID_PARAMETER_VALUE
  from mlflow.tracking._model_registry import DEFAULT_AWAIT_MAX_SLEEP_SECONDS
  from mlflow.tracking.artifact_utils import _download_artifact_from_uri
  from mlflow.types import ColSpec, Schema, TensorSpec
  from mlflow.utils.annotations import experimental
  from mlflow.utils.databricks_utils import check_databricks_secret_scope_access, is_in_databricks_runtime
  from mlflow.utils.docstring_utils import LOG_MODEL_PARAM_DOCS, format_docstring
  from mlflow.utils.environment import _CONDA_ENV_FILE_NAME, _CONSTRAINTS_FILE_NAME, _PYTHON_ENV_FILE_NAME, _REQUIREMENTS_FILE_NAME, _mlflow_conda_env, _process_conda_env, _process_pip_requirements, _PythonEnv, _validate_env_arguments
  from mlflow.utils.file_utils import write_to
  from mlflow.utils.model_utils import _add_code_from_conf_to_system_path, _get_flavor_configuration, _validate_and_copy_code_paths, _validate_and_prepare_target_save_path
  from mlflow.utils.openai_utils import REQUEST_URL_CHAT, REQUEST_URL_COMPLETIONS, REQUEST_URL_EMBEDDINGS, _OAITokenHolder, _OpenAIApiConfig, _OpenAIEnvVar, _validate_model_params
  from mlflow.utils.requirements_utils import _get_pinned_requirement
label_desc: Use image node_id 1 to create a new _ContentFormatter object  with example: obj = _ContentFormatter(task, template)