diff --git a/checkport.py b/checkport.py new file mode 100644 index 00000000..7f79af6f --- /dev/null +++ b/checkport.py @@ -0,0 +1,18 @@ +import socket + + +def check_port(host, port): + s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + try: + s.connect((host, port)) + print(f"Connection successful to {host}:{port}!") + except Exception as e: + print(f"Connection failed to {host}:{port}: {e}") + finally: + s.close() + + +if __name__ == "__main__": + host = "127.0.0.1" # or "localhost" + port = 51350 + check_port(host, port) diff --git a/lerobot/scripts/server/hilserl_pb2.py b/lerobot/scripts/server/hilserl_pb2.py new file mode 100644 index 00000000..bf605a37 --- /dev/null +++ b/lerobot/scripts/server/hilserl_pb2.py @@ -0,0 +1,48 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: hilserl.proto +# Protobuf Python Version: 5.29.0 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 5, + 29, + 0, + '', + 'hilserl.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\rhilserl.proto\x12\x08hil_serl\"\x83\x01\n\x10\x41\x63torInformation\x12*\n\ntransition\x18\x01 \x01(\x0b\x32\x14.hil_serl.TransitionH\x00\x12;\n\x13interaction_message\x18\x02 \x01(\x0b\x32\x1c.hil_serl.InteractionMessageH\x00\x42\x06\n\x04\x64\x61ta\"&\n\nTransition\x12\x18\n\x10transition_bytes\x18\x01 \x01(\x0c\"%\n\nParameters\x12\x17\n\x0fparameter_bytes\x18\x01 \x01(\x0c\"7\n\x12InteractionMessage\x12!\n\x19interaction_message_bytes\x18\x01 \x01(\x0c\"\x07\n\x05\x45mpty2\x92\x01\n\x0eLearnerService\x12\x37\n\x0eSendTransition\x12\x14.hil_serl.Transition\x1a\x0f.hil_serl.Empty\x12G\n\x16SendInteractionMessage\x12\x1c.hil_serl.InteractionMessage\x1a\x0f.hil_serl.Empty2\x8c\x01\n\x0c\x41\x63torService\x12\x43\n\x10StreamTransition\x12\x0f.hil_serl.Empty\x1a\x1a.hil_serl.ActorInformation\"\x00\x30\x01\x12\x37\n\x0eSendParameters\x12\x14.hil_serl.Parameters\x1a\x0f.hil_serl.Emptyb\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'hilserl_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_ACTORINFORMATION']._serialized_start=28 + _globals['_ACTORINFORMATION']._serialized_end=159 + _globals['_TRANSITION']._serialized_start=161 + _globals['_TRANSITION']._serialized_end=199 + _globals['_PARAMETERS']._serialized_start=201 + _globals['_PARAMETERS']._serialized_end=238 + _globals['_INTERACTIONMESSAGE']._serialized_start=240 + _globals['_INTERACTIONMESSAGE']._serialized_end=295 + _globals['_EMPTY']._serialized_start=297 + _globals['_EMPTY']._serialized_end=304 + _globals['_LEARNERSERVICE']._serialized_start=307 + _globals['_LEARNERSERVICE']._serialized_end=453 + _globals['_ACTORSERVICE']._serialized_start=456 + _globals['_ACTORSERVICE']._serialized_end=596 +# @@protoc_insertion_point(module_scope) diff --git a/lerobot/scripts/server/hilserl_pb2_grpc.py b/lerobot/scripts/server/hilserl_pb2_grpc.py new file mode 100644 index 00000000..7dcc8221 --- /dev/null +++ b/lerobot/scripts/server/hilserl_pb2_grpc.py @@ -0,0 +1,269 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc +import warnings + +import hilserl_pb2 as hilserl__pb2 + +GRPC_GENERATED_VERSION = '1.70.0' +GRPC_VERSION = grpc.__version__ +_version_not_supported = False + +try: + from grpc._utilities import first_version_is_lower + _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) +except ImportError: + _version_not_supported = True + +if _version_not_supported: + raise RuntimeError( + f'The grpc package installed is at version {GRPC_VERSION},' + + f' but the generated code in hilserl_pb2_grpc.py depends on' + + f' grpcio>={GRPC_GENERATED_VERSION}.' + + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' + + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' + ) + + +class LearnerServiceStub(object): + """LearnerService: the Actor calls this to push transitions. + The Learner implements this service. + """ + + def __init__(self, channel): + """Constructor. + + Args: + channel: A grpc.Channel. + """ + self.SendTransition = channel.unary_unary( + '/hil_serl.LearnerService/SendTransition', + request_serializer=hilserl__pb2.Transition.SerializeToString, + response_deserializer=hilserl__pb2.Empty.FromString, + _registered_method=True) + self.SendInteractionMessage = channel.unary_unary( + '/hil_serl.LearnerService/SendInteractionMessage', + request_serializer=hilserl__pb2.InteractionMessage.SerializeToString, + response_deserializer=hilserl__pb2.Empty.FromString, + _registered_method=True) + + +class LearnerServiceServicer(object): + """LearnerService: the Actor calls this to push transitions. + The Learner implements this service. + """ + + def SendTransition(self, request, context): + """Actor -> Learner to store transitions + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def SendInteractionMessage(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + +def add_LearnerServiceServicer_to_server(servicer, server): + rpc_method_handlers = { + 'SendTransition': grpc.unary_unary_rpc_method_handler( + servicer.SendTransition, + request_deserializer=hilserl__pb2.Transition.FromString, + response_serializer=hilserl__pb2.Empty.SerializeToString, + ), + 'SendInteractionMessage': grpc.unary_unary_rpc_method_handler( + servicer.SendInteractionMessage, + request_deserializer=hilserl__pb2.InteractionMessage.FromString, + response_serializer=hilserl__pb2.Empty.SerializeToString, + ), + } + generic_handler = grpc.method_handlers_generic_handler( + 'hil_serl.LearnerService', rpc_method_handlers) + server.add_generic_rpc_handlers((generic_handler,)) + server.add_registered_method_handlers('hil_serl.LearnerService', rpc_method_handlers) + + + # This class is part of an EXPERIMENTAL API. +class LearnerService(object): + """LearnerService: the Actor calls this to push transitions. + The Learner implements this service. + """ + + @staticmethod + def SendTransition(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/hil_serl.LearnerService/SendTransition', + hilserl__pb2.Transition.SerializeToString, + hilserl__pb2.Empty.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def SendInteractionMessage(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/hil_serl.LearnerService/SendInteractionMessage', + hilserl__pb2.InteractionMessage.SerializeToString, + hilserl__pb2.Empty.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + +class ActorServiceStub(object): + """ActorService: the Learner calls this to push parameters. + The Actor implements this service. + """ + + def __init__(self, channel): + """Constructor. + + Args: + channel: A grpc.Channel. + """ + self.StreamTransition = channel.unary_stream( + '/hil_serl.ActorService/StreamTransition', + request_serializer=hilserl__pb2.Empty.SerializeToString, + response_deserializer=hilserl__pb2.ActorInformation.FromString, + _registered_method=True) + self.SendParameters = channel.unary_unary( + '/hil_serl.ActorService/SendParameters', + request_serializer=hilserl__pb2.Parameters.SerializeToString, + response_deserializer=hilserl__pb2.Empty.FromString, + _registered_method=True) + + +class ActorServiceServicer(object): + """ActorService: the Learner calls this to push parameters. + The Actor implements this service. + """ + + def StreamTransition(self, request, context): + """Learner -> Actor to send new parameters + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def SendParameters(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + +def add_ActorServiceServicer_to_server(servicer, server): + rpc_method_handlers = { + 'StreamTransition': grpc.unary_stream_rpc_method_handler( + servicer.StreamTransition, + request_deserializer=hilserl__pb2.Empty.FromString, + response_serializer=hilserl__pb2.ActorInformation.SerializeToString, + ), + 'SendParameters': grpc.unary_unary_rpc_method_handler( + servicer.SendParameters, + request_deserializer=hilserl__pb2.Parameters.FromString, + response_serializer=hilserl__pb2.Empty.SerializeToString, + ), + } + generic_handler = grpc.method_handlers_generic_handler( + 'hil_serl.ActorService', rpc_method_handlers) + server.add_generic_rpc_handlers((generic_handler,)) + server.add_registered_method_handlers('hil_serl.ActorService', rpc_method_handlers) + + + # This class is part of an EXPERIMENTAL API. +class ActorService(object): + """ActorService: the Learner calls this to push parameters. + The Actor implements this service. + """ + + @staticmethod + def StreamTransition(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_stream( + request, + target, + '/hil_serl.ActorService/StreamTransition', + hilserl__pb2.Empty.SerializeToString, + hilserl__pb2.ActorInformation.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def SendParameters(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/hil_serl.ActorService/SendParameters', + hilserl__pb2.Parameters.SerializeToString, + hilserl__pb2.Empty.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) diff --git a/lerobot/scripts/server/learner_server.py b/lerobot/scripts/server/learner_server.py index 29afca7b..faa7a0e7 100644 --- a/lerobot/scripts/server/learner_server.py +++ b/lerobot/scripts/server/learner_server.py @@ -206,9 +206,8 @@ def start_learner_threads( server_thread.start() transition_thread.start() - # param_push_thread.start() - - # param_push_thread.join() + param_push_thread.start() + param_push_thread.join() transition_thread.join() server_thread.join()