flwr 1.18.0__py3-none-any.whl → 1.20.0__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 (174) hide show
  1. flwr/app/__init__.py +15 -0
  2. flwr/app/error.py +68 -0
  3. flwr/app/metadata.py +223 -0
  4. flwr/cli/build.py +94 -59
  5. flwr/cli/log.py +3 -3
  6. flwr/cli/login/login.py +3 -7
  7. flwr/cli/ls.py +15 -36
  8. flwr/cli/new/new.py +12 -4
  9. flwr/cli/new/templates/app/README.flowertune.md.tpl +2 -0
  10. flwr/cli/new/templates/app/README.md.tpl +5 -0
  11. flwr/cli/new/templates/app/code/client.baseline.py.tpl +1 -1
  12. flwr/cli/new/templates/app/code/model.baseline.py.tpl +1 -1
  13. flwr/cli/new/templates/app/code/server.baseline.py.tpl +2 -3
  14. flwr/cli/new/templates/app/pyproject.baseline.toml.tpl +25 -17
  15. flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +13 -1
  16. flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +21 -2
  17. flwr/cli/new/templates/app/pyproject.jax.toml.tpl +18 -1
  18. flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +19 -2
  19. flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +18 -1
  20. flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +20 -3
  21. flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +18 -1
  22. flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +18 -1
  23. flwr/cli/run/run.py +48 -49
  24. flwr/cli/stop.py +2 -2
  25. flwr/cli/utils.py +38 -5
  26. flwr/client/__init__.py +2 -2
  27. flwr/client/client_app.py +1 -1
  28. flwr/client/clientapp/__init__.py +0 -7
  29. flwr/client/grpc_adapter_client/connection.py +15 -8
  30. flwr/client/grpc_rere_client/connection.py +142 -97
  31. flwr/client/grpc_rere_client/grpc_adapter.py +34 -6
  32. flwr/client/message_handler/message_handler.py +1 -1
  33. flwr/client/mod/comms_mods.py +36 -17
  34. flwr/client/rest_client/connection.py +176 -103
  35. flwr/clientapp/__init__.py +15 -0
  36. flwr/common/__init__.py +2 -2
  37. flwr/common/auth_plugin/__init__.py +2 -0
  38. flwr/common/auth_plugin/auth_plugin.py +29 -3
  39. flwr/common/constant.py +39 -8
  40. flwr/common/event_log_plugin/event_log_plugin.py +3 -3
  41. flwr/common/exit/exit_code.py +16 -1
  42. flwr/common/exit_handlers.py +30 -0
  43. flwr/common/grpc.py +12 -1
  44. flwr/common/heartbeat.py +165 -0
  45. flwr/common/inflatable.py +290 -0
  46. flwr/common/inflatable_protobuf_utils.py +141 -0
  47. flwr/common/inflatable_utils.py +508 -0
  48. flwr/common/message.py +110 -242
  49. flwr/common/record/__init__.py +2 -1
  50. flwr/common/record/array.py +402 -0
  51. flwr/common/record/arraychunk.py +59 -0
  52. flwr/common/record/arrayrecord.py +103 -225
  53. flwr/common/record/configrecord.py +59 -4
  54. flwr/common/record/conversion_utils.py +1 -1
  55. flwr/common/record/metricrecord.py +55 -4
  56. flwr/common/record/recorddict.py +69 -1
  57. flwr/common/recorddict_compat.py +2 -2
  58. flwr/common/retry_invoker.py +5 -1
  59. flwr/common/serde.py +59 -211
  60. flwr/common/serde_utils.py +175 -0
  61. flwr/common/typing.py +5 -3
  62. flwr/compat/__init__.py +15 -0
  63. flwr/compat/client/__init__.py +15 -0
  64. flwr/{client → compat/client}/app.py +28 -185
  65. flwr/compat/common/__init__.py +15 -0
  66. flwr/compat/server/__init__.py +15 -0
  67. flwr/compat/server/app.py +174 -0
  68. flwr/compat/simulation/__init__.py +15 -0
  69. flwr/proto/appio_pb2.py +43 -0
  70. flwr/proto/appio_pb2.pyi +151 -0
  71. flwr/proto/appio_pb2_grpc.py +4 -0
  72. flwr/proto/appio_pb2_grpc.pyi +4 -0
  73. flwr/proto/clientappio_pb2.py +12 -19
  74. flwr/proto/clientappio_pb2.pyi +23 -101
  75. flwr/proto/clientappio_pb2_grpc.py +269 -28
  76. flwr/proto/clientappio_pb2_grpc.pyi +114 -20
  77. flwr/proto/fleet_pb2.py +24 -27
  78. flwr/proto/fleet_pb2.pyi +19 -35
  79. flwr/proto/fleet_pb2_grpc.py +117 -13
  80. flwr/proto/fleet_pb2_grpc.pyi +47 -6
  81. flwr/proto/heartbeat_pb2.py +33 -0
  82. flwr/proto/heartbeat_pb2.pyi +66 -0
  83. flwr/proto/heartbeat_pb2_grpc.py +4 -0
  84. flwr/proto/heartbeat_pb2_grpc.pyi +4 -0
  85. flwr/proto/message_pb2.py +28 -11
  86. flwr/proto/message_pb2.pyi +125 -0
  87. flwr/proto/recorddict_pb2.py +16 -28
  88. flwr/proto/recorddict_pb2.pyi +46 -64
  89. flwr/proto/run_pb2.py +24 -32
  90. flwr/proto/run_pb2.pyi +4 -52
  91. flwr/proto/serverappio_pb2.py +9 -23
  92. flwr/proto/serverappio_pb2.pyi +0 -110
  93. flwr/proto/serverappio_pb2_grpc.py +177 -72
  94. flwr/proto/serverappio_pb2_grpc.pyi +75 -33
  95. flwr/proto/simulationio_pb2.py +12 -11
  96. flwr/proto/simulationio_pb2_grpc.py +35 -0
  97. flwr/proto/simulationio_pb2_grpc.pyi +14 -0
  98. flwr/server/__init__.py +1 -1
  99. flwr/server/app.py +69 -187
  100. flwr/server/compat/app_utils.py +50 -28
  101. flwr/server/fleet_event_log_interceptor.py +6 -2
  102. flwr/server/grid/grpc_grid.py +148 -41
  103. flwr/server/grid/inmemory_grid.py +5 -4
  104. flwr/server/serverapp/app.py +45 -17
  105. flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +21 -3
  106. flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +102 -8
  107. flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +2 -5
  108. flwr/server/superlink/fleet/message_handler/message_handler.py +130 -19
  109. flwr/server/superlink/fleet/rest_rere/rest_api.py +73 -13
  110. flwr/server/superlink/fleet/vce/vce_api.py +6 -3
  111. flwr/server/superlink/linkstate/in_memory_linkstate.py +138 -43
  112. flwr/server/superlink/linkstate/linkstate.py +53 -20
  113. flwr/server/superlink/linkstate/sqlite_linkstate.py +149 -55
  114. flwr/server/superlink/linkstate/utils.py +33 -29
  115. flwr/server/superlink/serverappio/serverappio_grpc.py +4 -1
  116. flwr/server/superlink/serverappio/serverappio_servicer.py +230 -84
  117. flwr/server/superlink/simulation/simulationio_grpc.py +1 -1
  118. flwr/server/superlink/simulation/simulationio_servicer.py +26 -2
  119. flwr/server/superlink/utils.py +9 -2
  120. flwr/server/utils/validator.py +2 -2
  121. flwr/serverapp/__init__.py +15 -0
  122. flwr/simulation/app.py +25 -0
  123. flwr/simulation/run_simulation.py +17 -0
  124. flwr/supercore/__init__.py +15 -0
  125. flwr/{server/superlink → supercore}/ffs/__init__.py +2 -0
  126. flwr/{server/superlink → supercore}/ffs/disk_ffs.py +1 -1
  127. flwr/supercore/grpc_health/__init__.py +22 -0
  128. flwr/supercore/grpc_health/simple_health_servicer.py +38 -0
  129. flwr/supercore/license_plugin/__init__.py +22 -0
  130. flwr/supercore/license_plugin/license_plugin.py +26 -0
  131. flwr/supercore/object_store/__init__.py +24 -0
  132. flwr/supercore/object_store/in_memory_object_store.py +229 -0
  133. flwr/supercore/object_store/object_store.py +170 -0
  134. flwr/supercore/object_store/object_store_factory.py +44 -0
  135. flwr/supercore/object_store/utils.py +43 -0
  136. flwr/supercore/scheduler/__init__.py +22 -0
  137. flwr/supercore/scheduler/plugin.py +71 -0
  138. flwr/{client/nodestate/nodestate.py → supercore/utils.py} +14 -13
  139. flwr/superexec/deployment.py +7 -4
  140. flwr/superexec/exec_event_log_interceptor.py +8 -4
  141. flwr/superexec/exec_grpc.py +25 -5
  142. flwr/superexec/exec_license_interceptor.py +82 -0
  143. flwr/superexec/exec_servicer.py +135 -24
  144. flwr/superexec/exec_user_auth_interceptor.py +45 -8
  145. flwr/superexec/executor.py +5 -1
  146. flwr/superexec/simulation.py +8 -3
  147. flwr/superlink/__init__.py +15 -0
  148. flwr/{client/supernode → supernode}/__init__.py +0 -7
  149. flwr/supernode/cli/__init__.py +24 -0
  150. flwr/{client/supernode/app.py → supernode/cli/flower_supernode.py} +3 -19
  151. flwr/supernode/cli/flwr_clientapp.py +88 -0
  152. flwr/supernode/nodestate/in_memory_nodestate.py +199 -0
  153. flwr/supernode/nodestate/nodestate.py +227 -0
  154. flwr/supernode/runtime/__init__.py +15 -0
  155. flwr/{client/clientapp/app.py → supernode/runtime/run_clientapp.py} +135 -89
  156. flwr/supernode/scheduler/__init__.py +22 -0
  157. flwr/supernode/scheduler/simple_clientapp_scheduler_plugin.py +49 -0
  158. flwr/supernode/servicer/__init__.py +15 -0
  159. flwr/supernode/servicer/clientappio/__init__.py +22 -0
  160. flwr/supernode/servicer/clientappio/clientappio_servicer.py +303 -0
  161. flwr/supernode/start_client_internal.py +589 -0
  162. {flwr-1.18.0.dist-info → flwr-1.20.0.dist-info}/METADATA +6 -4
  163. {flwr-1.18.0.dist-info → flwr-1.20.0.dist-info}/RECORD +171 -123
  164. {flwr-1.18.0.dist-info → flwr-1.20.0.dist-info}/WHEEL +1 -1
  165. {flwr-1.18.0.dist-info → flwr-1.20.0.dist-info}/entry_points.txt +2 -2
  166. flwr/client/clientapp/clientappio_servicer.py +0 -244
  167. flwr/client/heartbeat.py +0 -74
  168. flwr/client/nodestate/in_memory_nodestate.py +0 -38
  169. /flwr/{client → compat/client}/grpc_client/__init__.py +0 -0
  170. /flwr/{client → compat/client}/grpc_client/connection.py +0 -0
  171. /flwr/{server/superlink → supercore}/ffs/ffs.py +0 -0
  172. /flwr/{server/superlink → supercore}/ffs/ffs_factory.py +0 -0
  173. /flwr/{client → supernode}/nodestate/__init__.py +0 -0
  174. /flwr/{client → supernode}/nodestate/nodestate_factory.py +0 -0
flwr/proto/fleet_pb2.pyi CHANGED
@@ -16,13 +16,13 @@ DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
16
16
  class CreateNodeRequest(google.protobuf.message.Message):
17
17
  """CreateNode messages"""
18
18
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
19
- PING_INTERVAL_FIELD_NUMBER: builtins.int
20
- ping_interval: builtins.float
19
+ HEARTBEAT_INTERVAL_FIELD_NUMBER: builtins.int
20
+ heartbeat_interval: builtins.float
21
21
  def __init__(self,
22
22
  *,
23
- ping_interval: builtins.float = ...,
23
+ heartbeat_interval: builtins.float = ...,
24
24
  ) -> None: ...
25
- def ClearField(self, field_name: typing_extensions.Literal["ping_interval",b"ping_interval"]) -> None: ...
25
+ def ClearField(self, field_name: typing_extensions.Literal["heartbeat_interval",b"heartbeat_interval"]) -> None: ...
26
26
  global___CreateNodeRequest = CreateNodeRequest
27
27
 
28
28
  class CreateNodeResponse(google.protobuf.message.Message):
@@ -58,34 +58,6 @@ class DeleteNodeResponse(google.protobuf.message.Message):
58
58
  ) -> None: ...
59
59
  global___DeleteNodeResponse = DeleteNodeResponse
60
60
 
61
- class PingRequest(google.protobuf.message.Message):
62
- """Ping messages"""
63
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
64
- NODE_FIELD_NUMBER: builtins.int
65
- PING_INTERVAL_FIELD_NUMBER: builtins.int
66
- @property
67
- def node(self) -> flwr.proto.node_pb2.Node: ...
68
- ping_interval: builtins.float
69
- def __init__(self,
70
- *,
71
- node: typing.Optional[flwr.proto.node_pb2.Node] = ...,
72
- ping_interval: builtins.float = ...,
73
- ) -> None: ...
74
- def HasField(self, field_name: typing_extensions.Literal["node",b"node"]) -> builtins.bool: ...
75
- def ClearField(self, field_name: typing_extensions.Literal["node",b"node","ping_interval",b"ping_interval"]) -> None: ...
76
- global___PingRequest = PingRequest
77
-
78
- class PingResponse(google.protobuf.message.Message):
79
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
80
- SUCCESS_FIELD_NUMBER: builtins.int
81
- success: builtins.bool
82
- def __init__(self,
83
- *,
84
- success: builtins.bool = ...,
85
- ) -> None: ...
86
- def ClearField(self, field_name: typing_extensions.Literal["success",b"success"]) -> None: ...
87
- global___PingResponse = PingResponse
88
-
89
61
  class PullMessagesRequest(google.protobuf.message.Message):
90
62
  """PullMessages messages"""
91
63
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
@@ -108,17 +80,21 @@ class PullMessagesResponse(google.protobuf.message.Message):
108
80
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
109
81
  RECONNECT_FIELD_NUMBER: builtins.int
110
82
  MESSAGES_LIST_FIELD_NUMBER: builtins.int
83
+ MESSAGE_OBJECT_TREES_FIELD_NUMBER: builtins.int
111
84
  @property
112
85
  def reconnect(self) -> global___Reconnect: ...
113
86
  @property
114
87
  def messages_list(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[flwr.proto.message_pb2.Message]: ...
88
+ @property
89
+ def message_object_trees(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[flwr.proto.message_pb2.ObjectTree]: ...
115
90
  def __init__(self,
116
91
  *,
117
92
  reconnect: typing.Optional[global___Reconnect] = ...,
118
93
  messages_list: typing.Optional[typing.Iterable[flwr.proto.message_pb2.Message]] = ...,
94
+ message_object_trees: typing.Optional[typing.Iterable[flwr.proto.message_pb2.ObjectTree]] = ...,
119
95
  ) -> None: ...
120
96
  def HasField(self, field_name: typing_extensions.Literal["reconnect",b"reconnect"]) -> builtins.bool: ...
121
- def ClearField(self, field_name: typing_extensions.Literal["messages_list",b"messages_list","reconnect",b"reconnect"]) -> None: ...
97
+ def ClearField(self, field_name: typing_extensions.Literal["message_object_trees",b"message_object_trees","messages_list",b"messages_list","reconnect",b"reconnect"]) -> None: ...
122
98
  global___PullMessagesResponse = PullMessagesResponse
123
99
 
124
100
  class PushMessagesRequest(google.protobuf.message.Message):
@@ -126,17 +102,21 @@ class PushMessagesRequest(google.protobuf.message.Message):
126
102
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
127
103
  NODE_FIELD_NUMBER: builtins.int
128
104
  MESSAGES_LIST_FIELD_NUMBER: builtins.int
105
+ MESSAGE_OBJECT_TREES_FIELD_NUMBER: builtins.int
129
106
  @property
130
107
  def node(self) -> flwr.proto.node_pb2.Node: ...
131
108
  @property
132
109
  def messages_list(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[flwr.proto.message_pb2.Message]: ...
110
+ @property
111
+ def message_object_trees(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[flwr.proto.message_pb2.ObjectTree]: ...
133
112
  def __init__(self,
134
113
  *,
135
114
  node: typing.Optional[flwr.proto.node_pb2.Node] = ...,
136
115
  messages_list: typing.Optional[typing.Iterable[flwr.proto.message_pb2.Message]] = ...,
116
+ message_object_trees: typing.Optional[typing.Iterable[flwr.proto.message_pb2.ObjectTree]] = ...,
137
117
  ) -> None: ...
138
118
  def HasField(self, field_name: typing_extensions.Literal["node",b"node"]) -> builtins.bool: ...
139
- def ClearField(self, field_name: typing_extensions.Literal["messages_list",b"messages_list","node",b"node"]) -> None: ...
119
+ def ClearField(self, field_name: typing_extensions.Literal["message_object_trees",b"message_object_trees","messages_list",b"messages_list","node",b"node"]) -> None: ...
140
120
  global___PushMessagesRequest = PushMessagesRequest
141
121
 
142
122
  class PushMessagesResponse(google.protobuf.message.Message):
@@ -156,17 +136,21 @@ class PushMessagesResponse(google.protobuf.message.Message):
156
136
 
157
137
  RECONNECT_FIELD_NUMBER: builtins.int
158
138
  RESULTS_FIELD_NUMBER: builtins.int
139
+ OBJECTS_TO_PUSH_FIELD_NUMBER: builtins.int
159
140
  @property
160
141
  def reconnect(self) -> global___Reconnect: ...
161
142
  @property
162
143
  def results(self) -> google.protobuf.internal.containers.ScalarMap[typing.Text, builtins.int]: ...
144
+ @property
145
+ def objects_to_push(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[typing.Text]: ...
163
146
  def __init__(self,
164
147
  *,
165
148
  reconnect: typing.Optional[global___Reconnect] = ...,
166
149
  results: typing.Optional[typing.Mapping[typing.Text, builtins.int]] = ...,
150
+ objects_to_push: typing.Optional[typing.Iterable[typing.Text]] = ...,
167
151
  ) -> None: ...
168
152
  def HasField(self, field_name: typing_extensions.Literal["reconnect",b"reconnect"]) -> builtins.bool: ...
169
- def ClearField(self, field_name: typing_extensions.Literal["reconnect",b"reconnect","results",b"results"]) -> None: ...
153
+ def ClearField(self, field_name: typing_extensions.Literal["objects_to_push",b"objects_to_push","reconnect",b"reconnect","results",b"results"]) -> None: ...
170
154
  global___PushMessagesResponse = PushMessagesResponse
171
155
 
172
156
  class Reconnect(google.protobuf.message.Message):
@@ -4,6 +4,8 @@ import grpc
4
4
 
5
5
  from flwr.proto import fab_pb2 as flwr_dot_proto_dot_fab__pb2
6
6
  from flwr.proto import fleet_pb2 as flwr_dot_proto_dot_fleet__pb2
7
+ from flwr.proto import heartbeat_pb2 as flwr_dot_proto_dot_heartbeat__pb2
8
+ from flwr.proto import message_pb2 as flwr_dot_proto_dot_message__pb2
7
9
  from flwr.proto import run_pb2 as flwr_dot_proto_dot_run__pb2
8
10
 
9
11
 
@@ -26,10 +28,10 @@ class FleetStub(object):
26
28
  request_serializer=flwr_dot_proto_dot_fleet__pb2.DeleteNodeRequest.SerializeToString,
27
29
  response_deserializer=flwr_dot_proto_dot_fleet__pb2.DeleteNodeResponse.FromString,
28
30
  )
29
- self.Ping = channel.unary_unary(
30
- '/flwr.proto.Fleet/Ping',
31
- request_serializer=flwr_dot_proto_dot_fleet__pb2.PingRequest.SerializeToString,
32
- response_deserializer=flwr_dot_proto_dot_fleet__pb2.PingResponse.FromString,
31
+ self.SendNodeHeartbeat = channel.unary_unary(
32
+ '/flwr.proto.Fleet/SendNodeHeartbeat',
33
+ request_serializer=flwr_dot_proto_dot_heartbeat__pb2.SendNodeHeartbeatRequest.SerializeToString,
34
+ response_deserializer=flwr_dot_proto_dot_heartbeat__pb2.SendNodeHeartbeatResponse.FromString,
33
35
  )
34
36
  self.PullMessages = channel.unary_unary(
35
37
  '/flwr.proto.Fleet/PullMessages',
@@ -51,6 +53,21 @@ class FleetStub(object):
51
53
  request_serializer=flwr_dot_proto_dot_fab__pb2.GetFabRequest.SerializeToString,
52
54
  response_deserializer=flwr_dot_proto_dot_fab__pb2.GetFabResponse.FromString,
53
55
  )
56
+ self.PushObject = channel.unary_unary(
57
+ '/flwr.proto.Fleet/PushObject',
58
+ request_serializer=flwr_dot_proto_dot_message__pb2.PushObjectRequest.SerializeToString,
59
+ response_deserializer=flwr_dot_proto_dot_message__pb2.PushObjectResponse.FromString,
60
+ )
61
+ self.PullObject = channel.unary_unary(
62
+ '/flwr.proto.Fleet/PullObject',
63
+ request_serializer=flwr_dot_proto_dot_message__pb2.PullObjectRequest.SerializeToString,
64
+ response_deserializer=flwr_dot_proto_dot_message__pb2.PullObjectResponse.FromString,
65
+ )
66
+ self.ConfirmMessageReceived = channel.unary_unary(
67
+ '/flwr.proto.Fleet/ConfirmMessageReceived',
68
+ request_serializer=flwr_dot_proto_dot_message__pb2.ConfirmMessageReceivedRequest.SerializeToString,
69
+ response_deserializer=flwr_dot_proto_dot_message__pb2.ConfirmMessageReceivedResponse.FromString,
70
+ )
54
71
 
55
72
 
56
73
  class FleetServicer(object):
@@ -68,7 +85,7 @@ class FleetServicer(object):
68
85
  context.set_details('Method not implemented!')
69
86
  raise NotImplementedError('Method not implemented!')
70
87
 
71
- def Ping(self, request, context):
88
+ def SendNodeHeartbeat(self, request, context):
72
89
  """Missing associated documentation comment in .proto file."""
73
90
  context.set_code(grpc.StatusCode.UNIMPLEMENTED)
74
91
  context.set_details('Method not implemented!')
@@ -105,6 +122,27 @@ class FleetServicer(object):
105
122
  context.set_details('Method not implemented!')
106
123
  raise NotImplementedError('Method not implemented!')
107
124
 
125
+ def PushObject(self, request, context):
126
+ """Push Object
127
+ """
128
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
129
+ context.set_details('Method not implemented!')
130
+ raise NotImplementedError('Method not implemented!')
131
+
132
+ def PullObject(self, request, context):
133
+ """Pull Object
134
+ """
135
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
136
+ context.set_details('Method not implemented!')
137
+ raise NotImplementedError('Method not implemented!')
138
+
139
+ def ConfirmMessageReceived(self, request, context):
140
+ """Confirm Message Received
141
+ """
142
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
143
+ context.set_details('Method not implemented!')
144
+ raise NotImplementedError('Method not implemented!')
145
+
108
146
 
109
147
  def add_FleetServicer_to_server(servicer, server):
110
148
  rpc_method_handlers = {
@@ -118,10 +156,10 @@ def add_FleetServicer_to_server(servicer, server):
118
156
  request_deserializer=flwr_dot_proto_dot_fleet__pb2.DeleteNodeRequest.FromString,
119
157
  response_serializer=flwr_dot_proto_dot_fleet__pb2.DeleteNodeResponse.SerializeToString,
120
158
  ),
121
- 'Ping': grpc.unary_unary_rpc_method_handler(
122
- servicer.Ping,
123
- request_deserializer=flwr_dot_proto_dot_fleet__pb2.PingRequest.FromString,
124
- response_serializer=flwr_dot_proto_dot_fleet__pb2.PingResponse.SerializeToString,
159
+ 'SendNodeHeartbeat': grpc.unary_unary_rpc_method_handler(
160
+ servicer.SendNodeHeartbeat,
161
+ request_deserializer=flwr_dot_proto_dot_heartbeat__pb2.SendNodeHeartbeatRequest.FromString,
162
+ response_serializer=flwr_dot_proto_dot_heartbeat__pb2.SendNodeHeartbeatResponse.SerializeToString,
125
163
  ),
126
164
  'PullMessages': grpc.unary_unary_rpc_method_handler(
127
165
  servicer.PullMessages,
@@ -143,6 +181,21 @@ def add_FleetServicer_to_server(servicer, server):
143
181
  request_deserializer=flwr_dot_proto_dot_fab__pb2.GetFabRequest.FromString,
144
182
  response_serializer=flwr_dot_proto_dot_fab__pb2.GetFabResponse.SerializeToString,
145
183
  ),
184
+ 'PushObject': grpc.unary_unary_rpc_method_handler(
185
+ servicer.PushObject,
186
+ request_deserializer=flwr_dot_proto_dot_message__pb2.PushObjectRequest.FromString,
187
+ response_serializer=flwr_dot_proto_dot_message__pb2.PushObjectResponse.SerializeToString,
188
+ ),
189
+ 'PullObject': grpc.unary_unary_rpc_method_handler(
190
+ servicer.PullObject,
191
+ request_deserializer=flwr_dot_proto_dot_message__pb2.PullObjectRequest.FromString,
192
+ response_serializer=flwr_dot_proto_dot_message__pb2.PullObjectResponse.SerializeToString,
193
+ ),
194
+ 'ConfirmMessageReceived': grpc.unary_unary_rpc_method_handler(
195
+ servicer.ConfirmMessageReceived,
196
+ request_deserializer=flwr_dot_proto_dot_message__pb2.ConfirmMessageReceivedRequest.FromString,
197
+ response_serializer=flwr_dot_proto_dot_message__pb2.ConfirmMessageReceivedResponse.SerializeToString,
198
+ ),
146
199
  }
147
200
  generic_handler = grpc.method_handlers_generic_handler(
148
201
  'flwr.proto.Fleet', rpc_method_handlers)
@@ -188,7 +241,7 @@ class Fleet(object):
188
241
  insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
189
242
 
190
243
  @staticmethod
191
- def Ping(request,
244
+ def SendNodeHeartbeat(request,
192
245
  target,
193
246
  options=(),
194
247
  channel_credentials=None,
@@ -198,9 +251,9 @@ class Fleet(object):
198
251
  wait_for_ready=None,
199
252
  timeout=None,
200
253
  metadata=None):
201
- return grpc.experimental.unary_unary(request, target, '/flwr.proto.Fleet/Ping',
202
- flwr_dot_proto_dot_fleet__pb2.PingRequest.SerializeToString,
203
- flwr_dot_proto_dot_fleet__pb2.PingResponse.FromString,
254
+ return grpc.experimental.unary_unary(request, target, '/flwr.proto.Fleet/SendNodeHeartbeat',
255
+ flwr_dot_proto_dot_heartbeat__pb2.SendNodeHeartbeatRequest.SerializeToString,
256
+ flwr_dot_proto_dot_heartbeat__pb2.SendNodeHeartbeatResponse.FromString,
204
257
  options, channel_credentials,
205
258
  insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
206
259
 
@@ -271,3 +324,54 @@ class Fleet(object):
271
324
  flwr_dot_proto_dot_fab__pb2.GetFabResponse.FromString,
272
325
  options, channel_credentials,
273
326
  insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
327
+
328
+ @staticmethod
329
+ def PushObject(request,
330
+ target,
331
+ options=(),
332
+ channel_credentials=None,
333
+ call_credentials=None,
334
+ insecure=False,
335
+ compression=None,
336
+ wait_for_ready=None,
337
+ timeout=None,
338
+ metadata=None):
339
+ return grpc.experimental.unary_unary(request, target, '/flwr.proto.Fleet/PushObject',
340
+ flwr_dot_proto_dot_message__pb2.PushObjectRequest.SerializeToString,
341
+ flwr_dot_proto_dot_message__pb2.PushObjectResponse.FromString,
342
+ options, channel_credentials,
343
+ insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
344
+
345
+ @staticmethod
346
+ def PullObject(request,
347
+ target,
348
+ options=(),
349
+ channel_credentials=None,
350
+ call_credentials=None,
351
+ insecure=False,
352
+ compression=None,
353
+ wait_for_ready=None,
354
+ timeout=None,
355
+ metadata=None):
356
+ return grpc.experimental.unary_unary(request, target, '/flwr.proto.Fleet/PullObject',
357
+ flwr_dot_proto_dot_message__pb2.PullObjectRequest.SerializeToString,
358
+ flwr_dot_proto_dot_message__pb2.PullObjectResponse.FromString,
359
+ options, channel_credentials,
360
+ insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
361
+
362
+ @staticmethod
363
+ def ConfirmMessageReceived(request,
364
+ target,
365
+ options=(),
366
+ channel_credentials=None,
367
+ call_credentials=None,
368
+ insecure=False,
369
+ compression=None,
370
+ wait_for_ready=None,
371
+ timeout=None,
372
+ metadata=None):
373
+ return grpc.experimental.unary_unary(request, target, '/flwr.proto.Fleet/ConfirmMessageReceived',
374
+ flwr_dot_proto_dot_message__pb2.ConfirmMessageReceivedRequest.SerializeToString,
375
+ flwr_dot_proto_dot_message__pb2.ConfirmMessageReceivedResponse.FromString,
376
+ options, channel_credentials,
377
+ insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
@@ -5,6 +5,8 @@ isort:skip_file
5
5
  import abc
6
6
  import flwr.proto.fab_pb2
7
7
  import flwr.proto.fleet_pb2
8
+ import flwr.proto.heartbeat_pb2
9
+ import flwr.proto.message_pb2
8
10
  import flwr.proto.run_pb2
9
11
  import grpc
10
12
 
@@ -18,9 +20,9 @@ class FleetStub:
18
20
  flwr.proto.fleet_pb2.DeleteNodeRequest,
19
21
  flwr.proto.fleet_pb2.DeleteNodeResponse]
20
22
 
21
- Ping: grpc.UnaryUnaryMultiCallable[
22
- flwr.proto.fleet_pb2.PingRequest,
23
- flwr.proto.fleet_pb2.PingResponse]
23
+ SendNodeHeartbeat: grpc.UnaryUnaryMultiCallable[
24
+ flwr.proto.heartbeat_pb2.SendNodeHeartbeatRequest,
25
+ flwr.proto.heartbeat_pb2.SendNodeHeartbeatResponse]
24
26
 
25
27
  PullMessages: grpc.UnaryUnaryMultiCallable[
26
28
  flwr.proto.fleet_pb2.PullMessagesRequest,
@@ -47,6 +49,21 @@ class FleetStub:
47
49
  flwr.proto.fab_pb2.GetFabResponse]
48
50
  """Get FAB"""
49
51
 
52
+ PushObject: grpc.UnaryUnaryMultiCallable[
53
+ flwr.proto.message_pb2.PushObjectRequest,
54
+ flwr.proto.message_pb2.PushObjectResponse]
55
+ """Push Object"""
56
+
57
+ PullObject: grpc.UnaryUnaryMultiCallable[
58
+ flwr.proto.message_pb2.PullObjectRequest,
59
+ flwr.proto.message_pb2.PullObjectResponse]
60
+ """Pull Object"""
61
+
62
+ ConfirmMessageReceived: grpc.UnaryUnaryMultiCallable[
63
+ flwr.proto.message_pb2.ConfirmMessageReceivedRequest,
64
+ flwr.proto.message_pb2.ConfirmMessageReceivedResponse]
65
+ """Confirm Message Received"""
66
+
50
67
 
51
68
  class FleetServicer(metaclass=abc.ABCMeta):
52
69
  @abc.abstractmethod
@@ -62,10 +79,10 @@ class FleetServicer(metaclass=abc.ABCMeta):
62
79
  ) -> flwr.proto.fleet_pb2.DeleteNodeResponse: ...
63
80
 
64
81
  @abc.abstractmethod
65
- def Ping(self,
66
- request: flwr.proto.fleet_pb2.PingRequest,
82
+ def SendNodeHeartbeat(self,
83
+ request: flwr.proto.heartbeat_pb2.SendNodeHeartbeatRequest,
67
84
  context: grpc.ServicerContext,
68
- ) -> flwr.proto.fleet_pb2.PingResponse: ...
85
+ ) -> flwr.proto.heartbeat_pb2.SendNodeHeartbeatResponse: ...
69
86
 
70
87
  @abc.abstractmethod
71
88
  def PullMessages(self,
@@ -103,5 +120,29 @@ class FleetServicer(metaclass=abc.ABCMeta):
103
120
  """Get FAB"""
104
121
  pass
105
122
 
123
+ @abc.abstractmethod
124
+ def PushObject(self,
125
+ request: flwr.proto.message_pb2.PushObjectRequest,
126
+ context: grpc.ServicerContext,
127
+ ) -> flwr.proto.message_pb2.PushObjectResponse:
128
+ """Push Object"""
129
+ pass
130
+
131
+ @abc.abstractmethod
132
+ def PullObject(self,
133
+ request: flwr.proto.message_pb2.PullObjectRequest,
134
+ context: grpc.ServicerContext,
135
+ ) -> flwr.proto.message_pb2.PullObjectResponse:
136
+ """Pull Object"""
137
+ pass
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
+
106
147
 
107
148
  def add_FleetServicer_to_server(servicer: FleetServicer, server: grpc.Server) -> None: ...
@@ -0,0 +1,33 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # source: flwr/proto/heartbeat.proto
4
+ # Protobuf Python Version: 4.25.1
5
+ """Generated protocol buffer code."""
6
+ from google.protobuf import descriptor as _descriptor
7
+ from google.protobuf import descriptor_pool as _descriptor_pool
8
+ from google.protobuf import symbol_database as _symbol_database
9
+ from google.protobuf.internal import builder as _builder
10
+ # @@protoc_insertion_point(imports)
11
+
12
+ _sym_db = _symbol_database.Default()
13
+
14
+
15
+ from flwr.proto import node_pb2 as flwr_dot_proto_dot_node__pb2
16
+
17
+
18
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1a\x66lwr/proto/heartbeat.proto\x12\nflwr.proto\x1a\x15\x66lwr/proto/node.proto\"V\n\x18SendNodeHeartbeatRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x1a\n\x12heartbeat_interval\x18\x02 \x01(\x01\",\n\x19SendNodeHeartbeatResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\"E\n\x17SendAppHeartbeatRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\x12\x1a\n\x12heartbeat_interval\x18\x02 \x01(\x01\"+\n\x18SendAppHeartbeatResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x62\x06proto3')
19
+
20
+ _globals = globals()
21
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
22
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'flwr.proto.heartbeat_pb2', _globals)
23
+ if _descriptor._USE_C_DESCRIPTORS == False:
24
+ DESCRIPTOR._options = None
25
+ _globals['_SENDNODEHEARTBEATREQUEST']._serialized_start=65
26
+ _globals['_SENDNODEHEARTBEATREQUEST']._serialized_end=151
27
+ _globals['_SENDNODEHEARTBEATRESPONSE']._serialized_start=153
28
+ _globals['_SENDNODEHEARTBEATRESPONSE']._serialized_end=197
29
+ _globals['_SENDAPPHEARTBEATREQUEST']._serialized_start=199
30
+ _globals['_SENDAPPHEARTBEATREQUEST']._serialized_end=268
31
+ _globals['_SENDAPPHEARTBEATRESPONSE']._serialized_start=270
32
+ _globals['_SENDAPPHEARTBEATRESPONSE']._serialized_end=313
33
+ # @@protoc_insertion_point(module_scope)
@@ -0,0 +1,66 @@
1
+ """
2
+ @generated by mypy-protobuf. Do not edit manually!
3
+ isort:skip_file
4
+ """
5
+ import builtins
6
+ import flwr.proto.node_pb2
7
+ import google.protobuf.descriptor
8
+ import google.protobuf.message
9
+ import typing
10
+ import typing_extensions
11
+
12
+ DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
13
+
14
+ class SendNodeHeartbeatRequest(google.protobuf.message.Message):
15
+ """Node Heartbeat messages"""
16
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
17
+ NODE_FIELD_NUMBER: builtins.int
18
+ HEARTBEAT_INTERVAL_FIELD_NUMBER: builtins.int
19
+ @property
20
+ def node(self) -> flwr.proto.node_pb2.Node: ...
21
+ heartbeat_interval: builtins.float
22
+ def __init__(self,
23
+ *,
24
+ node: typing.Optional[flwr.proto.node_pb2.Node] = ...,
25
+ heartbeat_interval: builtins.float = ...,
26
+ ) -> None: ...
27
+ def HasField(self, field_name: typing_extensions.Literal["node",b"node"]) -> builtins.bool: ...
28
+ def ClearField(self, field_name: typing_extensions.Literal["heartbeat_interval",b"heartbeat_interval","node",b"node"]) -> None: ...
29
+ global___SendNodeHeartbeatRequest = SendNodeHeartbeatRequest
30
+
31
+ class SendNodeHeartbeatResponse(google.protobuf.message.Message):
32
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
33
+ SUCCESS_FIELD_NUMBER: builtins.int
34
+ success: builtins.bool
35
+ def __init__(self,
36
+ *,
37
+ success: builtins.bool = ...,
38
+ ) -> None: ...
39
+ def ClearField(self, field_name: typing_extensions.Literal["success",b"success"]) -> None: ...
40
+ global___SendNodeHeartbeatResponse = SendNodeHeartbeatResponse
41
+
42
+ class SendAppHeartbeatRequest(google.protobuf.message.Message):
43
+ """App Heartbeat messages"""
44
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
45
+ RUN_ID_FIELD_NUMBER: builtins.int
46
+ HEARTBEAT_INTERVAL_FIELD_NUMBER: builtins.int
47
+ run_id: builtins.int
48
+ heartbeat_interval: builtins.float
49
+ def __init__(self,
50
+ *,
51
+ run_id: builtins.int = ...,
52
+ heartbeat_interval: builtins.float = ...,
53
+ ) -> None: ...
54
+ def ClearField(self, field_name: typing_extensions.Literal["heartbeat_interval",b"heartbeat_interval","run_id",b"run_id"]) -> None: ...
55
+ global___SendAppHeartbeatRequest = SendAppHeartbeatRequest
56
+
57
+ class SendAppHeartbeatResponse(google.protobuf.message.Message):
58
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
59
+ SUCCESS_FIELD_NUMBER: builtins.int
60
+ success: builtins.bool
61
+ def __init__(self,
62
+ *,
63
+ success: builtins.bool = ...,
64
+ ) -> None: ...
65
+ def ClearField(self, field_name: typing_extensions.Literal["success",b"success"]) -> None: ...
66
+ global___SendAppHeartbeatResponse = SendAppHeartbeatResponse
@@ -0,0 +1,4 @@
1
+ # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
2
+ """Client and server classes corresponding to protobuf-defined services."""
3
+ import grpc
4
+
@@ -0,0 +1,4 @@
1
+ """
2
+ @generated by mypy-protobuf. Do not edit manually!
3
+ isort:skip_file
4
+ """
flwr/proto/message_pb2.py CHANGED
@@ -15,9 +15,10 @@ _sym_db = _symbol_database.Default()
15
15
  from flwr.proto import error_pb2 as flwr_dot_proto_dot_error__pb2
16
16
  from flwr.proto import recorddict_pb2 as flwr_dot_proto_dot_recorddict__pb2
17
17
  from flwr.proto import transport_pb2 as flwr_dot_proto_dot_transport__pb2
18
+ from flwr.proto import node_pb2 as flwr_dot_proto_dot_node__pb2
18
19
 
19
20
 
20
- 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\"|\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\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')
21
22
 
22
23
  _globals = globals()
23
24
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
@@ -28,14 +29,30 @@ if _descriptor._USE_C_DESCRIPTORS == False:
28
29
  _globals['_CONTEXT_NODECONFIGENTRY']._serialized_options = b'8\001'
29
30
  _globals['_CONTEXT_RUNCONFIGENTRY']._options = None
30
31
  _globals['_CONTEXT_RUNCONFIGENTRY']._serialized_options = b'8\001'
31
- _globals['_MESSAGE']._serialized_start=121
32
- _globals['_MESSAGE']._serialized_end=245
33
- _globals['_CONTEXT']._serialized_start=248
34
- _globals['_CONTEXT']._serialized_end=584
35
- _globals['_CONTEXT_NODECONFIGENTRY']._serialized_start=445
36
- _globals['_CONTEXT_NODECONFIGENTRY']._serialized_end=514
37
- _globals['_CONTEXT_RUNCONFIGENTRY']._serialized_start=516
38
- _globals['_CONTEXT_RUNCONFIGENTRY']._serialized_end=584
39
- _globals['_METADATA']._serialized_start=587
40
- _globals['_METADATA']._serialized_end=777
32
+ _globals['_MESSAGE']._serialized_start=144
33
+ _globals['_MESSAGE']._serialized_end=268
34
+ _globals['_CONTEXT']._serialized_start=271
35
+ _globals['_CONTEXT']._serialized_end=607
36
+ _globals['_CONTEXT_NODECONFIGENTRY']._serialized_start=468
37
+ _globals['_CONTEXT_NODECONFIGENTRY']._serialized_end=537
38
+ _globals['_CONTEXT_RUNCONFIGENTRY']._serialized_start=539
39
+ _globals['_CONTEXT_RUNCONFIGENTRY']._serialized_end=607
40
+ _globals['_METADATA']._serialized_start=610
41
+ _globals['_METADATA']._serialized_end=800
42
+ _globals['_OBJECTIDS']._serialized_start=802
43
+ _globals['_OBJECTIDS']._serialized_end=833
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
41
58
  # @@protoc_insertion_point(module_scope)