websocket으로만 통신 — MolmoBot(F=2, goal-conditioned)은 지금까지 eval.py in-process(use_policy_server=false) 경로만 지원해 하네스와 연결 불가serve.py에 type == "molmobot" 분기 추가 — eval.py:285의 in-process 생성자 호출을 그대로 미러링, 기존 type == "pi"(pi0.5) 경로는 무수정MolmoBot(F=2, goal-conditioned) 정책의 지금까지의 모든 평가 — hand-off replace, HardBench(Pick/PnP/NextTo), press bench 등 —
는 eval.py가 정책 객체를 프로세스 안에서 직접 생성해 호출하는 in-process 방식(use_policy_server=false)으로만 수행됐다.
반면 scene_bench의 online harness는 정책을 별도 프로세스로 띄워 websocket으로만 연결하는 구조라, 지금 상태로는
MolmoBot 체크포인트를 scene_bench 하네스에 붙일 방법이 없었다.
serve.py는 이미 pi0.5(type == "pi")에 대해서는 websocket 서빙 경로를 갖고 있었지만, MolmoBot 타입 분기는
없어서 Invalid policy type으로 떨어지는 상태였다.
MolmoBot-Pi0/molmobot_pi0/eval/real/serve.py의 main()에 elif policy_cfg.type == "molmobot": 분기를
추가했다. 새 코드를 짜는 대신 eval.py:281-286에 이미 있던 in-process 생성자 호출을 그대로 옮겨온 것이 핵심 — 같은 체크포인트가
in-process/websocket 두 경로에서 동일하게 동작함을 보장한다.
체크포인트 경로 해석은 pi0.5 경로와 동일한 규칙을 따른다 — model_dir + checkpoints가 모두 주어지면
단일 체크포인트(len == 1 assert)를 optimizer.pt 제외하고 다운로드, 아니면 model_dir 자체를 그대로 사용.
2026-09-17 커밋(aaa3f8d)으로 병합됨. 변경 범위는 serve.py 1개 파일, +19줄 — 신규 코드가 아니라 기존
in-process 생성자 호출의 재배치이므로 로직 리스크는 낮다.
지금까지 MolmoBot(F=2) goal-conditioned 정책의 모든 평가는 eval.py in-process 경로에 갇혀 있었다. 이 변경으로
같은 체크포인트를 websocket 서버로 노출할 수 있게 되면서, MolmoBot 평가가 scene_bench의 online harness라는 외부 벤치마크 경로로
확장될 여지가 생겼다. 작업 자체는 작지만(19줄, 기존 로직 미러링), pi0.5에만 있던 서빙 능력을 MolmoBot에도 동등하게 맞춘다는 점에서
두 정책 타입 간 평가 인프라 격차를 좁힌 변경이다.
실제 websocket 연결/scene_bench 하네스 연동이 검증되지 않았다. 로그인 노드에서 스모크할 때는 함정 25번(포트 8000 충돌)에 유의해
POLICY_SERVER_PORT를 빈 포트로 지정해야 한다.
serve.py를 type=molmobot으로 띄운 뒤 scene_bench 하네스에서 실제 접속·rollout까지 스모크 테스트 필요. 성공하면
scene_bench 벤치 결과를 별도 카드로 기록.