flwr-nightly 1.12.0.dev20240925__py3-none-any.whl → 1.12.0.dev20240927__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.
Potentially problematic release.
This version of flwr-nightly might be problematic. Click here for more details.
- flwr/cli/log.py +57 -19
- flwr/cli/new/templates/app/README.flowertune.md.tpl +1 -1
- flwr/cli/run/run.py +17 -1
- flwr/client/grpc_rere_client/client_interceptor.py +3 -0
- flwr/client/grpc_rere_client/connection.py +3 -3
- flwr/client/rest_client/connection.py +3 -3
- flwr/common/secure_aggregation/secaggplus_utils.py +4 -4
- flwr/common/serde.py +22 -7
- flwr/proto/fab_pb2.py +8 -7
- flwr/proto/fab_pb2.pyi +7 -1
- flwr/proto/fleet_pb2.py +10 -10
- flwr/proto/fleet_pb2.pyi +6 -1
- flwr/proto/recordset_pb2.py +35 -33
- flwr/proto/recordset_pb2.pyi +40 -14
- flwr/proto/run_pb2.py +28 -27
- flwr/proto/run_pb2.pyi +13 -2
- flwr/proto/transport_pb2.py +8 -8
- flwr/proto/transport_pb2.pyi +9 -6
- flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +4 -0
- flwr/server/superlink/state/in_memory_state.py +17 -0
- flwr/server/superlink/state/sqlite_state.py +39 -1
- flwr/server/utils/validator.py +6 -0
- {flwr_nightly-1.12.0.dev20240925.dist-info → flwr_nightly-1.12.0.dev20240927.dist-info}/METADATA +2 -1
- {flwr_nightly-1.12.0.dev20240925.dist-info → flwr_nightly-1.12.0.dev20240927.dist-info}/RECORD +27 -27
- {flwr_nightly-1.12.0.dev20240925.dist-info → flwr_nightly-1.12.0.dev20240927.dist-info}/LICENSE +0 -0
- {flwr_nightly-1.12.0.dev20240925.dist-info → flwr_nightly-1.12.0.dev20240927.dist-info}/WHEEL +0 -0
- {flwr_nightly-1.12.0.dev20240925.dist-info → flwr_nightly-1.12.0.dev20240927.dist-info}/entry_points.txt +0 -0
flwr/cli/log.py
CHANGED
|
@@ -26,18 +26,71 @@ import typer
|
|
|
26
26
|
from flwr.cli.config_utils import load_and_validate
|
|
27
27
|
from flwr.common.grpc import GRPC_MAX_MESSAGE_LENGTH, create_channel
|
|
28
28
|
from flwr.common.logger import log as logger
|
|
29
|
+
from flwr.proto.exec_pb2 import StreamLogsRequest # pylint: disable=E0611
|
|
30
|
+
from flwr.proto.exec_pb2_grpc import ExecStub
|
|
29
31
|
|
|
30
32
|
CONN_REFRESH_PERIOD = 60 # Connection refresh period for log streaming (seconds)
|
|
31
33
|
|
|
32
34
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
+
def start_stream(
|
|
36
|
+
run_id: int, channel: grpc.Channel, refresh_period: int = CONN_REFRESH_PERIOD
|
|
37
|
+
) -> None:
|
|
38
|
+
"""Start log streaming for a given run ID."""
|
|
39
|
+
try:
|
|
40
|
+
while True:
|
|
41
|
+
logger(INFO, "Starting logstream for run_id `%s`", run_id)
|
|
42
|
+
stream_logs(run_id, channel, refresh_period)
|
|
43
|
+
time.sleep(2)
|
|
44
|
+
logger(DEBUG, "Reconnecting to logstream")
|
|
45
|
+
except KeyboardInterrupt:
|
|
46
|
+
logger(INFO, "Exiting logstream")
|
|
47
|
+
except grpc.RpcError as e:
|
|
48
|
+
# pylint: disable=E1101
|
|
49
|
+
if e.code() == grpc.StatusCode.NOT_FOUND:
|
|
50
|
+
logger(ERROR, "Invalid run_id `%s`, exiting", run_id)
|
|
51
|
+
if e.code() == grpc.StatusCode.CANCELLED:
|
|
52
|
+
pass
|
|
53
|
+
finally:
|
|
54
|
+
channel.close()
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def stream_logs(run_id: int, channel: grpc.Channel, duration: int) -> None:
|
|
35
58
|
"""Stream logs from the beginning of a run with connection refresh."""
|
|
59
|
+
start_time = time.time()
|
|
60
|
+
stub = ExecStub(channel)
|
|
61
|
+
req = StreamLogsRequest(run_id=run_id)
|
|
62
|
+
|
|
63
|
+
for res in stub.StreamLogs(req):
|
|
64
|
+
print(res.log_output)
|
|
65
|
+
if time.time() - start_time > duration:
|
|
66
|
+
break
|
|
36
67
|
|
|
37
68
|
|
|
38
|
-
# pylint: disable=unused-argument
|
|
39
69
|
def print_logs(run_id: int, channel: grpc.Channel, timeout: int) -> None:
|
|
40
70
|
"""Print logs from the beginning of a run."""
|
|
71
|
+
stub = ExecStub(channel)
|
|
72
|
+
req = StreamLogsRequest(run_id=run_id)
|
|
73
|
+
|
|
74
|
+
try:
|
|
75
|
+
while True:
|
|
76
|
+
try:
|
|
77
|
+
# Enforce timeout for graceful exit
|
|
78
|
+
for res in stub.StreamLogs(req, timeout=timeout):
|
|
79
|
+
print(res.log_output)
|
|
80
|
+
except grpc.RpcError as e:
|
|
81
|
+
# pylint: disable=E1101
|
|
82
|
+
if e.code() == grpc.StatusCode.DEADLINE_EXCEEDED:
|
|
83
|
+
break
|
|
84
|
+
if e.code() == grpc.StatusCode.NOT_FOUND:
|
|
85
|
+
logger(ERROR, "Invalid run_id `%s`, exiting", run_id)
|
|
86
|
+
break
|
|
87
|
+
if e.code() == grpc.StatusCode.CANCELLED:
|
|
88
|
+
break
|
|
89
|
+
except KeyboardInterrupt:
|
|
90
|
+
logger(DEBUG, "Stream interrupted by user")
|
|
91
|
+
finally:
|
|
92
|
+
channel.close()
|
|
93
|
+
logger(DEBUG, "Channel closed")
|
|
41
94
|
|
|
42
95
|
|
|
43
96
|
def on_channel_state_change(channel_connectivity: str) -> None:
|
|
@@ -175,22 +228,7 @@ def _log_with_superexec(
|
|
|
175
228
|
channel.subscribe(on_channel_state_change)
|
|
176
229
|
|
|
177
230
|
if stream:
|
|
178
|
-
|
|
179
|
-
while True:
|
|
180
|
-
logger(INFO, "Starting logstream for run_id `%s`", run_id)
|
|
181
|
-
stream_logs(run_id, channel, CONN_REFRESH_PERIOD)
|
|
182
|
-
time.sleep(2)
|
|
183
|
-
logger(DEBUG, "Reconnecting to logstream")
|
|
184
|
-
except KeyboardInterrupt:
|
|
185
|
-
logger(INFO, "Exiting logstream")
|
|
186
|
-
except grpc.RpcError as e:
|
|
187
|
-
# pylint: disable=E1101
|
|
188
|
-
if e.code() == grpc.StatusCode.NOT_FOUND:
|
|
189
|
-
logger(ERROR, "Invalid run_id `%s`, exiting", run_id)
|
|
190
|
-
if e.code() == grpc.StatusCode.CANCELLED:
|
|
191
|
-
pass
|
|
192
|
-
finally:
|
|
193
|
-
channel.close()
|
|
231
|
+
start_stream(run_id, channel, CONN_REFRESH_PERIOD)
|
|
194
232
|
else:
|
|
195
233
|
logger(INFO, "Printing logstream for run_id `%s`", run_id)
|
|
196
234
|
print_logs(run_id, channel, timeout=5)
|
|
@@ -55,7 +55,7 @@ We use Mistral-7B model with 4-bit quantization as default. The estimated VRAM c
|
|
|
55
55
|
| :--------: | :--------: | :--------: | :--------: | :--------: |
|
|
56
56
|
| VRAM | ~25.50 GB | ~17.30 GB | ~22.80 GB | ~17.40 GB |
|
|
57
57
|
|
|
58
|
-
You can adjust the CPU/GPU resources you assign to each of the clients based on your device, which are specified with `options.backend.
|
|
58
|
+
You can adjust the CPU/GPU resources you assign to each of the clients based on your device, which are specified with `options.backend.client-resources.num-cpus` and `options.backend.client-resources.num-gpus` under `[tool.flwr.federations.local-simulation]` entry in `pyproject.toml`.
|
|
59
59
|
|
|
60
60
|
|
|
61
61
|
## Model saving
|
flwr/cli/run/run.py
CHANGED
|
@@ -34,6 +34,10 @@ from flwr.common.typing import Fab
|
|
|
34
34
|
from flwr.proto.exec_pb2 import StartRunRequest # pylint: disable=E0611
|
|
35
35
|
from flwr.proto.exec_pb2_grpc import ExecStub
|
|
36
36
|
|
|
37
|
+
from ..log import start_stream
|
|
38
|
+
|
|
39
|
+
CONN_REFRESH_PERIOD = 60 # Connection refresh period for log streaming (seconds)
|
|
40
|
+
|
|
37
41
|
|
|
38
42
|
def on_channel_state_change(channel_connectivity: str) -> None:
|
|
39
43
|
"""Log channel connectivity."""
|
|
@@ -62,6 +66,14 @@ def run(
|
|
|
62
66
|
"inside the `pyproject.toml` in order to be properly overriden.",
|
|
63
67
|
),
|
|
64
68
|
] = None,
|
|
69
|
+
stream: Annotated[
|
|
70
|
+
bool,
|
|
71
|
+
typer.Option(
|
|
72
|
+
"--stream",
|
|
73
|
+
help="Use `--stream` with `flwr run` to display logs;\n "
|
|
74
|
+
"logs are not streamed by default.",
|
|
75
|
+
),
|
|
76
|
+
] = False,
|
|
65
77
|
) -> None:
|
|
66
78
|
"""Run Flower App."""
|
|
67
79
|
typer.secho("Loading project configuration... ", fg=typer.colors.BLUE)
|
|
@@ -117,7 +129,7 @@ def run(
|
|
|
117
129
|
raise typer.Exit(code=1)
|
|
118
130
|
|
|
119
131
|
if "address" in federation_config:
|
|
120
|
-
_run_with_superexec(app, federation_config, config_overrides)
|
|
132
|
+
_run_with_superexec(app, federation_config, config_overrides, stream)
|
|
121
133
|
else:
|
|
122
134
|
_run_without_superexec(app, federation_config, config_overrides, federation)
|
|
123
135
|
|
|
@@ -126,6 +138,7 @@ def _run_with_superexec(
|
|
|
126
138
|
app: Path,
|
|
127
139
|
federation_config: dict[str, Any],
|
|
128
140
|
config_overrides: Optional[list[str]],
|
|
141
|
+
stream: bool,
|
|
129
142
|
) -> None:
|
|
130
143
|
|
|
131
144
|
insecure_str = federation_config.get("insecure")
|
|
@@ -183,6 +196,9 @@ def _run_with_superexec(
|
|
|
183
196
|
fab_path.unlink()
|
|
184
197
|
typer.secho(f"🎊 Successfully started run {res.run_id}", fg=typer.colors.GREEN)
|
|
185
198
|
|
|
199
|
+
if stream:
|
|
200
|
+
start_stream(res.run_id, channel, CONN_REFRESH_PERIOD)
|
|
201
|
+
|
|
186
202
|
|
|
187
203
|
def _run_without_superexec(
|
|
188
204
|
app: Optional[Path],
|
|
@@ -31,6 +31,7 @@ from flwr.common.secure_aggregation.crypto.symmetric_encryption import (
|
|
|
31
31
|
generate_shared_key,
|
|
32
32
|
public_key_to_bytes,
|
|
33
33
|
)
|
|
34
|
+
from flwr.proto.fab_pb2 import GetFabRequest # pylint: disable=E0611
|
|
34
35
|
from flwr.proto.fleet_pb2 import ( # pylint: disable=E0611
|
|
35
36
|
CreateNodeRequest,
|
|
36
37
|
DeleteNodeRequest,
|
|
@@ -50,6 +51,7 @@ Request = Union[
|
|
|
50
51
|
PushTaskResRequest,
|
|
51
52
|
GetRunRequest,
|
|
52
53
|
PingRequest,
|
|
54
|
+
GetFabRequest,
|
|
53
55
|
]
|
|
54
56
|
|
|
55
57
|
|
|
@@ -126,6 +128,7 @@ class AuthenticateClientInterceptor(grpc.UnaryUnaryClientInterceptor): # type:
|
|
|
126
128
|
PushTaskResRequest,
|
|
127
129
|
GetRunRequest,
|
|
128
130
|
PingRequest,
|
|
131
|
+
GetFabRequest,
|
|
129
132
|
),
|
|
130
133
|
):
|
|
131
134
|
if self.shared_secret is None:
|
|
@@ -269,7 +269,7 @@ def grpc_request_response( # pylint: disable=R0913, R0914, R0915
|
|
|
269
269
|
task_res = message_to_taskres(message)
|
|
270
270
|
|
|
271
271
|
# Serialize ProtoBuf to bytes
|
|
272
|
-
request = PushTaskResRequest(task_res_list=[task_res])
|
|
272
|
+
request = PushTaskResRequest(node=node, task_res_list=[task_res])
|
|
273
273
|
_ = retry_invoker.invoke(stub.PushTaskRes, request)
|
|
274
274
|
|
|
275
275
|
# Cleanup
|
|
@@ -277,7 +277,7 @@ def grpc_request_response( # pylint: disable=R0913, R0914, R0915
|
|
|
277
277
|
|
|
278
278
|
def get_run(run_id: int) -> Run:
|
|
279
279
|
# Call FleetAPI
|
|
280
|
-
get_run_request = GetRunRequest(run_id=run_id)
|
|
280
|
+
get_run_request = GetRunRequest(node=node, run_id=run_id)
|
|
281
281
|
get_run_response: GetRunResponse = retry_invoker.invoke(
|
|
282
282
|
stub.GetRun,
|
|
283
283
|
request=get_run_request,
|
|
@@ -294,7 +294,7 @@ def grpc_request_response( # pylint: disable=R0913, R0914, R0915
|
|
|
294
294
|
|
|
295
295
|
def get_fab(fab_hash: str) -> Fab:
|
|
296
296
|
# Call FleetAPI
|
|
297
|
-
get_fab_request = GetFabRequest(hash_str=fab_hash)
|
|
297
|
+
get_fab_request = GetFabRequest(node=node, hash_str=fab_hash)
|
|
298
298
|
get_fab_response: GetFabResponse = retry_invoker.invoke(
|
|
299
299
|
stub.GetFab,
|
|
300
300
|
request=get_fab_request,
|
|
@@ -340,7 +340,7 @@ def http_request_response( # pylint: disable=,R0913, R0914, R0915
|
|
|
340
340
|
task_res = message_to_taskres(message)
|
|
341
341
|
|
|
342
342
|
# Serialize ProtoBuf to bytes
|
|
343
|
-
req = PushTaskResRequest(task_res_list=[task_res])
|
|
343
|
+
req = PushTaskResRequest(node=node, task_res_list=[task_res])
|
|
344
344
|
|
|
345
345
|
# Send the request
|
|
346
346
|
res = _request(req, PushTaskResResponse, PATH_PUSH_TASK_RES)
|
|
@@ -356,7 +356,7 @@ def http_request_response( # pylint: disable=,R0913, R0914, R0915
|
|
|
356
356
|
|
|
357
357
|
def get_run(run_id: int) -> Run:
|
|
358
358
|
# Construct the request
|
|
359
|
-
req = GetRunRequest(run_id=run_id)
|
|
359
|
+
req = GetRunRequest(node=node, run_id=run_id)
|
|
360
360
|
|
|
361
361
|
# Send the request
|
|
362
362
|
res = _request(req, GetRunResponse, PATH_GET_RUN)
|
|
@@ -373,7 +373,7 @@ def http_request_response( # pylint: disable=,R0913, R0914, R0915
|
|
|
373
373
|
|
|
374
374
|
def get_fab(fab_hash: str) -> Fab:
|
|
375
375
|
# Construct the request
|
|
376
|
-
req = GetFabRequest(hash_str=fab_hash)
|
|
376
|
+
req = GetFabRequest(node=node, hash_str=fab_hash)
|
|
377
377
|
|
|
378
378
|
# Send the request
|
|
379
379
|
res = _request(req, GetFabResponse, PATH_GET_FAB)
|
|
@@ -43,8 +43,8 @@ def share_keys_plaintext_concat(
|
|
|
43
43
|
"""
|
|
44
44
|
return b"".join(
|
|
45
45
|
[
|
|
46
|
-
int.to_bytes(src_node_id, 8, "little", signed=
|
|
47
|
-
int.to_bytes(dst_node_id, 8, "little", signed=
|
|
46
|
+
int.to_bytes(src_node_id, 8, "little", signed=False),
|
|
47
|
+
int.to_bytes(dst_node_id, 8, "little", signed=False),
|
|
48
48
|
int.to_bytes(len(b_share), 4, "little"),
|
|
49
49
|
b_share,
|
|
50
50
|
sk_share,
|
|
@@ -72,8 +72,8 @@ def share_keys_plaintext_separate(plaintext: bytes) -> tuple[int, int, bytes, by
|
|
|
72
72
|
the secret key share of the source sent to the destination.
|
|
73
73
|
"""
|
|
74
74
|
src, dst, mark = (
|
|
75
|
-
int.from_bytes(plaintext[:8], "little", signed=
|
|
76
|
-
int.from_bytes(plaintext[8:16], "little", signed=
|
|
75
|
+
int.from_bytes(plaintext[:8], "little", signed=False),
|
|
76
|
+
int.from_bytes(plaintext[8:16], "little", signed=False),
|
|
77
77
|
int.from_bytes(plaintext[16:20], "little"),
|
|
78
78
|
)
|
|
79
79
|
ret = (src, dst, plaintext[20 : 20 + mark], plaintext[20 + mark :])
|
flwr/common/serde.py
CHANGED
|
@@ -38,7 +38,7 @@ from flwr.proto.recordset_pb2 import MetricsRecord as ProtoMetricsRecord
|
|
|
38
38
|
from flwr.proto.recordset_pb2 import MetricsRecordValue as ProtoMetricsRecordValue
|
|
39
39
|
from flwr.proto.recordset_pb2 import ParametersRecord as ProtoParametersRecord
|
|
40
40
|
from flwr.proto.recordset_pb2 import RecordSet as ProtoRecordSet
|
|
41
|
-
from flwr.proto.recordset_pb2 import
|
|
41
|
+
from flwr.proto.recordset_pb2 import SintList, StringList, UintList
|
|
42
42
|
from flwr.proto.run_pb2 import Run as ProtoRun
|
|
43
43
|
from flwr.proto.task_pb2 import Task, TaskIns, TaskRes
|
|
44
44
|
from flwr.proto.transport_pb2 import (
|
|
@@ -340,6 +340,7 @@ def metrics_from_proto(proto: Any) -> typing.Metrics:
|
|
|
340
340
|
|
|
341
341
|
|
|
342
342
|
# === Scalar messages ===
|
|
343
|
+
INT64_MAX_VALUE = 9223372036854775807 # (1 << 63) - 1
|
|
343
344
|
|
|
344
345
|
|
|
345
346
|
def scalar_to_proto(scalar: typing.Scalar) -> Scalar:
|
|
@@ -354,6 +355,9 @@ def scalar_to_proto(scalar: typing.Scalar) -> Scalar:
|
|
|
354
355
|
return Scalar(double=scalar)
|
|
355
356
|
|
|
356
357
|
if isinstance(scalar, int):
|
|
358
|
+
# Use uint64 for integers larger than the maximum value of sint64
|
|
359
|
+
if scalar > INT64_MAX_VALUE:
|
|
360
|
+
return Scalar(uint64=scalar)
|
|
357
361
|
return Scalar(sint64=scalar)
|
|
358
362
|
|
|
359
363
|
if isinstance(scalar, str):
|
|
@@ -374,16 +378,16 @@ def scalar_from_proto(scalar_msg: Scalar) -> typing.Scalar:
|
|
|
374
378
|
# === Record messages ===
|
|
375
379
|
|
|
376
380
|
|
|
377
|
-
_type_to_field = {
|
|
381
|
+
_type_to_field: dict[type, str] = {
|
|
378
382
|
float: "double",
|
|
379
383
|
int: "sint64",
|
|
380
384
|
bool: "bool",
|
|
381
385
|
str: "string",
|
|
382
386
|
bytes: "bytes",
|
|
383
387
|
}
|
|
384
|
-
_list_type_to_class_and_field = {
|
|
388
|
+
_list_type_to_class_and_field: dict[type, tuple[type[GrpcMessage], str]] = {
|
|
385
389
|
float: (DoubleList, "double_list"),
|
|
386
|
-
int: (
|
|
390
|
+
int: (SintList, "sint_list"),
|
|
387
391
|
bool: (BoolList, "bool_list"),
|
|
388
392
|
str: (StringList, "string_list"),
|
|
389
393
|
bytes: (BytesList, "bytes_list"),
|
|
@@ -391,6 +395,11 @@ _list_type_to_class_and_field = {
|
|
|
391
395
|
T = TypeVar("T")
|
|
392
396
|
|
|
393
397
|
|
|
398
|
+
def _is_uint64(value: Any) -> bool:
|
|
399
|
+
"""Check if a value is uint64."""
|
|
400
|
+
return isinstance(value, int) and value > INT64_MAX_VALUE
|
|
401
|
+
|
|
402
|
+
|
|
394
403
|
def _record_value_to_proto(
|
|
395
404
|
value: Any, allowed_types: list[type], proto_class: type[T]
|
|
396
405
|
) -> T:
|
|
@@ -403,12 +412,18 @@ def _record_value_to_proto(
|
|
|
403
412
|
# Single element
|
|
404
413
|
# Note: `isinstance(False, int) == True`.
|
|
405
414
|
if isinstance(value, t):
|
|
406
|
-
|
|
415
|
+
fld = _type_to_field[t]
|
|
416
|
+
if t is int and _is_uint64(value):
|
|
417
|
+
fld = "uint64"
|
|
418
|
+
arg[fld] = value
|
|
407
419
|
return proto_class(**arg)
|
|
408
420
|
# List
|
|
409
421
|
if isinstance(value, list) and all(isinstance(item, t) for item in value):
|
|
410
|
-
list_class,
|
|
411
|
-
|
|
422
|
+
list_class, fld = _list_type_to_class_and_field[t]
|
|
423
|
+
# Use UintList if any element is of type `uint64`.
|
|
424
|
+
if t is int and any(_is_uint64(v) for v in value):
|
|
425
|
+
list_class, fld = UintList, "uint_list"
|
|
426
|
+
arg[fld] = list_class(vals=value)
|
|
412
427
|
return proto_class(**arg)
|
|
413
428
|
# Invalid types
|
|
414
429
|
raise TypeError(
|
flwr/proto/fab_pb2.py
CHANGED
|
@@ -12,19 +12,20 @@ from google.protobuf.internal import builder as _builder
|
|
|
12
12
|
_sym_db = _symbol_database.Default()
|
|
13
13
|
|
|
14
14
|
|
|
15
|
+
from flwr.proto import node_pb2 as flwr_dot_proto_dot_node__pb2
|
|
15
16
|
|
|
16
17
|
|
|
17
|
-
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x14\x66lwr/proto/fab.proto\x12\nflwr.proto\"(\n\x03\x46\x61\x62\x12\x10\n\x08hash_str\x18\x01 \x01(\t\x12\x0f\n\x07\x63ontent\x18\x02 \x01(\x0c\"
|
|
18
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x14\x66lwr/proto/fab.proto\x12\nflwr.proto\x1a\x15\x66lwr/proto/node.proto\"(\n\x03\x46\x61\x62\x12\x10\n\x08hash_str\x18\x01 \x01(\t\x12\x0f\n\x07\x63ontent\x18\x02 \x01(\x0c\"A\n\rGetFabRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x10\n\x08hash_str\x18\x02 \x01(\t\".\n\x0eGetFabResponse\x12\x1c\n\x03\x66\x61\x62\x18\x01 \x01(\x0b\x32\x0f.flwr.proto.Fabb\x06proto3')
|
|
18
19
|
|
|
19
20
|
_globals = globals()
|
|
20
21
|
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
|
21
22
|
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'flwr.proto.fab_pb2', _globals)
|
|
22
23
|
if _descriptor._USE_C_DESCRIPTORS == False:
|
|
23
24
|
DESCRIPTOR._options = None
|
|
24
|
-
_globals['_FAB']._serialized_start=
|
|
25
|
-
_globals['_FAB']._serialized_end=
|
|
26
|
-
_globals['_GETFABREQUEST']._serialized_start=
|
|
27
|
-
_globals['_GETFABREQUEST']._serialized_end=
|
|
28
|
-
_globals['_GETFABRESPONSE']._serialized_start=
|
|
29
|
-
_globals['_GETFABRESPONSE']._serialized_end=
|
|
25
|
+
_globals['_FAB']._serialized_start=59
|
|
26
|
+
_globals['_FAB']._serialized_end=99
|
|
27
|
+
_globals['_GETFABREQUEST']._serialized_start=101
|
|
28
|
+
_globals['_GETFABREQUEST']._serialized_end=166
|
|
29
|
+
_globals['_GETFABRESPONSE']._serialized_start=168
|
|
30
|
+
_globals['_GETFABRESPONSE']._serialized_end=214
|
|
30
31
|
# @@protoc_insertion_point(module_scope)
|
flwr/proto/fab_pb2.pyi
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
isort:skip_file
|
|
4
4
|
"""
|
|
5
5
|
import builtins
|
|
6
|
+
import flwr.proto.node_pb2
|
|
6
7
|
import google.protobuf.descriptor
|
|
7
8
|
import google.protobuf.message
|
|
8
9
|
import typing
|
|
@@ -33,13 +34,18 @@ global___Fab = Fab
|
|
|
33
34
|
|
|
34
35
|
class GetFabRequest(google.protobuf.message.Message):
|
|
35
36
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
37
|
+
NODE_FIELD_NUMBER: builtins.int
|
|
36
38
|
HASH_STR_FIELD_NUMBER: builtins.int
|
|
39
|
+
@property
|
|
40
|
+
def node(self) -> flwr.proto.node_pb2.Node: ...
|
|
37
41
|
hash_str: typing.Text
|
|
38
42
|
def __init__(self,
|
|
39
43
|
*,
|
|
44
|
+
node: typing.Optional[flwr.proto.node_pb2.Node] = ...,
|
|
40
45
|
hash_str: typing.Text = ...,
|
|
41
46
|
) -> None: ...
|
|
42
|
-
def
|
|
47
|
+
def HasField(self, field_name: typing_extensions.Literal["node",b"node"]) -> builtins.bool: ...
|
|
48
|
+
def ClearField(self, field_name: typing_extensions.Literal["hash_str",b"hash_str","node",b"node"]) -> None: ...
|
|
43
49
|
global___GetFabRequest = GetFabRequest
|
|
44
50
|
|
|
45
51
|
class GetFabResponse(google.protobuf.message.Message):
|
flwr/proto/fleet_pb2.py
CHANGED
|
@@ -18,7 +18,7 @@ from flwr.proto import run_pb2 as flwr_dot_proto_dot_run__pb2
|
|
|
18
18
|
from flwr.proto import fab_pb2 as flwr_dot_proto_dot_fab__pb2
|
|
19
19
|
|
|
20
20
|
|
|
21
|
-
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x16\x66lwr/proto/fleet.proto\x12\nflwr.proto\x1a\x15\x66lwr/proto/node.proto\x1a\x15\x66lwr/proto/task.proto\x1a\x14\x66lwr/proto/run.proto\x1a\x14\x66lwr/proto/fab.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\"F\n\x12PullTaskInsRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x10\n\x08task_ids\x18\x02 \x03(\t\"k\n\x13PullTaskInsResponse\x12(\n\treconnect\x18\x01 \x01(\x0b\x32\x15.flwr.proto.Reconnect\x12*\n\rtask_ins_list\x18\x02 \x03(\x0b\x32\x13.flwr.proto.TaskIns\"
|
|
21
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x16\x66lwr/proto/fleet.proto\x12\nflwr.proto\x1a\x15\x66lwr/proto/node.proto\x1a\x15\x66lwr/proto/task.proto\x1a\x14\x66lwr/proto/run.proto\x1a\x14\x66lwr/proto/fab.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\"F\n\x12PullTaskInsRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x10\n\x08task_ids\x18\x02 \x03(\t\"k\n\x13PullTaskInsResponse\x12(\n\treconnect\x18\x01 \x01(\x0b\x32\x15.flwr.proto.Reconnect\x12*\n\rtask_ins_list\x18\x02 \x03(\x0b\x32\x13.flwr.proto.TaskIns\"`\n\x12PushTaskResRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12*\n\rtask_res_list\x18\x02 \x03(\x0b\x32\x13.flwr.proto.TaskRes\"\xae\x01\n\x13PushTaskResResponse\x12(\n\treconnect\x18\x01 \x01(\x0b\x32\x15.flwr.proto.Reconnect\x12=\n\x07results\x18\x02 \x03(\x0b\x32,.flwr.proto.PushTaskResResponse.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\x8c\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\x12P\n\x0bPullTaskIns\x12\x1e.flwr.proto.PullTaskInsRequest\x1a\x1f.flwr.proto.PullTaskInsResponse\"\x00\x12P\n\x0bPushTaskRes\x12\x1e.flwr.proto.PushTaskResRequest\x1a\x1f.flwr.proto.PushTaskResResponse\"\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')
|
|
22
22
|
|
|
23
23
|
_globals = globals()
|
|
24
24
|
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
|
@@ -44,13 +44,13 @@ if _descriptor._USE_C_DESCRIPTORS == False:
|
|
|
44
44
|
_globals['_PULLTASKINSRESPONSE']._serialized_start=476
|
|
45
45
|
_globals['_PULLTASKINSRESPONSE']._serialized_end=583
|
|
46
46
|
_globals['_PUSHTASKRESREQUEST']._serialized_start=585
|
|
47
|
-
_globals['_PUSHTASKRESREQUEST']._serialized_end=
|
|
48
|
-
_globals['_PUSHTASKRESRESPONSE']._serialized_start=
|
|
49
|
-
_globals['_PUSHTASKRESRESPONSE']._serialized_end=
|
|
50
|
-
_globals['_PUSHTASKRESRESPONSE_RESULTSENTRY']._serialized_start=
|
|
51
|
-
_globals['_PUSHTASKRESRESPONSE_RESULTSENTRY']._serialized_end=
|
|
52
|
-
_globals['_RECONNECT']._serialized_start=
|
|
53
|
-
_globals['_RECONNECT']._serialized_end=
|
|
54
|
-
_globals['_FLEET']._serialized_start=
|
|
55
|
-
_globals['_FLEET']._serialized_end=
|
|
47
|
+
_globals['_PUSHTASKRESREQUEST']._serialized_end=681
|
|
48
|
+
_globals['_PUSHTASKRESRESPONSE']._serialized_start=684
|
|
49
|
+
_globals['_PUSHTASKRESRESPONSE']._serialized_end=858
|
|
50
|
+
_globals['_PUSHTASKRESRESPONSE_RESULTSENTRY']._serialized_start=812
|
|
51
|
+
_globals['_PUSHTASKRESRESPONSE_RESULTSENTRY']._serialized_end=858
|
|
52
|
+
_globals['_RECONNECT']._serialized_start=860
|
|
53
|
+
_globals['_RECONNECT']._serialized_end=890
|
|
54
|
+
_globals['_FLEET']._serialized_start=893
|
|
55
|
+
_globals['_FLEET']._serialized_end=1417
|
|
56
56
|
# @@protoc_insertion_point(module_scope)
|
flwr/proto/fleet_pb2.pyi
CHANGED
|
@@ -124,14 +124,19 @@ global___PullTaskInsResponse = PullTaskInsResponse
|
|
|
124
124
|
class PushTaskResRequest(google.protobuf.message.Message):
|
|
125
125
|
"""PushTaskRes messages"""
|
|
126
126
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
127
|
+
NODE_FIELD_NUMBER: builtins.int
|
|
127
128
|
TASK_RES_LIST_FIELD_NUMBER: builtins.int
|
|
128
129
|
@property
|
|
130
|
+
def node(self) -> flwr.proto.node_pb2.Node: ...
|
|
131
|
+
@property
|
|
129
132
|
def task_res_list(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[flwr.proto.task_pb2.TaskRes]: ...
|
|
130
133
|
def __init__(self,
|
|
131
134
|
*,
|
|
135
|
+
node: typing.Optional[flwr.proto.node_pb2.Node] = ...,
|
|
132
136
|
task_res_list: typing.Optional[typing.Iterable[flwr.proto.task_pb2.TaskRes]] = ...,
|
|
133
137
|
) -> None: ...
|
|
134
|
-
def
|
|
138
|
+
def HasField(self, field_name: typing_extensions.Literal["node",b"node"]) -> builtins.bool: ...
|
|
139
|
+
def ClearField(self, field_name: typing_extensions.Literal["node",b"node","task_res_list",b"task_res_list"]) -> None: ...
|
|
135
140
|
global___PushTaskResRequest = PushTaskResRequest
|
|
136
141
|
|
|
137
142
|
class PushTaskResResponse(google.protobuf.message.Message):
|
flwr/proto/recordset_pb2.py
CHANGED
|
@@ -14,7 +14,7 @@ _sym_db = _symbol_database.Default()
|
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
|
|
17
|
-
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1a\x66lwr/proto/recordset.proto\x12\nflwr.proto\"\x1a\n\nDoubleList\x12\x0c\n\x04vals\x18\x01 \x03(\x01\"\
|
|
17
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1a\x66lwr/proto/recordset.proto\x12\nflwr.proto\"\x1a\n\nDoubleList\x12\x0c\n\x04vals\x18\x01 \x03(\x01\"\x18\n\x08SintList\x12\x0c\n\x04vals\x18\x01 \x03(\x12\"\x18\n\x08UintList\x12\x0c\n\x04vals\x18\x01 \x03(\x04\"\x18\n\x08\x42oolList\x12\x0c\n\x04vals\x18\x01 \x03(\x08\"\x1a\n\nStringList\x12\x0c\n\x04vals\x18\x01 \x03(\t\"\x19\n\tBytesList\x12\x0c\n\x04vals\x18\x01 \x03(\x0c\"B\n\x05\x41rray\x12\r\n\x05\x64type\x18\x01 \x01(\t\x12\r\n\x05shape\x18\x02 \x03(\x05\x12\r\n\x05stype\x18\x03 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\x0c\"\xd8\x01\n\x12MetricsRecordValue\x12\x10\n\x06\x64ouble\x18\x01 \x01(\x01H\x00\x12\x10\n\x06sint64\x18\x02 \x01(\x12H\x00\x12\x10\n\x06uint64\x18\x03 \x01(\x04H\x00\x12-\n\x0b\x64ouble_list\x18\x15 \x01(\x0b\x32\x16.flwr.proto.DoubleListH\x00\x12)\n\tsint_list\x18\x16 \x01(\x0b\x32\x14.flwr.proto.SintListH\x00\x12)\n\tuint_list\x18\x17 \x01(\x0b\x32\x14.flwr.proto.UintListH\x00\x42\x07\n\x05value\"\x92\x03\n\x12\x43onfigsRecordValue\x12\x10\n\x06\x64ouble\x18\x01 \x01(\x01H\x00\x12\x10\n\x06sint64\x18\x02 \x01(\x12H\x00\x12\x10\n\x06uint64\x18\x03 \x01(\x04H\x00\x12\x0e\n\x04\x62ool\x18\x04 \x01(\x08H\x00\x12\x10\n\x06string\x18\x05 \x01(\tH\x00\x12\x0f\n\x05\x62ytes\x18\x06 \x01(\x0cH\x00\x12-\n\x0b\x64ouble_list\x18\x15 \x01(\x0b\x32\x16.flwr.proto.DoubleListH\x00\x12)\n\tsint_list\x18\x16 \x01(\x0b\x32\x14.flwr.proto.SintListH\x00\x12)\n\tuint_list\x18\x17 \x01(\x0b\x32\x14.flwr.proto.UintListH\x00\x12)\n\tbool_list\x18\x18 \x01(\x0b\x32\x14.flwr.proto.BoolListH\x00\x12-\n\x0bstring_list\x18\x19 \x01(\x0b\x32\x16.flwr.proto.StringListH\x00\x12+\n\nbytes_list\x18\x1a \x01(\x0b\x32\x15.flwr.proto.BytesListH\x00\x42\x07\n\x05value\"M\n\x10ParametersRecord\x12\x11\n\tdata_keys\x18\x01 \x03(\t\x12&\n\x0b\x64\x61ta_values\x18\x02 \x03(\x0b\x32\x11.flwr.proto.Array\"\x8f\x01\n\rMetricsRecord\x12\x31\n\x04\x64\x61ta\x18\x01 \x03(\x0b\x32#.flwr.proto.MetricsRecord.DataEntry\x1aK\n\tDataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12-\n\x05value\x18\x02 \x01(\x0b\x32\x1e.flwr.proto.MetricsRecordValue:\x02\x38\x01\"\x8f\x01\n\rConfigsRecord\x12\x31\n\x04\x64\x61ta\x18\x01 \x03(\x0b\x32#.flwr.proto.ConfigsRecord.DataEntry\x1aK\n\tDataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12-\n\x05value\x18\x02 \x01(\x0b\x32\x1e.flwr.proto.ConfigsRecordValue:\x02\x38\x01\"\x97\x03\n\tRecordSet\x12\x39\n\nparameters\x18\x01 \x03(\x0b\x32%.flwr.proto.RecordSet.ParametersEntry\x12\x33\n\x07metrics\x18\x02 \x03(\x0b\x32\".flwr.proto.RecordSet.MetricsEntry\x12\x33\n\x07\x63onfigs\x18\x03 \x03(\x0b\x32\".flwr.proto.RecordSet.ConfigsEntry\x1aO\n\x0fParametersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12+\n\x05value\x18\x02 \x01(\x0b\x32\x1c.flwr.proto.ParametersRecord:\x02\x38\x01\x1aI\n\x0cMetricsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12(\n\x05value\x18\x02 \x01(\x0b\x32\x19.flwr.proto.MetricsRecord:\x02\x38\x01\x1aI\n\x0c\x43onfigsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12(\n\x05value\x18\x02 \x01(\x0b\x32\x19.flwr.proto.ConfigsRecord:\x02\x38\x01\x62\x06proto3')
|
|
18
18
|
|
|
19
19
|
_globals = globals()
|
|
20
20
|
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
|
@@ -33,36 +33,38 @@ if _descriptor._USE_C_DESCRIPTORS == False:
|
|
|
33
33
|
_globals['_RECORDSET_CONFIGSENTRY']._serialized_options = b'8\001'
|
|
34
34
|
_globals['_DOUBLELIST']._serialized_start=42
|
|
35
35
|
_globals['_DOUBLELIST']._serialized_end=68
|
|
36
|
-
_globals['
|
|
37
|
-
_globals['
|
|
38
|
-
_globals['
|
|
39
|
-
_globals['
|
|
40
|
-
_globals['
|
|
41
|
-
_globals['
|
|
42
|
-
_globals['
|
|
43
|
-
_globals['
|
|
44
|
-
_globals['
|
|
45
|
-
_globals['
|
|
46
|
-
_globals['
|
|
47
|
-
_globals['
|
|
48
|
-
_globals['
|
|
49
|
-
_globals['
|
|
50
|
-
_globals['
|
|
51
|
-
_globals['
|
|
52
|
-
_globals['
|
|
53
|
-
_globals['
|
|
54
|
-
_globals['
|
|
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['
|
|
36
|
+
_globals['_SINTLIST']._serialized_start=70
|
|
37
|
+
_globals['_SINTLIST']._serialized_end=94
|
|
38
|
+
_globals['_UINTLIST']._serialized_start=96
|
|
39
|
+
_globals['_UINTLIST']._serialized_end=120
|
|
40
|
+
_globals['_BOOLLIST']._serialized_start=122
|
|
41
|
+
_globals['_BOOLLIST']._serialized_end=146
|
|
42
|
+
_globals['_STRINGLIST']._serialized_start=148
|
|
43
|
+
_globals['_STRINGLIST']._serialized_end=174
|
|
44
|
+
_globals['_BYTESLIST']._serialized_start=176
|
|
45
|
+
_globals['_BYTESLIST']._serialized_end=201
|
|
46
|
+
_globals['_ARRAY']._serialized_start=203
|
|
47
|
+
_globals['_ARRAY']._serialized_end=269
|
|
48
|
+
_globals['_METRICSRECORDVALUE']._serialized_start=272
|
|
49
|
+
_globals['_METRICSRECORDVALUE']._serialized_end=488
|
|
50
|
+
_globals['_CONFIGSRECORDVALUE']._serialized_start=491
|
|
51
|
+
_globals['_CONFIGSRECORDVALUE']._serialized_end=893
|
|
52
|
+
_globals['_PARAMETERSRECORD']._serialized_start=895
|
|
53
|
+
_globals['_PARAMETERSRECORD']._serialized_end=972
|
|
54
|
+
_globals['_METRICSRECORD']._serialized_start=975
|
|
55
|
+
_globals['_METRICSRECORD']._serialized_end=1118
|
|
56
|
+
_globals['_METRICSRECORD_DATAENTRY']._serialized_start=1043
|
|
57
|
+
_globals['_METRICSRECORD_DATAENTRY']._serialized_end=1118
|
|
58
|
+
_globals['_CONFIGSRECORD']._serialized_start=1121
|
|
59
|
+
_globals['_CONFIGSRECORD']._serialized_end=1264
|
|
60
|
+
_globals['_CONFIGSRECORD_DATAENTRY']._serialized_start=1189
|
|
61
|
+
_globals['_CONFIGSRECORD_DATAENTRY']._serialized_end=1264
|
|
62
|
+
_globals['_RECORDSET']._serialized_start=1267
|
|
63
|
+
_globals['_RECORDSET']._serialized_end=1674
|
|
64
|
+
_globals['_RECORDSET_PARAMETERSENTRY']._serialized_start=1445
|
|
65
|
+
_globals['_RECORDSET_PARAMETERSENTRY']._serialized_end=1524
|
|
66
|
+
_globals['_RECORDSET_METRICSENTRY']._serialized_start=1526
|
|
67
|
+
_globals['_RECORDSET_METRICSENTRY']._serialized_end=1599
|
|
68
|
+
_globals['_RECORDSET_CONFIGSENTRY']._serialized_start=1601
|
|
69
|
+
_globals['_RECORDSET_CONFIGSENTRY']._serialized_end=1674
|
|
68
70
|
# @@protoc_insertion_point(module_scope)
|
flwr/proto/recordset_pb2.pyi
CHANGED
|
@@ -23,7 +23,7 @@ class DoubleList(google.protobuf.message.Message):
|
|
|
23
23
|
def ClearField(self, field_name: typing_extensions.Literal["vals",b"vals"]) -> None: ...
|
|
24
24
|
global___DoubleList = DoubleList
|
|
25
25
|
|
|
26
|
-
class
|
|
26
|
+
class SintList(google.protobuf.message.Message):
|
|
27
27
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
28
28
|
VALS_FIELD_NUMBER: builtins.int
|
|
29
29
|
@property
|
|
@@ -33,7 +33,19 @@ class Sint64List(google.protobuf.message.Message):
|
|
|
33
33
|
vals: typing.Optional[typing.Iterable[builtins.int]] = ...,
|
|
34
34
|
) -> None: ...
|
|
35
35
|
def ClearField(self, field_name: typing_extensions.Literal["vals",b"vals"]) -> None: ...
|
|
36
|
-
|
|
36
|
+
global___SintList = SintList
|
|
37
|
+
|
|
38
|
+
class UintList(google.protobuf.message.Message):
|
|
39
|
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
40
|
+
VALS_FIELD_NUMBER: builtins.int
|
|
41
|
+
@property
|
|
42
|
+
def vals(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.int]: ...
|
|
43
|
+
def __init__(self,
|
|
44
|
+
*,
|
|
45
|
+
vals: typing.Optional[typing.Iterable[builtins.int]] = ...,
|
|
46
|
+
) -> None: ...
|
|
47
|
+
def ClearField(self, field_name: typing_extensions.Literal["vals",b"vals"]) -> None: ...
|
|
48
|
+
global___UintList = UintList
|
|
37
49
|
|
|
38
50
|
class BoolList(google.protobuf.message.Message):
|
|
39
51
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
@@ -96,39 +108,48 @@ class MetricsRecordValue(google.protobuf.message.Message):
|
|
|
96
108
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
97
109
|
DOUBLE_FIELD_NUMBER: builtins.int
|
|
98
110
|
SINT64_FIELD_NUMBER: builtins.int
|
|
111
|
+
UINT64_FIELD_NUMBER: builtins.int
|
|
99
112
|
DOUBLE_LIST_FIELD_NUMBER: builtins.int
|
|
100
|
-
|
|
113
|
+
SINT_LIST_FIELD_NUMBER: builtins.int
|
|
114
|
+
UINT_LIST_FIELD_NUMBER: builtins.int
|
|
101
115
|
double: builtins.float
|
|
102
116
|
"""Single element"""
|
|
103
117
|
|
|
104
118
|
sint64: builtins.int
|
|
119
|
+
uint64: builtins.int
|
|
105
120
|
@property
|
|
106
121
|
def double_list(self) -> global___DoubleList:
|
|
107
122
|
"""List types"""
|
|
108
123
|
pass
|
|
109
124
|
@property
|
|
110
|
-
def
|
|
125
|
+
def sint_list(self) -> global___SintList: ...
|
|
126
|
+
@property
|
|
127
|
+
def uint_list(self) -> global___UintList: ...
|
|
111
128
|
def __init__(self,
|
|
112
129
|
*,
|
|
113
130
|
double: builtins.float = ...,
|
|
114
131
|
sint64: builtins.int = ...,
|
|
132
|
+
uint64: builtins.int = ...,
|
|
115
133
|
double_list: typing.Optional[global___DoubleList] = ...,
|
|
116
|
-
|
|
134
|
+
sint_list: typing.Optional[global___SintList] = ...,
|
|
135
|
+
uint_list: typing.Optional[global___UintList] = ...,
|
|
117
136
|
) -> None: ...
|
|
118
|
-
def HasField(self, field_name: typing_extensions.Literal["double",b"double","double_list",b"double_list","sint64",b"sint64","
|
|
119
|
-
def ClearField(self, field_name: typing_extensions.Literal["double",b"double","double_list",b"double_list","sint64",b"sint64","
|
|
120
|
-
def WhichOneof(self, oneof_group: typing_extensions.Literal["value",b"value"]) -> typing.Optional[typing_extensions.Literal["double","sint64","double_list","
|
|
137
|
+
def HasField(self, field_name: typing_extensions.Literal["double",b"double","double_list",b"double_list","sint64",b"sint64","sint_list",b"sint_list","uint64",b"uint64","uint_list",b"uint_list","value",b"value"]) -> builtins.bool: ...
|
|
138
|
+
def ClearField(self, field_name: typing_extensions.Literal["double",b"double","double_list",b"double_list","sint64",b"sint64","sint_list",b"sint_list","uint64",b"uint64","uint_list",b"uint_list","value",b"value"]) -> None: ...
|
|
139
|
+
def WhichOneof(self, oneof_group: typing_extensions.Literal["value",b"value"]) -> typing.Optional[typing_extensions.Literal["double","sint64","uint64","double_list","sint_list","uint_list"]]: ...
|
|
121
140
|
global___MetricsRecordValue = MetricsRecordValue
|
|
122
141
|
|
|
123
142
|
class ConfigsRecordValue(google.protobuf.message.Message):
|
|
124
143
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
125
144
|
DOUBLE_FIELD_NUMBER: builtins.int
|
|
126
145
|
SINT64_FIELD_NUMBER: builtins.int
|
|
146
|
+
UINT64_FIELD_NUMBER: builtins.int
|
|
127
147
|
BOOL_FIELD_NUMBER: builtins.int
|
|
128
148
|
STRING_FIELD_NUMBER: builtins.int
|
|
129
149
|
BYTES_FIELD_NUMBER: builtins.int
|
|
130
150
|
DOUBLE_LIST_FIELD_NUMBER: builtins.int
|
|
131
|
-
|
|
151
|
+
SINT_LIST_FIELD_NUMBER: builtins.int
|
|
152
|
+
UINT_LIST_FIELD_NUMBER: builtins.int
|
|
132
153
|
BOOL_LIST_FIELD_NUMBER: builtins.int
|
|
133
154
|
STRING_LIST_FIELD_NUMBER: builtins.int
|
|
134
155
|
BYTES_LIST_FIELD_NUMBER: builtins.int
|
|
@@ -136,6 +157,7 @@ class ConfigsRecordValue(google.protobuf.message.Message):
|
|
|
136
157
|
"""Single element"""
|
|
137
158
|
|
|
138
159
|
sint64: builtins.int
|
|
160
|
+
uint64: builtins.int
|
|
139
161
|
bool: builtins.bool
|
|
140
162
|
string: typing.Text
|
|
141
163
|
bytes: builtins.bytes
|
|
@@ -144,7 +166,9 @@ class ConfigsRecordValue(google.protobuf.message.Message):
|
|
|
144
166
|
"""List types"""
|
|
145
167
|
pass
|
|
146
168
|
@property
|
|
147
|
-
def
|
|
169
|
+
def sint_list(self) -> global___SintList: ...
|
|
170
|
+
@property
|
|
171
|
+
def uint_list(self) -> global___UintList: ...
|
|
148
172
|
@property
|
|
149
173
|
def bool_list(self) -> global___BoolList: ...
|
|
150
174
|
@property
|
|
@@ -155,18 +179,20 @@ class ConfigsRecordValue(google.protobuf.message.Message):
|
|
|
155
179
|
*,
|
|
156
180
|
double: builtins.float = ...,
|
|
157
181
|
sint64: builtins.int = ...,
|
|
182
|
+
uint64: builtins.int = ...,
|
|
158
183
|
bool: builtins.bool = ...,
|
|
159
184
|
string: typing.Text = ...,
|
|
160
185
|
bytes: builtins.bytes = ...,
|
|
161
186
|
double_list: typing.Optional[global___DoubleList] = ...,
|
|
162
|
-
|
|
187
|
+
sint_list: typing.Optional[global___SintList] = ...,
|
|
188
|
+
uint_list: typing.Optional[global___UintList] = ...,
|
|
163
189
|
bool_list: typing.Optional[global___BoolList] = ...,
|
|
164
190
|
string_list: typing.Optional[global___StringList] = ...,
|
|
165
191
|
bytes_list: typing.Optional[global___BytesList] = ...,
|
|
166
192
|
) -> None: ...
|
|
167
|
-
def HasField(self, field_name: typing_extensions.Literal["bool",b"bool","bool_list",b"bool_list","bytes",b"bytes","bytes_list",b"bytes_list","double",b"double","double_list",b"double_list","sint64",b"sint64","
|
|
168
|
-
def ClearField(self, field_name: typing_extensions.Literal["bool",b"bool","bool_list",b"bool_list","bytes",b"bytes","bytes_list",b"bytes_list","double",b"double","double_list",b"double_list","sint64",b"sint64","
|
|
169
|
-
def WhichOneof(self, oneof_group: typing_extensions.Literal["value",b"value"]) -> typing.Optional[typing_extensions.Literal["double","sint64","bool","string","bytes","double_list","
|
|
193
|
+
def HasField(self, field_name: typing_extensions.Literal["bool",b"bool","bool_list",b"bool_list","bytes",b"bytes","bytes_list",b"bytes_list","double",b"double","double_list",b"double_list","sint64",b"sint64","sint_list",b"sint_list","string",b"string","string_list",b"string_list","uint64",b"uint64","uint_list",b"uint_list","value",b"value"]) -> builtins.bool: ...
|
|
194
|
+
def ClearField(self, field_name: typing_extensions.Literal["bool",b"bool","bool_list",b"bool_list","bytes",b"bytes","bytes_list",b"bytes_list","double",b"double","double_list",b"double_list","sint64",b"sint64","sint_list",b"sint_list","string",b"string","string_list",b"string_list","uint64",b"uint64","uint_list",b"uint_list","value",b"value"]) -> None: ...
|
|
195
|
+
def WhichOneof(self, oneof_group: typing_extensions.Literal["value",b"value"]) -> typing.Optional[typing_extensions.Literal["double","sint64","uint64","bool","string","bytes","double_list","sint_list","uint_list","bool_list","string_list","bytes_list"]]: ...
|
|
170
196
|
global___ConfigsRecordValue = ConfigsRecordValue
|
|
171
197
|
|
|
172
198
|
class ParametersRecord(google.protobuf.message.Message):
|
flwr/proto/run_pb2.py
CHANGED
|
@@ -13,10 +13,11 @@ _sym_db = _symbol_database.Default()
|
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
from flwr.proto import fab_pb2 as flwr_dot_proto_dot_fab__pb2
|
|
16
|
+
from flwr.proto import node_pb2 as flwr_dot_proto_dot_node__pb2
|
|
16
17
|
from flwr.proto import transport_pb2 as flwr_dot_proto_dot_transport__pb2
|
|
17
18
|
|
|
18
19
|
|
|
19
|
-
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x14\x66lwr/proto/run.proto\x12\nflwr.proto\x1a\x14\x66lwr/proto/fab.proto\x1a\x1a\x66lwr/proto/transport.proto\"\xd5\x01\n\x03Run\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\x12\x0e\n\x06\x66\x61\x62_id\x18\x02 \x01(\t\x12\x13\n\x0b\x66\x61\x62_version\x18\x03 \x01(\t\x12<\n\x0foverride_config\x18\x04 \x03(\x0b\x32#.flwr.proto.Run.OverrideConfigEntry\x12\x10\n\x08\x66\x61\x62_hash\x18\x05 \x01(\t\x1aI\n\x13OverrideConfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\"@\n\tRunStatus\x12\x0e\n\x06status\x18\x01 \x01(\t\x12\x12\n\nsub_status\x18\x02 \x01(\t\x12\x0f\n\x07\x64\x65tails\x18\x03 \x01(\t\"\xeb\x01\n\x10\x43reateRunRequest\x12\x0e\n\x06\x66\x61\x62_id\x18\x01 \x01(\t\x12\x13\n\x0b\x66\x61\x62_version\x18\x02 \x01(\t\x12I\n\x0foverride_config\x18\x03 \x03(\x0b\x32\x30.flwr.proto.CreateRunRequest.OverrideConfigEntry\x12\x1c\n\x03\x66\x61\x62\x18\x04 \x01(\x0b\x32\x0f.flwr.proto.Fab\x1aI\n\x13OverrideConfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\"#\n\x11\x43reateRunResponse\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\"\
|
|
20
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x14\x66lwr/proto/run.proto\x12\nflwr.proto\x1a\x14\x66lwr/proto/fab.proto\x1a\x15\x66lwr/proto/node.proto\x1a\x1a\x66lwr/proto/transport.proto\"\xd5\x01\n\x03Run\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\x12\x0e\n\x06\x66\x61\x62_id\x18\x02 \x01(\t\x12\x13\n\x0b\x66\x61\x62_version\x18\x03 \x01(\t\x12<\n\x0foverride_config\x18\x04 \x03(\x0b\x32#.flwr.proto.Run.OverrideConfigEntry\x12\x10\n\x08\x66\x61\x62_hash\x18\x05 \x01(\t\x1aI\n\x13OverrideConfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\"@\n\tRunStatus\x12\x0e\n\x06status\x18\x01 \x01(\t\x12\x12\n\nsub_status\x18\x02 \x01(\t\x12\x0f\n\x07\x64\x65tails\x18\x03 \x01(\t\"\xeb\x01\n\x10\x43reateRunRequest\x12\x0e\n\x06\x66\x61\x62_id\x18\x01 \x01(\t\x12\x13\n\x0b\x66\x61\x62_version\x18\x02 \x01(\t\x12I\n\x0foverride_config\x18\x03 \x03(\x0b\x32\x30.flwr.proto.CreateRunRequest.OverrideConfigEntry\x12\x1c\n\x03\x66\x61\x62\x18\x04 \x01(\x0b\x32\x0f.flwr.proto.Fab\x1aI\n\x13OverrideConfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\"#\n\x11\x43reateRunResponse\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\"?\n\rGetRunRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x0e\n\x06run_id\x18\x02 \x01(\x04\".\n\x0eGetRunResponse\x12\x1c\n\x03run\x18\x01 \x01(\x0b\x32\x0f.flwr.proto.Run\"S\n\x16UpdateRunStatusRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\x12)\n\nrun_status\x18\x02 \x01(\x0b\x32\x15.flwr.proto.RunStatus\"\x19\n\x17UpdateRunStatusResponse\"F\n\x13GetRunStatusRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x0f\n\x07run_ids\x18\x02 \x03(\x04\"\xb1\x01\n\x14GetRunStatusResponse\x12L\n\x0frun_status_dict\x18\x01 \x03(\x0b\x32\x33.flwr.proto.GetRunStatusResponse.RunStatusDictEntry\x1aK\n\x12RunStatusDictEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12$\n\x05value\x18\x02 \x01(\x0b\x32\x15.flwr.proto.RunStatus:\x02\x38\x01\x62\x06proto3')
|
|
20
21
|
|
|
21
22
|
_globals = globals()
|
|
22
23
|
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
|
@@ -29,30 +30,30 @@ if _descriptor._USE_C_DESCRIPTORS == False:
|
|
|
29
30
|
_globals['_CREATERUNREQUEST_OVERRIDECONFIGENTRY']._serialized_options = b'8\001'
|
|
30
31
|
_globals['_GETRUNSTATUSRESPONSE_RUNSTATUSDICTENTRY']._options = None
|
|
31
32
|
_globals['_GETRUNSTATUSRESPONSE_RUNSTATUSDICTENTRY']._serialized_options = b'8\001'
|
|
32
|
-
_globals['_RUN']._serialized_start=
|
|
33
|
-
_globals['_RUN']._serialized_end=
|
|
34
|
-
_globals['_RUN_OVERRIDECONFIGENTRY']._serialized_start=
|
|
35
|
-
_globals['_RUN_OVERRIDECONFIGENTRY']._serialized_end=
|
|
36
|
-
_globals['_RUNSTATUS']._serialized_start=
|
|
37
|
-
_globals['_RUNSTATUS']._serialized_end=
|
|
38
|
-
_globals['_CREATERUNREQUEST']._serialized_start=
|
|
39
|
-
_globals['_CREATERUNREQUEST']._serialized_end=
|
|
40
|
-
_globals['_CREATERUNREQUEST_OVERRIDECONFIGENTRY']._serialized_start=
|
|
41
|
-
_globals['_CREATERUNREQUEST_OVERRIDECONFIGENTRY']._serialized_end=
|
|
42
|
-
_globals['_CREATERUNRESPONSE']._serialized_start=
|
|
43
|
-
_globals['_CREATERUNRESPONSE']._serialized_end=
|
|
44
|
-
_globals['_GETRUNREQUEST']._serialized_start=
|
|
45
|
-
_globals['_GETRUNREQUEST']._serialized_end=
|
|
46
|
-
_globals['_GETRUNRESPONSE']._serialized_start=
|
|
47
|
-
_globals['_GETRUNRESPONSE']._serialized_end=
|
|
48
|
-
_globals['_UPDATERUNSTATUSREQUEST']._serialized_start=
|
|
49
|
-
_globals['_UPDATERUNSTATUSREQUEST']._serialized_end=
|
|
50
|
-
_globals['_UPDATERUNSTATUSRESPONSE']._serialized_start=
|
|
51
|
-
_globals['_UPDATERUNSTATUSRESPONSE']._serialized_end=
|
|
52
|
-
_globals['_GETRUNSTATUSREQUEST']._serialized_start=
|
|
53
|
-
_globals['_GETRUNSTATUSREQUEST']._serialized_end=
|
|
54
|
-
_globals['_GETRUNSTATUSRESPONSE']._serialized_start=
|
|
55
|
-
_globals['_GETRUNSTATUSRESPONSE']._serialized_end=
|
|
56
|
-
_globals['_GETRUNSTATUSRESPONSE_RUNSTATUSDICTENTRY']._serialized_start=
|
|
57
|
-
_globals['_GETRUNSTATUSRESPONSE_RUNSTATUSDICTENTRY']._serialized_end=
|
|
33
|
+
_globals['_RUN']._serialized_start=110
|
|
34
|
+
_globals['_RUN']._serialized_end=323
|
|
35
|
+
_globals['_RUN_OVERRIDECONFIGENTRY']._serialized_start=250
|
|
36
|
+
_globals['_RUN_OVERRIDECONFIGENTRY']._serialized_end=323
|
|
37
|
+
_globals['_RUNSTATUS']._serialized_start=325
|
|
38
|
+
_globals['_RUNSTATUS']._serialized_end=389
|
|
39
|
+
_globals['_CREATERUNREQUEST']._serialized_start=392
|
|
40
|
+
_globals['_CREATERUNREQUEST']._serialized_end=627
|
|
41
|
+
_globals['_CREATERUNREQUEST_OVERRIDECONFIGENTRY']._serialized_start=250
|
|
42
|
+
_globals['_CREATERUNREQUEST_OVERRIDECONFIGENTRY']._serialized_end=323
|
|
43
|
+
_globals['_CREATERUNRESPONSE']._serialized_start=629
|
|
44
|
+
_globals['_CREATERUNRESPONSE']._serialized_end=664
|
|
45
|
+
_globals['_GETRUNREQUEST']._serialized_start=666
|
|
46
|
+
_globals['_GETRUNREQUEST']._serialized_end=729
|
|
47
|
+
_globals['_GETRUNRESPONSE']._serialized_start=731
|
|
48
|
+
_globals['_GETRUNRESPONSE']._serialized_end=777
|
|
49
|
+
_globals['_UPDATERUNSTATUSREQUEST']._serialized_start=779
|
|
50
|
+
_globals['_UPDATERUNSTATUSREQUEST']._serialized_end=862
|
|
51
|
+
_globals['_UPDATERUNSTATUSRESPONSE']._serialized_start=864
|
|
52
|
+
_globals['_UPDATERUNSTATUSRESPONSE']._serialized_end=889
|
|
53
|
+
_globals['_GETRUNSTATUSREQUEST']._serialized_start=891
|
|
54
|
+
_globals['_GETRUNSTATUSREQUEST']._serialized_end=961
|
|
55
|
+
_globals['_GETRUNSTATUSRESPONSE']._serialized_start=964
|
|
56
|
+
_globals['_GETRUNSTATUSRESPONSE']._serialized_end=1141
|
|
57
|
+
_globals['_GETRUNSTATUSRESPONSE_RUNSTATUSDICTENTRY']._serialized_start=1066
|
|
58
|
+
_globals['_GETRUNSTATUSRESPONSE_RUNSTATUSDICTENTRY']._serialized_end=1141
|
|
58
59
|
# @@protoc_insertion_point(module_scope)
|
flwr/proto/run_pb2.pyi
CHANGED
|
@@ -4,6 +4,7 @@ isort:skip_file
|
|
|
4
4
|
"""
|
|
5
5
|
import builtins
|
|
6
6
|
import flwr.proto.fab_pb2
|
|
7
|
+
import flwr.proto.node_pb2
|
|
7
8
|
import flwr.proto.transport_pb2
|
|
8
9
|
import google.protobuf.descriptor
|
|
9
10
|
import google.protobuf.internal.containers
|
|
@@ -128,13 +129,18 @@ global___CreateRunResponse = CreateRunResponse
|
|
|
128
129
|
class GetRunRequest(google.protobuf.message.Message):
|
|
129
130
|
"""GetRun"""
|
|
130
131
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
132
|
+
NODE_FIELD_NUMBER: builtins.int
|
|
131
133
|
RUN_ID_FIELD_NUMBER: builtins.int
|
|
134
|
+
@property
|
|
135
|
+
def node(self) -> flwr.proto.node_pb2.Node: ...
|
|
132
136
|
run_id: builtins.int
|
|
133
137
|
def __init__(self,
|
|
134
138
|
*,
|
|
139
|
+
node: typing.Optional[flwr.proto.node_pb2.Node] = ...,
|
|
135
140
|
run_id: builtins.int = ...,
|
|
136
141
|
) -> None: ...
|
|
137
|
-
def
|
|
142
|
+
def HasField(self, field_name: typing_extensions.Literal["node",b"node"]) -> builtins.bool: ...
|
|
143
|
+
def ClearField(self, field_name: typing_extensions.Literal["node",b"node","run_id",b"run_id"]) -> None: ...
|
|
138
144
|
global___GetRunRequest = GetRunRequest
|
|
139
145
|
|
|
140
146
|
class GetRunResponse(google.protobuf.message.Message):
|
|
@@ -176,14 +182,19 @@ global___UpdateRunStatusResponse = UpdateRunStatusResponse
|
|
|
176
182
|
class GetRunStatusRequest(google.protobuf.message.Message):
|
|
177
183
|
"""GetRunStatus"""
|
|
178
184
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
185
|
+
NODE_FIELD_NUMBER: builtins.int
|
|
179
186
|
RUN_IDS_FIELD_NUMBER: builtins.int
|
|
180
187
|
@property
|
|
188
|
+
def node(self) -> flwr.proto.node_pb2.Node: ...
|
|
189
|
+
@property
|
|
181
190
|
def run_ids(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.int]: ...
|
|
182
191
|
def __init__(self,
|
|
183
192
|
*,
|
|
193
|
+
node: typing.Optional[flwr.proto.node_pb2.Node] = ...,
|
|
184
194
|
run_ids: typing.Optional[typing.Iterable[builtins.int]] = ...,
|
|
185
195
|
) -> None: ...
|
|
186
|
-
def
|
|
196
|
+
def HasField(self, field_name: typing_extensions.Literal["node",b"node"]) -> builtins.bool: ...
|
|
197
|
+
def ClearField(self, field_name: typing_extensions.Literal["node",b"node","run_ids",b"run_ids"]) -> None: ...
|
|
187
198
|
global___GetRunStatusRequest = GetRunStatusRequest
|
|
188
199
|
|
|
189
200
|
class GetRunStatusResponse(google.protobuf.message.Message):
|
flwr/proto/transport_pb2.py
CHANGED
|
@@ -14,7 +14,7 @@ _sym_db = _symbol_database.Default()
|
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
|
|
17
|
-
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1a\x66lwr/proto/transport.proto\x12\nflwr.proto\"9\n\x06Status\x12\x1e\n\x04\x63ode\x18\x01 \x01(\x0e\x32\x10.flwr.proto.Code\x12\x0f\n\x07message\x18\x02 \x01(\t\"2\n\nParameters\x12\x0f\n\x07tensors\x18\x01 \x03(\x0c\x12\x13\n\x0btensor_type\x18\x02 \x01(\t\"\xba\x08\n\rServerMessage\x12?\n\rreconnect_ins\x18\x01 \x01(\x0b\x32&.flwr.proto.ServerMessage.ReconnectInsH\x00\x12H\n\x12get_properties_ins\x18\x02 \x01(\x0b\x32*.flwr.proto.ServerMessage.GetPropertiesInsH\x00\x12H\n\x12get_parameters_ins\x18\x03 \x01(\x0b\x32*.flwr.proto.ServerMessage.GetParametersInsH\x00\x12\x33\n\x07\x66it_ins\x18\x04 \x01(\x0b\x32 .flwr.proto.ServerMessage.FitInsH\x00\x12=\n\x0c\x65valuate_ins\x18\x05 \x01(\x0b\x32%.flwr.proto.ServerMessage.EvaluateInsH\x00\x1a\x1f\n\x0cReconnectIns\x12\x0f\n\x07seconds\x18\x01 \x01(\x03\x1a\x9d\x01\n\x10GetPropertiesIns\x12\x46\n\x06\x63onfig\x18\x01 \x03(\x0b\x32\x36.flwr.proto.ServerMessage.GetPropertiesIns.ConfigEntry\x1a\x41\n\x0b\x43onfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\x1a\x9d\x01\n\x10GetParametersIns\x12\x46\n\x06\x63onfig\x18\x01 \x03(\x0b\x32\x36.flwr.proto.ServerMessage.GetParametersIns.ConfigEntry\x1a\x41\n\x0b\x43onfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\x1a\xb5\x01\n\x06\x46itIns\x12*\n\nparameters\x18\x01 \x01(\x0b\x32\x16.flwr.proto.Parameters\x12<\n\x06\x63onfig\x18\x02 \x03(\x0b\x32,.flwr.proto.ServerMessage.FitIns.ConfigEntry\x1a\x41\n\x0b\x43onfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\x1a\xbf\x01\n\x0b\x45valuateIns\x12*\n\nparameters\x18\x01 \x01(\x0b\x32\x16.flwr.proto.Parameters\x12\x41\n\x06\x63onfig\x18\x02 \x03(\x0b\x32\x31.flwr.proto.ServerMessage.EvaluateIns.ConfigEntry\x1a\x41\n\x0b\x43onfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\x42\x05\n\x03msg\"\xa0\t\n\rClientMessage\x12\x41\n\x0e\x64isconnect_res\x18\x01 \x01(\x0b\x32\'.flwr.proto.ClientMessage.DisconnectResH\x00\x12H\n\x12get_properties_res\x18\x02 \x01(\x0b\x32*.flwr.proto.ClientMessage.GetPropertiesResH\x00\x12H\n\x12get_parameters_res\x18\x03 \x01(\x0b\x32*.flwr.proto.ClientMessage.GetParametersResH\x00\x12\x33\n\x07\x66it_res\x18\x04 \x01(\x0b\x32 .flwr.proto.ClientMessage.FitResH\x00\x12=\n\x0c\x65valuate_res\x18\x05 \x01(\x0b\x32%.flwr.proto.ClientMessage.EvaluateResH\x00\x1a\x33\n\rDisconnectRes\x12\"\n\x06reason\x18\x01 \x01(\x0e\x32\x12.flwr.proto.Reason\x1a\xcd\x01\n\x10GetPropertiesRes\x12\"\n\x06status\x18\x01 \x01(\x0b\x32\x12.flwr.proto.Status\x12N\n\nproperties\x18\x02 \x03(\x0b\x32:.flwr.proto.ClientMessage.GetPropertiesRes.PropertiesEntry\x1a\x45\n\x0fPropertiesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\x1a\x62\n\x10GetParametersRes\x12\"\n\x06status\x18\x01 \x01(\x0b\x32\x12.flwr.proto.Status\x12*\n\nparameters\x18\x02 \x01(\x0b\x32\x16.flwr.proto.Parameters\x1a\xf2\x01\n\x06\x46itRes\x12\"\n\x06status\x18\x01 \x01(\x0b\x32\x12.flwr.proto.Status\x12*\n\nparameters\x18\x02 \x01(\x0b\x32\x16.flwr.proto.Parameters\x12\x14\n\x0cnum_examples\x18\x03 \x01(\x03\x12>\n\x07metrics\x18\x04 \x03(\x0b\x32-.flwr.proto.ClientMessage.FitRes.MetricsEntry\x1a\x42\n\x0cMetricsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\x1a\xde\x01\n\x0b\x45valuateRes\x12\"\n\x06status\x18\x01 \x01(\x0b\x32\x12.flwr.proto.Status\x12\x0c\n\x04loss\x18\x02 \x01(\x02\x12\x14\n\x0cnum_examples\x18\x03 \x01(\x03\x12\x43\n\x07metrics\x18\x04 \x03(\x0b\x32\x32.flwr.proto.ClientMessage.EvaluateRes.MetricsEntry\x1a\x42\n\x0cMetricsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\x42\x05\n\x03msg\"
|
|
17
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1a\x66lwr/proto/transport.proto\x12\nflwr.proto\"9\n\x06Status\x12\x1e\n\x04\x63ode\x18\x01 \x01(\x0e\x32\x10.flwr.proto.Code\x12\x0f\n\x07message\x18\x02 \x01(\t\"2\n\nParameters\x12\x0f\n\x07tensors\x18\x01 \x03(\x0c\x12\x13\n\x0btensor_type\x18\x02 \x01(\t\"\xba\x08\n\rServerMessage\x12?\n\rreconnect_ins\x18\x01 \x01(\x0b\x32&.flwr.proto.ServerMessage.ReconnectInsH\x00\x12H\n\x12get_properties_ins\x18\x02 \x01(\x0b\x32*.flwr.proto.ServerMessage.GetPropertiesInsH\x00\x12H\n\x12get_parameters_ins\x18\x03 \x01(\x0b\x32*.flwr.proto.ServerMessage.GetParametersInsH\x00\x12\x33\n\x07\x66it_ins\x18\x04 \x01(\x0b\x32 .flwr.proto.ServerMessage.FitInsH\x00\x12=\n\x0c\x65valuate_ins\x18\x05 \x01(\x0b\x32%.flwr.proto.ServerMessage.EvaluateInsH\x00\x1a\x1f\n\x0cReconnectIns\x12\x0f\n\x07seconds\x18\x01 \x01(\x03\x1a\x9d\x01\n\x10GetPropertiesIns\x12\x46\n\x06\x63onfig\x18\x01 \x03(\x0b\x32\x36.flwr.proto.ServerMessage.GetPropertiesIns.ConfigEntry\x1a\x41\n\x0b\x43onfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\x1a\x9d\x01\n\x10GetParametersIns\x12\x46\n\x06\x63onfig\x18\x01 \x03(\x0b\x32\x36.flwr.proto.ServerMessage.GetParametersIns.ConfigEntry\x1a\x41\n\x0b\x43onfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\x1a\xb5\x01\n\x06\x46itIns\x12*\n\nparameters\x18\x01 \x01(\x0b\x32\x16.flwr.proto.Parameters\x12<\n\x06\x63onfig\x18\x02 \x03(\x0b\x32,.flwr.proto.ServerMessage.FitIns.ConfigEntry\x1a\x41\n\x0b\x43onfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\x1a\xbf\x01\n\x0b\x45valuateIns\x12*\n\nparameters\x18\x01 \x01(\x0b\x32\x16.flwr.proto.Parameters\x12\x41\n\x06\x63onfig\x18\x02 \x03(\x0b\x32\x31.flwr.proto.ServerMessage.EvaluateIns.ConfigEntry\x1a\x41\n\x0b\x43onfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\x42\x05\n\x03msg\"\xa0\t\n\rClientMessage\x12\x41\n\x0e\x64isconnect_res\x18\x01 \x01(\x0b\x32\'.flwr.proto.ClientMessage.DisconnectResH\x00\x12H\n\x12get_properties_res\x18\x02 \x01(\x0b\x32*.flwr.proto.ClientMessage.GetPropertiesResH\x00\x12H\n\x12get_parameters_res\x18\x03 \x01(\x0b\x32*.flwr.proto.ClientMessage.GetParametersResH\x00\x12\x33\n\x07\x66it_res\x18\x04 \x01(\x0b\x32 .flwr.proto.ClientMessage.FitResH\x00\x12=\n\x0c\x65valuate_res\x18\x05 \x01(\x0b\x32%.flwr.proto.ClientMessage.EvaluateResH\x00\x1a\x33\n\rDisconnectRes\x12\"\n\x06reason\x18\x01 \x01(\x0e\x32\x12.flwr.proto.Reason\x1a\xcd\x01\n\x10GetPropertiesRes\x12\"\n\x06status\x18\x01 \x01(\x0b\x32\x12.flwr.proto.Status\x12N\n\nproperties\x18\x02 \x03(\x0b\x32:.flwr.proto.ClientMessage.GetPropertiesRes.PropertiesEntry\x1a\x45\n\x0fPropertiesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\x1a\x62\n\x10GetParametersRes\x12\"\n\x06status\x18\x01 \x01(\x0b\x32\x12.flwr.proto.Status\x12*\n\nparameters\x18\x02 \x01(\x0b\x32\x16.flwr.proto.Parameters\x1a\xf2\x01\n\x06\x46itRes\x12\"\n\x06status\x18\x01 \x01(\x0b\x32\x12.flwr.proto.Status\x12*\n\nparameters\x18\x02 \x01(\x0b\x32\x16.flwr.proto.Parameters\x12\x14\n\x0cnum_examples\x18\x03 \x01(\x03\x12>\n\x07metrics\x18\x04 \x03(\x0b\x32-.flwr.proto.ClientMessage.FitRes.MetricsEntry\x1a\x42\n\x0cMetricsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\x1a\xde\x01\n\x0b\x45valuateRes\x12\"\n\x06status\x18\x01 \x01(\x0b\x32\x12.flwr.proto.Status\x12\x0c\n\x04loss\x18\x02 \x01(\x02\x12\x14\n\x0cnum_examples\x18\x03 \x01(\x03\x12\x43\n\x07metrics\x18\x04 \x03(\x0b\x32\x32.flwr.proto.ClientMessage.EvaluateRes.MetricsEntry\x1a\x42\n\x0cMetricsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\x42\x05\n\x03msg\"{\n\x06Scalar\x12\x10\n\x06\x64ouble\x18\x01 \x01(\x01H\x00\x12\x10\n\x06uint64\x18\x06 \x01(\x04H\x00\x12\x10\n\x06sint64\x18\x08 \x01(\x12H\x00\x12\x0e\n\x04\x62ool\x18\r \x01(\x08H\x00\x12\x10\n\x06string\x18\x0e \x01(\tH\x00\x12\x0f\n\x05\x62ytes\x18\x0f \x01(\x0cH\x00\x42\x08\n\x06scalar*\x8d\x01\n\x04\x43ode\x12\x06\n\x02OK\x10\x00\x12\"\n\x1eGET_PROPERTIES_NOT_IMPLEMENTED\x10\x01\x12\"\n\x1eGET_PARAMETERS_NOT_IMPLEMENTED\x10\x02\x12\x17\n\x13\x46IT_NOT_IMPLEMENTED\x10\x03\x12\x1c\n\x18\x45VALUATE_NOT_IMPLEMENTED\x10\x04*[\n\x06Reason\x12\x0b\n\x07UNKNOWN\x10\x00\x12\r\n\tRECONNECT\x10\x01\x12\x16\n\x12POWER_DISCONNECTED\x10\x02\x12\x14\n\x10WIFI_UNAVAILABLE\x10\x03\x12\x07\n\x03\x41\x43K\x10\x04\x32S\n\rFlowerService\x12\x42\n\x04Join\x12\x19.flwr.proto.ClientMessage\x1a\x19.flwr.proto.ServerMessage\"\x00(\x01\x30\x01\x62\x06proto3')
|
|
18
18
|
|
|
19
19
|
_globals = globals()
|
|
20
20
|
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
|
@@ -35,10 +35,10 @@ if _descriptor._USE_C_DESCRIPTORS == False:
|
|
|
35
35
|
_globals['_CLIENTMESSAGE_FITRES_METRICSENTRY']._serialized_options = b'8\001'
|
|
36
36
|
_globals['_CLIENTMESSAGE_EVALUATERES_METRICSENTRY']._options = None
|
|
37
37
|
_globals['_CLIENTMESSAGE_EVALUATERES_METRICSENTRY']._serialized_options = b'8\001'
|
|
38
|
-
_globals['_CODE']._serialized_start=
|
|
39
|
-
_globals['_CODE']._serialized_end=
|
|
40
|
-
_globals['_REASON']._serialized_start=
|
|
41
|
-
_globals['_REASON']._serialized_end=
|
|
38
|
+
_globals['_CODE']._serialized_start=2551
|
|
39
|
+
_globals['_CODE']._serialized_end=2692
|
|
40
|
+
_globals['_REASON']._serialized_start=2694
|
|
41
|
+
_globals['_REASON']._serialized_end=2785
|
|
42
42
|
_globals['_STATUS']._serialized_start=42
|
|
43
43
|
_globals['_STATUS']._serialized_end=99
|
|
44
44
|
_globals['_PARAMETERS']._serialized_start=101
|
|
@@ -82,7 +82,7 @@ if _descriptor._USE_C_DESCRIPTORS == False:
|
|
|
82
82
|
_globals['_CLIENTMESSAGE_EVALUATERES_METRICSENTRY']._serialized_start=2125
|
|
83
83
|
_globals['_CLIENTMESSAGE_EVALUATERES_METRICSENTRY']._serialized_end=2191
|
|
84
84
|
_globals['_SCALAR']._serialized_start=2425
|
|
85
|
-
_globals['_SCALAR']._serialized_end=
|
|
86
|
-
_globals['_FLOWERSERVICE']._serialized_start=
|
|
87
|
-
_globals['_FLOWERSERVICE']._serialized_end=
|
|
85
|
+
_globals['_SCALAR']._serialized_end=2548
|
|
86
|
+
_globals['_FLOWERSERVICE']._serialized_start=2787
|
|
87
|
+
_globals['_FLOWERSERVICE']._serialized_end=2870
|
|
88
88
|
# @@protoc_insertion_point(module_scope)
|
flwr/proto/transport_pb2.pyi
CHANGED
|
@@ -402,20 +402,22 @@ global___ClientMessage = ClientMessage
|
|
|
402
402
|
class Scalar(google.protobuf.message.Message):
|
|
403
403
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
404
404
|
DOUBLE_FIELD_NUMBER: builtins.int
|
|
405
|
+
UINT64_FIELD_NUMBER: builtins.int
|
|
405
406
|
SINT64_FIELD_NUMBER: builtins.int
|
|
406
407
|
BOOL_FIELD_NUMBER: builtins.int
|
|
407
408
|
STRING_FIELD_NUMBER: builtins.int
|
|
408
409
|
BYTES_FIELD_NUMBER: builtins.int
|
|
409
410
|
double: builtins.float
|
|
410
|
-
|
|
411
|
+
uint64: builtins.int
|
|
411
412
|
"""float float = 2;
|
|
412
413
|
int32 int32 = 3;
|
|
413
414
|
int64 int64 = 4;
|
|
414
415
|
uint32 uint32 = 5;
|
|
415
|
-
uint64 uint64 = 6;
|
|
416
|
-
sint32 sint32 = 7;
|
|
417
416
|
"""
|
|
418
417
|
|
|
418
|
+
sint64: builtins.int
|
|
419
|
+
"""sint32 sint32 = 7;"""
|
|
420
|
+
|
|
419
421
|
bool: builtins.bool
|
|
420
422
|
"""fixed32 fixed32 = 9;
|
|
421
423
|
fixed64 fixed64 = 10;
|
|
@@ -428,12 +430,13 @@ class Scalar(google.protobuf.message.Message):
|
|
|
428
430
|
def __init__(self,
|
|
429
431
|
*,
|
|
430
432
|
double: builtins.float = ...,
|
|
433
|
+
uint64: builtins.int = ...,
|
|
431
434
|
sint64: builtins.int = ...,
|
|
432
435
|
bool: builtins.bool = ...,
|
|
433
436
|
string: typing.Text = ...,
|
|
434
437
|
bytes: builtins.bytes = ...,
|
|
435
438
|
) -> None: ...
|
|
436
|
-
def HasField(self, field_name: typing_extensions.Literal["bool",b"bool","bytes",b"bytes","double",b"double","scalar",b"scalar","sint64",b"sint64","string",b"string"]) -> builtins.bool: ...
|
|
437
|
-
def ClearField(self, field_name: typing_extensions.Literal["bool",b"bool","bytes",b"bytes","double",b"double","scalar",b"scalar","sint64",b"sint64","string",b"string"]) -> None: ...
|
|
438
|
-
def WhichOneof(self, oneof_group: typing_extensions.Literal["scalar",b"scalar"]) -> typing.Optional[typing_extensions.Literal["double","sint64","bool","string","bytes"]]: ...
|
|
439
|
+
def HasField(self, field_name: typing_extensions.Literal["bool",b"bool","bytes",b"bytes","double",b"double","scalar",b"scalar","sint64",b"sint64","string",b"string","uint64",b"uint64"]) -> builtins.bool: ...
|
|
440
|
+
def ClearField(self, field_name: typing_extensions.Literal["bool",b"bool","bytes",b"bytes","double",b"double","scalar",b"scalar","sint64",b"sint64","string",b"string","uint64",b"uint64"]) -> None: ...
|
|
441
|
+
def WhichOneof(self, oneof_group: typing_extensions.Literal["scalar",b"scalar"]) -> typing.Optional[typing_extensions.Literal["double","uint64","sint64","bool","string","bytes"]]: ...
|
|
439
442
|
global___Scalar = Scalar
|
|
@@ -30,6 +30,7 @@ from flwr.common.secure_aggregation.crypto.symmetric_encryption import (
|
|
|
30
30
|
generate_shared_key,
|
|
31
31
|
verify_hmac,
|
|
32
32
|
)
|
|
33
|
+
from flwr.proto.fab_pb2 import GetFabRequest, GetFabResponse # pylint: disable=E0611
|
|
33
34
|
from flwr.proto.fleet_pb2 import ( # pylint: disable=E0611
|
|
34
35
|
CreateNodeRequest,
|
|
35
36
|
CreateNodeResponse,
|
|
@@ -56,6 +57,7 @@ Request = Union[
|
|
|
56
57
|
PushTaskResRequest,
|
|
57
58
|
GetRunRequest,
|
|
58
59
|
PingRequest,
|
|
60
|
+
GetFabRequest,
|
|
59
61
|
]
|
|
60
62
|
|
|
61
63
|
Response = Union[
|
|
@@ -65,6 +67,7 @@ Response = Union[
|
|
|
65
67
|
PushTaskResResponse,
|
|
66
68
|
GetRunResponse,
|
|
67
69
|
PingResponse,
|
|
70
|
+
GetFabResponse,
|
|
68
71
|
]
|
|
69
72
|
|
|
70
73
|
|
|
@@ -173,6 +176,7 @@ class AuthenticateServerInterceptor(grpc.ServerInterceptor): # type: ignore
|
|
|
173
176
|
PushTaskResRequest,
|
|
174
177
|
GetRunRequest,
|
|
175
178
|
PingRequest,
|
|
179
|
+
GetFabRequest,
|
|
176
180
|
],
|
|
177
181
|
) -> bool:
|
|
178
182
|
if node_id is None:
|
|
@@ -117,6 +117,23 @@ class InMemoryState(State): # pylint: disable=R0902,R0904
|
|
|
117
117
|
log(ERROR, errors)
|
|
118
118
|
return None
|
|
119
119
|
|
|
120
|
+
with self.lock:
|
|
121
|
+
# Check if the TaskIns it is replying to exists and is valid
|
|
122
|
+
task_ins_id = task_res.task.ancestry[0]
|
|
123
|
+
task_ins = self.task_ins_store.get(UUID(task_ins_id))
|
|
124
|
+
|
|
125
|
+
if task_ins is None:
|
|
126
|
+
log(ERROR, "TaskIns with task_id %s does not exist.", task_ins_id)
|
|
127
|
+
return None
|
|
128
|
+
|
|
129
|
+
if task_ins.task.created_at + task_ins.task.ttl <= time.time():
|
|
130
|
+
log(
|
|
131
|
+
ERROR,
|
|
132
|
+
"Failed to store TaskRes: TaskIns with task_id %s has expired.",
|
|
133
|
+
task_ins_id,
|
|
134
|
+
)
|
|
135
|
+
return None
|
|
136
|
+
|
|
120
137
|
# Validate run_id
|
|
121
138
|
if task_res.run_id not in self.run_ids:
|
|
122
139
|
log(ERROR, "`run_id` is invalid")
|
|
@@ -372,7 +372,18 @@ class SqliteState(State): # pylint: disable=R0904
|
|
|
372
372
|
# Create task_id
|
|
373
373
|
task_id = uuid4()
|
|
374
374
|
|
|
375
|
-
|
|
375
|
+
task_ins_id = task_res.task.ancestry[0]
|
|
376
|
+
task_ins = self.get_valid_task_ins(task_ins_id)
|
|
377
|
+
if task_ins is None:
|
|
378
|
+
log(
|
|
379
|
+
ERROR,
|
|
380
|
+
"Failed to store TaskRes: "
|
|
381
|
+
"TaskIns with task_id %s does not exist or has expired.",
|
|
382
|
+
task_ins_id,
|
|
383
|
+
)
|
|
384
|
+
return None
|
|
385
|
+
|
|
386
|
+
# Store TaskRes
|
|
376
387
|
task_res.task_id = str(task_id)
|
|
377
388
|
data = (task_res_to_dict(task_res),)
|
|
378
389
|
|
|
@@ -810,6 +821,33 @@ class SqliteState(State): # pylint: disable=R0904
|
|
|
810
821
|
log(ERROR, "`node_id` does not exist.")
|
|
811
822
|
return False
|
|
812
823
|
|
|
824
|
+
def get_valid_task_ins(self, task_id: str) -> Optional[dict[str, Any]]:
|
|
825
|
+
"""Check if the TaskIns exists and is valid (not expired).
|
|
826
|
+
|
|
827
|
+
Return TaskIns if valid.
|
|
828
|
+
"""
|
|
829
|
+
query = """
|
|
830
|
+
SELECT *
|
|
831
|
+
FROM task_ins
|
|
832
|
+
WHERE task_id = :task_id
|
|
833
|
+
"""
|
|
834
|
+
data = {"task_id": task_id}
|
|
835
|
+
rows = self.query(query, data)
|
|
836
|
+
if not rows:
|
|
837
|
+
# TaskIns does not exist
|
|
838
|
+
return None
|
|
839
|
+
|
|
840
|
+
task_ins = rows[0]
|
|
841
|
+
created_at = task_ins["created_at"]
|
|
842
|
+
ttl = task_ins["ttl"]
|
|
843
|
+
current_time = time.time()
|
|
844
|
+
|
|
845
|
+
# Check if TaskIns is expired
|
|
846
|
+
if ttl is not None and created_at + ttl <= current_time:
|
|
847
|
+
return None
|
|
848
|
+
|
|
849
|
+
return task_ins
|
|
850
|
+
|
|
813
851
|
|
|
814
852
|
def dict_factory(
|
|
815
853
|
cursor: sqlite3.Cursor,
|
flwr/server/utils/validator.py
CHANGED
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
"""Validators."""
|
|
16
16
|
|
|
17
17
|
|
|
18
|
+
import time
|
|
18
19
|
from typing import Union
|
|
19
20
|
|
|
20
21
|
from flwr.proto.task_pb2 import TaskIns, TaskRes # pylint: disable=E0611
|
|
@@ -47,6 +48,11 @@ def validate_task_ins_or_res(tasks_ins_res: Union[TaskIns, TaskRes]) -> list[str
|
|
|
47
48
|
# unix timestamp of 27 March 2024 00h:00m:00s UTC
|
|
48
49
|
validation_errors.append("`pushed_at` is not a recent timestamp")
|
|
49
50
|
|
|
51
|
+
# Verify TTL and created_at time
|
|
52
|
+
current_time = time.time()
|
|
53
|
+
if tasks_ins_res.task.created_at + tasks_ins_res.task.ttl <= current_time:
|
|
54
|
+
validation_errors.append("Task TTL has expired")
|
|
55
|
+
|
|
50
56
|
# TaskIns specific
|
|
51
57
|
if isinstance(tasks_ins_res, TaskIns):
|
|
52
58
|
# Task producer
|
{flwr_nightly-1.12.0.dev20240925.dist-info → flwr_nightly-1.12.0.dev20240927.dist-info}/METADATA
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: flwr-nightly
|
|
3
|
-
Version: 1.12.0.
|
|
3
|
+
Version: 1.12.0.dev20240927
|
|
4
4
|
Summary: Flower: A Friendly Federated Learning Framework
|
|
5
5
|
Home-page: https://flower.ai
|
|
6
6
|
License: Apache-2.0
|
|
@@ -69,6 +69,7 @@ Description-Content-Type: text/markdown
|
|
|
69
69
|
[](https://github.com/adap/flower/blob/main/CONTRIBUTING.md)
|
|
70
70
|

|
|
71
71
|
[](https://pepy.tech/project/flwr)
|
|
72
|
+
[](https://hub.docker.com/u/flwr)
|
|
72
73
|
[](https://flower.ai/join-slack)
|
|
73
74
|
|
|
74
75
|
Flower (`flwr`) is a framework for building federated learning systems. The
|
{flwr_nightly-1.12.0.dev20240925.dist-info → flwr_nightly-1.12.0.dev20240927.dist-info}/RECORD
RENAMED
|
@@ -5,14 +5,14 @@ flwr/cli/build.py,sha256=H4xrQPDj7kvZ7Ys65yb-jE86RLEmvIE3pZ3mokZfJHg,5145
|
|
|
5
5
|
flwr/cli/config_utils.py,sha256=uJmJAHNoqeSeAC3BAxxoBuYOR9eV3mJg8wrWZgbGp3E,7521
|
|
6
6
|
flwr/cli/example.py,sha256=1bGDYll3BXQY2kRqSN-oICqS5n1b9m0g0RvXTopXHl4,2215
|
|
7
7
|
flwr/cli/install.py,sha256=t5tdeKOsTmG3nuInUoSKBVzUU1RnzA096yzYs013VhE,7065
|
|
8
|
-
flwr/cli/log.py,sha256=
|
|
8
|
+
flwr/cli/log.py,sha256=uhtcLcFGkazirWnEmet3Wt3rt_q-a13kauQqPLaMaRY,8097
|
|
9
9
|
flwr/cli/new/__init__.py,sha256=cQzK1WH4JP2awef1t2UQ2xjl1agVEz9rwutV18SWV1k,789
|
|
10
10
|
flwr/cli/new/new.py,sha256=wpHBmHOq6X04CPwJDaEgu3H5_MsfoEYsYsv3E-EDhzM,9558
|
|
11
11
|
flwr/cli/new/templates/__init__.py,sha256=4luU8RL-CK8JJCstQ_ON809W9bNTkY1l9zSaPKBkgwY,725
|
|
12
12
|
flwr/cli/new/templates/app/.gitignore.tpl,sha256=XixnHdyeMB2vwkGtGnwHqoWpH-9WChdyG0GXe57duhc,3078
|
|
13
13
|
flwr/cli/new/templates/app/LICENSE.tpl,sha256=WNHhf_5RCaeuKWyq_K39vmp9F28LxKsB4SpomwSZ2L0,11357
|
|
14
14
|
flwr/cli/new/templates/app/README.baseline.md.tpl,sha256=4dg2aBS-NIleVyDlxsG8m65Af6LIJ-pZA5ICjGFU5XA,9641
|
|
15
|
-
flwr/cli/new/templates/app/README.flowertune.md.tpl,sha256=
|
|
15
|
+
flwr/cli/new/templates/app/README.flowertune.md.tpl,sha256=QSG51uifue2KVZz2ZNw8kmOStS7svC2AQ2gTa5E7Bhs,3326
|
|
16
16
|
flwr/cli/new/templates/app/README.md.tpl,sha256=t7w4YFZEcJOxAnuJmNPw5-fDdIJu7PfLd8gFJDiBwwo,436
|
|
17
17
|
flwr/cli/new/templates/app/__init__.py,sha256=DU7QMY7IhMQyuwm_tja66xU0KXTWQFqzfTqwg-_NJdE,729
|
|
18
18
|
flwr/cli/new/templates/app/code/__init__.baseline.py.tpl,sha256=YkHAgppUeD2BnBoGfVB6dEvBfjuIPGsU1gw4CiUi3qA,40
|
|
@@ -59,7 +59,7 @@ flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl,sha256=vIO1ArukTC76ogYLNmJ
|
|
|
59
59
|
flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl,sha256=jk_5teoyOVM9QdBea8J-nk10S6TKw81QZiiKB54ATF0,654
|
|
60
60
|
flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl,sha256=bRIvPCPvTTI4Eo5b61Rmw8WdDw3sjcohciTXgULN5l8,702
|
|
61
61
|
flwr/cli/run/__init__.py,sha256=oCd6HmQDx-sqver1gecgx-uMA38BLTSiiKpl7RGNceg,789
|
|
62
|
-
flwr/cli/run/run.py,sha256=
|
|
62
|
+
flwr/cli/run/run.py,sha256=tLKeWpWJqEBxkOtDKEprL4SBKxH1vHGybQxlCLnXiSQ,8386
|
|
63
63
|
flwr/cli/utils.py,sha256=emMUdthvoHBTB0iGQp-oFBmA5wV46lw3y3FmfXQPCsc,4500
|
|
64
64
|
flwr/client/__init__.py,sha256=DGDoO0AEAfz-0CUFmLdyUUweAS64-07AOnmDfWUefK4,1192
|
|
65
65
|
flwr/client/app.py,sha256=cH0LAmpm6M8rfgc3lJFJ3pEwCVEgMuv-58WvOo6FEw0,31956
|
|
@@ -75,8 +75,8 @@ flwr/client/grpc_adapter_client/connection.py,sha256=50LlADsrvvo_kYoGRXOph3ICAmc
|
|
|
75
75
|
flwr/client/grpc_client/__init__.py,sha256=LsnbqXiJhgQcB0XzAlUQgPx011Uf7Y7yabIC1HxivJ8,735
|
|
76
76
|
flwr/client/grpc_client/connection.py,sha256=WX0cKlV_S19bYYp52z3PYRrtOdGb52ovvFFVWIz6Uyw,9382
|
|
77
77
|
flwr/client/grpc_rere_client/__init__.py,sha256=MK-oSoV3kwUEQnIwl0GN4OpiHR7eLOrMA8ikunET130,752
|
|
78
|
-
flwr/client/grpc_rere_client/client_interceptor.py,sha256=
|
|
79
|
-
flwr/client/grpc_rere_client/connection.py,sha256=
|
|
78
|
+
flwr/client/grpc_rere_client/client_interceptor.py,sha256=q08lIEeJLvvonNOiejNXvmySbPObteGnbDHhEKDmWzE,5380
|
|
79
|
+
flwr/client/grpc_rere_client/connection.py,sha256=tppAfMTV1yLBNmgS0KuvqGUjaecpA7SWbPIITkfEHcY,10960
|
|
80
80
|
flwr/client/grpc_rere_client/grpc_adapter.py,sha256=yPsJg8POxKqAtQxR7R2zSzJ85LQsfV7u6xfrsoZbf0g,4999
|
|
81
81
|
flwr/client/heartbeat.py,sha256=cx37mJBH8LyoIN4Lks85wtqT1mnU5GulQnr4pGCvAq0,2404
|
|
82
82
|
flwr/client/message_handler/__init__.py,sha256=QxxQuBNpFPTHx3KiUNvQSlqMKlEnbRR1kFfc1KVje08,719
|
|
@@ -94,7 +94,7 @@ flwr/client/node_state.py,sha256=HRKqkgTVGcZXL7nQSQ1nLxNx22eLyaCCIieZ5NZXgnA,394
|
|
|
94
94
|
flwr/client/node_state_tests.py,sha256=-4fVsn7y-z9NYBuhq-cjepgxgVuPqqQgDOL4SofrdIo,2239
|
|
95
95
|
flwr/client/numpy_client.py,sha256=tqGyhIkeeZQGr65BR03B7TWgx4rW3FA7G2874D8z_VU,11167
|
|
96
96
|
flwr/client/rest_client/__init__.py,sha256=5KGlp7pjc1dhNRkKlaNtUfQmg8wrRFh9lS3P3uRS-7Q,735
|
|
97
|
-
flwr/client/rest_client/connection.py,sha256=
|
|
97
|
+
flwr/client/rest_client/connection.py,sha256=icPDYPaTMWn3bQ9g42VUHEppcIVcBJFGuV3leo7mMpo,12814
|
|
98
98
|
flwr/client/supernode/__init__.py,sha256=SUhWOzcgXRNXk1V9UgB5-FaWukqqrOEajVUHEcPkwyQ,865
|
|
99
99
|
flwr/client/supernode/app.py,sha256=PGsOJG7TXqwnfV6NIyf_YOLKdm0fKjRxUnlPdFLOO3s,11940
|
|
100
100
|
flwr/client/typing.py,sha256=dxoTBnTMfqXr5J7G3y-uNjqxYCddvxhu89spfj4Lm2U,1048
|
|
@@ -130,8 +130,8 @@ flwr/common/secure_aggregation/crypto/symmetric_encryption.py,sha256=wTDbOaMGZwT
|
|
|
130
130
|
flwr/common/secure_aggregation/ndarrays_arithmetic.py,sha256=zvVAIrIyI6OSzGhpCi8NNaTvPXmoMYQIPJT-NkBg8RU,3013
|
|
131
131
|
flwr/common/secure_aggregation/quantization.py,sha256=mC4uLf05zeONo8Ke-BY0Tj8UCMOS7VD93zHCzuv3MHU,2304
|
|
132
132
|
flwr/common/secure_aggregation/secaggplus_constants.py,sha256=9MF-oQh62uD7rt9VeNB-rHf2gBLd5GL3S9OejCxmILY,2183
|
|
133
|
-
flwr/common/secure_aggregation/secaggplus_utils.py,sha256=
|
|
134
|
-
flwr/common/serde.py,sha256=
|
|
133
|
+
flwr/common/secure_aggregation/secaggplus_utils.py,sha256=o7IhHH6J9xqinhQy3TdPgQpoj1XyEpyv3OQFyx81RVQ,3193
|
|
134
|
+
flwr/common/serde.py,sha256=74nN5uqASdqfykSWPOhaTJARA07Iznyg3Nyr-dh-uy4,29918
|
|
135
135
|
flwr/common/telemetry.py,sha256=PvdlipCPYciqEgmXRwQ1HklP1uyECcNqt9HTBzthmAg,8904
|
|
136
136
|
flwr/common/typing.py,sha256=ZVviEABqDeGCyo_yM9ft8EbIGA9RaLOeoNHmMnTkmUo,4985
|
|
137
137
|
flwr/common/version.py,sha256=tCcl_FvxVK206C1dxIJCs4TjL06WmyaODBP19FRHE1c,1324
|
|
@@ -160,12 +160,12 @@ flwr/proto/exec_pb2.py,sha256=GH_VWC-BZwWmeWdmjP4IkXvwR8yY1uBZNNwKru-ZZL4,3231
|
|
|
160
160
|
flwr/proto/exec_pb2.pyi,sha256=5y6L3xFkAuCfLTn2pVIHQAlXp17YcTTq8WVDS7_MPl4,4273
|
|
161
161
|
flwr/proto/exec_pb2_grpc.py,sha256=faAN19XEMP8GTKrcIU6jvlWkN44n2KiUsZh_OG0sYcg,4072
|
|
162
162
|
flwr/proto/exec_pb2_grpc.pyi,sha256=VrFhT1Um3Nb8UC2YqnR9GIiM-Yyx0FqaxVOWljh-G_w,1208
|
|
163
|
-
flwr/proto/fab_pb2.py,sha256=
|
|
164
|
-
flwr/proto/fab_pb2.pyi,sha256=
|
|
163
|
+
flwr/proto/fab_pb2.py,sha256=3QSDq9pjbZoqVxsmCRDwHO5PrSjzn2vixjYxE-qPmb0,1589
|
|
164
|
+
flwr/proto/fab_pb2.pyi,sha256=fXI108QaFtbl1WWTyslPbIx9c_19D0aYCoFn0xYtL4U,2277
|
|
165
165
|
flwr/proto/fab_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
|
|
166
166
|
flwr/proto/fab_pb2_grpc.pyi,sha256=ff2TSiLVnG6IVQcTGzb2DIH3XRSoAvAo_RMcvbMFyc0,76
|
|
167
|
-
flwr/proto/fleet_pb2.py,sha256=
|
|
168
|
-
flwr/proto/fleet_pb2.pyi,sha256=
|
|
167
|
+
flwr/proto/fleet_pb2.py,sha256=06NAaIAOxTA2UhkBA-VWZKflaVQIzXgPZ3Fb6vtliY0,4789
|
|
168
|
+
flwr/proto/fleet_pb2.pyi,sha256=bkzPOFXaYVZv9jRIA_XqckTR4dLZcfPRmluaGeoqxBY,7851
|
|
169
169
|
flwr/proto/fleet_pb2_grpc.py,sha256=VyqpAcX-6tiQVehQfRMbCErtIW4Mot1uXUSzRaklZTI,12228
|
|
170
170
|
flwr/proto/fleet_pb2_grpc.pyi,sha256=VvOtOBwPcgoHRPgj2JENXq2HbcfU8cxp82E9tDfGyEs,3216
|
|
171
171
|
flwr/proto/grpcadapter_pb2.py,sha256=bb8mW09XzNCpMdr1KuYQkefPFWR8lc8y1uL6Uk0TtsM,1843
|
|
@@ -180,20 +180,20 @@ flwr/proto/node_pb2.py,sha256=qrxEpf7Up9XhigP8g9cIHVhmpdKmYpxMdlO67H0xjEM,1081
|
|
|
180
180
|
flwr/proto/node_pb2.pyi,sha256=aX3BHhgXvJE1rvcRnEE_gB-5GcaFQ0SJ88yTE223bjI,751
|
|
181
181
|
flwr/proto/node_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
|
|
182
182
|
flwr/proto/node_pb2_grpc.pyi,sha256=ff2TSiLVnG6IVQcTGzb2DIH3XRSoAvAo_RMcvbMFyc0,76
|
|
183
|
-
flwr/proto/recordset_pb2.py,sha256=
|
|
184
|
-
flwr/proto/recordset_pb2.pyi,sha256=
|
|
183
|
+
flwr/proto/recordset_pb2.py,sha256=XjEIDU-YlKSY59qNd0qXTFB4COvMHGiszQ5O1krJ1Ks,6367
|
|
184
|
+
flwr/proto/recordset_pb2.pyi,sha256=ypFNvroU4aIlnN0D6W4XAsOfm0UzTfXhxxL1v7u__Ac,15370
|
|
185
185
|
flwr/proto/recordset_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
|
|
186
186
|
flwr/proto/recordset_pb2_grpc.pyi,sha256=ff2TSiLVnG6IVQcTGzb2DIH3XRSoAvAo_RMcvbMFyc0,76
|
|
187
|
-
flwr/proto/run_pb2.py,sha256=
|
|
188
|
-
flwr/proto/run_pb2.pyi,sha256=
|
|
187
|
+
flwr/proto/run_pb2.py,sha256=pwel-8Hzsz1Gw2EHGEFKObgSEKQNth7nGZOEsJQO8fM,4940
|
|
188
|
+
flwr/proto/run_pb2.pyi,sha256=pr7MPml_7gOmBuu7BO-yaU-LexamsJYxnRG-utigVAo,9641
|
|
189
189
|
flwr/proto/run_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
|
|
190
190
|
flwr/proto/run_pb2_grpc.pyi,sha256=ff2TSiLVnG6IVQcTGzb2DIH3XRSoAvAo_RMcvbMFyc0,76
|
|
191
191
|
flwr/proto/task_pb2.py,sha256=R5GfHgL8IJRI_qHWNeILl1Y9zHjvB0tnCvMHmTgF4Is,2361
|
|
192
192
|
flwr/proto/task_pb2.pyi,sha256=KJVsLm-THY5QjHreHDm_-OS1tyZyD61mx6BzOpoeMjw,4320
|
|
193
193
|
flwr/proto/task_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
|
|
194
194
|
flwr/proto/task_pb2_grpc.pyi,sha256=ff2TSiLVnG6IVQcTGzb2DIH3XRSoAvAo_RMcvbMFyc0,76
|
|
195
|
-
flwr/proto/transport_pb2.py,sha256=
|
|
196
|
-
flwr/proto/transport_pb2.pyi,sha256=
|
|
195
|
+
flwr/proto/transport_pb2.py,sha256=lJsj9rnLiFBhepXuZAIpZysGAqvtXtoSt4h7soU61Do,9824
|
|
196
|
+
flwr/proto/transport_pb2.pyi,sha256=ipHQ03eFBqsxtAuAVefZ2lVr04BZ4YifJCS2eauNmy8,21627
|
|
197
197
|
flwr/proto/transport_pb2_grpc.py,sha256=vLN3EHtx2aEEMCO4f1Upu-l27BPzd3-5pV-u8wPcosk,2598
|
|
198
198
|
flwr/proto/transport_pb2_grpc.pyi,sha256=AGXf8RiIiW2J5IKMlm_3qT3AzcDa4F3P5IqUjve_esA,766
|
|
199
199
|
flwr/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -259,7 +259,7 @@ flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py,sha256=h3EhqgelegVC4E
|
|
|
259
259
|
flwr/server/superlink/fleet/grpc_bidi/grpc_server.py,sha256=8VFp7K5ollkexR2UmXOrLtxo6H_B79eZkyM_Ro77tSU,12312
|
|
260
260
|
flwr/server/superlink/fleet/grpc_rere/__init__.py,sha256=j2hyC342am-_Hgp1g80Y3fGDzfTI6n8QOOn2PyWf4eg,758
|
|
261
261
|
flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py,sha256=bgoLQEhahVHjdlRDk_58zyKFeMOziiPUXSbYMhOxybY,4757
|
|
262
|
-
flwr/server/superlink/fleet/grpc_rere/server_interceptor.py,sha256=
|
|
262
|
+
flwr/server/superlink/fleet/grpc_rere/server_interceptor.py,sha256=pgSiH-qrTgDxu4M_jJu-8gvEQnxTdR-qIAawKgxjQ6M,8157
|
|
263
263
|
flwr/server/superlink/fleet/message_handler/__init__.py,sha256=h8oLD7uo5lKICPy0rRdKRjTYe62u8PKkT_fA4xF5JPA,731
|
|
264
264
|
flwr/server/superlink/fleet/message_handler/message_handler.py,sha256=NneayZ9FjIf7k2h_R3wQ2wluqYCAyzVVU_Uq7keWay4,4433
|
|
265
265
|
flwr/server/superlink/fleet/rest_rere/__init__.py,sha256=5jbYbAn75sGv-gBwOPDySE0kz96F6dTYLeMrGqNi4lM,735
|
|
@@ -270,15 +270,15 @@ flwr/server/superlink/fleet/vce/backend/backend.py,sha256=LBAQxnbfPAphVOVIvYMj0Q
|
|
|
270
270
|
flwr/server/superlink/fleet/vce/backend/raybackend.py,sha256=7kB3re3mR53b7E6L6DPSioTSKD3YGtS3uJsPD7Hn2Fw,7155
|
|
271
271
|
flwr/server/superlink/fleet/vce/vce_api.py,sha256=cGPsjS_4SJHm8jszGjsHh8ZNk9nqWoIQwW_62yKKR1Y,12647
|
|
272
272
|
flwr/server/superlink/state/__init__.py,sha256=Gj2OTFLXvA-mAjBvwuKDM3rDrVaQPcIoybSa2uskMTE,1003
|
|
273
|
-
flwr/server/superlink/state/in_memory_state.py,sha256=
|
|
274
|
-
flwr/server/superlink/state/sqlite_state.py,sha256=
|
|
273
|
+
flwr/server/superlink/state/in_memory_state.py,sha256=m7UwCEYwDaUVnPq6AMegmFnHMx7C5ENKHT5GeVaWalM,13792
|
|
274
|
+
flwr/server/superlink/state/sqlite_state.py,sha256=tLdpnXZ4KDdWTMXfCylRlu3pGrR156cGgDq9N_0TK0Y,33244
|
|
275
275
|
flwr/server/superlink/state/state.py,sha256=KpM894R8RE1N0b-s_Nlii6i0TDxj0DRkKa3Vf24Gt70,8127
|
|
276
276
|
flwr/server/superlink/state/state_factory.py,sha256=Fo8pBQ1WWrVJK5TOEPZ_zgJE69_mfTGjTO6czh6571o,2021
|
|
277
277
|
flwr/server/superlink/state/utils.py,sha256=OsF3OOoU4bU4PgLWkypX6EDoFs0L8RP_mHEBG-tVqGA,5227
|
|
278
278
|
flwr/server/typing.py,sha256=5kaRLZuxTEse9A0g7aVna2VhYxU3wTq1f3d3mtw7kXs,1019
|
|
279
279
|
flwr/server/utils/__init__.py,sha256=pltsPHJoXmUIr3utjwwYxu7_ZAGy5u4MVHzv9iA5Un8,908
|
|
280
280
|
flwr/server/utils/tensorboard.py,sha256=gEBD8w_5uaIfp5aw5RYH66lYZpd_SfkObHQ7eDd9MUk,5466
|
|
281
|
-
flwr/server/utils/validator.py,sha256=
|
|
281
|
+
flwr/server/utils/validator.py,sha256=o13PPwjSM7VyUZgzGUiBQTaJLVmRRKi0NSQj6f5HuiA,5512
|
|
282
282
|
flwr/server/workflow/__init__.py,sha256=SXY0XkwbkezFBxxrFB5hKUtmtAgnYISBkPouR1V71ss,902
|
|
283
283
|
flwr/server/workflow/constant.py,sha256=q4DLdR8Krlxuewq2AQjwTL75hphxE5ODNz4AhViHMXk,1082
|
|
284
284
|
flwr/server/workflow/default_workflows.py,sha256=UMC9JgdomKwxql5G0OV4AeRXWI-bMClaLAOn5OrZMnw,14073
|
|
@@ -299,8 +299,8 @@ flwr/superexec/exec_grpc.py,sha256=ZPq7EP55Vwj0kRcLVuTCokFqfIgBk-7YmDykZoMKi-c,1
|
|
|
299
299
|
flwr/superexec/exec_servicer.py,sha256=TRpwPVl7eI0Y_xlCY6DmVpAo0yFU1gLwzyIeqFw9pyk,4746
|
|
300
300
|
flwr/superexec/executor.py,sha256=-5J-ZLs-uArro3T2pCq0YQRC65cs18M888nufzdYE4E,2375
|
|
301
301
|
flwr/superexec/simulation.py,sha256=J6pw-RqCSiUed8I_3MasZH4tl57ZmDebPAHNnbb0-vE,7420
|
|
302
|
-
flwr_nightly-1.12.0.
|
|
303
|
-
flwr_nightly-1.12.0.
|
|
304
|
-
flwr_nightly-1.12.0.
|
|
305
|
-
flwr_nightly-1.12.0.
|
|
306
|
-
flwr_nightly-1.12.0.
|
|
302
|
+
flwr_nightly-1.12.0.dev20240927.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
|
|
303
|
+
flwr_nightly-1.12.0.dev20240927.dist-info/METADATA,sha256=Y7G6l6Gb85cHC-43-nlDg7uzBcn1VL_3BqmRmt4HySM,15552
|
|
304
|
+
flwr_nightly-1.12.0.dev20240927.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
|
|
305
|
+
flwr_nightly-1.12.0.dev20240927.dist-info/entry_points.txt,sha256=WUCbqhLEOzjx_lyATIM0-f0e8kOVaQjzwOvyOxHrMhs,434
|
|
306
|
+
flwr_nightly-1.12.0.dev20240927.dist-info/RECORD,,
|
{flwr_nightly-1.12.0.dev20240925.dist-info → flwr_nightly-1.12.0.dev20240927.dist-info}/LICENSE
RENAMED
|
File without changes
|
{flwr_nightly-1.12.0.dev20240925.dist-info → flwr_nightly-1.12.0.dev20240927.dist-info}/WHEEL
RENAMED
|
File without changes
|
|
File without changes
|