flwr-nightly 1.19.0.dev20250601__py3-none-any.whl → 1.19.0.dev20250603__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/client/clientapp/__init__.py +0 -7
- flwr/client/grpc_rere_client/connection.py +9 -18
- flwr/common/inflatable.py +8 -2
- flwr/common/inflatable_grpc_utils.py +9 -5
- flwr/common/record/configrecord.py +9 -8
- flwr/common/record/metricrecord.py +6 -5
- flwr/common/retry_invoker.py +5 -1
- flwr/common/serde.py +39 -28
- flwr/common/serde_utils.py +2 -0
- flwr/proto/message_pb2.py +8 -8
- flwr/proto/message_pb2.pyi +20 -3
- flwr/proto/recorddict_pb2.py +16 -28
- flwr/proto/recorddict_pb2.pyi +46 -64
- flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +62 -5
- flwr/server/superlink/fleet/rest_rere/rest_api.py +2 -2
- flwr/server/superlink/serverappio/serverappio_servicer.py +58 -3
- flwr/supernode/cli/__init__.py +5 -1
- flwr/supernode/cli/flower_supernode.py +1 -2
- flwr/supernode/cli/flwr_clientapp.py +73 -0
- flwr/supernode/nodestate/in_memory_nodestate.py +112 -0
- flwr/supernode/nodestate/nodestate.py +132 -6
- flwr/supernode/runtime/__init__.py +15 -0
- flwr/{client/clientapp/app.py → supernode/runtime/run_clientapp.py} +2 -54
- flwr/supernode/servicer/__init__.py +15 -0
- flwr/supernode/servicer/clientappio/__init__.py +24 -0
- flwr/supernode/start_client_internal.py +24 -20
- {flwr_nightly-1.19.0.dev20250601.dist-info → flwr_nightly-1.19.0.dev20250603.dist-info}/METADATA +1 -1
- {flwr_nightly-1.19.0.dev20250601.dist-info → flwr_nightly-1.19.0.dev20250603.dist-info}/RECORD +31 -27
- {flwr_nightly-1.19.0.dev20250601.dist-info → flwr_nightly-1.19.0.dev20250603.dist-info}/entry_points.txt +1 -1
- /flwr/{client/clientapp → supernode/servicer/clientappio}/clientappio_servicer.py +0 -0
- {flwr_nightly-1.19.0.dev20250601.dist-info → flwr_nightly-1.19.0.dev20250603.dist-info}/WHEEL +0 -0
@@ -15,17 +15,143 @@
|
|
15
15
|
"""Abstract base class NodeState."""
|
16
16
|
|
17
17
|
|
18
|
-
import
|
18
|
+
from abc import ABC, abstractmethod
|
19
|
+
from collections.abc import Sequence
|
19
20
|
from typing import Optional
|
20
21
|
|
22
|
+
from flwr.common import Context, Message
|
23
|
+
from flwr.common.typing import Run
|
21
24
|
|
22
|
-
class NodeState(abc.ABC):
|
23
|
-
"""Abstract NodeState."""
|
24
25
|
|
25
|
-
|
26
|
-
|
26
|
+
class NodeState(ABC):
|
27
|
+
"""Abstract base class for node state."""
|
28
|
+
|
29
|
+
@abstractmethod
|
30
|
+
def set_node_id(self, node_id: int) -> None:
|
27
31
|
"""Set the node ID."""
|
28
32
|
|
29
|
-
@
|
33
|
+
@abstractmethod
|
30
34
|
def get_node_id(self) -> int:
|
31
35
|
"""Get the node ID."""
|
36
|
+
|
37
|
+
@abstractmethod
|
38
|
+
def store_message(self, message: Message) -> Optional[str]:
|
39
|
+
"""Store a message.
|
40
|
+
|
41
|
+
Parameters
|
42
|
+
----------
|
43
|
+
message : Message
|
44
|
+
The message to store.
|
45
|
+
|
46
|
+
Returns
|
47
|
+
-------
|
48
|
+
Optional[str]
|
49
|
+
The object ID of the stored message, or None if storage failed.
|
50
|
+
"""
|
51
|
+
|
52
|
+
@abstractmethod
|
53
|
+
def get_messages(
|
54
|
+
self,
|
55
|
+
*,
|
56
|
+
run_ids: Optional[Sequence[int]] = None,
|
57
|
+
is_reply: Optional[bool] = None,
|
58
|
+
limit: Optional[int] = None,
|
59
|
+
) -> Sequence[Message]:
|
60
|
+
"""Retrieve messages based on the specified filters.
|
61
|
+
|
62
|
+
If a filter is set to None, it is ignored.
|
63
|
+
If multiple filters are provided, they are combined using AND logic.
|
64
|
+
|
65
|
+
Parameters
|
66
|
+
----------
|
67
|
+
run_ids : Optional[Sequence[int]] (default: None)
|
68
|
+
Sequence of run IDs to filter by. If a sequence is provided,
|
69
|
+
it is treated as an OR condition.
|
70
|
+
is_reply : Optional[bool] (default: None)
|
71
|
+
If True, filter for reply messages; if False, filter for non-reply
|
72
|
+
(instruction) messages.
|
73
|
+
limit : Optional[int] (default: None)
|
74
|
+
Maximum number of messages to return. If None, no limit is applied.
|
75
|
+
|
76
|
+
Returns
|
77
|
+
-------
|
78
|
+
Sequence[Message]
|
79
|
+
A sequence of messages matching the specified filters.
|
80
|
+
|
81
|
+
Notes
|
82
|
+
-----
|
83
|
+
**IMPORTANT:** Retrieved messages will **NOT** be returned again by subsequent
|
84
|
+
calls to this method, even if the filters match them.
|
85
|
+
"""
|
86
|
+
|
87
|
+
@abstractmethod
|
88
|
+
def delete_messages(
|
89
|
+
self,
|
90
|
+
*,
|
91
|
+
message_ids: Optional[Sequence[str]] = None,
|
92
|
+
) -> None:
|
93
|
+
"""Delete messages based on the specified filters.
|
94
|
+
|
95
|
+
If a filter is set to None, it is ignored.
|
96
|
+
If multiple filters are provided, they are combined using AND logic.
|
97
|
+
|
98
|
+
Parameters
|
99
|
+
----------
|
100
|
+
message_ids : Optional[Sequence[str]] (default: None)
|
101
|
+
Sequence of message (object) IDs to filter by. If a sequence is provided,
|
102
|
+
it is treated as an OR condition.
|
103
|
+
|
104
|
+
Notes
|
105
|
+
-----
|
106
|
+
**IMPORTANT:** **All messages** will be deleted if no filters are provided.
|
107
|
+
"""
|
108
|
+
|
109
|
+
@abstractmethod
|
110
|
+
def store_run(self, run: Run) -> None:
|
111
|
+
"""Store a run.
|
112
|
+
|
113
|
+
Parameters
|
114
|
+
----------
|
115
|
+
run : Run
|
116
|
+
The `Run` instance to store.
|
117
|
+
"""
|
118
|
+
|
119
|
+
@abstractmethod
|
120
|
+
def get_run(self, run_id: int) -> Optional[Run]:
|
121
|
+
"""Retrieve a run by its ID.
|
122
|
+
|
123
|
+
Parameters
|
124
|
+
----------
|
125
|
+
run_id : int
|
126
|
+
The ID of the run to retrieve.
|
127
|
+
|
128
|
+
Returns
|
129
|
+
-------
|
130
|
+
Optional[Run]
|
131
|
+
The `Run` instance if found, otherwise None.
|
132
|
+
"""
|
133
|
+
|
134
|
+
@abstractmethod
|
135
|
+
def store_context(self, context: Context) -> None:
|
136
|
+
"""Store a context.
|
137
|
+
|
138
|
+
Parameters
|
139
|
+
----------
|
140
|
+
context : Context
|
141
|
+
The context to store.
|
142
|
+
"""
|
143
|
+
|
144
|
+
@abstractmethod
|
145
|
+
def get_context(self, run_id: int) -> Optional[Context]:
|
146
|
+
"""Retrieve a context by its run ID.
|
147
|
+
|
148
|
+
Parameters
|
149
|
+
----------
|
150
|
+
run_id : int
|
151
|
+
The ID of the run with which the context is associated.
|
152
|
+
|
153
|
+
Returns
|
154
|
+
-------
|
155
|
+
Optional[Context]
|
156
|
+
The `Context` instance if found, otherwise None.
|
157
|
+
"""
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# Copyright 2025 Flower Labs GmbH. All Rights Reserved.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
# ==============================================================================
|
15
|
+
"""Flower SuperNode components."""
|
@@ -15,7 +15,6 @@
|
|
15
15
|
"""Flower ClientApp process."""
|
16
16
|
|
17
17
|
|
18
|
-
import argparse
|
19
18
|
import gc
|
20
19
|
import time
|
21
20
|
from logging import DEBUG, ERROR, INFO
|
@@ -26,11 +25,10 @@ import grpc
|
|
26
25
|
from flwr.app.error import Error
|
27
26
|
from flwr.cli.install import install_from_fab
|
28
27
|
from flwr.client.client_app import ClientApp, LoadClientAppError
|
28
|
+
from flwr.client.clientapp.utils import get_load_client_app_fn
|
29
29
|
from flwr.common import Context, Message
|
30
|
-
from flwr.common.args import add_args_flwr_app_common
|
31
30
|
from flwr.common.config import get_flwr_dir
|
32
|
-
from flwr.common.constant import
|
33
|
-
from flwr.common.exit import ExitCode, flwr_exit
|
31
|
+
from flwr.common.constant import ErrorCode
|
34
32
|
from flwr.common.grpc import create_channel, on_channel_state_change
|
35
33
|
from flwr.common.logger import log
|
36
34
|
from flwr.common.retry_invoker import _make_simple_grpc_retry_invoker, _wrap_stub
|
@@ -55,34 +53,6 @@ from flwr.proto.clientappio_pb2 import (
|
|
55
53
|
)
|
56
54
|
from flwr.proto.clientappio_pb2_grpc import ClientAppIoStub
|
57
55
|
|
58
|
-
from .utils import get_load_client_app_fn
|
59
|
-
|
60
|
-
|
61
|
-
def flwr_clientapp() -> None:
|
62
|
-
"""Run process-isolated Flower ClientApp."""
|
63
|
-
args = _parse_args_run_flwr_clientapp().parse_args()
|
64
|
-
if not args.insecure:
|
65
|
-
flwr_exit(
|
66
|
-
ExitCode.COMMON_TLS_NOT_SUPPORTED,
|
67
|
-
"flwr-clientapp does not support TLS yet.",
|
68
|
-
)
|
69
|
-
|
70
|
-
log(INFO, "Start `flwr-clientapp` process")
|
71
|
-
log(
|
72
|
-
DEBUG,
|
73
|
-
"`flwr-clientapp` will attempt to connect to SuperNode's "
|
74
|
-
"ClientAppIo API at %s with token %s",
|
75
|
-
args.clientappio_api_address,
|
76
|
-
args.token,
|
77
|
-
)
|
78
|
-
run_clientapp(
|
79
|
-
clientappio_api_address=args.clientappio_api_address,
|
80
|
-
run_once=(args.token is not None),
|
81
|
-
token=args.token,
|
82
|
-
flwr_dir=args.flwr_dir,
|
83
|
-
certificates=None,
|
84
|
-
)
|
85
|
-
|
86
56
|
|
87
57
|
def run_clientapp( # pylint: disable=R0914
|
88
58
|
clientappio_api_address: str,
|
@@ -233,25 +203,3 @@ def push_clientappoutputs(
|
|
233
203
|
except grpc.RpcError as e:
|
234
204
|
log(ERROR, "[PushClientAppOutputs] gRPC error occurred: %s", str(e))
|
235
205
|
raise e
|
236
|
-
|
237
|
-
|
238
|
-
def _parse_args_run_flwr_clientapp() -> argparse.ArgumentParser:
|
239
|
-
"""Parse flwr-clientapp command line arguments."""
|
240
|
-
parser = argparse.ArgumentParser(
|
241
|
-
description="Run a Flower ClientApp",
|
242
|
-
)
|
243
|
-
parser.add_argument(
|
244
|
-
"--clientappio-api-address",
|
245
|
-
default=CLIENTAPPIO_API_DEFAULT_CLIENT_ADDRESS,
|
246
|
-
type=str,
|
247
|
-
help="Address of SuperNode's ClientAppIo API (IPv4, IPv6, or a domain name)."
|
248
|
-
f"By default, it is set to {CLIENTAPPIO_API_DEFAULT_CLIENT_ADDRESS}.",
|
249
|
-
)
|
250
|
-
parser.add_argument(
|
251
|
-
"--token",
|
252
|
-
type=int,
|
253
|
-
required=False,
|
254
|
-
help="Unique token generated by SuperNode for each ClientApp execution",
|
255
|
-
)
|
256
|
-
add_args_flwr_app_common(parser=parser)
|
257
|
-
return parser
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# Copyright 2025 Flower Labs GmbH. All Rights Reserved.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
# ==============================================================================
|
15
|
+
"""Flower SuperNode servicers."""
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# Copyright 2025 Flower Labs GmbH. All Rights Reserved.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
# ==============================================================================
|
15
|
+
"""ClientAppIo API Servicer."""
|
16
|
+
|
17
|
+
|
18
|
+
from .clientappio_servicer import ClientAppInputs, ClientAppIoServicer, ClientAppOutputs
|
19
|
+
|
20
|
+
__all__ = [
|
21
|
+
"ClientAppInputs",
|
22
|
+
"ClientAppIoServicer",
|
23
|
+
"ClientAppOutputs",
|
24
|
+
]
|
@@ -17,7 +17,6 @@
|
|
17
17
|
|
18
18
|
import multiprocessing
|
19
19
|
import os
|
20
|
-
import sys
|
21
20
|
import threading
|
22
21
|
import time
|
23
22
|
from collections.abc import Iterator
|
@@ -33,11 +32,6 @@ from grpc import RpcError
|
|
33
32
|
|
34
33
|
from flwr.app.error import Error
|
35
34
|
from flwr.cli.config_utils import get_fab_metadata
|
36
|
-
from flwr.client.clientapp.app import flwr_clientapp
|
37
|
-
from flwr.client.clientapp.clientappio_servicer import (
|
38
|
-
ClientAppInputs,
|
39
|
-
ClientAppIoServicer,
|
40
|
-
)
|
41
35
|
from flwr.client.grpc_adapter_client.connection import grpc_adapter
|
42
36
|
from flwr.client.grpc_rere_client.connection import grpc_request_response
|
43
37
|
from flwr.client.run_info_store import DeprecatedRunInfoStore
|
@@ -63,6 +57,8 @@ from flwr.common.retry_invoker import RetryInvoker, RetryState, exponential
|
|
63
57
|
from flwr.common.typing import Fab, Run, RunNotRunningException, UserConfig
|
64
58
|
from flwr.proto.clientappio_pb2_grpc import add_ClientAppIoServicer_to_server
|
65
59
|
from flwr.supernode.nodestate import NodeStateFactory
|
60
|
+
from flwr.supernode.runtime.run_clientapp import run_clientapp
|
61
|
+
from flwr.supernode.servicer.clientappio import ClientAppInputs, ClientAppIoServicer
|
66
62
|
|
67
63
|
|
68
64
|
# pylint: disable=import-outside-toplevel
|
@@ -262,18 +258,14 @@ def start_client_internal(
|
|
262
258
|
else clientappio_api_address
|
263
259
|
)
|
264
260
|
# Start ClientApp subprocess
|
265
|
-
command = [
|
266
|
-
"flwr-clientapp",
|
267
|
-
"--clientappio-api-address",
|
268
|
-
io_address,
|
269
|
-
"--token",
|
270
|
-
str(token),
|
271
|
-
]
|
272
|
-
command.append("--insecure")
|
273
|
-
|
274
261
|
proc = mp_spawn_context.Process(
|
275
262
|
target=_run_flwr_clientapp,
|
276
|
-
|
263
|
+
kwargs={
|
264
|
+
"main_pid": os.getpid(),
|
265
|
+
"clientappio_api_address": io_address,
|
266
|
+
"run_once": True,
|
267
|
+
"token": token,
|
268
|
+
},
|
277
269
|
daemon=True,
|
278
270
|
)
|
279
271
|
proc.start()
|
@@ -424,7 +416,14 @@ def _make_fleet_connection_retry_invoker(
|
|
424
416
|
)
|
425
417
|
|
426
418
|
|
427
|
-
def _run_flwr_clientapp(
|
419
|
+
def _run_flwr_clientapp( # pylint: disable=R0917
|
420
|
+
main_pid: int,
|
421
|
+
clientappio_api_address: str,
|
422
|
+
run_once: bool,
|
423
|
+
token: Optional[int] = None,
|
424
|
+
flwr_dir: Optional[str] = None,
|
425
|
+
certificates: Optional[bytes] = None,
|
426
|
+
) -> None:
|
428
427
|
# Monitor the main process in case of SIGKILL
|
429
428
|
def main_process_monitor() -> None:
|
430
429
|
while True:
|
@@ -434,9 +433,14 @@ def _run_flwr_clientapp(args: list[str], main_pid: int) -> None:
|
|
434
433
|
|
435
434
|
threading.Thread(target=main_process_monitor, daemon=True).start()
|
436
435
|
|
437
|
-
# Run
|
438
|
-
|
439
|
-
|
436
|
+
# Run flwr-clientapp
|
437
|
+
run_clientapp(
|
438
|
+
clientappio_api_address=clientappio_api_address,
|
439
|
+
run_once=run_once,
|
440
|
+
token=token,
|
441
|
+
flwr_dir=flwr_dir,
|
442
|
+
certificates=certificates,
|
443
|
+
)
|
440
444
|
|
441
445
|
|
442
446
|
def run_clientappio_api_grpc(
|
{flwr_nightly-1.19.0.dev20250601.dist-info → flwr_nightly-1.19.0.dev20250603.dist-info}/METADATA
RENAMED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.3
|
2
2
|
Name: flwr-nightly
|
3
|
-
Version: 1.19.0.
|
3
|
+
Version: 1.19.0.dev20250603
|
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.19.0.dev20250601.dist-info → flwr_nightly-1.19.0.dev20250603.dist-info}/RECORD
RENAMED
@@ -77,16 +77,14 @@ flwr/cli/utils.py,sha256=brzc0HPhFxJDi4ctfyQi9lW35uOyvQzoOJ8XHeMDIfE,11575
|
|
77
77
|
flwr/client/__init__.py,sha256=boIhKaK6I977zrILmoTutNx94x5jB0e6F1gnAjaRJnI,1250
|
78
78
|
flwr/client/client.py,sha256=3HAchxvknKG9jYbB7swNyDj-e5vUWDuMKoLvbT7jCVM,7895
|
79
79
|
flwr/client/client_app.py,sha256=zVhi-l3chAb06ozFsKwix3hU_RpOLjST13Ha50AVIPE,16918
|
80
|
-
flwr/client/clientapp/__init__.py,sha256=
|
81
|
-
flwr/client/clientapp/app.py,sha256=N1nd4PnwWzzZc3kn1g01SULXVMriCstCnfDYV_KERqc,9057
|
82
|
-
flwr/client/clientapp/clientappio_servicer.py,sha256=LmzkxtNQBn5vVrHc0Bhq2WqaK6-LM2v4kfLBN0PiNNM,8522
|
80
|
+
flwr/client/clientapp/__init__.py,sha256=Zw9qP5nHFnJ9K1dcR4cdY0fRqN-FaMYFSHJFXoFpUvo,711
|
83
81
|
flwr/client/clientapp/utils.py,sha256=LsiW1OL2VPcjom3xN29pgBQC0UrttQ-xWL_GF1fkKDo,4344
|
84
82
|
flwr/client/dpfedavg_numpy_client.py,sha256=3hul067cT2E9jBhzp7bFnFAZ_D2nWcIUEdHYE05FpzU,7404
|
85
83
|
flwr/client/grpc_adapter_client/__init__.py,sha256=RQWP5mFPROLHKgombiRvPXVWSoVrQ81wvZm0-lOuuBA,742
|
86
84
|
flwr/client/grpc_adapter_client/connection.py,sha256=aj5tTYyE8z2hQLXPPydsJiz8gBDIWLUhfWvqYkAL1L4,3966
|
87
85
|
flwr/client/grpc_rere_client/__init__.py,sha256=i7iS0Lt8B7q0E2L72e4F_YrKm6ClRKnd71PNA6PW2O0,752
|
88
86
|
flwr/client/grpc_rere_client/client_interceptor.py,sha256=zFaVHw6AxeNO-7eCKKb-RxrPa7zbM5Z-2-1Efc4adQY,2451
|
89
|
-
flwr/client/grpc_rere_client/connection.py,sha256=
|
87
|
+
flwr/client/grpc_rere_client/connection.py,sha256=QEUjpXdWGVn_kaFv6Hv2WmJRpcggjMzR7QFpiAa-r6M,11923
|
90
88
|
flwr/client/grpc_rere_client/grpc_adapter.py,sha256=JvMZ7vCFTaTEo6AzKYh3zDmeQAU7VSjdysbC6t3ufWg,6351
|
91
89
|
flwr/client/message_handler/__init__.py,sha256=0lyljDVqre3WljiZbPcwCCf8GiIaSVI_yo_ylEyPwSE,719
|
92
90
|
flwr/client/message_handler/message_handler.py,sha256=X9SXX6et97Lw9_DGD93HKsEBGNjXClcFgc_5aLK0oiU,6541
|
@@ -124,8 +122,8 @@ flwr/common/exit/exit_code.py,sha256=PNEnCrZfOILjfDAFu5m-2YWEJBrk97xglq4zCUlqV7E
|
|
124
122
|
flwr/common/exit_handlers.py,sha256=IaqJ60fXZuu7McaRYnoYKtlbH9t4Yl9goNExKqtmQbs,4304
|
125
123
|
flwr/common/grpc.py,sha256=manTaHaPiyYngUq1ErZvvV2B2GxlXUUUGRy3jc3TBIQ,9798
|
126
124
|
flwr/common/heartbeat.py,sha256=SyEpNDnmJ0lni0cWO67rcoJVKasCLmkNHm3dKLeNrLU,5749
|
127
|
-
flwr/common/inflatable.py,sha256=
|
128
|
-
flwr/common/inflatable_grpc_utils.py,sha256=
|
125
|
+
flwr/common/inflatable.py,sha256=9yPsSFOfNM2OIb15JQ6-wY5kblwXiC5zNX-tsp2ZwW0,7017
|
126
|
+
flwr/common/inflatable_grpc_utils.py,sha256=KSrV51jaKsaAA__dROtlTAUC5k_FYJDVcPA0uITWM0s,4161
|
129
127
|
flwr/common/logger.py,sha256=JbRf6E2vQxXzpDBq1T8IDUJo_usu3gjWEBPQ6uKcmdg,13049
|
130
128
|
flwr/common/message.py,sha256=HfSeqxwXgf90ilbMlM0vrF4cJWqJVx3jJ0gNmTfgdFw,19628
|
131
129
|
flwr/common/object_ref.py,sha256=p3SfTeqo3Aj16SkB-vsnNn01zswOPdGNBitcbRnqmUk,9134
|
@@ -134,13 +132,13 @@ flwr/common/pyproject.py,sha256=2SU6yJW7059SbMXgzjOdK1GZRWO6AixDH7BmdxbMvHI,1386
|
|
134
132
|
flwr/common/record/__init__.py,sha256=cNGccdDoxttqgnUgyKRIqLWULjW-NaSmOufVxtXq-sw,1197
|
135
133
|
flwr/common/record/array.py,sha256=3K01tAf_jedub2r2-vkRshbsjBSiKErAO4KqDgdDaSo,11776
|
136
134
|
flwr/common/record/arrayrecord.py,sha256=CpoqYXM6Iv4XEc9SryCMYmw-bIvP8ut6xWJzRwYJzdU,18008
|
137
|
-
flwr/common/record/configrecord.py,sha256=
|
135
|
+
flwr/common/record/configrecord.py,sha256=G7U0q39kB0Kyi0zMxFmPxcVemL9NgwVS1qjvI4BRQuU,9763
|
138
136
|
flwr/common/record/conversion_utils.py,sha256=wbNCzy7oAqaA3-arhls_EqRZYXRC4YrWIoE-Gy82fJ0,1191
|
139
|
-
flwr/common/record/metricrecord.py,sha256=
|
137
|
+
flwr/common/record/metricrecord.py,sha256=KOyJjJbvFV6IwBPbgm92FZ_0_hXpMHuwfCi1rh5Zddk,8954
|
140
138
|
flwr/common/record/recorddict.py,sha256=p7hBimFpKM1XKUe6OAkR_7pYGzGL_EwUJUvJ8odZEcY,14986
|
141
139
|
flwr/common/record/typeddict.py,sha256=dDKgUThs2BscYUNcgP82KP8-qfAYXYftDrf2LszAC_o,3599
|
142
140
|
flwr/common/recorddict_compat.py,sha256=D5SqXWkqBddn5b6K_5UoH7aZ11UaN3lDTlzvHx3-rqk,14119
|
143
|
-
flwr/common/retry_invoker.py,sha256=
|
141
|
+
flwr/common/retry_invoker.py,sha256=s5IGgRovE19laMetHFePoqIdMBYfz_KdXs-KyfaCrXw,14634
|
144
142
|
flwr/common/secure_aggregation/__init__.py,sha256=MgW6uHGhyFLBAYQqa1Vzs5n2Gc0d4yEw1_NmerFir70,731
|
145
143
|
flwr/common/secure_aggregation/crypto/__init__.py,sha256=5E4q4-Fw0CNz4tLah_QHj7m_rDeM4ucHcFlPWB_Na3Q,738
|
146
144
|
flwr/common/secure_aggregation/crypto/shamir.py,sha256=N8pPa5cEksowNoAqfFm5SP3IuxuVi9GGMa3JOtPniQY,3954
|
@@ -149,8 +147,8 @@ flwr/common/secure_aggregation/ndarrays_arithmetic.py,sha256=TrggOlizlny3V2KS7-3
|
|
149
147
|
flwr/common/secure_aggregation/quantization.py,sha256=ssFZpiRyj9ltIh0Ai3vGkDqWFO4SoqgoD1mDU9XqMEM,2400
|
150
148
|
flwr/common/secure_aggregation/secaggplus_constants.py,sha256=dGYhWOBMMDJcQH4_tQNC8-Efqm-ecEUNN9ANz59UnCk,2182
|
151
149
|
flwr/common/secure_aggregation/secaggplus_utils.py,sha256=E_xU-Zd45daO1em7M6C2wOjFXVtJf-6tl7fp-7xq1wo,3214
|
152
|
-
flwr/common/serde.py,sha256=
|
153
|
-
flwr/common/serde_utils.py,sha256=
|
150
|
+
flwr/common/serde.py,sha256=hHqXbAF-MtSRWsROz4v-P_C4dMDSIt1XJ3Hecxp8os0,23020
|
151
|
+
flwr/common/serde_utils.py,sha256=krx2C_W31KpfmDqnDCtULoTkT8WKweWTJ7FHYWtF1r4,5815
|
154
152
|
flwr/common/telemetry.py,sha256=jF47v0SbnBd43XamHtl3wKxs3knFUY2p77cm_2lzZ8M,8762
|
155
153
|
flwr/common/typing.py,sha256=97QRfRRS7sQnjkAI5FDZ01-38oQUSz4i1qqewQmBWRg,6886
|
156
154
|
flwr/common/version.py,sha256=7GAGzPn73Mkh09qhrjbmjZQtcqVhBuzhFBaK4Mk4VRk,1325
|
@@ -196,16 +194,16 @@ flwr/proto/log_pb2.py,sha256=iKaS3MVn1BS4xHu8uGPFCOi1KWtvVx-H9V4jCUIJghs,1393
|
|
196
194
|
flwr/proto/log_pb2.pyi,sha256=ipuhgo40sAHTcRzCsGI1HwIstr5q0THPNk_cf62YyME,1448
|
197
195
|
flwr/proto/log_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
|
198
196
|
flwr/proto/log_pb2_grpc.pyi,sha256=ff2TSiLVnG6IVQcTGzb2DIH3XRSoAvAo_RMcvbMFyc0,76
|
199
|
-
flwr/proto/message_pb2.py,sha256=
|
200
|
-
flwr/proto/message_pb2.pyi,sha256=
|
197
|
+
flwr/proto/message_pb2.py,sha256=VoFv02FalR-xegoyqVMC1M_rD02sdWdoAAfFkw00k84,4481
|
198
|
+
flwr/proto/message_pb2.pyi,sha256=FmBgs2PsotAdv-OOCEHp4Dc3e6dSo6-CAB3-pgmva4g,9392
|
201
199
|
flwr/proto/message_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
|
202
200
|
flwr/proto/message_pb2_grpc.pyi,sha256=ff2TSiLVnG6IVQcTGzb2DIH3XRSoAvAo_RMcvbMFyc0,76
|
203
201
|
flwr/proto/node_pb2.py,sha256=BzZfAWIX7lV62bZr9f7x16lUZcpg-EImxnwxQXgCbYg,1045
|
204
202
|
flwr/proto/node_pb2.pyi,sha256=CPMeIPzUeI5-Csw9sHktV9UBH4GbqiGuYzGQQKftm6Q,616
|
205
203
|
flwr/proto/node_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
|
206
204
|
flwr/proto/node_pb2_grpc.pyi,sha256=ff2TSiLVnG6IVQcTGzb2DIH3XRSoAvAo_RMcvbMFyc0,76
|
207
|
-
flwr/proto/recorddict_pb2.py,sha256=
|
208
|
-
flwr/proto/recorddict_pb2.pyi,sha256=
|
205
|
+
flwr/proto/recorddict_pb2.py,sha256=eVkcnxMTFa3rvknRNiFuJ8z8xxPqgw7bV04aFiTe1j4,5290
|
206
|
+
flwr/proto/recorddict_pb2.pyi,sha256=xHRSK_GWlIynXDQxWNNmmidsj4OjZzVYqosRB6EonmE,14544
|
209
207
|
flwr/proto/recorddict_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
|
210
208
|
flwr/proto/recorddict_pb2_grpc.pyi,sha256=ff2TSiLVnG6IVQcTGzb2DIH3XRSoAvAo_RMcvbMFyc0,76
|
211
209
|
flwr/proto/run_pb2.py,sha256=SWpc2yDTprm7DaabMQne43q_7_NWQN3I66y-d_PpcGg,4727
|
@@ -286,12 +284,12 @@ flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py,sha256=KouR9PUcrPmMtoLooF4O
|
|
286
284
|
flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py,sha256=iSf0mbBAlig7G6subQwBSVjcUCgSihONKdZ1RmQPTOk,4887
|
287
285
|
flwr/server/superlink/fleet/grpc_bidi/grpc_server.py,sha256=OsS-6GgCIzMMZDVu5Y-OKjynHVUrpdc_5OrtuB-IbU0,5174
|
288
286
|
flwr/server/superlink/fleet/grpc_rere/__init__.py,sha256=ahDJJ1e-lDxBpeBMgPk7YZt2wB38_QltcpOC0gLbpFs,758
|
289
|
-
flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py,sha256=
|
287
|
+
flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py,sha256=SsMtj1EeOgumffWtYTQt-ii3JPldszXvP91C3axznq8,9176
|
290
288
|
flwr/server/superlink/fleet/grpc_rere/server_interceptor.py,sha256=DrHubsaLgJCwCeeJPYogQTiP0xYqjxwnT9rh7OP7BoU,6984
|
291
289
|
flwr/server/superlink/fleet/message_handler/__init__.py,sha256=fHsRV0KvJ8HtgSA4_YBsEzuhJLjO8p6xx4aCY2oE1p4,731
|
292
290
|
flwr/server/superlink/fleet/message_handler/message_handler.py,sha256=P43PapLZJKbZ0Oo0kP_KcO5zSMvO53SakQgPMiR5d1M,6500
|
293
291
|
flwr/server/superlink/fleet/rest_rere/__init__.py,sha256=Lzc93nA7tDqoy-zRUaPG316oqFiZX1HUCL5ELaXY_xw,735
|
294
|
-
flwr/server/superlink/fleet/rest_rere/rest_api.py,sha256=
|
292
|
+
flwr/server/superlink/fleet/rest_rere/rest_api.py,sha256=jIljUNMvZ8dDvSlkyn1c2y9sDAf_QoBr-q_o3BWxJ7o,7199
|
295
293
|
flwr/server/superlink/fleet/vce/__init__.py,sha256=XOKbAWOzlCqEOQ3M2cBYkH7HKA7PxlbCJMunt-ty-DY,784
|
296
294
|
flwr/server/superlink/fleet/vce/backend/__init__.py,sha256=PPH89Yqd1XKm-sRJN6R0WQlKT_b4v54Kzl2yzHAFzM8,1437
|
297
295
|
flwr/server/superlink/fleet/vce/backend/backend.py,sha256=-wDHjgAy5mrfEgXj0GxkJI7lhEbgSUyPwmNAf9ZcDzc,2193
|
@@ -305,7 +303,7 @@ flwr/server/superlink/linkstate/sqlite_linkstate.py,sha256=sHJPK1w0tP0m2WCXH2F9l
|
|
305
303
|
flwr/server/superlink/linkstate/utils.py,sha256=IeLh7iGRCHU5MEWOl7iriaSE4L__8GWOa2OleXadK5M,15444
|
306
304
|
flwr/server/superlink/serverappio/__init__.py,sha256=Fy4zJuoccZe5mZSEIpOmQvU6YeXFBa1M4eZuXXmJcn8,717
|
307
305
|
flwr/server/superlink/serverappio/serverappio_grpc.py,sha256=6-FUUt0GiLcBPljj8bBrUNeAITUoDQOLzaMihKo52hg,2326
|
308
|
-
flwr/server/superlink/serverappio/serverappio_servicer.py,sha256=
|
306
|
+
flwr/server/superlink/serverappio/serverappio_servicer.py,sha256=qInBXn7xcnNUNIXj_BkjoWfZd96By55gbTsp4onwfDQ,17290
|
309
307
|
flwr/server/superlink/simulation/__init__.py,sha256=Ry8DrNaZCMcQXvUc4FoCN2m3dvUQgWjasfp015o3Ec4,718
|
310
308
|
flwr/server/superlink/simulation/simulationio_grpc.py,sha256=0l0F-UjYEk6W7HZmI28PbJQLFxSi_vBHRkdchgdaSMQ,2224
|
311
309
|
flwr/server/superlink/simulation/simulationio_servicer.py,sha256=aJezU8RSJswcmWm7Eoy0BqsU13jrcfuFwX3ljm-cORM,7719
|
@@ -346,14 +344,20 @@ flwr/superexec/executor.py,sha256=M5ucqSE53jfRtuCNf59WFLqQvA1Mln4741TySeZE7qQ,31
|
|
346
344
|
flwr/superexec/simulation.py,sha256=j6YwUvBN7EQ09ID7MYOCVZ70PGbuyBy8f9bXU0EszEM,4088
|
347
345
|
flwr/superlink/__init__.py,sha256=GNSuJ4-N6Z8wun2iZNlXqENt5beUyzC0Gi_tN396bbM,707
|
348
346
|
flwr/supernode/__init__.py,sha256=KgeCaVvXWrU3rptNR1y0oBp4YtXbAcrnCcJAiOoWkI4,707
|
349
|
-
flwr/supernode/cli/__init__.py,sha256=
|
350
|
-
flwr/supernode/cli/flower_supernode.py,sha256=
|
347
|
+
flwr/supernode/cli/__init__.py,sha256=JuEMr0-s9zv-PEWKuLB9tj1ocNfroSyNJ-oyv7ati9A,887
|
348
|
+
flwr/supernode/cli/flower_supernode.py,sha256=ly2AQhbla2sufDaMsENaEALDEd0a4CS4D0eUrUOkHzY,8778
|
349
|
+
flwr/supernode/cli/flwr_clientapp.py,sha256=ORsNxviXOKGzZdcp5DEiHIuj4RycgB2OaPDaTTJJWz4,2555
|
351
350
|
flwr/supernode/nodestate/__init__.py,sha256=CyLLObbmmVgfRO88UCM0VMait1dL57mUauUDfuSHsbU,976
|
352
|
-
flwr/supernode/nodestate/in_memory_nodestate.py,sha256=
|
353
|
-
flwr/supernode/nodestate/nodestate.py,sha256
|
351
|
+
flwr/supernode/nodestate/in_memory_nodestate.py,sha256=4ZiLA45fMi2bJgmfDNLtiv-gVNru95Bi48xBy7xtatA,5212
|
352
|
+
flwr/supernode/nodestate/nodestate.py,sha256=SgblnKtqzTHRiODwg4QUREw1-uYPQrLzoeTBlROHf_0,4571
|
354
353
|
flwr/supernode/nodestate/nodestate_factory.py,sha256=UYTDCcwK_baHUmkzkJDxL0UEqvtTfOMlQRrROMCd0Xo,1430
|
355
|
-
flwr/supernode/
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
354
|
+
flwr/supernode/runtime/__init__.py,sha256=JQdqd2EMTn-ORMeTvewYYh52ls0YKP68jrps1qioxu4,718
|
355
|
+
flwr/supernode/runtime/run_clientapp.py,sha256=sEmrN1F-tV2YAzw06Dk4RM696yyP4xqm2gFLkp53Y6k,7402
|
356
|
+
flwr/supernode/servicer/__init__.py,sha256=lucTzre5WPK7G1YLCfaqg3rbFWdNSb7ZTt-ca8gxdEo,717
|
357
|
+
flwr/supernode/servicer/clientappio/__init__.py,sha256=vJyOjO2FXZ2URbnthmdsgs6948wbYfdq1L1V8Um-Lr8,895
|
358
|
+
flwr/supernode/servicer/clientappio/clientappio_servicer.py,sha256=LmzkxtNQBn5vVrHc0Bhq2WqaK6-LM2v4kfLBN0PiNNM,8522
|
359
|
+
flwr/supernode/start_client_internal.py,sha256=fI44QAbNbrRomwHI83X1sqtPlDcV8oIAWuZ0DxMTCVY,17602
|
360
|
+
flwr_nightly-1.19.0.dev20250603.dist-info/METADATA,sha256=uMka7DkhCI_KfSOFFsib_P7qj7UO05ccr88R1qecUi4,15910
|
361
|
+
flwr_nightly-1.19.0.dev20250603.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
|
362
|
+
flwr_nightly-1.19.0.dev20250603.dist-info/entry_points.txt,sha256=jNpDXGBGgs21RqUxelF_jwGaxtqFwm-MQyfz-ZqSjrA,367
|
363
|
+
flwr_nightly-1.19.0.dev20250603.dist-info/RECORD,,
|
@@ -3,7 +3,7 @@ flower-simulation=flwr.simulation.run_simulation:run_simulation_from_cli
|
|
3
3
|
flower-superlink=flwr.server.app:run_superlink
|
4
4
|
flower-supernode=flwr.supernode.cli:flower_supernode
|
5
5
|
flwr=flwr.cli.app:app
|
6
|
-
flwr-clientapp=flwr.
|
6
|
+
flwr-clientapp=flwr.supernode.cli:flwr_clientapp
|
7
7
|
flwr-serverapp=flwr.server.serverapp:flwr_serverapp
|
8
8
|
flwr-simulation=flwr.simulation.app:flwr_simulation
|
9
9
|
|
File without changes
|
{flwr_nightly-1.19.0.dev20250601.dist-info → flwr_nightly-1.19.0.dev20250603.dist-info}/WHEEL
RENAMED
File without changes
|