dpang commited on
Commit
7243a06
·
verified ·
1 Parent(s): fd2173c

Add server/app.py

Browse files
Files changed (1) hide show
  1. server/app.py +58 -0
server/app.py ADDED
@@ -0,0 +1,58 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Copyright (c) Space Robotics Lab, SnT, University of Luxembourg, SpaceR
2
+ # RANS: arXiv:2310.07393 — OpenEnv-compatible implementation
3
+
4
+ """
5
+ FastAPI application for the RANS spacecraft navigation environment.
6
+
7
+ Exposes the RANSEnvironment over HTTP/WebSocket using OpenEnv's
8
+ ``create_app`` factory, following the same pattern as echo_env and coding_env.
9
+
10
+ Usage
11
+ -----
12
+ Development (auto-reload)::
13
+
14
+ uvicorn rans_env.server.app:app --reload --host 0.0.0.0 --port 8000
15
+
16
+ Production::
17
+
18
+ uvicorn rans_env.server.app:app --host 0.0.0.0 --port 8000 --workers 4
19
+
20
+ Docker entry-point::
21
+
22
+ uv run --project . server
23
+
24
+ Task selection (default: GoToPosition)::
25
+
26
+ RANS_TASK=GoToPose uvicorn rans_env.server.app:app --host 0.0.0.0 --port 8000
27
+ """
28
+
29
+ from rans_env.models import SpacecraftAction, SpacecraftObservation
30
+ from rans_env.server.rans_environment import RANSEnvironment
31
+
32
+ try:
33
+ from openenv.core.env_server import create_app
34
+ except ImportError as exc:
35
+ raise RuntimeError(
36
+ "openenv-core is required to run the RANS server. "
37
+ "Install it with: pip install openenv-core"
38
+ ) from exc
39
+
40
+ # Pass the class (not an instance) so create_app can spin up one environment
41
+ # per WebSocket session, enabling concurrent independent episodes.
42
+ app = create_app(
43
+ RANSEnvironment,
44
+ SpacecraftAction,
45
+ SpacecraftObservation,
46
+ env_name="rans_env",
47
+ )
48
+
49
+
50
+ def main() -> None:
51
+ """Entry-point for ``uv run --project . server``."""
52
+ import uvicorn
53
+
54
+ uvicorn.run(app, host="0.0.0.0", port=8000)
55
+
56
+
57
+ if __name__ == "__main__":
58
+ main()