flwr-nightly 1.21.0.dev20250815__py3-none-any.whl → 1.21.0.dev20250817__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.
flwr/common/args.py CHANGED
@@ -60,6 +60,11 @@ def add_args_flwr_app_common(parser: argparse.ArgumentParser) -> None:
60
60
  help="The PID of the parent process. When set, the process will terminate "
61
61
  "when the parent process exits.",
62
62
  )
63
+ parser.add_argument(
64
+ "--run-once",
65
+ action="store_true",
66
+ help="This flag is deprecated and will be removed in a future release.",
67
+ )
63
68
 
64
69
 
65
70
  def try_obtain_root_certificates(
@@ -34,6 +34,7 @@ from flwr.common.config import (
34
34
  )
35
35
  from flwr.common.constant import (
36
36
  SERVERAPPIO_API_DEFAULT_CLIENT_ADDRESS,
37
+ ExecPluginType,
37
38
  Status,
38
39
  SubStatus,
39
40
  )
@@ -61,9 +62,12 @@ from flwr.proto.appio_pb2 import ( # pylint: disable=E0611
61
62
  PushAppOutputsRequest,
62
63
  )
63
64
  from flwr.proto.run_pb2 import UpdateRunStatusRequest # pylint: disable=E0611
65
+ from flwr.proto.serverappio_pb2_grpc import ServerAppIoStub
64
66
  from flwr.server.grid.grpc_grid import GrpcGrid
65
67
  from flwr.server.run_serverapp import run as run_
66
68
  from flwr.supercore.app_utils import simple_get_token, start_parent_process_monitor
69
+ from flwr.supercore.superexec.plugin import ServerAppExecPlugin
70
+ from flwr.supercore.superexec.run_superexec import run_with_deprecation_warning
67
71
 
68
72
 
69
73
  def flwr_serverapp() -> None:
@@ -74,14 +78,27 @@ def flwr_serverapp() -> None:
74
78
 
75
79
  args = _parse_args_run_flwr_serverapp().parse_args()
76
80
 
77
- log(INFO, "Start `flwr-serverapp` process")
78
-
79
81
  if not args.insecure:
80
82
  flwr_exit(
81
83
  ExitCode.COMMON_TLS_NOT_SUPPORTED,
82
84
  "`flwr-serverapp` does not support TLS yet.",
83
85
  )
84
86
 
87
+ # Disallow long-running `flwr-serverapp` processes
88
+ if args.token is None:
89
+ run_with_deprecation_warning(
90
+ cmd="flwr-serverapp",
91
+ plugin_type=ExecPluginType.SERVER_APP,
92
+ plugin_class=ServerAppExecPlugin,
93
+ stub_class=ServerAppIoStub,
94
+ appio_api_address=args.serverappio_api_address,
95
+ flwr_dir=args.flwr_dir,
96
+ parent_pid=args.parent_pid,
97
+ warn_run_once=args.run_once,
98
+ )
99
+ return
100
+
101
+ log(INFO, "Start `flwr-serverapp` process")
85
102
  log(
86
103
  DEBUG,
87
104
  "`flwr-serverapp` will attempt to connect to SuperLink's "
@@ -287,11 +304,5 @@ def _parse_args_run_flwr_serverapp() -> argparse.ArgumentParser:
287
304
  help="Address of SuperLink's ServerAppIo API (IPv4, IPv6, or a domain name)."
288
305
  f"By default, it is set to {SERVERAPPIO_API_DEFAULT_CLIENT_ADDRESS}.",
289
306
  )
290
- parser.add_argument(
291
- "--run-once",
292
- action="store_true",
293
- help="When set, this process will start a single ServerApp for a pending Run. "
294
- "If there is no pending Run, the process will exit.",
295
- )
296
307
  add_args_flwr_app_common(parser=parser)
297
308
  return parser
flwr/simulation/app.py CHANGED
@@ -35,6 +35,7 @@ from flwr.common.config import (
35
35
  )
36
36
  from flwr.common.constant import (
37
37
  SIMULATIONIO_API_DEFAULT_CLIENT_ADDRESS,
38
+ ExecPluginType,
38
39
  Status,
39
40
  SubStatus,
40
41
  )
@@ -66,10 +67,13 @@ from flwr.proto.run_pb2 import ( # pylint: disable=E0611
66
67
  GetFederationOptionsResponse,
67
68
  UpdateRunStatusRequest,
68
69
  )
70
+ from flwr.proto.simulationio_pb2_grpc import SimulationIoStub
69
71
  from flwr.server.superlink.fleet.vce.backend.backend import BackendConfig
70
72
  from flwr.simulation.run_simulation import _run_simulation
71
73
  from flwr.simulation.simulationio_connection import SimulationIoConnection
72
74
  from flwr.supercore.app_utils import simple_get_token, start_parent_process_monitor
75
+ from flwr.supercore.superexec.plugin import SimulationExecPlugin
76
+ from flwr.supercore.superexec.run_superexec import run_with_deprecation_warning
73
77
 
74
78
 
75
79
  def flwr_simulation() -> None:
@@ -80,14 +84,27 @@ def flwr_simulation() -> None:
80
84
 
81
85
  args = _parse_args_run_flwr_simulation().parse_args()
82
86
 
83
- log(INFO, "Starting Flower Simulation")
84
-
85
87
  if not args.insecure:
86
88
  flwr_exit(
87
89
  ExitCode.COMMON_TLS_NOT_SUPPORTED,
88
- "`flwr-simulation` does not support TLS yet. ",
90
+ "`flwr-simulation` does not support TLS yet.",
91
+ )
92
+
93
+ # Disallow long-running `flwr-simulation` processes
94
+ if args.token is None:
95
+ run_with_deprecation_warning(
96
+ cmd="flwr-simulation",
97
+ plugin_type=ExecPluginType.SIMULATION,
98
+ plugin_class=SimulationExecPlugin,
99
+ stub_class=SimulationIoStub,
100
+ appio_api_address=args.simulationio_api_address,
101
+ flwr_dir=args.flwr_dir,
102
+ parent_pid=args.parent_pid,
103
+ warn_run_once=args.run_once,
89
104
  )
105
+ return
90
106
 
107
+ log(INFO, "Starting Flower Simulation")
91
108
  log(
92
109
  DEBUG,
93
110
  "Starting isolated `Simulation` connected to SuperLink SimulationAppIo API "
@@ -309,11 +326,5 @@ def _parse_args_run_flwr_simulation() -> argparse.ArgumentParser:
309
326
  help="Address of SuperLink's SimulationIO API (IPv4, IPv6, or a domain name)."
310
327
  f"By default, it is set to {SIMULATIONIO_API_DEFAULT_CLIENT_ADDRESS}.",
311
328
  )
312
- parser.add_argument(
313
- "--run-once",
314
- action="store_true",
315
- help="When set, this process will start a single simulation "
316
- "for a pending Run. If no pending run the process will exit. ",
317
- )
318
329
  add_args_flwr_app_common(parser=parser)
319
330
  return parser
@@ -16,11 +16,13 @@
16
16
 
17
17
 
18
18
  import time
19
- from typing import Optional
19
+ from logging import WARN
20
+ from typing import Optional, Union
20
21
 
21
22
  from flwr.common.config import get_flwr_dir
22
23
  from flwr.common.exit_handlers import register_exit_handlers
23
24
  from flwr.common.grpc import create_channel, on_channel_state_change
25
+ from flwr.common.logger import log
24
26
  from flwr.common.retry_invoker import _make_simple_grpc_retry_invoker, _wrap_stub
25
27
  from flwr.common.serde import run_from_proto
26
28
  from flwr.common.telemetry import EventType
@@ -31,6 +33,8 @@ from flwr.proto.appio_pb2 import ( # pylint: disable=E0611
31
33
  )
32
34
  from flwr.proto.clientappio_pb2_grpc import ClientAppIoStub
33
35
  from flwr.proto.run_pb2 import GetRunRequest # pylint: disable=E0611
36
+ from flwr.proto.serverappio_pb2_grpc import ServerAppIoStub
37
+ from flwr.proto.simulationio_pb2_grpc import SimulationIoStub
34
38
  from flwr.supercore.app_utils import start_parent_process_monitor
35
39
 
36
40
  from .plugin import ExecPlugin
@@ -38,7 +42,9 @@ from .plugin import ExecPlugin
38
42
 
39
43
  def run_superexec(
40
44
  plugin_class: type[ExecPlugin],
41
- stub_class: type[ClientAppIoStub],
45
+ stub_class: Union[
46
+ type[ClientAppIoStub], type[ServerAppIoStub], type[SimulationIoStub]
47
+ ],
42
48
  appio_api_address: str,
43
49
  flwr_dir: Optional[str] = None,
44
50
  parent_pid: Optional[int] = None,
@@ -120,3 +126,48 @@ def run_superexec(
120
126
  time.sleep(1)
121
127
  finally:
122
128
  channel.close()
129
+
130
+
131
+ def run_with_deprecation_warning( # pylint: disable=R0913, R0917
132
+ cmd: str,
133
+ plugin_type: str,
134
+ plugin_class: type[ExecPlugin],
135
+ stub_class: Union[
136
+ type[ClientAppIoStub], type[ServerAppIoStub], type[SimulationIoStub]
137
+ ],
138
+ appio_api_address: str,
139
+ flwr_dir: Optional[str],
140
+ parent_pid: Optional[int],
141
+ warn_run_once: bool,
142
+ ) -> None:
143
+ """Log a deprecation warning and run the equivalent `flower-superexec` command.
144
+
145
+ Used for legacy long-running `flwr-*` commands (i.e., without `--token`) that will
146
+ be removed in favor of `flower-superexec`.
147
+ """
148
+ log(
149
+ WARN,
150
+ "Directly executing `%s` is DEPRECATED and will be prohibited "
151
+ "in a future release. Please use `flower-superexec` instead.",
152
+ cmd,
153
+ )
154
+ log(WARN, "For now, the following command is being run automatically:")
155
+ new_cmd = f"flower-superexec --insecure --plugin-type {plugin_type} "
156
+ new_cmd += f"--appio-api-address {appio_api_address} "
157
+ if flwr_dir is not None:
158
+ new_cmd += f"--flwr-dir {flwr_dir} "
159
+ if parent_pid is not None:
160
+ new_cmd += f"--parent-pid {parent_pid}"
161
+ log(WARN, new_cmd)
162
+
163
+ # Warn about unsupported `--run-once` flag
164
+ if warn_run_once:
165
+ log(WARN, "`flower-superexec` does not support the `--run-once` flag.")
166
+
167
+ run_superexec(
168
+ plugin_class=plugin_class,
169
+ stub_class=stub_class,
170
+ appio_api_address=appio_api_address,
171
+ flwr_dir=flwr_dir,
172
+ parent_pid=parent_pid,
173
+ )
@@ -19,9 +19,12 @@ import argparse
19
19
  from logging import DEBUG, INFO
20
20
 
21
21
  from flwr.common.args import add_args_flwr_app_common
22
- from flwr.common.constant import CLIENTAPPIO_API_DEFAULT_CLIENT_ADDRESS
22
+ from flwr.common.constant import CLIENTAPPIO_API_DEFAULT_CLIENT_ADDRESS, ExecPluginType
23
23
  from flwr.common.exit import ExitCode, flwr_exit
24
24
  from flwr.common.logger import log
25
+ from flwr.proto.clientappio_pb2_grpc import ClientAppIoStub
26
+ from flwr.supercore.superexec.plugin import ClientAppExecPlugin
27
+ from flwr.supercore.superexec.run_superexec import run_with_deprecation_warning
25
28
  from flwr.supercore.utils import mask_string
26
29
  from flwr.supernode.runtime.run_clientapp import run_clientapp
27
30
 
@@ -35,6 +38,20 @@ def flwr_clientapp() -> None:
35
38
  "flwr-clientapp does not support TLS yet.",
36
39
  )
37
40
 
41
+ # Disallow long-running `flwr-clientapp` processes
42
+ if args.token is None:
43
+ run_with_deprecation_warning(
44
+ cmd="flwr-clientapp",
45
+ plugin_type=ExecPluginType.CLIENT_APP,
46
+ plugin_class=ClientAppExecPlugin,
47
+ stub_class=ClientAppIoStub,
48
+ appio_api_address=args.clientappio_api_address,
49
+ flwr_dir=args.flwr_dir,
50
+ parent_pid=args.parent_pid,
51
+ warn_run_once=args.run_once,
52
+ )
53
+ return
54
+
38
55
  log(INFO, "Start `flwr-clientapp` process")
39
56
  log(
40
57
  DEBUG,
@@ -45,7 +62,6 @@ def flwr_clientapp() -> None:
45
62
  )
46
63
  run_clientapp(
47
64
  clientappio_api_address=args.clientappio_api_address,
48
- run_once=(args.token is not None) or args.run_once,
49
65
  token=args.token,
50
66
  flwr_dir=args.flwr_dir,
51
67
  certificates=None,
@@ -65,11 +81,5 @@ def _parse_args_run_flwr_clientapp() -> argparse.ArgumentParser:
65
81
  help="Address of SuperNode's ClientAppIo API (IPv4, IPv6, or a domain name)."
66
82
  f"By default, it is set to {CLIENTAPPIO_API_DEFAULT_CLIENT_ADDRESS}.",
67
83
  )
68
- parser.add_argument(
69
- "--run-once",
70
- action="store_true",
71
- help="When set, this process will start a single ClientApp for a pending "
72
- "message. If there is no pending message, the process will exit.",
73
- )
74
84
  add_args_flwr_app_common(parser=parser)
75
85
  return parser
@@ -62,14 +62,13 @@ from flwr.proto.appio_pb2 import ( # pylint: disable=E0611
62
62
  )
63
63
  from flwr.proto.clientappio_pb2_grpc import ClientAppIoStub
64
64
  from flwr.proto.node_pb2 import Node # pylint: disable=E0611
65
- from flwr.supercore.app_utils import simple_get_token, start_parent_process_monitor
65
+ from flwr.supercore.app_utils import start_parent_process_monitor
66
66
  from flwr.supercore.utils import mask_string
67
67
 
68
68
 
69
69
  def run_clientapp( # pylint: disable=R0913, R0914, R0917
70
70
  clientappio_api_address: str,
71
- run_once: bool,
72
- token: Optional[str] = None,
71
+ token: str,
73
72
  flwr_dir: Optional[str] = None,
74
73
  certificates: Optional[bytes] = None,
75
74
  parent_pid: Optional[int] = None,
@@ -92,76 +91,55 @@ def run_clientapp( # pylint: disable=R0913, R0914, R0917
92
91
  stub = ClientAppIoStub(channel)
93
92
  _wrap_stub(stub, _make_simple_grpc_retry_invoker())
94
93
 
95
- while True:
96
- # If token is not set, loop until token is received from SuperNode
97
- if token is None:
98
- log(DEBUG, "[flwr-clientapp] Request token")
99
- token = simple_get_token(stub)
100
-
101
- # Pull Message, Context, Run and (optional) FAB from SuperNode
102
- message, context, run, fab = pull_clientappinputs(stub=stub, token=token)
103
-
104
- # Install FAB, if provided
105
- if fab:
106
- log(DEBUG, "[flwr-clientapp] Start FAB installation.")
107
- install_from_fab(fab.content, flwr_dir=flwr_dir_, skip_prompt=True)
108
-
109
- load_client_app_fn = get_load_client_app_fn(
110
- default_app_ref="",
111
- app_path=None,
112
- multi_app=True,
113
- flwr_dir=str(flwr_dir_),
114
- )
94
+ # Pull Message, Context, Run and (optional) FAB from SuperNode
95
+ message, context, run, fab = pull_clientappinputs(stub=stub, token=token)
115
96
 
116
- try:
117
- # Load ClientApp
118
- log(DEBUG, "[flwr-clientapp] Start `ClientApp` Loading.")
119
- client_app: ClientApp = load_client_app_fn(
120
- run.fab_id, run.fab_version, fab.hash_str if fab else ""
121
- )
97
+ # Install FAB, if provided
98
+ if fab:
99
+ log(DEBUG, "[flwr-clientapp] Start FAB installation.")
100
+ install_from_fab(fab.content, flwr_dir=flwr_dir_, skip_prompt=True)
122
101
 
123
- # Execute ClientApp
124
- reply_message = client_app(message=message, context=context)
102
+ load_client_app_fn = get_load_client_app_fn(
103
+ default_app_ref="",
104
+ app_path=None,
105
+ multi_app=True,
106
+ flwr_dir=str(flwr_dir_),
107
+ )
125
108
 
126
- except Exception as ex: # pylint: disable=broad-exception-caught
127
- # Don't update/change NodeState
109
+ try:
110
+ # Load ClientApp
111
+ log(DEBUG, "[flwr-clientapp] Start `ClientApp` Loading.")
112
+ client_app: ClientApp = load_client_app_fn(
113
+ run.fab_id, run.fab_version, fab.hash_str if fab else ""
114
+ )
128
115
 
129
- e_code = ErrorCode.CLIENT_APP_RAISED_EXCEPTION
130
- # Ex fmt: "<class 'ZeroDivisionError'>:<'division by zero'>"
131
- reason = str(type(ex)) + ":<'" + str(ex) + "'>"
132
- exc_entity = "ClientApp"
133
- if isinstance(ex, LoadClientAppError):
134
- reason = (
135
- "An exception was raised when attempting to load `ClientApp`"
136
- )
137
- e_code = ErrorCode.LOAD_CLIENT_APP_EXCEPTION
116
+ # Execute ClientApp
117
+ reply_message = client_app(message=message, context=context)
138
118
 
139
- log(ERROR, "%s raised an exception", exc_entity, exc_info=ex)
119
+ except Exception as ex: # pylint: disable=broad-exception-caught
120
+ # Don't update/change NodeState
140
121
 
141
- # Create error message
142
- reply_message = Message(
143
- Error(code=e_code, reason=reason), reply_to=message
144
- )
122
+ e_code = ErrorCode.CLIENT_APP_RAISED_EXCEPTION
123
+ # Ex fmt: "<class 'ZeroDivisionError'>:<'division by zero'>"
124
+ reason = str(type(ex)) + ":<'" + str(ex) + "'>"
125
+ exc_entity = "ClientApp"
126
+ if isinstance(ex, LoadClientAppError):
127
+ reason = "An exception was raised when attempting to load `ClientApp`"
128
+ e_code = ErrorCode.LOAD_CLIENT_APP_EXCEPTION
145
129
 
146
- # Push Message and Context to SuperNode
147
- _ = push_clientappoutputs(
148
- stub=stub, token=token, message=reply_message, context=context
149
- )
130
+ log(ERROR, "%s raised an exception", exc_entity, exc_info=ex)
150
131
 
151
- del client_app, message, context, run, fab, reply_message
152
- gc.collect()
132
+ # Create error message
133
+ reply_message = Message(Error(code=e_code, reason=reason), reply_to=message)
153
134
 
154
- # Reset token to `None` to prevent flwr-clientapp from trying to pull the
155
- # same inputs again
156
- token = None
135
+ # Push Message and Context to SuperNode
136
+ _ = push_clientappoutputs(
137
+ stub=stub, token=token, message=reply_message, context=context
138
+ )
157
139
 
158
- # Stop the loop if `flwr-clientapp` is expected to process only a single
159
- # message
160
- if run_once:
161
- break
140
+ del client_app, message, context, run, fab, reply_message
141
+ gc.collect()
162
142
 
163
- except KeyboardInterrupt:
164
- log(INFO, "Closing connection")
165
143
  except grpc.RpcError as e:
166
144
  log(ERROR, "GRPC error occurred: %s", str(e))
167
145
  finally:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: flwr-nightly
3
- Version: 1.21.0.dev20250815
3
+ Version: 1.21.0.dev20250817
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
@@ -104,7 +104,7 @@ flwr/client/typing.py,sha256=Jw3rawDzI_-ZDcRmEQcs5gZModY7oeQlEeltYsdOhlU,1048
104
104
  flwr/clientapp/__init__.py,sha256=zGW4z49Ojzoi1hDiRC7kyhLjijUilc6fqHhtM_ATRVA,719
105
105
  flwr/common/__init__.py,sha256=5GCLVk399Az_rTJHNticRlL0Sl_oPw_j5_LuFKfX7-M,4171
106
106
  flwr/common/address.py,sha256=9JucdTwlc-jpeJkRKeUboZoacUtErwSVtnDR9kAtLqE,4119
107
- flwr/common/args.py,sha256=WVx-NI3d9kc1vCxfQ_JAHqoAulJHbvMXDqoGjz21hF0,5686
107
+ flwr/common/args.py,sha256=Nq2u4yePbkSY0CWFamn0hZY6Rms8G1xYDeDGIcLIITE,5849
108
108
  flwr/common/auth_plugin/__init__.py,sha256=DktrRcGZrRarLf7Jb_UlHtOyLp9_-kEplyq6PS5-vOA,988
109
109
  flwr/common/auth_plugin/auth_plugin.py,sha256=mM7SuphO4OsVAVJR1GErYVgYT83ZjxDzS_gha12bT9E,4855
110
110
  flwr/common/config.py,sha256=glcZDjco-amw1YfQcYTFJ4S1pt9APoexT-mf1QscuHs,13960
@@ -250,7 +250,7 @@ flwr/server/server.py,sha256=39m4FSN2T-uVA-no9nstN0eWW0co-IUUAIMmpd3V7Jc,17893
250
250
  flwr/server/server_app.py,sha256=8uagoZX-3CY3tazPqkIV9jY-cN0YrRRrDmVe23o0AV0,9515
251
251
  flwr/server/server_config.py,sha256=e_6ddh0riwOJsdNn2BFev344uMWfDk9n7dyjNpPgm1w,1349
252
252
  flwr/server/serverapp/__init__.py,sha256=xcC0T_MQSMS9cicUzUUpMNCOsF2d8Oh_8jvnoBLuZvo,800
253
- flwr/server/serverapp/app.py,sha256=9S0B4yEuL1QFbPR7RQvn1N7BVu9t7jFhgNpIfXuRvGg,10067
253
+ flwr/server/serverapp/app.py,sha256=7eZJe65if8pssSD6x1FZRzzFpNMYdXsT_u7zTtX0CyA,10552
254
254
  flwr/server/serverapp_components.py,sha256=dfSqmrsVy3arKXpl3ZIBQWdV8rehfIms8aJooyzdmEM,2118
255
255
  flwr/server/strategy/__init__.py,sha256=HhsSWMWaC7oCb2g7Kqn1MBKdrfvgi8VxACy9ZL706Q0,2836
256
256
  flwr/server/strategy/aggregate.py,sha256=smlKKy-uFUuuFR12vlclucnwSQWRz78R79-Km4RWqbw,13978
@@ -322,7 +322,7 @@ flwr/server/workflow/secure_aggregation/secagg_workflow.py,sha256=b_pKk7gmbahwyj
322
322
  flwr/server/workflow/secure_aggregation/secaggplus_workflow.py,sha256=DkayCsnlAya6Y2PZsueLgoUCMRtV-GbnW08RfWx_SXM,29460
323
323
  flwr/serverapp/__init__.py,sha256=HPvC_ZvMS7GCM7ALVrG_Wwm4bSDr4DZETeC561v3T9w,719
324
324
  flwr/simulation/__init__.py,sha256=Gg6OsP1Z-ixc3-xxzvl7j7rz2Fijy9rzyEPpxgAQCeM,1556
325
- flwr/simulation/app.py,sha256=ZDDHNiObHVJ1tNatQHwX-c3icCl_-Bvn7q1kn37l0Pg,11163
325
+ flwr/simulation/app.py,sha256=lU1c0CjPHuu4UA2ZMStDo9oFI7ZhMGtfiC1EI0EUjUQ,11663
326
326
  flwr/simulation/legacy_app.py,sha256=nMISQqW0otJL1-2Kfd94O6BLlGS2IEmEPKTM2WGKrIs,15861
327
327
  flwr/simulation/ray_transport/__init__.py,sha256=ogd-0AMv2U-wBZ1r3sHWaDIOIrVqr88Xi6C8o4Dviy0,734
328
328
  flwr/simulation/ray_transport/ray_actor.py,sha256=JN3xTqFIr5Z750k92CcA_uavzOHhSWDwE2WCaecvpks,19147
@@ -356,7 +356,7 @@ flwr/supercore/superexec/plugin/clientapp_exec_plugin.py,sha256=9FT6ufEqV5K9g4Fa
356
356
  flwr/supercore/superexec/plugin/exec_plugin.py,sha256=w3jmtxdv7ov_EdAgifKcm4q8nV39e2Xna4sNjqClwOM,2447
357
357
  flwr/supercore/superexec/plugin/serverapp_exec_plugin.py,sha256=IwRzdPV-cSKwrP2krGh0De4IkAuxsmgK0WU6J-2GXqM,1035
358
358
  flwr/supercore/superexec/plugin/simulation_exec_plugin.py,sha256=upn5zE-YKkl_jTw8RzmeyQ58PU_UAlQ7CqnBXXdng8I,1060
359
- flwr/supercore/superexec/run_superexec.py,sha256=2-W6UfPgdzEpHSGOvqkIr5OAhD3Zb_O4quk8ZU2oISw,4288
359
+ flwr/supercore/superexec/run_superexec.py,sha256=6bzP9xzP8MrWwiN9xyizoU4rmY0ZkwLn_liVmvrKy6E,6058
360
360
  flwr/supercore/utils.py,sha256=ebuHMbeA8eXisX0oMPqBK3hk7uVnIE_yiqWVz8YbkpQ,1324
361
361
  flwr/superexec/__init__.py,sha256=YFqER0IJc1XEWfsX6AxZ9LSRq0sawPYrNYki-brvTIc,715
362
362
  flwr/superexec/deployment.py,sha256=CEgWfkN_lH6Vci03RjwKLENw2z6kxNvUdVEErPbqYDY,830
@@ -377,18 +377,18 @@ flwr/superlink/servicer/control/control_user_auth_interceptor.py,sha256=9Aqhrt_U
377
377
  flwr/supernode/__init__.py,sha256=KgeCaVvXWrU3rptNR1y0oBp4YtXbAcrnCcJAiOoWkI4,707
378
378
  flwr/supernode/cli/__init__.py,sha256=JuEMr0-s9zv-PEWKuLB9tj1ocNfroSyNJ-oyv7ati9A,887
379
379
  flwr/supernode/cli/flower_supernode.py,sha256=fAkk9zGhoP8Sv05EkdXRiCtirTAzWkSZBqRoaDdgflk,8529
380
- flwr/supernode/cli/flwr_clientapp.py,sha256=jxjR6etQRCHzG3zL04kyTZzicMMYdZ9dMiKdrW1uXs4,2759
380
+ flwr/supernode/cli/flwr_clientapp.py,sha256=W3tAyqSfeHbPhqBC4Pfo9bsyFdkBKPqdKlhGmeUKwKg,3173
381
381
  flwr/supernode/nodestate/__init__.py,sha256=CyLLObbmmVgfRO88UCM0VMait1dL57mUauUDfuSHsbU,976
382
382
  flwr/supernode/nodestate/in_memory_nodestate.py,sha256=rr_tg7YXhf_seYFipSB59TAfheKPratx3rrvHUOJ80g,7343
383
383
  flwr/supernode/nodestate/nodestate.py,sha256=jCOewZyctecMxsM0-_-pQwef9P3O5QjnKCgCGyx2PK4,5047
384
384
  flwr/supernode/nodestate/nodestate_factory.py,sha256=UYTDCcwK_baHUmkzkJDxL0UEqvtTfOMlQRrROMCd0Xo,1430
385
385
  flwr/supernode/runtime/__init__.py,sha256=JQdqd2EMTn-ORMeTvewYYh52ls0YKP68jrps1qioxu4,718
386
- flwr/supernode/runtime/run_clientapp.py,sha256=vAeBTgIi4SmV4IRq1dSjXaxrFUPEeHg-nkvt5iAZ1Zc,9675
386
+ flwr/supernode/runtime/run_clientapp.py,sha256=2vknOFxmexCv0vsIsymrtRcvvgmk1tHM5lnjmAL37Rg,8775
387
387
  flwr/supernode/servicer/__init__.py,sha256=lucTzre5WPK7G1YLCfaqg3rbFWdNSb7ZTt-ca8gxdEo,717
388
388
  flwr/supernode/servicer/clientappio/__init__.py,sha256=7Oy62Y_oijqF7Dxi6tpcUQyOpLc_QpIRZ83NvwmB0Yg,813
389
389
  flwr/supernode/servicer/clientappio/clientappio_servicer.py,sha256=nIHRu38EWK-rpNOkcgBRAAKwYQQWFeCwu0lkO7OPZGQ,10239
390
390
  flwr/supernode/start_client_internal.py,sha256=z2o92MQKzTRB-AZTELROueZ2ZQYouu947hiU-WJ_oq4,20257
391
- flwr_nightly-1.21.0.dev20250815.dist-info/METADATA,sha256=LrphoswERq1SbrU8AiwmUEbA255u_FWa2cg-lBGsLX4,15967
392
- flwr_nightly-1.21.0.dev20250815.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
393
- flwr_nightly-1.21.0.dev20250815.dist-info/entry_points.txt,sha256=hxHD2ixb_vJFDOlZV-zB4Ao32_BQlL34ftsDh1GXv14,420
394
- flwr_nightly-1.21.0.dev20250815.dist-info/RECORD,,
391
+ flwr_nightly-1.21.0.dev20250817.dist-info/METADATA,sha256=3fyk0JYgaPDsYKEOLYmFMkEz_un7qY7CQ5_SxAjJ7Vk,15967
392
+ flwr_nightly-1.21.0.dev20250817.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
393
+ flwr_nightly-1.21.0.dev20250817.dist-info/entry_points.txt,sha256=hxHD2ixb_vJFDOlZV-zB4Ao32_BQlL34ftsDh1GXv14,420
394
+ flwr_nightly-1.21.0.dev20250817.dist-info/RECORD,,