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.
Files changed (375) hide show
  1. flwr/__init__.py +17 -6
  2. flwr/app/__init__.py +4 -1
  3. flwr/app/error.py +2 -2
  4. flwr/app/exception.py +3 -3
  5. flwr/app/message_type.py +29 -0
  6. flwr/app/metadata.py +5 -2
  7. flwr/app/user_config.py +19 -0
  8. flwr/cli/app.py +62 -9
  9. flwr/cli/{new/templates/app/code → app_cmd}/__init__.py +9 -1
  10. flwr/cli/app_cmd/publish.py +285 -0
  11. flwr/cli/app_cmd/review.py +262 -0
  12. flwr/cli/auth_plugin/__init__.py +13 -6
  13. flwr/cli/auth_plugin/auth_plugin.py +26 -15
  14. flwr/cli/auth_plugin/noop_auth_plugin.py +101 -0
  15. flwr/cli/auth_plugin/oidc_cli_plugin.py +52 -32
  16. flwr/cli/build.py +166 -53
  17. flwr/cli/{cli_user_auth_interceptor.py → cli_account_auth_interceptor.py} +27 -10
  18. flwr/cli/config/__init__.py +21 -0
  19. flwr/cli/config/ls.py +104 -0
  20. flwr/cli/config_migration.py +300 -0
  21. flwr/cli/config_utils.py +154 -13
  22. flwr/cli/constant.py +67 -0
  23. flwr/cli/{new/templates/app/code/flwr_tune → federation}/__init__.py +8 -1
  24. flwr/cli/federation/ls.py +361 -0
  25. flwr/cli/flower_config.py +447 -0
  26. flwr/cli/install.py +91 -13
  27. flwr/cli/log.py +65 -36
  28. flwr/cli/login/login.py +41 -27
  29. flwr/cli/ls.py +232 -158
  30. flwr/cli/new/new.py +188 -244
  31. flwr/cli/pull.py +25 -34
  32. flwr/cli/run/run.py +106 -74
  33. flwr/cli/run_utils.py +148 -0
  34. flwr/cli/stop.py +46 -37
  35. flwr/cli/supernode/__init__.py +25 -0
  36. flwr/cli/supernode/ls.py +273 -0
  37. flwr/cli/supernode/register.py +190 -0
  38. flwr/cli/supernode/unregister.py +140 -0
  39. flwr/cli/typing.py +211 -0
  40. flwr/cli/utils.py +428 -80
  41. flwr/client/__init__.py +2 -1
  42. flwr/client/dpfedavg_numpy_client.py +4 -1
  43. flwr/client/grpc_adapter_client/connection.py +14 -17
  44. flwr/client/grpc_rere_client/connection.py +73 -43
  45. flwr/client/grpc_rere_client/grpc_adapter.py +35 -15
  46. flwr/client/grpc_rere_client/{client_interceptor.py → node_auth_client_interceptor.py} +5 -7
  47. flwr/client/message_handler/message_handler.py +4 -3
  48. flwr/client/mod/centraldp_mods.py +1 -1
  49. flwr/client/mod/localdp_mod.py +1 -1
  50. flwr/client/mod/secure_aggregation/secaggplus_mod.py +11 -9
  51. flwr/client/numpy_client.py +1 -1
  52. flwr/client/rest_client/connection.py +99 -54
  53. flwr/client/run_info_store.py +6 -6
  54. flwr/client/typing.py +1 -1
  55. flwr/clientapp/__init__.py +1 -2
  56. flwr/{client → clientapp}/client_app.py +11 -11
  57. flwr/clientapp/mod/centraldp_mods.py +16 -17
  58. flwr/clientapp/mod/localdp_mod.py +8 -9
  59. flwr/clientapp/typing.py +1 -1
  60. flwr/{client/clientapp → clientapp}/utils.py +4 -4
  61. flwr/common/__init__.py +3 -2
  62. flwr/common/args.py +3 -4
  63. flwr/common/config.py +15 -17
  64. flwr/common/constant.py +56 -28
  65. flwr/common/context.py +2 -1
  66. flwr/common/differential_privacy.py +3 -4
  67. flwr/common/event_log_plugin/event_log_plugin.py +3 -4
  68. flwr/common/exit/exit.py +16 -3
  69. flwr/common/exit/exit_code.py +39 -10
  70. flwr/common/exit/exit_handler.py +6 -2
  71. flwr/common/exit/signal_handler.py +5 -5
  72. flwr/common/grpc.py +8 -7
  73. flwr/common/inflatable_protobuf_utils.py +1 -1
  74. flwr/common/inflatable_utils.py +48 -31
  75. flwr/common/logger.py +19 -19
  76. flwr/common/message.py +5 -5
  77. flwr/common/object_ref.py +7 -7
  78. flwr/common/record/array.py +6 -6
  79. flwr/common/record/arrayrecord.py +18 -21
  80. flwr/common/record/configrecord.py +3 -3
  81. flwr/common/record/recorddict.py +5 -5
  82. flwr/common/record/typeddict.py +9 -2
  83. flwr/common/recorddict_compat.py +7 -10
  84. flwr/common/retry_invoker.py +20 -20
  85. flwr/common/secure_aggregation/crypto/symmetric_encryption.py +1 -89
  86. flwr/common/secure_aggregation/ndarrays_arithmetic.py +8 -5
  87. flwr/common/serde.py +22 -11
  88. flwr/common/serde_utils.py +2 -2
  89. flwr/common/telemetry.py +10 -6
  90. flwr/common/typing.py +65 -44
  91. flwr/compat/client/app.py +45 -47
  92. flwr/compat/client/grpc_client/connection.py +15 -14
  93. flwr/compat/common/constant.py +29 -0
  94. flwr/compat/server/app.py +6 -7
  95. flwr/proto/appio_pb2.py +13 -3
  96. flwr/proto/appio_pb2.pyi +134 -65
  97. flwr/proto/appio_pb2_grpc.py +20 -0
  98. flwr/proto/appio_pb2_grpc.pyi +27 -0
  99. flwr/proto/clientappio_pb2.py +17 -7
  100. flwr/proto/clientappio_pb2.pyi +15 -0
  101. flwr/proto/clientappio_pb2_grpc.py +206 -40
  102. flwr/proto/clientappio_pb2_grpc.pyi +168 -53
  103. flwr/proto/control_pb2.py +72 -40
  104. flwr/proto/control_pb2.pyi +319 -87
  105. flwr/proto/control_pb2_grpc.py +339 -28
  106. flwr/proto/control_pb2_grpc.pyi +209 -37
  107. flwr/proto/error_pb2.py +13 -3
  108. flwr/proto/error_pb2.pyi +24 -6
  109. flwr/proto/error_pb2_grpc.py +20 -0
  110. flwr/proto/error_pb2_grpc.pyi +27 -0
  111. flwr/proto/fab_pb2.py +24 -10
  112. flwr/proto/fab_pb2.pyi +68 -20
  113. flwr/proto/fab_pb2_grpc.py +20 -0
  114. flwr/proto/fab_pb2_grpc.pyi +27 -0
  115. flwr/proto/federation_pb2.py +38 -0
  116. flwr/proto/federation_pb2.pyi +56 -0
  117. flwr/proto/federation_pb2_grpc.py +24 -0
  118. flwr/proto/federation_pb2_grpc.pyi +31 -0
  119. flwr/proto/fleet_pb2.py +45 -27
  120. flwr/proto/fleet_pb2.pyi +190 -70
  121. flwr/proto/fleet_pb2_grpc.py +277 -66
  122. flwr/proto/fleet_pb2_grpc.pyi +201 -55
  123. flwr/proto/grpcadapter_pb2.py +14 -4
  124. flwr/proto/grpcadapter_pb2.pyi +38 -16
  125. flwr/proto/grpcadapter_pb2_grpc.py +35 -4
  126. flwr/proto/grpcadapter_pb2_grpc.pyi +38 -7
  127. flwr/proto/heartbeat_pb2.py +17 -7
  128. flwr/proto/heartbeat_pb2.pyi +51 -22
  129. flwr/proto/heartbeat_pb2_grpc.py +20 -0
  130. flwr/proto/heartbeat_pb2_grpc.pyi +27 -0
  131. flwr/proto/log_pb2.py +13 -3
  132. flwr/proto/log_pb2.pyi +34 -11
  133. flwr/proto/log_pb2_grpc.py +20 -0
  134. flwr/proto/log_pb2_grpc.pyi +27 -0
  135. flwr/proto/message_pb2.py +15 -5
  136. flwr/proto/message_pb2.pyi +154 -86
  137. flwr/proto/message_pb2_grpc.py +20 -0
  138. flwr/proto/message_pb2_grpc.pyi +27 -0
  139. flwr/proto/node_pb2.py +16 -4
  140. flwr/proto/node_pb2.pyi +77 -4
  141. flwr/proto/node_pb2_grpc.py +20 -0
  142. flwr/proto/node_pb2_grpc.pyi +27 -0
  143. flwr/proto/recorddict_pb2.py +13 -3
  144. flwr/proto/recorddict_pb2.pyi +184 -107
  145. flwr/proto/recorddict_pb2_grpc.py +20 -0
  146. flwr/proto/recorddict_pb2_grpc.pyi +27 -0
  147. flwr/proto/run_pb2.py +40 -31
  148. flwr/proto/run_pb2.pyi +158 -84
  149. flwr/proto/run_pb2_grpc.py +20 -0
  150. flwr/proto/run_pb2_grpc.pyi +27 -0
  151. flwr/proto/serverappio_pb2.py +13 -3
  152. flwr/proto/serverappio_pb2.pyi +32 -8
  153. flwr/proto/serverappio_pb2_grpc.py +246 -65
  154. flwr/proto/serverappio_pb2_grpc.pyi +221 -85
  155. flwr/proto/simulationio_pb2.py +16 -8
  156. flwr/proto/simulationio_pb2.pyi +15 -0
  157. flwr/proto/simulationio_pb2_grpc.py +162 -41
  158. flwr/proto/simulationio_pb2_grpc.pyi +149 -55
  159. flwr/proto/transport_pb2.py +20 -10
  160. flwr/proto/transport_pb2.pyi +249 -160
  161. flwr/proto/transport_pb2_grpc.py +35 -4
  162. flwr/proto/transport_pb2_grpc.pyi +38 -8
  163. flwr/server/app.py +175 -128
  164. flwr/server/client_manager.py +4 -5
  165. flwr/server/client_proxy.py +10 -11
  166. flwr/server/compat/app.py +4 -5
  167. flwr/server/compat/app_utils.py +2 -1
  168. flwr/server/compat/grid_client_proxy.py +12 -13
  169. flwr/server/compat/legacy_context.py +3 -4
  170. flwr/server/fleet_event_log_interceptor.py +2 -1
  171. flwr/server/grid/grid.py +2 -3
  172. flwr/server/grid/grpc_grid.py +12 -10
  173. flwr/server/grid/inmemory_grid.py +4 -4
  174. flwr/server/run_serverapp.py +2 -3
  175. flwr/server/server.py +34 -39
  176. flwr/server/server_app.py +7 -8
  177. flwr/server/server_config.py +1 -2
  178. flwr/server/serverapp/app.py +34 -28
  179. flwr/server/serverapp_components.py +4 -5
  180. flwr/server/strategy/aggregate.py +9 -8
  181. flwr/server/strategy/bulyan.py +13 -11
  182. flwr/server/strategy/dp_adaptive_clipping.py +16 -20
  183. flwr/server/strategy/dp_fixed_clipping.py +12 -17
  184. flwr/server/strategy/dpfedavg_adaptive.py +3 -4
  185. flwr/server/strategy/dpfedavg_fixed.py +6 -10
  186. flwr/server/strategy/fault_tolerant_fedavg.py +14 -13
  187. flwr/server/strategy/fedadagrad.py +18 -14
  188. flwr/server/strategy/fedadam.py +16 -14
  189. flwr/server/strategy/fedavg.py +16 -17
  190. flwr/server/strategy/fedavg_android.py +15 -15
  191. flwr/server/strategy/fedavgm.py +21 -18
  192. flwr/server/strategy/fedmedian.py +2 -3
  193. flwr/server/strategy/fedopt.py +11 -10
  194. flwr/server/strategy/fedprox.py +10 -9
  195. flwr/server/strategy/fedtrimmedavg.py +12 -11
  196. flwr/server/strategy/fedxgb_bagging.py +13 -11
  197. flwr/server/strategy/fedxgb_cyclic.py +6 -6
  198. flwr/server/strategy/fedxgb_nn_avg.py +4 -4
  199. flwr/server/strategy/fedyogi.py +16 -14
  200. flwr/server/strategy/krum.py +12 -11
  201. flwr/server/strategy/qfedavg.py +16 -15
  202. flwr/server/strategy/strategy.py +6 -9
  203. flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +20 -9
  204. flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +1 -2
  205. flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +3 -4
  206. flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +10 -12
  207. flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +1 -3
  208. flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +136 -42
  209. flwr/server/superlink/fleet/grpc_rere/{server_interceptor.py → node_auth_server_interceptor.py} +28 -50
  210. flwr/server/superlink/fleet/message_handler/message_handler.py +141 -51
  211. flwr/server/superlink/fleet/rest_rere/rest_api.py +54 -33
  212. flwr/server/superlink/fleet/vce/backend/backend.py +2 -2
  213. flwr/server/superlink/fleet/vce/backend/raybackend.py +6 -6
  214. flwr/server/superlink/fleet/vce/vce_api.py +32 -13
  215. flwr/server/superlink/linkstate/__init__.py +2 -0
  216. flwr/server/superlink/linkstate/in_memory_linkstate.py +293 -208
  217. flwr/server/superlink/linkstate/linkstate.py +176 -64
  218. flwr/server/superlink/linkstate/linkstate_factory.py +24 -6
  219. flwr/server/superlink/linkstate/sql_linkstate.py +221 -0
  220. flwr/server/superlink/linkstate/sqlite_linkstate.py +743 -648
  221. flwr/server/superlink/linkstate/utils.py +11 -62
  222. flwr/server/superlink/serverappio/serverappio_grpc.py +1 -2
  223. flwr/server/superlink/serverappio/serverappio_servicer.py +28 -23
  224. flwr/server/superlink/simulation/simulationio_grpc.py +1 -2
  225. flwr/server/superlink/simulation/simulationio_servicer.py +19 -14
  226. flwr/server/superlink/utils.py +4 -6
  227. flwr/server/typing.py +1 -1
  228. flwr/server/utils/tensorboard.py +15 -8
  229. flwr/server/utils/validator.py +2 -3
  230. flwr/server/workflow/default_workflows.py +7 -6
  231. flwr/server/workflow/secure_aggregation/secagg_workflow.py +2 -4
  232. flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +13 -11
  233. flwr/serverapp/strategy/bulyan.py +16 -15
  234. flwr/serverapp/strategy/dp_adaptive_clipping.py +12 -11
  235. flwr/serverapp/strategy/dp_fixed_clipping.py +11 -14
  236. flwr/serverapp/strategy/fedadagrad.py +10 -11
  237. flwr/serverapp/strategy/fedadam.py +10 -11
  238. flwr/serverapp/strategy/fedavg.py +10 -11
  239. flwr/serverapp/strategy/fedavgm.py +17 -16
  240. flwr/serverapp/strategy/fedmedian.py +2 -2
  241. flwr/serverapp/strategy/fedopt.py +10 -11
  242. flwr/serverapp/strategy/fedprox.py +7 -8
  243. flwr/serverapp/strategy/fedtrimmedavg.py +9 -9
  244. flwr/serverapp/strategy/fedxgb_bagging.py +3 -3
  245. flwr/serverapp/strategy/fedxgb_cyclic.py +10 -10
  246. flwr/serverapp/strategy/fedyogi.py +9 -11
  247. flwr/serverapp/strategy/krum.py +7 -7
  248. flwr/serverapp/strategy/multikrum.py +9 -9
  249. flwr/serverapp/strategy/qfedavg.py +17 -16
  250. flwr/serverapp/strategy/strategy.py +6 -9
  251. flwr/serverapp/strategy/strategy_utils.py +7 -8
  252. flwr/simulation/app.py +46 -42
  253. flwr/simulation/legacy_app.py +12 -12
  254. flwr/simulation/ray_transport/ray_actor.py +11 -12
  255. flwr/simulation/ray_transport/ray_client_proxy.py +14 -19
  256. flwr/simulation/run_simulation.py +46 -44
  257. flwr/simulation/simulationio_connection.py +4 -4
  258. flwr/{common → supercore}/address.py +1 -37
  259. flwr/supercore/cli/flower_superexec.py +3 -4
  260. flwr/supercore/constant.py +69 -0
  261. flwr/supercore/corestate/corestate.py +24 -3
  262. flwr/supercore/corestate/in_memory_corestate.py +138 -0
  263. flwr/supercore/corestate/sql_corestate.py +153 -0
  264. flwr/supercore/corestate/sqlite_corestate.py +157 -0
  265. flwr/supercore/credential_store/__init__.py +33 -0
  266. flwr/supercore/credential_store/credential_store.py +34 -0
  267. flwr/supercore/credential_store/file_credential_store.py +76 -0
  268. flwr/{common → supercore}/date.py +0 -11
  269. flwr/supercore/ffs/disk_ffs.py +1 -2
  270. flwr/supercore/ffs/ffs.py +1 -2
  271. flwr/supercore/ffs/ffs_factory.py +1 -2
  272. flwr/{common → supercore}/heartbeat.py +20 -25
  273. flwr/supercore/object_store/in_memory_object_store.py +1 -6
  274. flwr/supercore/object_store/object_store.py +1 -2
  275. flwr/supercore/object_store/object_store_factory.py +27 -8
  276. flwr/supercore/object_store/sqlite_object_store.py +253 -0
  277. flwr/{cli/new/templates/app → supercore/primitives}/__init__.py +1 -1
  278. flwr/supercore/primitives/asymmetric.py +117 -0
  279. flwr/supercore/primitives/asymmetric_ed25519.py +175 -0
  280. flwr/supercore/sql_mixin.py +292 -0
  281. flwr/supercore/sqlite_mixin.py +156 -0
  282. flwr/{client/clientapp → supercore/state}/__init__.py +2 -2
  283. flwr/supercore/state/schema/README.md +125 -0
  284. flwr/{cli/new/templates → supercore/state/schema}/__init__.py +2 -2
  285. flwr/supercore/state/schema/corestate_tables.py +36 -0
  286. flwr/supercore/state/schema/linkstate_tables.py +152 -0
  287. flwr/supercore/state/schema/objectstore_tables.py +90 -0
  288. flwr/supercore/superexec/plugin/base_exec_plugin.py +1 -2
  289. flwr/supercore/superexec/plugin/exec_plugin.py +3 -3
  290. flwr/supercore/superexec/run_superexec.py +9 -13
  291. flwr/supercore/utils.py +224 -0
  292. flwr/superlink/artifact_provider/artifact_provider.py +1 -2
  293. flwr/superlink/auth_plugin/__init__.py +5 -2
  294. flwr/superlink/auth_plugin/auth_plugin.py +20 -19
  295. flwr/superlink/auth_plugin/noop_auth_plugin.py +84 -0
  296. flwr/superlink/federation/__init__.py +24 -0
  297. flwr/superlink/federation/federation_manager.py +64 -0
  298. flwr/superlink/federation/noop_federation_manager.py +71 -0
  299. flwr/superlink/servicer/control/{control_user_auth_interceptor.py → control_account_auth_interceptor.py} +41 -32
  300. flwr/superlink/servicer/control/control_event_log_interceptor.py +7 -7
  301. flwr/superlink/servicer/control/control_grpc.py +20 -17
  302. flwr/superlink/servicer/control/control_license_interceptor.py +3 -3
  303. flwr/superlink/servicer/control/control_servicer.py +328 -68
  304. flwr/supernode/cli/flower_supernode.py +74 -26
  305. flwr/supernode/nodestate/in_memory_nodestate.py +121 -49
  306. flwr/supernode/nodestate/nodestate.py +52 -8
  307. flwr/supernode/nodestate/nodestate_factory.py +7 -4
  308. flwr/supernode/runtime/run_clientapp.py +43 -24
  309. flwr/supernode/servicer/clientappio/clientappio_servicer.py +48 -10
  310. flwr/supernode/start_client_internal.py +185 -57
  311. {flwr_nightly-1.23.0.dev20250930.dist-info → flwr_nightly-1.26.0.dev20260121.dist-info}/METADATA +10 -11
  312. flwr_nightly-1.26.0.dev20260121.dist-info/RECORD +411 -0
  313. flwr/cli/new/templates/app/.gitignore.tpl +0 -163
  314. flwr/cli/new/templates/app/LICENSE.tpl +0 -202
  315. flwr/cli/new/templates/app/README.baseline.md.tpl +0 -127
  316. flwr/cli/new/templates/app/README.flowertune.md.tpl +0 -68
  317. flwr/cli/new/templates/app/README.md.tpl +0 -37
  318. flwr/cli/new/templates/app/code/__init__.baseline.py.tpl +0 -1
  319. flwr/cli/new/templates/app/code/__init__.py.tpl +0 -1
  320. flwr/cli/new/templates/app/code/__init__.pytorch_legacy_api.py.tpl +0 -1
  321. flwr/cli/new/templates/app/code/client.baseline.py.tpl +0 -75
  322. flwr/cli/new/templates/app/code/client.huggingface.py.tpl +0 -93
  323. flwr/cli/new/templates/app/code/client.jax.py.tpl +0 -71
  324. flwr/cli/new/templates/app/code/client.mlx.py.tpl +0 -102
  325. flwr/cli/new/templates/app/code/client.numpy.py.tpl +0 -46
  326. flwr/cli/new/templates/app/code/client.pytorch.py.tpl +0 -80
  327. flwr/cli/new/templates/app/code/client.pytorch_legacy_api.py.tpl +0 -55
  328. flwr/cli/new/templates/app/code/client.sklearn.py.tpl +0 -108
  329. flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +0 -82
  330. flwr/cli/new/templates/app/code/client.xgboost.py.tpl +0 -110
  331. flwr/cli/new/templates/app/code/dataset.baseline.py.tpl +0 -36
  332. flwr/cli/new/templates/app/code/flwr_tune/client_app.py.tpl +0 -92
  333. flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl +0 -87
  334. flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl +0 -56
  335. flwr/cli/new/templates/app/code/flwr_tune/server_app.py.tpl +0 -73
  336. flwr/cli/new/templates/app/code/flwr_tune/strategy.py.tpl +0 -78
  337. flwr/cli/new/templates/app/code/model.baseline.py.tpl +0 -66
  338. flwr/cli/new/templates/app/code/server.baseline.py.tpl +0 -43
  339. flwr/cli/new/templates/app/code/server.huggingface.py.tpl +0 -42
  340. flwr/cli/new/templates/app/code/server.jax.py.tpl +0 -39
  341. flwr/cli/new/templates/app/code/server.mlx.py.tpl +0 -41
  342. flwr/cli/new/templates/app/code/server.numpy.py.tpl +0 -38
  343. flwr/cli/new/templates/app/code/server.pytorch.py.tpl +0 -41
  344. flwr/cli/new/templates/app/code/server.pytorch_legacy_api.py.tpl +0 -31
  345. flwr/cli/new/templates/app/code/server.sklearn.py.tpl +0 -44
  346. flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +0 -38
  347. flwr/cli/new/templates/app/code/server.xgboost.py.tpl +0 -56
  348. flwr/cli/new/templates/app/code/strategy.baseline.py.tpl +0 -1
  349. flwr/cli/new/templates/app/code/task.huggingface.py.tpl +0 -98
  350. flwr/cli/new/templates/app/code/task.jax.py.tpl +0 -57
  351. flwr/cli/new/templates/app/code/task.mlx.py.tpl +0 -102
  352. flwr/cli/new/templates/app/code/task.numpy.py.tpl +0 -7
  353. flwr/cli/new/templates/app/code/task.pytorch.py.tpl +0 -98
  354. flwr/cli/new/templates/app/code/task.pytorch_legacy_api.py.tpl +0 -111
  355. flwr/cli/new/templates/app/code/task.sklearn.py.tpl +0 -67
  356. flwr/cli/new/templates/app/code/task.tensorflow.py.tpl +0 -52
  357. flwr/cli/new/templates/app/code/task.xgboost.py.tpl +0 -67
  358. flwr/cli/new/templates/app/code/utils.baseline.py.tpl +0 -1
  359. flwr/cli/new/templates/app/pyproject.baseline.toml.tpl +0 -146
  360. flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +0 -80
  361. flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +0 -65
  362. flwr/cli/new/templates/app/pyproject.jax.toml.tpl +0 -52
  363. flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +0 -56
  364. flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +0 -49
  365. flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +0 -53
  366. flwr/cli/new/templates/app/pyproject.pytorch_legacy_api.toml.tpl +0 -53
  367. flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +0 -52
  368. flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +0 -53
  369. flwr/cli/new/templates/app/pyproject.xgboost.toml.tpl +0 -61
  370. flwr/common/pyproject.py +0 -42
  371. flwr/supercore/object_store/utils.py +0 -43
  372. flwr_nightly-1.23.0.dev20250930.dist-info/RECORD +0 -429
  373. /flwr/{common → supercore}/version.py +0 -0
  374. {flwr_nightly-1.23.0.dev20250930.dist-info → flwr_nightly-1.26.0.dev20260121.dist-info}/WHEEL +0 -0
  375. {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, Callable, Optional, Union
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 = Union[bool, bytes, float, int, str]
35
- Value = Union[
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 = Union[int, float]
50
- MetricScalarList = Union[list[int], list[float]]
51
- MetricRecordValues = Union[MetricScalar, MetricScalarList]
54
+ MetricScalar = int | float
55
+ MetricScalarList = list[int] | list[float]
56
+ MetricRecordValues = MetricScalar | MetricScalarList
52
57
  # Value types for common.ConfigRecord
53
- ConfigScalar = Union[MetricScalar, str, bytes, bool]
54
- ConfigScalarList = Union[MetricScalarList, list[str], list[bytes], list[bool]]
55
- ConfigRecordValues = Union[ConfigScalar, ConfigScalarList]
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: Optional[int]
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: Optional[GetPropertiesIns] = None
195
- get_parameters_ins: Optional[GetParametersIns] = None
196
- fit_ins: Optional[FitIns] = None
197
- evaluate_ins: Optional[EvaluateIns] = None
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: Optional[GetPropertiesRes] = None
205
- get_parameters_res: Optional[GetParametersRes] = None
206
- fit_res: Optional[FitRes] = None
207
- evaluate_res: Optional[EvaluateRes] = None
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 user authentication types
284
+ # OIDC account authentication types
274
285
  @dataclass
275
- class UserAuthLoginDetails:
276
- """User authentication login details."""
286
+ class AccountAuthLoginDetails:
287
+ """Account authentication login details."""
277
288
 
278
- auth_type: str
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 UserAuthCredentials:
287
- """User authentication tokens."""
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: Optional[str]
298
- account_name: Optional[str]
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: Optional[str]
306
- description: Optional[str]
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: Optional[int]
316
- fab_hash: Optional[str]
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.address import parse_address
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, UserConfig
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: Optional[Client], client_fn: Optional[ClientFnExt]
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: Optional[ClientFnExt] = None,
75
- client: Optional[Client] = None,
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: Optional[Union[bytes, str]] = None,
78
- insecure: Optional[bool] = None,
79
- transport: Optional[str] = None,
80
- authentication_keys: Optional[
81
- tuple[ec.EllipticCurvePrivateKey, ec.EllipticCurvePublicKey]
82
- ] = None,
83
- max_retries: Optional[int] = None,
84
- max_wait_time: Optional[float] = None,
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: Optional[Callable[[str, str, str], ClientApp]] = None,
209
- client_fn: Optional[ClientFnExt] = None,
210
- client: Optional[Client] = None,
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: Optional[Union[bytes, str]] = None,
213
- insecure: Optional[bool] = None,
214
- transport: Optional[str] = None,
215
- authentication_keys: Optional[
216
- tuple[ec.EllipticCurvePrivateKey, ec.EllipticCurvePublicKey]
217
- ] = None,
218
- max_retries: Optional[int] = None,
219
- max_wait_time: Optional[float] = None,
220
- flwr_path: Optional[Path] = None,
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: Optional[DeprecatedRunInfoStore] = None
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: Optional[bytes] = None,
541
- insecure: Optional[bool] = None,
542
- transport: Optional[str] = None,
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: Optional[str], server_address: str) -> tuple[
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
- Union[bytes, str, None],
642
- Optional[tuple[ec.EllipticCurvePrivateKey, ec.EllipticCurvePublicKey]],
639
+ bytes | str | None,
640
+ tuple[ec.EllipticCurvePrivateKey, ec.EllipticCurvePublicKey] | None,
643
641
  ],
644
642
  AbstractContextManager[
645
643
  tuple[
646
- Callable[[], Optional[Message]],
644
+ Callable[[], Message | None],
647
645
  Callable[[Message], None],
648
- Optional[Callable[[], Optional[int]]],
649
- Optional[Callable[[], None]],
650
- Optional[Callable[[int], Run]],
651
- Optional[Callable[[str, int], Fab]],
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: {TRANSPORT_TYPES})"
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 Callable, Optional, Union, cast
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 MessageType, MessageTypeLegacy
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: Optional[Union[bytes, str]] = None,
60
- authentication_keys: Optional[ # pylint: disable=unused-argument
61
- tuple[ec.EllipticCurvePrivateKey, ec.EllipticCurvePublicKey]
62
- ] = None,
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[[], Optional[Message]],
66
+ Callable[[], Message | None],
66
67
  Callable[[Message], None],
67
- Optional[Callable[[], Optional[int]]],
68
- Optional[Callable[[], None]],
69
- Optional[Callable[[int], Run]],
70
- Optional[Callable[[str, int], Fab]],
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
- Client authentication is not supported for this transport type.
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, "Client authentication is not supported for this transport type.")
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: Optional[Server] = None,
39
- config: Optional[ServerConfig] = None,
40
- strategy: Optional[Strategy] = None,
41
- client_manager: Optional[ClientManager] = None,
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: Optional[tuple[bytes, bytes, bytes]] = None,
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: 4.25.1
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 == False:
26
- DESCRIPTOR._options = None
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