flwr 1.14.0__py3-none-any.whl → 1.15.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. flwr/cli/auth_plugin/__init__.py +31 -0
  2. flwr/cli/auth_plugin/oidc_cli_plugin.py +150 -0
  3. flwr/cli/cli_user_auth_interceptor.py +6 -2
  4. flwr/cli/config_utils.py +24 -147
  5. flwr/cli/constant.py +27 -0
  6. flwr/cli/install.py +1 -1
  7. flwr/cli/log.py +18 -3
  8. flwr/cli/login/login.py +43 -8
  9. flwr/cli/ls.py +14 -5
  10. flwr/cli/new/templates/app/README.md.tpl +3 -2
  11. flwr/cli/new/templates/app/pyproject.baseline.toml.tpl +4 -4
  12. flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +2 -2
  13. flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +4 -4
  14. flwr/cli/new/templates/app/pyproject.jax.toml.tpl +2 -2
  15. flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +2 -2
  16. flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +2 -2
  17. flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +4 -4
  18. flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +3 -3
  19. flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +2 -2
  20. flwr/cli/run/run.py +21 -11
  21. flwr/cli/stop.py +13 -4
  22. flwr/cli/utils.py +54 -40
  23. flwr/client/app.py +36 -48
  24. flwr/client/clientapp/app.py +19 -25
  25. flwr/client/clientapp/utils.py +1 -1
  26. flwr/client/grpc_client/connection.py +1 -12
  27. flwr/client/grpc_rere_client/client_interceptor.py +19 -119
  28. flwr/client/grpc_rere_client/connection.py +46 -36
  29. flwr/client/grpc_rere_client/grpc_adapter.py +12 -12
  30. flwr/client/message_handler/task_handler.py +0 -17
  31. flwr/client/rest_client/connection.py +34 -26
  32. flwr/client/supernode/app.py +18 -72
  33. flwr/common/args.py +25 -47
  34. flwr/common/auth_plugin/auth_plugin.py +34 -23
  35. flwr/common/config.py +166 -16
  36. flwr/common/constant.py +22 -9
  37. flwr/common/differential_privacy.py +2 -1
  38. flwr/common/exit/__init__.py +24 -0
  39. flwr/common/exit/exit.py +99 -0
  40. flwr/common/exit/exit_code.py +93 -0
  41. flwr/common/exit_handlers.py +24 -10
  42. flwr/common/grpc.py +167 -4
  43. flwr/common/logger.py +26 -7
  44. flwr/common/record/recordset.py +1 -1
  45. flwr/common/secure_aggregation/crypto/symmetric_encryption.py +45 -0
  46. flwr/common/serde.py +6 -4
  47. flwr/common/typing.py +20 -0
  48. flwr/proto/clientappio_pb2.py +1 -1
  49. flwr/proto/error_pb2.py +1 -1
  50. flwr/proto/exec_pb2.py +13 -25
  51. flwr/proto/exec_pb2.pyi +27 -54
  52. flwr/proto/fab_pb2.py +1 -1
  53. flwr/proto/fleet_pb2.py +31 -31
  54. flwr/proto/fleet_pb2.pyi +23 -23
  55. flwr/proto/fleet_pb2_grpc.py +30 -30
  56. flwr/proto/fleet_pb2_grpc.pyi +20 -20
  57. flwr/proto/grpcadapter_pb2.py +1 -1
  58. flwr/proto/log_pb2.py +1 -1
  59. flwr/proto/message_pb2.py +1 -1
  60. flwr/proto/node_pb2.py +3 -3
  61. flwr/proto/node_pb2.pyi +1 -4
  62. flwr/proto/recordset_pb2.py +1 -1
  63. flwr/proto/run_pb2.py +1 -1
  64. flwr/proto/serverappio_pb2.py +24 -25
  65. flwr/proto/serverappio_pb2.pyi +26 -32
  66. flwr/proto/serverappio_pb2_grpc.py +28 -28
  67. flwr/proto/serverappio_pb2_grpc.pyi +16 -16
  68. flwr/proto/simulationio_pb2.py +1 -1
  69. flwr/proto/task_pb2.py +1 -1
  70. flwr/proto/transport_pb2.py +1 -1
  71. flwr/server/app.py +116 -128
  72. flwr/server/compat/app_utils.py +0 -1
  73. flwr/server/compat/driver_client_proxy.py +1 -2
  74. flwr/server/driver/grpc_driver.py +32 -27
  75. flwr/server/driver/inmemory_driver.py +2 -1
  76. flwr/server/serverapp/app.py +12 -10
  77. flwr/server/superlink/driver/serverappio_grpc.py +1 -1
  78. flwr/server/superlink/driver/serverappio_servicer.py +74 -48
  79. flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +20 -88
  80. flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +2 -165
  81. flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +25 -24
  82. flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +97 -168
  83. flwr/server/superlink/fleet/message_handler/message_handler.py +37 -24
  84. flwr/server/superlink/fleet/rest_rere/rest_api.py +16 -18
  85. flwr/server/superlink/fleet/vce/vce_api.py +2 -2
  86. flwr/server/superlink/linkstate/in_memory_linkstate.py +45 -75
  87. flwr/server/superlink/linkstate/linkstate.py +17 -38
  88. flwr/server/superlink/linkstate/sqlite_linkstate.py +81 -145
  89. flwr/server/superlink/linkstate/utils.py +18 -8
  90. flwr/server/superlink/simulation/simulationio_grpc.py +1 -1
  91. flwr/server/utils/validator.py +9 -34
  92. flwr/simulation/app.py +4 -6
  93. flwr/simulation/legacy_app.py +4 -2
  94. flwr/simulation/run_simulation.py +1 -1
  95. flwr/simulation/simulationio_connection.py +2 -1
  96. flwr/superexec/exec_grpc.py +1 -1
  97. flwr/superexec/exec_servicer.py +23 -2
  98. {flwr-1.14.0.dist-info → flwr-1.15.0.dist-info}/METADATA +8 -8
  99. {flwr-1.14.0.dist-info → flwr-1.15.0.dist-info}/RECORD +102 -96
  100. {flwr-1.14.0.dist-info → flwr-1.15.0.dist-info}/LICENSE +0 -0
  101. {flwr-1.14.0.dist-info → flwr-1.15.0.dist-info}/WHEEL +0 -0
  102. {flwr-1.14.0.dist-info → flwr-1.15.0.dist-info}/entry_points.txt +0 -0
@@ -7,7 +7,6 @@ import flwr.proto.fab_pb2
7
7
  import flwr.proto.message_pb2
8
8
  import flwr.proto.node_pb2
9
9
  import flwr.proto.run_pb2
10
- import flwr.proto.task_pb2
11
10
  import google.protobuf.descriptor
12
11
  import google.protobuf.internal.containers
13
12
  import google.protobuf.message
@@ -40,66 +39,61 @@ class GetNodesResponse(google.protobuf.message.Message):
40
39
  def ClearField(self, field_name: typing_extensions.Literal["nodes",b"nodes"]) -> None: ...
41
40
  global___GetNodesResponse = GetNodesResponse
42
41
 
43
- class PushTaskInsRequest(google.protobuf.message.Message):
44
- """PushTaskIns messages"""
42
+ class PushInsMessagesRequest(google.protobuf.message.Message):
43
+ """PushMessages messages"""
45
44
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
46
- TASK_INS_LIST_FIELD_NUMBER: builtins.int
45
+ MESSAGES_LIST_FIELD_NUMBER: builtins.int
47
46
  RUN_ID_FIELD_NUMBER: builtins.int
48
47
  @property
49
- def task_ins_list(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[flwr.proto.task_pb2.TaskIns]: ...
48
+ def messages_list(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[flwr.proto.message_pb2.Message]: ...
50
49
  run_id: builtins.int
51
50
  def __init__(self,
52
51
  *,
53
- task_ins_list: typing.Optional[typing.Iterable[flwr.proto.task_pb2.TaskIns]] = ...,
52
+ messages_list: typing.Optional[typing.Iterable[flwr.proto.message_pb2.Message]] = ...,
54
53
  run_id: builtins.int = ...,
55
54
  ) -> None: ...
56
- def ClearField(self, field_name: typing_extensions.Literal["run_id",b"run_id","task_ins_list",b"task_ins_list"]) -> None: ...
57
- global___PushTaskInsRequest = PushTaskInsRequest
55
+ def ClearField(self, field_name: typing_extensions.Literal["messages_list",b"messages_list","run_id",b"run_id"]) -> None: ...
56
+ global___PushInsMessagesRequest = PushInsMessagesRequest
58
57
 
59
- class PushTaskInsResponse(google.protobuf.message.Message):
58
+ class PushInsMessagesResponse(google.protobuf.message.Message):
60
59
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
61
- TASK_IDS_FIELD_NUMBER: builtins.int
60
+ MESSAGE_IDS_FIELD_NUMBER: builtins.int
62
61
  @property
63
- def task_ids(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[typing.Text]: ...
62
+ def message_ids(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[typing.Text]: ...
64
63
  def __init__(self,
65
64
  *,
66
- task_ids: typing.Optional[typing.Iterable[typing.Text]] = ...,
65
+ message_ids: typing.Optional[typing.Iterable[typing.Text]] = ...,
67
66
  ) -> None: ...
68
- def ClearField(self, field_name: typing_extensions.Literal["task_ids",b"task_ids"]) -> None: ...
69
- global___PushTaskInsResponse = PushTaskInsResponse
67
+ def ClearField(self, field_name: typing_extensions.Literal["message_ids",b"message_ids"]) -> None: ...
68
+ global___PushInsMessagesResponse = PushInsMessagesResponse
70
69
 
71
- class PullTaskResRequest(google.protobuf.message.Message):
72
- """PullTaskRes messages"""
70
+ class PullResMessagesRequest(google.protobuf.message.Message):
71
+ """PullMessages messages"""
73
72
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
74
- NODE_FIELD_NUMBER: builtins.int
75
- TASK_IDS_FIELD_NUMBER: builtins.int
73
+ MESSAGE_IDS_FIELD_NUMBER: builtins.int
76
74
  RUN_ID_FIELD_NUMBER: builtins.int
77
75
  @property
78
- def node(self) -> flwr.proto.node_pb2.Node: ...
79
- @property
80
- def task_ids(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[typing.Text]: ...
76
+ def message_ids(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[typing.Text]: ...
81
77
  run_id: builtins.int
82
78
  def __init__(self,
83
79
  *,
84
- node: typing.Optional[flwr.proto.node_pb2.Node] = ...,
85
- task_ids: typing.Optional[typing.Iterable[typing.Text]] = ...,
80
+ message_ids: typing.Optional[typing.Iterable[typing.Text]] = ...,
86
81
  run_id: builtins.int = ...,
87
82
  ) -> None: ...
88
- def HasField(self, field_name: typing_extensions.Literal["node",b"node"]) -> builtins.bool: ...
89
- def ClearField(self, field_name: typing_extensions.Literal["node",b"node","run_id",b"run_id","task_ids",b"task_ids"]) -> None: ...
90
- global___PullTaskResRequest = PullTaskResRequest
83
+ def ClearField(self, field_name: typing_extensions.Literal["message_ids",b"message_ids","run_id",b"run_id"]) -> None: ...
84
+ global___PullResMessagesRequest = PullResMessagesRequest
91
85
 
92
- class PullTaskResResponse(google.protobuf.message.Message):
86
+ class PullResMessagesResponse(google.protobuf.message.Message):
93
87
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
94
- TASK_RES_LIST_FIELD_NUMBER: builtins.int
88
+ MESSAGES_LIST_FIELD_NUMBER: builtins.int
95
89
  @property
96
- def task_res_list(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[flwr.proto.task_pb2.TaskRes]: ...
90
+ def messages_list(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[flwr.proto.message_pb2.Message]: ...
97
91
  def __init__(self,
98
92
  *,
99
- task_res_list: typing.Optional[typing.Iterable[flwr.proto.task_pb2.TaskRes]] = ...,
93
+ messages_list: typing.Optional[typing.Iterable[flwr.proto.message_pb2.Message]] = ...,
100
94
  ) -> None: ...
101
- def ClearField(self, field_name: typing_extensions.Literal["task_res_list",b"task_res_list"]) -> None: ...
102
- global___PullTaskResResponse = PullTaskResResponse
95
+ def ClearField(self, field_name: typing_extensions.Literal["messages_list",b"messages_list"]) -> None: ...
96
+ global___PullResMessagesResponse = PullResMessagesResponse
103
97
 
104
98
  class PullServerAppInputsRequest(google.protobuf.message.Message):
105
99
  """PullServerAppInputs messages"""
@@ -27,15 +27,15 @@ class ServerAppIoStub(object):
27
27
  request_serializer=flwr_dot_proto_dot_serverappio__pb2.GetNodesRequest.SerializeToString,
28
28
  response_deserializer=flwr_dot_proto_dot_serverappio__pb2.GetNodesResponse.FromString,
29
29
  )
30
- self.PushTaskIns = channel.unary_unary(
31
- '/flwr.proto.ServerAppIo/PushTaskIns',
32
- request_serializer=flwr_dot_proto_dot_serverappio__pb2.PushTaskInsRequest.SerializeToString,
33
- response_deserializer=flwr_dot_proto_dot_serverappio__pb2.PushTaskInsResponse.FromString,
30
+ self.PushMessages = channel.unary_unary(
31
+ '/flwr.proto.ServerAppIo/PushMessages',
32
+ request_serializer=flwr_dot_proto_dot_serverappio__pb2.PushInsMessagesRequest.SerializeToString,
33
+ response_deserializer=flwr_dot_proto_dot_serverappio__pb2.PushInsMessagesResponse.FromString,
34
34
  )
35
- self.PullTaskRes = channel.unary_unary(
36
- '/flwr.proto.ServerAppIo/PullTaskRes',
37
- request_serializer=flwr_dot_proto_dot_serverappio__pb2.PullTaskResRequest.SerializeToString,
38
- response_deserializer=flwr_dot_proto_dot_serverappio__pb2.PullTaskResResponse.FromString,
35
+ self.PullMessages = channel.unary_unary(
36
+ '/flwr.proto.ServerAppIo/PullMessages',
37
+ request_serializer=flwr_dot_proto_dot_serverappio__pb2.PullResMessagesRequest.SerializeToString,
38
+ response_deserializer=flwr_dot_proto_dot_serverappio__pb2.PullResMessagesResponse.FromString,
39
39
  )
40
40
  self.GetRun = channel.unary_unary(
41
41
  '/flwr.proto.ServerAppIo/GetRun',
@@ -91,15 +91,15 @@ class ServerAppIoServicer(object):
91
91
  context.set_details('Method not implemented!')
92
92
  raise NotImplementedError('Method not implemented!')
93
93
 
94
- def PushTaskIns(self, request, context):
95
- """Create one or more tasks
94
+ def PushMessages(self, request, context):
95
+ """Create one or more messages
96
96
  """
97
97
  context.set_code(grpc.StatusCode.UNIMPLEMENTED)
98
98
  context.set_details('Method not implemented!')
99
99
  raise NotImplementedError('Method not implemented!')
100
100
 
101
- def PullTaskRes(self, request, context):
102
- """Get task results
101
+ def PullMessages(self, request, context):
102
+ """Get message results
103
103
  """
104
104
  context.set_code(grpc.StatusCode.UNIMPLEMENTED)
105
105
  context.set_details('Method not implemented!')
@@ -167,15 +167,15 @@ def add_ServerAppIoServicer_to_server(servicer, server):
167
167
  request_deserializer=flwr_dot_proto_dot_serverappio__pb2.GetNodesRequest.FromString,
168
168
  response_serializer=flwr_dot_proto_dot_serverappio__pb2.GetNodesResponse.SerializeToString,
169
169
  ),
170
- 'PushTaskIns': grpc.unary_unary_rpc_method_handler(
171
- servicer.PushTaskIns,
172
- request_deserializer=flwr_dot_proto_dot_serverappio__pb2.PushTaskInsRequest.FromString,
173
- response_serializer=flwr_dot_proto_dot_serverappio__pb2.PushTaskInsResponse.SerializeToString,
170
+ 'PushMessages': grpc.unary_unary_rpc_method_handler(
171
+ servicer.PushMessages,
172
+ request_deserializer=flwr_dot_proto_dot_serverappio__pb2.PushInsMessagesRequest.FromString,
173
+ response_serializer=flwr_dot_proto_dot_serverappio__pb2.PushInsMessagesResponse.SerializeToString,
174
174
  ),
175
- 'PullTaskRes': grpc.unary_unary_rpc_method_handler(
176
- servicer.PullTaskRes,
177
- request_deserializer=flwr_dot_proto_dot_serverappio__pb2.PullTaskResRequest.FromString,
178
- response_serializer=flwr_dot_proto_dot_serverappio__pb2.PullTaskResResponse.SerializeToString,
175
+ 'PullMessages': grpc.unary_unary_rpc_method_handler(
176
+ servicer.PullMessages,
177
+ request_deserializer=flwr_dot_proto_dot_serverappio__pb2.PullResMessagesRequest.FromString,
178
+ response_serializer=flwr_dot_proto_dot_serverappio__pb2.PullResMessagesResponse.SerializeToString,
179
179
  ),
180
180
  'GetRun': grpc.unary_unary_rpc_method_handler(
181
181
  servicer.GetRun,
@@ -257,7 +257,7 @@ class ServerAppIo(object):
257
257
  insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
258
258
 
259
259
  @staticmethod
260
- def PushTaskIns(request,
260
+ def PushMessages(request,
261
261
  target,
262
262
  options=(),
263
263
  channel_credentials=None,
@@ -267,14 +267,14 @@ class ServerAppIo(object):
267
267
  wait_for_ready=None,
268
268
  timeout=None,
269
269
  metadata=None):
270
- return grpc.experimental.unary_unary(request, target, '/flwr.proto.ServerAppIo/PushTaskIns',
271
- flwr_dot_proto_dot_serverappio__pb2.PushTaskInsRequest.SerializeToString,
272
- flwr_dot_proto_dot_serverappio__pb2.PushTaskInsResponse.FromString,
270
+ return grpc.experimental.unary_unary(request, target, '/flwr.proto.ServerAppIo/PushMessages',
271
+ flwr_dot_proto_dot_serverappio__pb2.PushInsMessagesRequest.SerializeToString,
272
+ flwr_dot_proto_dot_serverappio__pb2.PushInsMessagesResponse.FromString,
273
273
  options, channel_credentials,
274
274
  insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
275
275
 
276
276
  @staticmethod
277
- def PullTaskRes(request,
277
+ def PullMessages(request,
278
278
  target,
279
279
  options=(),
280
280
  channel_credentials=None,
@@ -284,9 +284,9 @@ class ServerAppIo(object):
284
284
  wait_for_ready=None,
285
285
  timeout=None,
286
286
  metadata=None):
287
- return grpc.experimental.unary_unary(request, target, '/flwr.proto.ServerAppIo/PullTaskRes',
288
- flwr_dot_proto_dot_serverappio__pb2.PullTaskResRequest.SerializeToString,
289
- flwr_dot_proto_dot_serverappio__pb2.PullTaskResResponse.FromString,
287
+ return grpc.experimental.unary_unary(request, target, '/flwr.proto.ServerAppIo/PullMessages',
288
+ flwr_dot_proto_dot_serverappio__pb2.PullResMessagesRequest.SerializeToString,
289
+ flwr_dot_proto_dot_serverappio__pb2.PullResMessagesResponse.FromString,
290
290
  options, channel_credentials,
291
291
  insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
292
292
 
@@ -21,15 +21,15 @@ class ServerAppIoStub:
21
21
  flwr.proto.serverappio_pb2.GetNodesResponse]
22
22
  """Return a set of nodes"""
23
23
 
24
- PushTaskIns: grpc.UnaryUnaryMultiCallable[
25
- flwr.proto.serverappio_pb2.PushTaskInsRequest,
26
- flwr.proto.serverappio_pb2.PushTaskInsResponse]
27
- """Create one or more tasks"""
24
+ PushMessages: grpc.UnaryUnaryMultiCallable[
25
+ flwr.proto.serverappio_pb2.PushInsMessagesRequest,
26
+ flwr.proto.serverappio_pb2.PushInsMessagesResponse]
27
+ """Create one or more messages"""
28
28
 
29
- PullTaskRes: grpc.UnaryUnaryMultiCallable[
30
- flwr.proto.serverappio_pb2.PullTaskResRequest,
31
- flwr.proto.serverappio_pb2.PullTaskResResponse]
32
- """Get task results"""
29
+ PullMessages: grpc.UnaryUnaryMultiCallable[
30
+ flwr.proto.serverappio_pb2.PullResMessagesRequest,
31
+ flwr.proto.serverappio_pb2.PullResMessagesResponse]
32
+ """Get message results"""
33
33
 
34
34
  GetRun: grpc.UnaryUnaryMultiCallable[
35
35
  flwr.proto.run_pb2.GetRunRequest,
@@ -85,19 +85,19 @@ class ServerAppIoServicer(metaclass=abc.ABCMeta):
85
85
  pass
86
86
 
87
87
  @abc.abstractmethod
88
- def PushTaskIns(self,
89
- request: flwr.proto.serverappio_pb2.PushTaskInsRequest,
88
+ def PushMessages(self,
89
+ request: flwr.proto.serverappio_pb2.PushInsMessagesRequest,
90
90
  context: grpc.ServicerContext,
91
- ) -> flwr.proto.serverappio_pb2.PushTaskInsResponse:
92
- """Create one or more tasks"""
91
+ ) -> flwr.proto.serverappio_pb2.PushInsMessagesResponse:
92
+ """Create one or more messages"""
93
93
  pass
94
94
 
95
95
  @abc.abstractmethod
96
- def PullTaskRes(self,
97
- request: flwr.proto.serverappio_pb2.PullTaskResRequest,
96
+ def PullMessages(self,
97
+ request: flwr.proto.serverappio_pb2.PullResMessagesRequest,
98
98
  context: grpc.ServicerContext,
99
- ) -> flwr.proto.serverappio_pb2.PullTaskResResponse:
100
- """Get task results"""
99
+ ) -> flwr.proto.serverappio_pb2.PullResMessagesResponse:
100
+ """Get message results"""
101
101
  pass
102
102
 
103
103
  @abc.abstractmethod
@@ -1,7 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  # Generated by the protocol buffer compiler. DO NOT EDIT!
3
3
  # source: flwr/proto/simulationio.proto
4
- # Protobuf Python Version: 4.25.0
4
+ # Protobuf Python Version: 4.25.1
5
5
  """Generated protocol buffer code."""
6
6
  from google.protobuf import descriptor as _descriptor
7
7
  from google.protobuf import descriptor_pool as _descriptor_pool
flwr/proto/task_pb2.py CHANGED
@@ -1,7 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  # Generated by the protocol buffer compiler. DO NOT EDIT!
3
3
  # source: flwr/proto/task.proto
4
- # Protobuf Python Version: 4.25.0
4
+ # Protobuf Python Version: 4.25.1
5
5
  """Generated protocol buffer code."""
6
6
  from google.protobuf import descriptor as _descriptor
7
7
  from google.protobuf import descriptor_pool as _descriptor_pool
@@ -1,7 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  # Generated by the protocol buffer compiler. DO NOT EDIT!
3
3
  # source: flwr/proto/transport.proto
4
- # Protobuf Python Version: 4.25.0
4
+ # Protobuf Python Version: 4.25.1
5
5
  """Generated protocol buffer code."""
6
6
  from google.protobuf import descriptor as _descriptor
7
7
  from google.protobuf import descriptor_pool as _descriptor_pool