flwr-nightly 1.12.0.dev20240918__py3-none-any.whl → 1.12.0.dev20240920__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/new/new.py +1 -1
- flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +1 -0
- flwr/proto/control_pb2.py +27 -0
- flwr/proto/control_pb2.pyi +7 -0
- flwr/proto/control_pb2_grpc.py +67 -0
- flwr/proto/control_pb2_grpc.pyi +27 -0
- flwr/proto/driver_pb2.py +15 -24
- flwr/proto/driver_pb2.pyi +0 -52
- flwr/proto/driver_pb2_grpc.py +6 -6
- flwr/proto/driver_pb2_grpc.pyi +4 -4
- flwr/proto/run_pb2.py +18 -9
- flwr/proto/run_pb2.pyi +52 -0
- flwr/server/run_serverapp.py +2 -2
- flwr/server/superlink/driver/driver_servicer.py +2 -2
- flwr/server/superlink/state/sqlite_state.py +5 -5
- flwr/superexec/deployment.py +3 -1
- flwr/superexec/exec_servicer.py +68 -3
- flwr/superexec/executor.py +2 -1
- {flwr_nightly-1.12.0.dev20240918.dist-info → flwr_nightly-1.12.0.dev20240920.dist-info}/METADATA +1 -1
- {flwr_nightly-1.12.0.dev20240918.dist-info → flwr_nightly-1.12.0.dev20240920.dist-info}/RECORD +23 -19
- {flwr_nightly-1.12.0.dev20240918.dist-info → flwr_nightly-1.12.0.dev20240920.dist-info}/LICENSE +0 -0
- {flwr_nightly-1.12.0.dev20240918.dist-info → flwr_nightly-1.12.0.dev20240920.dist-info}/WHEEL +0 -0
- {flwr_nightly-1.12.0.dev20240918.dist-info → flwr_nightly-1.12.0.dev20240920.dist-info}/entry_points.txt +0 -0
flwr/cli/new/new.py
CHANGED
|
@@ -275,7 +275,7 @@ def new(
|
|
|
275
275
|
)
|
|
276
276
|
)
|
|
277
277
|
|
|
278
|
-
_add = " huggingface-cli login\n" if
|
|
278
|
+
_add = " huggingface-cli login\n" if llm_challenge_str else ""
|
|
279
279
|
print(
|
|
280
280
|
typer.style(
|
|
281
281
|
f" cd {package_name}\n" + " pip install -e .\n" + _add + " flwr run\n",
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
|
3
|
+
# source: flwr/proto/control.proto
|
|
4
|
+
# Protobuf Python Version: 4.25.0
|
|
5
|
+
"""Generated protocol buffer code."""
|
|
6
|
+
from google.protobuf import descriptor as _descriptor
|
|
7
|
+
from google.protobuf import descriptor_pool as _descriptor_pool
|
|
8
|
+
from google.protobuf import symbol_database as _symbol_database
|
|
9
|
+
from google.protobuf.internal import builder as _builder
|
|
10
|
+
# @@protoc_insertion_point(imports)
|
|
11
|
+
|
|
12
|
+
_sym_db = _symbol_database.Default()
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
from flwr.proto import run_pb2 as flwr_dot_proto_dot_run__pb2
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x18\x66lwr/proto/control.proto\x12\nflwr.proto\x1a\x14\x66lwr/proto/run.proto2U\n\x07\x43ontrol\x12J\n\tCreateRun\x12\x1c.flwr.proto.CreateRunRequest\x1a\x1d.flwr.proto.CreateRunResponse\"\x00\x62\x06proto3')
|
|
19
|
+
|
|
20
|
+
_globals = globals()
|
|
21
|
+
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
|
22
|
+
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'flwr.proto.control_pb2', _globals)
|
|
23
|
+
if _descriptor._USE_C_DESCRIPTORS == False:
|
|
24
|
+
DESCRIPTOR._options = None
|
|
25
|
+
_globals['_CONTROL']._serialized_start=62
|
|
26
|
+
_globals['_CONTROL']._serialized_end=147
|
|
27
|
+
# @@protoc_insertion_point(module_scope)
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
|
|
2
|
+
"""Client and server classes corresponding to protobuf-defined services."""
|
|
3
|
+
import grpc
|
|
4
|
+
|
|
5
|
+
from flwr.proto import run_pb2 as flwr_dot_proto_dot_run__pb2
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class ControlStub(object):
|
|
9
|
+
"""Missing associated documentation comment in .proto file."""
|
|
10
|
+
|
|
11
|
+
def __init__(self, channel):
|
|
12
|
+
"""Constructor.
|
|
13
|
+
|
|
14
|
+
Args:
|
|
15
|
+
channel: A grpc.Channel.
|
|
16
|
+
"""
|
|
17
|
+
self.CreateRun = channel.unary_unary(
|
|
18
|
+
'/flwr.proto.Control/CreateRun',
|
|
19
|
+
request_serializer=flwr_dot_proto_dot_run__pb2.CreateRunRequest.SerializeToString,
|
|
20
|
+
response_deserializer=flwr_dot_proto_dot_run__pb2.CreateRunResponse.FromString,
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class ControlServicer(object):
|
|
25
|
+
"""Missing associated documentation comment in .proto file."""
|
|
26
|
+
|
|
27
|
+
def CreateRun(self, request, context):
|
|
28
|
+
"""Request to create a new run
|
|
29
|
+
"""
|
|
30
|
+
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
|
31
|
+
context.set_details('Method not implemented!')
|
|
32
|
+
raise NotImplementedError('Method not implemented!')
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def add_ControlServicer_to_server(servicer, server):
|
|
36
|
+
rpc_method_handlers = {
|
|
37
|
+
'CreateRun': grpc.unary_unary_rpc_method_handler(
|
|
38
|
+
servicer.CreateRun,
|
|
39
|
+
request_deserializer=flwr_dot_proto_dot_run__pb2.CreateRunRequest.FromString,
|
|
40
|
+
response_serializer=flwr_dot_proto_dot_run__pb2.CreateRunResponse.SerializeToString,
|
|
41
|
+
),
|
|
42
|
+
}
|
|
43
|
+
generic_handler = grpc.method_handlers_generic_handler(
|
|
44
|
+
'flwr.proto.Control', rpc_method_handlers)
|
|
45
|
+
server.add_generic_rpc_handlers((generic_handler,))
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
# This class is part of an EXPERIMENTAL API.
|
|
49
|
+
class Control(object):
|
|
50
|
+
"""Missing associated documentation comment in .proto file."""
|
|
51
|
+
|
|
52
|
+
@staticmethod
|
|
53
|
+
def CreateRun(request,
|
|
54
|
+
target,
|
|
55
|
+
options=(),
|
|
56
|
+
channel_credentials=None,
|
|
57
|
+
call_credentials=None,
|
|
58
|
+
insecure=False,
|
|
59
|
+
compression=None,
|
|
60
|
+
wait_for_ready=None,
|
|
61
|
+
timeout=None,
|
|
62
|
+
metadata=None):
|
|
63
|
+
return grpc.experimental.unary_unary(request, target, '/flwr.proto.Control/CreateRun',
|
|
64
|
+
flwr_dot_proto_dot_run__pb2.CreateRunRequest.SerializeToString,
|
|
65
|
+
flwr_dot_proto_dot_run__pb2.CreateRunResponse.FromString,
|
|
66
|
+
options, channel_credentials,
|
|
67
|
+
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"""
|
|
2
|
+
@generated by mypy-protobuf. Do not edit manually!
|
|
3
|
+
isort:skip_file
|
|
4
|
+
"""
|
|
5
|
+
import abc
|
|
6
|
+
import flwr.proto.run_pb2
|
|
7
|
+
import grpc
|
|
8
|
+
|
|
9
|
+
class ControlStub:
|
|
10
|
+
def __init__(self, channel: grpc.Channel) -> None: ...
|
|
11
|
+
CreateRun: grpc.UnaryUnaryMultiCallable[
|
|
12
|
+
flwr.proto.run_pb2.CreateRunRequest,
|
|
13
|
+
flwr.proto.run_pb2.CreateRunResponse]
|
|
14
|
+
"""Request to create a new run"""
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class ControlServicer(metaclass=abc.ABCMeta):
|
|
18
|
+
@abc.abstractmethod
|
|
19
|
+
def CreateRun(self,
|
|
20
|
+
request: flwr.proto.run_pb2.CreateRunRequest,
|
|
21
|
+
context: grpc.ServicerContext,
|
|
22
|
+
) -> flwr.proto.run_pb2.CreateRunResponse:
|
|
23
|
+
"""Request to create a new run"""
|
|
24
|
+
pass
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def add_ControlServicer_to_server(servicer: ControlServicer, server: grpc.Server) -> None: ...
|
flwr/proto/driver_pb2.py
CHANGED
|
@@ -16,36 +16,27 @@ from flwr.proto import node_pb2 as flwr_dot_proto_dot_node__pb2
|
|
|
16
16
|
from flwr.proto import task_pb2 as flwr_dot_proto_dot_task__pb2
|
|
17
17
|
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
|
-
from flwr.proto import transport_pb2 as flwr_dot_proto_dot_transport__pb2
|
|
20
19
|
|
|
21
20
|
|
|
22
|
-
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x17\x66lwr/proto/driver.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\
|
|
21
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x17\x66lwr/proto/driver.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\x0fGetNodesRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\"3\n\x10GetNodesResponse\x12\x1f\n\x05nodes\x18\x01 \x03(\x0b\x32\x10.flwr.proto.Node\"@\n\x12PushTaskInsRequest\x12*\n\rtask_ins_list\x18\x01 \x03(\x0b\x32\x13.flwr.proto.TaskIns\"\'\n\x13PushTaskInsResponse\x12\x10\n\x08task_ids\x18\x02 \x03(\t\"F\n\x12PullTaskResRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x10\n\x08task_ids\x18\x02 \x03(\t\"A\n\x13PullTaskResResponse\x12*\n\rtask_res_list\x18\x01 \x03(\x0b\x32\x13.flwr.proto.TaskRes2\xc7\x03\n\x06\x44river\x12J\n\tCreateRun\x12\x1c.flwr.proto.CreateRunRequest\x1a\x1d.flwr.proto.CreateRunResponse\"\x00\x12G\n\x08GetNodes\x12\x1b.flwr.proto.GetNodesRequest\x1a\x1c.flwr.proto.GetNodesResponse\"\x00\x12P\n\x0bPushTaskIns\x12\x1e.flwr.proto.PushTaskInsRequest\x1a\x1f.flwr.proto.PushTaskInsResponse\"\x00\x12P\n\x0bPullTaskRes\x12\x1e.flwr.proto.PullTaskResRequest\x1a\x1f.flwr.proto.PullTaskResResponse\"\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')
|
|
23
22
|
|
|
24
23
|
_globals = globals()
|
|
25
24
|
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
|
26
25
|
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'flwr.proto.driver_pb2', _globals)
|
|
27
26
|
if _descriptor._USE_C_DESCRIPTORS == False:
|
|
28
27
|
DESCRIPTOR._options = None
|
|
29
|
-
_globals['
|
|
30
|
-
_globals['
|
|
31
|
-
_globals['
|
|
32
|
-
_globals['
|
|
33
|
-
_globals['
|
|
34
|
-
_globals['
|
|
35
|
-
_globals['
|
|
36
|
-
_globals['
|
|
37
|
-
_globals['
|
|
38
|
-
_globals['
|
|
39
|
-
_globals['
|
|
40
|
-
_globals['
|
|
41
|
-
_globals['
|
|
42
|
-
_globals['
|
|
43
|
-
_globals['_PUSHTASKINSRESPONSE']._serialized_start=586
|
|
44
|
-
_globals['_PUSHTASKINSRESPONSE']._serialized_end=625
|
|
45
|
-
_globals['_PULLTASKRESREQUEST']._serialized_start=627
|
|
46
|
-
_globals['_PULLTASKRESREQUEST']._serialized_end=697
|
|
47
|
-
_globals['_PULLTASKRESRESPONSE']._serialized_start=699
|
|
48
|
-
_globals['_PULLTASKRESRESPONSE']._serialized_end=764
|
|
49
|
-
_globals['_DRIVER']._serialized_start=767
|
|
50
|
-
_globals['_DRIVER']._serialized_end=1222
|
|
28
|
+
_globals['_GETNODESREQUEST']._serialized_start=129
|
|
29
|
+
_globals['_GETNODESREQUEST']._serialized_end=162
|
|
30
|
+
_globals['_GETNODESRESPONSE']._serialized_start=164
|
|
31
|
+
_globals['_GETNODESRESPONSE']._serialized_end=215
|
|
32
|
+
_globals['_PUSHTASKINSREQUEST']._serialized_start=217
|
|
33
|
+
_globals['_PUSHTASKINSREQUEST']._serialized_end=281
|
|
34
|
+
_globals['_PUSHTASKINSRESPONSE']._serialized_start=283
|
|
35
|
+
_globals['_PUSHTASKINSRESPONSE']._serialized_end=322
|
|
36
|
+
_globals['_PULLTASKRESREQUEST']._serialized_start=324
|
|
37
|
+
_globals['_PULLTASKRESREQUEST']._serialized_end=394
|
|
38
|
+
_globals['_PULLTASKRESRESPONSE']._serialized_start=396
|
|
39
|
+
_globals['_PULLTASKRESRESPONSE']._serialized_end=461
|
|
40
|
+
_globals['_DRIVER']._serialized_start=464
|
|
41
|
+
_globals['_DRIVER']._serialized_end=919
|
|
51
42
|
# @@protoc_insertion_point(module_scope)
|
flwr/proto/driver_pb2.pyi
CHANGED
|
@@ -3,10 +3,8 @@
|
|
|
3
3
|
isort:skip_file
|
|
4
4
|
"""
|
|
5
5
|
import builtins
|
|
6
|
-
import flwr.proto.fab_pb2
|
|
7
6
|
import flwr.proto.node_pb2
|
|
8
7
|
import flwr.proto.task_pb2
|
|
9
|
-
import flwr.proto.transport_pb2
|
|
10
8
|
import google.protobuf.descriptor
|
|
11
9
|
import google.protobuf.internal.containers
|
|
12
10
|
import google.protobuf.message
|
|
@@ -15,56 +13,6 @@ import typing_extensions
|
|
|
15
13
|
|
|
16
14
|
DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
|
|
17
15
|
|
|
18
|
-
class CreateRunRequest(google.protobuf.message.Message):
|
|
19
|
-
"""CreateRun"""
|
|
20
|
-
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
21
|
-
class OverrideConfigEntry(google.protobuf.message.Message):
|
|
22
|
-
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
23
|
-
KEY_FIELD_NUMBER: builtins.int
|
|
24
|
-
VALUE_FIELD_NUMBER: builtins.int
|
|
25
|
-
key: typing.Text
|
|
26
|
-
@property
|
|
27
|
-
def value(self) -> flwr.proto.transport_pb2.Scalar: ...
|
|
28
|
-
def __init__(self,
|
|
29
|
-
*,
|
|
30
|
-
key: typing.Text = ...,
|
|
31
|
-
value: typing.Optional[flwr.proto.transport_pb2.Scalar] = ...,
|
|
32
|
-
) -> None: ...
|
|
33
|
-
def HasField(self, field_name: typing_extensions.Literal["value",b"value"]) -> builtins.bool: ...
|
|
34
|
-
def ClearField(self, field_name: typing_extensions.Literal["key",b"key","value",b"value"]) -> None: ...
|
|
35
|
-
|
|
36
|
-
FAB_ID_FIELD_NUMBER: builtins.int
|
|
37
|
-
FAB_VERSION_FIELD_NUMBER: builtins.int
|
|
38
|
-
OVERRIDE_CONFIG_FIELD_NUMBER: builtins.int
|
|
39
|
-
FAB_FIELD_NUMBER: builtins.int
|
|
40
|
-
fab_id: typing.Text
|
|
41
|
-
fab_version: typing.Text
|
|
42
|
-
@property
|
|
43
|
-
def override_config(self) -> google.protobuf.internal.containers.MessageMap[typing.Text, flwr.proto.transport_pb2.Scalar]: ...
|
|
44
|
-
@property
|
|
45
|
-
def fab(self) -> flwr.proto.fab_pb2.Fab: ...
|
|
46
|
-
def __init__(self,
|
|
47
|
-
*,
|
|
48
|
-
fab_id: typing.Text = ...,
|
|
49
|
-
fab_version: typing.Text = ...,
|
|
50
|
-
override_config: typing.Optional[typing.Mapping[typing.Text, flwr.proto.transport_pb2.Scalar]] = ...,
|
|
51
|
-
fab: typing.Optional[flwr.proto.fab_pb2.Fab] = ...,
|
|
52
|
-
) -> None: ...
|
|
53
|
-
def HasField(self, field_name: typing_extensions.Literal["fab",b"fab"]) -> builtins.bool: ...
|
|
54
|
-
def ClearField(self, field_name: typing_extensions.Literal["fab",b"fab","fab_id",b"fab_id","fab_version",b"fab_version","override_config",b"override_config"]) -> None: ...
|
|
55
|
-
global___CreateRunRequest = CreateRunRequest
|
|
56
|
-
|
|
57
|
-
class CreateRunResponse(google.protobuf.message.Message):
|
|
58
|
-
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
59
|
-
RUN_ID_FIELD_NUMBER: builtins.int
|
|
60
|
-
run_id: builtins.int
|
|
61
|
-
def __init__(self,
|
|
62
|
-
*,
|
|
63
|
-
run_id: builtins.int = ...,
|
|
64
|
-
) -> None: ...
|
|
65
|
-
def ClearField(self, field_name: typing_extensions.Literal["run_id",b"run_id"]) -> None: ...
|
|
66
|
-
global___CreateRunResponse = CreateRunResponse
|
|
67
|
-
|
|
68
16
|
class GetNodesRequest(google.protobuf.message.Message):
|
|
69
17
|
"""GetNodes messages"""
|
|
70
18
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
flwr/proto/driver_pb2_grpc.py
CHANGED
|
@@ -18,8 +18,8 @@ class DriverStub(object):
|
|
|
18
18
|
"""
|
|
19
19
|
self.CreateRun = channel.unary_unary(
|
|
20
20
|
'/flwr.proto.Driver/CreateRun',
|
|
21
|
-
request_serializer=
|
|
22
|
-
response_deserializer=
|
|
21
|
+
request_serializer=flwr_dot_proto_dot_run__pb2.CreateRunRequest.SerializeToString,
|
|
22
|
+
response_deserializer=flwr_dot_proto_dot_run__pb2.CreateRunResponse.FromString,
|
|
23
23
|
)
|
|
24
24
|
self.GetNodes = channel.unary_unary(
|
|
25
25
|
'/flwr.proto.Driver/GetNodes',
|
|
@@ -98,8 +98,8 @@ def add_DriverServicer_to_server(servicer, server):
|
|
|
98
98
|
rpc_method_handlers = {
|
|
99
99
|
'CreateRun': grpc.unary_unary_rpc_method_handler(
|
|
100
100
|
servicer.CreateRun,
|
|
101
|
-
request_deserializer=
|
|
102
|
-
response_serializer=
|
|
101
|
+
request_deserializer=flwr_dot_proto_dot_run__pb2.CreateRunRequest.FromString,
|
|
102
|
+
response_serializer=flwr_dot_proto_dot_run__pb2.CreateRunResponse.SerializeToString,
|
|
103
103
|
),
|
|
104
104
|
'GetNodes': grpc.unary_unary_rpc_method_handler(
|
|
105
105
|
servicer.GetNodes,
|
|
@@ -148,8 +148,8 @@ class Driver(object):
|
|
|
148
148
|
timeout=None,
|
|
149
149
|
metadata=None):
|
|
150
150
|
return grpc.experimental.unary_unary(request, target, '/flwr.proto.Driver/CreateRun',
|
|
151
|
-
|
|
152
|
-
|
|
151
|
+
flwr_dot_proto_dot_run__pb2.CreateRunRequest.SerializeToString,
|
|
152
|
+
flwr_dot_proto_dot_run__pb2.CreateRunResponse.FromString,
|
|
153
153
|
options, channel_credentials,
|
|
154
154
|
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
|
|
155
155
|
|
flwr/proto/driver_pb2_grpc.pyi
CHANGED
|
@@ -11,8 +11,8 @@ import grpc
|
|
|
11
11
|
class DriverStub:
|
|
12
12
|
def __init__(self, channel: grpc.Channel) -> None: ...
|
|
13
13
|
CreateRun: grpc.UnaryUnaryMultiCallable[
|
|
14
|
-
flwr.proto.
|
|
15
|
-
flwr.proto.
|
|
14
|
+
flwr.proto.run_pb2.CreateRunRequest,
|
|
15
|
+
flwr.proto.run_pb2.CreateRunResponse]
|
|
16
16
|
"""Request run_id"""
|
|
17
17
|
|
|
18
18
|
GetNodes: grpc.UnaryUnaryMultiCallable[
|
|
@@ -44,9 +44,9 @@ class DriverStub:
|
|
|
44
44
|
class DriverServicer(metaclass=abc.ABCMeta):
|
|
45
45
|
@abc.abstractmethod
|
|
46
46
|
def CreateRun(self,
|
|
47
|
-
request: flwr.proto.
|
|
47
|
+
request: flwr.proto.run_pb2.CreateRunRequest,
|
|
48
48
|
context: grpc.ServicerContext,
|
|
49
|
-
) -> flwr.proto.
|
|
49
|
+
) -> flwr.proto.run_pb2.CreateRunResponse:
|
|
50
50
|
"""Request run_id"""
|
|
51
51
|
pass
|
|
52
52
|
|
flwr/proto/run_pb2.py
CHANGED
|
@@ -12,10 +12,11 @@ from google.protobuf.internal import builder as _builder
|
|
|
12
12
|
_sym_db = _symbol_database.Default()
|
|
13
13
|
|
|
14
14
|
|
|
15
|
+
from flwr.proto import fab_pb2 as flwr_dot_proto_dot_fab__pb2
|
|
15
16
|
from flwr.proto import transport_pb2 as flwr_dot_proto_dot_transport__pb2
|
|
16
17
|
|
|
17
18
|
|
|
18
|
-
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x14\x66lwr/proto/run.proto\x12\nflwr.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\"\x1f\n\rGetRunRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\".\n\x0eGetRunResponse\x12\x1c\n\x03run\x18\x01 \x01(\x0b\x32\x0f.flwr.proto.Runb\x06proto3')
|
|
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\"\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\"\x1f\n\rGetRunRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\".\n\x0eGetRunResponse\x12\x1c\n\x03run\x18\x01 \x01(\x0b\x32\x0f.flwr.proto.Runb\x06proto3')
|
|
19
20
|
|
|
20
21
|
_globals = globals()
|
|
21
22
|
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
|
@@ -24,12 +25,20 @@ if _descriptor._USE_C_DESCRIPTORS == False:
|
|
|
24
25
|
DESCRIPTOR._options = None
|
|
25
26
|
_globals['_RUN_OVERRIDECONFIGENTRY']._options = None
|
|
26
27
|
_globals['_RUN_OVERRIDECONFIGENTRY']._serialized_options = b'8\001'
|
|
27
|
-
_globals['
|
|
28
|
-
_globals['
|
|
29
|
-
_globals['
|
|
30
|
-
_globals['
|
|
31
|
-
_globals['
|
|
32
|
-
_globals['
|
|
33
|
-
_globals['
|
|
34
|
-
_globals['
|
|
28
|
+
_globals['_CREATERUNREQUEST_OVERRIDECONFIGENTRY']._options = None
|
|
29
|
+
_globals['_CREATERUNREQUEST_OVERRIDECONFIGENTRY']._serialized_options = b'8\001'
|
|
30
|
+
_globals['_RUN']._serialized_start=87
|
|
31
|
+
_globals['_RUN']._serialized_end=300
|
|
32
|
+
_globals['_RUN_OVERRIDECONFIGENTRY']._serialized_start=227
|
|
33
|
+
_globals['_RUN_OVERRIDECONFIGENTRY']._serialized_end=300
|
|
34
|
+
_globals['_CREATERUNREQUEST']._serialized_start=303
|
|
35
|
+
_globals['_CREATERUNREQUEST']._serialized_end=538
|
|
36
|
+
_globals['_CREATERUNREQUEST_OVERRIDECONFIGENTRY']._serialized_start=227
|
|
37
|
+
_globals['_CREATERUNREQUEST_OVERRIDECONFIGENTRY']._serialized_end=300
|
|
38
|
+
_globals['_CREATERUNRESPONSE']._serialized_start=540
|
|
39
|
+
_globals['_CREATERUNRESPONSE']._serialized_end=575
|
|
40
|
+
_globals['_GETRUNREQUEST']._serialized_start=577
|
|
41
|
+
_globals['_GETRUNREQUEST']._serialized_end=608
|
|
42
|
+
_globals['_GETRUNRESPONSE']._serialized_start=610
|
|
43
|
+
_globals['_GETRUNRESPONSE']._serialized_end=656
|
|
35
44
|
# @@protoc_insertion_point(module_scope)
|
flwr/proto/run_pb2.pyi
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
isort:skip_file
|
|
4
4
|
"""
|
|
5
5
|
import builtins
|
|
6
|
+
import flwr.proto.fab_pb2
|
|
6
7
|
import flwr.proto.transport_pb2
|
|
7
8
|
import google.protobuf.descriptor
|
|
8
9
|
import google.protobuf.internal.containers
|
|
@@ -51,7 +52,58 @@ class Run(google.protobuf.message.Message):
|
|
|
51
52
|
def ClearField(self, field_name: typing_extensions.Literal["fab_hash",b"fab_hash","fab_id",b"fab_id","fab_version",b"fab_version","override_config",b"override_config","run_id",b"run_id"]) -> None: ...
|
|
52
53
|
global___Run = Run
|
|
53
54
|
|
|
55
|
+
class CreateRunRequest(google.protobuf.message.Message):
|
|
56
|
+
"""CreateRun"""
|
|
57
|
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
58
|
+
class OverrideConfigEntry(google.protobuf.message.Message):
|
|
59
|
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
60
|
+
KEY_FIELD_NUMBER: builtins.int
|
|
61
|
+
VALUE_FIELD_NUMBER: builtins.int
|
|
62
|
+
key: typing.Text
|
|
63
|
+
@property
|
|
64
|
+
def value(self) -> flwr.proto.transport_pb2.Scalar: ...
|
|
65
|
+
def __init__(self,
|
|
66
|
+
*,
|
|
67
|
+
key: typing.Text = ...,
|
|
68
|
+
value: typing.Optional[flwr.proto.transport_pb2.Scalar] = ...,
|
|
69
|
+
) -> None: ...
|
|
70
|
+
def HasField(self, field_name: typing_extensions.Literal["value",b"value"]) -> builtins.bool: ...
|
|
71
|
+
def ClearField(self, field_name: typing_extensions.Literal["key",b"key","value",b"value"]) -> None: ...
|
|
72
|
+
|
|
73
|
+
FAB_ID_FIELD_NUMBER: builtins.int
|
|
74
|
+
FAB_VERSION_FIELD_NUMBER: builtins.int
|
|
75
|
+
OVERRIDE_CONFIG_FIELD_NUMBER: builtins.int
|
|
76
|
+
FAB_FIELD_NUMBER: builtins.int
|
|
77
|
+
fab_id: typing.Text
|
|
78
|
+
fab_version: typing.Text
|
|
79
|
+
@property
|
|
80
|
+
def override_config(self) -> google.protobuf.internal.containers.MessageMap[typing.Text, flwr.proto.transport_pb2.Scalar]: ...
|
|
81
|
+
@property
|
|
82
|
+
def fab(self) -> flwr.proto.fab_pb2.Fab: ...
|
|
83
|
+
def __init__(self,
|
|
84
|
+
*,
|
|
85
|
+
fab_id: typing.Text = ...,
|
|
86
|
+
fab_version: typing.Text = ...,
|
|
87
|
+
override_config: typing.Optional[typing.Mapping[typing.Text, flwr.proto.transport_pb2.Scalar]] = ...,
|
|
88
|
+
fab: typing.Optional[flwr.proto.fab_pb2.Fab] = ...,
|
|
89
|
+
) -> None: ...
|
|
90
|
+
def HasField(self, field_name: typing_extensions.Literal["fab",b"fab"]) -> builtins.bool: ...
|
|
91
|
+
def ClearField(self, field_name: typing_extensions.Literal["fab",b"fab","fab_id",b"fab_id","fab_version",b"fab_version","override_config",b"override_config"]) -> None: ...
|
|
92
|
+
global___CreateRunRequest = CreateRunRequest
|
|
93
|
+
|
|
94
|
+
class CreateRunResponse(google.protobuf.message.Message):
|
|
95
|
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
96
|
+
RUN_ID_FIELD_NUMBER: builtins.int
|
|
97
|
+
run_id: builtins.int
|
|
98
|
+
def __init__(self,
|
|
99
|
+
*,
|
|
100
|
+
run_id: builtins.int = ...,
|
|
101
|
+
) -> None: ...
|
|
102
|
+
def ClearField(self, field_name: typing_extensions.Literal["run_id",b"run_id"]) -> None: ...
|
|
103
|
+
global___CreateRunResponse = CreateRunResponse
|
|
104
|
+
|
|
54
105
|
class GetRunRequest(google.protobuf.message.Message):
|
|
106
|
+
"""GetRun"""
|
|
55
107
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
56
108
|
RUN_ID_FIELD_NUMBER: builtins.int
|
|
57
109
|
run_id: builtins.int
|
flwr/server/run_serverapp.py
CHANGED
|
@@ -35,11 +35,11 @@ from flwr.common.constant import DRIVER_API_DEFAULT_ADDRESS
|
|
|
35
35
|
from flwr.common.logger import log, update_console_handler, warn_deprecated_feature
|
|
36
36
|
from flwr.common.object_ref import load_app
|
|
37
37
|
from flwr.common.typing import UserConfig
|
|
38
|
-
from flwr.proto.
|
|
38
|
+
from flwr.proto.fab_pb2 import GetFabRequest, GetFabResponse # pylint: disable=E0611
|
|
39
|
+
from flwr.proto.run_pb2 import ( # pylint: disable=E0611
|
|
39
40
|
CreateRunRequest,
|
|
40
41
|
CreateRunResponse,
|
|
41
42
|
)
|
|
42
|
-
from flwr.proto.fab_pb2 import GetFabRequest, GetFabResponse # pylint: disable=E0611
|
|
43
43
|
|
|
44
44
|
from .driver import Driver
|
|
45
45
|
from .driver.grpc_driver import GrpcDriver
|
|
@@ -32,8 +32,6 @@ from flwr.common.serde import (
|
|
|
32
32
|
from flwr.common.typing import Fab
|
|
33
33
|
from flwr.proto import driver_pb2_grpc # pylint: disable=E0611
|
|
34
34
|
from flwr.proto.driver_pb2 import ( # pylint: disable=E0611
|
|
35
|
-
CreateRunRequest,
|
|
36
|
-
CreateRunResponse,
|
|
37
35
|
GetNodesRequest,
|
|
38
36
|
GetNodesResponse,
|
|
39
37
|
PullTaskResRequest,
|
|
@@ -44,6 +42,8 @@ from flwr.proto.driver_pb2 import ( # pylint: disable=E0611
|
|
|
44
42
|
from flwr.proto.fab_pb2 import GetFabRequest, GetFabResponse # pylint: disable=E0611
|
|
45
43
|
from flwr.proto.node_pb2 import Node # pylint: disable=E0611
|
|
46
44
|
from flwr.proto.run_pb2 import ( # pylint: disable=E0611
|
|
45
|
+
CreateRunRequest,
|
|
46
|
+
CreateRunResponse,
|
|
47
47
|
GetRunRequest,
|
|
48
48
|
GetRunResponse,
|
|
49
49
|
Run,
|
|
@@ -782,8 +782,9 @@ class SqliteState(State): # pylint: disable=R0904
|
|
|
782
782
|
# Convert the uint64 value to sint64 for SQLite
|
|
783
783
|
sint64_run_id = convert_uint64_to_sint64(run_id)
|
|
784
784
|
query = "SELECT * FROM run WHERE run_id = ?;"
|
|
785
|
-
|
|
786
|
-
|
|
785
|
+
rows = self.query(query, (sint64_run_id,))
|
|
786
|
+
if rows:
|
|
787
|
+
row = rows[0]
|
|
787
788
|
return Run(
|
|
788
789
|
run_id=convert_sint64_to_uint64(row["run_id"]),
|
|
789
790
|
fab_id=row["fab_id"],
|
|
@@ -791,9 +792,8 @@ class SqliteState(State): # pylint: disable=R0904
|
|
|
791
792
|
fab_hash=row["fab_hash"],
|
|
792
793
|
override_config=json.loads(row["override_config"]),
|
|
793
794
|
)
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
return None
|
|
795
|
+
log(ERROR, "`run_id` does not exist.")
|
|
796
|
+
return None
|
|
797
797
|
|
|
798
798
|
def acknowledge_ping(self, node_id: int, ping_interval: float) -> bool:
|
|
799
799
|
"""Acknowledge a ping received from a node, serving as a heartbeat."""
|
flwr/superexec/deployment.py
CHANGED
|
@@ -28,8 +28,8 @@ from flwr.common.grpc import create_channel
|
|
|
28
28
|
from flwr.common.logger import log
|
|
29
29
|
from flwr.common.serde import fab_to_proto, user_config_to_proto
|
|
30
30
|
from flwr.common.typing import Fab, UserConfig
|
|
31
|
-
from flwr.proto.driver_pb2 import CreateRunRequest # pylint: disable=E0611
|
|
32
31
|
from flwr.proto.driver_pb2_grpc import DriverStub
|
|
32
|
+
from flwr.proto.run_pb2 import CreateRunRequest # pylint: disable=E0611
|
|
33
33
|
|
|
34
34
|
from .executor import Executor, RunTracker
|
|
35
35
|
|
|
@@ -167,6 +167,8 @@ class DeploymentEngine(Executor):
|
|
|
167
167
|
# Execute the command
|
|
168
168
|
proc = subprocess.Popen( # pylint: disable=consider-using-with
|
|
169
169
|
command,
|
|
170
|
+
stdout=subprocess.PIPE,
|
|
171
|
+
stderr=subprocess.PIPE,
|
|
170
172
|
text=True,
|
|
171
173
|
)
|
|
172
174
|
log(INFO, "Started run %s", str(run_id))
|
flwr/superexec/exec_servicer.py
CHANGED
|
@@ -15,6 +15,10 @@
|
|
|
15
15
|
"""SuperExec API servicer."""
|
|
16
16
|
|
|
17
17
|
|
|
18
|
+
import select
|
|
19
|
+
import sys
|
|
20
|
+
import threading
|
|
21
|
+
import time
|
|
18
22
|
from collections.abc import Generator
|
|
19
23
|
from logging import ERROR, INFO
|
|
20
24
|
from typing import Any
|
|
@@ -33,6 +37,8 @@ from flwr.proto.exec_pb2 import ( # pylint: disable=E0611
|
|
|
33
37
|
|
|
34
38
|
from .executor import Executor, RunTracker
|
|
35
39
|
|
|
40
|
+
SELECT_TIMEOUT = 1 # Timeout for selecting ready-to-read file descriptors (in seconds)
|
|
41
|
+
|
|
36
42
|
|
|
37
43
|
class ExecServicer(exec_pb2_grpc.ExecServicer):
|
|
38
44
|
"""SuperExec API servicer."""
|
|
@@ -59,13 +65,72 @@ class ExecServicer(exec_pb2_grpc.ExecServicer):
|
|
|
59
65
|
|
|
60
66
|
self.runs[run.run_id] = run
|
|
61
67
|
|
|
68
|
+
# Start a background thread to capture the log output
|
|
69
|
+
capture_thread = threading.Thread(
|
|
70
|
+
target=_capture_logs, args=(run,), daemon=True
|
|
71
|
+
)
|
|
72
|
+
capture_thread.start()
|
|
73
|
+
|
|
62
74
|
return StartRunResponse(run_id=run.run_id)
|
|
63
75
|
|
|
64
|
-
def StreamLogs(
|
|
76
|
+
def StreamLogs( # pylint: disable=C0103
|
|
65
77
|
self, request: StreamLogsRequest, context: grpc.ServicerContext
|
|
66
78
|
) -> Generator[StreamLogsResponse, Any, None]:
|
|
67
79
|
"""Get logs."""
|
|
68
|
-
|
|
80
|
+
log(INFO, "ExecServicer.StreamLogs")
|
|
81
|
+
|
|
82
|
+
# Exit if `run_id` not found
|
|
83
|
+
if request.run_id not in self.runs:
|
|
84
|
+
context.abort(grpc.StatusCode.NOT_FOUND, "Run ID not found")
|
|
85
|
+
|
|
86
|
+
last_sent_index = 0
|
|
69
87
|
while context.is_active():
|
|
70
|
-
|
|
88
|
+
# Yield n'th row of logs, if n'th row < len(logs)
|
|
89
|
+
logs = self.runs[request.run_id].logs
|
|
90
|
+
for i in range(last_sent_index, len(logs)):
|
|
71
91
|
yield StreamLogsResponse(log_output=logs[i])
|
|
92
|
+
last_sent_index = len(logs)
|
|
93
|
+
|
|
94
|
+
# Wait for and continue to yield more log responses only if the
|
|
95
|
+
# run isn't completed yet. If the run is finished, the entire log
|
|
96
|
+
# is returned at this point and the server ends the stream.
|
|
97
|
+
if self.runs[request.run_id].proc.poll() is not None:
|
|
98
|
+
log(INFO, "All logs for run ID `%s` returned", request.run_id)
|
|
99
|
+
context.set_code(grpc.StatusCode.OK)
|
|
100
|
+
context.cancel()
|
|
101
|
+
|
|
102
|
+
time.sleep(1.0) # Sleep briefly to avoid busy waiting
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
def _capture_logs(
|
|
106
|
+
run: RunTracker,
|
|
107
|
+
) -> None:
|
|
108
|
+
while True:
|
|
109
|
+
# Explicitly check if Popen.poll() is None. Required for `pytest`.
|
|
110
|
+
if run.proc.poll() is None:
|
|
111
|
+
# Select streams only when ready to read
|
|
112
|
+
ready_to_read, _, _ = select.select(
|
|
113
|
+
[run.proc.stdout, run.proc.stderr],
|
|
114
|
+
[],
|
|
115
|
+
[],
|
|
116
|
+
SELECT_TIMEOUT,
|
|
117
|
+
)
|
|
118
|
+
# Read from std* and append to RunTracker.logs
|
|
119
|
+
for stream in ready_to_read:
|
|
120
|
+
# Flush stdout to view output in real time
|
|
121
|
+
readline = stream.readline()
|
|
122
|
+
sys.stdout.write(readline)
|
|
123
|
+
sys.stdout.flush()
|
|
124
|
+
# Append to logs
|
|
125
|
+
line = readline.rstrip()
|
|
126
|
+
if line:
|
|
127
|
+
run.logs.append(f"{line}")
|
|
128
|
+
|
|
129
|
+
# Close std* to prevent blocking
|
|
130
|
+
elif run.proc.poll() is not None:
|
|
131
|
+
log(INFO, "Subprocess finished, exiting log capture")
|
|
132
|
+
if run.proc.stdout:
|
|
133
|
+
run.proc.stdout.close()
|
|
134
|
+
if run.proc.stderr:
|
|
135
|
+
run.proc.stderr.close()
|
|
136
|
+
break
|
flwr/superexec/executor.py
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"""Execute and monitor a Flower run."""
|
|
16
16
|
|
|
17
17
|
from abc import ABC, abstractmethod
|
|
18
|
-
from dataclasses import dataclass
|
|
18
|
+
from dataclasses import dataclass, field
|
|
19
19
|
from subprocess import Popen
|
|
20
20
|
from typing import Optional
|
|
21
21
|
|
|
@@ -28,6 +28,7 @@ class RunTracker:
|
|
|
28
28
|
|
|
29
29
|
run_id: int
|
|
30
30
|
proc: Popen # type: ignore
|
|
31
|
+
logs: list[str] = field(default_factory=list)
|
|
31
32
|
|
|
32
33
|
|
|
33
34
|
class Executor(ABC):
|
{flwr_nightly-1.12.0.dev20240918.dist-info → flwr_nightly-1.12.0.dev20240920.dist-info}/RECORD
RENAMED
|
@@ -6,7 +6,7 @@ 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
8
|
flwr/cli/new/__init__.py,sha256=cQzK1WH4JP2awef1t2UQ2xjl1agVEz9rwutV18SWV1k,789
|
|
9
|
-
flwr/cli/new/new.py,sha256=
|
|
9
|
+
flwr/cli/new/new.py,sha256=wpHBmHOq6X04CPwJDaEgu3H5_MsfoEYsYsv3E-EDhzM,9558
|
|
10
10
|
flwr/cli/new/templates/__init__.py,sha256=4luU8RL-CK8JJCstQ_ON809W9bNTkY1l9zSaPKBkgwY,725
|
|
11
11
|
flwr/cli/new/templates/app/.gitignore.tpl,sha256=XixnHdyeMB2vwkGtGnwHqoWpH-9WChdyG0GXe57duhc,3078
|
|
12
12
|
flwr/cli/new/templates/app/LICENSE.tpl,sha256=WNHhf_5RCaeuKWyq_K39vmp9F28LxKsB4SpomwSZ2L0,11357
|
|
@@ -49,7 +49,7 @@ flwr/cli/new/templates/app/code/task.pytorch.py.tpl,sha256=NgbPix74X1t3ybaGjqdls
|
|
|
49
49
|
flwr/cli/new/templates/app/code/task.tensorflow.py.tpl,sha256=SKXAZdgBnPpbAbJ90Rb7oQ5ilnopBx_j_JNFoUDeEAI,1732
|
|
50
50
|
flwr/cli/new/templates/app/code/utils.baseline.py.tpl,sha256=YkHAgppUeD2BnBoGfVB6dEvBfjuIPGsU1gw4CiUi3qA,40
|
|
51
51
|
flwr/cli/new/templates/app/pyproject.baseline.toml.tpl,sha256=4gi90W9_B1kj6rYkpvVJxhNX9Yctsv9OH6CzXP-dcE4,2666
|
|
52
|
-
flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl,sha256
|
|
52
|
+
flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl,sha256=bYdDP0O8z741pvy1INnH4UBuP-KFvcyQt6Yo81n4frQ,1853
|
|
53
53
|
flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl,sha256=CHJgkPNkJfzJhEbTe15uiV3AhOtIddQi-yofPZsCk3E,1143
|
|
54
54
|
flwr/cli/new/templates/app/pyproject.jax.toml.tpl,sha256=Tq6jeGcoOKzMwWWYxMVnzMcipLURHLiW69iYlD1ywMg,659
|
|
55
55
|
flwr/cli/new/templates/app/pyproject.mlx.toml.tpl,sha256=SHwYAA2qgIlOAU3Sb9BKSZcZ7O9biACg27MHexXUtDw,741
|
|
@@ -143,10 +143,14 @@ flwr/proto/common_pb2.py,sha256=uzSmq0FJdC-MriN9UGPFs7QVIFTKJmX5lyLnzcyZ5WE,2405
|
|
|
143
143
|
flwr/proto/common_pb2.pyi,sha256=0ylFO7G79qqLuRg9IQUCBdgyIIFv4m8VzrfoWad4xXU,5394
|
|
144
144
|
flwr/proto/common_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
|
|
145
145
|
flwr/proto/common_pb2_grpc.pyi,sha256=ff2TSiLVnG6IVQcTGzb2DIH3XRSoAvAo_RMcvbMFyc0,76
|
|
146
|
-
flwr/proto/
|
|
147
|
-
flwr/proto/
|
|
148
|
-
flwr/proto/
|
|
149
|
-
flwr/proto/
|
|
146
|
+
flwr/proto/control_pb2.py,sha256=qsikYLoAye2IFtPzEd5oPTSEhF09ZkA6VjnCEDh2o7Y,1214
|
|
147
|
+
flwr/proto/control_pb2.pyi,sha256=XbFvpZvvrS7QcH5AFXfpRGl4hQvhd3QdKO6x0oTlCCU,165
|
|
148
|
+
flwr/proto/control_pb2_grpc.py,sha256=7ou_lfyACrKJ7YhfU8Da87tgd71NH8C2ExSDbYeXNNw,2511
|
|
149
|
+
flwr/proto/control_pb2_grpc.pyi,sha256=2_EKunqhcdwXLDOGbOwFZxpIEpdOW1EFvY-r9MUgUSc,766
|
|
150
|
+
flwr/proto/driver_pb2.py,sha256=Z2fRF9mBa0cR0p6cItgyp5Q70WUAsh--kPEq8aIJuZk,3176
|
|
151
|
+
flwr/proto/driver_pb2.pyi,sha256=jUOe6tHWQhddVbB3xtnNvlrztNUcxRHHJS7-LqGO_70,4034
|
|
152
|
+
flwr/proto/driver_pb2_grpc.py,sha256=SGNmNcpsSWRc0jjNyH0xYNB8a7DAxIsXaL9a0M78vZw,10444
|
|
153
|
+
flwr/proto/driver_pb2_grpc.pyi,sha256=wTVkRgVUNq2Jnzo5yhIIqGFiLN_VRB1zpjfqRLD5QnM,2800
|
|
150
154
|
flwr/proto/error_pb2.py,sha256=LarjKL90LbwkXKlhzNrDssgl4DXcvIPve8NVCXHpsKA,1084
|
|
151
155
|
flwr/proto/error_pb2.pyi,sha256=ZNH4HhJTU_KfMXlyCeg8FwU-fcUYxTqEmoJPtWtHikc,734
|
|
152
156
|
flwr/proto/error_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
|
|
@@ -179,8 +183,8 @@ flwr/proto/recordset_pb2.py,sha256=un8L0kvBcgFXQIiQweOseeIJBjlOozUvQY9uTQ42Dqo,6
|
|
|
179
183
|
flwr/proto/recordset_pb2.pyi,sha256=NPzCJWAj1xLWzeZ_xZ6uaObQjQfWGnnqlLtn4J-SoFY,14161
|
|
180
184
|
flwr/proto/recordset_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
|
|
181
185
|
flwr/proto/recordset_pb2_grpc.pyi,sha256=ff2TSiLVnG6IVQcTGzb2DIH3XRSoAvAo_RMcvbMFyc0,76
|
|
182
|
-
flwr/proto/run_pb2.py,sha256=
|
|
183
|
-
flwr/proto/run_pb2.pyi,sha256=
|
|
186
|
+
flwr/proto/run_pb2.py,sha256=bzgJZq9xXEWviJAb_SGNZKbH4QLI51SRE11pejhV2yU,3206
|
|
187
|
+
flwr/proto/run_pb2.pyi,sha256=oBRYDJwfJ8CWLRGDkPT3CinPWNYIZIHzpjwkIdjbH5A,5404
|
|
184
188
|
flwr/proto/run_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
|
|
185
189
|
flwr/proto/run_pb2_grpc.pyi,sha256=ff2TSiLVnG6IVQcTGzb2DIH3XRSoAvAo_RMcvbMFyc0,76
|
|
186
190
|
flwr/proto/task_pb2.py,sha256=R5GfHgL8IJRI_qHWNeILl1Y9zHjvB0tnCvMHmTgF4Is,2361
|
|
@@ -207,7 +211,7 @@ flwr/server/driver/driver.py,sha256=rGLbOfLhBOn74mUHi_0CMbXqZLX8q_lXqEkcUXoL_wI,
|
|
|
207
211
|
flwr/server/driver/grpc_driver.py,sha256=xd1mxRexeiIJrZw9l-urj2zEIncLT8KtNn0l8hIDYZs,9681
|
|
208
212
|
flwr/server/driver/inmemory_driver.py,sha256=up5L2ux9l0pEUZO3hh8p5LufXntGL95IA4E3e7WsxqY,6465
|
|
209
213
|
flwr/server/history.py,sha256=qSb5_pPTrwofpSYGsZWzMPkl_4uJ4mJFWesxXDrEvDU,5026
|
|
210
|
-
flwr/server/run_serverapp.py,sha256=
|
|
214
|
+
flwr/server/run_serverapp.py,sha256=SaE9hoWLCAPnRXvdAzE4Oi3QaiC8NOTrHxrIGXjgYxU,10531
|
|
211
215
|
flwr/server/server.py,sha256=1ZsFEptmAV-L2vP2etNC9Ed5CLSxpuKzUFkAPQ4l5Xc,17893
|
|
212
216
|
flwr/server/server_app.py,sha256=1hul76ospG8L_KooK_ewn1sWPNTNYLTtZMeGNOBNruA,6267
|
|
213
217
|
flwr/server/server_config.py,sha256=CZaHVAsMvGLjpWVcLPkiYxgJN4xfIyAiUrCI3fETKY4,1349
|
|
@@ -239,7 +243,7 @@ flwr/server/strategy/strategy.py,sha256=cXapkD5uDrt5C-RbmWDn9FLoap3Q41i7GKvbmfbC
|
|
|
239
243
|
flwr/server/superlink/__init__.py,sha256=8tHYCfodUlRD8PCP9fHgvu8cz5N31A2QoRVL0jDJ15E,707
|
|
240
244
|
flwr/server/superlink/driver/__init__.py,sha256=_JaRW-FdyikHc7souUrnk3mwTGViraEJCeUBY_M_ocs,712
|
|
241
245
|
flwr/server/superlink/driver/driver_grpc.py,sha256=ej9T21zIquIJEZyWcvapQSQFckh4oFPamOe6P6DhB2s,2048
|
|
242
|
-
flwr/server/superlink/driver/driver_servicer.py,sha256=
|
|
246
|
+
flwr/server/superlink/driver/driver_servicer.py,sha256=x8L8rIO6r7kVdmWZFJp-xmTB0K_Tz1mh-7Akc6I_ZjY,6967
|
|
243
247
|
flwr/server/superlink/ffs/__init__.py,sha256=FAY-zShcfPmOxosok2QyT6hTNMNctG8cH9s_nIl8jkI,840
|
|
244
248
|
flwr/server/superlink/ffs/disk_ffs.py,sha256=yCN6CCzegnJIOaHr5nIu49wZQa4g5BByiSKshz50RKU,3296
|
|
245
249
|
flwr/server/superlink/ffs/ffs.py,sha256=qLI1UfosJugu2BKOJWqHIhafTm-YiuKqGf3OGWPH0NM,2395
|
|
@@ -266,7 +270,7 @@ flwr/server/superlink/fleet/vce/backend/raybackend.py,sha256=7kB3re3mR53b7E6L6DP
|
|
|
266
270
|
flwr/server/superlink/fleet/vce/vce_api.py,sha256=cGPsjS_4SJHm8jszGjsHh8ZNk9nqWoIQwW_62yKKR1Y,12647
|
|
267
271
|
flwr/server/superlink/state/__init__.py,sha256=Gj2OTFLXvA-mAjBvwuKDM3rDrVaQPcIoybSa2uskMTE,1003
|
|
268
272
|
flwr/server/superlink/state/in_memory_state.py,sha256=DvPSyK-ITZI9XfW-1M0bljLa6Sj0JIUeHFbg5tKKc2s,13142
|
|
269
|
-
flwr/server/superlink/state/sqlite_state.py,sha256=
|
|
273
|
+
flwr/server/superlink/state/sqlite_state.py,sha256=GNSBin45-ZgLXNdDSoaPvU6Nem_dUwjarpjIAlkYHdM,32132
|
|
270
274
|
flwr/server/superlink/state/state.py,sha256=KpM894R8RE1N0b-s_Nlii6i0TDxj0DRkKa3Vf24Gt70,8127
|
|
271
275
|
flwr/server/superlink/state/state_factory.py,sha256=Fo8pBQ1WWrVJK5TOEPZ_zgJE69_mfTGjTO6czh6571o,2021
|
|
272
276
|
flwr/server/superlink/state/utils.py,sha256=OsF3OOoU4bU4PgLWkypX6EDoFs0L8RP_mHEBG-tVqGA,5227
|
|
@@ -289,13 +293,13 @@ flwr/simulation/ray_transport/utils.py,sha256=TYdtfg1P9VfTdLMOJlifInGpxWHYs9UfUq
|
|
|
289
293
|
flwr/simulation/run_simulation.py,sha256=AN62VEoJhqe88VmkJ5dlJPVcDhUXGBaMKo4KjHqUu_8,22744
|
|
290
294
|
flwr/superexec/__init__.py,sha256=fcj366jh4RFby_vDwLroU4kepzqbnJgseZD_jUr_Mko,715
|
|
291
295
|
flwr/superexec/app.py,sha256=mKwlsysbtmGPuz4CpWAPDPWAEFZH3b8u0JKRkWpfzuw,6552
|
|
292
|
-
flwr/superexec/deployment.py,sha256=
|
|
296
|
+
flwr/superexec/deployment.py,sha256=TbzOAAaY2sNt7O516w1GS6N5xvt0UV-dML74O6WA2O4,6344
|
|
293
297
|
flwr/superexec/exec_grpc.py,sha256=ZPq7EP55Vwj0kRcLVuTCokFqfIgBk-7YmDykZoMKi-c,1935
|
|
294
|
-
flwr/superexec/exec_servicer.py,sha256=
|
|
295
|
-
flwr/superexec/executor.py,sha256
|
|
298
|
+
flwr/superexec/exec_servicer.py,sha256=TRpwPVl7eI0Y_xlCY6DmVpAo0yFU1gLwzyIeqFw9pyk,4746
|
|
299
|
+
flwr/superexec/executor.py,sha256=-5J-ZLs-uArro3T2pCq0YQRC65cs18M888nufzdYE4E,2375
|
|
296
300
|
flwr/superexec/simulation.py,sha256=J6pw-RqCSiUed8I_3MasZH4tl57ZmDebPAHNnbb0-vE,7420
|
|
297
|
-
flwr_nightly-1.12.0.
|
|
298
|
-
flwr_nightly-1.12.0.
|
|
299
|
-
flwr_nightly-1.12.0.
|
|
300
|
-
flwr_nightly-1.12.0.
|
|
301
|
-
flwr_nightly-1.12.0.
|
|
301
|
+
flwr_nightly-1.12.0.dev20240920.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
|
|
302
|
+
flwr_nightly-1.12.0.dev20240920.dist-info/METADATA,sha256=wp80fn8CnZQaBGuX45L6rr2iGxssUuNJNAreXmHmQt4,15452
|
|
303
|
+
flwr_nightly-1.12.0.dev20240920.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
|
|
304
|
+
flwr_nightly-1.12.0.dev20240920.dist-info/entry_points.txt,sha256=WUCbqhLEOzjx_lyATIM0-f0e8kOVaQjzwOvyOxHrMhs,434
|
|
305
|
+
flwr_nightly-1.12.0.dev20240920.dist-info/RECORD,,
|
{flwr_nightly-1.12.0.dev20240918.dist-info → flwr_nightly-1.12.0.dev20240920.dist-info}/LICENSE
RENAMED
|
File without changes
|
{flwr_nightly-1.12.0.dev20240918.dist-info → flwr_nightly-1.12.0.dev20240920.dist-info}/WHEEL
RENAMED
|
File without changes
|
|
File without changes
|