class MyMessage(object):
    # server to client
    MSG_TYPE_S2C_INIT_CONFIG = 1
    MSG_TYPE_S2C_SYNC_MODEL_TO_CLIENT = 2
    MSG_TYPE_S2C_START_FINE_TUNING = 3

    # client to server
    MSG_TYPE_C2S_SEND_MODEL_TO_SERVER = 4
    MSG_TYPE_C2S_SEND_STATS_TO_SERVER = 5
    MSG_TYPE_C2S_SEND_FINE_TUNE_RESULT_TO_SERVER = 6

    MSG_ARG_KEY_TYPE = "msg_type"
    MSG_ARG_KEY_SENDER = "sender"
    MSG_ARG_KEY_RECEIVER = "receiver"

    MSG_ARG_KEY_CLIENT_INDEX = "client_idx"
    MSG_ARG_KEY_NUM_SAMPLES = "num_samples"
    MSG_ARG_KEY_MODEL_PARAMS = "model_params"
    MSG_ARG_KEY_ARCH_PARAMS = "arch_params"
    MSG_ARG_KEY_LOCAL_TRAINING_ACC = "local_training_acc"
    MSG_ARG_KEY_LOCAL_TRAINING_LOSS = "local_training_loss"
    MSG_ARG_KEY_LOCAL_TEST_ACC = "local_test_acc"
    MSG_ARG_KEY_LOCAL_TEST_LOSS = "local_test_loss"

    MSG_ARG_KEY_ACC_GLOBAL_MODEL_ON_LOCAL_DATA = "acc_global_model_on_local_data"
    MSG_ARG_KEY_ACC_PERSONALIZED_MODEL_ON_LOCAL_DATA = "acc_personalized_model_on_local_data"

    MSG_ARG_KEY_PI_PARAM = "pi_params"
    MSG_ARG_KEY_ARCH_CLIENT = "personalized_arch"
    MSG_ARG_KEY_FLOPS = "flops"
    MSG_ARG_KEY_MODEL_SIZE = "model_size"

