flwr-nightly 1.20.0.dev20250617__py3-none-any.whl → 1.20.0.dev20250619__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/cli/build.py +14 -4
- flwr/client/grpc_rere_client/connection.py +0 -24
- flwr/client/rest_client/connection.py +0 -24
- flwr/common/constant.py +1 -0
- flwr/proto/clientappio_pb2.py +23 -19
- flwr/proto/clientappio_pb2.pyi +45 -19
- flwr/proto/clientappio_pb2_grpc.py +50 -16
- flwr/proto/clientappio_pb2_grpc.pyi +25 -12
- flwr/supercore/utils.py +32 -0
- flwr/superexec/exec_servicer.py +9 -0
- flwr/supernode/cli/flower_supernode.py +0 -7
- flwr/supernode/cli/flwr_clientapp.py +10 -3
- flwr/supernode/runtime/run_clientapp.py +29 -20
- flwr/supernode/servicer/clientappio/__init__.py +1 -3
- flwr/supernode/servicer/clientappio/clientappio_servicer.py +84 -167
- flwr/supernode/start_client_internal.py +107 -97
- {flwr_nightly-1.20.0.dev20250617.dist-info → flwr_nightly-1.20.0.dev20250619.dist-info}/METADATA +1 -1
- {flwr_nightly-1.20.0.dev20250617.dist-info → flwr_nightly-1.20.0.dev20250619.dist-info}/RECORD +20 -19
- {flwr_nightly-1.20.0.dev20250617.dist-info → flwr_nightly-1.20.0.dev20250619.dist-info}/WHEEL +0 -0
- {flwr_nightly-1.20.0.dev20250617.dist-info → flwr_nightly-1.20.0.dev20250619.dist-info}/entry_points.txt +0 -0
@@ -21,9 +21,8 @@ import time
|
|
21
21
|
from collections.abc import Iterator
|
22
22
|
from contextlib import contextmanager
|
23
23
|
from logging import INFO, WARN
|
24
|
-
from os import urandom
|
25
24
|
from pathlib import Path
|
26
|
-
from typing import Callable, Optional, Union
|
25
|
+
from typing import Callable, Optional, Union
|
27
26
|
|
28
27
|
import grpc
|
29
28
|
from cryptography.hazmat.primitives.asymmetric import ec
|
@@ -39,7 +38,6 @@ from flwr.common.constant import (
|
|
39
38
|
CLIENTAPPIO_API_DEFAULT_SERVER_ADDRESS,
|
40
39
|
ISOLATION_MODE_SUBPROCESS,
|
41
40
|
MAX_RETRY_DELAY,
|
42
|
-
RUN_ID_NUM_BYTES,
|
43
41
|
SERVER_OCTET,
|
44
42
|
TRANSPORT_TYPE_GRPC_ADAPTER,
|
45
43
|
TRANSPORT_TYPE_GRPC_RERE,
|
@@ -47,15 +45,17 @@ from flwr.common.constant import (
|
|
47
45
|
TRANSPORT_TYPES,
|
48
46
|
)
|
49
47
|
from flwr.common.exit import ExitCode, flwr_exit
|
48
|
+
from flwr.common.exit_handlers import register_exit_handlers
|
50
49
|
from flwr.common.grpc import generic_create_grpc_server
|
51
50
|
from flwr.common.logger import log
|
52
51
|
from flwr.common.retry_invoker import RetryInvoker, RetryState, exponential
|
52
|
+
from flwr.common.telemetry import EventType
|
53
53
|
from flwr.common.typing import Fab, Run, RunNotRunningException, UserConfig
|
54
54
|
from flwr.proto.clientappio_pb2_grpc import add_ClientAppIoServicer_to_server
|
55
55
|
from flwr.supercore.ffs import Ffs, FfsFactory
|
56
56
|
from flwr.supercore.object_store import ObjectStore, ObjectStoreFactory
|
57
57
|
from flwr.supernode.nodestate import NodeState, NodeStateFactory
|
58
|
-
from flwr.supernode.servicer.clientappio import
|
58
|
+
from flwr.supernode.servicer.clientappio import ClientAppIoServicer
|
59
59
|
|
60
60
|
DEFAULT_FFS_DIR = get_flwr_dir() / "supernode" / "ffs"
|
61
61
|
|
@@ -132,16 +132,27 @@ def start_client_internal(
|
|
132
132
|
if insecure is None:
|
133
133
|
insecure = root_certificates is None
|
134
134
|
|
135
|
-
_clientappio_grpc_server, clientappio_servicer = run_clientappio_api_grpc(
|
136
|
-
address=clientappio_api_address,
|
137
|
-
certificates=None,
|
138
|
-
)
|
139
|
-
|
140
135
|
# Initialize factories
|
141
136
|
state_factory = NodeStateFactory()
|
142
137
|
ffs_factory = FfsFactory(get_flwr_dir(flwr_path) / "supernode" / "ffs") # type: ignore
|
143
138
|
object_store_factory = ObjectStoreFactory()
|
144
139
|
|
140
|
+
# Launch ClientAppIo API server
|
141
|
+
clientappio_server = run_clientappio_api_grpc(
|
142
|
+
address=clientappio_api_address,
|
143
|
+
state_factory=state_factory,
|
144
|
+
ffs_factory=ffs_factory,
|
145
|
+
objectstore_factory=object_store_factory,
|
146
|
+
certificates=None,
|
147
|
+
)
|
148
|
+
|
149
|
+
# Register handlers for graceful shutdown
|
150
|
+
register_exit_handlers(
|
151
|
+
event_type=EventType.RUN_SUPERNODE_LEAVE,
|
152
|
+
exit_message="SuperNode terminated gracefully.",
|
153
|
+
grpc_servers=[clientappio_server],
|
154
|
+
)
|
155
|
+
|
145
156
|
# Initialize NodeState, Ffs, and ObjectStore
|
146
157
|
state = state_factory.state()
|
147
158
|
ffs = ffs_factory.ffs()
|
@@ -178,94 +189,39 @@ def start_client_internal(
|
|
178
189
|
get_fab=get_fab,
|
179
190
|
)
|
180
191
|
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
# Docker container.
|
198
|
-
|
199
|
-
# Generate SuperNode token
|
200
|
-
token = int.from_bytes(urandom(RUN_ID_NUM_BYTES), "little")
|
201
|
-
|
202
|
-
# Mode 1: SuperNode starts ClientApp as subprocess
|
203
|
-
start_subprocess = isolation == ISOLATION_MODE_SUBPROCESS
|
204
|
-
|
205
|
-
# Share Message and Context with servicer
|
206
|
-
clientappio_servicer.set_inputs(
|
207
|
-
clientapp_input=ClientAppInputs(
|
208
|
-
message=message,
|
209
|
-
context=context,
|
210
|
-
run=run,
|
211
|
-
fab=fab,
|
212
|
-
token=token,
|
213
|
-
),
|
214
|
-
token_returned=start_subprocess,
|
192
|
+
# Two isolation modes:
|
193
|
+
# 1. `subprocess`: SuperNode is starting the ClientApp
|
194
|
+
# process as a subprocess.
|
195
|
+
# 2. `process`: ClientApp process gets started separately
|
196
|
+
# (via `flwr-clientapp`), for example, in a separate
|
197
|
+
# Docker container.
|
198
|
+
|
199
|
+
# Mode 1: SuperNode starts ClientApp as subprocess
|
200
|
+
start_subprocess = isolation == ISOLATION_MODE_SUBPROCESS
|
201
|
+
|
202
|
+
if start_subprocess and run_id is not None:
|
203
|
+
_octet, _colon, _port = clientappio_api_address.rpartition(":")
|
204
|
+
io_address = (
|
205
|
+
f"{CLIENT_OCTET}:{_port}"
|
206
|
+
if _octet == SERVER_OCTET
|
207
|
+
else clientappio_api_address
|
215
208
|
)
|
209
|
+
# Start ClientApp subprocess
|
210
|
+
command = [
|
211
|
+
"flwr-clientapp",
|
212
|
+
"--clientappio-api-address",
|
213
|
+
io_address,
|
214
|
+
"--parent-pid",
|
215
|
+
str(os.getpid()),
|
216
|
+
"--insecure",
|
217
|
+
"--run-once",
|
218
|
+
]
|
219
|
+
subprocess.run(command, check=False)
|
216
220
|
|
217
|
-
|
218
|
-
_octet, _colon, _port = clientappio_api_address.rpartition(":")
|
219
|
-
io_address = (
|
220
|
-
f"{CLIENT_OCTET}:{_port}"
|
221
|
-
if _octet == SERVER_OCTET
|
222
|
-
else clientappio_api_address
|
223
|
-
)
|
224
|
-
# Start ClientApp subprocess
|
225
|
-
command = [
|
226
|
-
"flwr-clientapp",
|
227
|
-
"--clientappio-api-address",
|
228
|
-
io_address,
|
229
|
-
"--token",
|
230
|
-
str(token),
|
231
|
-
"--parent-pid",
|
232
|
-
str(os.getpid()),
|
233
|
-
"--insecure",
|
234
|
-
]
|
235
|
-
subprocess.run(command, check=False)
|
236
|
-
else:
|
237
|
-
# Wait for output to become available
|
238
|
-
while not clientappio_servicer.has_outputs():
|
239
|
-
time.sleep(0.1)
|
240
|
-
|
241
|
-
outputs = clientappio_servicer.get_outputs()
|
242
|
-
reply_message, context = outputs.message, outputs.context
|
243
|
-
|
244
|
-
# Update context in the state
|
245
|
-
state.store_context(context)
|
246
|
-
|
247
|
-
# Send
|
248
|
-
send(reply_message)
|
249
|
-
|
250
|
-
# Delete messages from the state
|
251
|
-
state.delete_messages(
|
252
|
-
message_ids=[
|
253
|
-
message.metadata.message_id,
|
254
|
-
message.metadata.reply_to_message_id,
|
255
|
-
]
|
256
|
-
)
|
221
|
+
_push_messages(state=state, send=send)
|
257
222
|
|
258
|
-
|
259
|
-
|
260
|
-
except RunNotRunningException:
|
261
|
-
log(INFO, "")
|
262
|
-
log(
|
263
|
-
INFO,
|
264
|
-
"SuperNode aborted sending the reply message. "
|
265
|
-
"Run ID %s is not in `RUNNING` status.",
|
266
|
-
run_id,
|
267
|
-
)
|
268
|
-
log(INFO, "")
|
223
|
+
# Sleep for 3 seconds before the next iteration
|
224
|
+
time.sleep(3)
|
269
225
|
|
270
226
|
|
271
227
|
def _pull_and_store_message( # pylint: disable=too-many-positional-arguments
|
@@ -353,6 +309,53 @@ def _pull_and_store_message( # pylint: disable=too-many-positional-arguments
|
|
353
309
|
return run_id
|
354
310
|
|
355
311
|
|
312
|
+
def _push_messages(
|
313
|
+
state: NodeState,
|
314
|
+
send: Callable[[Message], None],
|
315
|
+
) -> None:
|
316
|
+
"""Push reply messages to the SuperLink."""
|
317
|
+
# Get messages to send
|
318
|
+
reply_messages = state.get_messages(is_reply=True)
|
319
|
+
|
320
|
+
for message in reply_messages:
|
321
|
+
# Log message sending
|
322
|
+
log(INFO, "")
|
323
|
+
if message.metadata.group_id:
|
324
|
+
log(
|
325
|
+
INFO,
|
326
|
+
"[RUN %s, ROUND %s]",
|
327
|
+
message.metadata.run_id,
|
328
|
+
message.metadata.group_id,
|
329
|
+
)
|
330
|
+
else:
|
331
|
+
log(INFO, "[RUN %s]", message.metadata.run_id)
|
332
|
+
log(
|
333
|
+
INFO,
|
334
|
+
"Sending: %s message",
|
335
|
+
message.metadata.message_type,
|
336
|
+
)
|
337
|
+
|
338
|
+
# Send the message
|
339
|
+
try:
|
340
|
+
send(message)
|
341
|
+
log(INFO, "Sent successfully")
|
342
|
+
except RunNotRunningException:
|
343
|
+
log(
|
344
|
+
INFO,
|
345
|
+
"Run ID %s is not in `RUNNING` status. Ignoring reply message %s.",
|
346
|
+
message.metadata.run_id,
|
347
|
+
message.metadata.message_id,
|
348
|
+
)
|
349
|
+
finally:
|
350
|
+
# Delete the message from the state
|
351
|
+
state.delete_messages(
|
352
|
+
message_ids=[
|
353
|
+
message.metadata.message_id,
|
354
|
+
message.metadata.reply_to_message_id,
|
355
|
+
]
|
356
|
+
)
|
357
|
+
|
358
|
+
|
356
359
|
@contextmanager
|
357
360
|
def _init_connection( # pylint: disable=too-many-positional-arguments
|
358
361
|
transport: str,
|
@@ -472,10 +475,17 @@ def _make_fleet_connection_retry_invoker(
|
|
472
475
|
|
473
476
|
def run_clientappio_api_grpc(
|
474
477
|
address: str,
|
478
|
+
state_factory: NodeStateFactory,
|
479
|
+
ffs_factory: FfsFactory,
|
480
|
+
objectstore_factory: ObjectStoreFactory,
|
475
481
|
certificates: Optional[tuple[bytes, bytes, bytes]],
|
476
|
-
) ->
|
482
|
+
) -> grpc.Server:
|
477
483
|
"""Run ClientAppIo API gRPC server."""
|
478
|
-
clientappio_servicer: grpc.Server = ClientAppIoServicer(
|
484
|
+
clientappio_servicer: grpc.Server = ClientAppIoServicer(
|
485
|
+
state_factory=state_factory,
|
486
|
+
ffs_factory=ffs_factory,
|
487
|
+
objectstore_factory=objectstore_factory,
|
488
|
+
)
|
479
489
|
clientappio_add_servicer_to_server_fn = add_ClientAppIoServicer_to_server
|
480
490
|
clientappio_grpc_server = generic_create_grpc_server(
|
481
491
|
servicer_and_add_fn=(
|
@@ -488,4 +498,4 @@ def run_clientappio_api_grpc(
|
|
488
498
|
)
|
489
499
|
log(INFO, "Starting Flower ClientAppIo gRPC server on %s", address)
|
490
500
|
clientappio_grpc_server.start()
|
491
|
-
return clientappio_grpc_server
|
501
|
+
return clientappio_grpc_server
|
{flwr_nightly-1.20.0.dev20250617.dist-info → flwr_nightly-1.20.0.dev20250619.dist-info}/METADATA
RENAMED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.3
|
2
2
|
Name: flwr-nightly
|
3
|
-
Version: 1.20.0.
|
3
|
+
Version: 1.20.0.dev20250619
|
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
|
{flwr_nightly-1.20.0.dev20250617.dist-info → flwr_nightly-1.20.0.dev20250619.dist-info}/RECORD
RENAMED
@@ -6,7 +6,7 @@ flwr/cli/__init__.py,sha256=EfMGmHoobET6P2blBt_eOByXL8299MgFfB7XNdaPQ6I,720
|
|
6
6
|
flwr/cli/app.py,sha256=AKCP45Dkbpvdil_4Ir9S93L3HP3iUOnHmcZjscoM8uU,1856
|
7
7
|
flwr/cli/auth_plugin/__init__.py,sha256=FyaoqPzcxlBTFfJ2sBRC5USwQLmAhFr5KuBwfMO4bmo,1052
|
8
8
|
flwr/cli/auth_plugin/oidc_cli_plugin.py,sha256=gIhW6Jg9QAo-jL43LYPpw_kn7pdUZZae0s0H8dEgjLM,5384
|
9
|
-
flwr/cli/build.py,sha256=
|
9
|
+
flwr/cli/build.py,sha256=7OrcTqrjJd-iVq-MCtCIBCfvzi1JoqwUxeZDGKDKu6I,7265
|
10
10
|
flwr/cli/cli_user_auth_interceptor.py,sha256=-JqDXpeZNQVwoSG7hMKsiS5qY5k5oklNSlQOVpM0-aY,3126
|
11
11
|
flwr/cli/config_utils.py,sha256=IAVn2uWTXpN72YYt7raLtwp8ziwZugUKSURpc471VzU,9123
|
12
12
|
flwr/cli/constant.py,sha256=g7Ad7o3DJDkJNrWS0T3SSJETWSTkkVJWGpLM8zlbpcY,1289
|
@@ -84,7 +84,7 @@ flwr/client/grpc_adapter_client/__init__.py,sha256=RQWP5mFPROLHKgombiRvPXVWSoVrQ
|
|
84
84
|
flwr/client/grpc_adapter_client/connection.py,sha256=aj5tTYyE8z2hQLXPPydsJiz8gBDIWLUhfWvqYkAL1L4,3966
|
85
85
|
flwr/client/grpc_rere_client/__init__.py,sha256=i7iS0Lt8B7q0E2L72e4F_YrKm6ClRKnd71PNA6PW2O0,752
|
86
86
|
flwr/client/grpc_rere_client/client_interceptor.py,sha256=zFaVHw6AxeNO-7eCKKb-RxrPa7zbM5Z-2-1Efc4adQY,2451
|
87
|
-
flwr/client/grpc_rere_client/connection.py,sha256=
|
87
|
+
flwr/client/grpc_rere_client/connection.py,sha256=5XNwDiac3YEXjyosSmiGz3lJyGNzA8I1I-ft4z08uIw,13619
|
88
88
|
flwr/client/grpc_rere_client/grpc_adapter.py,sha256=dLGB5GriszAmtgvuFGuz_F7rIwpzLfDxhJ7T3Un-Ce0,6694
|
89
89
|
flwr/client/message_handler/__init__.py,sha256=0lyljDVqre3WljiZbPcwCCf8GiIaSVI_yo_ylEyPwSE,719
|
90
90
|
flwr/client/message_handler/message_handler.py,sha256=X9SXX6et97Lw9_DGD93HKsEBGNjXClcFgc_5aLK0oiU,6541
|
@@ -98,7 +98,7 @@ flwr/client/mod/secure_aggregation/secaggplus_mod.py,sha256=aKqjZCrikF73y3E-7h40
|
|
98
98
|
flwr/client/mod/utils.py,sha256=FUgD2TfcWqSeF6jUKZ4i6Ke56U4Nrv85AeVb93s6R9g,1201
|
99
99
|
flwr/client/numpy_client.py,sha256=Qq6ghsIAop2slKqAfgiI5NiHJ4LIxGmrik3Ror4_XVc,9581
|
100
100
|
flwr/client/rest_client/__init__.py,sha256=MBiuK62hj439m9rtwSwI184Hth6Tt5GbmpNMyl3zkZY,735
|
101
|
-
flwr/client/rest_client/connection.py,sha256=
|
101
|
+
flwr/client/rest_client/connection.py,sha256=hp-bVcqG0Ul4OmITxcqEHOsGtJuyNevndP-B8trwlns,16270
|
102
102
|
flwr/client/run_info_store.py,sha256=MaJ3UQ-07hWtK67wnWu0zR29jrk0fsfgJX506dvEOfE,4042
|
103
103
|
flwr/client/typing.py,sha256=Jw3rawDzI_-ZDcRmEQcs5gZModY7oeQlEeltYsdOhlU,1048
|
104
104
|
flwr/clientapp/__init__.py,sha256=zGW4z49Ojzoi1hDiRC7kyhLjijUilc6fqHhtM_ATRVA,719
|
@@ -108,7 +108,7 @@ flwr/common/args.py,sha256=-aX_jVnSaDrJR2KZ8Wq0Y3dQHII4R4MJtJOIXzVUA0c,5417
|
|
108
108
|
flwr/common/auth_plugin/__init__.py,sha256=3rzPkVLn9WyB5n7HLk1XGDw3SLCqRWAU1_CnglcWPfw,970
|
109
109
|
flwr/common/auth_plugin/auth_plugin.py,sha256=kXx5o39vJchaPv28sK9qO6H_UXSWym6zRBbCa7sUwtQ,4825
|
110
110
|
flwr/common/config.py,sha256=glcZDjco-amw1YfQcYTFJ4S1pt9APoexT-mf1QscuHs,13960
|
111
|
-
flwr/common/constant.py,sha256=
|
111
|
+
flwr/common/constant.py,sha256=HO1y0YYHZUCIDt5QQnvCTSYVeKhkIJve0RbQ3nW7jHU,8191
|
112
112
|
flwr/common/context.py,sha256=Be8obQR_OvEDy1OmshuUKxGRQ7Qx89mf5F4xlhkR10s,2407
|
113
113
|
flwr/common/date.py,sha256=1ZT2cRSpC2DJqprOVTLXYCR_O2_OZR0zXO_brJ3LqWc,1554
|
114
114
|
flwr/common/differential_privacy.py,sha256=FdlpdpPl_H_2HJa8CQM1iCUGBBQ5Dc8CzxmHERM-EoE,6148
|
@@ -164,10 +164,10 @@ flwr/compat/server/__init__.py,sha256=TGVSoOTuf5T5JHUVrK5wuorQF7L6Wvdem8B4uufvMJ
|
|
164
164
|
flwr/compat/server/app.py,sha256=_lIe7Q4KUk-olq9PYBxIsO3UaOn6N92CWgWQ4hRcAZw,6490
|
165
165
|
flwr/compat/simulation/__init__.py,sha256=MApGa-tysDDw34iSdxZ7TWOKtGJM-z3i8fIRJa0qbZ8,750
|
166
166
|
flwr/proto/__init__.py,sha256=S3VbQzVwNC1P-3_9EdrXuwgptO-BVuuAe20Z_OUc1cQ,683
|
167
|
-
flwr/proto/clientappio_pb2.py,sha256=
|
168
|
-
flwr/proto/clientappio_pb2.pyi,sha256=
|
169
|
-
flwr/proto/clientappio_pb2_grpc.py,sha256=
|
170
|
-
flwr/proto/clientappio_pb2_grpc.pyi,sha256=
|
167
|
+
flwr/proto/clientappio_pb2.py,sha256=jkTJnHtHOylYTV0pxfFAaA0CtIPGrwGCcVgCg6i0LhU,4337
|
168
|
+
flwr/proto/clientappio_pb2.pyi,sha256=qrH9KeJ8YXRa9iQYlKV8-kwXrmxGr6AJp5f7Yx88CEg,6843
|
169
|
+
flwr/proto/clientappio_pb2_grpc.py,sha256=vstXed6-uSOqM0qbaZBwYIgHHs7GH6oKqOq0TniboOk,8035
|
170
|
+
flwr/proto/clientappio_pb2_grpc.pyi,sha256=828mbHoq0SxZ3NRmGqiZmpb4KtLPi71piQBMF_2EZxk,2399
|
171
171
|
flwr/proto/error_pb2.py,sha256=PQVWrfjVPo88ql_KgV9nCxyQNCcV9PVfmcw7sOzTMro,1084
|
172
172
|
flwr/proto/error_pb2.pyi,sha256=ZNH4HhJTU_KfMXlyCeg8FwU-fcUYxTqEmoJPtWtHikc,734
|
173
173
|
flwr/proto/error_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
|
@@ -335,31 +335,32 @@ flwr/supercore/object_store/__init__.py,sha256=cdfPAmjINY6iOp8oI_LdcVh2simg469Mk
|
|
335
335
|
flwr/supercore/object_store/in_memory_object_store.py,sha256=oflJcOuVNgx9A-B2da4VHDb1qj_Jub9wKFOrUBgtz_U,9630
|
336
336
|
flwr/supercore/object_store/object_store.py,sha256=VlZz-yzoWZtITbnYD8vwLZbFosv7vgr1XVNzByObeY0,5853
|
337
337
|
flwr/supercore/object_store/object_store_factory.py,sha256=QVwE2ywi7vsj2iKfvWWnNw3N_I7Rz91NUt2RpcbJ7iM,1527
|
338
|
+
flwr/supercore/utils.py,sha256=ebuHMbeA8eXisX0oMPqBK3hk7uVnIE_yiqWVz8YbkpQ,1324
|
338
339
|
flwr/superexec/__init__.py,sha256=YFqER0IJc1XEWfsX6AxZ9LSRq0sawPYrNYki-brvTIc,715
|
339
340
|
flwr/superexec/app.py,sha256=U2jjOHb2LGWoU7vrl9_czTzre9O2mPxu3CPGUZ86sK4,1465
|
340
341
|
flwr/superexec/deployment.py,sha256=cFxhFom-0zv93HLNjNcUdBy3Sf6JwshRoXPQtcZunF0,6797
|
341
342
|
flwr/superexec/exec_event_log_interceptor.py,sha256=7aBjZ4lkpOIyWut0s394OpMePr16g_Te594s-9aDM9Q,5774
|
342
343
|
flwr/superexec/exec_grpc.py,sha256=lpc_rgRjtHHMzcdOzznl12D4vT22JqV5acdy45YDb0k,3498
|
343
|
-
flwr/superexec/exec_servicer.py,sha256=
|
344
|
+
flwr/superexec/exec_servicer.py,sha256=c0nwdFBiS6CbKrRA7ffOpsgASOLeaRV_ICwxDfxNGAg,12498
|
344
345
|
flwr/superexec/exec_user_auth_interceptor.py,sha256=HpGHTcDKzB7XUiQHXgntNVFYL-VfP9Wj5tEVc04VOOw,5820
|
345
346
|
flwr/superexec/executor.py,sha256=LaErHRJvNggjWV6FI6eajgKfnwOvSv2UqzFH253yDro,3265
|
346
347
|
flwr/superexec/simulation.py,sha256=62rSLcS-1wnMsMsafSQuIDLs5ZS6Ail1spkZ-alNNTg,4156
|
347
348
|
flwr/superlink/__init__.py,sha256=GNSuJ4-N6Z8wun2iZNlXqENt5beUyzC0Gi_tN396bbM,707
|
348
349
|
flwr/supernode/__init__.py,sha256=KgeCaVvXWrU3rptNR1y0oBp4YtXbAcrnCcJAiOoWkI4,707
|
349
350
|
flwr/supernode/cli/__init__.py,sha256=JuEMr0-s9zv-PEWKuLB9tj1ocNfroSyNJ-oyv7ati9A,887
|
350
|
-
flwr/supernode/cli/flower_supernode.py,sha256=
|
351
|
-
flwr/supernode/cli/flwr_clientapp.py,sha256=
|
351
|
+
flwr/supernode/cli/flower_supernode.py,sha256=fAkk9zGhoP8Sv05EkdXRiCtirTAzWkSZBqRoaDdgflk,8529
|
352
|
+
flwr/supernode/cli/flwr_clientapp.py,sha256=zaro6BoUEmfKIPQYuyJ9oR4rrHSS3bufhEqxcTo5VZU,3153
|
352
353
|
flwr/supernode/nodestate/__init__.py,sha256=CyLLObbmmVgfRO88UCM0VMait1dL57mUauUDfuSHsbU,976
|
353
354
|
flwr/supernode/nodestate/in_memory_nodestate.py,sha256=LF3AbaW0bcZHY5yKWwUJSU2RZbMynt-YjFysGqvTOQY,7338
|
354
355
|
flwr/supernode/nodestate/nodestate.py,sha256=kkGFxYnLIwT4-UmlPnf6HvAUpPey2urUNrweGybAIY4,6398
|
355
356
|
flwr/supernode/nodestate/nodestate_factory.py,sha256=UYTDCcwK_baHUmkzkJDxL0UEqvtTfOMlQRrROMCd0Xo,1430
|
356
357
|
flwr/supernode/runtime/__init__.py,sha256=JQdqd2EMTn-ORMeTvewYYh52ls0YKP68jrps1qioxu4,718
|
357
|
-
flwr/supernode/runtime/run_clientapp.py,sha256=
|
358
|
+
flwr/supernode/runtime/run_clientapp.py,sha256=wDOs0SbTQJxcm4z63qK4mHomKXjyW-VMsUjD-mXD5X4,8248
|
358
359
|
flwr/supernode/servicer/__init__.py,sha256=lucTzre5WPK7G1YLCfaqg3rbFWdNSb7ZTt-ca8gxdEo,717
|
359
|
-
flwr/supernode/servicer/clientappio/__init__.py,sha256=
|
360
|
-
flwr/supernode/servicer/clientappio/clientappio_servicer.py,sha256=
|
361
|
-
flwr/supernode/start_client_internal.py,sha256=
|
362
|
-
flwr_nightly-1.20.0.
|
363
|
-
flwr_nightly-1.20.0.
|
364
|
-
flwr_nightly-1.20.0.
|
365
|
-
flwr_nightly-1.20.0.
|
360
|
+
flwr/supernode/servicer/clientappio/__init__.py,sha256=7Oy62Y_oijqF7Dxi6tpcUQyOpLc_QpIRZ83NvwmB0Yg,813
|
361
|
+
flwr/supernode/servicer/clientappio/clientappio_servicer.py,sha256=d3GdIabycUoDBDL_eVlt513knGSjQW3-9lG6Cw4QEk4,5719
|
362
|
+
flwr/supernode/start_client_internal.py,sha256=DAXuReZ1FCXt9Y1KbM0p-dI50ROWPEJXzfKrl14OE6k,18233
|
363
|
+
flwr_nightly-1.20.0.dev20250619.dist-info/METADATA,sha256=jui4QpPMXqhY6NHr7ILSXqQLGJSa4QzLuSiS-mWM398,15910
|
364
|
+
flwr_nightly-1.20.0.dev20250619.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
|
365
|
+
flwr_nightly-1.20.0.dev20250619.dist-info/entry_points.txt,sha256=jNpDXGBGgs21RqUxelF_jwGaxtqFwm-MQyfz-ZqSjrA,367
|
366
|
+
flwr_nightly-1.20.0.dev20250619.dist-info/RECORD,,
|
{flwr_nightly-1.20.0.dev20250617.dist-info → flwr_nightly-1.20.0.dev20250619.dist-info}/WHEEL
RENAMED
File without changes
|
File without changes
|