flwr-nightly 1.19.0.dev20250611__py3-none-any.whl → 1.19.0.dev20250613__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. flwr/cli/ls.py +12 -33
  2. flwr/cli/utils.py +18 -1
  3. flwr/client/grpc_rere_client/connection.py +47 -29
  4. flwr/client/grpc_rere_client/grpc_adapter.py +8 -0
  5. flwr/client/rest_client/connection.py +70 -51
  6. flwr/common/constant.py +4 -0
  7. flwr/common/inflatable.py +24 -0
  8. flwr/common/serde.py +2 -0
  9. flwr/common/typing.py +2 -0
  10. flwr/proto/fleet_pb2.py +12 -16
  11. flwr/proto/fleet_pb2.pyi +4 -19
  12. flwr/proto/fleet_pb2_grpc.py +34 -0
  13. flwr/proto/fleet_pb2_grpc.pyi +13 -0
  14. flwr/proto/message_pb2.py +15 -9
  15. flwr/proto/message_pb2.pyi +41 -0
  16. flwr/proto/run_pb2.py +24 -24
  17. flwr/proto/run_pb2.pyi +4 -1
  18. flwr/proto/serverappio_pb2.py +22 -26
  19. flwr/proto/serverappio_pb2.pyi +4 -19
  20. flwr/proto/serverappio_pb2_grpc.py +34 -0
  21. flwr/proto/serverappio_pb2_grpc.pyi +13 -0
  22. flwr/server/app.py +1 -0
  23. flwr/server/grid/grpc_grid.py +20 -9
  24. flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +25 -0
  25. flwr/server/superlink/fleet/message_handler/message_handler.py +33 -2
  26. flwr/server/superlink/fleet/rest_rere/rest_api.py +26 -2
  27. flwr/server/superlink/linkstate/in_memory_linkstate.py +20 -3
  28. flwr/server/superlink/linkstate/linkstate.py +6 -2
  29. flwr/server/superlink/linkstate/sqlite_linkstate.py +19 -7
  30. flwr/server/superlink/serverappio/serverappio_servicer.py +65 -29
  31. flwr/server/superlink/simulation/simulationio_servicer.py +2 -1
  32. flwr/server/superlink/utils.py +23 -10
  33. flwr/supercore/object_store/in_memory_object_store.py +160 -33
  34. flwr/supercore/object_store/object_store.py +54 -7
  35. flwr/superexec/deployment.py +6 -2
  36. flwr/superexec/exec_grpc.py +3 -0
  37. flwr/superexec/exec_servicer.py +125 -22
  38. flwr/superexec/executor.py +4 -0
  39. flwr/superexec/simulation.py +7 -1
  40. {flwr_nightly-1.19.0.dev20250611.dist-info → flwr_nightly-1.19.0.dev20250613.dist-info}/METADATA +1 -1
  41. {flwr_nightly-1.19.0.dev20250611.dist-info → flwr_nightly-1.19.0.dev20250613.dist-info}/RECORD +43 -43
  42. {flwr_nightly-1.19.0.dev20250611.dist-info → flwr_nightly-1.19.0.dev20250613.dist-info}/WHEEL +0 -0
  43. {flwr_nightly-1.19.0.dev20250611.dist-info → flwr_nightly-1.19.0.dev20250613.dist-info}/entry_points.txt +0 -0
@@ -59,6 +59,11 @@ class FleetStub:
59
59
  flwr.proto.message_pb2.PullObjectResponse]
60
60
  """Pull Object"""
61
61
 
62
+ ConfirmMessageReceived: grpc.UnaryUnaryMultiCallable[
63
+ flwr.proto.message_pb2.ConfirmMessageReceivedRequest,
64
+ flwr.proto.message_pb2.ConfirmMessageReceivedResponse]
65
+ """Confirm Message Received"""
66
+
62
67
 
63
68
  class FleetServicer(metaclass=abc.ABCMeta):
64
69
  @abc.abstractmethod
@@ -131,5 +136,13 @@ class FleetServicer(metaclass=abc.ABCMeta):
131
136
  """Pull Object"""
132
137
  pass
133
138
 
139
+ @abc.abstractmethod
140
+ def ConfirmMessageReceived(self,
141
+ request: flwr.proto.message_pb2.ConfirmMessageReceivedRequest,
142
+ context: grpc.ServicerContext,
143
+ ) -> flwr.proto.message_pb2.ConfirmMessageReceivedResponse:
144
+ """Confirm Message Received"""
145
+ pass
146
+
134
147
 
135
148
  def add_FleetServicer_to_server(servicer: FleetServicer, server: grpc.Server) -> None: ...
flwr/proto/message_pb2.py CHANGED
@@ -18,7 +18,7 @@ from flwr.proto import transport_pb2 as flwr_dot_proto_dot_transport__pb2
18
18
  from flwr.proto import node_pb2 as flwr_dot_proto_dot_node__pb2
19
19
 
20
20
 
21
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x18\x66lwr/proto/message.proto\x12\nflwr.proto\x1a\x16\x66lwr/proto/error.proto\x1a\x1b\x66lwr/proto/recorddict.proto\x1a\x1a\x66lwr/proto/transport.proto\x1a\x15\x66lwr/proto/node.proto\"|\n\x07Message\x12&\n\x08metadata\x18\x01 \x01(\x0b\x32\x14.flwr.proto.Metadata\x12\'\n\x07\x63ontent\x18\x02 \x01(\x0b\x32\x16.flwr.proto.RecordDict\x12 \n\x05\x65rror\x18\x03 \x01(\x0b\x32\x11.flwr.proto.Error\"\xd0\x02\n\x07\x43ontext\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\x12\x0f\n\x07node_id\x18\x02 \x01(\x04\x12\x38\n\x0bnode_config\x18\x03 \x03(\x0b\x32#.flwr.proto.Context.NodeConfigEntry\x12%\n\x05state\x18\x04 \x01(\x0b\x32\x16.flwr.proto.RecordDict\x12\x36\n\nrun_config\x18\x05 \x03(\x0b\x32\".flwr.proto.Context.RunConfigEntry\x1a\x45\n\x0fNodeConfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\x1a\x44\n\x0eRunConfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\"\xbe\x01\n\x08Metadata\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\x12\x12\n\nmessage_id\x18\x02 \x01(\t\x12\x13\n\x0bsrc_node_id\x18\x03 \x01(\x04\x12\x13\n\x0b\x64st_node_id\x18\x04 \x01(\x04\x12\x1b\n\x13reply_to_message_id\x18\x05 \x01(\t\x12\x10\n\x08group_id\x18\x06 \x01(\t\x12\x0b\n\x03ttl\x18\x07 \x01(\x01\x12\x14\n\x0cmessage_type\x18\x08 \x01(\t\x12\x12\n\ncreated_at\x18\t \x01(\x01\"\x1f\n\tObjectIDs\x12\x12\n\nobject_ids\x18\x01 \x03(\t\"n\n\x11PushObjectRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x0e\n\x06run_id\x18\x02 \x01(\x04\x12\x11\n\tobject_id\x18\x03 \x01(\t\x12\x16\n\x0eobject_content\x18\x04 \x01(\x0c\"$\n\x12PushObjectResponse\x12\x0e\n\x06stored\x18\x01 \x01(\x08\"V\n\x11PullObjectRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x0e\n\x06run_id\x18\x02 \x01(\x04\x12\x11\n\tobject_id\x18\x03 \x01(\t\"\\\n\x12PullObjectResponse\x12\x14\n\x0cobject_found\x18\x01 \x01(\x08\x12\x18\n\x10object_available\x18\x02 \x01(\x08\x12\x16\n\x0eobject_content\x18\x03 \x01(\x0c\x62\x06proto3')
21
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x18\x66lwr/proto/message.proto\x12\nflwr.proto\x1a\x16\x66lwr/proto/error.proto\x1a\x1b\x66lwr/proto/recorddict.proto\x1a\x1a\x66lwr/proto/transport.proto\x1a\x15\x66lwr/proto/node.proto\"|\n\x07Message\x12&\n\x08metadata\x18\x01 \x01(\x0b\x32\x14.flwr.proto.Metadata\x12\'\n\x07\x63ontent\x18\x02 \x01(\x0b\x32\x16.flwr.proto.RecordDict\x12 \n\x05\x65rror\x18\x03 \x01(\x0b\x32\x11.flwr.proto.Error\"\xd0\x02\n\x07\x43ontext\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\x12\x0f\n\x07node_id\x18\x02 \x01(\x04\x12\x38\n\x0bnode_config\x18\x03 \x03(\x0b\x32#.flwr.proto.Context.NodeConfigEntry\x12%\n\x05state\x18\x04 \x01(\x0b\x32\x16.flwr.proto.RecordDict\x12\x36\n\nrun_config\x18\x05 \x03(\x0b\x32\".flwr.proto.Context.RunConfigEntry\x1a\x45\n\x0fNodeConfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\x1a\x44\n\x0eRunConfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\"\xbe\x01\n\x08Metadata\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\x12\x12\n\nmessage_id\x18\x02 \x01(\t\x12\x13\n\x0bsrc_node_id\x18\x03 \x01(\x04\x12\x13\n\x0b\x64st_node_id\x18\x04 \x01(\x04\x12\x1b\n\x13reply_to_message_id\x18\x05 \x01(\t\x12\x10\n\x08group_id\x18\x06 \x01(\t\x12\x0b\n\x03ttl\x18\x07 \x01(\x01\x12\x14\n\x0cmessage_type\x18\x08 \x01(\t\x12\x12\n\ncreated_at\x18\t \x01(\x01\"\x1f\n\tObjectIDs\x12\x12\n\nobject_ids\x18\x01 \x03(\t\"I\n\nObjectTree\x12\x11\n\tobject_id\x18\x01 \x01(\t\x12(\n\x08\x63hildren\x18\x02 \x03(\x0b\x32\x16.flwr.proto.ObjectTree\"n\n\x11PushObjectRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x0e\n\x06run_id\x18\x02 \x01(\x04\x12\x11\n\tobject_id\x18\x03 \x01(\t\x12\x16\n\x0eobject_content\x18\x04 \x01(\x0c\"$\n\x12PushObjectResponse\x12\x0e\n\x06stored\x18\x01 \x01(\x08\"V\n\x11PullObjectRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x0e\n\x06run_id\x18\x02 \x01(\x04\x12\x11\n\tobject_id\x18\x03 \x01(\t\"\\\n\x12PullObjectResponse\x12\x14\n\x0cobject_found\x18\x01 \x01(\x08\x12\x18\n\x10object_available\x18\x02 \x01(\x08\x12\x16\n\x0eobject_content\x18\x03 \x01(\x0c\"j\n\x1d\x43onfirmMessageReceivedRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x0e\n\x06run_id\x18\x02 \x01(\x04\x12\x19\n\x11message_object_id\x18\x03 \x01(\t\" \n\x1e\x43onfirmMessageReceivedResponseb\x06proto3')
22
22
 
23
23
  _globals = globals()
24
24
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
@@ -41,12 +41,18 @@ if _descriptor._USE_C_DESCRIPTORS == False:
41
41
  _globals['_METADATA']._serialized_end=800
42
42
  _globals['_OBJECTIDS']._serialized_start=802
43
43
  _globals['_OBJECTIDS']._serialized_end=833
44
- _globals['_PUSHOBJECTREQUEST']._serialized_start=835
45
- _globals['_PUSHOBJECTREQUEST']._serialized_end=945
46
- _globals['_PUSHOBJECTRESPONSE']._serialized_start=947
47
- _globals['_PUSHOBJECTRESPONSE']._serialized_end=983
48
- _globals['_PULLOBJECTREQUEST']._serialized_start=985
49
- _globals['_PULLOBJECTREQUEST']._serialized_end=1071
50
- _globals['_PULLOBJECTRESPONSE']._serialized_start=1073
51
- _globals['_PULLOBJECTRESPONSE']._serialized_end=1165
44
+ _globals['_OBJECTTREE']._serialized_start=835
45
+ _globals['_OBJECTTREE']._serialized_end=908
46
+ _globals['_PUSHOBJECTREQUEST']._serialized_start=910
47
+ _globals['_PUSHOBJECTREQUEST']._serialized_end=1020
48
+ _globals['_PUSHOBJECTRESPONSE']._serialized_start=1022
49
+ _globals['_PUSHOBJECTRESPONSE']._serialized_end=1058
50
+ _globals['_PULLOBJECTREQUEST']._serialized_start=1060
51
+ _globals['_PULLOBJECTREQUEST']._serialized_end=1146
52
+ _globals['_PULLOBJECTRESPONSE']._serialized_start=1148
53
+ _globals['_PULLOBJECTRESPONSE']._serialized_end=1240
54
+ _globals['_CONFIRMMESSAGERECEIVEDREQUEST']._serialized_start=1242
55
+ _globals['_CONFIRMMESSAGERECEIVEDREQUEST']._serialized_end=1348
56
+ _globals['_CONFIRMMESSAGERECEIVEDRESPONSE']._serialized_start=1350
57
+ _globals['_CONFIRMMESSAGERECEIVEDRESPONSE']._serialized_end=1382
52
58
  # @@protoc_insertion_point(module_scope)
@@ -140,6 +140,21 @@ class ObjectIDs(google.protobuf.message.Message):
140
140
  def ClearField(self, field_name: typing_extensions.Literal["object_ids",b"object_ids"]) -> None: ...
141
141
  global___ObjectIDs = ObjectIDs
142
142
 
143
+ class ObjectTree(google.protobuf.message.Message):
144
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
145
+ OBJECT_ID_FIELD_NUMBER: builtins.int
146
+ CHILDREN_FIELD_NUMBER: builtins.int
147
+ object_id: typing.Text
148
+ @property
149
+ def children(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___ObjectTree]: ...
150
+ def __init__(self,
151
+ *,
152
+ object_id: typing.Text = ...,
153
+ children: typing.Optional[typing.Iterable[global___ObjectTree]] = ...,
154
+ ) -> None: ...
155
+ def ClearField(self, field_name: typing_extensions.Literal["children",b"children","object_id",b"object_id"]) -> None: ...
156
+ global___ObjectTree = ObjectTree
157
+
143
158
  class PushObjectRequest(google.protobuf.message.Message):
144
159
  """PushObject messages"""
145
160
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
@@ -210,3 +225,29 @@ class PullObjectResponse(google.protobuf.message.Message):
210
225
  ) -> None: ...
211
226
  def ClearField(self, field_name: typing_extensions.Literal["object_available",b"object_available","object_content",b"object_content","object_found",b"object_found"]) -> None: ...
212
227
  global___PullObjectResponse = PullObjectResponse
228
+
229
+ class ConfirmMessageReceivedRequest(google.protobuf.message.Message):
230
+ """ConfirmMessageReceived messages"""
231
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
232
+ NODE_FIELD_NUMBER: builtins.int
233
+ RUN_ID_FIELD_NUMBER: builtins.int
234
+ MESSAGE_OBJECT_ID_FIELD_NUMBER: builtins.int
235
+ @property
236
+ def node(self) -> flwr.proto.node_pb2.Node: ...
237
+ run_id: builtins.int
238
+ message_object_id: typing.Text
239
+ def __init__(self,
240
+ *,
241
+ node: typing.Optional[flwr.proto.node_pb2.Node] = ...,
242
+ run_id: builtins.int = ...,
243
+ message_object_id: typing.Text = ...,
244
+ ) -> None: ...
245
+ def HasField(self, field_name: typing_extensions.Literal["node",b"node"]) -> builtins.bool: ...
246
+ def ClearField(self, field_name: typing_extensions.Literal["message_object_id",b"message_object_id","node",b"node","run_id",b"run_id"]) -> None: ...
247
+ global___ConfirmMessageReceivedRequest = ConfirmMessageReceivedRequest
248
+
249
+ class ConfirmMessageReceivedResponse(google.protobuf.message.Message):
250
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
251
+ def __init__(self,
252
+ ) -> None: ...
253
+ global___ConfirmMessageReceivedResponse = ConfirmMessageReceivedResponse
flwr/proto/run_pb2.py CHANGED
@@ -18,7 +18,7 @@ from flwr.proto import recorddict_pb2 as flwr_dot_proto_dot_recorddict__pb2
18
18
  from flwr.proto import transport_pb2 as flwr_dot_proto_dot_transport__pb2
19
19
 
20
20
 
21
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x14\x66lwr/proto/run.proto\x12\nflwr.proto\x1a\x14\x66lwr/proto/fab.proto\x1a\x15\x66lwr/proto/node.proto\x1a\x1b\x66lwr/proto/recorddict.proto\x1a\x1a\x66lwr/proto/transport.proto\"\xce\x02\n\x03Run\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\x12\x0e\n\x06\x66\x61\x62_id\x18\x02 \x01(\t\x12\x13\n\x0b\x66\x61\x62_version\x18\x03 \x01(\t\x12<\n\x0foverride_config\x18\x04 \x03(\x0b\x32#.flwr.proto.Run.OverrideConfigEntry\x12\x10\n\x08\x66\x61\x62_hash\x18\x05 \x01(\t\x12\x12\n\npending_at\x18\x06 \x01(\t\x12\x13\n\x0bstarting_at\x18\x07 \x01(\t\x12\x12\n\nrunning_at\x18\x08 \x01(\t\x12\x13\n\x0b\x66inished_at\x18\t \x01(\t\x12%\n\x06status\x18\n \x01(\x0b\x32\x15.flwr.proto.RunStatus\x1aI\n\x13OverrideConfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\"@\n\tRunStatus\x12\x0e\n\x06status\x18\x01 \x01(\t\x12\x12\n\nsub_status\x18\x02 \x01(\t\x12\x0f\n\x07\x64\x65tails\x18\x03 \x01(\t\"?\n\rGetRunRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x0e\n\x06run_id\x18\x02 \x01(\x04\".\n\x0eGetRunResponse\x12\x1c\n\x03run\x18\x01 \x01(\x0b\x32\x0f.flwr.proto.Run\"S\n\x16UpdateRunStatusRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\x12)\n\nrun_status\x18\x02 \x01(\x0b\x32\x15.flwr.proto.RunStatus\"\x19\n\x17UpdateRunStatusResponse\"F\n\x13GetRunStatusRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x0f\n\x07run_ids\x18\x02 \x03(\x04\"\xb1\x01\n\x14GetRunStatusResponse\x12L\n\x0frun_status_dict\x18\x01 \x03(\x0b\x32\x33.flwr.proto.GetRunStatusResponse.RunStatusDictEntry\x1aK\n\x12RunStatusDictEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12$\n\x05value\x18\x02 \x01(\x0b\x32\x15.flwr.proto.RunStatus:\x02\x38\x01\"-\n\x1bGetFederationOptionsRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\"T\n\x1cGetFederationOptionsResponse\x12\x34\n\x12\x66\x65\x64\x65ration_options\x18\x01 \x01(\x0b\x32\x18.flwr.proto.ConfigRecordb\x06proto3')
21
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x14\x66lwr/proto/run.proto\x12\nflwr.proto\x1a\x14\x66lwr/proto/fab.proto\x1a\x15\x66lwr/proto/node.proto\x1a\x1b\x66lwr/proto/recorddict.proto\x1a\x1a\x66lwr/proto/transport.proto\"\xe0\x02\n\x03Run\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\x12\x0e\n\x06\x66\x61\x62_id\x18\x02 \x01(\t\x12\x13\n\x0b\x66\x61\x62_version\x18\x03 \x01(\t\x12<\n\x0foverride_config\x18\x04 \x03(\x0b\x32#.flwr.proto.Run.OverrideConfigEntry\x12\x10\n\x08\x66\x61\x62_hash\x18\x05 \x01(\t\x12\x12\n\npending_at\x18\x06 \x01(\t\x12\x13\n\x0bstarting_at\x18\x07 \x01(\t\x12\x12\n\nrunning_at\x18\x08 \x01(\t\x12\x13\n\x0b\x66inished_at\x18\t \x01(\t\x12%\n\x06status\x18\n \x01(\x0b\x32\x15.flwr.proto.RunStatus\x12\x10\n\x08\x66lwr_aid\x18\x0b \x01(\t\x1aI\n\x13OverrideConfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\"@\n\tRunStatus\x12\x0e\n\x06status\x18\x01 \x01(\t\x12\x12\n\nsub_status\x18\x02 \x01(\t\x12\x0f\n\x07\x64\x65tails\x18\x03 \x01(\t\"?\n\rGetRunRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x0e\n\x06run_id\x18\x02 \x01(\x04\".\n\x0eGetRunResponse\x12\x1c\n\x03run\x18\x01 \x01(\x0b\x32\x0f.flwr.proto.Run\"S\n\x16UpdateRunStatusRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\x12)\n\nrun_status\x18\x02 \x01(\x0b\x32\x15.flwr.proto.RunStatus\"\x19\n\x17UpdateRunStatusResponse\"F\n\x13GetRunStatusRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x0f\n\x07run_ids\x18\x02 \x03(\x04\"\xb1\x01\n\x14GetRunStatusResponse\x12L\n\x0frun_status_dict\x18\x01 \x03(\x0b\x32\x33.flwr.proto.GetRunStatusResponse.RunStatusDictEntry\x1aK\n\x12RunStatusDictEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12$\n\x05value\x18\x02 \x01(\x0b\x32\x15.flwr.proto.RunStatus:\x02\x38\x01\"-\n\x1bGetFederationOptionsRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\"T\n\x1cGetFederationOptionsResponse\x12\x34\n\x12\x66\x65\x64\x65ration_options\x18\x01 \x01(\x0b\x32\x18.flwr.proto.ConfigRecordb\x06proto3')
22
22
 
23
23
  _globals = globals()
24
24
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
@@ -30,27 +30,27 @@ if _descriptor._USE_C_DESCRIPTORS == False:
30
30
  _globals['_GETRUNSTATUSRESPONSE_RUNSTATUSDICTENTRY']._options = None
31
31
  _globals['_GETRUNSTATUSRESPONSE_RUNSTATUSDICTENTRY']._serialized_options = b'8\001'
32
32
  _globals['_RUN']._serialized_start=139
33
- _globals['_RUN']._serialized_end=473
34
- _globals['_RUN_OVERRIDECONFIGENTRY']._serialized_start=400
35
- _globals['_RUN_OVERRIDECONFIGENTRY']._serialized_end=473
36
- _globals['_RUNSTATUS']._serialized_start=475
37
- _globals['_RUNSTATUS']._serialized_end=539
38
- _globals['_GETRUNREQUEST']._serialized_start=541
39
- _globals['_GETRUNREQUEST']._serialized_end=604
40
- _globals['_GETRUNRESPONSE']._serialized_start=606
41
- _globals['_GETRUNRESPONSE']._serialized_end=652
42
- _globals['_UPDATERUNSTATUSREQUEST']._serialized_start=654
43
- _globals['_UPDATERUNSTATUSREQUEST']._serialized_end=737
44
- _globals['_UPDATERUNSTATUSRESPONSE']._serialized_start=739
45
- _globals['_UPDATERUNSTATUSRESPONSE']._serialized_end=764
46
- _globals['_GETRUNSTATUSREQUEST']._serialized_start=766
47
- _globals['_GETRUNSTATUSREQUEST']._serialized_end=836
48
- _globals['_GETRUNSTATUSRESPONSE']._serialized_start=839
49
- _globals['_GETRUNSTATUSRESPONSE']._serialized_end=1016
50
- _globals['_GETRUNSTATUSRESPONSE_RUNSTATUSDICTENTRY']._serialized_start=941
51
- _globals['_GETRUNSTATUSRESPONSE_RUNSTATUSDICTENTRY']._serialized_end=1016
52
- _globals['_GETFEDERATIONOPTIONSREQUEST']._serialized_start=1018
53
- _globals['_GETFEDERATIONOPTIONSREQUEST']._serialized_end=1063
54
- _globals['_GETFEDERATIONOPTIONSRESPONSE']._serialized_start=1065
55
- _globals['_GETFEDERATIONOPTIONSRESPONSE']._serialized_end=1149
33
+ _globals['_RUN']._serialized_end=491
34
+ _globals['_RUN_OVERRIDECONFIGENTRY']._serialized_start=418
35
+ _globals['_RUN_OVERRIDECONFIGENTRY']._serialized_end=491
36
+ _globals['_RUNSTATUS']._serialized_start=493
37
+ _globals['_RUNSTATUS']._serialized_end=557
38
+ _globals['_GETRUNREQUEST']._serialized_start=559
39
+ _globals['_GETRUNREQUEST']._serialized_end=622
40
+ _globals['_GETRUNRESPONSE']._serialized_start=624
41
+ _globals['_GETRUNRESPONSE']._serialized_end=670
42
+ _globals['_UPDATERUNSTATUSREQUEST']._serialized_start=672
43
+ _globals['_UPDATERUNSTATUSREQUEST']._serialized_end=755
44
+ _globals['_UPDATERUNSTATUSRESPONSE']._serialized_start=757
45
+ _globals['_UPDATERUNSTATUSRESPONSE']._serialized_end=782
46
+ _globals['_GETRUNSTATUSREQUEST']._serialized_start=784
47
+ _globals['_GETRUNSTATUSREQUEST']._serialized_end=854
48
+ _globals['_GETRUNSTATUSRESPONSE']._serialized_start=857
49
+ _globals['_GETRUNSTATUSRESPONSE']._serialized_end=1034
50
+ _globals['_GETRUNSTATUSRESPONSE_RUNSTATUSDICTENTRY']._serialized_start=959
51
+ _globals['_GETRUNSTATUSRESPONSE_RUNSTATUSDICTENTRY']._serialized_end=1034
52
+ _globals['_GETFEDERATIONOPTIONSREQUEST']._serialized_start=1036
53
+ _globals['_GETFEDERATIONOPTIONSREQUEST']._serialized_end=1081
54
+ _globals['_GETFEDERATIONOPTIONSRESPONSE']._serialized_start=1083
55
+ _globals['_GETFEDERATIONOPTIONSRESPONSE']._serialized_end=1167
56
56
  # @@protoc_insertion_point(module_scope)
flwr/proto/run_pb2.pyi CHANGED
@@ -41,6 +41,7 @@ class Run(google.protobuf.message.Message):
41
41
  RUNNING_AT_FIELD_NUMBER: builtins.int
42
42
  FINISHED_AT_FIELD_NUMBER: builtins.int
43
43
  STATUS_FIELD_NUMBER: builtins.int
44
+ FLWR_AID_FIELD_NUMBER: builtins.int
44
45
  run_id: builtins.int
45
46
  fab_id: typing.Text
46
47
  fab_version: typing.Text
@@ -53,6 +54,7 @@ class Run(google.protobuf.message.Message):
53
54
  finished_at: typing.Text
54
55
  @property
55
56
  def status(self) -> global___RunStatus: ...
57
+ flwr_aid: typing.Text
56
58
  def __init__(self,
57
59
  *,
58
60
  run_id: builtins.int = ...,
@@ -65,9 +67,10 @@ class Run(google.protobuf.message.Message):
65
67
  running_at: typing.Text = ...,
66
68
  finished_at: typing.Text = ...,
67
69
  status: typing.Optional[global___RunStatus] = ...,
70
+ flwr_aid: typing.Text = ...,
68
71
  ) -> None: ...
69
72
  def HasField(self, field_name: typing_extensions.Literal["status",b"status"]) -> builtins.bool: ...
70
- def ClearField(self, field_name: typing_extensions.Literal["fab_hash",b"fab_hash","fab_id",b"fab_id","fab_version",b"fab_version","finished_at",b"finished_at","override_config",b"override_config","pending_at",b"pending_at","run_id",b"run_id","running_at",b"running_at","starting_at",b"starting_at","status",b"status"]) -> None: ...
73
+ def ClearField(self, field_name: typing_extensions.Literal["fab_hash",b"fab_hash","fab_id",b"fab_id","fab_version",b"fab_version","finished_at",b"finished_at","flwr_aid",b"flwr_aid","override_config",b"override_config","pending_at",b"pending_at","run_id",b"run_id","running_at",b"running_at","starting_at",b"starting_at","status",b"status"]) -> None: ...
71
74
  global___Run = Run
72
75
 
73
76
  class RunStatus(google.protobuf.message.Message):
@@ -20,15 +20,13 @@ from flwr.proto import run_pb2 as flwr_dot_proto_dot_run__pb2
20
20
  from flwr.proto import fab_pb2 as flwr_dot_proto_dot_fab__pb2
21
21
 
22
22
 
23
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1c\x66lwr/proto/serverappio.proto\x12\nflwr.proto\x1a\x1a\x66lwr/proto/heartbeat.proto\x1a\x14\x66lwr/proto/log.proto\x1a\x15\x66lwr/proto/node.proto\x1a\x18\x66lwr/proto/message.proto\x1a\x14\x66lwr/proto/run.proto\x1a\x14\x66lwr/proto/fab.proto\"!\n\x0fGetNodesRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\"3\n\x10GetNodesResponse\x12\x1f\n\x05nodes\x18\x01 \x03(\x0b\x32\x10.flwr.proto.Node\"\x8d\x02\n\x16PushInsMessagesRequest\x12*\n\rmessages_list\x18\x01 \x03(\x0b\x32\x13.flwr.proto.Message\x12\x0e\n\x06run_id\x18\x02 \x01(\x04\x12\x61\n\x19msg_to_descendant_mapping\x18\x03 \x03(\x0b\x32>.flwr.proto.PushInsMessagesRequest.MsgToDescendantMappingEntry\x1aT\n\x1bMsgToDescendantMappingEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12$\n\x05value\x18\x02 \x01(\x0b\x32\x15.flwr.proto.ObjectIDs:\x02\x38\x01\"\xcc\x01\n\x17PushInsMessagesResponse\x12\x13\n\x0bmessage_ids\x18\x01 \x03(\t\x12O\n\x0fobjects_to_push\x18\x02 \x03(\x0b\x32\x36.flwr.proto.PushInsMessagesResponse.ObjectsToPushEntry\x1aK\n\x12ObjectsToPushEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12$\n\x05value\x18\x02 \x01(\x0b\x32\x15.flwr.proto.ObjectIDs:\x02\x38\x01\"=\n\x16PullResMessagesRequest\x12\x13\n\x0bmessage_ids\x18\x01 \x03(\t\x12\x0e\n\x06run_id\x18\x02 \x01(\x04\"\xe3\x01\n\x17PullResMessagesResponse\x12*\n\rmessages_list\x18\x01 \x03(\x0b\x32\x13.flwr.proto.Message\x12O\n\x0fobjects_to_pull\x18\x02 \x03(\x0b\x32\x36.flwr.proto.PullResMessagesResponse.ObjectsToPullEntry\x1aK\n\x12ObjectsToPullEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12$\n\x05value\x18\x02 \x01(\x0b\x32\x15.flwr.proto.ObjectIDs:\x02\x38\x01\"\x1c\n\x1aPullServerAppInputsRequest\"\x7f\n\x1bPullServerAppInputsResponse\x12$\n\x07\x63ontext\x18\x01 \x01(\x0b\x32\x13.flwr.proto.Context\x12\x1c\n\x03run\x18\x02 \x01(\x0b\x32\x0f.flwr.proto.Run\x12\x1c\n\x03\x66\x61\x62\x18\x03 \x01(\x0b\x32\x0f.flwr.proto.Fab\"S\n\x1bPushServerAppOutputsRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\x12$\n\x07\x63ontext\x18\x02 \x01(\x0b\x32\x13.flwr.proto.Context\"\x1e\n\x1cPushServerAppOutputsResponse2\xe4\x08\n\x0bServerAppIo\x12G\n\x08GetNodes\x12\x1b.flwr.proto.GetNodesRequest\x1a\x1c.flwr.proto.GetNodesResponse\"\x00\x12Y\n\x0cPushMessages\x12\".flwr.proto.PushInsMessagesRequest\x1a#.flwr.proto.PushInsMessagesResponse\"\x00\x12Y\n\x0cPullMessages\x12\".flwr.proto.PullResMessagesRequest\x1a#.flwr.proto.PullResMessagesResponse\"\x00\x12\x41\n\x06GetRun\x12\x19.flwr.proto.GetRunRequest\x1a\x1a.flwr.proto.GetRunResponse\"\x00\x12\x41\n\x06GetFab\x12\x19.flwr.proto.GetFabRequest\x1a\x1a.flwr.proto.GetFabResponse\"\x00\x12h\n\x13PullServerAppInputs\x12&.flwr.proto.PullServerAppInputsRequest\x1a\'.flwr.proto.PullServerAppInputsResponse\"\x00\x12k\n\x14PushServerAppOutputs\x12\'.flwr.proto.PushServerAppOutputsRequest\x1a(.flwr.proto.PushServerAppOutputsResponse\"\x00\x12\\\n\x0fUpdateRunStatus\x12\".flwr.proto.UpdateRunStatusRequest\x1a#.flwr.proto.UpdateRunStatusResponse\"\x00\x12S\n\x0cGetRunStatus\x12\x1f.flwr.proto.GetRunStatusRequest\x1a .flwr.proto.GetRunStatusResponse\"\x00\x12G\n\x08PushLogs\x12\x1b.flwr.proto.PushLogsRequest\x1a\x1c.flwr.proto.PushLogsResponse\"\x00\x12_\n\x10SendAppHeartbeat\x12#.flwr.proto.SendAppHeartbeatRequest\x1a$.flwr.proto.SendAppHeartbeatResponse\"\x00\x12M\n\nPushObject\x12\x1d.flwr.proto.PushObjectRequest\x1a\x1e.flwr.proto.PushObjectResponse\"\x00\x12M\n\nPullObject\x12\x1d.flwr.proto.PullObjectRequest\x1a\x1e.flwr.proto.PullObjectResponse\"\x00\x62\x06proto3')
23
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1c\x66lwr/proto/serverappio.proto\x12\nflwr.proto\x1a\x1a\x66lwr/proto/heartbeat.proto\x1a\x14\x66lwr/proto/log.proto\x1a\x15\x66lwr/proto/node.proto\x1a\x18\x66lwr/proto/message.proto\x1a\x14\x66lwr/proto/run.proto\x1a\x14\x66lwr/proto/fab.proto\"!\n\x0fGetNodesRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\"3\n\x10GetNodesResponse\x12\x1f\n\x05nodes\x18\x01 \x03(\x0b\x32\x10.flwr.proto.Node\"\x8a\x01\n\x16PushInsMessagesRequest\x12*\n\rmessages_list\x18\x01 \x03(\x0b\x32\x13.flwr.proto.Message\x12\x0e\n\x06run_id\x18\x02 \x01(\x04\x12\x34\n\x14message_object_trees\x18\x03 \x03(\x0b\x32\x16.flwr.proto.ObjectTree\"\xcc\x01\n\x17PushInsMessagesResponse\x12\x13\n\x0bmessage_ids\x18\x01 \x03(\t\x12O\n\x0fobjects_to_push\x18\x02 \x03(\x0b\x32\x36.flwr.proto.PushInsMessagesResponse.ObjectsToPushEntry\x1aK\n\x12ObjectsToPushEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12$\n\x05value\x18\x02 \x01(\x0b\x32\x15.flwr.proto.ObjectIDs:\x02\x38\x01\"=\n\x16PullResMessagesRequest\x12\x13\n\x0bmessage_ids\x18\x01 \x03(\t\x12\x0e\n\x06run_id\x18\x02 \x01(\x04\"\xe3\x01\n\x17PullResMessagesResponse\x12*\n\rmessages_list\x18\x01 \x03(\x0b\x32\x13.flwr.proto.Message\x12O\n\x0fobjects_to_pull\x18\x02 \x03(\x0b\x32\x36.flwr.proto.PullResMessagesResponse.ObjectsToPullEntry\x1aK\n\x12ObjectsToPullEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12$\n\x05value\x18\x02 \x01(\x0b\x32\x15.flwr.proto.ObjectIDs:\x02\x38\x01\"\x1c\n\x1aPullServerAppInputsRequest\"\x7f\n\x1bPullServerAppInputsResponse\x12$\n\x07\x63ontext\x18\x01 \x01(\x0b\x32\x13.flwr.proto.Context\x12\x1c\n\x03run\x18\x02 \x01(\x0b\x32\x0f.flwr.proto.Run\x12\x1c\n\x03\x66\x61\x62\x18\x03 \x01(\x0b\x32\x0f.flwr.proto.Fab\"S\n\x1bPushServerAppOutputsRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\x12$\n\x07\x63ontext\x18\x02 \x01(\x0b\x32\x13.flwr.proto.Context\"\x1e\n\x1cPushServerAppOutputsResponse2\xd7\t\n\x0bServerAppIo\x12G\n\x08GetNodes\x12\x1b.flwr.proto.GetNodesRequest\x1a\x1c.flwr.proto.GetNodesResponse\"\x00\x12Y\n\x0cPushMessages\x12\".flwr.proto.PushInsMessagesRequest\x1a#.flwr.proto.PushInsMessagesResponse\"\x00\x12Y\n\x0cPullMessages\x12\".flwr.proto.PullResMessagesRequest\x1a#.flwr.proto.PullResMessagesResponse\"\x00\x12\x41\n\x06GetRun\x12\x19.flwr.proto.GetRunRequest\x1a\x1a.flwr.proto.GetRunResponse\"\x00\x12\x41\n\x06GetFab\x12\x19.flwr.proto.GetFabRequest\x1a\x1a.flwr.proto.GetFabResponse\"\x00\x12h\n\x13PullServerAppInputs\x12&.flwr.proto.PullServerAppInputsRequest\x1a\'.flwr.proto.PullServerAppInputsResponse\"\x00\x12k\n\x14PushServerAppOutputs\x12\'.flwr.proto.PushServerAppOutputsRequest\x1a(.flwr.proto.PushServerAppOutputsResponse\"\x00\x12\\\n\x0fUpdateRunStatus\x12\".flwr.proto.UpdateRunStatusRequest\x1a#.flwr.proto.UpdateRunStatusResponse\"\x00\x12S\n\x0cGetRunStatus\x12\x1f.flwr.proto.GetRunStatusRequest\x1a .flwr.proto.GetRunStatusResponse\"\x00\x12G\n\x08PushLogs\x12\x1b.flwr.proto.PushLogsRequest\x1a\x1c.flwr.proto.PushLogsResponse\"\x00\x12_\n\x10SendAppHeartbeat\x12#.flwr.proto.SendAppHeartbeatRequest\x1a$.flwr.proto.SendAppHeartbeatResponse\"\x00\x12M\n\nPushObject\x12\x1d.flwr.proto.PushObjectRequest\x1a\x1e.flwr.proto.PushObjectResponse\"\x00\x12M\n\nPullObject\x12\x1d.flwr.proto.PullObjectRequest\x1a\x1e.flwr.proto.PullObjectResponse\"\x00\x12q\n\x16\x43onfirmMessageReceived\x12).flwr.proto.ConfirmMessageReceivedRequest\x1a*.flwr.proto.ConfirmMessageReceivedResponse\"\x00\x62\x06proto3')
24
24
 
25
25
  _globals = globals()
26
26
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
27
27
  _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'flwr.proto.serverappio_pb2', _globals)
28
28
  if _descriptor._USE_C_DESCRIPTORS == False:
29
29
  DESCRIPTOR._options = None
30
- _globals['_PUSHINSMESSAGESREQUEST_MSGTODESCENDANTMAPPINGENTRY']._options = None
31
- _globals['_PUSHINSMESSAGESREQUEST_MSGTODESCENDANTMAPPINGENTRY']._serialized_options = b'8\001'
32
30
  _globals['_PUSHINSMESSAGESRESPONSE_OBJECTSTOPUSHENTRY']._options = None
33
31
  _globals['_PUSHINSMESSAGESRESPONSE_OBJECTSTOPUSHENTRY']._serialized_options = b'8\001'
34
32
  _globals['_PULLRESMESSAGESRESPONSE_OBJECTSTOPULLENTRY']._options = None
@@ -38,27 +36,25 @@ if _descriptor._USE_C_DESCRIPTORS == False:
38
36
  _globals['_GETNODESRESPONSE']._serialized_start=222
39
37
  _globals['_GETNODESRESPONSE']._serialized_end=273
40
38
  _globals['_PUSHINSMESSAGESREQUEST']._serialized_start=276
41
- _globals['_PUSHINSMESSAGESREQUEST']._serialized_end=545
42
- _globals['_PUSHINSMESSAGESREQUEST_MSGTODESCENDANTMAPPINGENTRY']._serialized_start=461
43
- _globals['_PUSHINSMESSAGESREQUEST_MSGTODESCENDANTMAPPINGENTRY']._serialized_end=545
44
- _globals['_PUSHINSMESSAGESRESPONSE']._serialized_start=548
45
- _globals['_PUSHINSMESSAGESRESPONSE']._serialized_end=752
46
- _globals['_PUSHINSMESSAGESRESPONSE_OBJECTSTOPUSHENTRY']._serialized_start=677
47
- _globals['_PUSHINSMESSAGESRESPONSE_OBJECTSTOPUSHENTRY']._serialized_end=752
48
- _globals['_PULLRESMESSAGESREQUEST']._serialized_start=754
49
- _globals['_PULLRESMESSAGESREQUEST']._serialized_end=815
50
- _globals['_PULLRESMESSAGESRESPONSE']._serialized_start=818
51
- _globals['_PULLRESMESSAGESRESPONSE']._serialized_end=1045
52
- _globals['_PULLRESMESSAGESRESPONSE_OBJECTSTOPULLENTRY']._serialized_start=970
53
- _globals['_PULLRESMESSAGESRESPONSE_OBJECTSTOPULLENTRY']._serialized_end=1045
54
- _globals['_PULLSERVERAPPINPUTSREQUEST']._serialized_start=1047
55
- _globals['_PULLSERVERAPPINPUTSREQUEST']._serialized_end=1075
56
- _globals['_PULLSERVERAPPINPUTSRESPONSE']._serialized_start=1077
57
- _globals['_PULLSERVERAPPINPUTSRESPONSE']._serialized_end=1204
58
- _globals['_PUSHSERVERAPPOUTPUTSREQUEST']._serialized_start=1206
59
- _globals['_PUSHSERVERAPPOUTPUTSREQUEST']._serialized_end=1289
60
- _globals['_PUSHSERVERAPPOUTPUTSRESPONSE']._serialized_start=1291
61
- _globals['_PUSHSERVERAPPOUTPUTSRESPONSE']._serialized_end=1321
62
- _globals['_SERVERAPPIO']._serialized_start=1324
63
- _globals['_SERVERAPPIO']._serialized_end=2448
39
+ _globals['_PUSHINSMESSAGESREQUEST']._serialized_end=414
40
+ _globals['_PUSHINSMESSAGESRESPONSE']._serialized_start=417
41
+ _globals['_PUSHINSMESSAGESRESPONSE']._serialized_end=621
42
+ _globals['_PUSHINSMESSAGESRESPONSE_OBJECTSTOPUSHENTRY']._serialized_start=546
43
+ _globals['_PUSHINSMESSAGESRESPONSE_OBJECTSTOPUSHENTRY']._serialized_end=621
44
+ _globals['_PULLRESMESSAGESREQUEST']._serialized_start=623
45
+ _globals['_PULLRESMESSAGESREQUEST']._serialized_end=684
46
+ _globals['_PULLRESMESSAGESRESPONSE']._serialized_start=687
47
+ _globals['_PULLRESMESSAGESRESPONSE']._serialized_end=914
48
+ _globals['_PULLRESMESSAGESRESPONSE_OBJECTSTOPULLENTRY']._serialized_start=839
49
+ _globals['_PULLRESMESSAGESRESPONSE_OBJECTSTOPULLENTRY']._serialized_end=914
50
+ _globals['_PULLSERVERAPPINPUTSREQUEST']._serialized_start=916
51
+ _globals['_PULLSERVERAPPINPUTSREQUEST']._serialized_end=944
52
+ _globals['_PULLSERVERAPPINPUTSRESPONSE']._serialized_start=946
53
+ _globals['_PULLSERVERAPPINPUTSRESPONSE']._serialized_end=1073
54
+ _globals['_PUSHSERVERAPPOUTPUTSREQUEST']._serialized_start=1075
55
+ _globals['_PUSHSERVERAPPOUTPUTSREQUEST']._serialized_end=1158
56
+ _globals['_PUSHSERVERAPPOUTPUTSRESPONSE']._serialized_start=1160
57
+ _globals['_PUSHSERVERAPPOUTPUTSRESPONSE']._serialized_end=1190
58
+ _globals['_SERVERAPPIO']._serialized_start=1193
59
+ _globals['_SERVERAPPIO']._serialized_end=2432
64
60
  # @@protoc_insertion_point(module_scope)
@@ -42,36 +42,21 @@ global___GetNodesResponse = GetNodesResponse
42
42
  class PushInsMessagesRequest(google.protobuf.message.Message):
43
43
  """PushMessages messages"""
44
44
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
45
- class MsgToDescendantMappingEntry(google.protobuf.message.Message):
46
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
47
- KEY_FIELD_NUMBER: builtins.int
48
- VALUE_FIELD_NUMBER: builtins.int
49
- key: typing.Text
50
- @property
51
- def value(self) -> flwr.proto.message_pb2.ObjectIDs: ...
52
- def __init__(self,
53
- *,
54
- key: typing.Text = ...,
55
- value: typing.Optional[flwr.proto.message_pb2.ObjectIDs] = ...,
56
- ) -> None: ...
57
- def HasField(self, field_name: typing_extensions.Literal["value",b"value"]) -> builtins.bool: ...
58
- def ClearField(self, field_name: typing_extensions.Literal["key",b"key","value",b"value"]) -> None: ...
59
-
60
45
  MESSAGES_LIST_FIELD_NUMBER: builtins.int
61
46
  RUN_ID_FIELD_NUMBER: builtins.int
62
- MSG_TO_DESCENDANT_MAPPING_FIELD_NUMBER: builtins.int
47
+ MESSAGE_OBJECT_TREES_FIELD_NUMBER: builtins.int
63
48
  @property
64
49
  def messages_list(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[flwr.proto.message_pb2.Message]: ...
65
50
  run_id: builtins.int
66
51
  @property
67
- def msg_to_descendant_mapping(self) -> google.protobuf.internal.containers.MessageMap[typing.Text, flwr.proto.message_pb2.ObjectIDs]: ...
52
+ def message_object_trees(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[flwr.proto.message_pb2.ObjectTree]: ...
68
53
  def __init__(self,
69
54
  *,
70
55
  messages_list: typing.Optional[typing.Iterable[flwr.proto.message_pb2.Message]] = ...,
71
56
  run_id: builtins.int = ...,
72
- msg_to_descendant_mapping: typing.Optional[typing.Mapping[typing.Text, flwr.proto.message_pb2.ObjectIDs]] = ...,
57
+ message_object_trees: typing.Optional[typing.Iterable[flwr.proto.message_pb2.ObjectTree]] = ...,
73
58
  ) -> None: ...
74
- def ClearField(self, field_name: typing_extensions.Literal["messages_list",b"messages_list","msg_to_descendant_mapping",b"msg_to_descendant_mapping","run_id",b"run_id"]) -> None: ...
59
+ def ClearField(self, field_name: typing_extensions.Literal["message_object_trees",b"message_object_trees","messages_list",b"messages_list","run_id",b"run_id"]) -> None: ...
75
60
  global___PushInsMessagesRequest = PushInsMessagesRequest
76
61
 
77
62
  class PushInsMessagesResponse(google.protobuf.message.Message):
@@ -84,6 +84,11 @@ class ServerAppIoStub(object):
84
84
  request_serializer=flwr_dot_proto_dot_message__pb2.PullObjectRequest.SerializeToString,
85
85
  response_deserializer=flwr_dot_proto_dot_message__pb2.PullObjectResponse.FromString,
86
86
  )
87
+ self.ConfirmMessageReceived = channel.unary_unary(
88
+ '/flwr.proto.ServerAppIo/ConfirmMessageReceived',
89
+ request_serializer=flwr_dot_proto_dot_message__pb2.ConfirmMessageReceivedRequest.SerializeToString,
90
+ response_deserializer=flwr_dot_proto_dot_message__pb2.ConfirmMessageReceivedResponse.FromString,
91
+ )
87
92
 
88
93
 
89
94
  class ServerAppIoServicer(object):
@@ -180,6 +185,13 @@ class ServerAppIoServicer(object):
180
185
  context.set_details('Method not implemented!')
181
186
  raise NotImplementedError('Method not implemented!')
182
187
 
188
+ def ConfirmMessageReceived(self, request, context):
189
+ """Confirm Message Received
190
+ """
191
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
192
+ context.set_details('Method not implemented!')
193
+ raise NotImplementedError('Method not implemented!')
194
+
183
195
 
184
196
  def add_ServerAppIoServicer_to_server(servicer, server):
185
197
  rpc_method_handlers = {
@@ -248,6 +260,11 @@ def add_ServerAppIoServicer_to_server(servicer, server):
248
260
  request_deserializer=flwr_dot_proto_dot_message__pb2.PullObjectRequest.FromString,
249
261
  response_serializer=flwr_dot_proto_dot_message__pb2.PullObjectResponse.SerializeToString,
250
262
  ),
263
+ 'ConfirmMessageReceived': grpc.unary_unary_rpc_method_handler(
264
+ servicer.ConfirmMessageReceived,
265
+ request_deserializer=flwr_dot_proto_dot_message__pb2.ConfirmMessageReceivedRequest.FromString,
266
+ response_serializer=flwr_dot_proto_dot_message__pb2.ConfirmMessageReceivedResponse.SerializeToString,
267
+ ),
251
268
  }
252
269
  generic_handler = grpc.method_handlers_generic_handler(
253
270
  'flwr.proto.ServerAppIo', rpc_method_handlers)
@@ -478,3 +495,20 @@ class ServerAppIo(object):
478
495
  flwr_dot_proto_dot_message__pb2.PullObjectResponse.FromString,
479
496
  options, channel_credentials,
480
497
  insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
498
+
499
+ @staticmethod
500
+ def ConfirmMessageReceived(request,
501
+ target,
502
+ options=(),
503
+ channel_credentials=None,
504
+ call_credentials=None,
505
+ insecure=False,
506
+ compression=None,
507
+ wait_for_ready=None,
508
+ timeout=None,
509
+ metadata=None):
510
+ return grpc.experimental.unary_unary(request, target, '/flwr.proto.ServerAppIo/ConfirmMessageReceived',
511
+ flwr_dot_proto_dot_message__pb2.ConfirmMessageReceivedRequest.SerializeToString,
512
+ flwr_dot_proto_dot_message__pb2.ConfirmMessageReceivedResponse.FromString,
513
+ options, channel_credentials,
514
+ insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
@@ -78,6 +78,11 @@ class ServerAppIoStub:
78
78
  flwr.proto.message_pb2.PullObjectResponse]
79
79
  """Pull Object"""
80
80
 
81
+ ConfirmMessageReceived: grpc.UnaryUnaryMultiCallable[
82
+ flwr.proto.message_pb2.ConfirmMessageReceivedRequest,
83
+ flwr.proto.message_pb2.ConfirmMessageReceivedResponse]
84
+ """Confirm Message Received"""
85
+
81
86
 
82
87
  class ServerAppIoServicer(metaclass=abc.ABCMeta):
83
88
  @abc.abstractmethod
@@ -184,5 +189,13 @@ class ServerAppIoServicer(metaclass=abc.ABCMeta):
184
189
  """Pull Object"""
185
190
  pass
186
191
 
192
+ @abc.abstractmethod
193
+ def ConfirmMessageReceived(self,
194
+ request: flwr.proto.message_pb2.ConfirmMessageReceivedRequest,
195
+ context: grpc.ServicerContext,
196
+ ) -> flwr.proto.message_pb2.ConfirmMessageReceivedResponse:
197
+ """Confirm Message Received"""
198
+ pass
199
+
187
200
 
188
201
  def add_ServerAppIoServicer_to_server(servicer: ServerAppIoServicer, server: grpc.Server) -> None: ...
flwr/server/app.py CHANGED
@@ -178,6 +178,7 @@ def run_superlink() -> None:
178
178
  address=exec_address,
179
179
  state_factory=state_factory,
180
180
  ffs_factory=ffs_factory,
181
+ objectstore_factory=objectstore_factory,
181
182
  executor=executor,
182
183
  certificates=certificates,
183
184
  config=parse_config_args(
@@ -28,7 +28,11 @@ from flwr.common.constant import (
28
28
  SUPERLINK_NODE_ID,
29
29
  )
30
30
  from flwr.common.grpc import create_channel, on_channel_state_change
31
- from flwr.common.inflatable import get_all_nested_objects
31
+ from flwr.common.inflatable import (
32
+ get_all_nested_objects,
33
+ get_object_tree,
34
+ no_object_id_recompute,
35
+ )
32
36
  from flwr.common.inflatable_grpc_utils import (
33
37
  make_pull_object_fn_grpc,
34
38
  make_push_object_fn_grpc,
@@ -43,7 +47,9 @@ from flwr.common.message import remove_content_from_message
43
47
  from flwr.common.retry_invoker import _make_simple_grpc_retry_invoker, _wrap_stub
44
48
  from flwr.common.serde import message_to_proto, run_from_proto
45
49
  from flwr.common.typing import Run
46
- from flwr.proto.message_pb2 import ObjectIDs # pylint: disable=E0611
50
+ from flwr.proto.message_pb2 import ( # pylint: disable=E0611
51
+ ConfirmMessageReceivedRequest,
52
+ )
47
53
  from flwr.proto.node_pb2 import Node # pylint: disable=E0611
48
54
  from flwr.proto.run_pb2 import GetRunRequest, GetRunResponse # pylint: disable=E0611
49
55
  from flwr.proto.serverappio_pb2 import ( # pylint: disable=E0611
@@ -213,18 +219,15 @@ class GrpcGrid(Grid):
213
219
  """Push one message and its associated objects."""
214
220
  # Compute mapping of message descendants
215
221
  all_objects = get_all_nested_objects(message)
216
- all_object_ids = list(all_objects.keys())
217
- msg_id = all_object_ids[-1] # Last object is the message itself
218
- descendant_ids = all_object_ids[:-1] # All but the last object are descendants
222
+ msg_id = message.object_id
223
+ object_tree = get_object_tree(message)
219
224
 
220
225
  # Call GrpcServerAppIoStub method
221
226
  res: PushInsMessagesResponse = self._stub.PushMessages(
222
227
  PushInsMessagesRequest(
223
228
  messages_list=[message_to_proto(remove_content_from_message(message))],
224
229
  run_id=run_id,
225
- msg_to_descendant_mapping={
226
- msg_id: ObjectIDs(object_ids=descendant_ids)
227
- },
230
+ message_object_trees=[object_tree],
228
231
  )
229
232
  )
230
233
 
@@ -262,7 +265,8 @@ class GrpcGrid(Grid):
262
265
  # Check message
263
266
  self._check_message(msg)
264
267
  # Try pushing message and its objects
265
- message_ids.append(self._try_push_message(run_id, msg))
268
+ with no_object_id_recompute():
269
+ message_ids.append(self._try_push_message(run_id, msg))
266
270
 
267
271
  except grpc.RpcError as e:
268
272
  if e.code() == grpc.StatusCode.RESOURCE_EXHAUSTED: # pylint: disable=E1101
@@ -308,6 +312,13 @@ class GrpcGrid(Grid):
308
312
  run_id=run_id,
309
313
  ),
310
314
  )
315
+
316
+ # Confirm that the message has been received
317
+ self._stub.ConfirmMessageReceived(
318
+ ConfirmMessageReceivedRequest(
319
+ node=self.node, run_id=run_id, message_object_id=msg_id
320
+ )
321
+ )
311
322
  message = cast(
312
323
  Message, inflate_object_from_contents(msg_id, all_object_contents)
313
324
  )
@@ -40,6 +40,8 @@ from flwr.proto.heartbeat_pb2 import ( # pylint: disable=E0611
40
40
  SendNodeHeartbeatResponse,
41
41
  )
42
42
  from flwr.proto.message_pb2 import ( # pylint: disable=E0611
43
+ ConfirmMessageReceivedRequest,
44
+ ConfirmMessageReceivedResponse,
43
45
  PullObjectRequest,
44
46
  PullObjectResponse,
45
47
  PushObjectRequest,
@@ -151,6 +153,7 @@ class FleetServicer(fleet_pb2_grpc.FleetServicer):
151
153
  res = message_handler.get_run(
152
154
  request=request,
153
155
  state=self.state_factory.state(),
156
+ store=self.objectstore_factory.store(),
154
157
  )
155
158
  except InvalidRunStatusException as e:
156
159
  abort_grpc_context(e.message, context)
@@ -167,6 +170,7 @@ class FleetServicer(fleet_pb2_grpc.FleetServicer):
167
170
  request=request,
168
171
  ffs=self.ffs_factory.ffs(),
169
172
  state=self.state_factory.state(),
173
+ store=self.objectstore_factory.store(),
170
174
  )
171
175
  except InvalidRunStatusException as e:
172
176
  abort_grpc_context(e.message, context)
@@ -219,3 +223,24 @@ class FleetServicer(fleet_pb2_grpc.FleetServicer):
219
223
  abort_grpc_context(e.message, context)
220
224
 
221
225
  return res
226
+
227
+ def ConfirmMessageReceived(
228
+ self, request: ConfirmMessageReceivedRequest, context: grpc.ServicerContext
229
+ ) -> ConfirmMessageReceivedResponse:
230
+ """Confirm message received."""
231
+ log(
232
+ DEBUG,
233
+ "[Fleet.ConfirmMessageReceived] Message with ID '%s' has been received",
234
+ request.message_object_id,
235
+ )
236
+
237
+ try:
238
+ res = message_handler.confirm_message_received(
239
+ request=request,
240
+ state=self.state_factory.state(),
241
+ store=self.objectstore_factory.store(),
242
+ )
243
+ except InvalidRunStatusException as e:
244
+ abort_grpc_context(e.message, context)
245
+
246
+ return res