flwr-nightly 1.20.0.dev20250712__py3-none-any.whl → 1.20.0.dev20250714__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.
@@ -22,9 +22,9 @@ import grpc
22
22
  from flwr.common.constant import Status, SubStatus
23
23
  from flwr.common.inflatable import iterate_object_tree
24
24
  from flwr.common.typing import RunStatus
25
+ from flwr.proto.appio_pb2 import PushAppMessagesRequest # pylint: disable=E0611
25
26
  from flwr.proto.fleet_pb2 import PushMessagesRequest # pylint: disable=E0611
26
27
  from flwr.proto.message_pb2 import ObjectIDs # pylint: disable=E0611
27
- from flwr.proto.serverappio_pb2 import PushInsMessagesRequest # pylint: disable=E0611
28
28
  from flwr.server.superlink.linkstate import LinkState
29
29
  from flwr.supercore.object_store import ObjectStore
30
30
 
@@ -77,7 +77,7 @@ def abort_if(
77
77
 
78
78
 
79
79
  def store_mapping_and_register_objects(
80
- store: ObjectStore, request: Union[PushInsMessagesRequest, PushMessagesRequest]
80
+ store: ObjectStore, request: Union[PushAppMessagesRequest, PushMessagesRequest]
81
81
  ) -> dict[str, ObjectIDs]:
82
82
  """Store Message object to descendants mapping and preregister objects."""
83
83
  if not request.messages_list:
@@ -50,8 +50,11 @@ from flwr.proto.clientappio_pb2 import (
50
50
  GetRunIdsWithPendingMessagesResponse,
51
51
  PullClientAppInputsRequest,
52
52
  PullClientAppInputsResponse,
53
+ PullMessageRequest,
54
+ PullMessageResponse,
53
55
  PushClientAppOutputsRequest,
54
56
  PushClientAppOutputsResponse,
57
+ PushMessageRequest,
55
58
  RequestTokenRequest,
56
59
  RequestTokenResponse,
57
60
  )
@@ -199,10 +202,14 @@ def pull_clientappinputs(
199
202
  masked_token = mask_string(token)
200
203
  log(INFO, "[flwr-clientapp] Pull `ClientAppInputs` for token %s", masked_token)
201
204
  try:
205
+ # Pull Message
206
+ res_msg: PullMessageResponse = stub.PullMessage(PullMessageRequest(token=token))
207
+ message = message_from_proto(res_msg.message)
208
+
209
+ # Pull Context, Run and (optional) FAB
202
210
  res: PullClientAppInputsResponse = stub.PullClientAppInputs(
203
211
  PullClientAppInputsRequest(token=token)
204
212
  )
205
- message = message_from_proto(res.message)
206
213
  context = context_from_proto(res.context)
207
214
  run = run_from_proto(res.run)
208
215
  fab = fab_from_proto(res.fab) if res.fab else None
@@ -224,10 +231,13 @@ def push_clientappoutputs(
224
231
  proto_context = context_to_proto(context)
225
232
 
226
233
  try:
234
+
235
+ # Push Message
236
+ _ = stub.PushMessage(PushMessageRequest(token=token, message=proto_message))
237
+
238
+ # Push Context
227
239
  res: PushClientAppOutputsResponse = stub.PushClientAppOutputs(
228
- PushClientAppOutputsRequest(
229
- token=token, message=proto_message, context=proto_context
230
- )
240
+ PushClientAppOutputsRequest(token=token, context=proto_context)
231
241
  )
232
242
  return res
233
243
  except grpc.RpcError as e:
@@ -39,8 +39,12 @@ from flwr.proto.clientappio_pb2 import ( # pylint: disable=E0401
39
39
  GetRunIdsWithPendingMessagesResponse,
40
40
  PullClientAppInputsRequest,
41
41
  PullClientAppInputsResponse,
42
+ PullMessageRequest,
43
+ PullMessageResponse,
42
44
  PushClientAppOutputsRequest,
43
45
  PushClientAppOutputsResponse,
46
+ PushMessageRequest,
47
+ PushMessageResponse,
44
48
  RequestTokenRequest,
45
49
  RequestTokenResponse,
46
50
  )
@@ -119,14 +123,12 @@ class ClientAppIoServicer(clientappio_pb2_grpc.ClientAppIoServicer):
119
123
  )
120
124
  raise RuntimeError("This line should never be reached.")
121
125
 
122
- # Retrieve message, context, run and fab for this run
123
- message = state.get_messages(run_ids=[run_id], is_reply=False)[0]
126
+ # Retrieve context, run and fab for this run
124
127
  context = cast(Context, state.get_context(run_id))
125
128
  run = cast(Run, state.get_run(run_id))
126
129
  fab = Fab(run.fab_hash, ffs.get(run.fab_hash)[0]) # type: ignore
127
130
 
128
131
  return PullClientAppInputsResponse(
129
- message=message_to_proto(message),
130
132
  context=context_to_proto(context),
131
133
  run=run_to_proto(run),
132
134
  fab=fab_to_proto(fab),
@@ -150,8 +152,7 @@ class ClientAppIoServicer(clientappio_pb2_grpc.ClientAppIoServicer):
150
152
  )
151
153
  raise RuntimeError("This line should never be reached.")
152
154
 
153
- # Save the message and context to the state
154
- state.store_message(message_from_proto(request.message))
155
+ # Save the context to the state
155
156
  state.store_context(context_from_proto(request.context))
156
157
 
157
158
  # Remove the token to make the run eligible for processing
@@ -159,3 +160,45 @@ class ClientAppIoServicer(clientappio_pb2_grpc.ClientAppIoServicer):
159
160
  state.delete_token(run_id)
160
161
 
161
162
  return PushClientAppOutputsResponse()
163
+
164
+ def PullMessage(
165
+ self, request: PullMessageRequest, context: grpc.ServicerContext
166
+ ) -> PullMessageResponse:
167
+ """Pull one Message."""
168
+ # Initialize state and ffs connection
169
+ state = self.state_factory.state()
170
+
171
+ # Validate the token
172
+ run_id = state.get_run_id_by_token(request.token)
173
+ if run_id is None or not state.verify_token(run_id, request.token):
174
+ context.abort(
175
+ grpc.StatusCode.PERMISSION_DENIED,
176
+ "Invalid token.",
177
+ )
178
+ raise RuntimeError("This line should never be reached.")
179
+
180
+ # Retrieve message, context, run and fab for this run
181
+ message = state.get_messages(run_ids=[run_id], is_reply=False)[0]
182
+
183
+ return PullMessageResponse(message=message_to_proto(message))
184
+
185
+ def PushMessage(
186
+ self, request: PushMessageRequest, context: grpc.ServicerContext
187
+ ) -> PushMessageResponse:
188
+ """Push one Message."""
189
+ # Initialize state connection
190
+ state = self.state_factory.state()
191
+
192
+ # Validate the token
193
+ run_id = state.get_run_id_by_token(request.token)
194
+ if run_id is None or not state.verify_token(run_id, request.token):
195
+ context.abort(
196
+ grpc.StatusCode.PERMISSION_DENIED,
197
+ "Invalid token.",
198
+ )
199
+ raise RuntimeError("This line should never be reached.")
200
+
201
+ # Save the message and context to the state
202
+ state.store_message(message_from_proto(request.message))
203
+
204
+ return PushMessageResponse()
@@ -47,6 +47,11 @@ from flwr.common.constant import (
47
47
  from flwr.common.exit import ExitCode, flwr_exit
48
48
  from flwr.common.exit_handlers import register_exit_handlers
49
49
  from flwr.common.grpc import generic_create_grpc_server
50
+ from flwr.common.inflatable import (
51
+ get_all_nested_objects,
52
+ get_object_tree,
53
+ no_object_id_recompute,
54
+ )
50
55
  from flwr.common.logger import log
51
56
  from flwr.common.retry_invoker import RetryInvoker, RetryState, exponential
52
57
  from flwr.common.telemetry import EventType
@@ -289,7 +294,16 @@ def _pull_and_store_message( # pylint: disable=too-many-positional-arguments
289
294
  state.store_context(run_ctx)
290
295
 
291
296
  # Store the message in the state
297
+ # This shall be removed after the transition to ObjectStore
292
298
  state.store_message(message)
299
+
300
+ # Store the message in ObjectStore
301
+ # This is a temporary solution to store messages in ObjectStore
302
+ with no_object_id_recompute():
303
+ object_store.preregister(run_id, get_object_tree(message))
304
+ for obj_id, obj in get_all_nested_objects(message).items():
305
+ object_store.put(obj_id, obj.deflate())
306
+
293
307
  except RunNotRunningException:
294
308
  if message is None:
295
309
  log(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: flwr-nightly
3
- Version: 1.20.0.dev20250712
3
+ Version: 1.20.0.dev20250714
4
4
  Summary: Flower: A Friendly Federated AI Framework
5
5
  License: Apache-2.0
6
6
  Keywords: Artificial Intelligence,Federated AI,Federated Analytics,Federated Evaluation,Federated Learning,Flower,Machine Learning
@@ -125,7 +125,7 @@ flwr/common/heartbeat.py,sha256=SyEpNDnmJ0lni0cWO67rcoJVKasCLmkNHm3dKLeNrLU,5749
125
125
  flwr/common/inflatable.py,sha256=GDL9oBKs16_yyVdlH6kBf493O5xll_h9V7XB5Mpx1Hc,9524
126
126
  flwr/common/inflatable_grpc_utils.py,sha256=ZpwtgF1tGD6NwQkCidbhbeBPDBZ1Nx9eGMHQ04eNEE8,3554
127
127
  flwr/common/inflatable_rest_utils.py,sha256=KiZd06XRiXcl_WewOrag0JTvUQt5kZ74UIsQ3FCAXGc,3580
128
- flwr/common/inflatable_utils.py,sha256=XfgkPl8GKuR7tuOpYVZ3zK4n-LbgMZtwoNxMfUbpiCE,12489
128
+ flwr/common/inflatable_utils.py,sha256=yew5VU8po8yZsmoTVxg-tB5vrvnb2mvBAE55qjiOAq8,12840
129
129
  flwr/common/logger.py,sha256=JbRf6E2vQxXzpDBq1T8IDUJo_usu3gjWEBPQ6uKcmdg,13049
130
130
  flwr/common/message.py,sha256=xAL7iZN5-n-xPQpgoSFvxNrzs8fmiiPfoU0DjNQEhRw,19953
131
131
  flwr/common/object_ref.py,sha256=p3SfTeqo3Aj16SkB-vsnNn01zswOPdGNBitcbRnqmUk,9134
@@ -165,10 +165,14 @@ flwr/compat/server/__init__.py,sha256=TGVSoOTuf5T5JHUVrK5wuorQF7L6Wvdem8B4uufvMJ
165
165
  flwr/compat/server/app.py,sha256=_lIe7Q4KUk-olq9PYBxIsO3UaOn6N92CWgWQ4hRcAZw,6490
166
166
  flwr/compat/simulation/__init__.py,sha256=MApGa-tysDDw34iSdxZ7TWOKtGJM-z3i8fIRJa0qbZ8,750
167
167
  flwr/proto/__init__.py,sha256=S3VbQzVwNC1P-3_9EdrXuwgptO-BVuuAe20Z_OUc1cQ,683
168
- flwr/proto/clientappio_pb2.py,sha256=jkTJnHtHOylYTV0pxfFAaA0CtIPGrwGCcVgCg6i0LhU,4337
169
- flwr/proto/clientappio_pb2.pyi,sha256=qrH9KeJ8YXRa9iQYlKV8-kwXrmxGr6AJp5f7Yx88CEg,6843
170
- flwr/proto/clientappio_pb2_grpc.py,sha256=vstXed6-uSOqM0qbaZBwYIgHHs7GH6oKqOq0TniboOk,8035
171
- flwr/proto/clientappio_pb2_grpc.pyi,sha256=828mbHoq0SxZ3NRmGqiZmpb4KtLPi71piQBMF_2EZxk,2399
168
+ flwr/proto/appio_pb2.py,sha256=rAewGZ8FiIaB-BPdOZHL3lzytzPWmJ-mB6-S8gfcq84,4213
169
+ flwr/proto/appio_pb2.pyi,sha256=Ab8L81Ooyd5OzogmNsEaNRaIhyTd8ZJ9veqwwvxK9Io,7889
170
+ flwr/proto/appio_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
171
+ flwr/proto/appio_pb2_grpc.pyi,sha256=ff2TSiLVnG6IVQcTGzb2DIH3XRSoAvAo_RMcvbMFyc0,76
172
+ flwr/proto/clientappio_pb2.py,sha256=mgxqxwY6Uy7G4XFQPZbHWWScFThFs97HF-RIYCjfZTg,5166
173
+ flwr/proto/clientappio_pb2.pyi,sha256=MNDZpPjLStQp-VGdp91Pe2SmEQAvu96HJz1IWVQOb38,8344
174
+ flwr/proto/clientappio_pb2_grpc.py,sha256=bhUGniS48FKipJYRmbMWCv_kXjt82ca1zqLWepy3rso,11317
175
+ flwr/proto/clientappio_pb2_grpc.pyi,sha256=GoHd2vOw4mDLTMxHJ-osQ6oIRzQZNgXMFOZknghyzsk,3265
172
176
  flwr/proto/error_pb2.py,sha256=PQVWrfjVPo88ql_KgV9nCxyQNCcV9PVfmcw7sOzTMro,1084
173
177
  flwr/proto/error_pb2.pyi,sha256=ZNH4HhJTU_KfMXlyCeg8FwU-fcUYxTqEmoJPtWtHikc,734
174
178
  flwr/proto/error_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
@@ -213,10 +217,10 @@ flwr/proto/run_pb2.py,sha256=76pAp3ugvpsUyx34ehvMTe-o-J2pTTvb1OskDmsAcag,4768
213
217
  flwr/proto/run_pb2.pyi,sha256=7hWfS3DzrrrKn5ZXRYL1x1rz9u1ZZd68Sz5kinRBDCk,9542
214
218
  flwr/proto/run_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
215
219
  flwr/proto/run_pb2_grpc.pyi,sha256=ff2TSiLVnG6IVQcTGzb2DIH3XRSoAvAo_RMcvbMFyc0,76
216
- flwr/proto/serverappio_pb2.py,sha256=ugZZ0zZulDKuL7BZbAMptyMAozmJv888tee0ZrteOB0,6608
217
- flwr/proto/serverappio_pb2.pyi,sha256=YxIhMPaF9fhBCR6P0AX3t5yM03B15HuwudDPHktMwTk,8914
218
- flwr/proto/serverappio_pb2_grpc.py,sha256=kUPYPzA8ozjkTp-KVTeTWB_viTj-OJiX-lErH7b5kVc,24374
219
- flwr/proto/serverappio_pb2_grpc.pyi,sha256=xecgtw0jIrNHMeJkG_cjuIglFM9NFRv1XPLEX7GIdck,6711
220
+ flwr/proto/serverappio_pb2.py,sha256=CeVRUlT3jn4xVaTVi2U9L5H7r7uc_U4DYZOZNxT5kI4,3575
221
+ flwr/proto/serverappio_pb2.pyi,sha256=MDY9CEUnev_oi7Y-gZIXx8divcc0BufLAE2d7nmbo_Y,1319
222
+ flwr/proto/serverappio_pb2_grpc.py,sha256=Y4uz8M2JT5pg6ADobq5hDQyYFjFplRV53J2z8pdRqVk,24140
223
+ flwr/proto/serverappio_pb2_grpc.pyi,sha256=8pFqwGZjBUzyg1hTY7LCbLiYmGL7hlffeS0jyCi7L20,6571
220
224
  flwr/proto/simulationio_pb2.py,sha256=sAJX72z-IttVGxyU3PFnG8AFuA-pV7itvBoxz-hOudE,3342
221
225
  flwr/proto/simulationio_pb2.pyi,sha256=oXx8_FLBe5B54wduZj-f89kub73XxNtQbThuW8YfPAs,2660
222
226
  flwr/proto/simulationio_pb2_grpc.py,sha256=HuGbhOwV_A5GTbvmd5XTm6lSm9fWUgKcxq9OKhgmBT0,12999
@@ -239,7 +243,7 @@ flwr/server/criterion.py,sha256=G4e-6B48Pc7d5rmGVUpIzNKb6UF88O3VmTRuUltgjzM,1061
239
243
  flwr/server/fleet_event_log_interceptor.py,sha256=ifV4gUB_hSg7QPLIrAyDpjciqZBOKb0L0abZno3GTwA,3780
240
244
  flwr/server/grid/__init__.py,sha256=aWZHezoR2UGMJISB_gPMCm2N_2GSbm97A3lAp7ruhRQ,888
241
245
  flwr/server/grid/grid.py,sha256=naGCYt5J6dnmUvrcGkdNyKPe3MBd-0awGm1ALmgahqY,6625
242
- flwr/server/grid/grpc_grid.py,sha256=F1AtbNxhHZL0-Rlwvynm7eUzOm8J55ENZ2-YQ21lAg4,13519
246
+ flwr/server/grid/grpc_grid.py,sha256=-SLS1VifRo1uxgjRWQJSshkTm5t0s8Wrj2ZZcbSu86I,13581
243
247
  flwr/server/grid/inmemory_grid.py,sha256=RjejYT-d-hHuTs1KSs_5wvOdAWKLus8w5_UAcnGt4iw,6168
244
248
  flwr/server/history.py,sha256=cCkFhBN4GoHsYYNk5GG1Y089eKJh2DH_ZJbYPwLaGyk,5026
245
249
  flwr/server/run_serverapp.py,sha256=v0p6jXj2dFxlRUdoEeF1mnaFd9XRQi6dZCflPY6d3qI,2063
@@ -247,7 +251,7 @@ flwr/server/server.py,sha256=39m4FSN2T-uVA-no9nstN0eWW0co-IUUAIMmpd3V7Jc,17893
247
251
  flwr/server/server_app.py,sha256=8uagoZX-3CY3tazPqkIV9jY-cN0YrRRrDmVe23o0AV0,9515
248
252
  flwr/server/server_config.py,sha256=e_6ddh0riwOJsdNn2BFev344uMWfDk9n7dyjNpPgm1w,1349
249
253
  flwr/server/serverapp/__init__.py,sha256=xcC0T_MQSMS9cicUzUUpMNCOsF2d8Oh_8jvnoBLuZvo,800
250
- flwr/server/serverapp/app.py,sha256=CQZy_oyDHBQFokkBnwaYvo0X_YFKKYekwTxiGZPtD1w,9491
254
+ flwr/server/serverapp/app.py,sha256=GetSKAsDlNlJFazregZ_Vu63SIIL9KrZXEvSjND7qA0,9407
251
255
  flwr/server/serverapp_components.py,sha256=dfSqmrsVy3arKXpl3ZIBQWdV8rehfIms8aJooyzdmEM,2118
252
256
  flwr/server/strategy/__init__.py,sha256=HhsSWMWaC7oCb2g7Kqn1MBKdrfvgi8VxACy9ZL706Q0,2836
253
257
  flwr/server/strategy/aggregate.py,sha256=smlKKy-uFUuuFR12vlclucnwSQWRz78R79-Km4RWqbw,13978
@@ -302,11 +306,11 @@ flwr/server/superlink/linkstate/sqlite_linkstate.py,sha256=E699Ak0jMF3N7i1SIeFRu
302
306
  flwr/server/superlink/linkstate/utils.py,sha256=IeLh7iGRCHU5MEWOl7iriaSE4L__8GWOa2OleXadK5M,15444
303
307
  flwr/server/superlink/serverappio/__init__.py,sha256=Fy4zJuoccZe5mZSEIpOmQvU6YeXFBa1M4eZuXXmJcn8,717
304
308
  flwr/server/superlink/serverappio/serverappio_grpc.py,sha256=zcvzDhCAnlFxAwCiJUHNm6IE7-rk5jeZqSmPgjEY3AU,2307
305
- flwr/server/superlink/serverappio/serverappio_servicer.py,sha256=J-c3aRIpSD8Kt0-yWwAecejuNP6YKfW2KTtk21SbFvs,18763
309
+ flwr/server/superlink/serverappio/serverappio_servicer.py,sha256=BBDxoYj1BlNtT7wOr9TUGJUHP6MS5dMKqcBsW4Uji00,18735
306
310
  flwr/server/superlink/simulation/__init__.py,sha256=Ry8DrNaZCMcQXvUc4FoCN2m3dvUQgWjasfp015o3Ec4,718
307
311
  flwr/server/superlink/simulation/simulationio_grpc.py,sha256=VqWKxjpd4bCgPFKsgtIZPk9YcG0kc1EEmr5k20EKty4,2205
308
312
  flwr/server/superlink/simulation/simulationio_servicer.py,sha256=m1T1zvEn81jlfx9hVTqmeWxAu6APCS2YW8l5O0OQvhU,7724
309
- flwr/server/superlink/utils.py,sha256=SHx612HNv704oRqii3Q1SPtbRdn0AQQi1z-Rqg9moLk,3898
313
+ flwr/server/superlink/utils.py,sha256=kN7Wg7bK0wwK6B3JSXNCrUCVt8LTogKf3lKXAFREZSM,3892
310
314
  flwr/server/typing.py,sha256=LvO6gq7H6TAWhA9JFx0WyqHxU7FycyvhSsLjBLPgpts,1011
311
315
  flwr/server/utils/__init__.py,sha256=U4gM84-uUFddarODDQkO6SjNUuGhFcsHJZMjSEbezkU,884
312
316
  flwr/server/utils/tensorboard.py,sha256=3z3MeF0cu_U6ghNgRd0UQ5bunyDQKxCLpIpEdGMoCJ0,5466
@@ -359,12 +363,12 @@ flwr/supernode/nodestate/in_memory_nodestate.py,sha256=LF3AbaW0bcZHY5yKWwUJSU2RZ
359
363
  flwr/supernode/nodestate/nodestate.py,sha256=kkGFxYnLIwT4-UmlPnf6HvAUpPey2urUNrweGybAIY4,6398
360
364
  flwr/supernode/nodestate/nodestate_factory.py,sha256=UYTDCcwK_baHUmkzkJDxL0UEqvtTfOMlQRrROMCd0Xo,1430
361
365
  flwr/supernode/runtime/__init__.py,sha256=JQdqd2EMTn-ORMeTvewYYh52ls0YKP68jrps1qioxu4,718
362
- flwr/supernode/runtime/run_clientapp.py,sha256=wDOs0SbTQJxcm4z63qK4mHomKXjyW-VMsUjD-mXD5X4,8248
366
+ flwr/supernode/runtime/run_clientapp.py,sha256=jOACPK1YEwtuJas9cpILcxgPuM756Yzk1cCa04-v78M,8565
363
367
  flwr/supernode/servicer/__init__.py,sha256=lucTzre5WPK7G1YLCfaqg3rbFWdNSb7ZTt-ca8gxdEo,717
364
368
  flwr/supernode/servicer/clientappio/__init__.py,sha256=7Oy62Y_oijqF7Dxi6tpcUQyOpLc_QpIRZ83NvwmB0Yg,813
365
- flwr/supernode/servicer/clientappio/clientappio_servicer.py,sha256=d3GdIabycUoDBDL_eVlt513knGSjQW3-9lG6Cw4QEk4,5719
366
- flwr/supernode/start_client_internal.py,sha256=DAXuReZ1FCXt9Y1KbM0p-dI50ROWPEJXzfKrl14OE6k,18233
367
- flwr_nightly-1.20.0.dev20250712.dist-info/METADATA,sha256=bdE0QymAvbw5nIb2g_cpsIl2tMI48rbWdLtgC3H52Rc,15910
368
- flwr_nightly-1.20.0.dev20250712.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
369
- flwr_nightly-1.20.0.dev20250712.dist-info/entry_points.txt,sha256=jNpDXGBGgs21RqUxelF_jwGaxtqFwm-MQyfz-ZqSjrA,367
370
- flwr_nightly-1.20.0.dev20250712.dist-info/RECORD,,
369
+ flwr/supernode/servicer/clientappio/clientappio_servicer.py,sha256=U-uAJ7Yd_BzEqhbpCSgEG9pxX5Zf4RuPVYKimYDvMbU,7176
370
+ flwr/supernode/start_client_internal.py,sha256=_ZqSfL_j4qn6Cg-P6sv3k_n1ZG62J_teokBxnWrXrPE,18772
371
+ flwr_nightly-1.20.0.dev20250714.dist-info/METADATA,sha256=-5TYbMnUQ41aFZf_OizdSM0Rzf84wudcSfT9qkfpTEo,15910
372
+ flwr_nightly-1.20.0.dev20250714.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
373
+ flwr_nightly-1.20.0.dev20250714.dist-info/entry_points.txt,sha256=jNpDXGBGgs21RqUxelF_jwGaxtqFwm-MQyfz-ZqSjrA,367
374
+ flwr_nightly-1.20.0.dev20250714.dist-info/RECORD,,