debug
Browse files
app.py
CHANGED
|
@@ -1,6 +1,8 @@
|
|
| 1 |
"""Dummy Gradio entrypoint with layout similar to original RoboMME UI."""
|
| 2 |
|
|
|
|
| 3 |
import os
|
|
|
|
| 4 |
|
| 5 |
# Disable SSR for HF Spaces compatibility (avoids gradio_api heartbeat 404).
|
| 6 |
os.environ["GRADIO_SSR_MODE"] = "false"
|
|
@@ -37,6 +39,31 @@ CSS = """
|
|
| 37 |
"""
|
| 38 |
|
| 39 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 40 |
def _task_goal(task_name: str) -> str:
|
| 41 |
return f"Dummy goal for {task_name}"
|
| 42 |
|
|
@@ -96,15 +123,18 @@ def create_dummy_demo() -> gr.Blocks:
|
|
| 96 |
"""Build a dummy app that mimics original layout without ManiSkill."""
|
| 97 |
|
| 98 |
def on_task_change(task_name: str):
|
|
|
|
| 99 |
task = task_name if task_name in DUMMY_TASKS else DUMMY_TASKS[0]
|
| 100 |
step = 0
|
| 101 |
return (step,) + _build_task_updates(task, step, PHASE_DEMO_VIDEO)
|
| 102 |
|
| 103 |
def skip_video(task_name: str, step: int):
|
|
|
|
| 104 |
task = task_name if task_name in DUMMY_TASKS else DUMMY_TASKS[0]
|
| 105 |
return _build_task_updates(task, step, PHASE_ACTION_KEYPOINT)
|
| 106 |
|
| 107 |
def on_reference_action(task_name: str):
|
|
|
|
| 108 |
actions = _task_actions(task_name)
|
| 109 |
return (
|
| 110 |
gr.update(value=actions[0]),
|
|
@@ -113,11 +143,20 @@ def create_dummy_demo() -> gr.Blocks:
|
|
| 113 |
|
| 114 |
def on_map_click(evt: gr.SelectData):
|
| 115 |
if evt is None or evt.index is None:
|
|
|
|
| 116 |
return ""
|
| 117 |
x, y = evt.index
|
|
|
|
| 118 |
return f"({x}, {y})"
|
| 119 |
|
| 120 |
def execute_step(task_name: str, action_name: str, coords_text: str, step: int):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 121 |
task = task_name if task_name in DUMMY_TASKS else DUMMY_TASKS[0]
|
| 122 |
next_step = min(step + 1, 5)
|
| 123 |
action = action_name or "No action selected"
|
|
@@ -132,11 +171,13 @@ def create_dummy_demo() -> gr.Blocks:
|
|
| 132 |
return next_step, _dummy_frame(task, next_step), log, progress
|
| 133 |
|
| 134 |
def restart_episode(task_name: str):
|
|
|
|
| 135 |
task = task_name if task_name in DUMMY_TASKS else DUMMY_TASKS[0]
|
| 136 |
step = 0
|
| 137 |
return (step,) + _build_task_updates(task, step, PHASE_DEMO_VIDEO)
|
| 138 |
|
| 139 |
def next_task(current_task: str):
|
|
|
|
| 140 |
try:
|
| 141 |
idx = DUMMY_TASKS.index(current_task)
|
| 142 |
except ValueError:
|
|
@@ -411,6 +452,9 @@ _original_launch = demo.launch
|
|
| 411 |
def _patched_launch(**kwargs):
|
| 412 |
kwargs.setdefault("ssr_mode", False)
|
| 413 |
kwargs.setdefault("show_error", True)
|
|
|
|
|
|
|
|
|
|
| 414 |
return _original_launch(**kwargs)
|
| 415 |
|
| 416 |
|
|
@@ -418,9 +462,12 @@ demo.launch = _patched_launch
|
|
| 418 |
|
| 419 |
|
| 420 |
if __name__ == "__main__":
|
|
|
|
| 421 |
demo.launch(
|
| 422 |
server_name="0.0.0.0",
|
| 423 |
server_port=int(os.getenv("PORT", "7860")),
|
| 424 |
ssr_mode=False,
|
| 425 |
show_error=True,
|
|
|
|
|
|
|
| 426 |
)
|
|
|
|
| 1 |
"""Dummy Gradio entrypoint with layout similar to original RoboMME UI."""
|
| 2 |
|
| 3 |
+
import logging
|
| 4 |
import os
|
| 5 |
+
import sys
|
| 6 |
|
| 7 |
# Disable SSR for HF Spaces compatibility (avoids gradio_api heartbeat 404).
|
| 8 |
os.environ["GRADIO_SSR_MODE"] = "false"
|
|
|
|
| 39 |
"""
|
| 40 |
|
| 41 |
|
| 42 |
+
def _setup_logging() -> logging.Logger:
|
| 43 |
+
"""Configure terminal logging for runtime debugging."""
|
| 44 |
+
level_name = os.getenv("LOG_LEVEL", "INFO").upper()
|
| 45 |
+
level = getattr(logging, level_name, logging.INFO)
|
| 46 |
+
try:
|
| 47 |
+
sys.stdout.reconfigure(line_buffering=True)
|
| 48 |
+
except Exception:
|
| 49 |
+
pass
|
| 50 |
+
logging.basicConfig(
|
| 51 |
+
level=level,
|
| 52 |
+
format="%(asctime)s | %(levelname)s | %(name)s | %(message)s",
|
| 53 |
+
stream=sys.stdout,
|
| 54 |
+
force=True,
|
| 55 |
+
)
|
| 56 |
+
# Keep noisy dependency logs down unless explicitly requested.
|
| 57 |
+
logging.getLogger("httpx").setLevel(logging.WARNING)
|
| 58 |
+
logging.getLogger("uvicorn.access").setLevel(logging.INFO)
|
| 59 |
+
logger = logging.getLogger("robomme.app")
|
| 60 |
+
logger.info("Logging initialized with LOG_LEVEL=%s", level_name)
|
| 61 |
+
return logger
|
| 62 |
+
|
| 63 |
+
|
| 64 |
+
LOGGER = _setup_logging()
|
| 65 |
+
|
| 66 |
+
|
| 67 |
def _task_goal(task_name: str) -> str:
|
| 68 |
return f"Dummy goal for {task_name}"
|
| 69 |
|
|
|
|
| 123 |
"""Build a dummy app that mimics original layout without ManiSkill."""
|
| 124 |
|
| 125 |
def on_task_change(task_name: str):
|
| 126 |
+
LOGGER.debug("on_task_change(task_name=%s)", task_name)
|
| 127 |
task = task_name if task_name in DUMMY_TASKS else DUMMY_TASKS[0]
|
| 128 |
step = 0
|
| 129 |
return (step,) + _build_task_updates(task, step, PHASE_DEMO_VIDEO)
|
| 130 |
|
| 131 |
def skip_video(task_name: str, step: int):
|
| 132 |
+
LOGGER.debug("skip_video(task_name=%s, step=%s)", task_name, step)
|
| 133 |
task = task_name if task_name in DUMMY_TASKS else DUMMY_TASKS[0]
|
| 134 |
return _build_task_updates(task, step, PHASE_ACTION_KEYPOINT)
|
| 135 |
|
| 136 |
def on_reference_action(task_name: str):
|
| 137 |
+
LOGGER.debug("on_reference_action(task_name=%s)", task_name)
|
| 138 |
actions = _task_actions(task_name)
|
| 139 |
return (
|
| 140 |
gr.update(value=actions[0]),
|
|
|
|
| 143 |
|
| 144 |
def on_map_click(evt: gr.SelectData):
|
| 145 |
if evt is None or evt.index is None:
|
| 146 |
+
LOGGER.debug("on_map_click received empty event")
|
| 147 |
return ""
|
| 148 |
x, y = evt.index
|
| 149 |
+
LOGGER.debug("on_map_click(x=%s, y=%s)", x, y)
|
| 150 |
return f"({x}, {y})"
|
| 151 |
|
| 152 |
def execute_step(task_name: str, action_name: str, coords_text: str, step: int):
|
| 153 |
+
LOGGER.info(
|
| 154 |
+
"execute_step(task_name=%s, action=%s, coords=%s, step=%s)",
|
| 155 |
+
task_name,
|
| 156 |
+
action_name,
|
| 157 |
+
coords_text,
|
| 158 |
+
step,
|
| 159 |
+
)
|
| 160 |
task = task_name if task_name in DUMMY_TASKS else DUMMY_TASKS[0]
|
| 161 |
next_step = min(step + 1, 5)
|
| 162 |
action = action_name or "No action selected"
|
|
|
|
| 171 |
return next_step, _dummy_frame(task, next_step), log, progress
|
| 172 |
|
| 173 |
def restart_episode(task_name: str):
|
| 174 |
+
LOGGER.info("restart_episode(task_name=%s)", task_name)
|
| 175 |
task = task_name if task_name in DUMMY_TASKS else DUMMY_TASKS[0]
|
| 176 |
step = 0
|
| 177 |
return (step,) + _build_task_updates(task, step, PHASE_DEMO_VIDEO)
|
| 178 |
|
| 179 |
def next_task(current_task: str):
|
| 180 |
+
LOGGER.info("next_task(current_task=%s)", current_task)
|
| 181 |
try:
|
| 182 |
idx = DUMMY_TASKS.index(current_task)
|
| 183 |
except ValueError:
|
|
|
|
| 452 |
def _patched_launch(**kwargs):
|
| 453 |
kwargs.setdefault("ssr_mode", False)
|
| 454 |
kwargs.setdefault("show_error", True)
|
| 455 |
+
kwargs.setdefault("debug", True)
|
| 456 |
+
kwargs.setdefault("quiet", False)
|
| 457 |
+
LOGGER.info("Launching app with kwargs=%s", kwargs)
|
| 458 |
return _original_launch(**kwargs)
|
| 459 |
|
| 460 |
|
|
|
|
| 462 |
|
| 463 |
|
| 464 |
if __name__ == "__main__":
|
| 465 |
+
LOGGER.info("Starting app.py entrypoint")
|
| 466 |
demo.launch(
|
| 467 |
server_name="0.0.0.0",
|
| 468 |
server_port=int(os.getenv("PORT", "7860")),
|
| 469 |
ssr_mode=False,
|
| 470 |
show_error=True,
|
| 471 |
+
debug=True,
|
| 472 |
+
quiet=False,
|
| 473 |
)
|