flwr-nightly 1.13.0.dev20241021__tar.gz → 1.13.0.dev20241111__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 (336) hide show
  1. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/PKG-INFO +5 -4
  2. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/pyproject.toml +15 -11
  3. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/cli/build.py +2 -2
  4. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/cli/config_utils.py +97 -0
  5. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/cli/log.py +63 -97
  6. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl +1 -1
  7. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +1 -0
  8. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +1 -1
  9. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/cli/run/run.py +34 -88
  10. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/client/app.py +23 -20
  11. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/client/clientapp/app.py +22 -18
  12. flwr_nightly-1.13.0.dev20241111/src/py/flwr/client/nodestate/__init__.py +25 -0
  13. flwr_nightly-1.13.0.dev20241111/src/py/flwr/client/nodestate/in_memory_nodestate.py +38 -0
  14. flwr_nightly-1.13.0.dev20241111/src/py/flwr/client/nodestate/nodestate.py +30 -0
  15. flwr_nightly-1.13.0.dev20241111/src/py/flwr/client/nodestate/nodestate_factory.py +37 -0
  16. flwr_nightly-1.13.0.dev20241021/src/py/flwr/client/node_state.py → flwr_nightly-1.13.0.dev20241111/src/py/flwr/client/run_info_store.py +4 -3
  17. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/client/supernode/app.py +6 -8
  18. flwr_nightly-1.13.0.dev20241111/src/py/flwr/common/args.py +83 -0
  19. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/common/config.py +10 -0
  20. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/common/constant.py +39 -5
  21. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/common/context.py +9 -4
  22. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/common/date.py +3 -3
  23. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/common/logger.py +108 -1
  24. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/common/object_ref.py +47 -16
  25. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/common/serde.py +24 -0
  26. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/common/telemetry.py +0 -6
  27. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/common/typing.py +10 -1
  28. flwr_nightly-1.13.0.dev20241111/src/py/flwr/proto/exec_pb2.py +41 -0
  29. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/proto/exec_pb2.pyi +14 -22
  30. flwr_nightly-1.13.0.dev20241111/src/py/flwr/proto/log_pb2.py +29 -0
  31. flwr_nightly-1.13.0.dev20241111/src/py/flwr/proto/log_pb2.pyi +39 -0
  32. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/proto/message_pb2.py +8 -8
  33. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/proto/message_pb2.pyi +4 -1
  34. flwr_nightly-1.13.0.dev20241111/src/py/flwr/proto/run_pb2.py +64 -0
  35. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/proto/run_pb2.pyi +26 -0
  36. flwr_nightly-1.13.0.dev20241111/src/py/flwr/proto/serverappio_pb2.py +52 -0
  37. flwr_nightly-1.13.0.dev20241021/src/py/flwr/proto/driver_pb2.pyi → flwr_nightly-1.13.0.dev20241111/src/py/flwr/proto/serverappio_pb2.pyi +54 -0
  38. flwr_nightly-1.13.0.dev20241111/src/py/flwr/proto/serverappio_pb2_grpc.py +376 -0
  39. flwr_nightly-1.13.0.dev20241111/src/py/flwr/proto/serverappio_pb2_grpc.pyi +147 -0
  40. flwr_nightly-1.13.0.dev20241111/src/py/flwr/proto/simulationio_pb2.py +38 -0
  41. flwr_nightly-1.13.0.dev20241111/src/py/flwr/proto/simulationio_pb2.pyi +65 -0
  42. flwr_nightly-1.13.0.dev20241111/src/py/flwr/proto/simulationio_pb2_grpc.py +205 -0
  43. flwr_nightly-1.13.0.dev20241111/src/py/flwr/proto/simulationio_pb2_grpc.pyi +81 -0
  44. flwr_nightly-1.13.0.dev20241111/src/py/flwr/proto/task_pb2_grpc.py +4 -0
  45. flwr_nightly-1.13.0.dev20241111/src/py/flwr/proto/task_pb2_grpc.pyi +4 -0
  46. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/app.py +272 -105
  47. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/driver/driver.py +15 -1
  48. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/driver/grpc_driver.py +25 -36
  49. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/driver/inmemory_driver.py +6 -16
  50. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/run_serverapp.py +29 -23
  51. flwr_nightly-1.13.0.dev20241111/src/py/flwr/server/serverapp/__init__.py +22 -0
  52. flwr_nightly-1.13.0.dev20241111/src/py/flwr/server/serverapp/app.py +214 -0
  53. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/strategy/aggregate.py +4 -4
  54. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/strategy/fedadam.py +11 -1
  55. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/superlink/driver/__init__.py +1 -1
  56. flwr_nightly-1.13.0.dev20241021/src/py/flwr/server/superlink/driver/driver_grpc.py → flwr_nightly-1.13.0.dev20241111/src/py/flwr/server/superlink/driver/serverappio_grpc.py +19 -16
  57. flwr_nightly-1.13.0.dev20241021/src/py/flwr/server/superlink/driver/driver_servicer.py → flwr_nightly-1.13.0.dev20241111/src/py/flwr/server/superlink/driver/serverappio_servicer.py +125 -39
  58. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +4 -2
  59. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +2 -2
  60. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +4 -2
  61. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +2 -2
  62. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/superlink/fleet/message_handler/message_handler.py +7 -7
  63. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +7 -7
  64. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/superlink/fleet/vce/vce_api.py +23 -23
  65. flwr_nightly-1.13.0.dev20241111/src/py/flwr/server/superlink/linkstate/__init__.py +28 -0
  66. flwr_nightly-1.13.0.dev20241021/src/py/flwr/server/superlink/state/in_memory_state.py → flwr_nightly-1.13.0.dev20241111/src/py/flwr/server/superlink/linkstate/in_memory_linkstate.py +184 -36
  67. flwr_nightly-1.13.0.dev20241021/src/py/flwr/server/superlink/state/state.py → flwr_nightly-1.13.0.dev20241111/src/py/flwr/server/superlink/linkstate/linkstate.py +149 -19
  68. flwr_nightly-1.13.0.dev20241021/src/py/flwr/server/superlink/state/state_factory.py → flwr_nightly-1.13.0.dev20241111/src/py/flwr/server/superlink/linkstate/linkstate_factory.py +9 -9
  69. flwr_nightly-1.13.0.dev20241021/src/py/flwr/server/superlink/state/sqlite_state.py → flwr_nightly-1.13.0.dev20241111/src/py/flwr/server/superlink/linkstate/sqlite_linkstate.py +306 -65
  70. {flwr_nightly-1.13.0.dev20241021/src/py/flwr/server/superlink/state → flwr_nightly-1.13.0.dev20241111/src/py/flwr/server/superlink/linkstate}/utils.py +81 -30
  71. flwr_nightly-1.13.0.dev20241111/src/py/flwr/server/superlink/simulation/__init__.py +15 -0
  72. flwr_nightly-1.13.0.dev20241111/src/py/flwr/server/superlink/simulation/simulationio_grpc.py +65 -0
  73. flwr_nightly-1.13.0.dev20241111/src/py/flwr/server/superlink/simulation/simulationio_servicer.py +153 -0
  74. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/simulation/__init__.py +5 -1
  75. flwr_nightly-1.13.0.dev20241111/src/py/flwr/simulation/app.py +310 -0
  76. flwr_nightly-1.13.0.dev20241021/src/py/flwr/simulation/app.py → flwr_nightly-1.13.0.dev20241111/src/py/flwr/simulation/legacy_app.py +2 -2
  77. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/simulation/ray_transport/ray_client_proxy.py +2 -2
  78. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/simulation/run_simulation.py +57 -131
  79. flwr_nightly-1.13.0.dev20241111/src/py/flwr/simulation/simulationio_connection.py +86 -0
  80. flwr_nightly-1.13.0.dev20241111/src/py/flwr/superexec/app.py +58 -0
  81. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/superexec/deployment.py +61 -66
  82. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/superexec/exec_grpc.py +15 -8
  83. flwr_nightly-1.13.0.dev20241111/src/py/flwr/superexec/exec_servicer.py +107 -0
  84. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/superexec/executor.py +26 -7
  85. flwr_nightly-1.13.0.dev20241111/src/py/flwr/superexec/simulation.py +159 -0
  86. flwr_nightly-1.13.0.dev20241021/src/py/flwr/client/node_state_tests.py +0 -66
  87. flwr_nightly-1.13.0.dev20241021/src/py/flwr/proto/driver_pb2.py +0 -42
  88. flwr_nightly-1.13.0.dev20241021/src/py/flwr/proto/driver_pb2_grpc.py +0 -239
  89. flwr_nightly-1.13.0.dev20241021/src/py/flwr/proto/driver_pb2_grpc.pyi +0 -94
  90. flwr_nightly-1.13.0.dev20241021/src/py/flwr/proto/exec_pb2.py +0 -44
  91. flwr_nightly-1.13.0.dev20241021/src/py/flwr/proto/run_pb2.py +0 -59
  92. flwr_nightly-1.13.0.dev20241021/src/py/flwr/server/superlink/state/__init__.py +0 -28
  93. flwr_nightly-1.13.0.dev20241021/src/py/flwr/superexec/app.py +0 -186
  94. flwr_nightly-1.13.0.dev20241021/src/py/flwr/superexec/exec_servicer.py +0 -136
  95. flwr_nightly-1.13.0.dev20241021/src/py/flwr/superexec/simulation.py +0 -212
  96. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/LICENSE +0 -0
  97. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/README.md +0 -0
  98. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/__init__.py +0 -0
  99. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/cli/__init__.py +0 -0
  100. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/cli/app.py +0 -0
  101. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/cli/example.py +0 -0
  102. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/cli/install.py +0 -0
  103. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/cli/new/__init__.py +0 -0
  104. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/cli/new/new.py +0 -0
  105. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/cli/new/templates/__init__.py +0 -0
  106. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/cli/new/templates/app/.gitignore.tpl +0 -0
  107. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/cli/new/templates/app/LICENSE.tpl +0 -0
  108. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/cli/new/templates/app/README.baseline.md.tpl +0 -0
  109. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/cli/new/templates/app/README.flowertune.md.tpl +0 -0
  110. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/cli/new/templates/app/README.md.tpl +0 -0
  111. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/cli/new/templates/app/__init__.py +0 -0
  112. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/cli/new/templates/app/code/__init__.baseline.py.tpl +0 -0
  113. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/cli/new/templates/app/code/__init__.py +0 -0
  114. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/cli/new/templates/app/code/__init__.py.tpl +0 -0
  115. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/cli/new/templates/app/code/client.baseline.py.tpl +0 -0
  116. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/cli/new/templates/app/code/client.huggingface.py.tpl +0 -0
  117. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/cli/new/templates/app/code/client.jax.py.tpl +0 -0
  118. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/cli/new/templates/app/code/client.mlx.py.tpl +0 -0
  119. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/cli/new/templates/app/code/client.numpy.py.tpl +0 -0
  120. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/cli/new/templates/app/code/client.pytorch.py.tpl +0 -0
  121. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/cli/new/templates/app/code/client.sklearn.py.tpl +0 -0
  122. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +0 -0
  123. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/cli/new/templates/app/code/dataset.baseline.py.tpl +0 -0
  124. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/cli/new/templates/app/code/flwr_tune/__init__.py +0 -0
  125. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/cli/new/templates/app/code/flwr_tune/client_app.py.tpl +0 -0
  126. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl +0 -0
  127. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/cli/new/templates/app/code/flwr_tune/server_app.py.tpl +0 -0
  128. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/cli/new/templates/app/code/flwr_tune/strategy.py.tpl +0 -0
  129. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/cli/new/templates/app/code/model.baseline.py.tpl +0 -0
  130. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/cli/new/templates/app/code/server.baseline.py.tpl +0 -0
  131. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/cli/new/templates/app/code/server.huggingface.py.tpl +0 -0
  132. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/cli/new/templates/app/code/server.jax.py.tpl +0 -0
  133. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/cli/new/templates/app/code/server.mlx.py.tpl +0 -0
  134. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/cli/new/templates/app/code/server.numpy.py.tpl +0 -0
  135. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/cli/new/templates/app/code/server.pytorch.py.tpl +0 -0
  136. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/cli/new/templates/app/code/server.sklearn.py.tpl +0 -0
  137. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +0 -0
  138. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/cli/new/templates/app/code/strategy.baseline.py.tpl +0 -0
  139. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/cli/new/templates/app/code/task.huggingface.py.tpl +0 -0
  140. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/cli/new/templates/app/code/task.jax.py.tpl +0 -0
  141. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/cli/new/templates/app/code/task.mlx.py.tpl +0 -0
  142. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/cli/new/templates/app/code/task.numpy.py.tpl +0 -0
  143. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/cli/new/templates/app/code/task.pytorch.py.tpl +0 -0
  144. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/cli/new/templates/app/code/task.sklearn.py.tpl +0 -0
  145. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/cli/new/templates/app/code/task.tensorflow.py.tpl +0 -0
  146. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/cli/new/templates/app/code/utils.baseline.py.tpl +0 -0
  147. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/cli/new/templates/app/pyproject.baseline.toml.tpl +0 -0
  148. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +0 -0
  149. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/cli/new/templates/app/pyproject.jax.toml.tpl +0 -0
  150. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +0 -0
  151. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +0 -0
  152. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +0 -0
  153. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +0 -0
  154. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/cli/run/__init__.py +0 -0
  155. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/cli/utils.py +0 -0
  156. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/client/__init__.py +0 -0
  157. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/client/client.py +0 -0
  158. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/client/client_app.py +0 -0
  159. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/client/clientapp/__init__.py +0 -0
  160. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/client/clientapp/clientappio_servicer.py +0 -0
  161. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/client/clientapp/utils.py +0 -0
  162. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/client/dpfedavg_numpy_client.py +0 -0
  163. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
  164. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/client/grpc_adapter_client/connection.py +0 -0
  165. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/client/grpc_client/__init__.py +0 -0
  166. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/client/grpc_client/connection.py +0 -0
  167. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/client/grpc_rere_client/__init__.py +0 -0
  168. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/client/grpc_rere_client/client_interceptor.py +0 -0
  169. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/client/grpc_rere_client/connection.py +0 -0
  170. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -0
  171. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/client/heartbeat.py +0 -0
  172. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/client/message_handler/__init__.py +0 -0
  173. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/client/message_handler/message_handler.py +0 -0
  174. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/client/message_handler/task_handler.py +0 -0
  175. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/client/mod/__init__.py +0 -0
  176. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/client/mod/centraldp_mods.py +0 -0
  177. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/client/mod/comms_mods.py +0 -0
  178. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/client/mod/localdp_mod.py +0 -0
  179. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
  180. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
  181. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
  182. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/client/mod/utils.py +0 -0
  183. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/client/numpy_client.py +0 -0
  184. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/client/rest_client/__init__.py +0 -0
  185. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/client/rest_client/connection.py +0 -0
  186. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/client/supernode/__init__.py +0 -0
  187. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/client/typing.py +0 -0
  188. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/common/__init__.py +0 -0
  189. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/common/address.py +0 -0
  190. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/common/differential_privacy.py +0 -0
  191. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/common/differential_privacy_constants.py +0 -0
  192. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/common/dp.py +0 -0
  193. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/common/exit_handlers.py +0 -0
  194. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/common/grpc.py +0 -0
  195. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/common/message.py +0 -0
  196. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/common/parameter.py +0 -0
  197. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/common/pyproject.py +0 -0
  198. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/common/record/__init__.py +0 -0
  199. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/common/record/configsrecord.py +0 -0
  200. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/common/record/conversion_utils.py +0 -0
  201. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/common/record/metricsrecord.py +0 -0
  202. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/common/record/parametersrecord.py +0 -0
  203. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/common/record/recordset.py +0 -0
  204. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/common/record/typeddict.py +0 -0
  205. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/common/recordset_compat.py +0 -0
  206. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/common/retry_invoker.py +0 -0
  207. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/common/secure_aggregation/__init__.py +0 -0
  208. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
  209. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
  210. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
  211. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
  212. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/common/secure_aggregation/quantization.py +0 -0
  213. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
  214. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
  215. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/common/version.py +0 -0
  216. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/proto/__init__.py +0 -0
  217. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/proto/clientappio_pb2.py +0 -0
  218. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/proto/clientappio_pb2.pyi +0 -0
  219. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/proto/clientappio_pb2_grpc.py +0 -0
  220. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/proto/clientappio_pb2_grpc.pyi +0 -0
  221. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/proto/common_pb2.py +0 -0
  222. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/proto/common_pb2.pyi +0 -0
  223. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/proto/common_pb2_grpc.py +0 -0
  224. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/proto/common_pb2_grpc.pyi +0 -0
  225. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/proto/control_pb2.py +0 -0
  226. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/proto/control_pb2.pyi +0 -0
  227. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/proto/control_pb2_grpc.py +0 -0
  228. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/proto/control_pb2_grpc.pyi +0 -0
  229. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/proto/error_pb2.py +0 -0
  230. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/proto/error_pb2.pyi +0 -0
  231. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/proto/error_pb2_grpc.py +0 -0
  232. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/proto/error_pb2_grpc.pyi +0 -0
  233. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/proto/exec_pb2_grpc.py +0 -0
  234. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/proto/exec_pb2_grpc.pyi +0 -0
  235. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/proto/fab_pb2.py +0 -0
  236. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/proto/fab_pb2.pyi +0 -0
  237. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/proto/fab_pb2_grpc.py +0 -0
  238. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
  239. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/proto/fleet_pb2.py +0 -0
  240. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/proto/fleet_pb2.pyi +0 -0
  241. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/proto/fleet_pb2_grpc.py +0 -0
  242. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
  243. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/proto/grpcadapter_pb2.py +0 -0
  244. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
  245. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
  246. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
  247. /flwr_nightly-1.13.0.dev20241021/src/py/flwr/proto/message_pb2_grpc.py → /flwr_nightly-1.13.0.dev20241111/src/py/flwr/proto/log_pb2_grpc.py +0 -0
  248. /flwr_nightly-1.13.0.dev20241021/src/py/flwr/proto/message_pb2_grpc.pyi → /flwr_nightly-1.13.0.dev20241111/src/py/flwr/proto/log_pb2_grpc.pyi +0 -0
  249. /flwr_nightly-1.13.0.dev20241021/src/py/flwr/proto/node_pb2_grpc.py → /flwr_nightly-1.13.0.dev20241111/src/py/flwr/proto/message_pb2_grpc.py +0 -0
  250. /flwr_nightly-1.13.0.dev20241021/src/py/flwr/proto/node_pb2_grpc.pyi → /flwr_nightly-1.13.0.dev20241111/src/py/flwr/proto/message_pb2_grpc.pyi +0 -0
  251. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/proto/node_pb2.py +0 -0
  252. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/proto/node_pb2.pyi +0 -0
  253. /flwr_nightly-1.13.0.dev20241021/src/py/flwr/proto/recordset_pb2_grpc.py → /flwr_nightly-1.13.0.dev20241111/src/py/flwr/proto/node_pb2_grpc.py +0 -0
  254. /flwr_nightly-1.13.0.dev20241021/src/py/flwr/proto/recordset_pb2_grpc.pyi → /flwr_nightly-1.13.0.dev20241111/src/py/flwr/proto/node_pb2_grpc.pyi +0 -0
  255. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/proto/recordset_pb2.py +0 -0
  256. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/proto/recordset_pb2.pyi +0 -0
  257. /flwr_nightly-1.13.0.dev20241021/src/py/flwr/proto/run_pb2_grpc.py → /flwr_nightly-1.13.0.dev20241111/src/py/flwr/proto/recordset_pb2_grpc.py +0 -0
  258. /flwr_nightly-1.13.0.dev20241021/src/py/flwr/proto/run_pb2_grpc.pyi → /flwr_nightly-1.13.0.dev20241111/src/py/flwr/proto/recordset_pb2_grpc.pyi +0 -0
  259. /flwr_nightly-1.13.0.dev20241021/src/py/flwr/proto/task_pb2_grpc.py → /flwr_nightly-1.13.0.dev20241111/src/py/flwr/proto/run_pb2_grpc.py +0 -0
  260. /flwr_nightly-1.13.0.dev20241021/src/py/flwr/proto/task_pb2_grpc.pyi → /flwr_nightly-1.13.0.dev20241111/src/py/flwr/proto/run_pb2_grpc.pyi +0 -0
  261. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/proto/task_pb2.py +0 -0
  262. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/proto/task_pb2.pyi +0 -0
  263. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/proto/transport_pb2.py +0 -0
  264. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/proto/transport_pb2.pyi +0 -0
  265. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/proto/transport_pb2_grpc.py +0 -0
  266. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
  267. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/py.typed +0 -0
  268. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/__init__.py +0 -0
  269. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/client_manager.py +0 -0
  270. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/client_proxy.py +0 -0
  271. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/compat/__init__.py +0 -0
  272. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/compat/app.py +0 -0
  273. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/compat/app_utils.py +0 -0
  274. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/compat/driver_client_proxy.py +0 -0
  275. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/compat/legacy_context.py +0 -0
  276. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/criterion.py +0 -0
  277. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/driver/__init__.py +0 -0
  278. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/history.py +0 -0
  279. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/server.py +0 -0
  280. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/server_app.py +0 -0
  281. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/server_config.py +0 -0
  282. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/serverapp_components.py +0 -0
  283. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/strategy/__init__.py +0 -0
  284. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/strategy/bulyan.py +0 -0
  285. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
  286. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
  287. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
  288. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
  289. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
  290. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/strategy/fedadagrad.py +0 -0
  291. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/strategy/fedavg.py +0 -0
  292. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/strategy/fedavg_android.py +0 -0
  293. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/strategy/fedavgm.py +0 -0
  294. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/strategy/fedmedian.py +0 -0
  295. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/strategy/fedopt.py +0 -0
  296. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/strategy/fedprox.py +0 -0
  297. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
  298. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
  299. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
  300. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
  301. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/strategy/fedyogi.py +0 -0
  302. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/strategy/krum.py +0 -0
  303. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/strategy/qfedavg.py +0 -0
  304. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/strategy/strategy.py +0 -0
  305. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/superlink/__init__.py +0 -0
  306. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/superlink/ffs/__init__.py +0 -0
  307. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/superlink/ffs/disk_ffs.py +0 -0
  308. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/superlink/ffs/ffs.py +0 -0
  309. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/superlink/ffs/ffs_factory.py +0 -0
  310. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/superlink/fleet/__init__.py +0 -0
  311. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
  312. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
  313. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
  314. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
  315. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
  316. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
  317. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
  318. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
  319. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
  320. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
  321. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
  322. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +0 -0
  323. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/typing.py +0 -0
  324. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/utils/__init__.py +0 -0
  325. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/utils/tensorboard.py +0 -0
  326. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/utils/validator.py +0 -0
  327. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/workflow/__init__.py +0 -0
  328. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/workflow/constant.py +0 -0
  329. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/workflow/default_workflows.py +0 -0
  330. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
  331. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
  332. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
  333. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/simulation/ray_transport/__init__.py +0 -0
  334. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
  335. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/simulation/ray_transport/utils.py +0 -0
  336. {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241111}/src/py/flwr/superexec/__init__.py +0 -0
@@ -1,10 +1,10 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: flwr-nightly
3
- Version: 1.13.0.dev20241021
3
+ Version: 1.13.0.dev20241111
4
4
  Summary: Flower: A Friendly Federated Learning Framework
5
5
  Home-page: https://flower.ai
6
6
  License: Apache-2.0
7
- Keywords: flower,fl,federated learning,federated analytics,federated evaluation,machine learning
7
+ Keywords: Artificial Intelligence,Federated AI,Federated Analytics,Federated Evaluation,Federated Learning,Flower,Machine Learning
8
8
  Author: The Flower Authors
9
9
  Author-email: hello@flower.ai
10
10
  Requires-Python: >=3.9,<4.0
@@ -21,6 +21,7 @@ Classifier: Programming Language :: Python :: 3.10
21
21
  Classifier: Programming Language :: Python :: 3.11
22
22
  Classifier: Programming Language :: Python :: 3.12
23
23
  Classifier: Programming Language :: Python :: 3 :: Only
24
+ Classifier: Programming Language :: Python :: 3.13
24
25
  Classifier: Programming Language :: Python :: Implementation :: CPython
25
26
  Classifier: Topic :: Scientific/Engineering
26
27
  Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
@@ -32,9 +33,9 @@ Classifier: Typing :: Typed
32
33
  Provides-Extra: rest
33
34
  Provides-Extra: simulation
34
35
  Requires-Dist: cryptography (>=42.0.4,<43.0.0)
35
- Requires-Dist: grpcio (>=1.60.0,<2.0.0,!=1.64.2,!=1.65.1,!=1.65.2,!=1.65.4,!=1.65.5,!=1.66.0,!=1.66.1)
36
+ Requires-Dist: grpcio (>=1.60.0,<2.0.0,!=1.64.2,<=1.64.3)
36
37
  Requires-Dist: iterators (>=0.0.2,<0.0.3)
37
- Requires-Dist: numpy (>=1.21.0,<2.0.0)
38
+ Requires-Dist: numpy (>=1.26.0,<3.0.0)
38
39
  Requires-Dist: pathspec (>=0.12.1,<0.13.0)
39
40
  Requires-Dist: protobuf (>=4.25.2,<5.0.0)
40
41
  Requires-Dist: pycryptodome (>=3.18.0,<4.0.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.13.0.dev20241021"
7
+ version = "1.13.0.dev20241111"
8
8
  description = "Flower: A Friendly Federated Learning Framework"
9
9
  license = "Apache-2.0"
10
10
  authors = ["The Flower Authors <hello@flower.ai>"]
@@ -13,12 +13,13 @@ homepage = "https://flower.ai"
13
13
  repository = "https://github.com/adap/flower"
14
14
  documentation = "https://flower.ai"
15
15
  keywords = [
16
- "flower",
17
- "fl",
18
- "federated learning",
19
- "federated analytics",
20
- "federated evaluation",
21
- "machine learning",
16
+ "Artificial Intelligence",
17
+ "Federated AI",
18
+ "Federated Analytics",
19
+ "Federated Evaluation",
20
+ "Federated Learning",
21
+ "Flower",
22
+ "Machine Learning",
22
23
  ]
23
24
  classifiers = [
24
25
  "Development Status :: 5 - Production/Stable",
@@ -34,6 +35,7 @@ classifiers = [
34
35
  "Programming Language :: Python :: 3.10",
35
36
  "Programming Language :: Python :: 3.11",
36
37
  "Programming Language :: Python :: 3.12",
38
+ "Programming Language :: Python :: 3.13",
37
39
  "Programming Language :: Python :: Implementation :: CPython",
38
40
  "Topic :: Scientific/Engineering",
39
41
  "Topic :: Scientific/Engineering :: Artificial Intelligence",
@@ -50,21 +52,23 @@ exclude = ["src/py/**/*_test.py"]
50
52
  # `flwr` CLI
51
53
  flwr = "flwr.cli.app:app"
52
54
  # SuperExec (can run with either Deployment Engine or Simulation Engine)
53
- flower-superexec = "flwr.superexec.app:run_superexec"
55
+ flower-superexec = "flwr.superexec.app:run_superexec" # Deprecated
54
56
  # Simulation Engine
57
+ flwr-simulation = "flwr.simulation.app:flwr_simulation"
55
58
  flower-simulation = "flwr.simulation.run_simulation:run_simulation_from_cli"
56
59
  # Deployment Engine
57
60
  flower-superlink = "flwr.server.app:run_superlink"
58
61
  flower-supernode = "flwr.client.supernode.app:run_supernode"
59
- flower-server-app = "flwr.server.run_serverapp:run_server_app"
62
+ flwr-serverapp = "flwr.server.serverapp:flwr_serverapp"
63
+ flower-server-app = "flwr.server.run_serverapp:run_server_app" # Deprecated
60
64
  flwr-clientapp = "flwr.client.clientapp:flwr_clientapp"
61
65
  flower-client-app = "flwr.client.supernode:run_client_app" # Deprecated
62
66
 
63
67
  [tool.poetry.dependencies]
64
68
  python = "^3.9"
65
69
  # Mandatory dependencies
66
- numpy = "^1.21.0"
67
- grpcio = "^1.60.0,!=1.64.2,!=1.65.1,!=1.65.2,!=1.65.4,!=1.65.5,!=1.66.0,!=1.66.1"
70
+ numpy = ">=1.26.0,<3.0.0"
71
+ grpcio = "^1.60.0,!=1.64.2,<=1.64.3"
68
72
  protobuf = "^4.25.2"
69
73
  cryptography = "^42.0.4"
70
74
  pycryptodome = "^3.18.0"
@@ -81,8 +81,8 @@ def build(
81
81
  if not is_valid_project_name(app.name):
82
82
  typer.secho(
83
83
  f"❌ The project name {app.name} is invalid, "
84
- "a valid project name must start with a letter or an underscore, "
85
- "and can only contain letters, digits, and underscores.",
84
+ "a valid project name must start with a letter, "
85
+ "and can only contain letters, digits, and hyphens.",
86
86
  fg=typer.colors.RED,
87
87
  bold=True,
88
88
  )
@@ -20,6 +20,7 @@ from pathlib import Path
20
20
  from typing import IO, Any, Optional, Union, get_args
21
21
 
22
22
  import tomli
23
+ import typer
23
24
 
24
25
  from flwr.common import object_ref
25
26
  from flwr.common.typing import UserConfigValue
@@ -227,3 +228,99 @@ def load_from_string(toml_content: str) -> Optional[dict[str, Any]]:
227
228
  return data
228
229
  except tomli.TOMLDecodeError:
229
230
  return None
231
+
232
+
233
+ def validate_project_config(
234
+ config: Union[dict[str, Any], None], errors: list[str], warnings: list[str]
235
+ ) -> dict[str, Any]:
236
+ """Validate and return the Flower project configuration."""
237
+ if config is None:
238
+ typer.secho(
239
+ "Project configuration could not be loaded.\n"
240
+ "pyproject.toml is invalid:\n"
241
+ + "\n".join([f"- {line}" for line in errors]),
242
+ fg=typer.colors.RED,
243
+ bold=True,
244
+ )
245
+ raise typer.Exit(code=1)
246
+
247
+ if warnings:
248
+ typer.secho(
249
+ "Project configuration is missing the following "
250
+ "recommended properties:\n" + "\n".join([f"- {line}" for line in warnings]),
251
+ fg=typer.colors.RED,
252
+ bold=True,
253
+ )
254
+
255
+ typer.secho("Success", fg=typer.colors.GREEN)
256
+
257
+ return config
258
+
259
+
260
+ def validate_federation_in_project_config(
261
+ federation: Optional[str], config: dict[str, Any]
262
+ ) -> tuple[str, dict[str, Any]]:
263
+ """Validate the federation name in the Flower project configuration."""
264
+ federation = federation or config["tool"]["flwr"]["federations"].get("default")
265
+
266
+ if federation is None:
267
+ typer.secho(
268
+ "❌ No federation name was provided and the project's `pyproject.toml` "
269
+ "doesn't declare a default federation (with an Exec API address or an "
270
+ "`options.num-supernodes` value).",
271
+ fg=typer.colors.RED,
272
+ bold=True,
273
+ )
274
+ raise typer.Exit(code=1)
275
+
276
+ # Validate the federation exists in the configuration
277
+ federation_config = config["tool"]["flwr"]["federations"].get(federation)
278
+ if federation_config is None:
279
+ available_feds = {
280
+ fed for fed in config["tool"]["flwr"]["federations"] if fed != "default"
281
+ }
282
+ typer.secho(
283
+ f"❌ There is no `{federation}` federation declared in the "
284
+ "`pyproject.toml`.\n The following federations were found:\n\n"
285
+ + "\n".join(available_feds),
286
+ fg=typer.colors.RED,
287
+ bold=True,
288
+ )
289
+ raise typer.Exit(code=1)
290
+
291
+ return federation, federation_config
292
+
293
+
294
+ def validate_certificate_in_federation_config(
295
+ app: Path, federation_config: dict[str, Any]
296
+ ) -> tuple[bool, Optional[bytes]]:
297
+ """Validate the certificates in the Flower project configuration."""
298
+ insecure_str = federation_config.get("insecure")
299
+ if root_certificates := federation_config.get("root-certificates"):
300
+ root_certificates_bytes = (app / root_certificates).read_bytes()
301
+ if insecure := bool(insecure_str):
302
+ typer.secho(
303
+ "❌ `root_certificates` were provided but the `insecure` parameter "
304
+ "is set to `True`.",
305
+ fg=typer.colors.RED,
306
+ bold=True,
307
+ )
308
+ raise typer.Exit(code=1)
309
+ else:
310
+ root_certificates_bytes = None
311
+ if insecure_str is None:
312
+ typer.secho(
313
+ "❌ To disable TLS, set `insecure = true` in `pyproject.toml`.",
314
+ fg=typer.colors.RED,
315
+ bold=True,
316
+ )
317
+ raise typer.Exit(code=1)
318
+ if not (insecure := bool(insecure_str)):
319
+ typer.secho(
320
+ "❌ No certificate were given yet `insecure` is set to `False`.",
321
+ fg=typer.colors.RED,
322
+ bold=True,
323
+ )
324
+ raise typer.Exit(code=1)
325
+
326
+ return insecure, root_certificates_bytes
@@ -14,33 +14,38 @@
14
14
  # ==============================================================================
15
15
  """Flower command line interface `log` command."""
16
16
 
17
- import sys
18
17
  import time
19
18
  from logging import DEBUG, ERROR, INFO
20
19
  from pathlib import Path
21
- from typing import Annotated, Optional
20
+ from typing import Annotated, Any, Optional, cast
22
21
 
23
22
  import grpc
24
23
  import typer
25
24
 
26
- from flwr.cli.config_utils import load_and_validate
25
+ from flwr.cli.config_utils import (
26
+ load_and_validate,
27
+ validate_certificate_in_federation_config,
28
+ validate_federation_in_project_config,
29
+ validate_project_config,
30
+ )
31
+ from flwr.common.constant import CONN_RECONNECT_INTERVAL, CONN_REFRESH_PERIOD
27
32
  from flwr.common.grpc import GRPC_MAX_MESSAGE_LENGTH, create_channel
28
33
  from flwr.common.logger import log as logger
29
34
  from flwr.proto.exec_pb2 import StreamLogsRequest # pylint: disable=E0611
30
35
  from flwr.proto.exec_pb2_grpc import ExecStub
31
36
 
32
- CONN_REFRESH_PERIOD = 60 # Connection refresh period for log streaming (seconds)
33
-
34
37
 
35
38
  def start_stream(
36
39
  run_id: int, channel: grpc.Channel, refresh_period: int = CONN_REFRESH_PERIOD
37
40
  ) -> None:
38
41
  """Start log streaming for a given run ID."""
42
+ stub = ExecStub(channel)
43
+ after_timestamp = 0.0
39
44
  try:
45
+ logger(INFO, "Starting logstream for run_id `%s`", run_id)
40
46
  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)
47
+ after_timestamp = stream_logs(run_id, stub, refresh_period, after_timestamp)
48
+ time.sleep(CONN_RECONNECT_INTERVAL)
44
49
  logger(DEBUG, "Reconnecting to logstream")
45
50
  except KeyboardInterrupt:
46
51
  logger(INFO, "Exiting logstream")
@@ -54,16 +59,44 @@ def start_stream(
54
59
  channel.close()
55
60
 
56
61
 
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
+ def stream_logs(
63
+ run_id: int, stub: ExecStub, duration: int, after_timestamp: float
64
+ ) -> float:
65
+ """Stream logs from the beginning of a run with connection refresh.
66
+
67
+ Parameters
68
+ ----------
69
+ run_id : int
70
+ The identifier of the run.
71
+ stub : ExecStub
72
+ The gRPC stub to interact with the Exec service.
73
+ duration : int
74
+ The timeout duration for each stream connection in seconds.
75
+ after_timestamp : float
76
+ The timestamp to start streaming logs from.
77
+
78
+ Returns
79
+ -------
80
+ float
81
+ The latest timestamp from the streamed logs or the provided `after_timestamp`
82
+ if no logs are returned.
83
+ """
84
+ req = StreamLogsRequest(run_id=run_id, after_timestamp=after_timestamp)
85
+
86
+ latest_timestamp = 0.0
87
+ res = None
88
+ try:
89
+ for res in stub.StreamLogs(req, timeout=duration):
90
+ print(res.log_output, end="")
91
+ except grpc.RpcError as e:
92
+ # pylint: disable=E1101
93
+ if e.code() != grpc.StatusCode.DEADLINE_EXCEEDED:
94
+ raise e
95
+ finally:
96
+ if res is not None:
97
+ latest_timestamp = cast(float, res.latest_timestamp)
62
98
 
63
- for res in stub.StreamLogs(req):
64
- print(res.log_output)
65
- if time.time() - start_time > duration:
66
- break
99
+ return max(latest_timestamp, after_timestamp)
67
100
 
68
101
 
69
102
  def print_logs(run_id: int, channel: grpc.Channel, timeout: int) -> None:
@@ -124,100 +157,33 @@ def log(
124
157
 
125
158
  pyproject_path = app / "pyproject.toml" if app else None
126
159
  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)
160
+ config = validate_project_config(config, errors, warnings)
161
+ federation, federation_config = validate_federation_in_project_config(
162
+ federation, config
163
+ )
174
164
 
175
165
  if "address" not in federation_config:
176
166
  typer.secho(
177
- "❌ `flwr log` currently works with `SuperExec`. Ensure that the correct"
178
- "`SuperExec` address is provided in the `pyproject.toml`.",
167
+ "❌ `flwr log` currently works with Exec API. Ensure that the correct"
168
+ "Exec API address is provided in the `pyproject.toml`.",
179
169
  fg=typer.colors.RED,
180
170
  bold=True,
181
171
  )
182
172
  raise typer.Exit(code=1)
183
173
 
184
- _log_with_superexec(federation_config, run_id, stream)
174
+ _log_with_exec_api(app, federation_config, run_id, stream)
185
175
 
186
176
 
187
- # pylint: disable-next=too-many-branches
188
- def _log_with_superexec(
189
- federation_config: dict[str, str],
177
+ def _log_with_exec_api(
178
+ app: Path,
179
+ federation_config: dict[str, Any],
190
180
  run_id: int,
191
181
  stream: bool,
192
182
  ) -> 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
183
 
184
+ insecure, root_certificates_bytes = validate_certificate_in_federation_config(
185
+ app, federation_config
186
+ )
221
187
  channel = create_channel(
222
188
  server_address=federation_config["address"],
223
189
  insecure=insecure,
@@ -71,7 +71,7 @@ def load_data(partition_id: int, num_partitions: int, dataset_name: str):
71
71
  partitioners={"train": partitioner},
72
72
  )
73
73
  client_trainset = FDS.load_partition(partition_id, "train")
74
- client_trainset = reformat(client_trainset, llm_task="generalnlp")
74
+ client_trainset = reformat(client_trainset, llm_task="$llm_challenge_str")
75
75
  return client_trainset
76
76
 
77
77
 
@@ -10,6 +10,7 @@ license = "Apache-2.0"
10
10
  dependencies = [
11
11
  "flwr[simulation]>=1.12.0",
12
12
  "flwr-datasets>=0.3.0",
13
+ "torch==2.3.1",
13
14
  "trl==0.8.1",
14
15
  "bitsandbytes==0.43.0",
15
16
  "scipy==1.13.0",
@@ -10,7 +10,7 @@ license = "Apache-2.0"
10
10
  dependencies = [
11
11
  "flwr[simulation]>=1.12.0",
12
12
  "flwr-datasets[vision]>=0.3.0",
13
- "tensorflow>=2.11.1",
13
+ "tensorflow>=2.11.1,<2.18.0",
14
14
  ]
15
15
 
16
16
  [tool.hatch.build.targets.wheel]
@@ -16,7 +16,6 @@
16
16
 
17
17
  import json
18
18
  import subprocess
19
- import sys
20
19
  from logging import DEBUG
21
20
  from pathlib import Path
22
21
  from typing import Annotated, Any, Optional
@@ -24,11 +23,24 @@ from typing import Annotated, Any, Optional
24
23
  import typer
25
24
 
26
25
  from flwr.cli.build import build
27
- from flwr.cli.config_utils import load_and_validate
28
- from flwr.common.config import flatten_dict, parse_config_args
26
+ from flwr.cli.config_utils import (
27
+ load_and_validate,
28
+ validate_certificate_in_federation_config,
29
+ validate_federation_in_project_config,
30
+ validate_project_config,
31
+ )
32
+ from flwr.common.config import (
33
+ flatten_dict,
34
+ parse_config_args,
35
+ user_config_to_configsrecord,
36
+ )
29
37
  from flwr.common.grpc import GRPC_MAX_MESSAGE_LENGTH, create_channel
30
38
  from flwr.common.logger import log
31
- from flwr.common.serde import fab_to_proto, user_config_to_proto
39
+ from flwr.common.serde import (
40
+ configs_record_to_proto,
41
+ fab_to_proto,
42
+ user_config_to_proto,
43
+ )
32
44
  from flwr.common.typing import Fab
33
45
  from flwr.proto.exec_pb2 import StartRunRequest # pylint: disable=E0611
34
46
  from flwr.proto.exec_pb2_grpc import ExecStub
@@ -79,96 +91,28 @@ def run(
79
91
 
80
92
  pyproject_path = app / "pyproject.toml" if app else None
81
93
  config, errors, warnings = load_and_validate(path=pyproject_path)
82
-
83
- if config is None:
84
- typer.secho(
85
- "Project configuration could not be loaded.\n"
86
- "pyproject.toml is invalid:\n"
87
- + "\n".join([f"- {line}" for line in errors]),
88
- fg=typer.colors.RED,
89
- bold=True,
90
- )
91
- sys.exit()
92
-
93
- if warnings:
94
- typer.secho(
95
- "Project configuration is missing the following "
96
- "recommended properties:\n" + "\n".join([f"- {line}" for line in warnings]),
97
- fg=typer.colors.RED,
98
- bold=True,
99
- )
100
-
101
- typer.secho("Success", fg=typer.colors.GREEN)
102
-
103
- federation = federation or config["tool"]["flwr"]["federations"].get("default")
104
-
105
- if federation is None:
106
- typer.secho(
107
- "❌ No federation name was provided and the project's `pyproject.toml` "
108
- "doesn't declare a default federation (with a SuperExec address or an "
109
- "`options.num-supernodes` value).",
110
- fg=typer.colors.RED,
111
- bold=True,
112
- )
113
- raise typer.Exit(code=1)
114
-
115
- # Validate the federation exists in the configuration
116
- federation_config = config["tool"]["flwr"]["federations"].get(federation)
117
- if federation_config is None:
118
- available_feds = {
119
- fed for fed in config["tool"]["flwr"]["federations"] if fed != "default"
120
- }
121
- typer.secho(
122
- f"❌ There is no `{federation}` federation declared in "
123
- "`pyproject.toml`.\n The following federations were found:\n\n"
124
- + "\n".join(available_feds),
125
- fg=typer.colors.RED,
126
- bold=True,
127
- )
128
- raise typer.Exit(code=1)
94
+ config = validate_project_config(config, errors, warnings)
95
+ federation, federation_config = validate_federation_in_project_config(
96
+ federation, config
97
+ )
129
98
 
130
99
  if "address" in federation_config:
131
- _run_with_superexec(app, federation_config, config_overrides, stream)
100
+ _run_with_exec_api(app, federation_config, config_overrides, stream)
132
101
  else:
133
- _run_without_superexec(app, federation_config, config_overrides, federation)
102
+ _run_without_exec_api(app, federation_config, config_overrides, federation)
134
103
 
135
104
 
136
- # pylint: disable=too-many-locals
137
- def _run_with_superexec(
105
+ # pylint: disable-next=too-many-locals
106
+ def _run_with_exec_api(
138
107
  app: Path,
139
108
  federation_config: dict[str, Any],
140
109
  config_overrides: Optional[list[str]],
141
110
  stream: bool,
142
111
  ) -> None:
143
112
 
144
- insecure_str = federation_config.get("insecure")
145
- if root_certificates := federation_config.get("root-certificates"):
146
- root_certificates_bytes = (app / root_certificates).read_bytes()
147
- if insecure := bool(insecure_str):
148
- typer.secho(
149
- "❌ `root_certificates` were provided but the `insecure` parameter"
150
- "is set to `True`.",
151
- fg=typer.colors.RED,
152
- bold=True,
153
- )
154
- raise typer.Exit(code=1)
155
- else:
156
- root_certificates_bytes = None
157
- if insecure_str is None:
158
- typer.secho(
159
- "❌ To disable TLS, set `insecure = true` in `pyproject.toml`.",
160
- fg=typer.colors.RED,
161
- bold=True,
162
- )
163
- raise typer.Exit(code=1)
164
- if not (insecure := bool(insecure_str)):
165
- typer.secho(
166
- "❌ No certificate were given yet `insecure` is set to `False`.",
167
- fg=typer.colors.RED,
168
- bold=True,
169
- )
170
- raise typer.Exit(code=1)
171
-
113
+ insecure, root_certificates_bytes = validate_certificate_in_federation_config(
114
+ app, federation_config
115
+ )
172
116
  channel = create_channel(
173
117
  server_address=federation_config["address"],
174
118
  insecure=insecure,
@@ -183,16 +127,18 @@ def _run_with_superexec(
183
127
  content = Path(fab_path).read_bytes()
184
128
  fab = Fab(fab_hash, content)
185
129
 
130
+ # Construct a `ConfigsRecord` out of a flattened `UserConfig`
131
+ fed_conf = flatten_dict(federation_config.get("options", {}))
132
+ c_record = user_config_to_configsrecord(fed_conf)
133
+
186
134
  req = StartRunRequest(
187
135
  fab=fab_to_proto(fab),
188
136
  override_config=user_config_to_proto(parse_config_args(config_overrides)),
189
- federation_config=user_config_to_proto(
190
- flatten_dict(federation_config.get("options"))
191
- ),
137
+ federation_options=configs_record_to_proto(c_record),
192
138
  )
193
139
  res = stub.StartRun(req)
194
140
 
195
- # Delete FAB file once it has been sent to the SuperExec
141
+ # Delete FAB file once it has been sent to the Exec API
196
142
  Path(fab_path).unlink()
197
143
  typer.secho(f"🎊 Successfully started run {res.run_id}", fg=typer.colors.GREEN)
198
144
 
@@ -200,7 +146,7 @@ def _run_with_superexec(
200
146
  start_stream(res.run_id, channel, CONN_REFRESH_PERIOD)
201
147
 
202
148
 
203
- def _run_without_superexec(
149
+ def _run_without_exec_api(
204
150
  app: Optional[Path],
205
151
  federation_config: dict[str, Any],
206
152
  config_overrides: Optional[list[str]],