code: def completion(
      model: str,
      messages: list,
      api_base: Optional[str],
      model_response: ModelResponse,
      print_verbose: Callable,
      encoding,
      api_key,
      logging_obj,
      custom_prompt_dict={},
      optional_params=None,
      litellm_params=None,
      logger_fn=None,
      default_max_tokens_to_sample=None,
  ):
      headers = validate_environment(api_key)
      if "https" in model:
          completion_url = model
      elif api_base:
          completion_url = api_base
      else:
          raise OobaboogaError(
              status_code=404,
              message="API Base not set. Set one via completion(..,api_base='your-api-url')",
          )
      model = model
  
      completion_url = completion_url + "/v1/chat/completions"
      data = {
          "messages": messages,
          **optional_params,
      }
      ## LOGGING
  
      logging_obj.pre_call(
          input=messages,
          api_key=api_key,
          additional_args={"complete_input_dict": data},
      )
      ## COMPLETION CALL
  
      response = requests.post(
          completion_url,
          headers=headers,
          data=json.dumps(data),
          stream=optional_params["stream"]
          if "stream" in optional_params
          else False,
      )
      if (
          "stream" in optional_params
          and optional_params["stream"] == True
      ):
          return response.iter_lines()
      else:
          ## LOGGING
          logging_obj.post_call(
              input=messages,
              api_key=api_key,
              original_response=response.text,
              additional_args={"complete_input_dict": data},
          )
          print_verbose(f"raw model_response: {response.text}")
          ## RESPONSE OBJECT
          try:
              completion_response = response.json()
          except:
              raise OobaboogaError(
                  message=response.text,
                  status_code=response.status_code,
              )
          if "error" in completion_response:
              raise OobaboogaError(
                  message=completion_response["error"],
                  status_code=response.status_code,
              )
          else:
              try:
                  model_response["choices"][0]["message"][
                      "content"
                  ] = completion_response["choices"][0]["message"][
                      "content"
                  ]
              except:
                  raise OobaboogaError(
                      message=json.dumps(completion_response),
                      status_code=response.status_code,
                  )
  
          model_response["created"] = int(time.time())
          model_response["model"] = model
          usage = Usage(
              prompt_tokens=completion_response["usage"][
                  "prompt_tokens"
              ],
              completion_tokens=completion_response["usage"][
                  "completion_tokens"
              ],
              total_tokens=completion_response["usage"]["total_tokens"],
          )
          model_response.usage = usage
          return model_response
  
file_path: litellm/litellm/llms/oobabooga.py
imports: import os
  import json
  from enum import Enum
  import requests
  import time
  from typing import Callable, Optional
  from litellm.utils import ModelResponse, Usage
  from .prompt_templates.factory import prompt_factory, custom_prompt
label_desc: Use image node_id 2 for calling a global function with example usage: completion(model, messages, api_base, model_response, print_verbose, encoding, api_key, logging_obj, custom_prompt_dict, optional_params, litellm_params, logger_fn, default_max_tokens_to_sample) and returns: response, model_response