class_docstr: Example usage:
  ```python
  from litellm import Router
  model_list = [
  {
      "model_name": "azure-gpt-3.5-turbo", # model alias
      "litellm_params": { # params for litellm completion/embedding call
          "model": "azure/<your-deployment-name-1>",
          "api_key": <your-api-key>,
          "api_version": <your-api-version>,
          "api_base": <your-api-base>
      },
  },
  {
      "model_name": "azure-gpt-3.5-turbo", # model alias
      "litellm_params": { # params for litellm completion/embedding call
          "model": "azure/<your-deployment-name-2>",
          "api_key": <your-api-key>,
          "api_version": <your-api-version>,
          "api_base": <your-api-base>
      },
  },
  {
      "model_name": "openai-gpt-3.5-turbo", # model alias
      "litellm_params": { # params for litellm completion/embedding call
          "model": "gpt-3.5-turbo",
          "api_key": <your-api-key>,
      },
  ]
  
  router = Router(model_list=model_list, fallbacks=[{"azure-gpt-3.5-turbo": "openai-gpt-3.5-turbo"}])
  ```
code: def set_model_list(self, model_list: list):
      self.model_list = copy.deepcopy(model_list)
      # we add api_base/api_key each model so load balancing between azure/gpt on api_base1 and api_base2 works
      import os
  
      for model in self.model_list:
          #### MODEL ID INIT ########
          model_info = model.get("model_info", {})
          model_info["id"] = model_info.get("id", str(uuid.uuid4()))
          model["model_info"] = model_info
          #### DEPLOYMENT NAMES INIT ########
          self.deployment_names.append(model["litellm_params"]["model"])
          ############ Users can either pass tpm/rpm as a litellm_param or a router param ###########
          # for get_available_deployment, we use the litellm_param["rpm"]
          # in this snippet we also set rpm to be a litellm_param
          if (
              model["litellm_params"].get("rpm") is None
              and model.get("rpm") is not None
          ):
              model["litellm_params"]["rpm"] = model.get("rpm")
          if (
              model["litellm_params"].get("tpm") is None
              and model.get("tpm") is not None
          ):
              model["litellm_params"]["tpm"] = model.get("tpm")
  
          #### VALIDATE MODEL ########
          # check if model provider in supported providers
          (
              _model,
              custom_llm_provider,
              dynamic_api_key,
              api_base,
          ) = litellm.get_llm_provider(
              model=model["litellm_params"]["model"],
              custom_llm_provider=model["litellm_params"].get(
                  "custom_llm_provider", None
              ),
          )
  
          if custom_llm_provider not in litellm.provider_list:
              raise Exception(
                  f"Unsupported provider - {custom_llm_provider}"
              )
  
          self.set_client(model=model)
  
      verbose_router_logger.debug(
          f"\nInitialized Model List {self.model_list}"
      )
      self.model_names = [m["model_name"] for m in model_list]
  
imports: import copy, httpx
  from datetime import datetime
  from typing import Dict, List, Optional, Union, Literal, Any
  import random, threading, time, traceback, uuid
  import litellm, openai
  from litellm.caching import RedisCache, InMemoryCache, DualCache
  import logging, asyncio
  import inspect, concurrent
  from openai import AsyncOpenAI
  from collections import defaultdict
  from litellm.router_strategy.least_busy import LeastBusyLoggingHandler
  from litellm.router_strategy.lowest_tpm_rpm import LowestTPMLoggingHandler
  from litellm.router_strategy.lowest_latency import LowestLatencyLoggingHandler
  from litellm.llms.custom_httpx.azure_dall_e_2 import CustomHTTPTransport, AsyncCustomHTTPTransport
  from litellm.utils import ModelResponse, CustomStreamWrapper
  import copy
  from litellm._logging import verbose_router_logger
  import logging
label_desc: Use image node_id 15 for calling the Router obj's underlying member method code with example usage: obj.set_model_list(model_list) without return types