flwr-nightly 1.19.0.dev20250501__py3-none-any.whl → 1.19.0.dev20250507__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.
@@ -42,13 +42,15 @@ from flwr.proto.fab_pb2 import GetFabRequest, GetFabResponse # pylint: disable=
42
42
  from flwr.proto.fleet_pb2 import ( # pylint: disable=E0611
43
43
  CreateNodeRequest,
44
44
  DeleteNodeRequest,
45
- HeartbeatRequest,
46
- HeartbeatResponse,
47
45
  PullMessagesRequest,
48
46
  PullMessagesResponse,
49
47
  PushMessagesRequest,
50
48
  )
51
49
  from flwr.proto.fleet_pb2_grpc import FleetStub # pylint: disable=E0611
50
+ from flwr.proto.heartbeat_pb2 import ( # pylint: disable=E0611
51
+ SendNodeHeartbeatRequest,
52
+ SendNodeHeartbeatResponse,
53
+ )
52
54
  from flwr.proto.node_pb2 import Node # pylint: disable=E0611
53
55
  from flwr.proto.run_pb2 import GetRunRequest, GetRunResponse # pylint: disable=E0611
54
56
 
@@ -157,21 +159,25 @@ def grpc_request_response( # pylint: disable=R0913,R0914,R0915,R0917
157
159
  retry_invoker.should_giveup = _should_giveup_fn
158
160
 
159
161
  ###########################################################################
160
- # heartbeat/create_node/delete_node/receive/send/get_run functions
162
+ # send_node_heartbeat/create_node/delete_node/receive/send/get_run functions
161
163
  ###########################################################################
162
164
 
163
- def heartbeat() -> bool:
165
+ def send_node_heartbeat() -> bool:
164
166
  # Get Node
165
167
  if node is None:
166
168
  log(ERROR, "Node instance missing")
167
169
  return False
168
170
 
169
171
  # Construct the heartbeat request
170
- req = HeartbeatRequest(node=node, heartbeat_interval=HEARTBEAT_DEFAULT_INTERVAL)
172
+ req = SendNodeHeartbeatRequest(
173
+ node=node, heartbeat_interval=HEARTBEAT_DEFAULT_INTERVAL
174
+ )
171
175
 
172
176
  # Call FleetAPI
173
177
  try:
174
- res: HeartbeatResponse = stub.Heartbeat(req, timeout=HEARTBEAT_CALL_TIMEOUT)
178
+ res: SendNodeHeartbeatResponse = stub.SendNodeHeartbeat(
179
+ req, timeout=HEARTBEAT_CALL_TIMEOUT
180
+ )
175
181
  except grpc.RpcError as e:
176
182
  status_code = e.code()
177
183
  if status_code == grpc.StatusCode.UNAVAILABLE:
@@ -188,7 +194,7 @@ def grpc_request_response( # pylint: disable=R0913,R0914,R0915,R0917
188
194
  )
189
195
  return True
190
196
 
191
- heartbeat_sender = HeartbeatSender(heartbeat)
197
+ heartbeat_sender = HeartbeatSender(send_node_heartbeat)
192
198
 
193
199
  def create_node() -> Optional[int]:
194
200
  """Set create_node."""
@@ -38,8 +38,6 @@ from flwr.proto.fleet_pb2 import ( # pylint: disable=E0611
38
38
  CreateNodeResponse,
39
39
  DeleteNodeRequest,
40
40
  DeleteNodeResponse,
41
- HeartbeatRequest,
42
- HeartbeatResponse,
43
41
  PullMessagesRequest,
44
42
  PullMessagesResponse,
45
43
  PushMessagesRequest,
@@ -47,6 +45,10 @@ from flwr.proto.fleet_pb2 import ( # pylint: disable=E0611
47
45
  )
48
46
  from flwr.proto.grpcadapter_pb2 import MessageContainer # pylint: disable=E0611
49
47
  from flwr.proto.grpcadapter_pb2_grpc import GrpcAdapterStub
48
+ from flwr.proto.heartbeat_pb2 import ( # pylint: disable=E0611
49
+ SendNodeHeartbeatRequest,
50
+ SendNodeHeartbeatResponse,
51
+ )
50
52
  from flwr.proto.run_pb2 import GetRunRequest, GetRunResponse # pylint: disable=E0611
51
53
 
52
54
  T = TypeVar("T", bound=GrpcMessage)
@@ -120,11 +122,11 @@ class GrpcAdapter:
120
122
  """."""
121
123
  return self._send_and_receive(request, DeleteNodeResponse, **kwargs)
122
124
 
123
- def Heartbeat( # pylint: disable=C0103
124
- self, request: HeartbeatRequest, **kwargs: Any
125
- ) -> HeartbeatResponse:
125
+ def SendNodeHeartbeat( # pylint: disable=C0103
126
+ self, request: SendNodeHeartbeatRequest, **kwargs: Any
127
+ ) -> SendNodeHeartbeatResponse:
126
128
  """."""
127
- return self._send_and_receive(request, HeartbeatResponse, **kwargs)
129
+ return self._send_and_receive(request, SendNodeHeartbeatResponse, **kwargs)
128
130
 
129
131
  def PullMessages( # pylint: disable=C0103
130
132
  self, request: PullMessagesRequest, **kwargs: Any
@@ -41,13 +41,15 @@ from flwr.proto.fleet_pb2 import ( # pylint: disable=E0611
41
41
  CreateNodeResponse,
42
42
  DeleteNodeRequest,
43
43
  DeleteNodeResponse,
44
- HeartbeatRequest,
45
- HeartbeatResponse,
46
44
  PullMessagesRequest,
47
45
  PullMessagesResponse,
48
46
  PushMessagesRequest,
49
47
  PushMessagesResponse,
50
48
  )
49
+ from flwr.proto.heartbeat_pb2 import ( # pylint: disable=E0611
50
+ SendNodeHeartbeatRequest,
51
+ SendNodeHeartbeatResponse,
52
+ )
51
53
  from flwr.proto.node_pb2 import Node # pylint: disable=E0611
52
54
  from flwr.proto.run_pb2 import GetRunRequest, GetRunResponse # pylint: disable=E0611
53
55
 
@@ -61,7 +63,7 @@ PATH_CREATE_NODE: str = "api/v0/fleet/create-node"
61
63
  PATH_DELETE_NODE: str = "api/v0/fleet/delete-node"
62
64
  PATH_PULL_MESSAGES: str = "/api/v0/fleet/pull-messages"
63
65
  PATH_PUSH_MESSAGES: str = "/api/v0/fleet/push-messages"
64
- PATH_PING: str = "api/v0/fleet/heartbeat"
66
+ PATH_SEND_NODE_HEARTBEAT: str = "api/v0/fleet/send-node-heartbeat"
65
67
  PATH_GET_RUN: str = "/api/v0/fleet/get-run"
66
68
  PATH_GET_FAB: str = "/api/v0/fleet/get-fab"
67
69
 
@@ -205,17 +207,21 @@ def http_request_response( # pylint: disable=R0913,R0914,R0915,R0917
205
207
  grpc_res.ParseFromString(res.content)
206
208
  return grpc_res
207
209
 
208
- def heartbeat() -> bool:
210
+ def send_node_heartbeat() -> bool:
209
211
  # Get Node
210
212
  if node is None:
211
213
  log(ERROR, "Node instance missing")
212
214
  return False
213
215
 
214
216
  # Construct the heartbeat request
215
- req = HeartbeatRequest(node=node, heartbeat_interval=HEARTBEAT_DEFAULT_INTERVAL)
217
+ req = SendNodeHeartbeatRequest(
218
+ node=node, heartbeat_interval=HEARTBEAT_DEFAULT_INTERVAL
219
+ )
216
220
 
217
221
  # Send the request
218
- res = _request(req, HeartbeatResponse, PATH_PING, retry=False)
222
+ res = _request(
223
+ req, SendNodeHeartbeatResponse, PATH_SEND_NODE_HEARTBEAT, retry=False
224
+ )
219
225
  if res is None:
220
226
  return False
221
227
 
@@ -227,7 +233,7 @@ def http_request_response( # pylint: disable=R0913,R0914,R0915,R0917
227
233
  )
228
234
  return True
229
235
 
230
- heartbeat_sender = HeartbeatSender(heartbeat)
236
+ heartbeat_sender = HeartbeatSender(send_node_heartbeat)
231
237
 
232
238
  def create_node() -> Optional[int]:
233
239
  """Set create_node."""
flwr/proto/fleet_pb2.py CHANGED
@@ -12,13 +12,14 @@ from google.protobuf.internal import builder as _builder
12
12
  _sym_db = _symbol_database.Default()
13
13
 
14
14
 
15
+ from flwr.proto import heartbeat_pb2 as flwr_dot_proto_dot_heartbeat__pb2
15
16
  from flwr.proto import node_pb2 as flwr_dot_proto_dot_node__pb2
16
17
  from flwr.proto import run_pb2 as flwr_dot_proto_dot_run__pb2
17
18
  from flwr.proto import fab_pb2 as flwr_dot_proto_dot_fab__pb2
18
19
  from flwr.proto import message_pb2 as flwr_dot_proto_dot_message__pb2
19
20
 
20
21
 
21
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x16\x66lwr/proto/fleet.proto\x12\nflwr.proto\x1a\x15\x66lwr/proto/node.proto\x1a\x14\x66lwr/proto/run.proto\x1a\x14\x66lwr/proto/fab.proto\x1a\x18\x66lwr/proto/message.proto\"/\n\x11\x43reateNodeRequest\x12\x1a\n\x12heartbeat_interval\x18\x01 \x01(\x01\"4\n\x12\x43reateNodeResponse\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\"3\n\x11\x44\x65leteNodeRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\"\x14\n\x12\x44\x65leteNodeResponse\"N\n\x10HeartbeatRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x1a\n\x12heartbeat_interval\x18\x02 \x01(\x01\"$\n\x11HeartbeatResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\"J\n\x13PullMessagesRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x13\n\x0bmessage_ids\x18\x02 \x03(\t\"l\n\x14PullMessagesResponse\x12(\n\treconnect\x18\x01 \x01(\x0b\x32\x15.flwr.proto.Reconnect\x12*\n\rmessages_list\x18\x02 \x03(\x0b\x32\x13.flwr.proto.Message\"a\n\x13PushMessagesRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12*\n\rmessages_list\x18\x02 \x03(\x0b\x32\x13.flwr.proto.Message\"\xb0\x01\n\x14PushMessagesResponse\x12(\n\treconnect\x18\x01 \x01(\x0b\x32\x15.flwr.proto.Reconnect\x12>\n\x07results\x18\x02 \x03(\x0b\x32-.flwr.proto.PushMessagesResponse.ResultsEntry\x1a.\n\x0cResultsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\r:\x02\x38\x01\"\x1e\n\tReconnect\x12\x11\n\treconnect\x18\x01 \x01(\x04\x32\xa1\x04\n\x05\x46leet\x12M\n\nCreateNode\x12\x1d.flwr.proto.CreateNodeRequest\x1a\x1e.flwr.proto.CreateNodeResponse\"\x00\x12M\n\nDeleteNode\x12\x1d.flwr.proto.DeleteNodeRequest\x1a\x1e.flwr.proto.DeleteNodeResponse\"\x00\x12J\n\tHeartbeat\x12\x1c.flwr.proto.HeartbeatRequest\x1a\x1d.flwr.proto.HeartbeatResponse\"\x00\x12S\n\x0cPullMessages\x12\x1f.flwr.proto.PullMessagesRequest\x1a .flwr.proto.PullMessagesResponse\"\x00\x12S\n\x0cPushMessages\x12\x1f.flwr.proto.PushMessagesRequest\x1a .flwr.proto.PushMessagesResponse\"\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\x62\x06proto3')
22
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x16\x66lwr/proto/fleet.proto\x12\nflwr.proto\x1a\x1a\x66lwr/proto/heartbeat.proto\x1a\x15\x66lwr/proto/node.proto\x1a\x14\x66lwr/proto/run.proto\x1a\x14\x66lwr/proto/fab.proto\x1a\x18\x66lwr/proto/message.proto\"/\n\x11\x43reateNodeRequest\x12\x1a\n\x12heartbeat_interval\x18\x01 \x01(\x01\"4\n\x12\x43reateNodeResponse\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\"3\n\x11\x44\x65leteNodeRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\"\x14\n\x12\x44\x65leteNodeResponse\"J\n\x13PullMessagesRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x13\n\x0bmessage_ids\x18\x02 \x03(\t\"l\n\x14PullMessagesResponse\x12(\n\treconnect\x18\x01 \x01(\x0b\x32\x15.flwr.proto.Reconnect\x12*\n\rmessages_list\x18\x02 \x03(\x0b\x32\x13.flwr.proto.Message\"a\n\x13PushMessagesRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12*\n\rmessages_list\x18\x02 \x03(\x0b\x32\x13.flwr.proto.Message\"\xb0\x01\n\x14PushMessagesResponse\x12(\n\treconnect\x18\x01 \x01(\x0b\x32\x15.flwr.proto.Reconnect\x12>\n\x07results\x18\x02 \x03(\x0b\x32-.flwr.proto.PushMessagesResponse.ResultsEntry\x1a.\n\x0cResultsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\r:\x02\x38\x01\"\x1e\n\tReconnect\x12\x11\n\treconnect\x18\x01 \x01(\x04\x32\xb9\x04\n\x05\x46leet\x12M\n\nCreateNode\x12\x1d.flwr.proto.CreateNodeRequest\x1a\x1e.flwr.proto.CreateNodeResponse\"\x00\x12M\n\nDeleteNode\x12\x1d.flwr.proto.DeleteNodeRequest\x1a\x1e.flwr.proto.DeleteNodeResponse\"\x00\x12\x62\n\x11SendNodeHeartbeat\x12$.flwr.proto.SendNodeHeartbeatRequest\x1a%.flwr.proto.SendNodeHeartbeatResponse\"\x00\x12S\n\x0cPullMessages\x12\x1f.flwr.proto.PullMessagesRequest\x1a .flwr.proto.PullMessagesResponse\"\x00\x12S\n\x0cPushMessages\x12\x1f.flwr.proto.PushMessagesRequest\x1a .flwr.proto.PushMessagesResponse\"\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\x62\x06proto3')
22
23
 
23
24
  _globals = globals()
24
25
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
@@ -27,30 +28,26 @@ if _descriptor._USE_C_DESCRIPTORS == False:
27
28
  DESCRIPTOR._options = None
28
29
  _globals['_PUSHMESSAGESRESPONSE_RESULTSENTRY']._options = None
29
30
  _globals['_PUSHMESSAGESRESPONSE_RESULTSENTRY']._serialized_options = b'8\001'
30
- _globals['_CREATENODEREQUEST']._serialized_start=131
31
- _globals['_CREATENODEREQUEST']._serialized_end=178
32
- _globals['_CREATENODERESPONSE']._serialized_start=180
33
- _globals['_CREATENODERESPONSE']._serialized_end=232
34
- _globals['_DELETENODEREQUEST']._serialized_start=234
35
- _globals['_DELETENODEREQUEST']._serialized_end=285
36
- _globals['_DELETENODERESPONSE']._serialized_start=287
37
- _globals['_DELETENODERESPONSE']._serialized_end=307
38
- _globals['_HEARTBEATREQUEST']._serialized_start=309
39
- _globals['_HEARTBEATREQUEST']._serialized_end=387
40
- _globals['_HEARTBEATRESPONSE']._serialized_start=389
41
- _globals['_HEARTBEATRESPONSE']._serialized_end=425
42
- _globals['_PULLMESSAGESREQUEST']._serialized_start=427
43
- _globals['_PULLMESSAGESREQUEST']._serialized_end=501
44
- _globals['_PULLMESSAGESRESPONSE']._serialized_start=503
45
- _globals['_PULLMESSAGESRESPONSE']._serialized_end=611
46
- _globals['_PUSHMESSAGESREQUEST']._serialized_start=613
47
- _globals['_PUSHMESSAGESREQUEST']._serialized_end=710
48
- _globals['_PUSHMESSAGESRESPONSE']._serialized_start=713
49
- _globals['_PUSHMESSAGESRESPONSE']._serialized_end=889
50
- _globals['_PUSHMESSAGESRESPONSE_RESULTSENTRY']._serialized_start=843
51
- _globals['_PUSHMESSAGESRESPONSE_RESULTSENTRY']._serialized_end=889
52
- _globals['_RECONNECT']._serialized_start=891
53
- _globals['_RECONNECT']._serialized_end=921
54
- _globals['_FLEET']._serialized_start=924
55
- _globals['_FLEET']._serialized_end=1469
31
+ _globals['_CREATENODEREQUEST']._serialized_start=159
32
+ _globals['_CREATENODEREQUEST']._serialized_end=206
33
+ _globals['_CREATENODERESPONSE']._serialized_start=208
34
+ _globals['_CREATENODERESPONSE']._serialized_end=260
35
+ _globals['_DELETENODEREQUEST']._serialized_start=262
36
+ _globals['_DELETENODEREQUEST']._serialized_end=313
37
+ _globals['_DELETENODERESPONSE']._serialized_start=315
38
+ _globals['_DELETENODERESPONSE']._serialized_end=335
39
+ _globals['_PULLMESSAGESREQUEST']._serialized_start=337
40
+ _globals['_PULLMESSAGESREQUEST']._serialized_end=411
41
+ _globals['_PULLMESSAGESRESPONSE']._serialized_start=413
42
+ _globals['_PULLMESSAGESRESPONSE']._serialized_end=521
43
+ _globals['_PUSHMESSAGESREQUEST']._serialized_start=523
44
+ _globals['_PUSHMESSAGESREQUEST']._serialized_end=620
45
+ _globals['_PUSHMESSAGESRESPONSE']._serialized_start=623
46
+ _globals['_PUSHMESSAGESRESPONSE']._serialized_end=799
47
+ _globals['_PUSHMESSAGESRESPONSE_RESULTSENTRY']._serialized_start=753
48
+ _globals['_PUSHMESSAGESRESPONSE_RESULTSENTRY']._serialized_end=799
49
+ _globals['_RECONNECT']._serialized_start=801
50
+ _globals['_RECONNECT']._serialized_end=831
51
+ _globals['_FLEET']._serialized_start=834
52
+ _globals['_FLEET']._serialized_end=1403
56
53
  # @@protoc_insertion_point(module_scope)
flwr/proto/fleet_pb2.pyi CHANGED
@@ -58,34 +58,6 @@ class DeleteNodeResponse(google.protobuf.message.Message):
58
58
  ) -> None: ...
59
59
  global___DeleteNodeResponse = DeleteNodeResponse
60
60
 
61
- class HeartbeatRequest(google.protobuf.message.Message):
62
- """Heartbeat messages"""
63
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
64
- NODE_FIELD_NUMBER: builtins.int
65
- HEARTBEAT_INTERVAL_FIELD_NUMBER: builtins.int
66
- @property
67
- def node(self) -> flwr.proto.node_pb2.Node: ...
68
- heartbeat_interval: builtins.float
69
- def __init__(self,
70
- *,
71
- node: typing.Optional[flwr.proto.node_pb2.Node] = ...,
72
- heartbeat_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["heartbeat_interval",b"heartbeat_interval","node",b"node"]) -> None: ...
76
- global___HeartbeatRequest = HeartbeatRequest
77
-
78
- class HeartbeatResponse(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___HeartbeatResponse = HeartbeatResponse
88
-
89
61
  class PullMessagesRequest(google.protobuf.message.Message):
90
62
  """PullMessages messages"""
91
63
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
@@ -4,6 +4,7 @@ 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
7
8
  from flwr.proto import run_pb2 as flwr_dot_proto_dot_run__pb2
8
9
 
9
10
 
@@ -26,10 +27,10 @@ class FleetStub(object):
26
27
  request_serializer=flwr_dot_proto_dot_fleet__pb2.DeleteNodeRequest.SerializeToString,
27
28
  response_deserializer=flwr_dot_proto_dot_fleet__pb2.DeleteNodeResponse.FromString,
28
29
  )
29
- self.Heartbeat = channel.unary_unary(
30
- '/flwr.proto.Fleet/Heartbeat',
31
- request_serializer=flwr_dot_proto_dot_fleet__pb2.HeartbeatRequest.SerializeToString,
32
- response_deserializer=flwr_dot_proto_dot_fleet__pb2.HeartbeatResponse.FromString,
30
+ self.SendNodeHeartbeat = channel.unary_unary(
31
+ '/flwr.proto.Fleet/SendNodeHeartbeat',
32
+ request_serializer=flwr_dot_proto_dot_heartbeat__pb2.SendNodeHeartbeatRequest.SerializeToString,
33
+ response_deserializer=flwr_dot_proto_dot_heartbeat__pb2.SendNodeHeartbeatResponse.FromString,
33
34
  )
34
35
  self.PullMessages = channel.unary_unary(
35
36
  '/flwr.proto.Fleet/PullMessages',
@@ -68,7 +69,7 @@ class FleetServicer(object):
68
69
  context.set_details('Method not implemented!')
69
70
  raise NotImplementedError('Method not implemented!')
70
71
 
71
- def Heartbeat(self, request, context):
72
+ def SendNodeHeartbeat(self, request, context):
72
73
  """Missing associated documentation comment in .proto file."""
73
74
  context.set_code(grpc.StatusCode.UNIMPLEMENTED)
74
75
  context.set_details('Method not implemented!')
@@ -118,10 +119,10 @@ def add_FleetServicer_to_server(servicer, server):
118
119
  request_deserializer=flwr_dot_proto_dot_fleet__pb2.DeleteNodeRequest.FromString,
119
120
  response_serializer=flwr_dot_proto_dot_fleet__pb2.DeleteNodeResponse.SerializeToString,
120
121
  ),
121
- 'Heartbeat': grpc.unary_unary_rpc_method_handler(
122
- servicer.Heartbeat,
123
- request_deserializer=flwr_dot_proto_dot_fleet__pb2.HeartbeatRequest.FromString,
124
- response_serializer=flwr_dot_proto_dot_fleet__pb2.HeartbeatResponse.SerializeToString,
122
+ 'SendNodeHeartbeat': grpc.unary_unary_rpc_method_handler(
123
+ servicer.SendNodeHeartbeat,
124
+ request_deserializer=flwr_dot_proto_dot_heartbeat__pb2.SendNodeHeartbeatRequest.FromString,
125
+ response_serializer=flwr_dot_proto_dot_heartbeat__pb2.SendNodeHeartbeatResponse.SerializeToString,
125
126
  ),
126
127
  'PullMessages': grpc.unary_unary_rpc_method_handler(
127
128
  servicer.PullMessages,
@@ -188,7 +189,7 @@ class Fleet(object):
188
189
  insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
189
190
 
190
191
  @staticmethod
191
- def Heartbeat(request,
192
+ def SendNodeHeartbeat(request,
192
193
  target,
193
194
  options=(),
194
195
  channel_credentials=None,
@@ -198,9 +199,9 @@ class Fleet(object):
198
199
  wait_for_ready=None,
199
200
  timeout=None,
200
201
  metadata=None):
201
- return grpc.experimental.unary_unary(request, target, '/flwr.proto.Fleet/Heartbeat',
202
- flwr_dot_proto_dot_fleet__pb2.HeartbeatRequest.SerializeToString,
203
- flwr_dot_proto_dot_fleet__pb2.HeartbeatResponse.FromString,
202
+ return grpc.experimental.unary_unary(request, target, '/flwr.proto.Fleet/SendNodeHeartbeat',
203
+ flwr_dot_proto_dot_heartbeat__pb2.SendNodeHeartbeatRequest.SerializeToString,
204
+ flwr_dot_proto_dot_heartbeat__pb2.SendNodeHeartbeatResponse.FromString,
204
205
  options, channel_credentials,
205
206
  insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
206
207
 
@@ -5,6 +5,7 @@ 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
8
9
  import flwr.proto.run_pb2
9
10
  import grpc
10
11
 
@@ -18,9 +19,9 @@ class FleetStub:
18
19
  flwr.proto.fleet_pb2.DeleteNodeRequest,
19
20
  flwr.proto.fleet_pb2.DeleteNodeResponse]
20
21
 
21
- Heartbeat: grpc.UnaryUnaryMultiCallable[
22
- flwr.proto.fleet_pb2.HeartbeatRequest,
23
- flwr.proto.fleet_pb2.HeartbeatResponse]
22
+ SendNodeHeartbeat: grpc.UnaryUnaryMultiCallable[
23
+ flwr.proto.heartbeat_pb2.SendNodeHeartbeatRequest,
24
+ flwr.proto.heartbeat_pb2.SendNodeHeartbeatResponse]
24
25
 
25
26
  PullMessages: grpc.UnaryUnaryMultiCallable[
26
27
  flwr.proto.fleet_pb2.PullMessagesRequest,
@@ -62,10 +63,10 @@ class FleetServicer(metaclass=abc.ABCMeta):
62
63
  ) -> flwr.proto.fleet_pb2.DeleteNodeResponse: ...
63
64
 
64
65
  @abc.abstractmethod
65
- def Heartbeat(self,
66
- request: flwr.proto.fleet_pb2.HeartbeatRequest,
66
+ def SendNodeHeartbeat(self,
67
+ request: flwr.proto.heartbeat_pb2.SendNodeHeartbeatRequest,
67
68
  context: grpc.ServicerContext,
68
- ) -> flwr.proto.fleet_pb2.HeartbeatResponse: ...
69
+ ) -> flwr.proto.heartbeat_pb2.SendNodeHeartbeatResponse: ...
69
70
 
70
71
  @abc.abstractmethod
71
72
  def PullMessages(self,
@@ -0,0 +1,29 @@
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\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
+ # @@protoc_insertion_point(module_scope)
@@ -0,0 +1,40 @@
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
@@ -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
+ """
@@ -35,11 +35,11 @@ from flwr.proto.fab_pb2 import GetFabRequest # pylint: disable=E0611
35
35
  from flwr.proto.fleet_pb2 import ( # pylint: disable=E0611
36
36
  CreateNodeRequest,
37
37
  DeleteNodeRequest,
38
- HeartbeatRequest,
39
38
  PullMessagesRequest,
40
39
  PushMessagesRequest,
41
40
  )
42
41
  from flwr.proto.grpcadapter_pb2 import MessageContainer # pylint: disable=E0611
42
+ from flwr.proto.heartbeat_pb2 import SendNodeHeartbeatRequest # pylint: disable=E0611
43
43
  from flwr.proto.run_pb2 import GetRunRequest # pylint: disable=E0611
44
44
 
45
45
  from ..grpc_rere.fleet_servicer import FleetServicer
@@ -81,8 +81,10 @@ class GrpcAdapterServicer(grpcadapter_pb2_grpc.GrpcAdapterServicer, FleetService
81
81
  return _handle(request, context, CreateNodeRequest, self.CreateNode)
82
82
  if request.grpc_message_name == DeleteNodeRequest.__qualname__:
83
83
  return _handle(request, context, DeleteNodeRequest, self.DeleteNode)
84
- if request.grpc_message_name == HeartbeatRequest.__qualname__:
85
- return _handle(request, context, HeartbeatRequest, self.Heartbeat)
84
+ if request.grpc_message_name == SendNodeHeartbeatRequest.__qualname__:
85
+ return _handle(
86
+ request, context, SendNodeHeartbeatRequest, self.SendNodeHeartbeat
87
+ )
86
88
  if request.grpc_message_name == GetRunRequest.__qualname__:
87
89
  return _handle(request, context, GetRunRequest, self.GetRun)
88
90
  if request.grpc_message_name == GetFabRequest.__qualname__:
@@ -29,13 +29,15 @@ from flwr.proto.fleet_pb2 import ( # pylint: disable=E0611
29
29
  CreateNodeResponse,
30
30
  DeleteNodeRequest,
31
31
  DeleteNodeResponse,
32
- HeartbeatRequest,
33
- HeartbeatResponse,
34
32
  PullMessagesRequest,
35
33
  PullMessagesResponse,
36
34
  PushMessagesRequest,
37
35
  PushMessagesResponse,
38
36
  )
37
+ from flwr.proto.heartbeat_pb2 import ( # pylint: disable=E0611
38
+ SendNodeHeartbeatRequest,
39
+ SendNodeHeartbeatResponse,
40
+ )
39
41
  from flwr.proto.run_pb2 import GetRunRequest, GetRunResponse # pylint: disable=E0611
40
42
  from flwr.server.superlink.ffs.ffs_factory import FfsFactory
41
43
  from flwr.server.superlink.fleet.message_handler import message_handler
@@ -81,12 +83,12 @@ class FleetServicer(fleet_pb2_grpc.FleetServicer):
81
83
  state=self.state_factory.state(),
82
84
  )
83
85
 
84
- def Heartbeat(
85
- self, request: HeartbeatRequest, context: grpc.ServicerContext
86
- ) -> HeartbeatResponse:
86
+ def SendNodeHeartbeat(
87
+ self, request: SendNodeHeartbeatRequest, context: grpc.ServicerContext
88
+ ) -> SendNodeHeartbeatResponse:
87
89
  """."""
88
- log(DEBUG, "[Fleet.Heartbeat] Request: %s", MessageToDict(request))
89
- return message_handler.heartbeat(
90
+ log(DEBUG, "[Fleet.SendNodeHeartbeat] Request: %s", MessageToDict(request))
91
+ return message_handler.send_node_heartbeat(
90
92
  request=request,
91
93
  state=self.state_factory.state(),
92
94
  )
@@ -33,14 +33,16 @@ from flwr.proto.fleet_pb2 import ( # pylint: disable=E0611
33
33
  CreateNodeResponse,
34
34
  DeleteNodeRequest,
35
35
  DeleteNodeResponse,
36
- HeartbeatRequest,
37
- HeartbeatResponse,
38
36
  PullMessagesRequest,
39
37
  PullMessagesResponse,
40
38
  PushMessagesRequest,
41
39
  PushMessagesResponse,
42
40
  Reconnect,
43
41
  )
42
+ from flwr.proto.heartbeat_pb2 import ( # pylint: disable=E0611
43
+ SendNodeHeartbeatRequest,
44
+ SendNodeHeartbeatResponse,
45
+ )
44
46
  from flwr.proto.node_pb2 import Node # pylint: disable=E0611
45
47
  from flwr.proto.run_pb2 import ( # pylint: disable=E0611
46
48
  GetRunRequest,
@@ -73,13 +75,15 @@ def delete_node(request: DeleteNodeRequest, state: LinkState) -> DeleteNodeRespo
73
75
  return DeleteNodeResponse()
74
76
 
75
77
 
76
- def heartbeat(
77
- request: HeartbeatRequest, # pylint: disable=unused-argument
78
+ def send_node_heartbeat(
79
+ request: SendNodeHeartbeatRequest, # pylint: disable=unused-argument
78
80
  state: LinkState, # pylint: disable=unused-argument
79
- ) -> HeartbeatResponse:
81
+ ) -> SendNodeHeartbeatResponse:
80
82
  """."""
81
- res = state.acknowledge_heartbeat(request.node.node_id, request.heartbeat_interval)
82
- return HeartbeatResponse(success=res)
83
+ res = state.acknowledge_node_heartbeat(
84
+ request.node.node_id, request.heartbeat_interval
85
+ )
86
+ return SendNodeHeartbeatResponse(success=res)
83
87
 
84
88
 
85
89
  def pull_messages(
@@ -29,13 +29,15 @@ from flwr.proto.fleet_pb2 import ( # pylint: disable=E0611
29
29
  CreateNodeResponse,
30
30
  DeleteNodeRequest,
31
31
  DeleteNodeResponse,
32
- HeartbeatRequest,
33
- HeartbeatResponse,
34
32
  PullMessagesRequest,
35
33
  PullMessagesResponse,
36
34
  PushMessagesRequest,
37
35
  PushMessagesResponse,
38
36
  )
37
+ from flwr.proto.heartbeat_pb2 import ( # pylint: disable=E0611
38
+ SendNodeHeartbeatRequest,
39
+ SendNodeHeartbeatResponse,
40
+ )
39
41
  from flwr.proto.run_pb2 import GetRunRequest, GetRunResponse # pylint: disable=E0611
40
42
  from flwr.server.superlink.ffs.ffs import Ffs
41
43
  from flwr.server.superlink.ffs.ffs_factory import FfsFactory
@@ -126,14 +128,16 @@ async def push_message(request: PushMessagesRequest) -> PushMessagesResponse:
126
128
  return message_handler.push_messages(request=request, state=state)
127
129
 
128
130
 
129
- @rest_request_response(HeartbeatRequest)
130
- async def heartbeat(request: HeartbeatRequest) -> HeartbeatResponse:
131
- """Heartbeat."""
131
+ @rest_request_response(SendNodeHeartbeatRequest)
132
+ async def send_node_heartbeat(
133
+ request: SendNodeHeartbeatRequest,
134
+ ) -> SendNodeHeartbeatResponse:
135
+ """Send node heartbeat."""
132
136
  # Get state from app
133
137
  state: LinkState = cast(LinkStateFactory, app.state.STATE_FACTORY).state()
134
138
 
135
139
  # Handle message
136
- return message_handler.heartbeat(request=request, state=state)
140
+ return message_handler.send_node_heartbeat(request=request, state=state)
137
141
 
138
142
 
139
143
  @rest_request_response(GetRunRequest)
@@ -164,7 +168,7 @@ routes = [
164
168
  Route("/api/v0/fleet/delete-node", delete_node, methods=["POST"]),
165
169
  Route("/api/v0/fleet/pull-messages", pull_message, methods=["POST"]),
166
170
  Route("/api/v0/fleet/push-messages", push_message, methods=["POST"]),
167
- Route("/api/v0/fleet/heartbeat", heartbeat, methods=["POST"]),
171
+ Route("/api/v0/fleet/send-node-heartbeat", send_node_heartbeat, methods=["POST"]),
168
172
  Route("/api/v0/fleet/get-run", get_run, methods=["POST"]),
169
173
  Route("/api/v0/fleet/get-fab", get_fab, methods=["POST"]),
170
174
  ]
@@ -539,7 +539,9 @@ class InMemoryLinkState(LinkState): # pylint: disable=R0902,R0904
539
539
  return None
540
540
  return self.federation_options[run_id]
541
541
 
542
- def acknowledge_heartbeat(self, node_id: int, heartbeat_interval: float) -> bool:
542
+ def acknowledge_node_heartbeat(
543
+ self, node_id: int, heartbeat_interval: float
544
+ ) -> bool:
543
545
  """Acknowledge a heartbeat received from a node, serving as a heartbeat.
544
546
 
545
547
  A node is considered online as long as it sends heartbeats within
@@ -267,7 +267,9 @@ class LinkState(abc.ABC): # pylint: disable=R0904
267
267
  """Retrieve all currently stored `node_public_keys` as a set."""
268
268
 
269
269
  @abc.abstractmethod
270
- def acknowledge_heartbeat(self, node_id: int, heartbeat_interval: float) -> bool:
270
+ def acknowledge_node_heartbeat(
271
+ self, node_id: int, heartbeat_interval: float
272
+ ) -> bool:
271
273
  """Acknowledge a heartbeat received from a node.
272
274
 
273
275
  A node is considered online as long as it sends heartbeats within
@@ -926,7 +926,9 @@ class SqliteLinkState(LinkState): # pylint: disable=R0904
926
926
  row = rows[0]
927
927
  return configrecord_from_bytes(row["federation_options"])
928
928
 
929
- def acknowledge_heartbeat(self, node_id: int, heartbeat_interval: float) -> bool:
929
+ def acknowledge_node_heartbeat(
930
+ self, node_id: int, heartbeat_interval: float
931
+ ) -> bool:
930
932
  """Acknowledge a heartbeat received from a node, serving as a heartbeat.
931
933
 
932
934
  A node is considered online as long as it sends heartbeats within
@@ -1,8 +1,7 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.3
2
2
  Name: flwr-nightly
3
- Version: 1.19.0.dev20250501
3
+ Version: 1.19.0.dev20250507
4
4
  Summary: Flower: A Friendly Federated AI Framework
5
- Home-page: https://flower.ai
6
5
  License: Apache-2.0
7
6
  Keywords: Artificial Intelligence,Federated AI,Federated Analytics,Federated Evaluation,Federated Learning,Flower,Machine Learning
8
7
  Author: The Flower Authors
@@ -19,8 +18,8 @@ Classifier: Programming Language :: Python :: 3
19
18
  Classifier: Programming Language :: Python :: 3.10
20
19
  Classifier: Programming Language :: Python :: 3.11
21
20
  Classifier: Programming Language :: Python :: 3.12
22
- Classifier: Programming Language :: Python :: 3 :: Only
23
21
  Classifier: Programming Language :: Python :: 3.13
22
+ Classifier: Programming Language :: Python :: 3 :: Only
24
23
  Classifier: Programming Language :: Python :: 3.9
25
24
  Classifier: Programming Language :: Python :: Implementation :: CPython
26
25
  Classifier: Topic :: Scientific/Engineering
@@ -49,6 +48,7 @@ Requires-Dist: tomli-w (>=1.0.0,<2.0.0)
49
48
  Requires-Dist: typer (>=0.12.5,<0.13.0)
50
49
  Requires-Dist: uvicorn[standard] (>=0.34.0,<0.35.0) ; extra == "rest"
51
50
  Project-URL: Documentation, https://flower.ai
51
+ Project-URL: Homepage, https://flower.ai
52
52
  Project-URL: Repository, https://github.com/adap/flower
53
53
  Description-Content-Type: text/markdown
54
54
 
@@ -86,8 +86,8 @@ flwr/client/grpc_client/__init__.py,sha256=MDOckOODn-FJnkkFEfb2JO-2G97wrBr_TTqht
86
86
  flwr/client/grpc_client/connection.py,sha256=xAyvcTVr7bkwUfR5P3D_LKlZYiyySpt5sEwORA1h8Gc,9189
87
87
  flwr/client/grpc_rere_client/__init__.py,sha256=i7iS0Lt8B7q0E2L72e4F_YrKm6ClRKnd71PNA6PW2O0,752
88
88
  flwr/client/grpc_rere_client/client_interceptor.py,sha256=zFaVHw6AxeNO-7eCKKb-RxrPa7zbM5Z-2-1Efc4adQY,2451
89
- flwr/client/grpc_rere_client/connection.py,sha256=YUqq7RoRuJok2HKcwK1k28B5lFZAhLLyOZ0ByesfqfM,11847
90
- flwr/client/grpc_rere_client/grpc_adapter.py,sha256=s8kaM8uM4hdF1DLt8vniUH1FmygE2S-rdiolZOpHKHE,5631
89
+ flwr/client/grpc_rere_client/connection.py,sha256=Ukvvf0VGwYfcYIESpD49cw_TpvPke0dp7bGHbsnbmd0,12035
90
+ flwr/client/grpc_rere_client/grpc_adapter.py,sha256=iFmNZIlM6bpUe3yp35EcFMKBhy6S5zupd7Yi_NwlZ_4,5745
91
91
  flwr/client/message_handler/__init__.py,sha256=0lyljDVqre3WljiZbPcwCCf8GiIaSVI_yo_ylEyPwSE,719
92
92
  flwr/client/message_handler/message_handler.py,sha256=-vZKGg2gP81182LFXDmiZtajLlIfZjV6FyMS43qQVwU,6532
93
93
  flwr/client/mod/__init__.py,sha256=AtV4Y5UGuYqJdTg7bJ--KtfOZUYLGDPMy616LvtP5W4,1151
@@ -104,7 +104,7 @@ flwr/client/nodestate/nodestate.py,sha256=-LAjZOnS7VyHC05ll3b31cYDjwAt6l4WmYt7du
104
104
  flwr/client/nodestate/nodestate_factory.py,sha256=UYTDCcwK_baHUmkzkJDxL0UEqvtTfOMlQRrROMCd0Xo,1430
105
105
  flwr/client/numpy_client.py,sha256=Qq6ghsIAop2slKqAfgiI5NiHJ4LIxGmrik3Ror4_XVc,9581
106
106
  flwr/client/rest_client/__init__.py,sha256=MBiuK62hj439m9rtwSwI184Hth6Tt5GbmpNMyl3zkZY,735
107
- flwr/client/rest_client/connection.py,sha256=xDjs7y50adX-SL8AiAQvELQcVzmxSu5vYkLGL_s1Epo,12575
107
+ flwr/client/rest_client/connection.py,sha256=s8dfD7T6ZR3X-AGUr6hM437HkLiddyVuaBlKUViIFWY,12777
108
108
  flwr/client/run_info_store.py,sha256=MaJ3UQ-07hWtK67wnWu0zR29jrk0fsfgJX506dvEOfE,4042
109
109
  flwr/client/supernode/__init__.py,sha256=i3gFbV5ie_FGyRMpzOvqtZAi0Z0ChIEJ7I2Kr0ym0PM,793
110
110
  flwr/client/supernode/app.py,sha256=lURLjP8jiOWhlX3-uh-7t_l1o_JEUz_FmkuNY91xmUQ,8975
@@ -173,14 +173,18 @@ flwr/proto/fab_pb2.py,sha256=2Nu0WaWxDZ8TbutMtctjdcGM7OtXiyP4kmCgg5o7Jjw,1627
173
173
  flwr/proto/fab_pb2.pyi,sha256=AMXpiDK0fo3nZWjxsC2E4otSaVjyQbU7iiWKrsSZavs,2395
174
174
  flwr/proto/fab_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
175
175
  flwr/proto/fab_pb2_grpc.pyi,sha256=ff2TSiLVnG6IVQcTGzb2DIH3XRSoAvAo_RMcvbMFyc0,76
176
- flwr/proto/fleet_pb2.py,sha256=mjTDr6tFlP8TjSIH7nODmJ3P02gUBqdIsaE7ysjFc58,4872
177
- flwr/proto/fleet_pb2.pyi,sha256=Zy8XTn-vRAUIYMZmwfZQ9beotu01EQEUR1BROsmiExk,7980
178
- flwr/proto/fleet_pb2_grpc.py,sha256=hyjCT3Rm44ZJoYww1XXHjsgfA7mSGEYdesAdpy--OFY,12325
179
- flwr/proto/fleet_pb2_grpc.pyi,sha256=w-7uzmuUEoPHFX97exLi-gK9ddHIlsA3qoDPuIx4TOY,3270
176
+ flwr/proto/fleet_pb2.py,sha256=3URNlCJZcJm0bh-YeG-r9dTNgo9kc2JAn-zhsKr6l7U,4592
177
+ flwr/proto/fleet_pb2.pyi,sha256=ugXXUx2K6mbeWqOxBzoa2B1Uc2d2d03T2z8wS56vLD0,6777
178
+ flwr/proto/fleet_pb2_grpc.py,sha256=eJHJX3K33js5jQ0jYPHSWRkBFDX2dSEuqiXZSQ3YfoE,12527
179
+ flwr/proto/fleet_pb2_grpc.pyi,sha256=K-wyX8k7zs6isiEIzxFTNYAydekb9ptJHzzp-PuTeQ0,3366
180
180
  flwr/proto/grpcadapter_pb2.py,sha256=PJ8DtfeV29g_y4Z3aNZlSZocLqSxeLmTsYCdOZDYCiE,1843
181
181
  flwr/proto/grpcadapter_pb2.pyi,sha256=AR77gDsF6f8zqSIQp3877DUd7S8lP95lFak5Ir_WPkw,1716
182
182
  flwr/proto/grpcadapter_pb2_grpc.py,sha256=rRNuNES5nBugUZWfeA8oAy8dMHgzqU_PF1srTseo3b8,2634
183
183
  flwr/proto/grpcadapter_pb2_grpc.pyi,sha256=AgA9Qo_lnANb9SNuPzbZGAxupau-xcqYawZz6vqf-24,735
184
+ flwr/proto/heartbeat_pb2.py,sha256=gC2lGgio5Fn1U7fbb64JuQ1wM8cK7e2I05x9BtAuAuo,1482
185
+ flwr/proto/heartbeat_pb2.pyi,sha256=5VP-zdZUJRva-F4JydpDmMZ5VyE1CipR0l8Gk0Kj2cU,1534
186
+ flwr/proto/heartbeat_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
187
+ flwr/proto/heartbeat_pb2_grpc.pyi,sha256=ff2TSiLVnG6IVQcTGzb2DIH3XRSoAvAo_RMcvbMFyc0,76
184
188
  flwr/proto/log_pb2.py,sha256=iKaS3MVn1BS4xHu8uGPFCOi1KWtvVx-H9V4jCUIJghs,1393
185
189
  flwr/proto/log_pb2.pyi,sha256=ipuhgo40sAHTcRzCsGI1HwIstr5q0THPNk_cf62YyME,1448
186
190
  flwr/proto/log_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
@@ -268,29 +272,29 @@ flwr/server/superlink/ffs/ffs.py,sha256=6w7wy71i7tbuJwqEgdeCa49JejXMEof3jujURN_R
268
272
  flwr/server/superlink/ffs/ffs_factory.py,sha256=pK-g3LMelvWTV6N9Cd-j-_-FdcGbRFTKNsWaqmlBDSk,1490
269
273
  flwr/server/superlink/fleet/__init__.py,sha256=Uiwr33yfW_eL-pEfj80c_JUhIKRkCPsN1JSs2v4aglU,711
270
274
  flwr/server/superlink/fleet/grpc_adapter/__init__.py,sha256=fUu1V63YrzjxAOZnBJx99WjuD4Mro7dJIFH-1V4NLV8,742
271
- flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py,sha256=2hp617zisimdxm1KyMc5JapfMHGG_2X4lAacDFIbQcc,4180
275
+ flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py,sha256=78oXtJ1wsi2eNj_tk2rUbBxWi04PX_n9uz-2iIkG7mQ,4299
272
276
  flwr/server/superlink/fleet/grpc_bidi/__init__.py,sha256=dOM49q1b9MrtUr5jldjEnQ38NhcUyYs-zC3gsJb1TtI,735
273
277
  flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py,sha256=UKEp-3YBaTvNt7vKZW7KLgK5xsAiO7jxU-omG7CaO_s,6021
274
278
  flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py,sha256=KouR9PUcrPmMtoLooF4O9SRAwIvfiroo8mPmqUc2EZc,6485
275
279
  flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py,sha256=iSf0mbBAlig7G6subQwBSVjcUCgSihONKdZ1RmQPTOk,4887
276
280
  flwr/server/superlink/fleet/grpc_bidi/grpc_server.py,sha256=OsS-6GgCIzMMZDVu5Y-OKjynHVUrpdc_5OrtuB-IbU0,5174
277
281
  flwr/server/superlink/fleet/grpc_rere/__init__.py,sha256=ahDJJ1e-lDxBpeBMgPk7YZt2wB38_QltcpOC0gLbpFs,758
278
- flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py,sha256=IiFqOykZuGL4ASTJ96jHDO-WKEF5tzb5E85BCsMdg7M,5634
282
+ flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py,sha256=lwGYN_BZzth106HmWOS57MJEqDwa7mn5Kct7Vn-veOw,5758
279
283
  flwr/server/superlink/fleet/grpc_rere/server_interceptor.py,sha256=DrHubsaLgJCwCeeJPYogQTiP0xYqjxwnT9rh7OP7BoU,6984
280
284
  flwr/server/superlink/fleet/message_handler/__init__.py,sha256=fHsRV0KvJ8HtgSA4_YBsEzuhJLjO8p6xx4aCY2oE1p4,731
281
- flwr/server/superlink/fleet/message_handler/message_handler.py,sha256=rxhrjhsvpc8RVi_EZUHB0O47vbI5r6iTaJZYaBxCuuo,5292
285
+ flwr/server/superlink/fleet/message_handler/message_handler.py,sha256=56LC_cPa_pZT1715WTCN0d7MmvdRXlyO7g_hb9zdJrA,5427
282
286
  flwr/server/superlink/fleet/rest_rere/__init__.py,sha256=Lzc93nA7tDqoy-zRUaPG316oqFiZX1HUCL5ELaXY_xw,735
283
- flwr/server/superlink/fleet/rest_rere/rest_api.py,sha256=5I6tf9UCYJ92mIckcFvmX-h8Emvo-sN6hp-R82CPz2M,6760
287
+ flwr/server/superlink/fleet/rest_rere/rest_api.py,sha256=s6SNp_z-Uyr4tT4C5PqSbeJySfvsdK1SIczwwxrljO8,6923
284
288
  flwr/server/superlink/fleet/vce/__init__.py,sha256=XOKbAWOzlCqEOQ3M2cBYkH7HKA7PxlbCJMunt-ty-DY,784
285
289
  flwr/server/superlink/fleet/vce/backend/__init__.py,sha256=PPH89Yqd1XKm-sRJN6R0WQlKT_b4v54Kzl2yzHAFzM8,1437
286
290
  flwr/server/superlink/fleet/vce/backend/backend.py,sha256=-wDHjgAy5mrfEgXj0GxkJI7lhEbgSUyPwmNAf9ZcDzc,2193
287
291
  flwr/server/superlink/fleet/vce/backend/raybackend.py,sha256=Hx9hxL7lju1_VJoAwkhBOGerZ3628u0P1zgkPhGWRPY,7154
288
292
  flwr/server/superlink/fleet/vce/vce_api.py,sha256=m7WUiHRl-jTqzjH3cqNCj3RXe3ohT6V6I0JIR6zWZj8,12780
289
293
  flwr/server/superlink/linkstate/__init__.py,sha256=OtsgvDTnZLU3k0sUbkHbqoVwW6ql2FDmb6uT6DbNkZo,1064
290
- flwr/server/superlink/linkstate/in_memory_linkstate.py,sha256=wnjwVUyAZBaXY9PviGHWTa5kOvH9JiiJ3vnUEx6Z4Ss,22501
291
- flwr/server/superlink/linkstate/linkstate.py,sha256=6ANy92MaT0eA1ocrzEbblGNRuIqw6nIB4infGHGkDD8,12121
294
+ flwr/server/superlink/linkstate/in_memory_linkstate.py,sha256=vu36ntb9N1qeDWvt6YsnPfvVppZPJi04icAgolui9no,22520
295
+ flwr/server/superlink/linkstate/linkstate.py,sha256=zrVR9UpeuCfgqK5MDIqudcXtFjvsCRjD2ylv4UZu8MU,12140
292
296
  flwr/server/superlink/linkstate/linkstate_factory.py,sha256=8RlosqSpKOoD_vhUUQPY0jtE3A84GeF96Z7sWNkRRcA,2069
293
- flwr/server/superlink/linkstate/sqlite_linkstate.py,sha256=B42abgovs027Z3G9iI_HPEPP4zIjMKaTjvYVhbfhupc,39828
297
+ flwr/server/superlink/linkstate/sqlite_linkstate.py,sha256=c-6iopBJ3Y09Jh0qYka02tdIUF3Aq9X0nrBK5eAuwOk,39847
294
298
  flwr/server/superlink/linkstate/utils.py,sha256=AJs9jTAEK7JnjF2AODXnOfy0pKAKpe6oUWPCanAP57s,15382
295
299
  flwr/server/superlink/serverappio/__init__.py,sha256=Fy4zJuoccZe5mZSEIpOmQvU6YeXFBa1M4eZuXXmJcn8,717
296
300
  flwr/server/superlink/serverappio/serverappio_grpc.py,sha256=opJ6SYwIAbu4NWEo3K-VxFO-tMSFmE4H3i2HwHIVRzw,2173
@@ -327,7 +331,7 @@ flwr/superexec/exec_servicer.py,sha256=Z0YYfs6eNPhqn8rY0x_R04XgR2mKFpggt07IH0EhU
327
331
  flwr/superexec/exec_user_auth_interceptor.py,sha256=iqygALkOMBUu_s_R9G0mFThZA7HTUzuXCLgxLCefiwI,4440
328
332
  flwr/superexec/executor.py,sha256=M5ucqSE53jfRtuCNf59WFLqQvA1Mln4741TySeZE7qQ,3112
329
333
  flwr/superexec/simulation.py,sha256=j6YwUvBN7EQ09ID7MYOCVZ70PGbuyBy8f9bXU0EszEM,4088
330
- flwr_nightly-1.19.0.dev20250501.dist-info/METADATA,sha256=MLNel6ta1QkrzptLZZ1C8etYjVlf1n-sox_FgodEmHE,15868
331
- flwr_nightly-1.19.0.dev20250501.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
332
- flwr_nightly-1.19.0.dev20250501.dist-info/entry_points.txt,sha256=2-1L-GNKhwGw2_7_RoH55vHw2SIHjdAQy3HAVAWl9PY,374
333
- flwr_nightly-1.19.0.dev20250501.dist-info/RECORD,,
334
+ flwr_nightly-1.19.0.dev20250507.dist-info/METADATA,sha256=2VAe3nq067aoWQnhHrtXYi8m9uT7Q1RJOLgGNoBy-zs,15880
335
+ flwr_nightly-1.19.0.dev20250507.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
336
+ flwr_nightly-1.19.0.dev20250507.dist-info/entry_points.txt,sha256=2-1L-GNKhwGw2_7_RoH55vHw2SIHjdAQy3HAVAWl9PY,374
337
+ flwr_nightly-1.19.0.dev20250507.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: poetry-core 1.8.1
2
+ Generator: poetry-core 2.1.3
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any