Spaces:
Paused
Paused
Commit
·
3ef0e67
1
Parent(s):
19cc069
feat: udapte web_server
Browse files- 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 |
-
|
| 329 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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()
|