flwr-nightly 1.23.0.dev20250930__py3-none-any.whl → 1.26.0.dev20260121__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.
- flwr/__init__.py +17 -6
- flwr/app/__init__.py +4 -1
- flwr/app/error.py +2 -2
- flwr/app/exception.py +3 -3
- flwr/app/message_type.py +29 -0
- flwr/app/metadata.py +5 -2
- flwr/app/user_config.py +19 -0
- flwr/cli/app.py +62 -9
- flwr/cli/{new/templates/app/code → app_cmd}/__init__.py +9 -1
- flwr/cli/app_cmd/publish.py +285 -0
- flwr/cli/app_cmd/review.py +262 -0
- flwr/cli/auth_plugin/__init__.py +13 -6
- flwr/cli/auth_plugin/auth_plugin.py +26 -15
- flwr/cli/auth_plugin/noop_auth_plugin.py +101 -0
- flwr/cli/auth_plugin/oidc_cli_plugin.py +52 -32
- flwr/cli/build.py +166 -53
- flwr/cli/{cli_user_auth_interceptor.py → cli_account_auth_interceptor.py} +27 -10
- flwr/cli/config/__init__.py +21 -0
- flwr/cli/config/ls.py +104 -0
- flwr/cli/config_migration.py +300 -0
- flwr/cli/config_utils.py +154 -13
- flwr/cli/constant.py +67 -0
- flwr/cli/{new/templates/app/code/flwr_tune → federation}/__init__.py +8 -1
- flwr/cli/federation/ls.py +361 -0
- flwr/cli/flower_config.py +447 -0
- flwr/cli/install.py +91 -13
- flwr/cli/log.py +65 -36
- flwr/cli/login/login.py +41 -27
- flwr/cli/ls.py +232 -158
- flwr/cli/new/new.py +188 -244
- flwr/cli/pull.py +25 -34
- flwr/cli/run/run.py +106 -74
- flwr/cli/run_utils.py +148 -0
- flwr/cli/stop.py +46 -37
- flwr/cli/supernode/__init__.py +25 -0
- flwr/cli/supernode/ls.py +273 -0
- flwr/cli/supernode/register.py +190 -0
- flwr/cli/supernode/unregister.py +140 -0
- flwr/cli/typing.py +211 -0
- flwr/cli/utils.py +428 -80
- flwr/client/__init__.py +2 -1
- flwr/client/dpfedavg_numpy_client.py +4 -1
- flwr/client/grpc_adapter_client/connection.py +14 -17
- flwr/client/grpc_rere_client/connection.py +73 -43
- flwr/client/grpc_rere_client/grpc_adapter.py +35 -15
- flwr/client/grpc_rere_client/{client_interceptor.py → node_auth_client_interceptor.py} +5 -7
- flwr/client/message_handler/message_handler.py +4 -3
- flwr/client/mod/centraldp_mods.py +1 -1
- flwr/client/mod/localdp_mod.py +1 -1
- flwr/client/mod/secure_aggregation/secaggplus_mod.py +11 -9
- flwr/client/numpy_client.py +1 -1
- flwr/client/rest_client/connection.py +99 -54
- flwr/client/run_info_store.py +6 -6
- flwr/client/typing.py +1 -1
- flwr/clientapp/__init__.py +1 -2
- flwr/{client → clientapp}/client_app.py +11 -11
- flwr/clientapp/mod/centraldp_mods.py +16 -17
- flwr/clientapp/mod/localdp_mod.py +8 -9
- flwr/clientapp/typing.py +1 -1
- flwr/{client/clientapp → clientapp}/utils.py +4 -4
- flwr/common/__init__.py +3 -2
- flwr/common/args.py +3 -4
- flwr/common/config.py +15 -17
- flwr/common/constant.py +56 -28
- flwr/common/context.py +2 -1
- flwr/common/differential_privacy.py +3 -4
- flwr/common/event_log_plugin/event_log_plugin.py +3 -4
- flwr/common/exit/exit.py +16 -3
- flwr/common/exit/exit_code.py +39 -10
- flwr/common/exit/exit_handler.py +6 -2
- flwr/common/exit/signal_handler.py +5 -5
- flwr/common/grpc.py +8 -7
- flwr/common/inflatable_protobuf_utils.py +1 -1
- flwr/common/inflatable_utils.py +48 -31
- flwr/common/logger.py +19 -19
- flwr/common/message.py +5 -5
- flwr/common/object_ref.py +7 -7
- flwr/common/record/array.py +6 -6
- flwr/common/record/arrayrecord.py +18 -21
- flwr/common/record/configrecord.py +3 -3
- flwr/common/record/recorddict.py +5 -5
- flwr/common/record/typeddict.py +9 -2
- flwr/common/recorddict_compat.py +7 -10
- flwr/common/retry_invoker.py +20 -20
- flwr/common/secure_aggregation/crypto/symmetric_encryption.py +1 -89
- flwr/common/secure_aggregation/ndarrays_arithmetic.py +8 -5
- flwr/common/serde.py +22 -11
- flwr/common/serde_utils.py +2 -2
- flwr/common/telemetry.py +10 -6
- flwr/common/typing.py +65 -44
- flwr/compat/client/app.py +45 -47
- flwr/compat/client/grpc_client/connection.py +15 -14
- flwr/compat/common/constant.py +29 -0
- flwr/compat/server/app.py +6 -7
- flwr/proto/appio_pb2.py +13 -3
- flwr/proto/appio_pb2.pyi +134 -65
- flwr/proto/appio_pb2_grpc.py +20 -0
- flwr/proto/appio_pb2_grpc.pyi +27 -0
- flwr/proto/clientappio_pb2.py +17 -7
- flwr/proto/clientappio_pb2.pyi +15 -0
- flwr/proto/clientappio_pb2_grpc.py +206 -40
- flwr/proto/clientappio_pb2_grpc.pyi +168 -53
- flwr/proto/control_pb2.py +72 -40
- flwr/proto/control_pb2.pyi +319 -87
- flwr/proto/control_pb2_grpc.py +339 -28
- flwr/proto/control_pb2_grpc.pyi +209 -37
- flwr/proto/error_pb2.py +13 -3
- flwr/proto/error_pb2.pyi +24 -6
- flwr/proto/error_pb2_grpc.py +20 -0
- flwr/proto/error_pb2_grpc.pyi +27 -0
- flwr/proto/fab_pb2.py +24 -10
- flwr/proto/fab_pb2.pyi +68 -20
- flwr/proto/fab_pb2_grpc.py +20 -0
- flwr/proto/fab_pb2_grpc.pyi +27 -0
- flwr/proto/federation_pb2.py +38 -0
- flwr/proto/federation_pb2.pyi +56 -0
- flwr/proto/federation_pb2_grpc.py +24 -0
- flwr/proto/federation_pb2_grpc.pyi +31 -0
- flwr/proto/fleet_pb2.py +45 -27
- flwr/proto/fleet_pb2.pyi +190 -70
- flwr/proto/fleet_pb2_grpc.py +277 -66
- flwr/proto/fleet_pb2_grpc.pyi +201 -55
- flwr/proto/grpcadapter_pb2.py +14 -4
- flwr/proto/grpcadapter_pb2.pyi +38 -16
- flwr/proto/grpcadapter_pb2_grpc.py +35 -4
- flwr/proto/grpcadapter_pb2_grpc.pyi +38 -7
- flwr/proto/heartbeat_pb2.py +17 -7
- flwr/proto/heartbeat_pb2.pyi +51 -22
- flwr/proto/heartbeat_pb2_grpc.py +20 -0
- flwr/proto/heartbeat_pb2_grpc.pyi +27 -0
- flwr/proto/log_pb2.py +13 -3
- flwr/proto/log_pb2.pyi +34 -11
- flwr/proto/log_pb2_grpc.py +20 -0
- flwr/proto/log_pb2_grpc.pyi +27 -0
- flwr/proto/message_pb2.py +15 -5
- flwr/proto/message_pb2.pyi +154 -86
- flwr/proto/message_pb2_grpc.py +20 -0
- flwr/proto/message_pb2_grpc.pyi +27 -0
- flwr/proto/node_pb2.py +16 -4
- flwr/proto/node_pb2.pyi +77 -4
- flwr/proto/node_pb2_grpc.py +20 -0
- flwr/proto/node_pb2_grpc.pyi +27 -0
- flwr/proto/recorddict_pb2.py +13 -3
- flwr/proto/recorddict_pb2.pyi +184 -107
- flwr/proto/recorddict_pb2_grpc.py +20 -0
- flwr/proto/recorddict_pb2_grpc.pyi +27 -0
- flwr/proto/run_pb2.py +40 -31
- flwr/proto/run_pb2.pyi +158 -84
- flwr/proto/run_pb2_grpc.py +20 -0
- flwr/proto/run_pb2_grpc.pyi +27 -0
- flwr/proto/serverappio_pb2.py +13 -3
- flwr/proto/serverappio_pb2.pyi +32 -8
- flwr/proto/serverappio_pb2_grpc.py +246 -65
- flwr/proto/serverappio_pb2_grpc.pyi +221 -85
- flwr/proto/simulationio_pb2.py +16 -8
- flwr/proto/simulationio_pb2.pyi +15 -0
- flwr/proto/simulationio_pb2_grpc.py +162 -41
- flwr/proto/simulationio_pb2_grpc.pyi +149 -55
- flwr/proto/transport_pb2.py +20 -10
- flwr/proto/transport_pb2.pyi +249 -160
- flwr/proto/transport_pb2_grpc.py +35 -4
- flwr/proto/transport_pb2_grpc.pyi +38 -8
- flwr/server/app.py +175 -128
- flwr/server/client_manager.py +4 -5
- flwr/server/client_proxy.py +10 -11
- flwr/server/compat/app.py +4 -5
- flwr/server/compat/app_utils.py +2 -1
- flwr/server/compat/grid_client_proxy.py +12 -13
- flwr/server/compat/legacy_context.py +3 -4
- flwr/server/fleet_event_log_interceptor.py +2 -1
- flwr/server/grid/grid.py +2 -3
- flwr/server/grid/grpc_grid.py +12 -10
- flwr/server/grid/inmemory_grid.py +4 -4
- flwr/server/run_serverapp.py +2 -3
- flwr/server/server.py +34 -39
- flwr/server/server_app.py +7 -8
- flwr/server/server_config.py +1 -2
- flwr/server/serverapp/app.py +34 -28
- flwr/server/serverapp_components.py +4 -5
- flwr/server/strategy/aggregate.py +9 -8
- flwr/server/strategy/bulyan.py +13 -11
- flwr/server/strategy/dp_adaptive_clipping.py +16 -20
- flwr/server/strategy/dp_fixed_clipping.py +12 -17
- flwr/server/strategy/dpfedavg_adaptive.py +3 -4
- flwr/server/strategy/dpfedavg_fixed.py +6 -10
- flwr/server/strategy/fault_tolerant_fedavg.py +14 -13
- flwr/server/strategy/fedadagrad.py +18 -14
- flwr/server/strategy/fedadam.py +16 -14
- flwr/server/strategy/fedavg.py +16 -17
- flwr/server/strategy/fedavg_android.py +15 -15
- flwr/server/strategy/fedavgm.py +21 -18
- flwr/server/strategy/fedmedian.py +2 -3
- flwr/server/strategy/fedopt.py +11 -10
- flwr/server/strategy/fedprox.py +10 -9
- flwr/server/strategy/fedtrimmedavg.py +12 -11
- flwr/server/strategy/fedxgb_bagging.py +13 -11
- flwr/server/strategy/fedxgb_cyclic.py +6 -6
- flwr/server/strategy/fedxgb_nn_avg.py +4 -4
- flwr/server/strategy/fedyogi.py +16 -14
- flwr/server/strategy/krum.py +12 -11
- flwr/server/strategy/qfedavg.py +16 -15
- flwr/server/strategy/strategy.py +6 -9
- flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +20 -9
- flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +1 -2
- flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +3 -4
- flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +10 -12
- flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +1 -3
- flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +136 -42
- flwr/server/superlink/fleet/grpc_rere/{server_interceptor.py → node_auth_server_interceptor.py} +28 -50
- flwr/server/superlink/fleet/message_handler/message_handler.py +141 -51
- flwr/server/superlink/fleet/rest_rere/rest_api.py +54 -33
- flwr/server/superlink/fleet/vce/backend/backend.py +2 -2
- flwr/server/superlink/fleet/vce/backend/raybackend.py +6 -6
- flwr/server/superlink/fleet/vce/vce_api.py +32 -13
- flwr/server/superlink/linkstate/__init__.py +2 -0
- flwr/server/superlink/linkstate/in_memory_linkstate.py +293 -208
- flwr/server/superlink/linkstate/linkstate.py +176 -64
- flwr/server/superlink/linkstate/linkstate_factory.py +24 -6
- flwr/server/superlink/linkstate/sql_linkstate.py +221 -0
- flwr/server/superlink/linkstate/sqlite_linkstate.py +743 -648
- flwr/server/superlink/linkstate/utils.py +11 -62
- flwr/server/superlink/serverappio/serverappio_grpc.py +1 -2
- flwr/server/superlink/serverappio/serverappio_servicer.py +28 -23
- flwr/server/superlink/simulation/simulationio_grpc.py +1 -2
- flwr/server/superlink/simulation/simulationio_servicer.py +19 -14
- flwr/server/superlink/utils.py +4 -6
- flwr/server/typing.py +1 -1
- flwr/server/utils/tensorboard.py +15 -8
- flwr/server/utils/validator.py +2 -3
- flwr/server/workflow/default_workflows.py +7 -6
- flwr/server/workflow/secure_aggregation/secagg_workflow.py +2 -4
- flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +13 -11
- flwr/serverapp/strategy/bulyan.py +16 -15
- flwr/serverapp/strategy/dp_adaptive_clipping.py +12 -11
- flwr/serverapp/strategy/dp_fixed_clipping.py +11 -14
- flwr/serverapp/strategy/fedadagrad.py +10 -11
- flwr/serverapp/strategy/fedadam.py +10 -11
- flwr/serverapp/strategy/fedavg.py +10 -11
- flwr/serverapp/strategy/fedavgm.py +17 -16
- flwr/serverapp/strategy/fedmedian.py +2 -2
- flwr/serverapp/strategy/fedopt.py +10 -11
- flwr/serverapp/strategy/fedprox.py +7 -8
- flwr/serverapp/strategy/fedtrimmedavg.py +9 -9
- flwr/serverapp/strategy/fedxgb_bagging.py +3 -3
- flwr/serverapp/strategy/fedxgb_cyclic.py +10 -10
- flwr/serverapp/strategy/fedyogi.py +9 -11
- flwr/serverapp/strategy/krum.py +7 -7
- flwr/serverapp/strategy/multikrum.py +9 -9
- flwr/serverapp/strategy/qfedavg.py +17 -16
- flwr/serverapp/strategy/strategy.py +6 -9
- flwr/serverapp/strategy/strategy_utils.py +7 -8
- flwr/simulation/app.py +46 -42
- flwr/simulation/legacy_app.py +12 -12
- flwr/simulation/ray_transport/ray_actor.py +11 -12
- flwr/simulation/ray_transport/ray_client_proxy.py +14 -19
- flwr/simulation/run_simulation.py +46 -44
- flwr/simulation/simulationio_connection.py +4 -4
- flwr/{common → supercore}/address.py +1 -37
- flwr/supercore/cli/flower_superexec.py +3 -4
- flwr/supercore/constant.py +69 -0
- flwr/supercore/corestate/corestate.py +24 -3
- flwr/supercore/corestate/in_memory_corestate.py +138 -0
- flwr/supercore/corestate/sql_corestate.py +153 -0
- flwr/supercore/corestate/sqlite_corestate.py +157 -0
- flwr/supercore/credential_store/__init__.py +33 -0
- flwr/supercore/credential_store/credential_store.py +34 -0
- flwr/supercore/credential_store/file_credential_store.py +76 -0
- flwr/{common → supercore}/date.py +0 -11
- flwr/supercore/ffs/disk_ffs.py +1 -2
- flwr/supercore/ffs/ffs.py +1 -2
- flwr/supercore/ffs/ffs_factory.py +1 -2
- flwr/{common → supercore}/heartbeat.py +20 -25
- flwr/supercore/object_store/in_memory_object_store.py +1 -6
- flwr/supercore/object_store/object_store.py +1 -2
- flwr/supercore/object_store/object_store_factory.py +27 -8
- flwr/supercore/object_store/sqlite_object_store.py +253 -0
- flwr/{cli/new/templates/app → supercore/primitives}/__init__.py +1 -1
- flwr/supercore/primitives/asymmetric.py +117 -0
- flwr/supercore/primitives/asymmetric_ed25519.py +175 -0
- flwr/supercore/sql_mixin.py +292 -0
- flwr/supercore/sqlite_mixin.py +156 -0
- flwr/{client/clientapp → supercore/state}/__init__.py +2 -2
- flwr/supercore/state/schema/README.md +125 -0
- flwr/{cli/new/templates → supercore/state/schema}/__init__.py +2 -2
- flwr/supercore/state/schema/corestate_tables.py +36 -0
- flwr/supercore/state/schema/linkstate_tables.py +152 -0
- flwr/supercore/state/schema/objectstore_tables.py +90 -0
- flwr/supercore/superexec/plugin/base_exec_plugin.py +1 -2
- flwr/supercore/superexec/plugin/exec_plugin.py +3 -3
- flwr/supercore/superexec/run_superexec.py +9 -13
- flwr/supercore/utils.py +224 -0
- flwr/superlink/artifact_provider/artifact_provider.py +1 -2
- flwr/superlink/auth_plugin/__init__.py +5 -2
- flwr/superlink/auth_plugin/auth_plugin.py +20 -19
- flwr/superlink/auth_plugin/noop_auth_plugin.py +84 -0
- flwr/superlink/federation/__init__.py +24 -0
- flwr/superlink/federation/federation_manager.py +64 -0
- flwr/superlink/federation/noop_federation_manager.py +71 -0
- flwr/superlink/servicer/control/{control_user_auth_interceptor.py → control_account_auth_interceptor.py} +41 -32
- flwr/superlink/servicer/control/control_event_log_interceptor.py +7 -7
- flwr/superlink/servicer/control/control_grpc.py +20 -17
- flwr/superlink/servicer/control/control_license_interceptor.py +3 -3
- flwr/superlink/servicer/control/control_servicer.py +328 -68
- flwr/supernode/cli/flower_supernode.py +74 -26
- flwr/supernode/nodestate/in_memory_nodestate.py +121 -49
- flwr/supernode/nodestate/nodestate.py +52 -8
- flwr/supernode/nodestate/nodestate_factory.py +7 -4
- flwr/supernode/runtime/run_clientapp.py +43 -24
- flwr/supernode/servicer/clientappio/clientappio_servicer.py +48 -10
- flwr/supernode/start_client_internal.py +185 -57
- {flwr_nightly-1.23.0.dev20250930.dist-info → flwr_nightly-1.26.0.dev20260121.dist-info}/METADATA +10 -11
- flwr_nightly-1.26.0.dev20260121.dist-info/RECORD +411 -0
- flwr/cli/new/templates/app/.gitignore.tpl +0 -163
- flwr/cli/new/templates/app/LICENSE.tpl +0 -202
- flwr/cli/new/templates/app/README.baseline.md.tpl +0 -127
- flwr/cli/new/templates/app/README.flowertune.md.tpl +0 -68
- flwr/cli/new/templates/app/README.md.tpl +0 -37
- flwr/cli/new/templates/app/code/__init__.baseline.py.tpl +0 -1
- flwr/cli/new/templates/app/code/__init__.py.tpl +0 -1
- flwr/cli/new/templates/app/code/__init__.pytorch_legacy_api.py.tpl +0 -1
- flwr/cli/new/templates/app/code/client.baseline.py.tpl +0 -75
- flwr/cli/new/templates/app/code/client.huggingface.py.tpl +0 -93
- flwr/cli/new/templates/app/code/client.jax.py.tpl +0 -71
- flwr/cli/new/templates/app/code/client.mlx.py.tpl +0 -102
- flwr/cli/new/templates/app/code/client.numpy.py.tpl +0 -46
- flwr/cli/new/templates/app/code/client.pytorch.py.tpl +0 -80
- flwr/cli/new/templates/app/code/client.pytorch_legacy_api.py.tpl +0 -55
- flwr/cli/new/templates/app/code/client.sklearn.py.tpl +0 -108
- flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +0 -82
- flwr/cli/new/templates/app/code/client.xgboost.py.tpl +0 -110
- flwr/cli/new/templates/app/code/dataset.baseline.py.tpl +0 -36
- flwr/cli/new/templates/app/code/flwr_tune/client_app.py.tpl +0 -92
- flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl +0 -87
- flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl +0 -56
- flwr/cli/new/templates/app/code/flwr_tune/server_app.py.tpl +0 -73
- flwr/cli/new/templates/app/code/flwr_tune/strategy.py.tpl +0 -78
- flwr/cli/new/templates/app/code/model.baseline.py.tpl +0 -66
- flwr/cli/new/templates/app/code/server.baseline.py.tpl +0 -43
- flwr/cli/new/templates/app/code/server.huggingface.py.tpl +0 -42
- flwr/cli/new/templates/app/code/server.jax.py.tpl +0 -39
- flwr/cli/new/templates/app/code/server.mlx.py.tpl +0 -41
- flwr/cli/new/templates/app/code/server.numpy.py.tpl +0 -38
- flwr/cli/new/templates/app/code/server.pytorch.py.tpl +0 -41
- flwr/cli/new/templates/app/code/server.pytorch_legacy_api.py.tpl +0 -31
- flwr/cli/new/templates/app/code/server.sklearn.py.tpl +0 -44
- flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +0 -38
- flwr/cli/new/templates/app/code/server.xgboost.py.tpl +0 -56
- flwr/cli/new/templates/app/code/strategy.baseline.py.tpl +0 -1
- flwr/cli/new/templates/app/code/task.huggingface.py.tpl +0 -98
- flwr/cli/new/templates/app/code/task.jax.py.tpl +0 -57
- flwr/cli/new/templates/app/code/task.mlx.py.tpl +0 -102
- flwr/cli/new/templates/app/code/task.numpy.py.tpl +0 -7
- flwr/cli/new/templates/app/code/task.pytorch.py.tpl +0 -98
- flwr/cli/new/templates/app/code/task.pytorch_legacy_api.py.tpl +0 -111
- flwr/cli/new/templates/app/code/task.sklearn.py.tpl +0 -67
- flwr/cli/new/templates/app/code/task.tensorflow.py.tpl +0 -52
- flwr/cli/new/templates/app/code/task.xgboost.py.tpl +0 -67
- flwr/cli/new/templates/app/code/utils.baseline.py.tpl +0 -1
- flwr/cli/new/templates/app/pyproject.baseline.toml.tpl +0 -146
- flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +0 -80
- flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +0 -65
- flwr/cli/new/templates/app/pyproject.jax.toml.tpl +0 -52
- flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +0 -56
- flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +0 -49
- flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +0 -53
- flwr/cli/new/templates/app/pyproject.pytorch_legacy_api.toml.tpl +0 -53
- flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +0 -52
- flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +0 -53
- flwr/cli/new/templates/app/pyproject.xgboost.toml.tpl +0 -61
- flwr/common/pyproject.py +0 -42
- flwr/supercore/object_store/utils.py +0 -43
- flwr_nightly-1.23.0.dev20250930.dist-info/RECORD +0 -429
- /flwr/{common → supercore}/version.py +0 -0
- {flwr_nightly-1.23.0.dev20250930.dist-info → flwr_nightly-1.26.0.dev20260121.dist-info}/WHEEL +0 -0
- {flwr_nightly-1.23.0.dev20250930.dist-info → flwr_nightly-1.26.0.dev20260121.dist-info}/entry_points.txt +0 -0
flwr/common/typing.py
CHANGED
|
@@ -15,13 +15,17 @@
|
|
|
15
15
|
"""Flower type definitions."""
|
|
16
16
|
|
|
17
17
|
|
|
18
|
+
from collections.abc import Callable
|
|
18
19
|
from dataclasses import dataclass
|
|
19
20
|
from enum import Enum
|
|
20
|
-
from typing import Any
|
|
21
|
+
from typing import Any
|
|
21
22
|
|
|
22
23
|
import numpy as np
|
|
23
24
|
import numpy.typing as npt
|
|
24
25
|
|
|
26
|
+
from flwr.app.user_config import UserConfig
|
|
27
|
+
from flwr.proto.node_pb2 import NodeInfo # pylint: disable=E0611
|
|
28
|
+
|
|
25
29
|
NDArray = npt.NDArray[Any]
|
|
26
30
|
NDArrayInt = npt.NDArray[np.int_]
|
|
27
31
|
NDArrayFloat = npt.NDArray[np.float64]
|
|
@@ -31,29 +35,29 @@ NDArrays = list[NDArray]
|
|
|
31
35
|
# ProtoBuf considers to be "Scalar Value Types", even though some of them arguably do
|
|
32
36
|
# not conform to other definitions of what a scalar is. Source:
|
|
33
37
|
# https://developers.google.com/protocol-buffers/docs/overview#scalar
|
|
34
|
-
Scalar =
|
|
35
|
-
Value =
|
|
36
|
-
bool
|
|
37
|
-
bytes
|
|
38
|
-
float
|
|
39
|
-
int
|
|
40
|
-
str
|
|
41
|
-
list[bool]
|
|
42
|
-
list[bytes]
|
|
43
|
-
list[float]
|
|
44
|
-
list[int]
|
|
45
|
-
list[str]
|
|
46
|
-
|
|
38
|
+
Scalar = bool | bytes | float | int | str
|
|
39
|
+
Value = (
|
|
40
|
+
bool
|
|
41
|
+
| bytes
|
|
42
|
+
| float
|
|
43
|
+
| int
|
|
44
|
+
| str
|
|
45
|
+
| list[bool]
|
|
46
|
+
| list[bytes]
|
|
47
|
+
| list[float]
|
|
48
|
+
| list[int]
|
|
49
|
+
| list[str]
|
|
50
|
+
)
|
|
51
|
+
|
|
47
52
|
|
|
48
53
|
# Value types for common.MetricRecord
|
|
49
|
-
MetricScalar =
|
|
50
|
-
MetricScalarList =
|
|
51
|
-
MetricRecordValues =
|
|
54
|
+
MetricScalar = int | float
|
|
55
|
+
MetricScalarList = list[int] | list[float]
|
|
56
|
+
MetricRecordValues = MetricScalar | MetricScalarList
|
|
52
57
|
# Value types for common.ConfigRecord
|
|
53
|
-
ConfigScalar =
|
|
54
|
-
ConfigScalarList =
|
|
55
|
-
ConfigRecordValues =
|
|
56
|
-
|
|
58
|
+
ConfigScalar = MetricScalar | str | bytes | bool
|
|
59
|
+
ConfigScalarList = MetricScalarList | list[str] | list[bytes] | list[bool]
|
|
60
|
+
ConfigRecordValues = ConfigScalar | ConfigScalarList
|
|
57
61
|
Metrics = dict[str, Scalar]
|
|
58
62
|
MetricsAggregationFn = Callable[[list[tuple[int, Metrics]]], Metrics]
|
|
59
63
|
|
|
@@ -61,8 +65,6 @@ Config = dict[str, Scalar]
|
|
|
61
65
|
Properties = dict[str, Scalar]
|
|
62
66
|
|
|
63
67
|
# Value type for user configs
|
|
64
|
-
UserConfigValue = Union[bool, float, int, str]
|
|
65
|
-
UserConfig = dict[str, UserConfigValue]
|
|
66
68
|
|
|
67
69
|
|
|
68
70
|
class Code(Enum):
|
|
@@ -177,7 +179,7 @@ class GetPropertiesRes:
|
|
|
177
179
|
class ReconnectIns:
|
|
178
180
|
"""ReconnectIns message from server to client."""
|
|
179
181
|
|
|
180
|
-
seconds:
|
|
182
|
+
seconds: int | None
|
|
181
183
|
|
|
182
184
|
|
|
183
185
|
@dataclass
|
|
@@ -191,20 +193,20 @@ class DisconnectRes:
|
|
|
191
193
|
class ServerMessage:
|
|
192
194
|
"""ServerMessage is a container used to hold one instruction message."""
|
|
193
195
|
|
|
194
|
-
get_properties_ins:
|
|
195
|
-
get_parameters_ins:
|
|
196
|
-
fit_ins:
|
|
197
|
-
evaluate_ins:
|
|
196
|
+
get_properties_ins: GetPropertiesIns | None = None
|
|
197
|
+
get_parameters_ins: GetParametersIns | None = None
|
|
198
|
+
fit_ins: FitIns | None = None
|
|
199
|
+
evaluate_ins: EvaluateIns | None = None
|
|
198
200
|
|
|
199
201
|
|
|
200
202
|
@dataclass
|
|
201
203
|
class ClientMessage:
|
|
202
204
|
"""ClientMessage is a container used to hold one result message."""
|
|
203
205
|
|
|
204
|
-
get_properties_res:
|
|
205
|
-
get_parameters_res:
|
|
206
|
-
fit_res:
|
|
207
|
-
evaluate_res:
|
|
206
|
+
get_properties_res: GetPropertiesRes | None = None
|
|
207
|
+
get_parameters_res: GetParametersRes | None = None
|
|
208
|
+
fit_res: FitRes | None = None
|
|
209
|
+
evaluate_res: EvaluateRes | None = None
|
|
208
210
|
|
|
209
211
|
|
|
210
212
|
@dataclass
|
|
@@ -231,6 +233,10 @@ class Run: # pylint: disable=too-many-instance-attributes
|
|
|
231
233
|
finished_at: str
|
|
232
234
|
status: RunStatus
|
|
233
235
|
flwr_aid: str
|
|
236
|
+
federation: str
|
|
237
|
+
bytes_sent: int
|
|
238
|
+
bytes_recv: int
|
|
239
|
+
clientapp_runtime: float
|
|
234
240
|
|
|
235
241
|
@classmethod
|
|
236
242
|
def create_empty(cls, run_id: int) -> "Run":
|
|
@@ -247,6 +253,10 @@ class Run: # pylint: disable=too-many-instance-attributes
|
|
|
247
253
|
finished_at="",
|
|
248
254
|
status=RunStatus(status="", sub_status="", details=""),
|
|
249
255
|
flwr_aid="",
|
|
256
|
+
federation="",
|
|
257
|
+
bytes_sent=0,
|
|
258
|
+
bytes_recv=0,
|
|
259
|
+
clientapp_runtime=0.0,
|
|
250
260
|
)
|
|
251
261
|
|
|
252
262
|
|
|
@@ -256,6 +266,7 @@ class Fab:
|
|
|
256
266
|
|
|
257
267
|
hash_str: str
|
|
258
268
|
content: bytes
|
|
269
|
+
verifications: dict[str, str]
|
|
259
270
|
|
|
260
271
|
|
|
261
272
|
class RunNotRunningException(BaseException):
|
|
@@ -270,12 +281,12 @@ class InvalidRunStatusException(BaseException):
|
|
|
270
281
|
self.message = message
|
|
271
282
|
|
|
272
283
|
|
|
273
|
-
# OIDC
|
|
284
|
+
# OIDC account authentication types
|
|
274
285
|
@dataclass
|
|
275
|
-
class
|
|
276
|
-
"""
|
|
286
|
+
class AccountAuthLoginDetails:
|
|
287
|
+
"""Account authentication login details."""
|
|
277
288
|
|
|
278
|
-
|
|
289
|
+
authn_type: str
|
|
279
290
|
device_code: str
|
|
280
291
|
verification_uri_complete: str
|
|
281
292
|
expires_in: int
|
|
@@ -283,8 +294,8 @@ class UserAuthLoginDetails:
|
|
|
283
294
|
|
|
284
295
|
|
|
285
296
|
@dataclass
|
|
286
|
-
class
|
|
287
|
-
"""
|
|
297
|
+
class AccountAuthCredentials:
|
|
298
|
+
"""Account authentication tokens."""
|
|
288
299
|
|
|
289
300
|
access_token: str
|
|
290
301
|
refresh_token: str
|
|
@@ -294,16 +305,16 @@ class UserAuthCredentials:
|
|
|
294
305
|
class AccountInfo:
|
|
295
306
|
"""User information for event log."""
|
|
296
307
|
|
|
297
|
-
flwr_aid:
|
|
298
|
-
account_name:
|
|
308
|
+
flwr_aid: str | None
|
|
309
|
+
account_name: str | None
|
|
299
310
|
|
|
300
311
|
|
|
301
312
|
@dataclass
|
|
302
313
|
class Actor:
|
|
303
314
|
"""Event log actor."""
|
|
304
315
|
|
|
305
|
-
actor_id:
|
|
306
|
-
description:
|
|
316
|
+
actor_id: str | None
|
|
317
|
+
description: str | None
|
|
307
318
|
ip_address: str
|
|
308
319
|
|
|
309
320
|
|
|
@@ -312,8 +323,8 @@ class Event:
|
|
|
312
323
|
"""Event log description."""
|
|
313
324
|
|
|
314
325
|
action: str
|
|
315
|
-
run_id:
|
|
316
|
-
fab_hash:
|
|
326
|
+
run_id: int | None
|
|
327
|
+
fab_hash: str | None
|
|
317
328
|
|
|
318
329
|
|
|
319
330
|
@dataclass
|
|
@@ -324,3 +335,13 @@ class LogEntry:
|
|
|
324
335
|
actor: Actor
|
|
325
336
|
event: Event
|
|
326
337
|
status: str
|
|
338
|
+
|
|
339
|
+
|
|
340
|
+
@dataclass
|
|
341
|
+
class Federation:
|
|
342
|
+
"""Federation details."""
|
|
343
|
+
|
|
344
|
+
name: str
|
|
345
|
+
member_aids: list[str]
|
|
346
|
+
nodes: list[NodeInfo]
|
|
347
|
+
runs: list[Run]
|
flwr/compat/client/app.py
CHANGED
|
@@ -16,41 +16,39 @@
|
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
import time
|
|
19
|
+
from collections.abc import Callable
|
|
19
20
|
from contextlib import AbstractContextManager
|
|
20
21
|
from logging import ERROR, INFO, WARN
|
|
21
22
|
from pathlib import Path
|
|
22
|
-
from typing import Callable, Optional, Union
|
|
23
23
|
|
|
24
24
|
from cryptography.hazmat.primitives.asymmetric import ec
|
|
25
25
|
from grpc import RpcError
|
|
26
26
|
|
|
27
27
|
from flwr.app.error import Error
|
|
28
|
+
from flwr.app.user_config import UserConfig
|
|
28
29
|
from flwr.cli.config_utils import get_fab_metadata
|
|
29
30
|
from flwr.cli.install import install_from_fab
|
|
30
31
|
from flwr.client.client import Client
|
|
31
|
-
from flwr.client.client_app import ClientApp, LoadClientAppError
|
|
32
32
|
from flwr.client.message_handler.message_handler import handle_control_message
|
|
33
33
|
from flwr.client.numpy_client import NumPyClient
|
|
34
34
|
from flwr.client.run_info_store import DeprecatedRunInfoStore
|
|
35
35
|
from flwr.client.typing import ClientFnExt
|
|
36
|
+
from flwr.clientapp.client_app import ClientApp, LoadClientAppError
|
|
36
37
|
from flwr.common import GRPC_MAX_MESSAGE_LENGTH, Context, EventType, Message, event
|
|
37
|
-
from flwr.common.
|
|
38
|
-
from flwr.common.constant import (
|
|
39
|
-
MAX_RETRY_DELAY,
|
|
40
|
-
TRANSPORT_TYPE_GRPC_BIDI,
|
|
41
|
-
TRANSPORT_TYPES,
|
|
42
|
-
ErrorCode,
|
|
43
|
-
)
|
|
38
|
+
from flwr.common.constant import MAX_RETRY_DELAY, ErrorCode
|
|
44
39
|
from flwr.common.exit import ExitCode, flwr_exit
|
|
45
40
|
from flwr.common.logger import log, warn_deprecated_feature
|
|
46
41
|
from flwr.common.retry_invoker import RetryInvoker, RetryState, exponential
|
|
47
|
-
from flwr.common.typing import Fab, Run, RunNotRunningException
|
|
42
|
+
from flwr.common.typing import Fab, Run, RunNotRunningException
|
|
48
43
|
from flwr.compat.client.grpc_client.connection import grpc_connection
|
|
44
|
+
from flwr.compat.common.constant import TRANSPORT_TYPE_GRPC_BIDI, TRANSPORT_TYPES_COMPAT
|
|
45
|
+
from flwr.supercore.address import parse_address
|
|
46
|
+
from flwr.supercore.object_store import ObjectStoreFactory
|
|
49
47
|
from flwr.supernode.nodestate import NodeStateFactory
|
|
50
48
|
|
|
51
49
|
|
|
52
50
|
def _check_actionable_client(
|
|
53
|
-
client:
|
|
51
|
+
client: Client | None, client_fn: ClientFnExt | None
|
|
54
52
|
) -> None:
|
|
55
53
|
if client_fn is None and client is None:
|
|
56
54
|
raise ValueError(
|
|
@@ -71,17 +69,17 @@ def _check_actionable_client(
|
|
|
71
69
|
def start_client(
|
|
72
70
|
*,
|
|
73
71
|
server_address: str,
|
|
74
|
-
client_fn:
|
|
75
|
-
client:
|
|
72
|
+
client_fn: ClientFnExt | None = None,
|
|
73
|
+
client: Client | None = None,
|
|
76
74
|
grpc_max_message_length: int = GRPC_MAX_MESSAGE_LENGTH,
|
|
77
|
-
root_certificates:
|
|
78
|
-
insecure:
|
|
79
|
-
transport:
|
|
80
|
-
authentication_keys:
|
|
81
|
-
tuple[ec.EllipticCurvePrivateKey, ec.EllipticCurvePublicKey]
|
|
82
|
-
|
|
83
|
-
max_retries:
|
|
84
|
-
max_wait_time:
|
|
75
|
+
root_certificates: bytes | str | None = None,
|
|
76
|
+
insecure: bool | None = None,
|
|
77
|
+
transport: str | None = None,
|
|
78
|
+
authentication_keys: (
|
|
79
|
+
tuple[ec.EllipticCurvePrivateKey, ec.EllipticCurvePublicKey] | None
|
|
80
|
+
) = None,
|
|
81
|
+
max_retries: int | None = None,
|
|
82
|
+
max_wait_time: float | None = None,
|
|
85
83
|
) -> None:
|
|
86
84
|
"""Start a Flower client node which connects to a Flower server.
|
|
87
85
|
|
|
@@ -205,19 +203,19 @@ def start_client_internal(
|
|
|
205
203
|
*,
|
|
206
204
|
server_address: str,
|
|
207
205
|
node_config: UserConfig,
|
|
208
|
-
load_client_app_fn:
|
|
209
|
-
client_fn:
|
|
210
|
-
client:
|
|
206
|
+
load_client_app_fn: Callable[[str, str, str], ClientApp] | None = None,
|
|
207
|
+
client_fn: ClientFnExt | None = None,
|
|
208
|
+
client: Client | None = None,
|
|
211
209
|
grpc_max_message_length: int = GRPC_MAX_MESSAGE_LENGTH,
|
|
212
|
-
root_certificates:
|
|
213
|
-
insecure:
|
|
214
|
-
transport:
|
|
215
|
-
authentication_keys:
|
|
216
|
-
tuple[ec.EllipticCurvePrivateKey, ec.EllipticCurvePublicKey]
|
|
217
|
-
|
|
218
|
-
max_retries:
|
|
219
|
-
max_wait_time:
|
|
220
|
-
flwr_path:
|
|
210
|
+
root_certificates: bytes | str | None = None,
|
|
211
|
+
insecure: bool | None = None,
|
|
212
|
+
transport: str | None = None,
|
|
213
|
+
authentication_keys: (
|
|
214
|
+
tuple[ec.EllipticCurvePrivateKey, ec.EllipticCurvePublicKey] | None
|
|
215
|
+
) = None,
|
|
216
|
+
max_retries: int | None = None,
|
|
217
|
+
max_wait_time: float | None = None,
|
|
218
|
+
flwr_path: Path | None = None,
|
|
221
219
|
) -> None:
|
|
222
220
|
"""Start a Flower client node which connects to a Flower server.
|
|
223
221
|
|
|
@@ -342,8 +340,8 @@ def start_client_internal(
|
|
|
342
340
|
)
|
|
343
341
|
|
|
344
342
|
# DeprecatedRunInfoStore gets initialized when the first connection is established
|
|
345
|
-
run_info_store:
|
|
346
|
-
state_factory = NodeStateFactory()
|
|
343
|
+
run_info_store: DeprecatedRunInfoStore | None = None
|
|
344
|
+
state_factory = NodeStateFactory(objectstore_factory=ObjectStoreFactory())
|
|
347
345
|
state = state_factory.state()
|
|
348
346
|
|
|
349
347
|
runs: dict[int, Run] = {}
|
|
@@ -537,9 +535,9 @@ def start_numpy_client(
|
|
|
537
535
|
server_address: str,
|
|
538
536
|
client: NumPyClient,
|
|
539
537
|
grpc_max_message_length: int = GRPC_MAX_MESSAGE_LENGTH,
|
|
540
|
-
root_certificates:
|
|
541
|
-
insecure:
|
|
542
|
-
transport:
|
|
538
|
+
root_certificates: bytes | None = None,
|
|
539
|
+
insecure: bool | None = None,
|
|
540
|
+
transport: str | None = None,
|
|
543
541
|
) -> None:
|
|
544
542
|
"""Start a Flower NumPyClient which connects to a gRPC server.
|
|
545
543
|
|
|
@@ -631,24 +629,24 @@ def start_numpy_client(
|
|
|
631
629
|
)
|
|
632
630
|
|
|
633
631
|
|
|
634
|
-
def _init_connection(transport:
|
|
632
|
+
def _init_connection(transport: str | None, server_address: str) -> tuple[
|
|
635
633
|
Callable[
|
|
636
634
|
[
|
|
637
635
|
str,
|
|
638
636
|
bool,
|
|
639
637
|
RetryInvoker,
|
|
640
638
|
int,
|
|
641
|
-
|
|
642
|
-
|
|
639
|
+
bytes | str | None,
|
|
640
|
+
tuple[ec.EllipticCurvePrivateKey, ec.EllipticCurvePublicKey] | None,
|
|
643
641
|
],
|
|
644
642
|
AbstractContextManager[
|
|
645
643
|
tuple[
|
|
646
|
-
Callable[[],
|
|
644
|
+
Callable[[], Message | None],
|
|
647
645
|
Callable[[Message], None],
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
646
|
+
Callable[[], int | None] | None,
|
|
647
|
+
Callable[[], None] | None,
|
|
648
|
+
Callable[[int], Run] | None,
|
|
649
|
+
Callable[[str, int], Fab] | None,
|
|
652
650
|
]
|
|
653
651
|
],
|
|
654
652
|
],
|
|
@@ -674,7 +672,7 @@ def _init_connection(transport: Optional[str], server_address: str) -> tuple[
|
|
|
674
672
|
connection, error_type = grpc_connection, RpcError
|
|
675
673
|
else:
|
|
676
674
|
raise ValueError(
|
|
677
|
-
f"Unknown transport type: {transport} (possible: {
|
|
675
|
+
f"Unknown transport type: {transport} (possible: {TRANSPORT_TYPES_COMPAT})"
|
|
678
676
|
)
|
|
679
677
|
|
|
680
678
|
return connection, address, error_type
|
|
@@ -16,15 +16,16 @@
|
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
import uuid
|
|
19
|
-
from collections.abc import Iterator
|
|
19
|
+
from collections.abc import Callable, Iterator
|
|
20
20
|
from contextlib import contextmanager
|
|
21
21
|
from logging import DEBUG, ERROR
|
|
22
22
|
from pathlib import Path
|
|
23
23
|
from queue import Queue
|
|
24
|
-
from typing import
|
|
24
|
+
from typing import cast
|
|
25
25
|
|
|
26
26
|
from cryptography.hazmat.primitives.asymmetric import ec
|
|
27
27
|
|
|
28
|
+
from flwr.app.message_type import MessageType
|
|
28
29
|
from flwr.common import (
|
|
29
30
|
DEFAULT_TTL,
|
|
30
31
|
GRPC_MAX_MESSAGE_LENGTH,
|
|
@@ -36,7 +37,7 @@ from flwr.common import (
|
|
|
36
37
|
)
|
|
37
38
|
from flwr.common import recorddict_compat as compat
|
|
38
39
|
from flwr.common import serde
|
|
39
|
-
from flwr.common.constant import
|
|
40
|
+
from flwr.common.constant import MessageTypeLegacy
|
|
40
41
|
from flwr.common.grpc import create_channel, on_channel_state_change
|
|
41
42
|
from flwr.common.logger import log
|
|
42
43
|
from flwr.common.message import make_message
|
|
@@ -56,18 +57,18 @@ def grpc_connection( # pylint: disable=R0913,R0915,too-many-positional-argument
|
|
|
56
57
|
insecure: bool,
|
|
57
58
|
retry_invoker: RetryInvoker, # pylint: disable=unused-argument
|
|
58
59
|
max_message_length: int = GRPC_MAX_MESSAGE_LENGTH,
|
|
59
|
-
root_certificates:
|
|
60
|
-
authentication_keys:
|
|
61
|
-
tuple[ec.EllipticCurvePrivateKey, ec.EllipticCurvePublicKey]
|
|
62
|
-
|
|
60
|
+
root_certificates: bytes | str | None = None,
|
|
61
|
+
authentication_keys: (
|
|
62
|
+
tuple[ec.EllipticCurvePrivateKey, ec.EllipticCurvePublicKey] | None
|
|
63
|
+
) = None,
|
|
63
64
|
) -> Iterator[
|
|
64
65
|
tuple[
|
|
65
|
-
Callable[[],
|
|
66
|
+
Callable[[], Message | None],
|
|
66
67
|
Callable[[Message], None],
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
68
|
+
Callable[[], int | None] | None,
|
|
69
|
+
Callable[[], None] | None,
|
|
70
|
+
Callable[[int], Run] | None,
|
|
71
|
+
Callable[[str, int], Fab] | None,
|
|
71
72
|
]
|
|
72
73
|
]:
|
|
73
74
|
"""Establish a gRPC connection to a gRPC server.
|
|
@@ -96,7 +97,7 @@ def grpc_connection( # pylint: disable=R0913,R0915,too-many-positional-argument
|
|
|
96
97
|
If provided, a secure connection using the certificates will be
|
|
97
98
|
established to an SSL-enabled Flower server.
|
|
98
99
|
authentication_keys : Optional[Tuple[PrivateKey, PublicKey]] (default: None)
|
|
99
|
-
|
|
100
|
+
SuperNode authentication is not supported for this transport type.
|
|
100
101
|
|
|
101
102
|
Returns
|
|
102
103
|
-------
|
|
@@ -120,7 +121,7 @@ def grpc_connection( # pylint: disable=R0913,R0915,too-many-positional-argument
|
|
|
120
121
|
if isinstance(root_certificates, str):
|
|
121
122
|
root_certificates = Path(root_certificates).read_bytes()
|
|
122
123
|
if authentication_keys is not None:
|
|
123
|
-
log(ERROR, "
|
|
124
|
+
log(ERROR, "SuperNode authentication is not supported for this transport type.")
|
|
124
125
|
|
|
125
126
|
channel = create_channel(
|
|
126
127
|
server_address=server_address,
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Copyright 2025 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 constants."""
|
|
16
|
+
|
|
17
|
+
from flwr.common.constant import (
|
|
18
|
+
TRANSPORT_TYPE_GRPC_RERE,
|
|
19
|
+
TRANSPORT_TYPE_REST,
|
|
20
|
+
TRANSPORT_TYPE_VCE,
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
TRANSPORT_TYPE_GRPC_BIDI = "grpc-bidi"
|
|
24
|
+
TRANSPORT_TYPES_COMPAT = [
|
|
25
|
+
TRANSPORT_TYPE_GRPC_BIDI,
|
|
26
|
+
TRANSPORT_TYPE_GRPC_RERE,
|
|
27
|
+
TRANSPORT_TYPE_REST,
|
|
28
|
+
TRANSPORT_TYPE_VCE,
|
|
29
|
+
]
|
flwr/compat/server/app.py
CHANGED
|
@@ -17,10 +17,8 @@
|
|
|
17
17
|
|
|
18
18
|
import sys
|
|
19
19
|
from logging import INFO
|
|
20
|
-
from typing import Optional
|
|
21
20
|
|
|
22
21
|
from flwr.common import GRPC_MAX_MESSAGE_LENGTH, EventType, event
|
|
23
|
-
from flwr.common.address import parse_address
|
|
24
22
|
from flwr.common.constant import FLEET_API_GRPC_BIDI_DEFAULT_ADDRESS
|
|
25
23
|
from flwr.common.exit import register_signal_handlers
|
|
26
24
|
from flwr.common.logger import log, warn_deprecated_feature
|
|
@@ -30,17 +28,18 @@ from flwr.server.server import Server, init_defaults, run_fl
|
|
|
30
28
|
from flwr.server.server_config import ServerConfig
|
|
31
29
|
from flwr.server.strategy import Strategy
|
|
32
30
|
from flwr.server.superlink.fleet.grpc_bidi.grpc_server import start_grpc_server
|
|
31
|
+
from flwr.supercore.address import parse_address
|
|
33
32
|
|
|
34
33
|
|
|
35
34
|
def start_server( # pylint: disable=too-many-arguments,too-many-locals
|
|
36
35
|
*,
|
|
37
36
|
server_address: str = FLEET_API_GRPC_BIDI_DEFAULT_ADDRESS,
|
|
38
|
-
server:
|
|
39
|
-
config:
|
|
40
|
-
strategy:
|
|
41
|
-
client_manager:
|
|
37
|
+
server: Server | None = None,
|
|
38
|
+
config: ServerConfig | None = None,
|
|
39
|
+
strategy: Strategy | None = None,
|
|
40
|
+
client_manager: ClientManager | None = None,
|
|
42
41
|
grpc_max_message_length: int = GRPC_MAX_MESSAGE_LENGTH,
|
|
43
|
-
certificates:
|
|
42
|
+
certificates: tuple[bytes, bytes, bytes] | None = None,
|
|
44
43
|
) -> History:
|
|
45
44
|
"""Start a Flower server using the gRPC transport layer.
|
|
46
45
|
|
flwr/proto/appio_pb2.py
CHANGED
|
@@ -1,12 +1,22 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*-
|
|
2
2
|
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
|
3
|
+
# NO CHECKED-IN PROTOBUF GENCODE
|
|
3
4
|
# source: flwr/proto/appio.proto
|
|
4
|
-
# Protobuf Python Version:
|
|
5
|
+
# Protobuf Python Version: 5.29.0
|
|
5
6
|
"""Generated protocol buffer code."""
|
|
6
7
|
from google.protobuf import descriptor as _descriptor
|
|
7
8
|
from google.protobuf import descriptor_pool as _descriptor_pool
|
|
9
|
+
from google.protobuf import runtime_version as _runtime_version
|
|
8
10
|
from google.protobuf import symbol_database as _symbol_database
|
|
9
11
|
from google.protobuf.internal import builder as _builder
|
|
12
|
+
_runtime_version.ValidateProtobufRuntimeVersion(
|
|
13
|
+
_runtime_version.Domain.PUBLIC,
|
|
14
|
+
5,
|
|
15
|
+
29,
|
|
16
|
+
0,
|
|
17
|
+
'',
|
|
18
|
+
'flwr/proto/appio.proto'
|
|
19
|
+
)
|
|
10
20
|
# @@protoc_insertion_point(imports)
|
|
11
21
|
|
|
12
22
|
_sym_db = _symbol_database.Default()
|
|
@@ -22,8 +32,8 @@ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x16\x66lwr/proto/
|
|
|
22
32
|
_globals = globals()
|
|
23
33
|
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
|
24
34
|
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'flwr.proto.appio_pb2', _globals)
|
|
25
|
-
if _descriptor._USE_C_DESCRIPTORS
|
|
26
|
-
DESCRIPTOR.
|
|
35
|
+
if not _descriptor._USE_C_DESCRIPTORS:
|
|
36
|
+
DESCRIPTOR._loaded_options = None
|
|
27
37
|
_globals['_LISTAPPSTOLAUNCHREQUEST']._serialized_start=108
|
|
28
38
|
_globals['_LISTAPPSTOLAUNCHREQUEST']._serialized_end=133
|
|
29
39
|
_globals['_LISTAPPSTOLAUNCHRESPONSE']._serialized_start=135
|