flwr-nightly 1.15.0.dev20250127__py3-none-any.whl → 1.15.0.dev20250129__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/utils.py +5 -8
- flwr/client/clientapp/app.py +15 -19
- flwr/client/grpc_client/connection.py +1 -6
- flwr/client/grpc_rere_client/connection.py +12 -12
- flwr/client/grpc_rere_client/grpc_adapter.py +0 -16
- flwr/client/message_handler/task_handler.py +0 -17
- flwr/client/supernode/app.py +0 -24
- flwr/common/differential_privacy.py +2 -1
- flwr/common/grpc.py +6 -1
- flwr/proto/fleet_pb2.py +27 -40
- flwr/proto/fleet_pb2.pyi +0 -84
- flwr/proto/fleet_pb2_grpc.py +5 -93
- flwr/proto/fleet_pb2_grpc.pyi +12 -38
- flwr/server/app.py +6 -2
- flwr/server/driver/grpc_driver.py +5 -4
- flwr/server/serverapp/app.py +7 -4
- flwr/server/superlink/driver/serverappio_servicer.py +4 -2
- flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +6 -43
- flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +2 -0
- flwr/server/superlink/fleet/message_handler/message_handler.py +1 -49
- flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -27
- flwr/simulation/simulationio_connection.py +2 -1
- {flwr_nightly-1.15.0.dev20250127.dist-info → flwr_nightly-1.15.0.dev20250129.dist-info}/METADATA +1 -1
- {flwr_nightly-1.15.0.dev20250127.dist-info → flwr_nightly-1.15.0.dev20250129.dist-info}/RECORD +27 -27
- {flwr_nightly-1.15.0.dev20250127.dist-info → flwr_nightly-1.15.0.dev20250129.dist-info}/LICENSE +0 -0
- {flwr_nightly-1.15.0.dev20250127.dist-info → flwr_nightly-1.15.0.dev20250129.dist-info}/WHEEL +0 -0
- {flwr_nightly-1.15.0.dev20250127.dist-info → flwr_nightly-1.15.0.dev20250129.dist-info}/entry_points.txt +0 -0
flwr/cli/utils.py
CHANGED
@@ -20,7 +20,6 @@ import json
|
|
20
20
|
import re
|
21
21
|
from collections.abc import Iterator
|
22
22
|
from contextlib import contextmanager
|
23
|
-
from logging import DEBUG
|
24
23
|
from pathlib import Path
|
25
24
|
from typing import Any, Callable, Optional, Union, cast
|
26
25
|
|
@@ -30,8 +29,11 @@ import typer
|
|
30
29
|
from flwr.cli.cli_user_auth_interceptor import CliUserAuthInterceptor
|
31
30
|
from flwr.common.auth_plugin import CliAuthPlugin
|
32
31
|
from flwr.common.constant import AUTH_TYPE_KEY, CREDENTIALS_DIR, FLWR_DIR
|
33
|
-
from flwr.common.grpc import
|
34
|
-
|
32
|
+
from flwr.common.grpc import (
|
33
|
+
GRPC_MAX_MESSAGE_LENGTH,
|
34
|
+
create_channel,
|
35
|
+
on_channel_state_change,
|
36
|
+
)
|
35
37
|
|
36
38
|
from .auth_plugin import get_cli_auth_plugins
|
37
39
|
from .config_utils import validate_certificate_in_federation_config
|
@@ -264,11 +266,6 @@ def init_channel(
|
|
264
266
|
app: Path, federation_config: dict[str, Any], auth_plugin: Optional[CliAuthPlugin]
|
265
267
|
) -> grpc.Channel:
|
266
268
|
"""Initialize gRPC channel to the Exec API."""
|
267
|
-
|
268
|
-
def on_channel_state_change(channel_connectivity: str) -> None:
|
269
|
-
"""Log channel connectivity."""
|
270
|
-
log(DEBUG, channel_connectivity)
|
271
|
-
|
272
269
|
insecure, root_certificates_bytes = validate_certificate_in_federation_config(
|
273
270
|
app, federation_config
|
274
271
|
)
|
flwr/client/clientapp/app.py
CHANGED
@@ -29,7 +29,7 @@ from flwr.common.args import add_args_flwr_app_common
|
|
29
29
|
from flwr.common.config import get_flwr_dir
|
30
30
|
from flwr.common.constant import CLIENTAPPIO_API_DEFAULT_CLIENT_ADDRESS, ErrorCode
|
31
31
|
from flwr.common.exit import ExitCode, flwr_exit
|
32
|
-
from flwr.common.grpc import create_channel
|
32
|
+
from flwr.common.grpc import create_channel, on_channel_state_change
|
33
33
|
from flwr.common.logger import log
|
34
34
|
from flwr.common.message import Error
|
35
35
|
from flwr.common.retry_invoker import _make_simple_grpc_retry_invoker, _wrap_stub
|
@@ -66,11 +66,11 @@ def flwr_clientapp() -> None:
|
|
66
66
|
"flwr-clientapp does not support TLS yet.",
|
67
67
|
)
|
68
68
|
|
69
|
-
log(INFO, "
|
69
|
+
log(INFO, "Start `flwr-clientapp` process")
|
70
70
|
log(
|
71
71
|
DEBUG,
|
72
|
-
"
|
73
|
-
"with token %s",
|
72
|
+
"`flwr-clientapp` will attempt to connect to SuperNode's "
|
73
|
+
"ClientAppIo API at %s with token %s",
|
74
74
|
args.clientappio_api_address,
|
75
75
|
args.token,
|
76
76
|
)
|
@@ -83,11 +83,6 @@ def flwr_clientapp() -> None:
|
|
83
83
|
)
|
84
84
|
|
85
85
|
|
86
|
-
def on_channel_state_change(channel_connectivity: str) -> None:
|
87
|
-
"""Log channel connectivity."""
|
88
|
-
log(DEBUG, channel_connectivity)
|
89
|
-
|
90
|
-
|
91
86
|
def run_clientapp( # pylint: disable=R0914
|
92
87
|
clientappio_api_address: str,
|
93
88
|
run_once: bool,
|
@@ -116,11 +111,11 @@ def run_clientapp( # pylint: disable=R0914
|
|
116
111
|
time.sleep(1)
|
117
112
|
|
118
113
|
# Pull Message, Context, Run and (optional) FAB from SuperNode
|
119
|
-
message, context, run, fab =
|
114
|
+
message, context, run, fab = pull_clientappinputs(stub=stub, token=token)
|
120
115
|
|
121
116
|
# Install FAB, if provided
|
122
117
|
if fab:
|
123
|
-
log(DEBUG, "
|
118
|
+
log(DEBUG, "[flwr-clientapp] Start FAB installation.")
|
124
119
|
install_from_fab(fab.content, flwr_dir=flwr_dir_, skip_prompt=True)
|
125
120
|
|
126
121
|
load_client_app_fn = get_load_client_app_fn(
|
@@ -132,6 +127,7 @@ def run_clientapp( # pylint: disable=R0914
|
|
132
127
|
|
133
128
|
try:
|
134
129
|
# Load ClientApp
|
130
|
+
log(DEBUG, "[flwr-clientapp] Start `ClientApp` Loading.")
|
135
131
|
client_app: ClientApp = load_client_app_fn(
|
136
132
|
run.fab_id, run.fab_version, fab.hash_str if fab else ""
|
137
133
|
)
|
@@ -160,7 +156,7 @@ def run_clientapp( # pylint: disable=R0914
|
|
160
156
|
)
|
161
157
|
|
162
158
|
# Push Message and Context to SuperNode
|
163
|
-
_ =
|
159
|
+
_ = push_clientappoutputs(
|
164
160
|
stub=stub, token=token, message=reply_message, context=context
|
165
161
|
)
|
166
162
|
|
@@ -183,7 +179,7 @@ def run_clientapp( # pylint: disable=R0914
|
|
183
179
|
|
184
180
|
def get_token(stub: grpc.Channel) -> Optional[int]:
|
185
181
|
"""Get a token from SuperNode."""
|
186
|
-
log(DEBUG, "
|
182
|
+
log(DEBUG, "[flwr-clientapp] Request token")
|
187
183
|
try:
|
188
184
|
res: GetTokenResponse = stub.GetToken(GetTokenRequest())
|
189
185
|
log(DEBUG, "[GetToken] Received token: %s", res.token)
|
@@ -196,11 +192,11 @@ def get_token(stub: grpc.Channel) -> Optional[int]:
|
|
196
192
|
return None
|
197
193
|
|
198
194
|
|
199
|
-
def
|
195
|
+
def pull_clientappinputs(
|
200
196
|
stub: grpc.Channel, token: int
|
201
197
|
) -> tuple[Message, Context, Run, Optional[Fab]]:
|
202
|
-
"""Pull
|
203
|
-
log(INFO, "
|
198
|
+
"""Pull ClientAppInputs from SuperNode."""
|
199
|
+
log(INFO, "[flwr-clientapp] Pull `ClientAppInputs` for token %s", token)
|
204
200
|
try:
|
205
201
|
res: PullClientAppInputsResponse = stub.PullClientAppInputs(
|
206
202
|
PullClientAppInputsRequest(token=token)
|
@@ -215,11 +211,11 @@ def pull_message(
|
|
215
211
|
raise e
|
216
212
|
|
217
213
|
|
218
|
-
def
|
214
|
+
def push_clientappoutputs(
|
219
215
|
stub: grpc.Channel, token: int, message: Message, context: Context
|
220
216
|
) -> PushClientAppOutputsResponse:
|
221
|
-
"""Push
|
222
|
-
log(INFO, "
|
217
|
+
"""Push ClientAppOutputs to SuperNode."""
|
218
|
+
log(INFO, "[flwr-clientapp] Push `ClientAppOutputs` for token %s", token)
|
223
219
|
proto_message = message_to_proto(message)
|
224
220
|
proto_context = context_to_proto(context)
|
225
221
|
|
@@ -36,7 +36,7 @@ from flwr.common import (
|
|
36
36
|
from flwr.common import recordset_compat as compat
|
37
37
|
from flwr.common import serde
|
38
38
|
from flwr.common.constant import MessageType, MessageTypeLegacy
|
39
|
-
from flwr.common.grpc import create_channel
|
39
|
+
from flwr.common.grpc import create_channel, on_channel_state_change
|
40
40
|
from flwr.common.logger import log
|
41
41
|
from flwr.common.retry_invoker import RetryInvoker
|
42
42
|
from flwr.common.typing import Fab, Run
|
@@ -48,11 +48,6 @@ from flwr.proto.transport_pb2 import ( # pylint: disable=E0611
|
|
48
48
|
from flwr.proto.transport_pb2_grpc import FlowerServiceStub # pylint: disable=E0611
|
49
49
|
|
50
50
|
|
51
|
-
def on_channel_state_change(channel_connectivity: str) -> None:
|
52
|
-
"""Log channel connectivity."""
|
53
|
-
log(DEBUG, channel_connectivity)
|
54
|
-
|
55
|
-
|
56
51
|
@contextmanager
|
57
52
|
def grpc_connection( # pylint: disable=R0913,R0915,too-many-positional-arguments
|
58
53
|
server_address: str,
|
@@ -20,7 +20,7 @@ import threading
|
|
20
20
|
from collections.abc import Iterator, Sequence
|
21
21
|
from contextlib import contextmanager
|
22
22
|
from copy import copy
|
23
|
-
from logging import
|
23
|
+
from logging import ERROR
|
24
24
|
from pathlib import Path
|
25
25
|
from typing import Callable, Optional, Union, cast
|
26
26
|
|
@@ -36,10 +36,13 @@ from flwr.common.constant import (
|
|
36
36
|
PING_DEFAULT_INTERVAL,
|
37
37
|
PING_RANDOM_RANGE,
|
38
38
|
)
|
39
|
-
from flwr.common.grpc import create_channel
|
39
|
+
from flwr.common.grpc import create_channel, on_channel_state_change
|
40
40
|
from flwr.common.logger import log
|
41
41
|
from flwr.common.message import Message, Metadata
|
42
42
|
from flwr.common.retry_invoker import RetryInvoker
|
43
|
+
from flwr.common.secure_aggregation.crypto.symmetric_encryption import (
|
44
|
+
generate_key_pairs,
|
45
|
+
)
|
43
46
|
from flwr.common.serde import message_from_proto, message_to_proto, run_from_proto
|
44
47
|
from flwr.common.typing import Fab, Run, RunNotRunningException
|
45
48
|
from flwr.proto.fab_pb2 import GetFabRequest, GetFabResponse # pylint: disable=E0611
|
@@ -60,11 +63,6 @@ from .client_interceptor import AuthenticateClientInterceptor
|
|
60
63
|
from .grpc_adapter import GrpcAdapter
|
61
64
|
|
62
65
|
|
63
|
-
def on_channel_state_change(channel_connectivity: str) -> None:
|
64
|
-
"""Log channel connectivity."""
|
65
|
-
log(DEBUG, channel_connectivity)
|
66
|
-
|
67
|
-
|
68
66
|
@contextmanager
|
69
67
|
def grpc_request_response( # pylint: disable=R0913,R0914,R0915,R0917
|
70
68
|
server_address: str,
|
@@ -130,12 +128,14 @@ def grpc_request_response( # pylint: disable=R0913,R0914,R0915,R0917
|
|
130
128
|
if isinstance(root_certificates, str):
|
131
129
|
root_certificates = Path(root_certificates).read_bytes()
|
132
130
|
|
133
|
-
|
134
|
-
if authentication_keys is
|
135
|
-
|
136
|
-
authentication_keys[0], authentication_keys[1]
|
137
|
-
)
|
131
|
+
# Automatic node auth: generate keys if user didn't provide any
|
132
|
+
if authentication_keys is None:
|
133
|
+
authentication_keys = generate_key_pairs()
|
138
134
|
|
135
|
+
# Always configure auth interceptor, with either user-provided or generated keys
|
136
|
+
interceptors: Sequence[grpc.UnaryUnaryClientInterceptor] = [
|
137
|
+
AuthenticateClientInterceptor(*authentication_keys),
|
138
|
+
]
|
139
139
|
channel = create_channel(
|
140
140
|
server_address=server_address,
|
141
141
|
insecure=insecure,
|
@@ -42,12 +42,8 @@ from flwr.proto.fleet_pb2 import ( # pylint: disable=E0611
|
|
42
42
|
PingResponse,
|
43
43
|
PullMessagesRequest,
|
44
44
|
PullMessagesResponse,
|
45
|
-
PullTaskInsRequest,
|
46
|
-
PullTaskInsResponse,
|
47
45
|
PushMessagesRequest,
|
48
46
|
PushMessagesResponse,
|
49
|
-
PushTaskResRequest,
|
50
|
-
PushTaskResResponse,
|
51
47
|
)
|
52
48
|
from flwr.proto.grpcadapter_pb2 import MessageContainer # pylint: disable=E0611
|
53
49
|
from flwr.proto.grpcadapter_pb2_grpc import GrpcAdapterStub
|
@@ -130,24 +126,12 @@ class GrpcAdapter:
|
|
130
126
|
"""."""
|
131
127
|
return self._send_and_receive(request, PingResponse, **kwargs)
|
132
128
|
|
133
|
-
def PullTaskIns( # pylint: disable=C0103
|
134
|
-
self, request: PullTaskInsRequest, **kwargs: Any
|
135
|
-
) -> PullTaskInsResponse:
|
136
|
-
"""."""
|
137
|
-
return self._send_and_receive(request, PullTaskInsResponse, **kwargs)
|
138
|
-
|
139
129
|
def PullMessages( # pylint: disable=C0103
|
140
130
|
self, request: PullMessagesRequest, **kwargs: Any
|
141
131
|
) -> PullMessagesResponse:
|
142
132
|
"""."""
|
143
133
|
return self._send_and_receive(request, PullMessagesResponse, **kwargs)
|
144
134
|
|
145
|
-
def PushTaskRes( # pylint: disable=C0103
|
146
|
-
self, request: PushTaskResRequest, **kwargs: Any
|
147
|
-
) -> PushTaskResResponse:
|
148
|
-
"""."""
|
149
|
-
return self._send_and_receive(request, PushTaskResResponse, **kwargs)
|
150
|
-
|
151
135
|
def PushMessages( # pylint: disable=C0103
|
152
136
|
self, request: PushMessagesRequest, **kwargs: Any
|
153
137
|
) -> PushMessagesResponse:
|
@@ -15,9 +15,6 @@
|
|
15
15
|
"""Task handling."""
|
16
16
|
|
17
17
|
|
18
|
-
from typing import Optional
|
19
|
-
|
20
|
-
from flwr.proto.fleet_pb2 import PullTaskInsResponse # pylint: disable=E0611
|
21
18
|
from flwr.proto.task_pb2 import TaskIns # pylint: disable=E0611
|
22
19
|
|
23
20
|
|
@@ -38,17 +35,3 @@ def validate_task_ins(task_ins: TaskIns) -> bool:
|
|
38
35
|
if not (task_ins.HasField("task") and task_ins.task.HasField("recordset")):
|
39
36
|
return False
|
40
37
|
return True
|
41
|
-
|
42
|
-
|
43
|
-
def get_task_ins(
|
44
|
-
pull_task_ins_response: PullTaskInsResponse,
|
45
|
-
) -> Optional[TaskIns]:
|
46
|
-
"""Get the first TaskIns, if available."""
|
47
|
-
# Extract a single ServerMessage from the response, if possible
|
48
|
-
if len(pull_task_ins_response.task_ins_list) == 0:
|
49
|
-
return None
|
50
|
-
|
51
|
-
# Only evaluate the first message
|
52
|
-
task_ins: TaskIns = pull_task_ins_response.task_ins_list[0]
|
53
|
-
|
54
|
-
return task_ins
|
flwr/client/supernode/app.py
CHANGED
@@ -16,7 +16,6 @@
|
|
16
16
|
|
17
17
|
|
18
18
|
import argparse
|
19
|
-
import sys
|
20
19
|
from logging import DEBUG, ERROR, INFO, WARN
|
21
20
|
from pathlib import Path
|
22
21
|
from typing import Optional
|
@@ -65,17 +64,6 @@ def run_supernode() -> None:
|
|
65
64
|
"Ignoring `--flwr-dir`.",
|
66
65
|
)
|
67
66
|
|
68
|
-
# Exit if unsupported argument is passed by the user
|
69
|
-
if args.app is not None:
|
70
|
-
log(
|
71
|
-
ERROR,
|
72
|
-
"The `app` argument is deprecated. The SuperNode now automatically "
|
73
|
-
"uses the ClientApp delivered from the SuperLink. Providing the app "
|
74
|
-
"directory manually is no longer supported. Please remove the `app` "
|
75
|
-
"argument from your command.",
|
76
|
-
)
|
77
|
-
sys.exit(1)
|
78
|
-
|
79
67
|
root_certificates = try_obtain_root_certificates(args, args.superlink)
|
80
68
|
load_fn = get_load_client_app_fn(
|
81
69
|
default_app_ref="",
|
@@ -146,18 +134,6 @@ def _parse_args_run_supernode() -> argparse.ArgumentParser:
|
|
146
134
|
parser = argparse.ArgumentParser(
|
147
135
|
description="Start a Flower SuperNode",
|
148
136
|
)
|
149
|
-
|
150
|
-
parser.add_argument(
|
151
|
-
"app",
|
152
|
-
nargs="?",
|
153
|
-
default=None,
|
154
|
-
help=(
|
155
|
-
"(REMOVED) This argument is removed. The SuperNode now automatically "
|
156
|
-
"uses the ClientApp delivered from the SuperLink, so there is no need to "
|
157
|
-
"provide the app directory manually. This argument will be removed in a "
|
158
|
-
"future version."
|
159
|
-
),
|
160
|
-
)
|
161
137
|
_parse_args_common(parser)
|
162
138
|
parser.add_argument(
|
163
139
|
"--flwr-dir",
|
@@ -39,7 +39,8 @@ def get_norm(input_arrays: NDArrays) -> float:
|
|
39
39
|
def add_gaussian_noise_inplace(input_arrays: NDArrays, std_dev: float) -> None:
|
40
40
|
"""Add Gaussian noise to each element of the input arrays."""
|
41
41
|
for array in input_arrays:
|
42
|
-
|
42
|
+
noise = np.random.normal(0, std_dev, array.shape).astype(array.dtype)
|
43
|
+
array += noise
|
43
44
|
|
44
45
|
|
45
46
|
def clip_inputs_inplace(input_arrays: NDArrays, clipping_norm: float) -> None:
|
flwr/common/grpc.py
CHANGED
@@ -80,7 +80,7 @@ def create_channel(
|
|
80
80
|
log(DEBUG, "Opened secure gRPC connection using certificates")
|
81
81
|
|
82
82
|
if interceptors is not None:
|
83
|
-
channel = grpc.intercept_channel(channel, interceptors)
|
83
|
+
channel = grpc.intercept_channel(channel, *interceptors)
|
84
84
|
|
85
85
|
return channel
|
86
86
|
|
@@ -224,3 +224,8 @@ def generic_create_grpc_server( # pylint: disable=too-many-arguments,R0917
|
|
224
224
|
server.add_insecure_port(server_address)
|
225
225
|
|
226
226
|
return server
|
227
|
+
|
228
|
+
|
229
|
+
def on_channel_state_change(channel_connectivity: str) -> None:
|
230
|
+
"""Log channel connectivity."""
|
231
|
+
log(DEBUG, channel_connectivity)
|
flwr/proto/fleet_pb2.py
CHANGED
@@ -23,57 +23,44 @@ _sym_db = _symbol_database.Default()
|
|
23
23
|
|
24
24
|
|
25
25
|
from flwr.proto import node_pb2 as flwr_dot_proto_dot_node__pb2
|
26
|
-
from flwr.proto import task_pb2 as flwr_dot_proto_dot_task__pb2
|
27
26
|
from flwr.proto import run_pb2 as flwr_dot_proto_dot_run__pb2
|
28
27
|
from flwr.proto import fab_pb2 as flwr_dot_proto_dot_fab__pb2
|
29
28
|
from flwr.proto import message_pb2 as flwr_dot_proto_dot_message__pb2
|
30
29
|
|
31
30
|
|
32
|
-
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x16\x66lwr/proto/fleet.proto\x12\nflwr.proto\x1a\x15\x66lwr/proto/node.proto\x1a\
|
31
|
+
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\x15\n\rping_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\"D\n\x0bPingRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x15\n\rping_interval\x18\x02 \x01(\x01\"\x1f\n\x0cPingResponse\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\x92\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;\n\x04Ping\x12\x17.flwr.proto.PingRequest\x1a\x18.flwr.proto.PingResponse\"\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')
|
33
32
|
|
34
33
|
_globals = globals()
|
35
34
|
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
36
35
|
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'flwr.proto.fleet_pb2', _globals)
|
37
36
|
if not _descriptor._USE_C_DESCRIPTORS:
|
38
37
|
DESCRIPTOR._loaded_options = None
|
39
|
-
_globals['_PUSHTASKRESRESPONSE_RESULTSENTRY']._loaded_options = None
|
40
|
-
_globals['_PUSHTASKRESRESPONSE_RESULTSENTRY']._serialized_options = b'8\001'
|
41
38
|
_globals['_PUSHMESSAGESRESPONSE_RESULTSENTRY']._loaded_options = None
|
42
39
|
_globals['_PUSHMESSAGESRESPONSE_RESULTSENTRY']._serialized_options = b'8\001'
|
43
|
-
_globals['_CREATENODEREQUEST']._serialized_start=
|
44
|
-
_globals['_CREATENODEREQUEST']._serialized_end=
|
45
|
-
_globals['_CREATENODERESPONSE']._serialized_start=
|
46
|
-
_globals['_CREATENODERESPONSE']._serialized_end=
|
47
|
-
_globals['_DELETENODEREQUEST']._serialized_start=
|
48
|
-
_globals['_DELETENODEREQUEST']._serialized_end=
|
49
|
-
_globals['_DELETENODERESPONSE']._serialized_start=
|
50
|
-
_globals['_DELETENODERESPONSE']._serialized_end=
|
51
|
-
_globals['_PINGREQUEST']._serialized_start=
|
52
|
-
_globals['_PINGREQUEST']._serialized_end=
|
53
|
-
_globals['_PINGRESPONSE']._serialized_start=
|
54
|
-
_globals['_PINGRESPONSE']._serialized_end=
|
55
|
-
_globals['
|
56
|
-
_globals['
|
57
|
-
_globals['
|
58
|
-
_globals['
|
59
|
-
_globals['
|
60
|
-
_globals['
|
61
|
-
_globals['
|
62
|
-
_globals['
|
63
|
-
_globals['
|
64
|
-
_globals['
|
65
|
-
_globals['
|
66
|
-
_globals['
|
67
|
-
_globals['
|
68
|
-
_globals['
|
69
|
-
_globals['_PUSHMESSAGESREQUEST']._serialized_start=1072
|
70
|
-
_globals['_PUSHMESSAGESREQUEST']._serialized_end=1169
|
71
|
-
_globals['_PUSHMESSAGESRESPONSE']._serialized_start=1172
|
72
|
-
_globals['_PUSHMESSAGESRESPONSE']._serialized_end=1348
|
73
|
-
_globals['_PUSHMESSAGESRESPONSE_RESULTSENTRY']._serialized_start=838
|
74
|
-
_globals['_PUSHMESSAGESRESPONSE_RESULTSENTRY']._serialized_end=884
|
75
|
-
_globals['_RECONNECT']._serialized_start=1350
|
76
|
-
_globals['_RECONNECT']._serialized_end=1380
|
77
|
-
_globals['_FLEET']._serialized_start=1383
|
78
|
-
_globals['_FLEET']._serialized_end=2077
|
40
|
+
_globals['_CREATENODEREQUEST']._serialized_start=131
|
41
|
+
_globals['_CREATENODEREQUEST']._serialized_end=173
|
42
|
+
_globals['_CREATENODERESPONSE']._serialized_start=175
|
43
|
+
_globals['_CREATENODERESPONSE']._serialized_end=227
|
44
|
+
_globals['_DELETENODEREQUEST']._serialized_start=229
|
45
|
+
_globals['_DELETENODEREQUEST']._serialized_end=280
|
46
|
+
_globals['_DELETENODERESPONSE']._serialized_start=282
|
47
|
+
_globals['_DELETENODERESPONSE']._serialized_end=302
|
48
|
+
_globals['_PINGREQUEST']._serialized_start=304
|
49
|
+
_globals['_PINGREQUEST']._serialized_end=372
|
50
|
+
_globals['_PINGRESPONSE']._serialized_start=374
|
51
|
+
_globals['_PINGRESPONSE']._serialized_end=405
|
52
|
+
_globals['_PULLMESSAGESREQUEST']._serialized_start=407
|
53
|
+
_globals['_PULLMESSAGESREQUEST']._serialized_end=481
|
54
|
+
_globals['_PULLMESSAGESRESPONSE']._serialized_start=483
|
55
|
+
_globals['_PULLMESSAGESRESPONSE']._serialized_end=591
|
56
|
+
_globals['_PUSHMESSAGESREQUEST']._serialized_start=593
|
57
|
+
_globals['_PUSHMESSAGESREQUEST']._serialized_end=690
|
58
|
+
_globals['_PUSHMESSAGESRESPONSE']._serialized_start=693
|
59
|
+
_globals['_PUSHMESSAGESRESPONSE']._serialized_end=869
|
60
|
+
_globals['_PUSHMESSAGESRESPONSE_RESULTSENTRY']._serialized_start=823
|
61
|
+
_globals['_PUSHMESSAGESRESPONSE_RESULTSENTRY']._serialized_end=869
|
62
|
+
_globals['_RECONNECT']._serialized_start=871
|
63
|
+
_globals['_RECONNECT']._serialized_end=901
|
64
|
+
_globals['_FLEET']._serialized_start=904
|
65
|
+
_globals['_FLEET']._serialized_end=1434
|
79
66
|
# @@protoc_insertion_point(module_scope)
|
flwr/proto/fleet_pb2.pyi
CHANGED
@@ -5,7 +5,6 @@ isort:skip_file
|
|
5
5
|
import builtins
|
6
6
|
import flwr.proto.message_pb2
|
7
7
|
import flwr.proto.node_pb2
|
8
|
-
import flwr.proto.task_pb2
|
9
8
|
import google.protobuf.descriptor
|
10
9
|
import google.protobuf.internal.containers
|
11
10
|
import google.protobuf.message
|
@@ -87,89 +86,6 @@ class PingResponse(google.protobuf.message.Message):
|
|
87
86
|
def ClearField(self, field_name: typing_extensions.Literal["success",b"success"]) -> None: ...
|
88
87
|
global___PingResponse = PingResponse
|
89
88
|
|
90
|
-
class PullTaskInsRequest(google.protobuf.message.Message):
|
91
|
-
"""PullTaskIns messages"""
|
92
|
-
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
93
|
-
NODE_FIELD_NUMBER: builtins.int
|
94
|
-
TASK_IDS_FIELD_NUMBER: builtins.int
|
95
|
-
@property
|
96
|
-
def node(self) -> flwr.proto.node_pb2.Node: ...
|
97
|
-
@property
|
98
|
-
def task_ids(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[typing.Text]: ...
|
99
|
-
def __init__(self,
|
100
|
-
*,
|
101
|
-
node: typing.Optional[flwr.proto.node_pb2.Node] = ...,
|
102
|
-
task_ids: typing.Optional[typing.Iterable[typing.Text]] = ...,
|
103
|
-
) -> None: ...
|
104
|
-
def HasField(self, field_name: typing_extensions.Literal["node",b"node"]) -> builtins.bool: ...
|
105
|
-
def ClearField(self, field_name: typing_extensions.Literal["node",b"node","task_ids",b"task_ids"]) -> None: ...
|
106
|
-
global___PullTaskInsRequest = PullTaskInsRequest
|
107
|
-
|
108
|
-
class PullTaskInsResponse(google.protobuf.message.Message):
|
109
|
-
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
110
|
-
RECONNECT_FIELD_NUMBER: builtins.int
|
111
|
-
TASK_INS_LIST_FIELD_NUMBER: builtins.int
|
112
|
-
@property
|
113
|
-
def reconnect(self) -> global___Reconnect: ...
|
114
|
-
@property
|
115
|
-
def task_ins_list(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[flwr.proto.task_pb2.TaskIns]: ...
|
116
|
-
def __init__(self,
|
117
|
-
*,
|
118
|
-
reconnect: typing.Optional[global___Reconnect] = ...,
|
119
|
-
task_ins_list: typing.Optional[typing.Iterable[flwr.proto.task_pb2.TaskIns]] = ...,
|
120
|
-
) -> None: ...
|
121
|
-
def HasField(self, field_name: typing_extensions.Literal["reconnect",b"reconnect"]) -> builtins.bool: ...
|
122
|
-
def ClearField(self, field_name: typing_extensions.Literal["reconnect",b"reconnect","task_ins_list",b"task_ins_list"]) -> None: ...
|
123
|
-
global___PullTaskInsResponse = PullTaskInsResponse
|
124
|
-
|
125
|
-
class PushTaskResRequest(google.protobuf.message.Message):
|
126
|
-
"""PushTaskRes messages"""
|
127
|
-
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
128
|
-
NODE_FIELD_NUMBER: builtins.int
|
129
|
-
TASK_RES_LIST_FIELD_NUMBER: builtins.int
|
130
|
-
@property
|
131
|
-
def node(self) -> flwr.proto.node_pb2.Node: ...
|
132
|
-
@property
|
133
|
-
def task_res_list(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[flwr.proto.task_pb2.TaskRes]: ...
|
134
|
-
def __init__(self,
|
135
|
-
*,
|
136
|
-
node: typing.Optional[flwr.proto.node_pb2.Node] = ...,
|
137
|
-
task_res_list: typing.Optional[typing.Iterable[flwr.proto.task_pb2.TaskRes]] = ...,
|
138
|
-
) -> None: ...
|
139
|
-
def HasField(self, field_name: typing_extensions.Literal["node",b"node"]) -> builtins.bool: ...
|
140
|
-
def ClearField(self, field_name: typing_extensions.Literal["node",b"node","task_res_list",b"task_res_list"]) -> None: ...
|
141
|
-
global___PushTaskResRequest = PushTaskResRequest
|
142
|
-
|
143
|
-
class PushTaskResResponse(google.protobuf.message.Message):
|
144
|
-
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
145
|
-
class ResultsEntry(google.protobuf.message.Message):
|
146
|
-
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
147
|
-
KEY_FIELD_NUMBER: builtins.int
|
148
|
-
VALUE_FIELD_NUMBER: builtins.int
|
149
|
-
key: typing.Text
|
150
|
-
value: builtins.int
|
151
|
-
def __init__(self,
|
152
|
-
*,
|
153
|
-
key: typing.Text = ...,
|
154
|
-
value: builtins.int = ...,
|
155
|
-
) -> None: ...
|
156
|
-
def ClearField(self, field_name: typing_extensions.Literal["key",b"key","value",b"value"]) -> None: ...
|
157
|
-
|
158
|
-
RECONNECT_FIELD_NUMBER: builtins.int
|
159
|
-
RESULTS_FIELD_NUMBER: builtins.int
|
160
|
-
@property
|
161
|
-
def reconnect(self) -> global___Reconnect: ...
|
162
|
-
@property
|
163
|
-
def results(self) -> google.protobuf.internal.containers.ScalarMap[typing.Text, builtins.int]: ...
|
164
|
-
def __init__(self,
|
165
|
-
*,
|
166
|
-
reconnect: typing.Optional[global___Reconnect] = ...,
|
167
|
-
results: typing.Optional[typing.Mapping[typing.Text, builtins.int]] = ...,
|
168
|
-
) -> None: ...
|
169
|
-
def HasField(self, field_name: typing_extensions.Literal["reconnect",b"reconnect"]) -> builtins.bool: ...
|
170
|
-
def ClearField(self, field_name: typing_extensions.Literal["reconnect",b"reconnect","results",b"results"]) -> None: ...
|
171
|
-
global___PushTaskResResponse = PushTaskResResponse
|
172
|
-
|
173
89
|
class PullMessagesRequest(google.protobuf.message.Message):
|
174
90
|
"""PullMessages messages"""
|
175
91
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|