Libra-1995 commited on
Commit
3ef0e67
·
1 Parent(s): 19cc069

feat: udapte web_server

Browse files
Files changed (1) hide show
  1. web_server.py +30 -6
web_server.py CHANGED
@@ -255,10 +255,20 @@ class WebServer:
255
  self.auth_token = auth_token
256
  self._init_app()
257
  self._result_dict= FifoDict(max_size=30)
 
258
 
259
  def run(self):
260
  uvicorn.run(self._app, host="0.0.0.0", port=7860, workers=1)
261
 
 
 
 
 
 
 
 
 
 
262
  def _reset_endpoint(self):
263
  self.env_handler.reset_env()
264
  return {"success": True}
@@ -312,6 +322,12 @@ class WebServer:
312
  </script>
313
  """
314
  return HTMLResponse(content=html_content)
 
 
 
 
 
 
315
 
316
  def _verify_token(self, auth_token: str = Header(...)):
317
  if self.auth_token and self.auth_token != auth_token:
@@ -323,14 +339,17 @@ class WebServer:
323
  self._app.add_api_route("/get_current_state", self._get_current_state_endpoint, methods=["GET"], dependencies=[Depends(self._verify_token)])
324
  self._app.add_api_route("/execute_action", self._execute_action_endpoint, methods=["POST"], dependencies=[Depends(self._verify_token)])
325
  self._app.add_api_route("/", self._main_page_endpoint, methods=["GET"])
 
326
 
327
 
328
- # TODO: add code to update submission info
329
- if __name__ == "__main__":
 
 
 
 
330
  # Using fixed paths for web server
331
- ad = "uniad"
332
  base_path = os.path.join(os.path.dirname(__file__), 'docker', "web_server_config", 'nuscenes_base.yaml')
333
- # unknown config
334
  scenario_path = os.path.join(os.path.dirname(__file__), 'docker', "web_server_config", 'scene-0383-medium-00.yaml')
335
  camera_path = os.path.join(os.path.dirname(__file__), 'docker', "web_server_config", 'nuscenes_camera.yaml')
336
  kinematic_path = os.path.join(os.path.dirname(__file__), 'docker', "web_server_config", 'kinematic.yaml')
@@ -354,10 +373,15 @@ if __name__ == "__main__":
354
 
355
  output = os.path.join(OUTPUT_DIR, "hugsim_env")
356
  os.makedirs(output, exist_ok=True)
357
-
358
  print("Output directory:", output)
359
  env_handler = EnvHandler(cfg, output)
360
  print("Environment handler initialized.")
361
- web_server = WebServer(env_handler, auth_token=os.getenv('HUGSIM_AUTH_TOKEN'))
 
 
 
 
 
362
  print("Web server initialized.")
 
363
  web_server.run()
 
255
  self.auth_token = auth_token
256
  self._init_app()
257
  self._result_dict= FifoDict(max_size=30)
258
+ self._ready = self.env_handler is not None
259
 
260
  def run(self):
261
  uvicorn.run(self._app, host="0.0.0.0", port=7860, workers=1)
262
 
263
+ def register_env_handler(self, env_handler: EnvHandler):
264
+ """
265
+ Register an environment handler to the web server.
266
+ Args:
267
+ env_handler (EnvHandler): The environment handler to register.
268
+ """
269
+ self.env_handler = env_handler
270
+ self._ready = True
271
+
272
  def _reset_endpoint(self):
273
  self.env_handler.reset_env()
274
  return {"success": True}
 
322
  </script>
323
  """
324
  return HTMLResponse(content=html_content)
325
+
326
+ def _ready_endpoint(self):
327
+ if self._ready:
328
+ return {"ready": True}
329
+ else:
330
+ raise HTTPException(status_code=503, detail="Server is not ready yet.")
331
 
332
  def _verify_token(self, auth_token: str = Header(...)):
333
  if self.auth_token and self.auth_token != auth_token:
 
339
  self._app.add_api_route("/get_current_state", self._get_current_state_endpoint, methods=["GET"], dependencies=[Depends(self._verify_token)])
340
  self._app.add_api_route("/execute_action", self._execute_action_endpoint, methods=["POST"], dependencies=[Depends(self._verify_token)])
341
  self._app.add_api_route("/", self._main_page_endpoint, methods=["GET"])
342
+ self._app.add_api_route("/ready", self._ready_endpoint, methods=["GET"])
343
 
344
 
345
+ def _register_env_handler_to_server(web_server: WebServer):
346
+ """
347
+ Register the environment handler to the web server.
348
+ Args:
349
+ web_server (WebServer): The web server instance.
350
+ """
351
  # Using fixed paths for web server
 
352
  base_path = os.path.join(os.path.dirname(__file__), 'docker', "web_server_config", 'nuscenes_base.yaml')
 
353
  scenario_path = os.path.join(os.path.dirname(__file__), 'docker', "web_server_config", 'scene-0383-medium-00.yaml')
354
  camera_path = os.path.join(os.path.dirname(__file__), 'docker', "web_server_config", 'nuscenes_camera.yaml')
355
  kinematic_path = os.path.join(os.path.dirname(__file__), 'docker', "web_server_config", 'kinematic.yaml')
 
373
 
374
  output = os.path.join(OUTPUT_DIR, "hugsim_env")
375
  os.makedirs(output, exist_ok=True)
 
376
  print("Output directory:", output)
377
  env_handler = EnvHandler(cfg, output)
378
  print("Environment handler initialized.")
379
+ web_server.register_env_handler(env_handler)
380
+
381
+
382
+ if __name__ == "__main__":
383
+ # due to the limitation of huggingface space, we need to use a thread to register the environment handler.
384
+ web_server = WebServer(None, auth_token=os.getenv('HUGSIM_AUTH_TOKEN'))
385
  print("Web server initialized.")
386
+ threading.Thread(target=_register_env_handler_to_server, args=(web_server,), daemon=True).start()
387
  web_server.run()