flwr-nightly 1.8.0.dev20240210__py3-none-any.whl → 1.8.0.dev20240211__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.
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