Spaces:
Starting
on
T4
Starting
on
T4
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()
|