flwr-nightly 1.12.0.dev20240918__tar.gz → 1.12.0.dev20241007__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of flwr-nightly might be problematic. Click here for more details.

Files changed (310) hide show
  1. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/PKG-INFO +4 -2
  2. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/README.md +2 -0
  3. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/pyproject.toml +26 -29
  4. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/app.py +2 -0
  5. flwr_nightly-1.12.0.dev20241007/src/py/flwr/cli/log.py +234 -0
  6. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/new.py +1 -1
  7. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/README.flowertune.md.tpl +1 -1
  8. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +1 -0
  9. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/run/run.py +17 -1
  10. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/grpc_rere_client/client_interceptor.py +3 -0
  11. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/grpc_rere_client/connection.py +3 -3
  12. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/grpc_rere_client/grpc_adapter.py +14 -3
  13. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/rest_client/connection.py +3 -3
  14. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/supernode/app.py +1 -0
  15. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/constant.py +9 -3
  16. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/message.py +32 -15
  17. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/secure_aggregation/secaggplus_utils.py +4 -4
  18. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/serde.py +22 -7
  19. flwr_nightly-1.12.0.dev20240918/src/py/flwr/proto/fab_pb2.py → flwr_nightly-1.12.0.dev20241007/src/py/flwr/proto/control_pb2.py +6 -9
  20. flwr_nightly-1.12.0.dev20241007/src/py/flwr/proto/control_pb2.pyi +7 -0
  21. flwr_nightly-1.12.0.dev20241007/src/py/flwr/proto/control_pb2_grpc.py +135 -0
  22. flwr_nightly-1.12.0.dev20241007/src/py/flwr/proto/control_pb2_grpc.pyi +53 -0
  23. flwr_nightly-1.12.0.dev20241007/src/py/flwr/proto/driver_pb2.py +42 -0
  24. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/driver_pb2.pyi +0 -52
  25. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/driver_pb2_grpc.py +6 -6
  26. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/driver_pb2_grpc.pyi +4 -4
  27. flwr_nightly-1.12.0.dev20241007/src/py/flwr/proto/fab_pb2.py +31 -0
  28. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/fab_pb2.pyi +7 -1
  29. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/fleet_pb2.py +10 -10
  30. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/fleet_pb2.pyi +6 -1
  31. flwr_nightly-1.12.0.dev20241007/src/py/flwr/proto/recordset_pb2.py +70 -0
  32. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/recordset_pb2.pyi +40 -14
  33. flwr_nightly-1.12.0.dev20241007/src/py/flwr/proto/run_pb2.py +59 -0
  34. flwr_nightly-1.12.0.dev20241007/src/py/flwr/proto/run_pb2.pyi +225 -0
  35. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/transport_pb2.py +8 -8
  36. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/transport_pb2.pyi +9 -6
  37. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/run_serverapp.py +2 -2
  38. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/strategy/aggregate.py +22 -8
  39. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +17 -2
  40. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +4 -0
  41. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/superlink/state/in_memory_state.py +47 -2
  42. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/superlink/state/sqlite_state.py +73 -8
  43. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/utils/validator.py +6 -0
  44. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/superexec/deployment.py +3 -1
  45. flwr_nightly-1.12.0.dev20241007/src/py/flwr/superexec/exec_servicer.py +136 -0
  46. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/superexec/executor.py +2 -1
  47. flwr_nightly-1.12.0.dev20240918/src/py/flwr/proto/driver_pb2.py +0 -51
  48. flwr_nightly-1.12.0.dev20240918/src/py/flwr/proto/recordset_pb2.py +0 -68
  49. flwr_nightly-1.12.0.dev20240918/src/py/flwr/proto/run_pb2.py +0 -35
  50. flwr_nightly-1.12.0.dev20240918/src/py/flwr/proto/run_pb2.pyi +0 -76
  51. flwr_nightly-1.12.0.dev20240918/src/py/flwr/superexec/exec_servicer.py +0 -71
  52. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/LICENSE +0 -0
  53. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/__init__.py +0 -0
  54. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/__init__.py +0 -0
  55. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/build.py +0 -0
  56. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/config_utils.py +0 -0
  57. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/example.py +0 -0
  58. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/install.py +0 -0
  59. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/__init__.py +0 -0
  60. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/__init__.py +0 -0
  61. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/.gitignore.tpl +0 -0
  62. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/LICENSE.tpl +0 -0
  63. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/README.baseline.md.tpl +0 -0
  64. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/README.md.tpl +0 -0
  65. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/__init__.py +0 -0
  66. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/code/__init__.baseline.py.tpl +0 -0
  67. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/code/__init__.py +0 -0
  68. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/code/__init__.py.tpl +0 -0
  69. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/code/client.baseline.py.tpl +0 -0
  70. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/code/client.huggingface.py.tpl +0 -0
  71. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/code/client.jax.py.tpl +0 -0
  72. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/code/client.mlx.py.tpl +0 -0
  73. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/code/client.numpy.py.tpl +0 -0
  74. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/code/client.pytorch.py.tpl +0 -0
  75. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/code/client.sklearn.py.tpl +0 -0
  76. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +0 -0
  77. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/code/dataset.baseline.py.tpl +0 -0
  78. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/code/flwr_tune/__init__.py +0 -0
  79. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/code/flwr_tune/client_app.py.tpl +0 -0
  80. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl +0 -0
  81. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl +0 -0
  82. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/code/flwr_tune/server_app.py.tpl +0 -0
  83. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/code/flwr_tune/strategy.py.tpl +0 -0
  84. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/code/model.baseline.py.tpl +0 -0
  85. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/code/server.baseline.py.tpl +0 -0
  86. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/code/server.huggingface.py.tpl +0 -0
  87. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/code/server.jax.py.tpl +0 -0
  88. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/code/server.mlx.py.tpl +0 -0
  89. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/code/server.numpy.py.tpl +0 -0
  90. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/code/server.pytorch.py.tpl +0 -0
  91. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/code/server.sklearn.py.tpl +0 -0
  92. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +0 -0
  93. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/code/strategy.baseline.py.tpl +0 -0
  94. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/code/task.huggingface.py.tpl +0 -0
  95. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/code/task.jax.py.tpl +0 -0
  96. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/code/task.mlx.py.tpl +0 -0
  97. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/code/task.pytorch.py.tpl +0 -0
  98. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/code/task.tensorflow.py.tpl +0 -0
  99. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/code/utils.baseline.py.tpl +0 -0
  100. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/pyproject.baseline.toml.tpl +0 -0
  101. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +0 -0
  102. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/pyproject.jax.toml.tpl +0 -0
  103. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +0 -0
  104. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +0 -0
  105. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +0 -0
  106. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +0 -0
  107. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +0 -0
  108. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/run/__init__.py +0 -0
  109. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/utils.py +0 -0
  110. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/__init__.py +0 -0
  111. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/app.py +0 -0
  112. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/client.py +0 -0
  113. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/client_app.py +0 -0
  114. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/clientapp/__init__.py +0 -0
  115. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/clientapp/app.py +0 -0
  116. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/clientapp/clientappio_servicer.py +0 -0
  117. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/clientapp/utils.py +0 -0
  118. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/dpfedavg_numpy_client.py +0 -0
  119. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
  120. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/grpc_adapter_client/connection.py +0 -0
  121. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/grpc_client/__init__.py +0 -0
  122. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/grpc_client/connection.py +0 -0
  123. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/grpc_rere_client/__init__.py +0 -0
  124. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/heartbeat.py +0 -0
  125. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/message_handler/__init__.py +0 -0
  126. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/message_handler/message_handler.py +0 -0
  127. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/message_handler/task_handler.py +0 -0
  128. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/mod/__init__.py +0 -0
  129. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/mod/centraldp_mods.py +0 -0
  130. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/mod/comms_mods.py +0 -0
  131. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/mod/localdp_mod.py +0 -0
  132. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
  133. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
  134. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
  135. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/mod/utils.py +0 -0
  136. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/node_state.py +0 -0
  137. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/node_state_tests.py +0 -0
  138. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/numpy_client.py +0 -0
  139. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/rest_client/__init__.py +0 -0
  140. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/supernode/__init__.py +0 -0
  141. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/typing.py +0 -0
  142. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/__init__.py +0 -0
  143. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/address.py +0 -0
  144. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/config.py +0 -0
  145. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/context.py +0 -0
  146. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/date.py +0 -0
  147. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/differential_privacy.py +0 -0
  148. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/differential_privacy_constants.py +0 -0
  149. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/dp.py +0 -0
  150. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/exit_handlers.py +0 -0
  151. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/grpc.py +0 -0
  152. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/logger.py +0 -0
  153. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/object_ref.py +0 -0
  154. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/parameter.py +0 -0
  155. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/pyproject.py +0 -0
  156. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/record/__init__.py +0 -0
  157. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/record/configsrecord.py +0 -0
  158. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/record/conversion_utils.py +0 -0
  159. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/record/metricsrecord.py +0 -0
  160. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/record/parametersrecord.py +0 -0
  161. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/record/recordset.py +0 -0
  162. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/record/typeddict.py +0 -0
  163. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/recordset_compat.py +0 -0
  164. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/retry_invoker.py +0 -0
  165. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/secure_aggregation/__init__.py +0 -0
  166. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
  167. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
  168. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
  169. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
  170. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/secure_aggregation/quantization.py +0 -0
  171. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
  172. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/telemetry.py +0 -0
  173. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/typing.py +0 -0
  174. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/version.py +0 -0
  175. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/__init__.py +0 -0
  176. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/clientappio_pb2.py +0 -0
  177. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/clientappio_pb2.pyi +0 -0
  178. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/clientappio_pb2_grpc.py +0 -0
  179. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/clientappio_pb2_grpc.pyi +0 -0
  180. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/common_pb2.py +0 -0
  181. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/common_pb2.pyi +0 -0
  182. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/common_pb2_grpc.py +0 -0
  183. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/common_pb2_grpc.pyi +0 -0
  184. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/error_pb2.py +0 -0
  185. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/error_pb2.pyi +0 -0
  186. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/error_pb2_grpc.py +0 -0
  187. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/error_pb2_grpc.pyi +0 -0
  188. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/exec_pb2.py +0 -0
  189. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/exec_pb2.pyi +0 -0
  190. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/exec_pb2_grpc.py +0 -0
  191. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/exec_pb2_grpc.pyi +0 -0
  192. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/fab_pb2_grpc.py +0 -0
  193. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
  194. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/fleet_pb2_grpc.py +0 -0
  195. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
  196. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/grpcadapter_pb2.py +0 -0
  197. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
  198. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
  199. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
  200. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/message_pb2.py +0 -0
  201. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/message_pb2.pyi +0 -0
  202. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/message_pb2_grpc.py +0 -0
  203. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/message_pb2_grpc.pyi +0 -0
  204. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/node_pb2.py +0 -0
  205. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/node_pb2.pyi +0 -0
  206. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/node_pb2_grpc.py +0 -0
  207. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/node_pb2_grpc.pyi +0 -0
  208. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/recordset_pb2_grpc.py +0 -0
  209. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/recordset_pb2_grpc.pyi +0 -0
  210. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/run_pb2_grpc.py +0 -0
  211. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/run_pb2_grpc.pyi +0 -0
  212. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/task_pb2.py +0 -0
  213. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/task_pb2.pyi +0 -0
  214. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/task_pb2_grpc.py +0 -0
  215. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/task_pb2_grpc.pyi +0 -0
  216. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/transport_pb2_grpc.py +0 -0
  217. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
  218. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/py.typed +0 -0
  219. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/__init__.py +0 -0
  220. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/app.py +0 -0
  221. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/client_manager.py +0 -0
  222. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/client_proxy.py +0 -0
  223. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/compat/__init__.py +0 -0
  224. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/compat/app.py +0 -0
  225. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/compat/app_utils.py +0 -0
  226. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/compat/driver_client_proxy.py +0 -0
  227. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/compat/legacy_context.py +0 -0
  228. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/criterion.py +0 -0
  229. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/driver/__init__.py +0 -0
  230. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/driver/driver.py +0 -0
  231. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/driver/grpc_driver.py +0 -0
  232. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/driver/inmemory_driver.py +0 -0
  233. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/history.py +0 -0
  234. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/server.py +0 -0
  235. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/server_app.py +0 -0
  236. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/server_config.py +0 -0
  237. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/serverapp_components.py +0 -0
  238. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/strategy/__init__.py +0 -0
  239. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/strategy/bulyan.py +0 -0
  240. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
  241. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
  242. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
  243. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
  244. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
  245. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/strategy/fedadagrad.py +0 -0
  246. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/strategy/fedadam.py +0 -0
  247. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/strategy/fedavg.py +0 -0
  248. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/strategy/fedavg_android.py +0 -0
  249. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/strategy/fedavgm.py +0 -0
  250. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/strategy/fedmedian.py +0 -0
  251. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/strategy/fedopt.py +0 -0
  252. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/strategy/fedprox.py +0 -0
  253. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
  254. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
  255. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
  256. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
  257. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/strategy/fedyogi.py +0 -0
  258. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/strategy/krum.py +0 -0
  259. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/strategy/qfedavg.py +0 -0
  260. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/strategy/strategy.py +0 -0
  261. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/superlink/__init__.py +0 -0
  262. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/superlink/driver/__init__.py +0 -0
  263. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/superlink/driver/driver_grpc.py +0 -0
  264. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/superlink/driver/driver_servicer.py +2 -2
  265. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/superlink/ffs/__init__.py +0 -0
  266. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/superlink/ffs/disk_ffs.py +0 -0
  267. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/superlink/ffs/ffs.py +0 -0
  268. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/superlink/ffs/ffs_factory.py +0 -0
  269. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/superlink/fleet/__init__.py +0 -0
  270. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
  271. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
  272. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
  273. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
  274. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
  275. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
  276. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
  277. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +0 -0
  278. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
  279. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/superlink/fleet/message_handler/message_handler.py +0 -0
  280. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
  281. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -0
  282. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
  283. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
  284. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
  285. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +0 -0
  286. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/superlink/fleet/vce/vce_api.py +0 -0
  287. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/superlink/state/__init__.py +0 -0
  288. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/superlink/state/state.py +0 -0
  289. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/superlink/state/state_factory.py +0 -0
  290. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/superlink/state/utils.py +0 -0
  291. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/typing.py +0 -0
  292. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/utils/__init__.py +0 -0
  293. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/utils/tensorboard.py +0 -0
  294. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/workflow/__init__.py +0 -0
  295. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/workflow/constant.py +0 -0
  296. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/workflow/default_workflows.py +0 -0
  297. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
  298. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
  299. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
  300. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/simulation/__init__.py +0 -0
  301. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/simulation/app.py +0 -0
  302. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/simulation/ray_transport/__init__.py +0 -0
  303. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
  304. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
  305. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/simulation/ray_transport/utils.py +0 -0
  306. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/simulation/run_simulation.py +0 -0
  307. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/superexec/__init__.py +0 -0
  308. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/superexec/app.py +0 -0
  309. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/superexec/exec_grpc.py +0 -0
  310. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/superexec/simulation.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: flwr-nightly
3
- Version: 1.12.0.dev20240918
3
+ Version: 1.12.0.dev20241007
4
4
  Summary: Flower: A Friendly Federated Learning Framework
5
5
  Home-page: https://flower.ai
6
6
  License: Apache-2.0
@@ -43,7 +43,7 @@ Requires-Dist: requests (>=2.31.0,<3.0.0) ; extra == "rest"
43
43
  Requires-Dist: starlette (>=0.31.0,<0.32.0) ; extra == "rest"
44
44
  Requires-Dist: tomli (>=2.0.1,<3.0.0)
45
45
  Requires-Dist: tomli-w (>=1.0.0,<2.0.0)
46
- Requires-Dist: typer[all] (>=0.9.0,<0.10.0)
46
+ Requires-Dist: typer (>=0.12.5,<0.13.0)
47
47
  Requires-Dist: uvicorn[standard] (>=0.23.0,<0.24.0) ; extra == "rest"
48
48
  Project-URL: Documentation, https://flower.ai
49
49
  Project-URL: Repository, https://github.com/adap/flower
@@ -69,6 +69,7 @@ Description-Content-Type: text/markdown
69
69
  [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://github.com/adap/flower/blob/main/CONTRIBUTING.md)
70
70
  ![Build](https://github.com/adap/flower/actions/workflows/framework.yml/badge.svg)
71
71
  [![Downloads](https://static.pepy.tech/badge/flwr)](https://pepy.tech/project/flwr)
72
+ [![Docker Hub](https://img.shields.io/badge/Docker%20Hub-flwr-blue)](https://hub.docker.com/u/flwr)
72
73
  [![Slack](https://img.shields.io/badge/Chat-Slack-red)](https://flower.ai/join-slack)
73
74
 
74
75
  Flower (`flwr`) is a framework for building federated learning systems. The
@@ -152,6 +153,7 @@ Flower Baselines is a collection of community-contributed projects that reproduc
152
153
  - [FedNova](https://github.com/adap/flower/tree/main/baselines/fednova)
153
154
  - [HeteroFL](https://github.com/adap/flower/tree/main/baselines/heterofl)
154
155
  - [FedAvgM](https://github.com/adap/flower/tree/main/baselines/fedavgm)
156
+ - [FedRep](https://github.com/adap/flower/tree/main/baselines/fedrep)
155
157
  - [FedStar](https://github.com/adap/flower/tree/main/baselines/fedstar)
156
158
  - [FedWav2vec2](https://github.com/adap/flower/tree/main/baselines/fedwav2vec2)
157
159
  - [FjORD](https://github.com/adap/flower/tree/main/baselines/fjord)
@@ -18,6 +18,7 @@
18
18
  [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://github.com/adap/flower/blob/main/CONTRIBUTING.md)
19
19
  ![Build](https://github.com/adap/flower/actions/workflows/framework.yml/badge.svg)
20
20
  [![Downloads](https://static.pepy.tech/badge/flwr)](https://pepy.tech/project/flwr)
21
+ [![Docker Hub](https://img.shields.io/badge/Docker%20Hub-flwr-blue)](https://hub.docker.com/u/flwr)
21
22
  [![Slack](https://img.shields.io/badge/Chat-Slack-red)](https://flower.ai/join-slack)
22
23
 
23
24
  Flower (`flwr`) is a framework for building federated learning systems. The
@@ -101,6 +102,7 @@ Flower Baselines is a collection of community-contributed projects that reproduc
101
102
  - [FedNova](https://github.com/adap/flower/tree/main/baselines/fednova)
102
103
  - [HeteroFL](https://github.com/adap/flower/tree/main/baselines/heterofl)
103
104
  - [FedAvgM](https://github.com/adap/flower/tree/main/baselines/fedavgm)
105
+ - [FedRep](https://github.com/adap/flower/tree/main/baselines/fedrep)
104
106
  - [FedStar](https://github.com/adap/flower/tree/main/baselines/fedstar)
105
107
  - [FedWav2vec2](https://github.com/adap/flower/tree/main/baselines/fedwav2vec2)
106
108
  - [FjORD](https://github.com/adap/flower/tree/main/baselines/fjord)
@@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api"
4
4
 
5
5
  [tool.poetry]
6
6
  name = "flwr-nightly"
7
- version = "1.12.0.dev20240918"
7
+ version = "1.12.0.dev20241007"
8
8
  description = "Flower: A Friendly Federated Learning Framework"
9
9
  license = "Apache-2.0"
10
10
  authors = ["The Flower Authors <hello@flower.ai>"]
@@ -43,12 +43,8 @@ classifiers = [
43
43
  "Topic :: Software Development :: Libraries :: Python Modules",
44
44
  "Typing :: Typed",
45
45
  ]
46
- packages = [
47
- { include = "flwr", from = "src/py" },
48
- ]
49
- exclude = [
50
- "src/py/**/*_test.py",
51
- ]
46
+ packages = [{ include = "flwr", from = "src/py" }]
47
+ exclude = ["src/py/**/*_test.py"]
52
48
 
53
49
  [tool.poetry.scripts]
54
50
  # `flwr` CLI
@@ -62,7 +58,7 @@ flower-superlink = "flwr.server.app:run_superlink"
62
58
  flower-supernode = "flwr.client.supernode.app:run_supernode"
63
59
  flower-server-app = "flwr.server.run_serverapp:run_server_app"
64
60
  flwr-clientapp = "flwr.client.clientapp:flwr_clientapp"
65
- flower-client-app = "flwr.client.supernode:run_client_app" # Deprecated
61
+ flower-client-app = "flwr.client.supernode:run_client_app" # Deprecated
66
62
 
67
63
  [tool.poetry.dependencies]
68
64
  python = "^3.9"
@@ -73,7 +69,7 @@ protobuf = "^4.25.2"
73
69
  cryptography = "^42.0.4"
74
70
  pycryptodome = "^3.18.0"
75
71
  iterators = "^0.0.2"
76
- typer = { version = "^0.9.0", extras = ["all"] }
72
+ typer = "^0.12.5"
77
73
  tomli = "^2.0.1"
78
74
  tomli-w = "^1.0.0"
79
75
  pathspec = "^0.12.1"
@@ -96,6 +92,7 @@ types-setuptools = "==69.0.0.20240125"
96
92
  clang-format = "==17.0.6"
97
93
  isort = "==5.13.2"
98
94
  black = { version = "==24.2.0", extras = ["jupyter"] }
95
+ taplo = "==0.9.3"
99
96
  docformatter = "==1.7.5"
100
97
  mypy = "==1.8.0"
101
98
  pylint = "==3.0.3"
@@ -109,25 +106,24 @@ mypy-protobuf = "==3.2.0"
109
106
  jupyterlab = "==4.0.12"
110
107
  rope = "==1.11.0"
111
108
  semver = "==3.0.2"
112
- sphinx = "==6.2.1"
109
+ sphinx = "==7.4.7"
113
110
  sphinx-intl = "==2.2.0"
114
- sphinx-click = "==5.1.0"
115
- myst-parser = "==1.0.0"
116
- sphinx-design = "==0.5.0"
111
+ sphinx-click = "==6.0.0"
112
+ myst-parser = "==3.0.1"
113
+ sphinx-design = "==0.6.1"
117
114
  sphinx-copybutton = "==0.5.2"
118
115
  sphinxcontrib-mermaid = "==0.9.2"
119
116
  sphinxcontrib-youtube = "==1.4.1"
120
- furo = "==2023.9.10"
121
- sphinx-reredirects = "==0.1.3"
122
- nbsphinx = "==0.9.4"
117
+ furo = "==2024.8.6"
118
+ sphinx-reredirects = "==0.1.5"
119
+ nbsphinx = "==0.9.5"
123
120
  nbstripout = "==0.6.1"
124
121
  ruff = "==0.1.9"
125
122
  sphinx-argparse = "==0.4.0"
126
123
  pipreqs = "==0.4.13"
127
- mdformat-gfm = "==0.3.5"
124
+ mdformat-gfm = "==0.3.6"
128
125
  mdformat-frontmatter = "==2.0.1"
129
126
  mdformat-beautysh = "==0.1.1"
130
- mdformat-myst = "==0.1.5"
131
127
  twine = "==5.1.1"
132
128
  pyroma = "==4.2"
133
129
  check-wheel-contents = "==0.4.0"
@@ -137,6 +133,15 @@ licensecheck = "==2024"
137
133
  pre-commit = "==3.5.0"
138
134
  sphinx-substitution-extensions = "2022.02.16"
139
135
  sphinxext-opengraph = "==0.9.1"
136
+ docstrfmt = { git = "https://github.com/charlesbvll/docstrfmt.git", branch = "patch-1" }
137
+
138
+ [tool.docstrfmt]
139
+ extend_exclude = [
140
+ "doc/source/conf.py",
141
+ "doc/source/tutorial-quickstart-huggingface.rst",
142
+ "doc/source/_templates/autosummary/*",
143
+ "doc/source/ref-api/*",
144
+ ]
140
145
 
141
146
  [tool.isort]
142
147
  profile = "black"
@@ -152,10 +157,7 @@ disable = "duplicate-code,too-few-public-methods,useless-import-alias"
152
157
  [tool.pytest.ini_options]
153
158
  minversion = "6.2"
154
159
  addopts = "-qq"
155
- testpaths = [
156
- "src/py/flwr",
157
- "src/py/flwr_tool",
158
- ]
160
+ testpaths = ["src/py/flwr", "src/py/flwr_tool"]
159
161
  filterwarnings = "ignore::DeprecationWarning"
160
162
 
161
163
  [tool.pytest-watcher]
@@ -168,17 +170,12 @@ patterns = ["*.py"]
168
170
  ignore_patterns = []
169
171
 
170
172
  [tool.mypy]
171
- plugins = [
172
- "numpy.typing.mypy_plugin",
173
- ]
173
+ plugins = ["numpy.typing.mypy_plugin"]
174
174
  ignore_missing_imports = true
175
175
  strict = true
176
176
 
177
177
  [[tool.mypy.overrides]]
178
- module = [
179
- "importlib.metadata.*",
180
- "importlib_metadata.*",
181
- ]
178
+ module = ["importlib.metadata.*", "importlib_metadata.*"]
182
179
  follow_imports = "skip"
183
180
  follow_imports_for_stubs = true
184
181
  disallow_untyped_calls = false
@@ -19,6 +19,7 @@ from typer.main import get_command
19
19
 
20
20
  from .build import build
21
21
  from .install import install
22
+ from .log import log
22
23
  from .new import new
23
24
  from .run import run
24
25
 
@@ -35,6 +36,7 @@ app.command()(new)
35
36
  app.command()(run)
36
37
  app.command()(build)
37
38
  app.command()(install)
39
+ app.command()(log)
38
40
 
39
41
  typer_click_object = get_command(app)
40
42
 
@@ -0,0 +1,234 @@
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 command line interface `log` command."""
16
+
17
+ import sys
18
+ import time
19
+ from logging import DEBUG, ERROR, INFO
20
+ from pathlib import Path
21
+ from typing import Annotated, Optional
22
+
23
+ import grpc
24
+ import typer
25
+
26
+ from flwr.cli.config_utils import load_and_validate
27
+ from flwr.common.grpc import GRPC_MAX_MESSAGE_LENGTH, create_channel
28
+ from flwr.common.logger import log as logger
29
+ from flwr.proto.exec_pb2 import StreamLogsRequest # pylint: disable=E0611
30
+ from flwr.proto.exec_pb2_grpc import ExecStub
31
+
32
+ CONN_REFRESH_PERIOD = 60 # Connection refresh period for log streaming (seconds)
33
+
34
+
35
+ def start_stream(
36
+ run_id: int, channel: grpc.Channel, refresh_period: int = CONN_REFRESH_PERIOD
37
+ ) -> None:
38
+ """Start log streaming for a given run ID."""
39
+ try:
40
+ while True:
41
+ logger(INFO, "Starting logstream for run_id `%s`", run_id)
42
+ stream_logs(run_id, channel, refresh_period)
43
+ time.sleep(2)
44
+ logger(DEBUG, "Reconnecting to logstream")
45
+ except KeyboardInterrupt:
46
+ logger(INFO, "Exiting logstream")
47
+ except grpc.RpcError as e:
48
+ # pylint: disable=E1101
49
+ if e.code() == grpc.StatusCode.NOT_FOUND:
50
+ logger(ERROR, "Invalid run_id `%s`, exiting", run_id)
51
+ if e.code() == grpc.StatusCode.CANCELLED:
52
+ pass
53
+ finally:
54
+ channel.close()
55
+
56
+
57
+ def stream_logs(run_id: int, channel: grpc.Channel, duration: int) -> None:
58
+ """Stream logs from the beginning of a run with connection refresh."""
59
+ start_time = time.time()
60
+ stub = ExecStub(channel)
61
+ req = StreamLogsRequest(run_id=run_id)
62
+
63
+ for res in stub.StreamLogs(req):
64
+ print(res.log_output)
65
+ if time.time() - start_time > duration:
66
+ break
67
+
68
+
69
+ def print_logs(run_id: int, channel: grpc.Channel, timeout: int) -> None:
70
+ """Print logs from the beginning of a run."""
71
+ stub = ExecStub(channel)
72
+ req = StreamLogsRequest(run_id=run_id)
73
+
74
+ try:
75
+ while True:
76
+ try:
77
+ # Enforce timeout for graceful exit
78
+ for res in stub.StreamLogs(req, timeout=timeout):
79
+ print(res.log_output)
80
+ except grpc.RpcError as e:
81
+ # pylint: disable=E1101
82
+ if e.code() == grpc.StatusCode.DEADLINE_EXCEEDED:
83
+ break
84
+ if e.code() == grpc.StatusCode.NOT_FOUND:
85
+ logger(ERROR, "Invalid run_id `%s`, exiting", run_id)
86
+ break
87
+ if e.code() == grpc.StatusCode.CANCELLED:
88
+ break
89
+ except KeyboardInterrupt:
90
+ logger(DEBUG, "Stream interrupted by user")
91
+ finally:
92
+ channel.close()
93
+ logger(DEBUG, "Channel closed")
94
+
95
+
96
+ def on_channel_state_change(channel_connectivity: str) -> None:
97
+ """Log channel connectivity."""
98
+ logger(DEBUG, channel_connectivity)
99
+
100
+
101
+ def log(
102
+ run_id: Annotated[
103
+ int,
104
+ typer.Argument(help="The Flower run ID to query"),
105
+ ],
106
+ app: Annotated[
107
+ Path,
108
+ typer.Argument(help="Path of the Flower project to run"),
109
+ ] = Path("."),
110
+ federation: Annotated[
111
+ Optional[str],
112
+ typer.Argument(help="Name of the federation to run the app on"),
113
+ ] = None,
114
+ stream: Annotated[
115
+ bool,
116
+ typer.Option(
117
+ "--stream/--show",
118
+ help="Flag to stream or print logs from the Flower run",
119
+ ),
120
+ ] = True,
121
+ ) -> None:
122
+ """Get logs from a Flower project run."""
123
+ typer.secho("Loading project configuration... ", fg=typer.colors.BLUE)
124
+
125
+ pyproject_path = app / "pyproject.toml" if app else None
126
+ config, errors, warnings = load_and_validate(path=pyproject_path)
127
+
128
+ if config is None:
129
+ typer.secho(
130
+ "Project configuration could not be loaded.\n"
131
+ "pyproject.toml is invalid:\n"
132
+ + "\n".join([f"- {line}" for line in errors]),
133
+ fg=typer.colors.RED,
134
+ bold=True,
135
+ )
136
+ sys.exit()
137
+
138
+ if warnings:
139
+ typer.secho(
140
+ "Project configuration is missing the following "
141
+ "recommended properties:\n" + "\n".join([f"- {line}" for line in warnings]),
142
+ fg=typer.colors.RED,
143
+ bold=True,
144
+ )
145
+
146
+ typer.secho("Success", fg=typer.colors.GREEN)
147
+
148
+ federation = federation or config["tool"]["flwr"]["federations"].get("default")
149
+
150
+ if federation is None:
151
+ typer.secho(
152
+ "❌ No federation name was provided and the project's `pyproject.toml` "
153
+ "doesn't declare a default federation (with a SuperExec address or an "
154
+ "`options.num-supernodes` value).",
155
+ fg=typer.colors.RED,
156
+ bold=True,
157
+ )
158
+ raise typer.Exit(code=1)
159
+
160
+ # Validate the federation exists in the configuration
161
+ federation_config = config["tool"]["flwr"]["federations"].get(federation)
162
+ if federation_config is None:
163
+ available_feds = {
164
+ fed for fed in config["tool"]["flwr"]["federations"] if fed != "default"
165
+ }
166
+ typer.secho(
167
+ f"❌ There is no `{federation}` federation declared in the "
168
+ "`pyproject.toml`.\n The following federations were found:\n\n"
169
+ + "\n".join(available_feds),
170
+ fg=typer.colors.RED,
171
+ bold=True,
172
+ )
173
+ raise typer.Exit(code=1)
174
+
175
+ if "address" not in federation_config:
176
+ typer.secho(
177
+ "❌ `flwr log` currently works with `SuperExec`. Ensure that the correct"
178
+ "`SuperExec` address is provided in the `pyproject.toml`.",
179
+ fg=typer.colors.RED,
180
+ bold=True,
181
+ )
182
+ raise typer.Exit(code=1)
183
+
184
+ _log_with_superexec(federation_config, run_id, stream)
185
+
186
+
187
+ # pylint: disable-next=too-many-branches
188
+ def _log_with_superexec(
189
+ federation_config: dict[str, str],
190
+ run_id: int,
191
+ stream: bool,
192
+ ) -> None:
193
+ insecure_str = federation_config.get("insecure")
194
+ if root_certificates := federation_config.get("root-certificates"):
195
+ root_certificates_bytes = Path(root_certificates).read_bytes()
196
+ if insecure := bool(insecure_str):
197
+ typer.secho(
198
+ "❌ `root_certificates` were provided but the `insecure` parameter"
199
+ "is set to `True`.",
200
+ fg=typer.colors.RED,
201
+ bold=True,
202
+ )
203
+ raise typer.Exit(code=1)
204
+ else:
205
+ root_certificates_bytes = None
206
+ if insecure_str is None:
207
+ typer.secho(
208
+ "❌ To disable TLS, set `insecure = true` in `pyproject.toml`.",
209
+ fg=typer.colors.RED,
210
+ bold=True,
211
+ )
212
+ raise typer.Exit(code=1)
213
+ if not (insecure := bool(insecure_str)):
214
+ typer.secho(
215
+ "❌ No certificate were given yet `insecure` is set to `False`.",
216
+ fg=typer.colors.RED,
217
+ bold=True,
218
+ )
219
+ raise typer.Exit(code=1)
220
+
221
+ channel = create_channel(
222
+ server_address=federation_config["address"],
223
+ insecure=insecure,
224
+ root_certificates=root_certificates_bytes,
225
+ max_message_length=GRPC_MAX_MESSAGE_LENGTH,
226
+ interceptors=None,
227
+ )
228
+ channel.subscribe(on_channel_state_change)
229
+
230
+ if stream:
231
+ start_stream(run_id, channel, CONN_REFRESH_PERIOD)
232
+ else:
233
+ logger(INFO, "Printing logstream for run_id `%s`", run_id)
234
+ print_logs(run_id, channel, timeout=5)
@@ -275,7 +275,7 @@ def new(
275
275
  )
276
276
  )
277
277
 
278
- _add = " huggingface-cli login\n" if framework_str == "flowertune" else ""
278
+ _add = " huggingface-cli login\n" if llm_challenge_str else ""
279
279
  print(
280
280
  typer.style(
281
281
  f" cd {package_name}\n" + " pip install -e .\n" + _add + " flwr run\n",
@@ -55,7 +55,7 @@ We use Mistral-7B model with 4-bit quantization as default. The estimated VRAM c
55
55
  | :--------: | :--------: | :--------: | :--------: | :--------: |
56
56
  | VRAM | ~25.50 GB | ~17.30 GB | ~22.80 GB | ~17.40 GB |
57
57
 
58
- You can adjust the CPU/GPU resources you assign to each of the clients based on your device, which are specified with `options.backend.clientapp-cpus` and `options.backend.clientapp-gpus` under `[tool.flwr.federations.local-simulation]` entry in `pyproject.toml`.
58
+ You can adjust the CPU/GPU resources you assign to each of the clients based on your device, which are specified with `options.backend.client-resources.num-cpus` and `options.backend.client-resources.num-gpus` under `[tool.flwr.federations.local-simulation]` entry in `pyproject.toml`.
59
59
 
60
60
 
61
61
  ## Model saving
@@ -17,6 +17,7 @@ dependencies = [
17
17
  "transformers==4.39.3",
18
18
  "sentencepiece==0.2.0",
19
19
  "omegaconf==2.3.0",
20
+ "hf_transfer==0.1.8",
20
21
  ]
21
22
 
22
23
  [tool.hatch.build.targets.wheel]
@@ -34,6 +34,10 @@ from flwr.common.typing import Fab
34
34
  from flwr.proto.exec_pb2 import StartRunRequest # pylint: disable=E0611
35
35
  from flwr.proto.exec_pb2_grpc import ExecStub
36
36
 
37
+ from ..log import start_stream
38
+
39
+ CONN_REFRESH_PERIOD = 60 # Connection refresh period for log streaming (seconds)
40
+
37
41
 
38
42
  def on_channel_state_change(channel_connectivity: str) -> None:
39
43
  """Log channel connectivity."""
@@ -62,6 +66,14 @@ def run(
62
66
  "inside the `pyproject.toml` in order to be properly overriden.",
63
67
  ),
64
68
  ] = None,
69
+ stream: Annotated[
70
+ bool,
71
+ typer.Option(
72
+ "--stream",
73
+ help="Use `--stream` with `flwr run` to display logs;\n "
74
+ "logs are not streamed by default.",
75
+ ),
76
+ ] = False,
65
77
  ) -> None:
66
78
  """Run Flower App."""
67
79
  typer.secho("Loading project configuration... ", fg=typer.colors.BLUE)
@@ -117,7 +129,7 @@ def run(
117
129
  raise typer.Exit(code=1)
118
130
 
119
131
  if "address" in federation_config:
120
- _run_with_superexec(app, federation_config, config_overrides)
132
+ _run_with_superexec(app, federation_config, config_overrides, stream)
121
133
  else:
122
134
  _run_without_superexec(app, federation_config, config_overrides, federation)
123
135
 
@@ -126,6 +138,7 @@ def _run_with_superexec(
126
138
  app: Path,
127
139
  federation_config: dict[str, Any],
128
140
  config_overrides: Optional[list[str]],
141
+ stream: bool,
129
142
  ) -> None:
130
143
 
131
144
  insecure_str = federation_config.get("insecure")
@@ -183,6 +196,9 @@ def _run_with_superexec(
183
196
  fab_path.unlink()
184
197
  typer.secho(f"🎊 Successfully started run {res.run_id}", fg=typer.colors.GREEN)
185
198
 
199
+ if stream:
200
+ start_stream(res.run_id, channel, CONN_REFRESH_PERIOD)
201
+
186
202
 
187
203
  def _run_without_superexec(
188
204
  app: Optional[Path],
@@ -31,6 +31,7 @@ from flwr.common.secure_aggregation.crypto.symmetric_encryption import (
31
31
  generate_shared_key,
32
32
  public_key_to_bytes,
33
33
  )
34
+ from flwr.proto.fab_pb2 import GetFabRequest # pylint: disable=E0611
34
35
  from flwr.proto.fleet_pb2 import ( # pylint: disable=E0611
35
36
  CreateNodeRequest,
36
37
  DeleteNodeRequest,
@@ -50,6 +51,7 @@ Request = Union[
50
51
  PushTaskResRequest,
51
52
  GetRunRequest,
52
53
  PingRequest,
54
+ GetFabRequest,
53
55
  ]
54
56
 
55
57
 
@@ -126,6 +128,7 @@ class AuthenticateClientInterceptor(grpc.UnaryUnaryClientInterceptor): # type:
126
128
  PushTaskResRequest,
127
129
  GetRunRequest,
128
130
  PingRequest,
131
+ GetFabRequest,
129
132
  ),
130
133
  ):
131
134
  if self.shared_secret is None:
@@ -269,7 +269,7 @@ def grpc_request_response( # pylint: disable=R0913, R0914, R0915
269
269
  task_res = message_to_taskres(message)
270
270
 
271
271
  # Serialize ProtoBuf to bytes
272
- request = PushTaskResRequest(task_res_list=[task_res])
272
+ request = PushTaskResRequest(node=node, task_res_list=[task_res])
273
273
  _ = retry_invoker.invoke(stub.PushTaskRes, request)
274
274
 
275
275
  # Cleanup
@@ -277,7 +277,7 @@ def grpc_request_response( # pylint: disable=R0913, R0914, R0915
277
277
 
278
278
  def get_run(run_id: int) -> Run:
279
279
  # Call FleetAPI
280
- get_run_request = GetRunRequest(run_id=run_id)
280
+ get_run_request = GetRunRequest(node=node, run_id=run_id)
281
281
  get_run_response: GetRunResponse = retry_invoker.invoke(
282
282
  stub.GetRun,
283
283
  request=get_run_request,
@@ -294,7 +294,7 @@ def grpc_request_response( # pylint: disable=R0913, R0914, R0915
294
294
 
295
295
  def get_fab(fab_hash: str) -> Fab:
296
296
  # Call FleetAPI
297
- get_fab_request = GetFabRequest(hash_str=fab_hash)
297
+ get_fab_request = GetFabRequest(node=node, hash_str=fab_hash)
298
298
  get_fab_response: GetFabResponse = retry_invoker.invoke(
299
299
  stub.GetFab,
300
300
  request=get_fab_request,
@@ -24,10 +24,14 @@ from google.protobuf.message import Message as GrpcMessage
24
24
 
25
25
  from flwr.common import log
26
26
  from flwr.common.constant import (
27
+ GRPC_ADAPTER_METADATA_FLOWER_PACKAGE_NAME_KEY,
28
+ GRPC_ADAPTER_METADATA_FLOWER_PACKAGE_VERSION_KEY,
27
29
  GRPC_ADAPTER_METADATA_FLOWER_VERSION_KEY,
30
+ GRPC_ADAPTER_METADATA_MESSAGE_MODULE_KEY,
31
+ GRPC_ADAPTER_METADATA_MESSAGE_QUALNAME_KEY,
28
32
  GRPC_ADAPTER_METADATA_SHOULD_EXIT_KEY,
29
33
  )
30
- from flwr.common.version import package_version
34
+ from flwr.common.version import package_name, package_version
31
35
  from flwr.proto.fab_pb2 import GetFabRequest, GetFabResponse # pylint: disable=E0611
32
36
  from flwr.proto.fleet_pb2 import ( # pylint: disable=E0611
33
37
  CreateNodeRequest,
@@ -62,9 +66,16 @@ class GrpcAdapter:
62
66
  self, request: GrpcMessage, response_type: type[T], **kwargs: Any
63
67
  ) -> T:
64
68
  # Serialize request
69
+ req_cls = request.__class__
65
70
  container_req = MessageContainer(
66
- metadata={GRPC_ADAPTER_METADATA_FLOWER_VERSION_KEY: package_version},
67
- grpc_message_name=request.__class__.__qualname__,
71
+ metadata={
72
+ GRPC_ADAPTER_METADATA_FLOWER_PACKAGE_NAME_KEY: package_name,
73
+ GRPC_ADAPTER_METADATA_FLOWER_PACKAGE_VERSION_KEY: package_version,
74
+ GRPC_ADAPTER_METADATA_FLOWER_VERSION_KEY: package_version,
75
+ GRPC_ADAPTER_METADATA_MESSAGE_MODULE_KEY: req_cls.__module__,
76
+ GRPC_ADAPTER_METADATA_MESSAGE_QUALNAME_KEY: req_cls.__qualname__,
77
+ },
78
+ grpc_message_name=req_cls.__qualname__,
68
79
  grpc_message_content=request.SerializeToString(),
69
80
  )
70
81
 
@@ -340,7 +340,7 @@ def http_request_response( # pylint: disable=,R0913, R0914, R0915
340
340
  task_res = message_to_taskres(message)
341
341
 
342
342
  # Serialize ProtoBuf to bytes
343
- req = PushTaskResRequest(task_res_list=[task_res])
343
+ req = PushTaskResRequest(node=node, task_res_list=[task_res])
344
344
 
345
345
  # Send the request
346
346
  res = _request(req, PushTaskResResponse, PATH_PUSH_TASK_RES)
@@ -356,7 +356,7 @@ def http_request_response( # pylint: disable=,R0913, R0914, R0915
356
356
 
357
357
  def get_run(run_id: int) -> Run:
358
358
  # Construct the request
359
- req = GetRunRequest(run_id=run_id)
359
+ req = GetRunRequest(node=node, run_id=run_id)
360
360
 
361
361
  # Send the request
362
362
  res = _request(req, GetRunResponse, PATH_GET_RUN)
@@ -373,7 +373,7 @@ def http_request_response( # pylint: disable=,R0913, R0914, R0915
373
373
 
374
374
  def get_fab(fab_hash: str) -> Fab:
375
375
  # Construct the request
376
- req = GetFabRequest(hash_str=fab_hash)
376
+ req = GetFabRequest(node=node, hash_str=fab_hash)
377
377
 
378
378
  # Send the request
379
379
  res = _request(req, GetFabResponse, PATH_GET_FAB)
@@ -79,6 +79,7 @@ def run_supernode() -> None:
79
79
  node_config=parse_config_args(
80
80
  [args.node_config] if args.node_config else args.node_config
81
81
  ),
82
+ flwr_path=args.flwr_dir,
82
83
  isolation=args.isolation,
83
84
  supernode_address=args.supernode_address,
84
85
  )
@@ -60,8 +60,6 @@ PING_MAX_INTERVAL = 1e300
60
60
  # IDs
61
61
  RUN_ID_NUM_BYTES = 8
62
62
  NODE_ID_NUM_BYTES = 8
63
- GRPC_ADAPTER_METADATA_FLOWER_VERSION_KEY = "flower-version"
64
- GRPC_ADAPTER_METADATA_SHOULD_EXIT_KEY = "should-exit"
65
63
 
66
64
  # Constants for FAB
67
65
  APP_DIR = "apps"
@@ -72,8 +70,16 @@ FLWR_HOME = "FLWR_HOME"
72
70
  PARTITION_ID_KEY = "partition-id"
73
71
  NUM_PARTITIONS_KEY = "num-partitions"
74
72
 
75
- GRPC_ADAPTER_METADATA_FLOWER_VERSION_KEY = "flower-version"
73
+ # Constants for keys in `metadata` of `MessageContainer` in `grpc-adapter`
74
+ GRPC_ADAPTER_METADATA_FLOWER_PACKAGE_NAME_KEY = "flower-package-name"
75
+ GRPC_ADAPTER_METADATA_FLOWER_PACKAGE_VERSION_KEY = "flower-package-version"
76
+ GRPC_ADAPTER_METADATA_FLOWER_VERSION_KEY = "flower-version" # Deprecated
76
77
  GRPC_ADAPTER_METADATA_SHOULD_EXIT_KEY = "should-exit"
78
+ GRPC_ADAPTER_METADATA_MESSAGE_MODULE_KEY = "grpc-message-module"
79
+ GRPC_ADAPTER_METADATA_MESSAGE_QUALNAME_KEY = "grpc-message-qualname"
80
+
81
+ # Message TTL
82
+ MESSAGE_TTL_TOLERANCE = 1e-1
77
83
 
78
84
 
79
85
  class MessageType: