flwr-nightly 1.8.0.dev20240210__py3-none-any.whl → 1.8.0.dev20240211__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. flwr/__init__.py +1 -2
  2. flwr/client/__init__.py +2 -2
  3. flwr/client/app.py +10 -10
  4. flwr/client/clientapp.py +1 -1
  5. flwr/common/telemetry.py +9 -5
  6. flwr/server/__init__.py +6 -3
  7. flwr/server/app.py +112 -19
  8. flwr/server/driver/__init__.py +12 -1
  9. flwr/{driver → server/driver}/app.py +1 -1
  10. flwr/{driver → server/driver}/driver.py +1 -1
  11. flwr/server/superlink/__init__.py +15 -0
  12. flwr/server/superlink/driver/__init__.py +15 -0
  13. flwr/server/{driver → superlink/driver}/driver_servicer.py +1 -1
  14. flwr/server/{fleet → superlink/fleet}/grpc_bidi/flower_service_servicer.py +6 -2
  15. flwr/server/{fleet → superlink/fleet}/grpc_bidi/grpc_client_proxy.py +5 -1
  16. flwr/server/{fleet → superlink/fleet}/grpc_bidi/grpc_server.py +5 -3
  17. flwr/server/{fleet → superlink/fleet}/grpc_rere/fleet_servicer.py +2 -2
  18. flwr/server/{fleet → superlink/fleet}/message_handler/message_handler.py +1 -1
  19. flwr/server/{fleet → superlink/fleet}/rest_rere/rest_api.py +2 -2
  20. flwr/server/{state → superlink/state}/in_memory_state.py +1 -1
  21. {flwr_nightly-1.8.0.dev20240210.dist-info → flwr_nightly-1.8.0.dev20240211.dist-info}/METADATA +1 -1
  22. {flwr_nightly-1.8.0.dev20240210.dist-info → flwr_nightly-1.8.0.dev20240211.dist-info}/RECORD +37 -36
  23. flwr_nightly-1.8.0.dev20240211.dist-info/entry_points.txt +7 -0
  24. flwr/driver/__init__.py +0 -26
  25. flwr_nightly-1.8.0.dev20240210.dist-info/entry_points.txt +0 -6
  26. /flwr/{driver → server/driver}/driver_client_proxy.py +0 -0
  27. /flwr/{driver → server/driver}/grpc_driver.py +0 -0
  28. /flwr/server/{fleet → superlink/fleet}/__init__.py +0 -0
  29. /flwr/server/{fleet → superlink/fleet}/grpc_bidi/__init__.py +0 -0
  30. /flwr/server/{fleet → superlink/fleet}/grpc_bidi/grpc_bridge.py +0 -0
  31. /flwr/server/{fleet → superlink/fleet}/grpc_rere/__init__.py +0 -0
  32. /flwr/server/{fleet → superlink/fleet}/message_handler/__init__.py +0 -0
  33. /flwr/server/{fleet → superlink/fleet}/rest_rere/__init__.py +0 -0
  34. /flwr/server/{state → superlink/state}/__init__.py +0 -0
  35. /flwr/server/{state → superlink/state}/sqlite_state.py +0 -0
  36. /flwr/server/{state → superlink/state}/state.py +0 -0
  37. /flwr/server/{state → superlink/state}/state_factory.py +0 -0
  38. {flwr_nightly-1.8.0.dev20240210.dist-info → flwr_nightly-1.8.0.dev20240211.dist-info}/LICENSE +0 -0
  39. {flwr_nightly-1.8.0.dev20240210.dist-info → flwr_nightly-1.8.0.dev20240211.dist-info}/WHEEL +0 -0
flwr/__init__.py CHANGED
@@ -17,12 +17,11 @@
17
17
 
18
18
  from flwr.common.version import package_version as _package_version
19
19
 
20
- from . import client, common, driver, server, simulation
20
+ from . import client, common, server, simulation
21
21
 
22
22
  __all__ = [
23
23
  "client",
24
24
  "common",
25
- "driver",
26
25
  "server",
27
26
  "simulation",
28
27
  ]
flwr/client/__init__.py CHANGED
@@ -15,7 +15,7 @@
15
15
  """Flower client."""
16
16
 
17
17
 
18
- from .app import run_client as run_client
18
+ from .app import run_client_app as run_client_app
19
19
  from .app import start_client as start_client
20
20
  from .app import start_numpy_client as start_numpy_client
21
21
  from .client import Client as Client
@@ -28,7 +28,7 @@ __all__ = [
28
28
  "ClientApp",
29
29
  "ClientFn",
30
30
  "NumPyClient",
31
- "run_client",
31
+ "run_client_app",
32
32
  "start_client",
33
33
  "start_numpy_client",
34
34
  ]
flwr/client/app.py CHANGED
@@ -45,13 +45,13 @@ from .node_state import NodeState
45
45
  from .numpy_client import NumPyClient
46
46
 
47
47
 
48
- def run_client() -> None:
49
- """Run Flower client."""
50
- event(EventType.RUN_CLIENT_ENTER)
48
+ def run_client_app() -> None:
49
+ """Run Flower client app."""
50
+ event(EventType.RUN_CLIENT_APP_ENTER)
51
51
 
52
52
  log(INFO, "Long-running Flower client starting")
53
53
 
54
- args = _parse_args_client().parse_args()
54
+ args = _parse_args_run_client_app().parse_args()
55
55
 
56
56
  # Obtain certificates
57
57
  if args.insecure:
@@ -86,7 +86,7 @@ def run_client() -> None:
86
86
 
87
87
  log(
88
88
  DEBUG,
89
- "Flower will load ClientApp `%s` to execute tasks",
89
+ "Flower will load ClientApp `%s`",
90
90
  getattr(args, "client-app"),
91
91
  )
92
92
 
@@ -105,13 +105,13 @@ def run_client() -> None:
105
105
  root_certificates=root_certificates,
106
106
  insecure=args.insecure,
107
107
  )
108
- event(EventType.RUN_CLIENT_LEAVE)
108
+ event(EventType.RUN_CLIENT_APP_LEAVE)
109
109
 
110
110
 
111
- def _parse_args_client() -> argparse.ArgumentParser:
112
- """Parse command line arguments."""
111
+ def _parse_args_run_client_app() -> argparse.ArgumentParser:
112
+ """Parse flower-client-app command line arguments."""
113
113
  parser = argparse.ArgumentParser(
114
- description="Start a long-running Flower client",
114
+ description="Start a Flower client app",
115
115
  )
116
116
 
117
117
  parser.add_argument(
@@ -145,7 +145,7 @@ def _parse_args_client() -> argparse.ArgumentParser:
145
145
  "--dir",
146
146
  default="",
147
147
  help="Add specified directory to the PYTHONPATH and load Flower "
148
- "callable from there."
148
+ "app from there."
149
149
  " Default: current working directory.",
150
150
  )
151
151
 
flwr/client/clientapp.py CHANGED
@@ -46,7 +46,7 @@ class ClientApp:
46
46
  If the above code is in a Python module called `client`, it can be started as
47
47
  follows:
48
48
 
49
- >>> flower-client client:app --insecure
49
+ >>> flower-client-app client:app --insecure
50
50
 
51
51
  In this `client:app` example, `client` refers to the Python module `client.py` in
52
52
  which the previous code lives in and `app` refers to the global attribute `app` that
flwr/common/telemetry.py CHANGED
@@ -137,8 +137,8 @@ class EventType(str, Enum):
137
137
  RUN_FLEET_API_LEAVE = auto()
138
138
 
139
139
  # Driver API and Fleet API
140
- RUN_SERVER_ENTER = auto()
141
- RUN_SERVER_LEAVE = auto()
140
+ RUN_SUPERLINK_ENTER = auto()
141
+ RUN_SUPERLINK_LEAVE = auto()
142
142
 
143
143
  # Simulation
144
144
  START_SIMULATION_ENTER = auto()
@@ -152,9 +152,13 @@ class EventType(str, Enum):
152
152
  START_DRIVER_ENTER = auto()
153
153
  START_DRIVER_LEAVE = auto()
154
154
 
155
- # SuperNode: flower-client
156
- RUN_CLIENT_ENTER = auto()
157
- RUN_CLIENT_LEAVE = auto()
155
+ # flower-client-app
156
+ RUN_CLIENT_APP_ENTER = auto()
157
+ RUN_CLIENT_APP_LEAVE = auto()
158
+
159
+ # flower-server-app
160
+ RUN_SERVER_APP_ENTER = auto()
161
+ RUN_SERVER_APP_LEAVE = auto()
158
162
 
159
163
 
160
164
  # Use the ThreadPoolExecutor with max_workers=1 to have a queue
flwr/server/__init__.py CHANGED
@@ -15,11 +15,12 @@
15
15
  """Flower server."""
16
16
 
17
17
 
18
- from . import strategy
18
+ from . import driver, strategy
19
19
  from .app import ServerConfig as ServerConfig
20
20
  from .app import run_driver_api as run_driver_api
21
21
  from .app import run_fleet_api as run_fleet_api
22
- from .app import run_server as run_server
22
+ from .app import run_server_app as run_server_app
23
+ from .app import run_superlink as run_superlink
23
24
  from .app import start_server as start_server
24
25
  from .client_manager import ClientManager as ClientManager
25
26
  from .client_manager import SimpleClientManager as SimpleClientManager
@@ -28,10 +29,12 @@ from .server import Server as Server
28
29
 
29
30
  __all__ = [
30
31
  "ClientManager",
32
+ "driver",
31
33
  "History",
32
34
  "run_driver_api",
33
35
  "run_fleet_api",
34
- "run_server",
36
+ "run_server_app",
37
+ "run_superlink",
35
38
  "Server",
36
39
  "ServerConfig",
37
40
  "SimpleClientManager",
flwr/server/app.py CHANGED
@@ -20,7 +20,7 @@ import importlib.util
20
20
  import sys
21
21
  import threading
22
22
  from dataclasses import dataclass
23
- from logging import ERROR, INFO, WARN
23
+ from logging import DEBUG, ERROR, INFO, WARN
24
24
  from os.path import isfile
25
25
  from pathlib import Path
26
26
  from signal import SIGINT, SIGTERM, signal
@@ -44,16 +44,16 @@ from flwr.proto.fleet_pb2_grpc import ( # pylint: disable=E0611
44
44
  add_FleetServicer_to_server,
45
45
  )
46
46
  from flwr.server.client_manager import ClientManager, SimpleClientManager
47
- from flwr.server.driver.driver_servicer import DriverServicer
48
- from flwr.server.fleet.grpc_bidi.grpc_server import (
49
- generic_create_grpc_server,
50
- start_grpc_server,
51
- )
52
- from flwr.server.fleet.grpc_rere.fleet_servicer import FleetServicer
53
47
  from flwr.server.history import History
54
48
  from flwr.server.server import Server
55
- from flwr.server.state import StateFactory
56
49
  from flwr.server.strategy import FedAvg, Strategy
50
+ from flwr.server.superlink.driver.driver_servicer import DriverServicer
51
+ from flwr.server.superlink.fleet.grpc_bidi.grpc_server import (
52
+ generic_create_grpc_server,
53
+ start_grpc_server,
54
+ )
55
+ from flwr.server.superlink.fleet.grpc_rere.fleet_servicer import FleetServicer
56
+ from flwr.server.superlink.state import StateFactory
57
57
 
58
58
  ADDRESS_DRIVER_API = "0.0.0.0:9091"
59
59
  ADDRESS_FLEET_API_GRPC_RERE = "0.0.0.0:9092"
@@ -75,6 +75,60 @@ class ServerConfig:
75
75
  round_timeout: Optional[float] = None
76
76
 
77
77
 
78
+ def run_server_app() -> None:
79
+ """Run Flower server app."""
80
+ event(EventType.RUN_SERVER_APP_ENTER)
81
+
82
+ args = _parse_args_run_server_app().parse_args()
83
+
84
+ # Obtain certificates
85
+ if args.insecure:
86
+ if args.root_certificates is not None:
87
+ sys.exit(
88
+ "Conflicting options: The '--insecure' flag disables HTTPS, "
89
+ "but '--root-certificates' was also specified. Please remove "
90
+ "the '--root-certificates' option when running in insecure mode, "
91
+ "or omit '--insecure' to use HTTPS."
92
+ )
93
+ log(
94
+ WARN,
95
+ "Option `--insecure` was set. "
96
+ "Starting insecure HTTP client connected to %s.",
97
+ args.server,
98
+ )
99
+ root_certificates = None
100
+ else:
101
+ # Load the certificates if provided, or load the system certificates
102
+ cert_path = args.root_certificates
103
+ if cert_path is None:
104
+ root_certificates = None
105
+ else:
106
+ root_certificates = Path(cert_path).read_bytes()
107
+ log(
108
+ DEBUG,
109
+ "Starting secure HTTPS client connected to %s "
110
+ "with the following certificates: %s.",
111
+ args.server,
112
+ cert_path,
113
+ )
114
+
115
+ log(
116
+ DEBUG,
117
+ "Flower will load ServerApp `%s`",
118
+ getattr(args, "server-app"),
119
+ )
120
+
121
+ log(
122
+ DEBUG,
123
+ "root_certificates: `%s`",
124
+ root_certificates,
125
+ )
126
+
127
+ log(WARN, "Not implemented: run_server_app")
128
+
129
+ event(EventType.RUN_SERVER_APP_LEAVE)
130
+
131
+
78
132
  def start_server( # pylint: disable=too-many-arguments,too-many-locals
79
133
  *,
80
134
  server_address: str = ADDRESS_FLEET_API_GRPC_BIDI,
@@ -239,7 +293,7 @@ def run_driver_api() -> None:
239
293
  """Run Flower server (Driver API)."""
240
294
  log(INFO, "Starting Flower server (Driver API)")
241
295
  event(EventType.RUN_DRIVER_API_ENTER)
242
- args = _parse_args_driver().parse_args()
296
+ args = _parse_args_run_driver_api().parse_args()
243
297
 
244
298
  # Parse IP address
245
299
  parsed_address = parse_address(args.driver_api_address)
@@ -276,7 +330,7 @@ def run_fleet_api() -> None:
276
330
  """Run Flower server (Fleet API)."""
277
331
  log(INFO, "Starting Flower server (Fleet API)")
278
332
  event(EventType.RUN_FLEET_API_ENTER)
279
- args = _parse_args_fleet().parse_args()
333
+ args = _parse_args_run_fleet_api().parse_args()
280
334
 
281
335
  # Obtain certificates
282
336
  certificates = _try_obtain_certificates(args)
@@ -344,11 +398,11 @@ def run_fleet_api() -> None:
344
398
 
345
399
 
346
400
  # pylint: disable=too-many-branches, too-many-locals, too-many-statements
347
- def run_server() -> None:
401
+ def run_superlink() -> None:
348
402
  """Run Flower server (Driver API and Fleet API)."""
349
403
  log(INFO, "Starting Flower server")
350
- event(EventType.RUN_SERVER_ENTER)
351
- args = _parse_args_server().parse_args()
404
+ event(EventType.RUN_SUPERLINK_ENTER)
405
+ args = _parse_args_run_superlink().parse_args()
352
406
 
353
407
  # Parse IP address
354
408
  parsed_address = parse_address(args.driver_api_address)
@@ -419,7 +473,7 @@ def run_server() -> None:
419
473
  _register_exit_handlers(
420
474
  grpc_servers=grpc_servers,
421
475
  bckg_threads=bckg_threads,
422
- event_type=EventType.RUN_SERVER_LEAVE,
476
+ event_type=EventType.RUN_SUPERLINK_LEAVE,
423
477
  )
424
478
 
425
479
  # Block
@@ -561,7 +615,7 @@ def _run_fleet_api_rest(
561
615
  try:
562
616
  import uvicorn
563
617
 
564
- from flwr.server.fleet.rest_rere.rest_api import app as fast_api_app
618
+ from flwr.server.superlink.fleet.rest_rere.rest_api import app as fast_api_app
565
619
  except ModuleNotFoundError:
566
620
  sys.exit(MISSING_EXTRA_REST)
567
621
  if workers != 1:
@@ -584,7 +638,7 @@ def _run_fleet_api_rest(
584
638
  raise ValueError(validation_exceptions)
585
639
 
586
640
  uvicorn.run(
587
- app="flwr.server.fleet.rest_rere.rest_api:app",
641
+ app="flwr.server.superlink.fleet.rest_rere.rest_api:app",
588
642
  port=port,
589
643
  host=host,
590
644
  reload=False,
@@ -621,7 +675,7 @@ def _validate_ssl_files(
621
675
  return validation_exceptions
622
676
 
623
677
 
624
- def _parse_args_driver() -> argparse.ArgumentParser:
678
+ def _parse_args_run_driver_api() -> argparse.ArgumentParser:
625
679
  """Parse command line arguments for Driver API."""
626
680
  parser = argparse.ArgumentParser(
627
681
  description="Start a Flower Driver API server. "
@@ -638,7 +692,7 @@ def _parse_args_driver() -> argparse.ArgumentParser:
638
692
  return parser
639
693
 
640
694
 
641
- def _parse_args_fleet() -> argparse.ArgumentParser:
695
+ def _parse_args_run_fleet_api() -> argparse.ArgumentParser:
642
696
  """Parse command line arguments for Fleet API."""
643
697
  parser = argparse.ArgumentParser(
644
698
  description="Start a Flower Fleet API server."
@@ -655,7 +709,7 @@ def _parse_args_fleet() -> argparse.ArgumentParser:
655
709
  return parser
656
710
 
657
711
 
658
- def _parse_args_server() -> argparse.ArgumentParser:
712
+ def _parse_args_run_superlink() -> argparse.ArgumentParser:
659
713
  """Parse command line arguments for both Driver API and Fleet API."""
660
714
  parser = argparse.ArgumentParser(
661
715
  description="This will start a Flower server "
@@ -760,3 +814,42 @@ def _add_args_fleet_api(parser: argparse.ArgumentParser) -> None:
760
814
  type=int,
761
815
  default=1,
762
816
  )
817
+
818
+
819
+ def _parse_args_run_server_app() -> argparse.ArgumentParser:
820
+ """Parse flower-server-app command line arguments."""
821
+ parser = argparse.ArgumentParser(
822
+ description="Start a Flower server app",
823
+ )
824
+
825
+ parser.add_argument(
826
+ "server-app",
827
+ help="For example: `server:app` or `project.package.module:wrapper.app`",
828
+ )
829
+ parser.add_argument(
830
+ "--insecure",
831
+ action="store_true",
832
+ help="Run the server app without HTTPS. By default, the app runs with "
833
+ "HTTPS enabled. Use this flag only if you understand the risks.",
834
+ )
835
+ parser.add_argument(
836
+ "--root-certificates",
837
+ metavar="ROOT_CERT",
838
+ type=str,
839
+ help="Specifies the path to the PEM-encoded root certificate file for "
840
+ "establishing secure HTTPS connections.",
841
+ )
842
+ parser.add_argument(
843
+ "--server",
844
+ default="0.0.0.0:9092",
845
+ help="Server address",
846
+ )
847
+ parser.add_argument(
848
+ "--dir",
849
+ default="",
850
+ help="Add specified directory to the PYTHONPATH and load Flower "
851
+ "app from there."
852
+ " Default: current working directory.",
853
+ )
854
+
855
+ return parser
@@ -12,4 +12,15 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
  # ==============================================================================
15
- """Flower driver service."""
15
+ """Flower driver SDK."""
16
+
17
+
18
+ from .app import start_driver
19
+ from .driver import Driver
20
+ from .grpc_driver import GrpcDriver
21
+
22
+ __all__ = [
23
+ "Driver",
24
+ "GrpcDriver",
25
+ "start_driver",
26
+ ]
@@ -72,7 +72,7 @@ def start_driver( # pylint: disable=too-many-arguments, too-many-locals
72
72
  An implementation of the abstract base class
73
73
  `flwr.server.strategy.Strategy`. If no strategy is provided, then
74
74
  `start_server` will use `flwr.server.strategy.FedAvg`.
75
- client_manager : Optional[flwr.server.DriverClientManager] (default: None)
75
+ client_manager : Optional[flwr.server.ClientManager] (default: None)
76
76
  An implementation of the class `flwr.server.ClientManager`. If no
77
77
  implementation is provided, then `start_driver` will use
78
78
  `flwr.server.SimpleClientManager`.
@@ -17,7 +17,6 @@
17
17
 
18
18
  from typing import Iterable, List, Optional, Tuple
19
19
 
20
- from flwr.driver.grpc_driver import DEFAULT_SERVER_ADDRESS_DRIVER, GrpcDriver
21
20
  from flwr.proto.driver_pb2 import ( # pylint: disable=E0611
22
21
  CreateRunRequest,
23
22
  GetNodesRequest,
@@ -26,6 +25,7 @@ from flwr.proto.driver_pb2 import ( # pylint: disable=E0611
26
25
  )
27
26
  from flwr.proto.node_pb2 import Node # pylint: disable=E0611
28
27
  from flwr.proto.task_pb2 import TaskIns, TaskRes # pylint: disable=E0611
28
+ from flwr.server.driver.grpc_driver import DEFAULT_SERVER_ADDRESS_DRIVER, GrpcDriver
29
29
 
30
30
 
31
31
  class Driver:
@@ -0,0 +1,15 @@
1
+ # Copyright 2024 Flower Labs GmbH. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+ # ==============================================================================
15
+ """Flower SuperLink."""
@@ -0,0 +1,15 @@
1
+ # Copyright 2022 Flower Labs GmbH. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+ # ==============================================================================
15
+ """Flower driver service."""
@@ -35,7 +35,7 @@ from flwr.proto.driver_pb2 import ( # pylint: disable=E0611
35
35
  )
36
36
  from flwr.proto.node_pb2 import Node # pylint: disable=E0611
37
37
  from flwr.proto.task_pb2 import TaskRes # pylint: disable=E0611
38
- from flwr.server.state import State, StateFactory
38
+ from flwr.server.superlink.state import State, StateFactory
39
39
  from flwr.server.utils.validator import validate_task_ins_or_res
40
40
 
41
41
 
@@ -30,8 +30,12 @@ from flwr.proto.transport_pb2 import ( # pylint: disable=E0611
30
30
  ServerMessage,
31
31
  )
32
32
  from flwr.server.client_manager import ClientManager
33
- from flwr.server.fleet.grpc_bidi.grpc_bridge import GrpcBridge, InsWrapper, ResWrapper
34
- from flwr.server.fleet.grpc_bidi.grpc_client_proxy import GrpcClientProxy
33
+ from flwr.server.superlink.fleet.grpc_bidi.grpc_bridge import (
34
+ GrpcBridge,
35
+ InsWrapper,
36
+ ResWrapper,
37
+ )
38
+ from flwr.server.superlink.fleet.grpc_bidi.grpc_client_proxy import GrpcClientProxy
35
39
 
36
40
 
37
41
  def default_bridge_factory() -> GrpcBridge:
@@ -24,7 +24,11 @@ from flwr.proto.transport_pb2 import ( # pylint: disable=E0611
24
24
  ServerMessage,
25
25
  )
26
26
  from flwr.server.client_proxy import ClientProxy
27
- from flwr.server.fleet.grpc_bidi.grpc_bridge import GrpcBridge, InsWrapper, ResWrapper
27
+ from flwr.server.superlink.fleet.grpc_bidi.grpc_bridge import (
28
+ GrpcBridge,
29
+ InsWrapper,
30
+ ResWrapper,
31
+ )
28
32
 
29
33
 
30
34
  class GrpcClientProxy(ClientProxy):
@@ -28,9 +28,11 @@ from flwr.proto.transport_pb2_grpc import ( # pylint: disable=E0611
28
28
  add_FlowerServiceServicer_to_server,
29
29
  )
30
30
  from flwr.server.client_manager import ClientManager
31
- from flwr.server.driver.driver_servicer import DriverServicer
32
- from flwr.server.fleet.grpc_bidi.flower_service_servicer import FlowerServiceServicer
33
- from flwr.server.fleet.grpc_rere.fleet_servicer import FleetServicer
31
+ from flwr.server.superlink.driver.driver_servicer import DriverServicer
32
+ from flwr.server.superlink.fleet.grpc_bidi.flower_service_servicer import (
33
+ FlowerServiceServicer,
34
+ )
35
+ from flwr.server.superlink.fleet.grpc_rere.fleet_servicer import FleetServicer
34
36
 
35
37
  INVALID_CERTIFICATES_ERR_MSG = """
36
38
  When setting any of root_certificate, certificate, or private_key,
@@ -31,8 +31,8 @@ from flwr.proto.fleet_pb2 import ( # pylint: disable=E0611
31
31
  PushTaskResRequest,
32
32
  PushTaskResResponse,
33
33
  )
34
- from flwr.server.fleet.message_handler import message_handler
35
- from flwr.server.state import StateFactory
34
+ from flwr.server.superlink.fleet.message_handler import message_handler
35
+ from flwr.server.superlink.state import StateFactory
36
36
 
37
37
 
38
38
  class FleetServicer(fleet_pb2_grpc.FleetServicer):
@@ -31,7 +31,7 @@ from flwr.proto.fleet_pb2 import ( # pylint: disable=E0611
31
31
  )
32
32
  from flwr.proto.node_pb2 import Node # pylint: disable=E0611
33
33
  from flwr.proto.task_pb2 import TaskIns, TaskRes # pylint: disable=E0611
34
- from flwr.server.state import State
34
+ from flwr.server.superlink.state import State
35
35
 
36
36
 
37
37
  def create_node(
@@ -24,8 +24,8 @@ from flwr.proto.fleet_pb2 import ( # pylint: disable=E0611
24
24
  PullTaskInsRequest,
25
25
  PushTaskResRequest,
26
26
  )
27
- from flwr.server.fleet.message_handler import message_handler
28
- from flwr.server.state import State
27
+ from flwr.server.superlink.fleet.message_handler import message_handler
28
+ from flwr.server.superlink.state import State
29
29
 
30
30
  try:
31
31
  from starlette.applications import Starlette
@@ -23,7 +23,7 @@ from uuid import UUID, uuid4
23
23
 
24
24
  from flwr.common import log, now
25
25
  from flwr.proto.task_pb2 import TaskIns, TaskRes # pylint: disable=E0611
26
- from flwr.server.state.state import State
26
+ from flwr.server.superlink.state.state import State
27
27
  from flwr.server.utils import validate_task_ins_or_res
28
28
 
29
29
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: flwr-nightly
3
- Version: 1.8.0.dev20240210
3
+ Version: 1.8.0.dev20240211
4
4
  Summary: Flower: A Friendly Federated Learning Framework
5
5
  Home-page: https://flower.dev
6
6
  License: Apache-2.0
@@ -1,8 +1,8 @@
1
- flwr/__init__.py,sha256=_lnE8lIgk0i4hpag6GWVGPPr1w4IrA5z4y_kFwIpZYM,959
2
- flwr/client/__init__.py,sha256=BfwwT48IpI0qHGW_F5zLqqAyH-qzBD2Rz22mR-4gSZM,1174
3
- flwr/client/app.py,sha256=28MKUMVyw01XY1OlNvWz2UfpS7LJZAUvLw7aOYr3tGQ,20001
1
+ flwr/__init__.py,sha256=VmBWedrCxqmt4QvUHBLqyVEH6p7zaFMD_oCHerXHSVw,937
2
+ flwr/client/__init__.py,sha256=ypNGqhSDxEPX_6XwcQyVseBf8oS_Zvs_JkrLbVIeKxw,1186
3
+ flwr/client/app.py,sha256=p7x3n3PGzlkIEgi-DNxLOgUfHDGF2QmrD5ZJBvPntNY,20020
4
4
  flwr/client/client.py,sha256=ATcsqAMS9zpMBJ9ZUbBeB7BEPWX_VWISONy0p6Wxl5g,8210
5
- flwr/client/clientapp.py,sha256=H4-aw9Wh5B91KAZqE9VyD6qYpfrQNYDF75NoBu5yoXE,4186
5
+ flwr/client/clientapp.py,sha256=M_7GZ8dbRhYXdI306TAFIbkm8AOyyQX5O-C3QPFDEdI,4190
6
6
  flwr/client/dpfedavg_numpy_client.py,sha256=9Tnig4iml2J88HBKNahegjXjbfvIQyBtaIQaqjbeqsA,7435
7
7
  flwr/client/grpc_client/__init__.py,sha256=LsnbqXiJhgQcB0XzAlUQgPx011Uf7Y7yabIC1HxivJ8,735
8
8
  flwr/client/grpc_client/connection.py,sha256=x50raKKVKVNjNNOr2u1gOS2Ts6ohs2cAGrRXZw6sgLE,8226
@@ -46,14 +46,9 @@ flwr/common/secure_aggregation/quantization.py,sha256=appui7GGrkRPsupF59TkapeV4N
46
46
  flwr/common/secure_aggregation/secaggplus_constants.py,sha256=pITi-nuzrNvKWR42XwVFBuejv1RdGLwmuErLp0X0t_Y,1686
47
47
  flwr/common/secure_aggregation/secaggplus_utils.py,sha256=PleDyDu7jHNAfbRoEaoQiOjxG6iMl9yA8rNKYTfnyFw,3155
48
48
  flwr/common/serde.py,sha256=rXUSH9TNFsRDBTdr9bGCKGLyjNuzagUOQVynS_luWkI,19643
49
- flwr/common/telemetry.py,sha256=se_-pHgEWcmN09ChSpTeek72l1UJHf7GbwXBB1KXBjQ,7683
49
+ flwr/common/telemetry.py,sha256=VtumOl5Zfrip6crU6DMOGAYzraP4NuImVRp-EN6joUA,7783
50
50
  flwr/common/typing.py,sha256=3Wu6Ol1Ja6Gb0WdlcXVEn1EHYJbc4oRRJA81vEegxBo,4382
51
51
  flwr/common/version.py,sha256=A0MKvyKPrV8wLg0YCAODTqM71v26NEH36c6JYtfgg0o,667
52
- flwr/driver/__init__.py,sha256=NQ4KeZ5fP9wdxGjcr2cP41_7TLuuYQ3u4J7GwYtQ488,870
53
- flwr/driver/app.py,sha256=rhACazH0J06Tnqy5aU0DoJlx5ZksK4b0NgHkM1bAE38,7268
54
- flwr/driver/driver.py,sha256=BhCXx55Lk9WdpcfjlHhKyLbGdiIvawIvMWYPewIaI8I,4009
55
- flwr/driver/driver_client_proxy.py,sha256=wKC3R-293dOqxNytzf78z6tuDCXORbuJAdICyZ5jeK8,6126
56
- flwr/driver/grpc_driver.py,sha256=Ekcxx4Miqume02fiBjBRJhItaOFNpn120WT3uRIPWIc,4585
57
52
  flwr/proto/__init__.py,sha256=hbY7JYakwZwCkYgCNlmHdc8rtvfoJbAZLalMdc--CGc,683
58
53
  flwr/proto/driver_pb2.py,sha256=JHIdjNPTgp6YHD-_lz5ZZFB0VIOR3_GmcaOTN4jndc4,3115
59
54
  flwr/proto/driver_pb2.pyi,sha256=xwl2AqIWn0SwAlg-x5RUQeqr6DC48eywnqmD7gbaaFs,4670
@@ -80,32 +75,18 @@ flwr/proto/transport_pb2.pyi,sha256=CZvJRWTU3QWFWLXNFtyLSrSKFatIyMcy-ohzLbQ-G9c,
80
75
  flwr/proto/transport_pb2_grpc.py,sha256=vLN3EHtx2aEEMCO4f1Upu-l27BPzd3-5pV-u8wPcosk,2598
81
76
  flwr/proto/transport_pb2_grpc.pyi,sha256=AGXf8RiIiW2J5IKMlm_3qT3AzcDa4F3P5IqUjve_esA,766
82
77
  flwr/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
83
- flwr/server/__init__.py,sha256=SG7XJWnskPZu30VfY5WmXbfYKeb8UFrths4qprAb0yg,1377
84
- flwr/server/app.py,sha256=WYAyWQZksetbzR8Gos_LSQOTzzhzapuRhjXdks6K9xM,25619
78
+ flwr/server/__init__.py,sha256=DLFm2lDhZdJlkZqAhb2culpScX7WrjW43GUDmwgt1Zk,1480
79
+ flwr/server/app.py,sha256=wVg2Gebb3tZeys2r5bJv77RFNYbauXJg0aqVmGsi1vw,28477
85
80
  flwr/server/client_manager.py,sha256=T8UDSRJBVD3fyIDI7NTAA-NA7GPrMNNgH2OAF54RRxE,6127
86
81
  flwr/server/client_proxy.py,sha256=8ScGDvP3jHbl8DV3hyFID5N5VEVlXn8ZTQXtkdOfssI,2234
87
82
  flwr/server/criterion.py,sha256=ypbAexbztzGUxNen9RCHF91QeqiEQix4t4Ih3E-42MM,1061
88
- flwr/server/driver/__init__.py,sha256=STB1_DASVEg7Cu6L7VYxTzV7UMkgtBkFim09Z82Dh8I,712
89
- flwr/server/driver/driver_servicer.py,sha256=8JwftxoMMqHPAEgvE2TDDvm4zW2-7xaHYoji5kb6k8k,4553
90
- flwr/server/fleet/__init__.py,sha256=C6GCSD5eP5Of6_dIeSe1jx9HnV0icsvWyQ5EKAUHJRU,711
91
- flwr/server/fleet/grpc_bidi/__init__.py,sha256=mgGJGjwT6VU7ovC1gdnnqttjyBPlNIcZnYRqx4K3IBQ,735
92
- flwr/server/fleet/grpc_bidi/flower_service_servicer.py,sha256=DVYlKxOVHwdQVux9XKJTomWwoLLlhhPhvvluU50hO4E,5956
93
- flwr/server/fleet/grpc_bidi/grpc_bridge.py,sha256=LSOmabFXAQxKycQOliplKmigbmVwdm-D4CI-hJ0Pav0,6458
94
- flwr/server/fleet/grpc_bidi/grpc_client_proxy.py,sha256=MubuEEAZAcKzx9LYAB87B2sjvZWWyQS3RPAJJm1GS4I,4695
95
- flwr/server/fleet/grpc_bidi/grpc_server.py,sha256=TY_Z8ComreNNOOKveeUO6eE5hoSuTvx_EWqQl0zRADQ,11779
96
- flwr/server/fleet/grpc_rere/__init__.py,sha256=bEJOMWbSlqkw-y5ZHtEXczhoSlAxErcRYffmTMQAV8M,758
97
- flwr/server/fleet/grpc_rere/fleet_servicer.py,sha256=I6-mfOIKjxiGgHuL2AeiKqYnXDY_qBN1YXDJw1cttcA,2705
98
- flwr/server/fleet/message_handler/__init__.py,sha256=hEY0l61ojH8Iz30_K1btm1HJ6J49iZJSFUsVYqUTw3A,731
99
- flwr/server/fleet/message_handler/message_handler.py,sha256=_SauWQUO6VCMRRNXDfg3gv2h1FKG7e7p8F-Nj4aY6OM,2823
100
- flwr/server/fleet/rest_rere/__init__.py,sha256=VKDvDq5H8koOUztpmQacVzGJXPLEEkL1Vmolxt3mvnY,735
101
- flwr/server/fleet/rest_rere/rest_api.py,sha256=c2wMs9Ytx0BprIyPQIFnbLaPXNy_NoCOs72ERRat0z0,5886
83
+ flwr/server/driver/__init__.py,sha256=NQ4KeZ5fP9wdxGjcr2cP41_7TLuuYQ3u4J7GwYtQ488,870
84
+ flwr/server/driver/app.py,sha256=jbd8OrPFWvi354wp3DRUWb5dBXYaBCyNv23xdXzmzco,7262
85
+ flwr/server/driver/driver.py,sha256=OWbLd4rlXiZb-RQZ_i_m_6LwCZzIx5sEvTJe6ZIvNbE,4016
86
+ flwr/server/driver/driver_client_proxy.py,sha256=wKC3R-293dOqxNytzf78z6tuDCXORbuJAdICyZ5jeK8,6126
87
+ flwr/server/driver/grpc_driver.py,sha256=Ekcxx4Miqume02fiBjBRJhItaOFNpn120WT3uRIPWIc,4585
102
88
  flwr/server/history.py,sha256=W7PHCFX7dLXrdnaVfl5V4tuzmtxh6zArkWYxVXvTZ1c,4904
103
89
  flwr/server/server.py,sha256=skrNgQp9vlCVHruovlaB0Rh1W7xdH7KqEfVCMZGpK7c,15965
104
- flwr/server/state/__init__.py,sha256=ij-7Ms-hyordQdRmGQxY1-nVa4OhixJ0jr7_YDkys0s,1003
105
- flwr/server/state/in_memory_state.py,sha256=kODjcJrvF_I7Oc3UVfsnxPksTD0oas0x91shbJ4IdbY,7893
106
- flwr/server/state/sqlite_state.py,sha256=Adc2g1DecAN9Cl9F8lekuTb885mIHiOi6sQv4nxbmSc,21203
107
- flwr/server/state/state.py,sha256=JtsI92HfdKd8KzBQ9Om7A7xwngDXVxtET2Bk9aQ7nao,5316
108
- flwr/server/state/state_factory.py,sha256=91cSB-KOAFM37z7T098WxTkVeKNaAZ_mTI75snn2_tk,1654
109
90
  flwr/server/strategy/__init__.py,sha256=EDTv_lU67VmZ8pRqy5fabQDhq5x4oRiD-KHoXhOIWMs,2096
110
91
  flwr/server/strategy/aggregate.py,sha256=QyRIJtI5gnuY1NbgrcrOvkHxGIxBvApq7d9Y4xl-6W4,13468
111
92
  flwr/server/strategy/bulyan.py,sha256=8GsSVJzRSoSWE2zQUKqC3Z795grdN9xpmc3MSGGXnzM,6532
@@ -128,6 +109,26 @@ flwr/server/strategy/fedyogi.py,sha256=fG9i1WEdUXTYh5mTmagGLHqc12OogEsj3s3IopwM4
128
109
  flwr/server/strategy/krum.py,sha256=yaYAZw4KOL84nc_PZAp43rBl0pXC0dT6y46sEuZrirA,6285
129
110
  flwr/server/strategy/qfedavg.py,sha256=s-4C-96PKZiUbwZ9_v1ALAd9GmvucjmeOKETipK7fNo,10150
130
111
  flwr/server/strategy/strategy.py,sha256=g6VoIFogEviRub6G4QsKdIp6M_Ek6GhBhqcdNx5ueUk,7543
112
+ flwr/server/superlink/__init__.py,sha256=8tHYCfodUlRD8PCP9fHgvu8cz5N31A2QoRVL0jDJ15E,707
113
+ flwr/server/superlink/driver/__init__.py,sha256=STB1_DASVEg7Cu6L7VYxTzV7UMkgtBkFim09Z82Dh8I,712
114
+ flwr/server/superlink/driver/driver_servicer.py,sha256=69-QMkdefgd8BDDAuy4TSJHVcmZAGqq8Yy9ZPDq2kks,4563
115
+ flwr/server/superlink/fleet/__init__.py,sha256=C6GCSD5eP5Of6_dIeSe1jx9HnV0icsvWyQ5EKAUHJRU,711
116
+ flwr/server/superlink/fleet/grpc_bidi/__init__.py,sha256=mgGJGjwT6VU7ovC1gdnnqttjyBPlNIcZnYRqx4K3IBQ,735
117
+ flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py,sha256=57b3UL5-baGdLwgCtB0dCUTTSbmmfMAXcXV5bjPZNWQ,5993
118
+ flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py,sha256=LSOmabFXAQxKycQOliplKmigbmVwdm-D4CI-hJ0Pav0,6458
119
+ flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py,sha256=ajQEfMo8wvLc3tgU0pq6PiiF3-ccZReLTxyz4XbWHcE,4722
120
+ flwr/server/superlink/fleet/grpc_bidi/grpc_server.py,sha256=1QyBX5qcFPjMVlv7TrvnQkcET4muvg94Fy9hAQUBYnY,11818
121
+ flwr/server/superlink/fleet/grpc_rere/__init__.py,sha256=bEJOMWbSlqkw-y5ZHtEXczhoSlAxErcRYffmTMQAV8M,758
122
+ flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py,sha256=Mgb4WscpKrkmAVp-09MIzi8S0i_Bkcp88D0_1ief6Uw,2725
123
+ flwr/server/superlink/fleet/message_handler/__init__.py,sha256=hEY0l61ojH8Iz30_K1btm1HJ6J49iZJSFUsVYqUTw3A,731
124
+ flwr/server/superlink/fleet/message_handler/message_handler.py,sha256=iUBTJ2fzVL0XB8vfaEzCNJ6okeuOWrK6LJe__ElP9x8,2833
125
+ flwr/server/superlink/fleet/rest_rere/__init__.py,sha256=VKDvDq5H8koOUztpmQacVzGJXPLEEkL1Vmolxt3mvnY,735
126
+ flwr/server/superlink/fleet/rest_rere/rest_api.py,sha256=7JCs7NW4Qq8W5QhXxqsQNFiCLlRY-b_iD420vH1Mu-U,5906
127
+ flwr/server/superlink/state/__init__.py,sha256=ij-7Ms-hyordQdRmGQxY1-nVa4OhixJ0jr7_YDkys0s,1003
128
+ flwr/server/superlink/state/in_memory_state.py,sha256=viGGGyg7LwwxKfCnndV6Tp9poVeZTrbN9z0tt-4qrqI,7903
129
+ flwr/server/superlink/state/sqlite_state.py,sha256=Adc2g1DecAN9Cl9F8lekuTb885mIHiOi6sQv4nxbmSc,21203
130
+ flwr/server/superlink/state/state.py,sha256=JtsI92HfdKd8KzBQ9Om7A7xwngDXVxtET2Bk9aQ7nao,5316
131
+ flwr/server/superlink/state/state_factory.py,sha256=91cSB-KOAFM37z7T098WxTkVeKNaAZ_mTI75snn2_tk,1654
131
132
  flwr/server/utils/__init__.py,sha256=RQVbo-bcsVtp_lJBf7dL5w01FbLrr7v3YedeGp5_YMs,908
132
133
  flwr/server/utils/tensorboard.py,sha256=k0G6bqsLx7wfYbH2KtXsDYcOCfyIeE12-hefXA7lZdg,5485
133
134
  flwr/server/utils/validator.py,sha256=IJN2475yyD_i_9kg_SJ_JodIuZh58ufpWGUDQRAqu2s,4740
@@ -137,8 +138,8 @@ flwr/simulation/ray_transport/__init__.py,sha256=FsaAnzC4cw4DqoouBCix6496k29jACk
137
138
  flwr/simulation/ray_transport/ray_actor.py,sha256=G_g50ISt3Knf0zuX1wmw39gsDXSoMI5f3rmYZWGrUh4,17062
138
139
  flwr/simulation/ray_transport/ray_client_proxy.py,sha256=UxQEzWmklp3WO2V7LH5vNyAgYL7KYFFZQa1HTUSgEqY,9429
139
140
  flwr/simulation/ray_transport/utils.py,sha256=5dwzUppfJP8lrpBU1rvhzfPZqAeGo8wx-hOm8wy_HmA,3376
140
- flwr_nightly-1.8.0.dev20240210.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
141
- flwr_nightly-1.8.0.dev20240210.dist-info/METADATA,sha256=xfRA0Pxi0K0EM5PL11Lp4YBSR3Tw8QJhz2NA23NYV0A,14811
142
- flwr_nightly-1.8.0.dev20240210.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
143
- flwr_nightly-1.8.0.dev20240210.dist-info/entry_points.txt,sha256=1uLlD5tIunkzALMfMWnqjdE_D5hRUX_I1iMmOMv6tZI,181
144
- flwr_nightly-1.8.0.dev20240210.dist-info/RECORD,,
141
+ flwr_nightly-1.8.0.dev20240211.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
142
+ flwr_nightly-1.8.0.dev20240211.dist-info/METADATA,sha256=4s6_U1jDWkqo8LuxTsJzmv2U-1srbMgDB5q5X7s_lHs,14811
143
+ flwr_nightly-1.8.0.dev20240211.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
144
+ flwr_nightly-1.8.0.dev20240211.dist-info/entry_points.txt,sha256=ltLHw7Y12K5lp8ahi7SPR0bWb_p_0mkknC3F2JI9LPM,240
145
+ flwr_nightly-1.8.0.dev20240211.dist-info/RECORD,,
@@ -0,0 +1,7 @@
1
+ [console_scripts]
2
+ flower-client-app=flwr.client:run_client_app
3
+ flower-driver-api=flwr.server:run_driver_api
4
+ flower-fleet-api=flwr.server:run_fleet_api
5
+ flower-server-app=flwr.server:run_server_app
6
+ flower-superlink=flwr.server:run_superlink
7
+
flwr/driver/__init__.py DELETED
@@ -1,26 +0,0 @@
1
- # Copyright 2022 Flower Labs GmbH. All Rights Reserved.
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
14
- # ==============================================================================
15
- """Flower driver SDK."""
16
-
17
-
18
- from .app import start_driver
19
- from .driver import Driver
20
- from .grpc_driver import GrpcDriver
21
-
22
- __all__ = [
23
- "Driver",
24
- "GrpcDriver",
25
- "start_driver",
26
- ]
@@ -1,6 +0,0 @@
1
- [console_scripts]
2
- flower-client=flwr.client:run_client
3
- flower-driver-api=flwr.server:run_driver_api
4
- flower-fleet-api=flwr.server:run_fleet_api
5
- flower-server=flwr.server:run_server
6
-
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes