syntax = "proto3"; message Int { int64 data = 1; } message String { string data = 1; } message Double { double data = 1; } // Empty used to represent a None object message Empty { } message Bool { bool data = 1; } message Ref { uint64 data = 1; } message PyObj { bytes data = 1; } // Union of possible object types message Obj { String string_data = 1; Int int_data = 2; Double double_data = 3; Bool bool_data = 10; Tuple tuple_data = 7; List list_data = 4; Dict dict_data = 8; Array array_data = 5; Empty empty_data = 9; Ref objref_data = 11; PyObj pyobj_data = 6; } message List { repeated Obj elem = 1; } message Tuple { repeated Obj elem = 1; } message DictEntry { Obj key = 1; Obj value = 2; } message Dict { repeated DictEntry elem = 1; } message Value { uint64 ref = 1; // For pass by reference Obj obj = 2; // For pass by value } message Task { string name = 1; // Name of the function call repeated Value arg = 2; // List of arguments, can be either object references or protobuf descriptions of object passed by value repeated uint64 result = 3; // Object references for result } message Put { uint64 objref = 1; // The objref for the object that was put } // This is used internally by the scheduler. From the scheduler's perspective, // the submission of tasks (via SubmitTask) and the submission of puts (via // PutObj) look very similar, and so it is useful to be able to handle them // together (for example in the computation graph). message Operation { Task task = 1; Put put = 2; uint64 creator_operationid = 3; // The id of the task that called this task or put. } message TaskStatus { uint64 operationid = 1; string function_name = 2; string worker_address = 3; string error_message = 4; } message Array { repeated uint64 shape = 1; sint64 dtype = 2; bool is_scalar = 8; repeated double double_data = 3; repeated float float_data = 4; repeated sint64 int_data = 5; repeated uint64 uint_data = 6; repeated uint64 objref_data = 7; }