Download real_robot/source/deployment/model_server/server_policy.py from mmmmmcyaaa/ReTime: direct link, hf CLI and curl.
- Browser
- Download file 2.74 kB
-
https://huggingface.co/mmmmmcyaaa/ReTime/resolve/main/real_robot/source/deployment/model_server/server_policy.py
- Command line
-
hf download hf://mmmmmcyaaa/ReTime/real_robot/source/deployment/model_server/server_policy.py
-
curl -L -o server_policy.py https://huggingface.co/mmmmmcyaaa/ReTime/resolve/main/real_robot/source/deployment/model_server/server_policy.py
2.74 kB
| # Copyright 2025 starVLA community. All rights reserved. | |
| # Licensed under the MIT License, Version 1.0 (the "License"); | |
| import logging | |
| import socket | |
| import argparse | |
| from deployment.model_server.tools.websocket_policy_server import WebsocketPolicyServer | |
| from deployment.model_server.policy_wrapper import PolicyServerWrapper | |
| import os | |
| def main(args) -> None: | |
| # Example usage: | |
| # policy = YourPolicyClass() # Replace with your actual policy class | |
| # server = WebsocketPolicyServer(policy, host="localhost", port=10091) | |
| # server.serve_forever() | |
| policy = PolicyServerWrapper( | |
| ckpt_path=args.ckpt_path, | |
| device="cuda", | |
| use_bf16=args.use_bf16, | |
| unnorm_key=args.unnorm_key, | |
| ) | |
| hostname = socket.gethostname() | |
| local_ip = socket.gethostbyname(hostname) | |
| logging.info("Creating server (host: %s, ip: %s)", hostname, local_ip) | |
| # The handshake metadata is the request contract; log it so a client | |
| # mismatch (camera order, state width, quaternion order) is visible here. | |
| for key, value in sorted(policy.metadata.items()): | |
| logging.info(" metadata %-24s %s", key, value) | |
| # start websocket server | |
| server = WebsocketPolicyServer( | |
| policy=policy, | |
| host="0.0.0.0", | |
| port=args.port, | |
| idle_timeout=args.idle_timeout, | |
| metadata={**policy.metadata, "policy_seed": args.seed}, | |
| ) | |
| logging.info("server running ...") | |
| server.serve_forever() | |
| def build_argparser(): | |
| parser = argparse.ArgumentParser() | |
| parser.add_argument("--ckpt_path", type=str, default="Qwen/Qwen2.5-VL-3B-Instruct") | |
| parser.add_argument("--port", type=int, default=10093) | |
| parser.add_argument("--use_bf16", action="store_true") | |
| parser.add_argument( | |
| "--unnorm_key", | |
| type=str, | |
| default=None, | |
| help="dataset_statistics.json key for un-normalization; required only for multi-dataset checkpoints", | |
| ) | |
| parser.add_argument("--seed", type=int, default=0) | |
| parser.add_argument("--idle_timeout" , type=int, default=1800, help="Idle timeout in seconds, -1 means never close") | |
| return parser | |
| def start_debugpy_once(): | |
| """start debugpy once""" | |
| import debugpy | |
| if getattr(start_debugpy_once, "_started", False): | |
| return | |
| debugpy.listen(("0.0.0.0", 10095)) | |
| print("Waiting for VSCode attach on 0.0.0.0:10095 ...") | |
| debugpy.wait_for_client() | |
| start_debugpy_once._started = True | |
| if __name__ == "__main__": | |
| logging.basicConfig(level=logging.INFO, force=True) | |
| parser = build_argparser() | |
| args = parser.parse_args() | |
| if os.getenv("DEBUG", "").strip().lower() in {"1", "true", "yes"}: | |
| print("DEBUGPY is enabled") | |
| start_debugpy_once() | |
| main(args) | |