class_docstr: Use an engine to launch RAY Driver --> RAY Worker --> Async_Manager
  Background loop: inference reqs in waiting list (Listen)
  Request Tracker: manage incoming requests and restore finished ones
  Generate: exposed func for add new input and return finished ones
class_docstr_tok: ["Use","an","engine","to","launch","RAY","Driver","--",">","RAY","Worker","--",">","Async_Manager","Background","loop",":","inference","reqs","in","waiting","list","(","Listen",")","Request","Tracker",":","manage","incoming","requests","and","restore","finished","ones","Generate",":","exposed","func","for","add","new","input","and","return","finished","ones"]
code: def __init__(
      self,
      router_config,
      engine_config,
      start_engine_loop: bool = True,
  ) -> None:
      self.driver = Driver(
          router_config=router_config, engine_config=engine_config
      )
      self.background_loop = None
      self.start_engine_loop = start_engine_loop
      self._request_tracker = RequestTracker()
  
file_path: colossalai/colossalai/legacy/inference/async_engine.py
imports: import asyncio
  from colossalai.inference.dynamic_batching.ray_dist_init import Driver
  from .dynamic_batching.io_struct import RequestOutput
  from .dynamic_batching.sampling_params import SamplingParams
label_desc: Use image node_id 1 to create a new Async_Engine object  with example: obj = Async_Engine(router_config, engine_config, start_engine_loop)