Sahil Tailor commited on
Commit
8be219d
Β·
1 Parent(s): 4dd48d5

space_manufactoring folder elimination

Browse files
Files changed (5) hide show
  1. Dockerfile +5 -5
  2. inference.py +10 -30
  3. pyproject.toml +2 -2
  4. server/app.py +5 -12
  5. server/ui_demo.py +3 -17
Dockerfile CHANGED
@@ -74,21 +74,21 @@ WORKDIR /app
74
  # Copy the virtual environment from builder
75
  COPY --from=builder /app/env/.venv /app/.venv
76
 
77
- # Copy the environment code
78
  COPY --from=builder /app/env /app/env
79
 
80
- # Copy built frontend assets into expected location
81
  COPY --from=frontend-builder /app/frontend/dist /app/env/frontend/dist
82
 
83
  # Set PATH to use the virtual environment
84
  ENV PATH="/app/.venv/bin:$PATH"
85
 
86
- # Set PYTHONPATH so the space_manufacturing package is importable
87
  ENV PYTHONPATH="/app/env:$PYTHONPATH"
88
 
89
  # Health check
90
  HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
91
  CMD curl -f http://localhost:8000/health || exit 1
92
 
93
- # Run the FastAPI server
94
- CMD ["sh", "-c", "cd /app/env && uvicorn space_manufacturing.server.app:app --host 0.0.0.0 --port 8000"]
 
74
  # Copy the virtual environment from builder
75
  COPY --from=builder /app/env/.venv /app/.venv
76
 
77
+ # Copy the flat package source (SpaceFactory/ root contains all .py modules)
78
  COPY --from=builder /app/env /app/env
79
 
80
+ # Copy built frontend assets
81
  COPY --from=frontend-builder /app/frontend/dist /app/env/frontend/dist
82
 
83
  # Set PATH to use the virtual environment
84
  ENV PATH="/app/.venv/bin:$PATH"
85
 
86
+ # All modules (env.py, models.py, server/, etc.) are directly under /app/env
87
  ENV PYTHONPATH="/app/env:$PYTHONPATH"
88
 
89
  # Health check
90
  HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
91
  CMD curl -f http://localhost:8000/health || exit 1
92
 
93
+ # server/ is a sub-package of /app/env, importable as `server.app`
94
+ CMD ["uvicorn", "server.app:app", "--host", "0.0.0.0", "--port", "8000"]
inference.py CHANGED
@@ -27,7 +27,6 @@ Usage:
27
  from __future__ import annotations
28
 
29
  import asyncio
30
- import importlib.util
31
  import json
32
  import os
33
  import re
@@ -49,35 +48,16 @@ try:
49
  except Exception: # pragma: no cover
50
  load_dotenv = None # type: ignore[assignment]
51
 
52
- # ── package import with importlib fallback ─────────────────────────────────────
53
- try:
54
- from space_manufacturing import (
55
- EasyTask,
56
- HardTask,
57
- ManufacturingAction,
58
- ManufacturingTaskEnv,
59
- MediumTask,
60
- )
61
- from space_manufacturing.graders import ManufacturingTaskGrader
62
- from space_manufacturing.models import ManufacturingObservation
63
- except ImportError: # pragma: no cover β€” script executed directly from SpaceFactory/
64
- _pkg_root = Path(__file__).resolve().parent
65
- _spec = importlib.util.spec_from_file_location(
66
- "space_manufacturing",
67
- _pkg_root / "__init__.py",
68
- submodule_search_locations=[str(_pkg_root)],
69
- )
70
- if _spec is None or _spec.loader is None:
71
- raise
72
- _sm = importlib.util.module_from_spec(_spec)
73
- sys.modules["space_manufacturing"] = _sm
74
- _spec.loader.exec_module(_sm) # type: ignore[union-attr]
75
- EasyTask = _sm.EasyTask
76
- HardTask = _sm.HardTask
77
- MediumTask = _sm.MediumTask
78
- ManufacturingAction = _sm.ManufacturingAction
79
- ManufacturingTaskEnv = _sm.ManufacturingTaskEnv
80
- ManufacturingTaskGrader = _sm.ManufacturingTaskGrader # type: ignore[attr-defined]
81
  ManufacturingObservation = _sm.ManufacturingObservation # type: ignore[attr-defined]
82
 
83
  if load_dotenv is not None:
 
27
  from __future__ import annotations
28
 
29
  import asyncio
 
30
  import json
31
  import os
32
  import re
 
48
  except Exception: # pragma: no cover
49
  load_dotenv = None # type: ignore[assignment]
50
 
51
+ # ── package imports ────────────────────────────────────────────────────────────
52
+ # inference.py lives at the root of SpaceFactory/, so all sibling modules are
53
+ # importable directly (no package prefix needed).
54
+ from env import ManufacturingTaskEnv # noqa: E402
55
+ from graders import ManufacturingTaskGrader # noqa: E402
56
+ from models import ( # noqa: E402
57
+ ManufacturingAction,
58
+ ManufacturingObservation,
59
+ )
60
+ from tasks import EasyTask, HardTask, MediumTask # noqa: E402
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
61
  ManufacturingObservation = _sm.ManufacturingObservation # type: ignore[attr-defined]
62
 
63
  if load_dotenv is not None:
pyproject.toml CHANGED
@@ -14,7 +14,7 @@ dependencies = [
14
  ]
15
 
16
  [project.scripts]
17
- server = "space_manufacturing.server.app:main"
18
 
19
  [build-system]
20
  requires = ["setuptools>=68", "wheel"]
@@ -22,4 +22,4 @@ build-backend = "setuptools.build_meta"
22
 
23
  [tool.setuptools.packages.find]
24
  where = ["."]
25
- include = ["space_manufacturing*"]
 
14
  ]
15
 
16
  [project.scripts]
17
+ server = "server.app:main"
18
 
19
  [build-system]
20
  requires = ["setuptools>=68", "wheel"]
 
22
 
23
  [tool.setuptools.packages.find]
24
  where = ["."]
25
+ include = ["server*"]
server/app.py CHANGED
@@ -17,16 +17,9 @@ try:
17
  except ImportError as exc:
18
  raise SystemExit(f"FastAPI is required: pip install fastapi uvicorn\n{exc}") from exc
19
 
20
- sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", ".."))
21
-
22
- try:
23
- from space_manufacturing.env import ManufacturingTaskEnv
24
- from space_manufacturing.models import ManufacturingAction, ManufacturingObservation
25
- from space_manufacturing.server.ui_demo import ManufacturingUIDemo
26
- except ImportError:
27
- from ..env import ManufacturingTaskEnv # type: ignore
28
- from ..models import ManufacturingAction, ManufacturingObservation # type: ignore
29
- from .ui_demo import ManufacturingUIDemo # type: ignore
30
 
31
  # ── app ────────────────────────────────────────────────────────────────────────
32
  app = FastAPI(
@@ -213,7 +206,7 @@ def _fallback_html() -> str:
213
  f"Total reward: {s.total_reward:.2f} | Done: {s.done}</p>"
214
  f"<h2>Platforms</h2><ul>{platforms_html}</ul>"
215
  f"<p class='warn'>Frontend not built. Run: "
216
- f"cd space_manufacturing/frontend &amp;&amp; npm install &amp;&amp; npm run build</p>"
217
  f"</body></html>"
218
  )
219
 
@@ -227,7 +220,7 @@ def main() -> None:
227
  if sys.platform == "win32":
228
  asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
229
 
230
- uvicorn.run("space_manufacturing.server.app:app", host="0.0.0.0", port=8000, reload=False)
231
 
232
 
233
  if __name__ == "__main__":
 
17
  except ImportError as exc:
18
  raise SystemExit(f"FastAPI is required: pip install fastapi uvicorn\n{exc}") from exc
19
 
20
+ from .ui_demo import ManufacturingUIDemo
21
+ from ..env import ManufacturingTaskEnv
22
+ from ..models import ManufacturingAction, ManufacturingObservation
 
 
 
 
 
 
 
23
 
24
  # ── app ────────────────────────────────────────────────────────────────────────
25
  app = FastAPI(
 
206
  f"Total reward: {s.total_reward:.2f} | Done: {s.done}</p>"
207
  f"<h2>Platforms</h2><ul>{platforms_html}</ul>"
208
  f"<p class='warn'>Frontend not built. Run: "
209
+ f"cd frontend &amp;&amp; npm install &amp;&amp; npm run build</p>"
210
  f"</body></html>"
211
  )
212
 
 
220
  if sys.platform == "win32":
221
  asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
222
 
223
+ uvicorn.run("server.app:app", host="0.0.0.0", port=8000, reload=False)
224
 
225
 
226
  if __name__ == "__main__":
server/ui_demo.py CHANGED
@@ -3,27 +3,13 @@
3
  from __future__ import annotations
4
 
5
  import math
6
- import os
7
  import sys
8
  from threading import Lock
9
  from typing import Any, Dict, List
10
 
11
- _here = os.path.dirname(__file__)
12
- sys.path.insert(0, os.path.join(_here, "..", ".."))
13
-
14
- try:
15
- from space_manufacturing.models import ManufacturingAction
16
- from space_manufacturing.env import ManufacturingTaskEnv
17
- from space_manufacturing.graders import ManufacturingTaskGrader
18
- except ImportError:
19
- try:
20
- from ..models import ManufacturingAction # type: ignore
21
- from ..env import ManufacturingTaskEnv # type: ignore
22
- from ..graders import ManufacturingTaskGrader # type: ignore
23
- except ImportError:
24
- from models import ManufacturingAction # type: ignore
25
- from env import ManufacturingTaskEnv # type: ignore
26
- from graders import ManufacturingTaskGrader # type: ignore
27
 
28
 
29
  # ── geometry helpers ───────────────────────────────────────────────────────────
 
3
  from __future__ import annotations
4
 
5
  import math
 
6
  import sys
7
  from threading import Lock
8
  from typing import Any, Dict, List
9
 
10
+ from ..models import ManufacturingAction
11
+ from ..env import ManufacturingTaskEnv
12
+ from ..graders import ManufacturingTaskGrader
 
 
 
 
 
 
 
 
 
 
 
 
 
13
 
14
 
15
  # ── geometry helpers ───────────────────────────────────────────────────────────