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 CHANGED
@@ -275,7 +275,7 @@ def new(
275
275
  )
276
276
  )
277
277
 
278
- _add = " huggingface-cli login\n" if framework_str == "flowertune" else ""
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",
@@ -17,6 +17,7 @@ dependencies = [
17
17
  "transformers==4.39.3",
18
18
  "sentencepiece==0.2.0",
19
19
  "omegaconf==2.3.0",
20
+ "hf_transfer==0.1.8",
20
21
  ]
21
22
 
22
23
  [tool.hatch.build.targets.wheel]
@@ -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,7 @@
1
+ """
2
+ @generated by mypy-protobuf. Do not edit manually!
3
+ isort:skip_file
4
+ """
5
+ import google.protobuf.descriptor
6
+
7
+ DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
@@ -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\x1a\x1a\x66lwr/proto/transport.proto\"\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\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')
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['_CREATERUNREQUEST_OVERRIDECONFIGENTRY']._options = None
30
- _globals['_CREATERUNREQUEST_OVERRIDECONFIGENTRY']._serialized_options = b'8\001'
31
- _globals['_CREATERUNREQUEST']._serialized_start=158
32
- _globals['_CREATERUNREQUEST']._serialized_end=393
33
- _globals['_CREATERUNREQUEST_OVERRIDECONFIGENTRY']._serialized_start=320
34
- _globals['_CREATERUNREQUEST_OVERRIDECONFIGENTRY']._serialized_end=393
35
- _globals['_CREATERUNRESPONSE']._serialized_start=395
36
- _globals['_CREATERUNRESPONSE']._serialized_end=430
37
- _globals['_GETNODESREQUEST']._serialized_start=432
38
- _globals['_GETNODESREQUEST']._serialized_end=465
39
- _globals['_GETNODESRESPONSE']._serialized_start=467
40
- _globals['_GETNODESRESPONSE']._serialized_end=518
41
- _globals['_PUSHTASKINSREQUEST']._serialized_start=520
42
- _globals['_PUSHTASKINSREQUEST']._serialized_end=584
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
@@ -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=flwr_dot_proto_dot_driver__pb2.CreateRunRequest.SerializeToString,
22
- response_deserializer=flwr_dot_proto_dot_driver__pb2.CreateRunResponse.FromString,
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=flwr_dot_proto_dot_driver__pb2.CreateRunRequest.FromString,
102
- response_serializer=flwr_dot_proto_dot_driver__pb2.CreateRunResponse.SerializeToString,
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
- flwr_dot_proto_dot_driver__pb2.CreateRunRequest.SerializeToString,
152
- flwr_dot_proto_dot_driver__pb2.CreateRunResponse.FromString,
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
 
@@ -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.driver_pb2.CreateRunRequest,
15
- flwr.proto.driver_pb2.CreateRunResponse]
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.driver_pb2.CreateRunRequest,
47
+ request: flwr.proto.run_pb2.CreateRunRequest,
48
48
  context: grpc.ServicerContext,
49
- ) -> flwr.proto.driver_pb2.CreateRunResponse:
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['_RUN']._serialized_start=65
28
- _globals['_RUN']._serialized_end=278
29
- _globals['_RUN_OVERRIDECONFIGENTRY']._serialized_start=205
30
- _globals['_RUN_OVERRIDECONFIGENTRY']._serialized_end=278
31
- _globals['_GETRUNREQUEST']._serialized_start=280
32
- _globals['_GETRUNREQUEST']._serialized_end=311
33
- _globals['_GETRUNRESPONSE']._serialized_start=313
34
- _globals['_GETRUNRESPONSE']._serialized_end=359
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
@@ -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.driver_pb2 import ( # pylint: disable=E0611
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
- try:
786
- row = self.query(query, (sint64_run_id,))[0]
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
- except sqlite3.IntegrityError:
795
- log(ERROR, "`run_id` does not exist.")
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."""
@@ -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))
@@ -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
- logs = ["a", "b", "c"]
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
- for i in range(len(logs)): # pylint: disable=C0200
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
@@ -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):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: flwr-nightly
3
- Version: 1.12.0.dev20240918
3
+ Version: 1.12.0.dev20240920
4
4
  Summary: Flower: A Friendly Federated Learning Framework
5
5
  Home-page: https://flower.ai
6
6
  License: Apache-2.0
@@ -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=FvSxGIDsnO7w5Rtq6-Zz3PzD_tkSthNGvYOHeYRcCeI,9570
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=-tW_nwHQCK5JIRI4Cpb0yDVHJO0RUAEOTqCtWJoGHIQ,1827
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/driver_pb2.py,sha256=gxlDAZUCELzYCkmhxcJdVyGXLmzYFXVFeqlJAIHPChE,4299
147
- flwr/proto/driver_pb2.pyi,sha256=apvTyy7N0SV3H8mueOwgB8aDETtxb6ZuKB1g1nMmJ4o,6390
148
- flwr/proto/driver_pb2_grpc.py,sha256=ZNDFyPfEZt5L3eFqJRwAE_ylwWLTNf1hfXzUGkVpzTI,10462
149
- flwr/proto/driver_pb2_grpc.pyi,sha256=_SLFI7AvJv5JU_7axipERF4oTspRh3bzZswLiKDtV1E,2812
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=zTH0YjBETYhQzv2MC5TD8cW8Lvsc89ublkFtGuHp0ek,2102
183
- flwr/proto/run_pb2.pyi,sha256=oIaKIjgyjnifossFMTSqQISEMb1IJYhSYGQYcAGBIS4,3063
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=ASpwKHNlxpDfBe6UPotxkaifXZyKS9ZIrdwtTGLCt3k,10534
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=ofxSlotqz1hhvv9Cww2eWoDS5Jpvavge4AtKxTElJNY,6967
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=W1qFF8QvQ9CwhqCwE_sqDERiFVb5rqppira7gJSWI-w,32155
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=sNb-sYdCDkVEALSbC_eBNIulieHwpg7HzgmDIp4wT9o,6267
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=P4bJtQqCr0NiVIa-ss9lvdUM1SbM_ip5g5UqKp3dNL4,2344
295
- flwr/superexec/executor.py,sha256=k_adivto6R2U82DADOHNvdtobehBYreRek1gOEBIQnQ,2318
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.dev20240918.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
298
- flwr_nightly-1.12.0.dev20240918.dist-info/METADATA,sha256=lnIUhAPYCT7RrWdszYziCh3uNppNN_xtOLQqihPN92I,15452
299
- flwr_nightly-1.12.0.dev20240918.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
300
- flwr_nightly-1.12.0.dev20240918.dist-info/entry_points.txt,sha256=WUCbqhLEOzjx_lyATIM0-f0e8kOVaQjzwOvyOxHrMhs,434
301
- flwr_nightly-1.12.0.dev20240918.dist-info/RECORD,,
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,,