flwr-nightly 1.12.0.dev20240918__tar.gz → 1.12.0.dev20240920__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 (307) hide show
  1. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/PKG-INFO +1 -1
  2. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/pyproject.toml +1 -1
  3. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/cli/new/new.py +1 -1
  4. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +1 -0
  5. flwr_nightly-1.12.0.dev20240920/src/py/flwr/proto/control_pb2.py +27 -0
  6. flwr_nightly-1.12.0.dev20240920/src/py/flwr/proto/control_pb2.pyi +7 -0
  7. flwr_nightly-1.12.0.dev20240920/src/py/flwr/proto/control_pb2_grpc.py +67 -0
  8. flwr_nightly-1.12.0.dev20240920/src/py/flwr/proto/control_pb2_grpc.pyi +27 -0
  9. flwr_nightly-1.12.0.dev20240920/src/py/flwr/proto/driver_pb2.py +42 -0
  10. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/proto/driver_pb2.pyi +0 -52
  11. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/proto/driver_pb2_grpc.py +6 -6
  12. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/proto/driver_pb2_grpc.pyi +4 -4
  13. flwr_nightly-1.12.0.dev20240920/src/py/flwr/proto/run_pb2.py +44 -0
  14. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/proto/run_pb2.pyi +52 -0
  15. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/run_serverapp.py +2 -2
  16. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/superlink/state/sqlite_state.py +5 -5
  17. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/superexec/deployment.py +3 -1
  18. flwr_nightly-1.12.0.dev20240920/src/py/flwr/superexec/exec_servicer.py +136 -0
  19. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/superexec/executor.py +2 -1
  20. flwr_nightly-1.12.0.dev20240918/src/py/flwr/proto/driver_pb2.py +0 -51
  21. flwr_nightly-1.12.0.dev20240918/src/py/flwr/proto/run_pb2.py +0 -35
  22. flwr_nightly-1.12.0.dev20240918/src/py/flwr/superexec/exec_servicer.py +0 -71
  23. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/LICENSE +0 -0
  24. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/README.md +0 -0
  25. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/__init__.py +0 -0
  26. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/cli/__init__.py +0 -0
  27. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/cli/app.py +0 -0
  28. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/cli/build.py +0 -0
  29. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/cli/config_utils.py +0 -0
  30. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/cli/example.py +0 -0
  31. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/cli/install.py +0 -0
  32. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/cli/new/__init__.py +0 -0
  33. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/cli/new/templates/__init__.py +0 -0
  34. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/cli/new/templates/app/.gitignore.tpl +0 -0
  35. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/cli/new/templates/app/LICENSE.tpl +0 -0
  36. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/cli/new/templates/app/README.baseline.md.tpl +0 -0
  37. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/cli/new/templates/app/README.flowertune.md.tpl +0 -0
  38. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/cli/new/templates/app/README.md.tpl +0 -0
  39. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/cli/new/templates/app/__init__.py +0 -0
  40. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/cli/new/templates/app/code/__init__.baseline.py.tpl +0 -0
  41. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/cli/new/templates/app/code/__init__.py +0 -0
  42. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/cli/new/templates/app/code/__init__.py.tpl +0 -0
  43. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/cli/new/templates/app/code/client.baseline.py.tpl +0 -0
  44. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/cli/new/templates/app/code/client.huggingface.py.tpl +0 -0
  45. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/cli/new/templates/app/code/client.jax.py.tpl +0 -0
  46. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/cli/new/templates/app/code/client.mlx.py.tpl +0 -0
  47. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/cli/new/templates/app/code/client.numpy.py.tpl +0 -0
  48. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/cli/new/templates/app/code/client.pytorch.py.tpl +0 -0
  49. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/cli/new/templates/app/code/client.sklearn.py.tpl +0 -0
  50. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +0 -0
  51. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/cli/new/templates/app/code/dataset.baseline.py.tpl +0 -0
  52. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/cli/new/templates/app/code/flwr_tune/__init__.py +0 -0
  53. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/cli/new/templates/app/code/flwr_tune/client_app.py.tpl +0 -0
  54. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl +0 -0
  55. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl +0 -0
  56. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/cli/new/templates/app/code/flwr_tune/server_app.py.tpl +0 -0
  57. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/cli/new/templates/app/code/flwr_tune/strategy.py.tpl +0 -0
  58. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/cli/new/templates/app/code/model.baseline.py.tpl +0 -0
  59. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/cli/new/templates/app/code/server.baseline.py.tpl +0 -0
  60. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/cli/new/templates/app/code/server.huggingface.py.tpl +0 -0
  61. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/cli/new/templates/app/code/server.jax.py.tpl +0 -0
  62. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/cli/new/templates/app/code/server.mlx.py.tpl +0 -0
  63. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/cli/new/templates/app/code/server.numpy.py.tpl +0 -0
  64. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/cli/new/templates/app/code/server.pytorch.py.tpl +0 -0
  65. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/cli/new/templates/app/code/server.sklearn.py.tpl +0 -0
  66. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +0 -0
  67. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/cli/new/templates/app/code/strategy.baseline.py.tpl +0 -0
  68. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/cli/new/templates/app/code/task.huggingface.py.tpl +0 -0
  69. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/cli/new/templates/app/code/task.jax.py.tpl +0 -0
  70. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/cli/new/templates/app/code/task.mlx.py.tpl +0 -0
  71. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/cli/new/templates/app/code/task.pytorch.py.tpl +0 -0
  72. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/cli/new/templates/app/code/task.tensorflow.py.tpl +0 -0
  73. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/cli/new/templates/app/code/utils.baseline.py.tpl +0 -0
  74. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/cli/new/templates/app/pyproject.baseline.toml.tpl +0 -0
  75. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +0 -0
  76. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/cli/new/templates/app/pyproject.jax.toml.tpl +0 -0
  77. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +0 -0
  78. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +0 -0
  79. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +0 -0
  80. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +0 -0
  81. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +0 -0
  82. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/cli/run/__init__.py +0 -0
  83. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/cli/run/run.py +0 -0
  84. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/cli/utils.py +0 -0
  85. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/client/__init__.py +0 -0
  86. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/client/app.py +0 -0
  87. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/client/client.py +0 -0
  88. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/client/client_app.py +0 -0
  89. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/client/clientapp/__init__.py +0 -0
  90. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/client/clientapp/app.py +0 -0
  91. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/client/clientapp/clientappio_servicer.py +0 -0
  92. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/client/clientapp/utils.py +0 -0
  93. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/client/dpfedavg_numpy_client.py +0 -0
  94. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
  95. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/client/grpc_adapter_client/connection.py +0 -0
  96. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/client/grpc_client/__init__.py +0 -0
  97. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/client/grpc_client/connection.py +0 -0
  98. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/client/grpc_rere_client/__init__.py +0 -0
  99. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/client/grpc_rere_client/client_interceptor.py +0 -0
  100. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/client/grpc_rere_client/connection.py +0 -0
  101. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -0
  102. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/client/heartbeat.py +0 -0
  103. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/client/message_handler/__init__.py +0 -0
  104. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/client/message_handler/message_handler.py +0 -0
  105. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/client/message_handler/task_handler.py +0 -0
  106. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/client/mod/__init__.py +0 -0
  107. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/client/mod/centraldp_mods.py +0 -0
  108. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/client/mod/comms_mods.py +0 -0
  109. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/client/mod/localdp_mod.py +0 -0
  110. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
  111. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
  112. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
  113. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/client/mod/utils.py +0 -0
  114. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/client/node_state.py +0 -0
  115. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/client/node_state_tests.py +0 -0
  116. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/client/numpy_client.py +0 -0
  117. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/client/rest_client/__init__.py +0 -0
  118. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/client/rest_client/connection.py +0 -0
  119. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/client/supernode/__init__.py +0 -0
  120. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/client/supernode/app.py +0 -0
  121. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/client/typing.py +0 -0
  122. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/common/__init__.py +0 -0
  123. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/common/address.py +0 -0
  124. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/common/config.py +0 -0
  125. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/common/constant.py +0 -0
  126. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/common/context.py +0 -0
  127. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/common/date.py +0 -0
  128. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/common/differential_privacy.py +0 -0
  129. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/common/differential_privacy_constants.py +0 -0
  130. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/common/dp.py +0 -0
  131. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/common/exit_handlers.py +0 -0
  132. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/common/grpc.py +0 -0
  133. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/common/logger.py +0 -0
  134. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/common/message.py +0 -0
  135. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/common/object_ref.py +0 -0
  136. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/common/parameter.py +0 -0
  137. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/common/pyproject.py +0 -0
  138. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/common/record/__init__.py +0 -0
  139. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/common/record/configsrecord.py +0 -0
  140. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/common/record/conversion_utils.py +0 -0
  141. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/common/record/metricsrecord.py +0 -0
  142. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/common/record/parametersrecord.py +0 -0
  143. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/common/record/recordset.py +0 -0
  144. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/common/record/typeddict.py +0 -0
  145. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/common/recordset_compat.py +0 -0
  146. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/common/retry_invoker.py +0 -0
  147. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/common/secure_aggregation/__init__.py +0 -0
  148. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
  149. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
  150. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
  151. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
  152. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/common/secure_aggregation/quantization.py +0 -0
  153. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
  154. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
  155. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/common/serde.py +0 -0
  156. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/common/telemetry.py +0 -0
  157. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/common/typing.py +0 -0
  158. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/common/version.py +0 -0
  159. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/proto/__init__.py +0 -0
  160. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/proto/clientappio_pb2.py +0 -0
  161. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/proto/clientappio_pb2.pyi +0 -0
  162. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/proto/clientappio_pb2_grpc.py +0 -0
  163. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/proto/clientappio_pb2_grpc.pyi +0 -0
  164. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/proto/common_pb2.py +0 -0
  165. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/proto/common_pb2.pyi +0 -0
  166. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/proto/common_pb2_grpc.py +0 -0
  167. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/proto/common_pb2_grpc.pyi +0 -0
  168. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/proto/error_pb2.py +0 -0
  169. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/proto/error_pb2.pyi +0 -0
  170. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/proto/error_pb2_grpc.py +0 -0
  171. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/proto/error_pb2_grpc.pyi +0 -0
  172. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/proto/exec_pb2.py +0 -0
  173. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/proto/exec_pb2.pyi +0 -0
  174. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/proto/exec_pb2_grpc.py +0 -0
  175. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/proto/exec_pb2_grpc.pyi +0 -0
  176. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/proto/fab_pb2.py +0 -0
  177. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/proto/fab_pb2.pyi +0 -0
  178. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/proto/fab_pb2_grpc.py +0 -0
  179. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
  180. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/proto/fleet_pb2.py +0 -0
  181. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/proto/fleet_pb2.pyi +0 -0
  182. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/proto/fleet_pb2_grpc.py +0 -0
  183. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
  184. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/proto/grpcadapter_pb2.py +0 -0
  185. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
  186. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
  187. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
  188. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/proto/message_pb2.py +0 -0
  189. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/proto/message_pb2.pyi +0 -0
  190. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/proto/message_pb2_grpc.py +0 -0
  191. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/proto/message_pb2_grpc.pyi +0 -0
  192. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/proto/node_pb2.py +0 -0
  193. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/proto/node_pb2.pyi +0 -0
  194. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/proto/node_pb2_grpc.py +0 -0
  195. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/proto/node_pb2_grpc.pyi +0 -0
  196. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/proto/recordset_pb2.py +0 -0
  197. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/proto/recordset_pb2.pyi +0 -0
  198. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/proto/recordset_pb2_grpc.py +0 -0
  199. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/proto/recordset_pb2_grpc.pyi +0 -0
  200. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/proto/run_pb2_grpc.py +0 -0
  201. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/proto/run_pb2_grpc.pyi +0 -0
  202. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/proto/task_pb2.py +0 -0
  203. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/proto/task_pb2.pyi +0 -0
  204. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/proto/task_pb2_grpc.py +0 -0
  205. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/proto/task_pb2_grpc.pyi +0 -0
  206. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/proto/transport_pb2.py +0 -0
  207. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/proto/transport_pb2.pyi +0 -0
  208. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/proto/transport_pb2_grpc.py +0 -0
  209. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
  210. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/py.typed +0 -0
  211. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/__init__.py +0 -0
  212. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/app.py +0 -0
  213. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/client_manager.py +0 -0
  214. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/client_proxy.py +0 -0
  215. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/compat/__init__.py +0 -0
  216. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/compat/app.py +0 -0
  217. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/compat/app_utils.py +0 -0
  218. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/compat/driver_client_proxy.py +0 -0
  219. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/compat/legacy_context.py +0 -0
  220. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/criterion.py +0 -0
  221. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/driver/__init__.py +0 -0
  222. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/driver/driver.py +0 -0
  223. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/driver/grpc_driver.py +0 -0
  224. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/driver/inmemory_driver.py +0 -0
  225. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/history.py +0 -0
  226. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/server.py +0 -0
  227. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/server_app.py +0 -0
  228. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/server_config.py +0 -0
  229. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/serverapp_components.py +0 -0
  230. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/strategy/__init__.py +0 -0
  231. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/strategy/aggregate.py +0 -0
  232. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/strategy/bulyan.py +0 -0
  233. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
  234. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
  235. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
  236. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
  237. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
  238. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/strategy/fedadagrad.py +0 -0
  239. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/strategy/fedadam.py +0 -0
  240. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/strategy/fedavg.py +0 -0
  241. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/strategy/fedavg_android.py +0 -0
  242. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/strategy/fedavgm.py +0 -0
  243. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/strategy/fedmedian.py +0 -0
  244. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/strategy/fedopt.py +0 -0
  245. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/strategy/fedprox.py +0 -0
  246. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
  247. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
  248. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
  249. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
  250. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/strategy/fedyogi.py +0 -0
  251. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/strategy/krum.py +0 -0
  252. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/strategy/qfedavg.py +0 -0
  253. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/strategy/strategy.py +0 -0
  254. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/superlink/__init__.py +0 -0
  255. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/superlink/driver/__init__.py +0 -0
  256. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/superlink/driver/driver_grpc.py +0 -0
  257. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/superlink/driver/driver_servicer.py +2 -2
  258. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/superlink/ffs/__init__.py +0 -0
  259. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/superlink/ffs/disk_ffs.py +0 -0
  260. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/superlink/ffs/ffs.py +0 -0
  261. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/superlink/ffs/ffs_factory.py +0 -0
  262. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/superlink/fleet/__init__.py +0 -0
  263. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
  264. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +0 -0
  265. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
  266. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
  267. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
  268. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
  269. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
  270. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
  271. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +0 -0
  272. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +0 -0
  273. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
  274. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/superlink/fleet/message_handler/message_handler.py +0 -0
  275. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
  276. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -0
  277. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
  278. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
  279. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
  280. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +0 -0
  281. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/superlink/fleet/vce/vce_api.py +0 -0
  282. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/superlink/state/__init__.py +0 -0
  283. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/superlink/state/in_memory_state.py +0 -0
  284. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/superlink/state/state.py +0 -0
  285. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/superlink/state/state_factory.py +0 -0
  286. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/superlink/state/utils.py +0 -0
  287. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/typing.py +0 -0
  288. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/utils/__init__.py +0 -0
  289. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/utils/tensorboard.py +0 -0
  290. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/utils/validator.py +0 -0
  291. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/workflow/__init__.py +0 -0
  292. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/workflow/constant.py +0 -0
  293. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/workflow/default_workflows.py +0 -0
  294. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
  295. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
  296. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
  297. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/simulation/__init__.py +0 -0
  298. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/simulation/app.py +0 -0
  299. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/simulation/ray_transport/__init__.py +0 -0
  300. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
  301. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
  302. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/simulation/ray_transport/utils.py +0 -0
  303. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/simulation/run_simulation.py +0 -0
  304. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/superexec/__init__.py +0 -0
  305. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/superexec/app.py +0 -0
  306. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/src/py/flwr/superexec/exec_grpc.py +0 -0
  307. {flwr_nightly-1.12.0.dev20240918 → flwr_nightly-1.12.0.dev20240920}/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.dev20240920
4
4
  Summary: Flower: A Friendly Federated Learning Framework
5
5
  Home-page: https://flower.ai
6
6
  License: Apache-2.0
@@ -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.dev20240920"
8
8
  description = "Flower: A Friendly Federated Learning Framework"
9
9
  license = "Apache-2.0"
10
10
  authors = ["The Flower Authors <hello@flower.ai>"]
@@ -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",
@@ -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]
@@ -0,0 +1,27 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # source: flwr/proto/control.proto
4
+ # Protobuf Python Version: 4.25.0
5
+ """Generated protocol buffer code."""
6
+ from google.protobuf import descriptor as _descriptor
7
+ from google.protobuf import descriptor_pool as _descriptor_pool
8
+ from google.protobuf import symbol_database as _symbol_database
9
+ from google.protobuf.internal import builder as _builder
10
+ # @@protoc_insertion_point(imports)
11
+
12
+ _sym_db = _symbol_database.Default()
13
+
14
+
15
+ from flwr.proto import run_pb2 as flwr_dot_proto_dot_run__pb2
16
+
17
+
18
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x18\x66lwr/proto/control.proto\x12\nflwr.proto\x1a\x14\x66lwr/proto/run.proto2U\n\x07\x43ontrol\x12J\n\tCreateRun\x12\x1c.flwr.proto.CreateRunRequest\x1a\x1d.flwr.proto.CreateRunResponse\"\x00\x62\x06proto3')
19
+
20
+ _globals = globals()
21
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
22
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'flwr.proto.control_pb2', _globals)
23
+ if _descriptor._USE_C_DESCRIPTORS == False:
24
+ DESCRIPTOR._options = None
25
+ _globals['_CONTROL']._serialized_start=62
26
+ _globals['_CONTROL']._serialized_end=147
27
+ # @@protoc_insertion_point(module_scope)
@@ -0,0 +1,7 @@
1
+ """
2
+ @generated by mypy-protobuf. Do not edit manually!
3
+ isort:skip_file
4
+ """
5
+ import google.protobuf.descriptor
6
+
7
+ DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
@@ -0,0 +1,67 @@
1
+ # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
2
+ """Client and server classes corresponding to protobuf-defined services."""
3
+ import grpc
4
+
5
+ from flwr.proto import run_pb2 as flwr_dot_proto_dot_run__pb2
6
+
7
+
8
+ class ControlStub(object):
9
+ """Missing associated documentation comment in .proto file."""
10
+
11
+ def __init__(self, channel):
12
+ """Constructor.
13
+
14
+ Args:
15
+ channel: A grpc.Channel.
16
+ """
17
+ self.CreateRun = channel.unary_unary(
18
+ '/flwr.proto.Control/CreateRun',
19
+ request_serializer=flwr_dot_proto_dot_run__pb2.CreateRunRequest.SerializeToString,
20
+ response_deserializer=flwr_dot_proto_dot_run__pb2.CreateRunResponse.FromString,
21
+ )
22
+
23
+
24
+ class ControlServicer(object):
25
+ """Missing associated documentation comment in .proto file."""
26
+
27
+ def CreateRun(self, request, context):
28
+ """Request to create a new run
29
+ """
30
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
31
+ context.set_details('Method not implemented!')
32
+ raise NotImplementedError('Method not implemented!')
33
+
34
+
35
+ def add_ControlServicer_to_server(servicer, server):
36
+ rpc_method_handlers = {
37
+ 'CreateRun': grpc.unary_unary_rpc_method_handler(
38
+ servicer.CreateRun,
39
+ request_deserializer=flwr_dot_proto_dot_run__pb2.CreateRunRequest.FromString,
40
+ response_serializer=flwr_dot_proto_dot_run__pb2.CreateRunResponse.SerializeToString,
41
+ ),
42
+ }
43
+ generic_handler = grpc.method_handlers_generic_handler(
44
+ 'flwr.proto.Control', rpc_method_handlers)
45
+ server.add_generic_rpc_handlers((generic_handler,))
46
+
47
+
48
+ # This class is part of an EXPERIMENTAL API.
49
+ class Control(object):
50
+ """Missing associated documentation comment in .proto file."""
51
+
52
+ @staticmethod
53
+ def CreateRun(request,
54
+ target,
55
+ options=(),
56
+ channel_credentials=None,
57
+ call_credentials=None,
58
+ insecure=False,
59
+ compression=None,
60
+ wait_for_ready=None,
61
+ timeout=None,
62
+ metadata=None):
63
+ return grpc.experimental.unary_unary(request, target, '/flwr.proto.Control/CreateRun',
64
+ flwr_dot_proto_dot_run__pb2.CreateRunRequest.SerializeToString,
65
+ flwr_dot_proto_dot_run__pb2.CreateRunResponse.FromString,
66
+ options, channel_credentials,
67
+ insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
@@ -0,0 +1,27 @@
1
+ """
2
+ @generated by mypy-protobuf. Do not edit manually!
3
+ isort:skip_file
4
+ """
5
+ import abc
6
+ import flwr.proto.run_pb2
7
+ import grpc
8
+
9
+ class ControlStub:
10
+ def __init__(self, channel: grpc.Channel) -> None: ...
11
+ CreateRun: grpc.UnaryUnaryMultiCallable[
12
+ flwr.proto.run_pb2.CreateRunRequest,
13
+ flwr.proto.run_pb2.CreateRunResponse]
14
+ """Request to create a new run"""
15
+
16
+
17
+ class ControlServicer(metaclass=abc.ABCMeta):
18
+ @abc.abstractmethod
19
+ def CreateRun(self,
20
+ request: flwr.proto.run_pb2.CreateRunRequest,
21
+ context: grpc.ServicerContext,
22
+ ) -> flwr.proto.run_pb2.CreateRunResponse:
23
+ """Request to create a new run"""
24
+ pass
25
+
26
+
27
+ def add_ControlServicer_to_server(servicer: ControlServicer, server: grpc.Server) -> None: ...
@@ -0,0 +1,42 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # source: flwr/proto/driver.proto
4
+ # Protobuf Python Version: 4.25.0
5
+ """Generated protocol buffer code."""
6
+ from google.protobuf import descriptor as _descriptor
7
+ from google.protobuf import descriptor_pool as _descriptor_pool
8
+ from google.protobuf import symbol_database as _symbol_database
9
+ from google.protobuf.internal import builder as _builder
10
+ # @@protoc_insertion_point(imports)
11
+
12
+ _sym_db = _symbol_database.Default()
13
+
14
+
15
+ from flwr.proto import node_pb2 as flwr_dot_proto_dot_node__pb2
16
+ from flwr.proto import task_pb2 as flwr_dot_proto_dot_task__pb2
17
+ from flwr.proto import run_pb2 as flwr_dot_proto_dot_run__pb2
18
+ from flwr.proto import fab_pb2 as flwr_dot_proto_dot_fab__pb2
19
+
20
+
21
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x17\x66lwr/proto/driver.proto\x12\nflwr.proto\x1a\x15\x66lwr/proto/node.proto\x1a\x15\x66lwr/proto/task.proto\x1a\x14\x66lwr/proto/run.proto\x1a\x14\x66lwr/proto/fab.proto\"!\n\x0fGetNodesRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\"3\n\x10GetNodesResponse\x12\x1f\n\x05nodes\x18\x01 \x03(\x0b\x32\x10.flwr.proto.Node\"@\n\x12PushTaskInsRequest\x12*\n\rtask_ins_list\x18\x01 \x03(\x0b\x32\x13.flwr.proto.TaskIns\"\'\n\x13PushTaskInsResponse\x12\x10\n\x08task_ids\x18\x02 \x03(\t\"F\n\x12PullTaskResRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x10\n\x08task_ids\x18\x02 \x03(\t\"A\n\x13PullTaskResResponse\x12*\n\rtask_res_list\x18\x01 \x03(\x0b\x32\x13.flwr.proto.TaskRes2\xc7\x03\n\x06\x44river\x12J\n\tCreateRun\x12\x1c.flwr.proto.CreateRunRequest\x1a\x1d.flwr.proto.CreateRunResponse\"\x00\x12G\n\x08GetNodes\x12\x1b.flwr.proto.GetNodesRequest\x1a\x1c.flwr.proto.GetNodesResponse\"\x00\x12P\n\x0bPushTaskIns\x12\x1e.flwr.proto.PushTaskInsRequest\x1a\x1f.flwr.proto.PushTaskInsResponse\"\x00\x12P\n\x0bPullTaskRes\x12\x1e.flwr.proto.PullTaskResRequest\x1a\x1f.flwr.proto.PullTaskResResponse\"\x00\x12\x41\n\x06GetRun\x12\x19.flwr.proto.GetRunRequest\x1a\x1a.flwr.proto.GetRunResponse\"\x00\x12\x41\n\x06GetFab\x12\x19.flwr.proto.GetFabRequest\x1a\x1a.flwr.proto.GetFabResponse\"\x00\x62\x06proto3')
22
+
23
+ _globals = globals()
24
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
25
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'flwr.proto.driver_pb2', _globals)
26
+ if _descriptor._USE_C_DESCRIPTORS == False:
27
+ DESCRIPTOR._options = None
28
+ _globals['_GETNODESREQUEST']._serialized_start=129
29
+ _globals['_GETNODESREQUEST']._serialized_end=162
30
+ _globals['_GETNODESRESPONSE']._serialized_start=164
31
+ _globals['_GETNODESRESPONSE']._serialized_end=215
32
+ _globals['_PUSHTASKINSREQUEST']._serialized_start=217
33
+ _globals['_PUSHTASKINSREQUEST']._serialized_end=281
34
+ _globals['_PUSHTASKINSRESPONSE']._serialized_start=283
35
+ _globals['_PUSHTASKINSRESPONSE']._serialized_end=322
36
+ _globals['_PULLTASKRESREQUEST']._serialized_start=324
37
+ _globals['_PULLTASKRESREQUEST']._serialized_end=394
38
+ _globals['_PULLTASKRESRESPONSE']._serialized_start=396
39
+ _globals['_PULLTASKRESRESPONSE']._serialized_end=461
40
+ _globals['_DRIVER']._serialized_start=464
41
+ _globals['_DRIVER']._serialized_end=919
42
+ # @@protoc_insertion_point(module_scope)
@@ -3,10 +3,8 @@
3
3
  isort:skip_file
4
4
  """
5
5
  import builtins
6
- import flwr.proto.fab_pb2
7
6
  import flwr.proto.node_pb2
8
7
  import flwr.proto.task_pb2
9
- import flwr.proto.transport_pb2
10
8
  import google.protobuf.descriptor
11
9
  import google.protobuf.internal.containers
12
10
  import google.protobuf.message
@@ -15,56 +13,6 @@ import typing_extensions
15
13
 
16
14
  DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
17
15
 
18
- class CreateRunRequest(google.protobuf.message.Message):
19
- """CreateRun"""
20
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
21
- class OverrideConfigEntry(google.protobuf.message.Message):
22
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
23
- KEY_FIELD_NUMBER: builtins.int
24
- VALUE_FIELD_NUMBER: builtins.int
25
- key: typing.Text
26
- @property
27
- def value(self) -> flwr.proto.transport_pb2.Scalar: ...
28
- def __init__(self,
29
- *,
30
- key: typing.Text = ...,
31
- value: typing.Optional[flwr.proto.transport_pb2.Scalar] = ...,
32
- ) -> None: ...
33
- def HasField(self, field_name: typing_extensions.Literal["value",b"value"]) -> builtins.bool: ...
34
- def ClearField(self, field_name: typing_extensions.Literal["key",b"key","value",b"value"]) -> None: ...
35
-
36
- FAB_ID_FIELD_NUMBER: builtins.int
37
- FAB_VERSION_FIELD_NUMBER: builtins.int
38
- OVERRIDE_CONFIG_FIELD_NUMBER: builtins.int
39
- FAB_FIELD_NUMBER: builtins.int
40
- fab_id: typing.Text
41
- fab_version: typing.Text
42
- @property
43
- def override_config(self) -> google.protobuf.internal.containers.MessageMap[typing.Text, flwr.proto.transport_pb2.Scalar]: ...
44
- @property
45
- def fab(self) -> flwr.proto.fab_pb2.Fab: ...
46
- def __init__(self,
47
- *,
48
- fab_id: typing.Text = ...,
49
- fab_version: typing.Text = ...,
50
- override_config: typing.Optional[typing.Mapping[typing.Text, flwr.proto.transport_pb2.Scalar]] = ...,
51
- fab: typing.Optional[flwr.proto.fab_pb2.Fab] = ...,
52
- ) -> None: ...
53
- def HasField(self, field_name: typing_extensions.Literal["fab",b"fab"]) -> builtins.bool: ...
54
- def ClearField(self, field_name: typing_extensions.Literal["fab",b"fab","fab_id",b"fab_id","fab_version",b"fab_version","override_config",b"override_config"]) -> None: ...
55
- global___CreateRunRequest = CreateRunRequest
56
-
57
- class CreateRunResponse(google.protobuf.message.Message):
58
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
59
- RUN_ID_FIELD_NUMBER: builtins.int
60
- run_id: builtins.int
61
- def __init__(self,
62
- *,
63
- run_id: builtins.int = ...,
64
- ) -> None: ...
65
- def ClearField(self, field_name: typing_extensions.Literal["run_id",b"run_id"]) -> None: ...
66
- global___CreateRunResponse = CreateRunResponse
67
-
68
16
  class GetNodesRequest(google.protobuf.message.Message):
69
17
  """GetNodes messages"""
70
18
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
@@ -18,8 +18,8 @@ class DriverStub(object):
18
18
  """
19
19
  self.CreateRun = channel.unary_unary(
20
20
  '/flwr.proto.Driver/CreateRun',
21
- request_serializer=flwr_dot_proto_dot_driver__pb2.CreateRunRequest.SerializeToString,
22
- response_deserializer=flwr_dot_proto_dot_driver__pb2.CreateRunResponse.FromString,
21
+ request_serializer=flwr_dot_proto_dot_run__pb2.CreateRunRequest.SerializeToString,
22
+ response_deserializer=flwr_dot_proto_dot_run__pb2.CreateRunResponse.FromString,
23
23
  )
24
24
  self.GetNodes = channel.unary_unary(
25
25
  '/flwr.proto.Driver/GetNodes',
@@ -98,8 +98,8 @@ def add_DriverServicer_to_server(servicer, server):
98
98
  rpc_method_handlers = {
99
99
  'CreateRun': grpc.unary_unary_rpc_method_handler(
100
100
  servicer.CreateRun,
101
- request_deserializer=flwr_dot_proto_dot_driver__pb2.CreateRunRequest.FromString,
102
- response_serializer=flwr_dot_proto_dot_driver__pb2.CreateRunResponse.SerializeToString,
101
+ request_deserializer=flwr_dot_proto_dot_run__pb2.CreateRunRequest.FromString,
102
+ response_serializer=flwr_dot_proto_dot_run__pb2.CreateRunResponse.SerializeToString,
103
103
  ),
104
104
  'GetNodes': grpc.unary_unary_rpc_method_handler(
105
105
  servicer.GetNodes,
@@ -148,8 +148,8 @@ class Driver(object):
148
148
  timeout=None,
149
149
  metadata=None):
150
150
  return grpc.experimental.unary_unary(request, target, '/flwr.proto.Driver/CreateRun',
151
- flwr_dot_proto_dot_driver__pb2.CreateRunRequest.SerializeToString,
152
- flwr_dot_proto_dot_driver__pb2.CreateRunResponse.FromString,
151
+ flwr_dot_proto_dot_run__pb2.CreateRunRequest.SerializeToString,
152
+ flwr_dot_proto_dot_run__pb2.CreateRunResponse.FromString,
153
153
  options, channel_credentials,
154
154
  insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
155
155
 
@@ -11,8 +11,8 @@ import grpc
11
11
  class DriverStub:
12
12
  def __init__(self, channel: grpc.Channel) -> None: ...
13
13
  CreateRun: grpc.UnaryUnaryMultiCallable[
14
- flwr.proto.driver_pb2.CreateRunRequest,
15
- flwr.proto.driver_pb2.CreateRunResponse]
14
+ flwr.proto.run_pb2.CreateRunRequest,
15
+ flwr.proto.run_pb2.CreateRunResponse]
16
16
  """Request run_id"""
17
17
 
18
18
  GetNodes: grpc.UnaryUnaryMultiCallable[
@@ -44,9 +44,9 @@ class DriverStub:
44
44
  class DriverServicer(metaclass=abc.ABCMeta):
45
45
  @abc.abstractmethod
46
46
  def CreateRun(self,
47
- request: flwr.proto.driver_pb2.CreateRunRequest,
47
+ request: flwr.proto.run_pb2.CreateRunRequest,
48
48
  context: grpc.ServicerContext,
49
- ) -> flwr.proto.driver_pb2.CreateRunResponse:
49
+ ) -> flwr.proto.run_pb2.CreateRunResponse:
50
50
  """Request run_id"""
51
51
  pass
52
52
 
@@ -0,0 +1,44 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # source: flwr/proto/run.proto
4
+ # Protobuf Python Version: 4.25.0
5
+ """Generated protocol buffer code."""
6
+ from google.protobuf import descriptor as _descriptor
7
+ from google.protobuf import descriptor_pool as _descriptor_pool
8
+ from google.protobuf import symbol_database as _symbol_database
9
+ from google.protobuf.internal import builder as _builder
10
+ # @@protoc_insertion_point(imports)
11
+
12
+ _sym_db = _symbol_database.Default()
13
+
14
+
15
+ from flwr.proto import fab_pb2 as flwr_dot_proto_dot_fab__pb2
16
+ from flwr.proto import transport_pb2 as flwr_dot_proto_dot_transport__pb2
17
+
18
+
19
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x14\x66lwr/proto/run.proto\x12\nflwr.proto\x1a\x14\x66lwr/proto/fab.proto\x1a\x1a\x66lwr/proto/transport.proto\"\xd5\x01\n\x03Run\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\x12\x0e\n\x06\x66\x61\x62_id\x18\x02 \x01(\t\x12\x13\n\x0b\x66\x61\x62_version\x18\x03 \x01(\t\x12<\n\x0foverride_config\x18\x04 \x03(\x0b\x32#.flwr.proto.Run.OverrideConfigEntry\x12\x10\n\x08\x66\x61\x62_hash\x18\x05 \x01(\t\x1aI\n\x13OverrideConfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\"\xeb\x01\n\x10\x43reateRunRequest\x12\x0e\n\x06\x66\x61\x62_id\x18\x01 \x01(\t\x12\x13\n\x0b\x66\x61\x62_version\x18\x02 \x01(\t\x12I\n\x0foverride_config\x18\x03 \x03(\x0b\x32\x30.flwr.proto.CreateRunRequest.OverrideConfigEntry\x12\x1c\n\x03\x66\x61\x62\x18\x04 \x01(\x0b\x32\x0f.flwr.proto.Fab\x1aI\n\x13OverrideConfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\"#\n\x11\x43reateRunResponse\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\"\x1f\n\rGetRunRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\".\n\x0eGetRunResponse\x12\x1c\n\x03run\x18\x01 \x01(\x0b\x32\x0f.flwr.proto.Runb\x06proto3')
20
+
21
+ _globals = globals()
22
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
23
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'flwr.proto.run_pb2', _globals)
24
+ if _descriptor._USE_C_DESCRIPTORS == False:
25
+ DESCRIPTOR._options = None
26
+ _globals['_RUN_OVERRIDECONFIGENTRY']._options = None
27
+ _globals['_RUN_OVERRIDECONFIGENTRY']._serialized_options = b'8\001'
28
+ _globals['_CREATERUNREQUEST_OVERRIDECONFIGENTRY']._options = None
29
+ _globals['_CREATERUNREQUEST_OVERRIDECONFIGENTRY']._serialized_options = b'8\001'
30
+ _globals['_RUN']._serialized_start=87
31
+ _globals['_RUN']._serialized_end=300
32
+ _globals['_RUN_OVERRIDECONFIGENTRY']._serialized_start=227
33
+ _globals['_RUN_OVERRIDECONFIGENTRY']._serialized_end=300
34
+ _globals['_CREATERUNREQUEST']._serialized_start=303
35
+ _globals['_CREATERUNREQUEST']._serialized_end=538
36
+ _globals['_CREATERUNREQUEST_OVERRIDECONFIGENTRY']._serialized_start=227
37
+ _globals['_CREATERUNREQUEST_OVERRIDECONFIGENTRY']._serialized_end=300
38
+ _globals['_CREATERUNRESPONSE']._serialized_start=540
39
+ _globals['_CREATERUNRESPONSE']._serialized_end=575
40
+ _globals['_GETRUNREQUEST']._serialized_start=577
41
+ _globals['_GETRUNREQUEST']._serialized_end=608
42
+ _globals['_GETRUNRESPONSE']._serialized_start=610
43
+ _globals['_GETRUNRESPONSE']._serialized_end=656
44
+ # @@protoc_insertion_point(module_scope)
@@ -3,6 +3,7 @@
3
3
  isort:skip_file
4
4
  """
5
5
  import builtins
6
+ import flwr.proto.fab_pb2
6
7
  import flwr.proto.transport_pb2
7
8
  import google.protobuf.descriptor
8
9
  import google.protobuf.internal.containers
@@ -51,7 +52,58 @@ class Run(google.protobuf.message.Message):
51
52
  def ClearField(self, field_name: typing_extensions.Literal["fab_hash",b"fab_hash","fab_id",b"fab_id","fab_version",b"fab_version","override_config",b"override_config","run_id",b"run_id"]) -> None: ...
52
53
  global___Run = Run
53
54
 
55
+ class CreateRunRequest(google.protobuf.message.Message):
56
+ """CreateRun"""
57
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
58
+ class OverrideConfigEntry(google.protobuf.message.Message):
59
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
60
+ KEY_FIELD_NUMBER: builtins.int
61
+ VALUE_FIELD_NUMBER: builtins.int
62
+ key: typing.Text
63
+ @property
64
+ def value(self) -> flwr.proto.transport_pb2.Scalar: ...
65
+ def __init__(self,
66
+ *,
67
+ key: typing.Text = ...,
68
+ value: typing.Optional[flwr.proto.transport_pb2.Scalar] = ...,
69
+ ) -> None: ...
70
+ def HasField(self, field_name: typing_extensions.Literal["value",b"value"]) -> builtins.bool: ...
71
+ def ClearField(self, field_name: typing_extensions.Literal["key",b"key","value",b"value"]) -> None: ...
72
+
73
+ FAB_ID_FIELD_NUMBER: builtins.int
74
+ FAB_VERSION_FIELD_NUMBER: builtins.int
75
+ OVERRIDE_CONFIG_FIELD_NUMBER: builtins.int
76
+ FAB_FIELD_NUMBER: builtins.int
77
+ fab_id: typing.Text
78
+ fab_version: typing.Text
79
+ @property
80
+ def override_config(self) -> google.protobuf.internal.containers.MessageMap[typing.Text, flwr.proto.transport_pb2.Scalar]: ...
81
+ @property
82
+ def fab(self) -> flwr.proto.fab_pb2.Fab: ...
83
+ def __init__(self,
84
+ *,
85
+ fab_id: typing.Text = ...,
86
+ fab_version: typing.Text = ...,
87
+ override_config: typing.Optional[typing.Mapping[typing.Text, flwr.proto.transport_pb2.Scalar]] = ...,
88
+ fab: typing.Optional[flwr.proto.fab_pb2.Fab] = ...,
89
+ ) -> None: ...
90
+ def HasField(self, field_name: typing_extensions.Literal["fab",b"fab"]) -> builtins.bool: ...
91
+ def ClearField(self, field_name: typing_extensions.Literal["fab",b"fab","fab_id",b"fab_id","fab_version",b"fab_version","override_config",b"override_config"]) -> None: ...
92
+ global___CreateRunRequest = CreateRunRequest
93
+
94
+ class CreateRunResponse(google.protobuf.message.Message):
95
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
96
+ RUN_ID_FIELD_NUMBER: builtins.int
97
+ run_id: builtins.int
98
+ def __init__(self,
99
+ *,
100
+ run_id: builtins.int = ...,
101
+ ) -> None: ...
102
+ def ClearField(self, field_name: typing_extensions.Literal["run_id",b"run_id"]) -> None: ...
103
+ global___CreateRunResponse = CreateRunResponse
104
+
54
105
  class GetRunRequest(google.protobuf.message.Message):
106
+ """GetRun"""
55
107
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
56
108
  RUN_ID_FIELD_NUMBER: builtins.int
57
109
  run_id: builtins.int
@@ -35,11 +35,11 @@ from flwr.common.constant import DRIVER_API_DEFAULT_ADDRESS
35
35
  from flwr.common.logger import log, update_console_handler, warn_deprecated_feature
36
36
  from flwr.common.object_ref import load_app
37
37
  from flwr.common.typing import UserConfig
38
- from flwr.proto.driver_pb2 import ( # pylint: disable=E0611
38
+ from flwr.proto.fab_pb2 import GetFabRequest, GetFabResponse # pylint: disable=E0611
39
+ from flwr.proto.run_pb2 import ( # pylint: disable=E0611
39
40
  CreateRunRequest,
40
41
  CreateRunResponse,
41
42
  )
42
- from flwr.proto.fab_pb2 import GetFabRequest, GetFabResponse # pylint: disable=E0611
43
43
 
44
44
  from .driver import Driver
45
45
  from .driver.grpc_driver import GrpcDriver
@@ -782,8 +782,9 @@ class SqliteState(State): # pylint: disable=R0904
782
782
  # Convert the uint64 value to sint64 for SQLite
783
783
  sint64_run_id = convert_uint64_to_sint64(run_id)
784
784
  query = "SELECT * FROM run WHERE run_id = ?;"
785
- try:
786
- row = self.query(query, (sint64_run_id,))[0]
785
+ rows = self.query(query, (sint64_run_id,))
786
+ if rows:
787
+ row = rows[0]
787
788
  return Run(
788
789
  run_id=convert_sint64_to_uint64(row["run_id"]),
789
790
  fab_id=row["fab_id"],
@@ -791,9 +792,8 @@ class SqliteState(State): # pylint: disable=R0904
791
792
  fab_hash=row["fab_hash"],
792
793
  override_config=json.loads(row["override_config"]),
793
794
  )
794
- except sqlite3.IntegrityError:
795
- log(ERROR, "`run_id` does not exist.")
796
- return None
795
+ log(ERROR, "`run_id` does not exist.")
796
+ return None
797
797
 
798
798
  def acknowledge_ping(self, node_id: int, ping_interval: float) -> bool:
799
799
  """Acknowledge a ping received from a node, serving as a heartbeat."""
@@ -28,8 +28,8 @@ from flwr.common.grpc import create_channel
28
28
  from flwr.common.logger import log
29
29
  from flwr.common.serde import fab_to_proto, user_config_to_proto
30
30
  from flwr.common.typing import Fab, UserConfig
31
- from flwr.proto.driver_pb2 import CreateRunRequest # pylint: disable=E0611
32
31
  from flwr.proto.driver_pb2_grpc import DriverStub
32
+ from flwr.proto.run_pb2 import CreateRunRequest # pylint: disable=E0611
33
33
 
34
34
  from .executor import Executor, RunTracker
35
35
 
@@ -167,6 +167,8 @@ class DeploymentEngine(Executor):
167
167
  # Execute the command
168
168
  proc = subprocess.Popen( # pylint: disable=consider-using-with
169
169
  command,
170
+ stdout=subprocess.PIPE,
171
+ stderr=subprocess.PIPE,
170
172
  text=True,
171
173
  )
172
174
  log(INFO, "Started run %s", str(run_id))
@@ -0,0 +1,136 @@
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
+ """SuperExec API servicer."""
16
+
17
+
18
+ import select
19
+ import sys
20
+ import threading
21
+ import time
22
+ from collections.abc import Generator
23
+ from logging import ERROR, INFO
24
+ from typing import Any
25
+
26
+ import grpc
27
+
28
+ from flwr.common.logger import log
29
+ from flwr.common.serde import user_config_from_proto
30
+ from flwr.proto import exec_pb2_grpc # pylint: disable=E0611
31
+ from flwr.proto.exec_pb2 import ( # pylint: disable=E0611
32
+ StartRunRequest,
33
+ StartRunResponse,
34
+ StreamLogsRequest,
35
+ StreamLogsResponse,
36
+ )
37
+
38
+ from .executor import Executor, RunTracker
39
+
40
+ SELECT_TIMEOUT = 1 # Timeout for selecting ready-to-read file descriptors (in seconds)
41
+
42
+
43
+ class ExecServicer(exec_pb2_grpc.ExecServicer):
44
+ """SuperExec API servicer."""
45
+
46
+ def __init__(self, executor: Executor) -> None:
47
+ self.executor = executor
48
+ self.runs: dict[int, RunTracker] = {}
49
+
50
+ def StartRun(
51
+ self, request: StartRunRequest, context: grpc.ServicerContext
52
+ ) -> StartRunResponse:
53
+ """Create run ID."""
54
+ log(INFO, "ExecServicer.StartRun")
55
+
56
+ run = self.executor.start_run(
57
+ request.fab.content,
58
+ user_config_from_proto(request.override_config),
59
+ user_config_from_proto(request.federation_config),
60
+ )
61
+
62
+ if run is None:
63
+ log(ERROR, "Executor failed to start run")
64
+ return StartRunResponse()
65
+
66
+ self.runs[run.run_id] = run
67
+
68
+ # Start a background thread to capture the log output
69
+ capture_thread = threading.Thread(
70
+ target=_capture_logs, args=(run,), daemon=True
71
+ )
72
+ capture_thread.start()
73
+
74
+ return StartRunResponse(run_id=run.run_id)
75
+
76
+ def StreamLogs( # pylint: disable=C0103
77
+ self, request: StreamLogsRequest, context: grpc.ServicerContext
78
+ ) -> Generator[StreamLogsResponse, Any, None]:
79
+ """Get logs."""
80
+ log(INFO, "ExecServicer.StreamLogs")
81
+
82
+ # Exit if `run_id` not found
83
+ if request.run_id not in self.runs:
84
+ context.abort(grpc.StatusCode.NOT_FOUND, "Run ID not found")
85
+
86
+ last_sent_index = 0
87
+ while context.is_active():
88
+ # Yield n'th row of logs, if n'th row < len(logs)
89
+ logs = self.runs[request.run_id].logs
90
+ for i in range(last_sent_index, len(logs)):
91
+ yield StreamLogsResponse(log_output=logs[i])
92
+ last_sent_index = len(logs)
93
+
94
+ # Wait for and continue to yield more log responses only if the
95
+ # run isn't completed yet. If the run is finished, the entire log
96
+ # is returned at this point and the server ends the stream.
97
+ if self.runs[request.run_id].proc.poll() is not None:
98
+ log(INFO, "All logs for run ID `%s` returned", request.run_id)
99
+ context.set_code(grpc.StatusCode.OK)
100
+ context.cancel()
101
+
102
+ time.sleep(1.0) # Sleep briefly to avoid busy waiting
103
+
104
+
105
+ def _capture_logs(
106
+ run: RunTracker,
107
+ ) -> None:
108
+ while True:
109
+ # Explicitly check if Popen.poll() is None. Required for `pytest`.
110
+ if run.proc.poll() is None:
111
+ # Select streams only when ready to read
112
+ ready_to_read, _, _ = select.select(
113
+ [run.proc.stdout, run.proc.stderr],
114
+ [],
115
+ [],
116
+ SELECT_TIMEOUT,
117
+ )
118
+ # Read from std* and append to RunTracker.logs
119
+ for stream in ready_to_read:
120
+ # Flush stdout to view output in real time
121
+ readline = stream.readline()
122
+ sys.stdout.write(readline)
123
+ sys.stdout.flush()
124
+ # Append to logs
125
+ line = readline.rstrip()
126
+ if line:
127
+ run.logs.append(f"{line}")
128
+
129
+ # Close std* to prevent blocking
130
+ elif run.proc.poll() is not None:
131
+ log(INFO, "Subprocess finished, exiting log capture")
132
+ if run.proc.stdout:
133
+ run.proc.stdout.close()
134
+ if run.proc.stderr:
135
+ run.proc.stderr.close()
136
+ break