flwr-nightly 1.19.0.dev20250522__py3-none-any.whl → 1.19.0.dev20250523__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.
flwr/proto/run_pb2.py CHANGED
@@ -18,7 +18,7 @@ from flwr.proto import recorddict_pb2 as flwr_dot_proto_dot_recorddict__pb2
18
18
  from flwr.proto import transport_pb2 as flwr_dot_proto_dot_transport__pb2
19
19
 
20
20
 
21
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x14\x66lwr/proto/run.proto\x12\nflwr.proto\x1a\x14\x66lwr/proto/fab.proto\x1a\x15\x66lwr/proto/node.proto\x1a\x1b\x66lwr/proto/recorddict.proto\x1a\x1a\x66lwr/proto/transport.proto\"\xce\x02\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\x12\x12\n\npending_at\x18\x06 \x01(\t\x12\x13\n\x0bstarting_at\x18\x07 \x01(\t\x12\x12\n\nrunning_at\x18\x08 \x01(\t\x12\x13\n\x0b\x66inished_at\x18\t \x01(\t\x12%\n\x06status\x18\n \x01(\x0b\x32\x15.flwr.proto.RunStatus\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\tRunStatus\x12\x0e\n\x06status\x18\x01 \x01(\t\x12\x12\n\nsub_status\x18\x02 \x01(\t\x12\x0f\n\x07\x64\x65tails\x18\x03 \x01(\t\"\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\"?\n\rGetRunRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x0e\n\x06run_id\x18\x02 \x01(\x04\".\n\x0eGetRunResponse\x12\x1c\n\x03run\x18\x01 \x01(\x0b\x32\x0f.flwr.proto.Run\"S\n\x16UpdateRunStatusRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\x12)\n\nrun_status\x18\x02 \x01(\x0b\x32\x15.flwr.proto.RunStatus\"\x19\n\x17UpdateRunStatusResponse\"F\n\x13GetRunStatusRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x0f\n\x07run_ids\x18\x02 \x03(\x04\"\xb1\x01\n\x14GetRunStatusResponse\x12L\n\x0frun_status_dict\x18\x01 \x03(\x0b\x32\x33.flwr.proto.GetRunStatusResponse.RunStatusDictEntry\x1aK\n\x12RunStatusDictEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12$\n\x05value\x18\x02 \x01(\x0b\x32\x15.flwr.proto.RunStatus:\x02\x38\x01\"-\n\x1bGetFederationOptionsRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\"T\n\x1cGetFederationOptionsResponse\x12\x34\n\x12\x66\x65\x64\x65ration_options\x18\x01 \x01(\x0b\x32\x18.flwr.proto.ConfigRecordb\x06proto3')
21
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x14\x66lwr/proto/run.proto\x12\nflwr.proto\x1a\x14\x66lwr/proto/fab.proto\x1a\x15\x66lwr/proto/node.proto\x1a\x1b\x66lwr/proto/recorddict.proto\x1a\x1a\x66lwr/proto/transport.proto\"\xce\x02\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\x12\x12\n\npending_at\x18\x06 \x01(\t\x12\x13\n\x0bstarting_at\x18\x07 \x01(\t\x12\x12\n\nrunning_at\x18\x08 \x01(\t\x12\x13\n\x0b\x66inished_at\x18\t \x01(\t\x12%\n\x06status\x18\n \x01(\x0b\x32\x15.flwr.proto.RunStatus\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\tRunStatus\x12\x0e\n\x06status\x18\x01 \x01(\t\x12\x12\n\nsub_status\x18\x02 \x01(\t\x12\x0f\n\x07\x64\x65tails\x18\x03 \x01(\t\"?\n\rGetRunRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x0e\n\x06run_id\x18\x02 \x01(\x04\".\n\x0eGetRunResponse\x12\x1c\n\x03run\x18\x01 \x01(\x0b\x32\x0f.flwr.proto.Run\"S\n\x16UpdateRunStatusRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\x12)\n\nrun_status\x18\x02 \x01(\x0b\x32\x15.flwr.proto.RunStatus\"\x19\n\x17UpdateRunStatusResponse\"F\n\x13GetRunStatusRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x0f\n\x07run_ids\x18\x02 \x03(\x04\"\xb1\x01\n\x14GetRunStatusResponse\x12L\n\x0frun_status_dict\x18\x01 \x03(\x0b\x32\x33.flwr.proto.GetRunStatusResponse.RunStatusDictEntry\x1aK\n\x12RunStatusDictEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12$\n\x05value\x18\x02 \x01(\x0b\x32\x15.flwr.proto.RunStatus:\x02\x38\x01\"-\n\x1bGetFederationOptionsRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\"T\n\x1cGetFederationOptionsResponse\x12\x34\n\x12\x66\x65\x64\x65ration_options\x18\x01 \x01(\x0b\x32\x18.flwr.proto.ConfigRecordb\x06proto3')
22
22
 
23
23
  _globals = globals()
24
24
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
@@ -27,8 +27,6 @@ if _descriptor._USE_C_DESCRIPTORS == False:
27
27
  DESCRIPTOR._options = None
28
28
  _globals['_RUN_OVERRIDECONFIGENTRY']._options = None
29
29
  _globals['_RUN_OVERRIDECONFIGENTRY']._serialized_options = b'8\001'
30
- _globals['_CREATERUNREQUEST_OVERRIDECONFIGENTRY']._options = None
31
- _globals['_CREATERUNREQUEST_OVERRIDECONFIGENTRY']._serialized_options = b'8\001'
32
30
  _globals['_GETRUNSTATUSRESPONSE_RUNSTATUSDICTENTRY']._options = None
33
31
  _globals['_GETRUNSTATUSRESPONSE_RUNSTATUSDICTENTRY']._serialized_options = b'8\001'
34
32
  _globals['_RUN']._serialized_start=139
@@ -37,28 +35,22 @@ if _descriptor._USE_C_DESCRIPTORS == False:
37
35
  _globals['_RUN_OVERRIDECONFIGENTRY']._serialized_end=473
38
36
  _globals['_RUNSTATUS']._serialized_start=475
39
37
  _globals['_RUNSTATUS']._serialized_end=539
40
- _globals['_CREATERUNREQUEST']._serialized_start=542
41
- _globals['_CREATERUNREQUEST']._serialized_end=777
42
- _globals['_CREATERUNREQUEST_OVERRIDECONFIGENTRY']._serialized_start=400
43
- _globals['_CREATERUNREQUEST_OVERRIDECONFIGENTRY']._serialized_end=473
44
- _globals['_CREATERUNRESPONSE']._serialized_start=779
45
- _globals['_CREATERUNRESPONSE']._serialized_end=814
46
- _globals['_GETRUNREQUEST']._serialized_start=816
47
- _globals['_GETRUNREQUEST']._serialized_end=879
48
- _globals['_GETRUNRESPONSE']._serialized_start=881
49
- _globals['_GETRUNRESPONSE']._serialized_end=927
50
- _globals['_UPDATERUNSTATUSREQUEST']._serialized_start=929
51
- _globals['_UPDATERUNSTATUSREQUEST']._serialized_end=1012
52
- _globals['_UPDATERUNSTATUSRESPONSE']._serialized_start=1014
53
- _globals['_UPDATERUNSTATUSRESPONSE']._serialized_end=1039
54
- _globals['_GETRUNSTATUSREQUEST']._serialized_start=1041
55
- _globals['_GETRUNSTATUSREQUEST']._serialized_end=1111
56
- _globals['_GETRUNSTATUSRESPONSE']._serialized_start=1114
57
- _globals['_GETRUNSTATUSRESPONSE']._serialized_end=1291
58
- _globals['_GETRUNSTATUSRESPONSE_RUNSTATUSDICTENTRY']._serialized_start=1216
59
- _globals['_GETRUNSTATUSRESPONSE_RUNSTATUSDICTENTRY']._serialized_end=1291
60
- _globals['_GETFEDERATIONOPTIONSREQUEST']._serialized_start=1293
61
- _globals['_GETFEDERATIONOPTIONSREQUEST']._serialized_end=1338
62
- _globals['_GETFEDERATIONOPTIONSRESPONSE']._serialized_start=1340
63
- _globals['_GETFEDERATIONOPTIONSRESPONSE']._serialized_end=1424
38
+ _globals['_GETRUNREQUEST']._serialized_start=541
39
+ _globals['_GETRUNREQUEST']._serialized_end=604
40
+ _globals['_GETRUNRESPONSE']._serialized_start=606
41
+ _globals['_GETRUNRESPONSE']._serialized_end=652
42
+ _globals['_UPDATERUNSTATUSREQUEST']._serialized_start=654
43
+ _globals['_UPDATERUNSTATUSREQUEST']._serialized_end=737
44
+ _globals['_UPDATERUNSTATUSRESPONSE']._serialized_start=739
45
+ _globals['_UPDATERUNSTATUSRESPONSE']._serialized_end=764
46
+ _globals['_GETRUNSTATUSREQUEST']._serialized_start=766
47
+ _globals['_GETRUNSTATUSREQUEST']._serialized_end=836
48
+ _globals['_GETRUNSTATUSRESPONSE']._serialized_start=839
49
+ _globals['_GETRUNSTATUSRESPONSE']._serialized_end=1016
50
+ _globals['_GETRUNSTATUSRESPONSE_RUNSTATUSDICTENTRY']._serialized_start=941
51
+ _globals['_GETRUNSTATUSRESPONSE_RUNSTATUSDICTENTRY']._serialized_end=1016
52
+ _globals['_GETFEDERATIONOPTIONSREQUEST']._serialized_start=1018
53
+ _globals['_GETFEDERATIONOPTIONSREQUEST']._serialized_end=1063
54
+ _globals['_GETFEDERATIONOPTIONSRESPONSE']._serialized_start=1065
55
+ _globals['_GETFEDERATIONOPTIONSRESPONSE']._serialized_end=1149
64
56
  # @@protoc_insertion_point(module_scope)
flwr/proto/run_pb2.pyi CHANGED
@@ -3,7 +3,6 @@
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.recorddict_pb2
9
8
  import flwr.proto.transport_pb2
@@ -94,56 +93,6 @@ class RunStatus(google.protobuf.message.Message):
94
93
  def ClearField(self, field_name: typing_extensions.Literal["details",b"details","status",b"status","sub_status",b"sub_status"]) -> None: ...
95
94
  global___RunStatus = RunStatus
96
95
 
97
- class CreateRunRequest(google.protobuf.message.Message):
98
- """CreateRun"""
99
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
100
- class OverrideConfigEntry(google.protobuf.message.Message):
101
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
102
- KEY_FIELD_NUMBER: builtins.int
103
- VALUE_FIELD_NUMBER: builtins.int
104
- key: typing.Text
105
- @property
106
- def value(self) -> flwr.proto.transport_pb2.Scalar: ...
107
- def __init__(self,
108
- *,
109
- key: typing.Text = ...,
110
- value: typing.Optional[flwr.proto.transport_pb2.Scalar] = ...,
111
- ) -> None: ...
112
- def HasField(self, field_name: typing_extensions.Literal["value",b"value"]) -> builtins.bool: ...
113
- def ClearField(self, field_name: typing_extensions.Literal["key",b"key","value",b"value"]) -> None: ...
114
-
115
- FAB_ID_FIELD_NUMBER: builtins.int
116
- FAB_VERSION_FIELD_NUMBER: builtins.int
117
- OVERRIDE_CONFIG_FIELD_NUMBER: builtins.int
118
- FAB_FIELD_NUMBER: builtins.int
119
- fab_id: typing.Text
120
- fab_version: typing.Text
121
- @property
122
- def override_config(self) -> google.protobuf.internal.containers.MessageMap[typing.Text, flwr.proto.transport_pb2.Scalar]: ...
123
- @property
124
- def fab(self) -> flwr.proto.fab_pb2.Fab: ...
125
- def __init__(self,
126
- *,
127
- fab_id: typing.Text = ...,
128
- fab_version: typing.Text = ...,
129
- override_config: typing.Optional[typing.Mapping[typing.Text, flwr.proto.transport_pb2.Scalar]] = ...,
130
- fab: typing.Optional[flwr.proto.fab_pb2.Fab] = ...,
131
- ) -> None: ...
132
- def HasField(self, field_name: typing_extensions.Literal["fab",b"fab"]) -> builtins.bool: ...
133
- 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: ...
134
- global___CreateRunRequest = CreateRunRequest
135
-
136
- class CreateRunResponse(google.protobuf.message.Message):
137
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
138
- RUN_ID_FIELD_NUMBER: builtins.int
139
- run_id: builtins.int
140
- def __init__(self,
141
- *,
142
- run_id: builtins.int = ...,
143
- ) -> None: ...
144
- def ClearField(self, field_name: typing_extensions.Literal["run_id",b"run_id"]) -> None: ...
145
- global___CreateRunResponse = CreateRunResponse
146
-
147
96
  class GetRunRequest(google.protobuf.message.Message):
148
97
  """GetRun"""
149
98
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
@@ -20,7 +20,7 @@ from flwr.proto import run_pb2 as flwr_dot_proto_dot_run__pb2
20
20
  from flwr.proto import fab_pb2 as flwr_dot_proto_dot_fab__pb2
21
21
 
22
22
 
23
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1c\x66lwr/proto/serverappio.proto\x12\nflwr.proto\x1a\x1a\x66lwr/proto/heartbeat.proto\x1a\x14\x66lwr/proto/log.proto\x1a\x15\x66lwr/proto/node.proto\x1a\x18\x66lwr/proto/message.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\"T\n\x16PushInsMessagesRequest\x12*\n\rmessages_list\x18\x01 \x03(\x0b\x32\x13.flwr.proto.Message\x12\x0e\n\x06run_id\x18\x02 \x01(\x04\".\n\x17PushInsMessagesResponse\x12\x13\n\x0bmessage_ids\x18\x01 \x03(\t\"=\n\x16PullResMessagesRequest\x12\x13\n\x0bmessage_ids\x18\x01 \x03(\t\x12\x0e\n\x06run_id\x18\x02 \x01(\x04\"E\n\x17PullResMessagesResponse\x12*\n\rmessages_list\x18\x01 \x03(\x0b\x32\x13.flwr.proto.Message\"\x1c\n\x1aPullServerAppInputsRequest\"\x7f\n\x1bPullServerAppInputsResponse\x12$\n\x07\x63ontext\x18\x01 \x01(\x0b\x32\x13.flwr.proto.Context\x12\x1c\n\x03run\x18\x02 \x01(\x0b\x32\x0f.flwr.proto.Run\x12\x1c\n\x03\x66\x61\x62\x18\x03 \x01(\x0b\x32\x0f.flwr.proto.Fab\"S\n\x1bPushServerAppOutputsRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\x12$\n\x07\x63ontext\x18\x02 \x01(\x0b\x32\x13.flwr.proto.Context\"\x1e\n\x1cPushServerAppOutputsResponse2\xb0\t\n\x0bServerAppIo\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\x12Y\n\x0cPushMessages\x12\".flwr.proto.PushInsMessagesRequest\x1a#.flwr.proto.PushInsMessagesResponse\"\x00\x12Y\n\x0cPullMessages\x12\".flwr.proto.PullResMessagesRequest\x1a#.flwr.proto.PullResMessagesResponse\"\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\x12h\n\x13PullServerAppInputs\x12&.flwr.proto.PullServerAppInputsRequest\x1a\'.flwr.proto.PullServerAppInputsResponse\"\x00\x12k\n\x14PushServerAppOutputs\x12\'.flwr.proto.PushServerAppOutputsRequest\x1a(.flwr.proto.PushServerAppOutputsResponse\"\x00\x12\\\n\x0fUpdateRunStatus\x12\".flwr.proto.UpdateRunStatusRequest\x1a#.flwr.proto.UpdateRunStatusResponse\"\x00\x12S\n\x0cGetRunStatus\x12\x1f.flwr.proto.GetRunStatusRequest\x1a .flwr.proto.GetRunStatusResponse\"\x00\x12G\n\x08PushLogs\x12\x1b.flwr.proto.PushLogsRequest\x1a\x1c.flwr.proto.PushLogsResponse\"\x00\x12_\n\x10SendAppHeartbeat\x12#.flwr.proto.SendAppHeartbeatRequest\x1a$.flwr.proto.SendAppHeartbeatResponse\"\x00\x12M\n\nPushObject\x12\x1d.flwr.proto.PushObjectRequest\x1a\x1e.flwr.proto.PushObjectResponse\"\x00\x12M\n\nPullObject\x12\x1d.flwr.proto.PullObjectRequest\x1a\x1e.flwr.proto.PullObjectResponse\"\x00\x62\x06proto3')
23
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1c\x66lwr/proto/serverappio.proto\x12\nflwr.proto\x1a\x1a\x66lwr/proto/heartbeat.proto\x1a\x14\x66lwr/proto/log.proto\x1a\x15\x66lwr/proto/node.proto\x1a\x18\x66lwr/proto/message.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\"T\n\x16PushInsMessagesRequest\x12*\n\rmessages_list\x18\x01 \x03(\x0b\x32\x13.flwr.proto.Message\x12\x0e\n\x06run_id\x18\x02 \x01(\x04\".\n\x17PushInsMessagesResponse\x12\x13\n\x0bmessage_ids\x18\x01 \x03(\t\"=\n\x16PullResMessagesRequest\x12\x13\n\x0bmessage_ids\x18\x01 \x03(\t\x12\x0e\n\x06run_id\x18\x02 \x01(\x04\"E\n\x17PullResMessagesResponse\x12*\n\rmessages_list\x18\x01 \x03(\x0b\x32\x13.flwr.proto.Message\"\x1c\n\x1aPullServerAppInputsRequest\"\x7f\n\x1bPullServerAppInputsResponse\x12$\n\x07\x63ontext\x18\x01 \x01(\x0b\x32\x13.flwr.proto.Context\x12\x1c\n\x03run\x18\x02 \x01(\x0b\x32\x0f.flwr.proto.Run\x12\x1c\n\x03\x66\x61\x62\x18\x03 \x01(\x0b\x32\x0f.flwr.proto.Fab\"S\n\x1bPushServerAppOutputsRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\x12$\n\x07\x63ontext\x18\x02 \x01(\x0b\x32\x13.flwr.proto.Context\"\x1e\n\x1cPushServerAppOutputsResponse2\xe4\x08\n\x0bServerAppIo\x12G\n\x08GetNodes\x12\x1b.flwr.proto.GetNodesRequest\x1a\x1c.flwr.proto.GetNodesResponse\"\x00\x12Y\n\x0cPushMessages\x12\".flwr.proto.PushInsMessagesRequest\x1a#.flwr.proto.PushInsMessagesResponse\"\x00\x12Y\n\x0cPullMessages\x12\".flwr.proto.PullResMessagesRequest\x1a#.flwr.proto.PullResMessagesResponse\"\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\x12h\n\x13PullServerAppInputs\x12&.flwr.proto.PullServerAppInputsRequest\x1a\'.flwr.proto.PullServerAppInputsResponse\"\x00\x12k\n\x14PushServerAppOutputs\x12\'.flwr.proto.PushServerAppOutputsRequest\x1a(.flwr.proto.PushServerAppOutputsResponse\"\x00\x12\\\n\x0fUpdateRunStatus\x12\".flwr.proto.UpdateRunStatusRequest\x1a#.flwr.proto.UpdateRunStatusResponse\"\x00\x12S\n\x0cGetRunStatus\x12\x1f.flwr.proto.GetRunStatusRequest\x1a .flwr.proto.GetRunStatusResponse\"\x00\x12G\n\x08PushLogs\x12\x1b.flwr.proto.PushLogsRequest\x1a\x1c.flwr.proto.PushLogsResponse\"\x00\x12_\n\x10SendAppHeartbeat\x12#.flwr.proto.SendAppHeartbeatRequest\x1a$.flwr.proto.SendAppHeartbeatResponse\"\x00\x12M\n\nPushObject\x12\x1d.flwr.proto.PushObjectRequest\x1a\x1e.flwr.proto.PushObjectResponse\"\x00\x12M\n\nPullObject\x12\x1d.flwr.proto.PullObjectRequest\x1a\x1e.flwr.proto.PullObjectResponse\"\x00\x62\x06proto3')
24
24
 
25
25
  _globals = globals()
26
26
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
@@ -48,5 +48,5 @@ if _descriptor._USE_C_DESCRIPTORS == False:
48
48
  _globals['_PUSHSERVERAPPOUTPUTSRESPONSE']._serialized_start=787
49
49
  _globals['_PUSHSERVERAPPOUTPUTSRESPONSE']._serialized_end=817
50
50
  _globals['_SERVERAPPIO']._serialized_start=820
51
- _globals['_SERVERAPPIO']._serialized_end=2020
51
+ _globals['_SERVERAPPIO']._serialized_end=1944
52
52
  # @@protoc_insertion_point(module_scope)
@@ -19,11 +19,6 @@ class ServerAppIoStub(object):
19
19
  Args:
20
20
  channel: A grpc.Channel.
21
21
  """
22
- self.CreateRun = channel.unary_unary(
23
- '/flwr.proto.ServerAppIo/CreateRun',
24
- request_serializer=flwr_dot_proto_dot_run__pb2.CreateRunRequest.SerializeToString,
25
- response_deserializer=flwr_dot_proto_dot_run__pb2.CreateRunResponse.FromString,
26
- )
27
22
  self.GetNodes = channel.unary_unary(
28
23
  '/flwr.proto.ServerAppIo/GetNodes',
29
24
  request_serializer=flwr_dot_proto_dot_serverappio__pb2.GetNodesRequest.SerializeToString,
@@ -94,13 +89,6 @@ class ServerAppIoStub(object):
94
89
  class ServerAppIoServicer(object):
95
90
  """Missing associated documentation comment in .proto file."""
96
91
 
97
- def CreateRun(self, request, context):
98
- """Request run_id
99
- """
100
- context.set_code(grpc.StatusCode.UNIMPLEMENTED)
101
- context.set_details('Method not implemented!')
102
- raise NotImplementedError('Method not implemented!')
103
-
104
92
  def GetNodes(self, request, context):
105
93
  """Return a set of nodes
106
94
  """
@@ -195,11 +183,6 @@ class ServerAppIoServicer(object):
195
183
 
196
184
  def add_ServerAppIoServicer_to_server(servicer, server):
197
185
  rpc_method_handlers = {
198
- 'CreateRun': grpc.unary_unary_rpc_method_handler(
199
- servicer.CreateRun,
200
- request_deserializer=flwr_dot_proto_dot_run__pb2.CreateRunRequest.FromString,
201
- response_serializer=flwr_dot_proto_dot_run__pb2.CreateRunResponse.SerializeToString,
202
- ),
203
186
  'GetNodes': grpc.unary_unary_rpc_method_handler(
204
187
  servicer.GetNodes,
205
188
  request_deserializer=flwr_dot_proto_dot_serverappio__pb2.GetNodesRequest.FromString,
@@ -275,23 +258,6 @@ def add_ServerAppIoServicer_to_server(servicer, server):
275
258
  class ServerAppIo(object):
276
259
  """Missing associated documentation comment in .proto file."""
277
260
 
278
- @staticmethod
279
- def CreateRun(request,
280
- target,
281
- options=(),
282
- channel_credentials=None,
283
- call_credentials=None,
284
- insecure=False,
285
- compression=None,
286
- wait_for_ready=None,
287
- timeout=None,
288
- metadata=None):
289
- return grpc.experimental.unary_unary(request, target, '/flwr.proto.ServerAppIo/CreateRun',
290
- flwr_dot_proto_dot_run__pb2.CreateRunRequest.SerializeToString,
291
- flwr_dot_proto_dot_run__pb2.CreateRunResponse.FromString,
292
- options, channel_credentials,
293
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
294
-
295
261
  @staticmethod
296
262
  def GetNodes(request,
297
263
  target,
@@ -13,11 +13,6 @@ import grpc
13
13
 
14
14
  class ServerAppIoStub:
15
15
  def __init__(self, channel: grpc.Channel) -> None: ...
16
- CreateRun: grpc.UnaryUnaryMultiCallable[
17
- flwr.proto.run_pb2.CreateRunRequest,
18
- flwr.proto.run_pb2.CreateRunResponse]
19
- """Request run_id"""
20
-
21
16
  GetNodes: grpc.UnaryUnaryMultiCallable[
22
17
  flwr.proto.serverappio_pb2.GetNodesRequest,
23
18
  flwr.proto.serverappio_pb2.GetNodesResponse]
@@ -85,14 +80,6 @@ class ServerAppIoStub:
85
80
 
86
81
 
87
82
  class ServerAppIoServicer(metaclass=abc.ABCMeta):
88
- @abc.abstractmethod
89
- def CreateRun(self,
90
- request: flwr.proto.run_pb2.CreateRunRequest,
91
- context: grpc.ServicerContext,
92
- ) -> flwr.proto.run_pb2.CreateRunResponse:
93
- """Request run_id"""
94
- pass
95
-
96
83
  @abc.abstractmethod
97
84
  def GetNodes(self,
98
85
  request: flwr.proto.serverappio_pb2.GetNodesRequest,
@@ -22,21 +22,19 @@ from uuid import UUID
22
22
 
23
23
  import grpc
24
24
 
25
- from flwr.common import ConfigRecord, Message
25
+ from flwr.common import Message
26
26
  from flwr.common.constant import SUPERLINK_NODE_ID, Status
27
27
  from flwr.common.inflatable import check_body_len_consistency
28
28
  from flwr.common.logger import log
29
29
  from flwr.common.serde import (
30
30
  context_from_proto,
31
31
  context_to_proto,
32
- fab_from_proto,
33
32
  fab_to_proto,
34
33
  message_from_proto,
35
34
  message_to_proto,
36
35
  run_status_from_proto,
37
36
  run_status_to_proto,
38
37
  run_to_proto,
39
- user_config_from_proto,
40
38
  )
41
39
  from flwr.common.typing import Fab, RunStatus
42
40
  from flwr.proto import serverappio_pb2_grpc # pylint: disable=E0611
@@ -57,8 +55,6 @@ from flwr.proto.message_pb2 import ( # pylint: disable=E0611
57
55
  )
58
56
  from flwr.proto.node_pb2 import Node # pylint: disable=E0611
59
57
  from flwr.proto.run_pb2 import ( # pylint: disable=E0611
60
- CreateRunRequest,
61
- CreateRunResponse,
62
58
  GetRunRequest,
63
59
  GetRunResponse,
64
60
  GetRunStatusRequest,
@@ -121,32 +117,6 @@ class ServerAppIoServicer(serverappio_pb2_grpc.ServerAppIoServicer):
121
117
  nodes: list[Node] = [Node(node_id=node_id) for node_id in all_ids]
122
118
  return GetNodesResponse(nodes=nodes)
123
119
 
124
- def CreateRun(
125
- self, request: CreateRunRequest, context: grpc.ServicerContext
126
- ) -> CreateRunResponse:
127
- """Create run ID."""
128
- log(DEBUG, "ServerAppIoServicer.CreateRun")
129
- state: LinkState = self.state_factory.state()
130
- if request.HasField("fab"):
131
- fab = fab_from_proto(request.fab)
132
- ffs: Ffs = self.ffs_factory.ffs()
133
- fab_hash = ffs.put(fab.content, {})
134
- _raise_if(
135
- validation_error=fab_hash != fab.hash_str,
136
- request_name="CreateRun",
137
- detail=f"FAB ({fab.hash_str}) hash from request doesn't match contents",
138
- )
139
- else:
140
- fab_hash = ""
141
- run_id = state.create_run(
142
- request.fab_id,
143
- request.fab_version,
144
- fab_hash,
145
- user_config_from_proto(request.override_config),
146
- ConfigRecord(),
147
- )
148
- return CreateRunResponse(run_id=run_id)
149
-
150
120
  def PushMessages(
151
121
  self, request: PushInsMessagesRequest, context: grpc.ServicerContext
152
122
  ) -> PushInsMessagesResponse:
@@ -12,11 +12,9 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
  # ==============================================================================
15
- """Flower SuperNode."""
15
+ """Flower command line interface for SuperNode."""
16
16
 
17
17
 
18
- from .app import run_supernode as run_supernode
18
+ from .flower_supernode import flower_supernode
19
19
 
20
- __all__ = [
21
- "run_supernode",
22
- ]
20
+ __all__ = ["flower_supernode"]
@@ -12,7 +12,7 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
  # ==============================================================================
15
- """Flower SuperNode."""
15
+ """`flower-supernode` command."""
16
16
 
17
17
 
18
18
  import argparse
@@ -46,7 +46,7 @@ from flwr.common.logger import log
46
46
  from ..start_client_internal import start_client_internal
47
47
 
48
48
 
49
- def run_supernode() -> None:
49
+ def flower_supernode() -> None:
50
50
  """Run Flower SuperNode."""
51
51
  args = _parse_args_run_supernode().parse_args()
52
52
 
@@ -20,8 +20,9 @@ import os
20
20
  import sys
21
21
  import threading
22
22
  import time
23
- from contextlib import AbstractContextManager
24
- from logging import ERROR, INFO, WARN
23
+ from collections.abc import Iterator
24
+ from contextlib import contextmanager
25
+ from logging import INFO, WARN
25
26
  from os import urandom
26
27
  from pathlib import Path
27
28
  from typing import Callable, Optional, Union
@@ -74,7 +75,6 @@ def start_client_internal(
74
75
  *,
75
76
  server_address: str,
76
77
  node_config: UserConfig,
77
- grpc_max_message_length: int = GRPC_MAX_MESSAGE_LENGTH,
78
78
  root_certificates: Optional[Union[bytes, str]] = None,
79
79
  insecure: Optional[bool] = None,
80
80
  transport: str,
@@ -97,13 +97,6 @@ def start_client_internal(
97
97
  would be `"[::]:8080"`.
98
98
  node_config: UserConfig
99
99
  The configuration of the node.
100
- grpc_max_message_length : int (default: 536_870_912, this equals 512MB)
101
- The maximum length of gRPC messages that can be exchanged with the
102
- Flower server. The default should be sufficient for most models.
103
- Users who train very large models might need to increase this
104
- value. Note that the Flower server needs to be started with the
105
- same value (see `flwr.server.start_server`), otherwise it will not
106
- know about the increased limit and block larger messages.
107
100
  root_certificates : Optional[Union[bytes, str]] (default: None)
108
101
  The PEM-encoded root certificates as a byte string or a path string.
109
102
  If provided, a secure connection using the certificates will be
@@ -150,49 +143,6 @@ def start_client_internal(
150
143
  certificates=None,
151
144
  )
152
145
 
153
- # Initialize connection context manager
154
- connection, address, connection_error_type = _init_connection(
155
- transport, server_address
156
- )
157
-
158
- def _on_sucess(retry_state: RetryState) -> None:
159
- if retry_state.tries > 1:
160
- log(
161
- INFO,
162
- "Connection successful after %.2f seconds and %s tries.",
163
- retry_state.elapsed_time,
164
- retry_state.tries,
165
- )
166
-
167
- def _on_backoff(retry_state: RetryState) -> None:
168
- if retry_state.tries == 1:
169
- log(WARN, "Connection attempt failed, retrying...")
170
- else:
171
- log(
172
- WARN,
173
- "Connection attempt failed, retrying in %.2f seconds",
174
- retry_state.actual_wait,
175
- )
176
-
177
- retry_invoker = RetryInvoker(
178
- wait_gen_factory=lambda: exponential(max_delay=MAX_RETRY_DELAY),
179
- recoverable_exceptions=connection_error_type,
180
- max_tries=max_retries + 1 if max_retries is not None else None,
181
- max_time=max_wait_time,
182
- on_giveup=lambda retry_state: (
183
- log(
184
- WARN,
185
- "Giving up reconnection after %.2f seconds and %s tries.",
186
- retry_state.elapsed_time,
187
- retry_state.tries,
188
- )
189
- if retry_state.tries > 1
190
- else None
191
- ),
192
- on_success=_on_sucess,
193
- on_backoff=_on_backoff,
194
- )
195
-
196
146
  # DeprecatedRunInfoStore gets initialized when the first connection is established
197
147
  run_info_store: Optional[DeprecatedRunInfoStore] = None
198
148
  state_factory = NodeStateFactory()
@@ -203,13 +153,14 @@ def start_client_internal(
203
153
 
204
154
  while True:
205
155
  sleep_duration: int = 0
206
- with connection(
207
- address,
208
- insecure,
209
- retry_invoker,
210
- grpc_max_message_length,
211
- root_certificates,
212
- authentication_keys,
156
+ with _init_connection(
157
+ transport=transport,
158
+ server_address=server_address,
159
+ insecure=insecure,
160
+ root_certificates=root_certificates,
161
+ authentication_keys=authentication_keys,
162
+ max_retries=max_retries,
163
+ max_wait_time=max_wait_time,
213
164
  ) as conn:
214
165
  receive, send, create_node, delete_node, get_run, get_fab = conn
215
166
 
@@ -287,88 +238,68 @@ def start_client_internal(
287
238
  reply_to=message,
288
239
  )
289
240
 
290
- # Handle app loading and task message
291
- try:
292
- # Two isolation modes:
293
- # 1. `subprocess`: SuperNode is starting the ClientApp
294
- # process as a subprocess.
295
- # 2. `process`: ClientApp process gets started separately
296
- # (via `flwr-clientapp`), for example, in a separate
297
- # Docker container.
298
-
299
- # Generate SuperNode token
300
- token = int.from_bytes(urandom(RUN_ID_NUM_BYTES), "little")
301
-
302
- # Mode 1: SuperNode starts ClientApp as subprocess
303
- start_subprocess = isolation == ISOLATION_MODE_SUBPROCESS
304
-
305
- # Share Message and Context with servicer
306
- clientappio_servicer.set_inputs(
307
- clientapp_input=ClientAppInputs(
308
- message=message,
309
- context=context,
310
- run=run,
311
- fab=fab,
312
- token=token,
313
- ),
314
- token_returned=start_subprocess,
315
- )
241
+ # Two isolation modes:
242
+ # 1. `subprocess`: SuperNode is starting the ClientApp
243
+ # process as a subprocess.
244
+ # 2. `process`: ClientApp process gets started separately
245
+ # (via `flwr-clientapp`), for example, in a separate
246
+ # Docker container.
316
247
 
317
- if start_subprocess:
318
- _octet, _colon, _port = clientappio_api_address.rpartition(
319
- ":"
320
- )
321
- io_address = (
322
- f"{CLIENT_OCTET}:{_port}"
323
- if _octet == SERVER_OCTET
324
- else clientappio_api_address
325
- )
326
- # Start ClientApp subprocess
327
- command = [
328
- "flwr-clientapp",
329
- "--clientappio-api-address",
330
- io_address,
331
- "--token",
332
- str(token),
333
- ]
334
- command.append("--insecure")
335
-
336
- proc = mp_spawn_context.Process(
337
- target=_run_flwr_clientapp,
338
- args=(command, os.getpid()),
339
- daemon=True,
340
- )
341
- proc.start()
342
- proc.join()
343
- else:
344
- # Wait for output to become available
345
- while not clientappio_servicer.has_outputs():
346
- time.sleep(0.1)
347
-
348
- outputs = clientappio_servicer.get_outputs()
349
- reply_message, context = outputs.message, outputs.context
350
- except Exception as ex: # pylint: disable=broad-exception-caught
351
-
352
- # Don't update/change DeprecatedRunInfoStore
353
-
354
- e_code = ErrorCode.CLIENT_APP_RAISED_EXCEPTION
355
- # Ex fmt: "<class 'ZeroDivisionError'>:<'division by zero'>"
356
- reason = str(type(ex)) + ":<'" + str(ex) + "'>"
357
- exc_entity = "ClientApp"
358
-
359
- log(ERROR, "%s raised an exception", exc_entity, exc_info=ex)
360
-
361
- # Create error message
362
- reply_message = Message(
363
- Error(code=e_code, reason=reason),
364
- reply_to=message,
365
- )
366
- else:
367
- # No exception, update node state
368
- run_info_store.update_context(
369
- run_id=run_id,
248
+ # Generate SuperNode token
249
+ token = int.from_bytes(urandom(RUN_ID_NUM_BYTES), "little")
250
+
251
+ # Mode 1: SuperNode starts ClientApp as subprocess
252
+ start_subprocess = isolation == ISOLATION_MODE_SUBPROCESS
253
+
254
+ # Share Message and Context with servicer
255
+ clientappio_servicer.set_inputs(
256
+ clientapp_input=ClientAppInputs(
257
+ message=message,
370
258
  context=context,
259
+ run=run,
260
+ fab=fab,
261
+ token=token,
262
+ ),
263
+ token_returned=start_subprocess,
264
+ )
265
+
266
+ if start_subprocess:
267
+ _octet, _colon, _port = clientappio_api_address.rpartition(":")
268
+ io_address = (
269
+ f"{CLIENT_OCTET}:{_port}"
270
+ if _octet == SERVER_OCTET
271
+ else clientappio_api_address
371
272
  )
273
+ # Start ClientApp subprocess
274
+ command = [
275
+ "flwr-clientapp",
276
+ "--clientappio-api-address",
277
+ io_address,
278
+ "--token",
279
+ str(token),
280
+ ]
281
+ command.append("--insecure")
282
+
283
+ proc = mp_spawn_context.Process(
284
+ target=_run_flwr_clientapp,
285
+ args=(command, os.getpid()),
286
+ daemon=True,
287
+ )
288
+ proc.start()
289
+ proc.join()
290
+ else:
291
+ # Wait for output to become available
292
+ while not clientappio_servicer.has_outputs():
293
+ time.sleep(0.1)
294
+
295
+ outputs = clientappio_servicer.get_outputs()
296
+ reply_message, context = outputs.message, outputs.context
297
+
298
+ # Update node state
299
+ run_info_store.update_context(
300
+ run_id=run_id,
301
+ context=context,
302
+ )
372
303
 
373
304
  # Send
374
305
  send(reply_message)
@@ -402,30 +333,28 @@ def start_client_internal(
402
333
  time.sleep(sleep_duration)
403
334
 
404
335
 
405
- def _init_connection(transport: str, server_address: str) -> tuple[
406
- Callable[
407
- [
408
- str,
409
- bool,
410
- RetryInvoker,
411
- int,
412
- Union[bytes, str, None],
413
- Optional[tuple[ec.EllipticCurvePrivateKey, ec.EllipticCurvePublicKey]],
414
- ],
415
- AbstractContextManager[
416
- tuple[
417
- Callable[[], Optional[Message]],
418
- Callable[[Message], None],
419
- Callable[[], Optional[int]],
420
- Callable[[], None],
421
- Callable[[int], Run],
422
- Callable[[str, int], Fab],
423
- ]
424
- ],
425
- ],
426
- str,
427
- type[Exception],
336
+ @contextmanager
337
+ def _init_connection( # pylint: disable=too-many-positional-arguments
338
+ transport: str,
339
+ server_address: str,
340
+ insecure: bool,
341
+ root_certificates: Optional[Union[bytes, str]] = None,
342
+ authentication_keys: Optional[
343
+ tuple[ec.EllipticCurvePrivateKey, ec.EllipticCurvePublicKey]
344
+ ] = None,
345
+ max_retries: Optional[int] = None,
346
+ max_wait_time: Optional[float] = None,
347
+ ) -> Iterator[
348
+ tuple[
349
+ Callable[[], Optional[Message]],
350
+ Callable[[Message], None],
351
+ Callable[[], Optional[int]],
352
+ Callable[[], None],
353
+ Callable[[int], Run],
354
+ Callable[[str, int], Fab],
355
+ ]
428
356
  ]:
357
+ """Establish a connection to the Fleet API server at SuperLink."""
429
358
  # Parse IP address
430
359
  parsed_address = parse_address(server_address)
431
360
  if not parsed_address:
@@ -456,7 +385,69 @@ def _init_connection(transport: str, server_address: str) -> tuple[
456
385
  f"Unknown transport type: {transport} (possible: {TRANSPORT_TYPES})"
457
386
  )
458
387
 
459
- return connection, address, error_type
388
+ # Create RetryInvoker
389
+ retry_invoker = _make_fleet_connection_retry_invoker(
390
+ max_retries=max_retries,
391
+ max_wait_time=max_wait_time,
392
+ connection_error_type=error_type,
393
+ )
394
+
395
+ # Establish connection
396
+ with connection(
397
+ address,
398
+ insecure,
399
+ retry_invoker,
400
+ GRPC_MAX_MESSAGE_LENGTH,
401
+ root_certificates,
402
+ authentication_keys,
403
+ ) as conn:
404
+ yield conn
405
+
406
+
407
+ def _make_fleet_connection_retry_invoker(
408
+ max_retries: Optional[int] = None,
409
+ max_wait_time: Optional[float] = None,
410
+ connection_error_type: type[Exception] = RpcError,
411
+ ) -> RetryInvoker:
412
+ """Create a retry invoker for fleet connection."""
413
+
414
+ def _on_success(retry_state: RetryState) -> None:
415
+ if retry_state.tries > 1:
416
+ log(
417
+ INFO,
418
+ "Connection successful after %.2f seconds and %s tries.",
419
+ retry_state.elapsed_time,
420
+ retry_state.tries,
421
+ )
422
+
423
+ def _on_backoff(retry_state: RetryState) -> None:
424
+ if retry_state.tries == 1:
425
+ log(WARN, "Connection attempt failed, retrying...")
426
+ else:
427
+ log(
428
+ WARN,
429
+ "Connection attempt failed, retrying in %.2f seconds",
430
+ retry_state.actual_wait,
431
+ )
432
+
433
+ return RetryInvoker(
434
+ wait_gen_factory=lambda: exponential(max_delay=MAX_RETRY_DELAY),
435
+ recoverable_exceptions=connection_error_type,
436
+ max_tries=max_retries + 1 if max_retries is not None else None,
437
+ max_time=max_wait_time,
438
+ on_giveup=lambda retry_state: (
439
+ log(
440
+ WARN,
441
+ "Giving up reconnection after %.2f seconds and %s tries.",
442
+ retry_state.elapsed_time,
443
+ retry_state.tries,
444
+ )
445
+ if retry_state.tries > 1
446
+ else None
447
+ ),
448
+ on_success=_on_success,
449
+ on_backoff=_on_backoff,
450
+ )
460
451
 
461
452
 
462
453
  def _run_flwr_clientapp(args: list[str], main_pid: int) -> None:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: flwr-nightly
3
- Version: 1.19.0.dev20250522
3
+ Version: 1.19.0.dev20250523
4
4
  Summary: Flower: A Friendly Federated AI Framework
5
5
  License: Apache-2.0
6
6
  Keywords: Artificial Intelligence,Federated AI,Federated Analytics,Federated Evaluation,Federated Learning,Flower,Machine Learning
@@ -102,9 +102,6 @@ flwr/client/numpy_client.py,sha256=Qq6ghsIAop2slKqAfgiI5NiHJ4LIxGmrik3Ror4_XVc,9
102
102
  flwr/client/rest_client/__init__.py,sha256=MBiuK62hj439m9rtwSwI184Hth6Tt5GbmpNMyl3zkZY,735
103
103
  flwr/client/rest_client/connection.py,sha256=6yBh2Eeso0XLtinAs2kOHkSnge7C-co_a_QfBaAEudU,12766
104
104
  flwr/client/run_info_store.py,sha256=MaJ3UQ-07hWtK67wnWu0zR29jrk0fsfgJX506dvEOfE,4042
105
- flwr/client/start_client_internal.py,sha256=-FOBQE65a-ZsuTUiW8WcZoBZt9q_b3ee-JK5-H8ivME,19850
106
- flwr/client/supernode/__init__.py,sha256=i3gFbV5ie_FGyRMpzOvqtZAi0Z0ChIEJ7I2Kr0ym0PM,793
107
- flwr/client/supernode/app.py,sha256=an-aT2zZEL5Mv7StgE1el0-fgIvKSQIuihJubRUuzyo,8753
108
105
  flwr/client/typing.py,sha256=Jw3rawDzI_-ZDcRmEQcs5gZModY7oeQlEeltYsdOhlU,1048
109
106
  flwr/clientapp/__init__.py,sha256=zGW4z49Ojzoi1hDiRC7kyhLjijUilc6fqHhtM_ATRVA,719
110
107
  flwr/common/__init__.py,sha256=5GCLVk399Az_rTJHNticRlL0Sl_oPw_j5_LuFKfX7-M,4171
@@ -210,14 +207,14 @@ flwr/proto/recorddict_pb2.py,sha256=G_ArzgRfHVXJTqtIZ6lYN8rZsCcj6p_1KokGUjajtMY,
210
207
  flwr/proto/recorddict_pb2.pyi,sha256=M9dVj5o7sw91pnIBWVl76Ka82sDUiwm-rnv_iV9Omhc,15286
211
208
  flwr/proto/recorddict_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
212
209
  flwr/proto/recorddict_pb2_grpc.pyi,sha256=ff2TSiLVnG6IVQcTGzb2DIH3XRSoAvAo_RMcvbMFyc0,76
213
- flwr/proto/run_pb2.py,sha256=9ArAxGT-SgOaIZG-WN6tb-rpka1jLTkaJpDAA39JXeY,5745
214
- flwr/proto/run_pb2.pyi,sha256=NEz0uJmTpbSGGuYWPVoSog7tS-XjBkaJNdB2l_io2SI,11740
210
+ flwr/proto/run_pb2.py,sha256=SWpc2yDTprm7DaabMQne43q_7_NWQN3I66y-d_PpcGg,4727
211
+ flwr/proto/run_pb2.pyi,sha256=g87sUXdUA3cPmlYG03EoUisVIxOtWft3OR6nznzXeDo,9416
215
212
  flwr/proto/run_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
216
213
  flwr/proto/run_pb2_grpc.pyi,sha256=ff2TSiLVnG6IVQcTGzb2DIH3XRSoAvAo_RMcvbMFyc0,76
217
- flwr/proto/serverappio_pb2.py,sha256=iaE3twmUl6P0EiMmgECbZ9wpUwOKG_RdO6s66OoicVE,5331
214
+ flwr/proto/serverappio_pb2.py,sha256=JvIoTp15o7og5saAuAPPEHS2-qoxOI4y1t6pD78GBf4,5236
218
215
  flwr/proto/serverappio_pb2.pyi,sha256=8Q81UXbBCArSXnma6-rXUE_vKneCowZjY4W4JmLaH0c,6450
219
- flwr/proto/serverappio_pb2_grpc.py,sha256=e0X_tVI6Qtr47BhH7U8nKK04kI_1xPwxaM-gg4x69KM,24171
220
- flwr/proto/serverappio_pb2_grpc.pyi,sha256=1QegiFP3aofVNPuunE6hr_MClr40UzBWo_TEX5IUjlQ,6597
216
+ flwr/proto/serverappio_pb2_grpc.py,sha256=An5cPfO_1-MjvP8FaVymRfAFpes_pASDLUoxonZ1vrs,22602
217
+ flwr/proto/serverappio_pb2_grpc.pyi,sha256=GI6b8aH2H7yPnqeE7q9lF6RUMtohuucYYxTjtHXzLsA,6204
221
218
  flwr/proto/simulationio_pb2.py,sha256=sAJX72z-IttVGxyU3PFnG8AFuA-pV7itvBoxz-hOudE,3342
222
219
  flwr/proto/simulationio_pb2.pyi,sha256=oXx8_FLBe5B54wduZj-f89kub73XxNtQbThuW8YfPAs,2660
223
220
  flwr/proto/simulationio_pb2_grpc.py,sha256=HuGbhOwV_A5GTbvmd5XTm6lSm9fWUgKcxq9OKhgmBT0,12999
@@ -307,7 +304,7 @@ flwr/server/superlink/linkstate/sqlite_linkstate.py,sha256=z3VABMX_WtAioWJ2aUOsx
307
304
  flwr/server/superlink/linkstate/utils.py,sha256=AJs9jTAEK7JnjF2AODXnOfy0pKAKpe6oUWPCanAP57s,15382
308
305
  flwr/server/superlink/serverappio/__init__.py,sha256=Fy4zJuoccZe5mZSEIpOmQvU6YeXFBa1M4eZuXXmJcn8,717
309
306
  flwr/server/superlink/serverappio/serverappio_grpc.py,sha256=6-FUUt0GiLcBPljj8bBrUNeAITUoDQOLzaMihKo52hg,2326
310
- flwr/server/superlink/serverappio/serverappio_servicer.py,sha256=EgTdKwpPZdAN6LnDNWy450aJQ-zh-bmcVTr739yRx_M,15049
307
+ flwr/server/superlink/serverappio/serverappio_servicer.py,sha256=chSj2hzaYn4q5X9owxWEquLEIK4fEmk3oeG3copgCgI,13980
311
308
  flwr/server/superlink/simulation/__init__.py,sha256=Ry8DrNaZCMcQXvUc4FoCN2m3dvUQgWjasfp015o3Ec4,718
312
309
  flwr/server/superlink/simulation/simulationio_grpc.py,sha256=0l0F-UjYEk6W7HZmI28PbJQLFxSi_vBHRkdchgdaSMQ,2224
313
310
  flwr/server/superlink/simulation/simulationio_servicer.py,sha256=aJezU8RSJswcmWm7Eoy0BqsU13jrcfuFwX3ljm-cORM,7719
@@ -348,11 +345,14 @@ flwr/superexec/executor.py,sha256=M5ucqSE53jfRtuCNf59WFLqQvA1Mln4741TySeZE7qQ,31
348
345
  flwr/superexec/simulation.py,sha256=j6YwUvBN7EQ09ID7MYOCVZ70PGbuyBy8f9bXU0EszEM,4088
349
346
  flwr/superlink/__init__.py,sha256=GNSuJ4-N6Z8wun2iZNlXqENt5beUyzC0Gi_tN396bbM,707
350
347
  flwr/supernode/__init__.py,sha256=KgeCaVvXWrU3rptNR1y0oBp4YtXbAcrnCcJAiOoWkI4,707
348
+ flwr/supernode/cli/__init__.py,sha256=usct6KqEN3NFrwAA6K1RUDRJbUs0lia8o8FFF5Sxnc4,815
349
+ flwr/supernode/cli/flower_supernode.py,sha256=pr16i1xWDzxxB5lcRTaSd4DVQvVOC3G0zwLliS9jSZ0,8766
351
350
  flwr/supernode/nodestate/__init__.py,sha256=CyLLObbmmVgfRO88UCM0VMait1dL57mUauUDfuSHsbU,976
352
351
  flwr/supernode/nodestate/in_memory_nodestate.py,sha256=brV7TMMzS93tXk6ntpoYjtPK5qiSF3XD2W-uUdUVucc,1270
353
352
  flwr/supernode/nodestate/nodestate.py,sha256=-LAjZOnS7VyHC05ll3b31cYDjwAt6l4WmYt7duVLRKk,1024
354
353
  flwr/supernode/nodestate/nodestate_factory.py,sha256=UYTDCcwK_baHUmkzkJDxL0UEqvtTfOMlQRrROMCd0Xo,1430
355
- flwr_nightly-1.19.0.dev20250522.dist-info/METADATA,sha256=wBiKx7nd4BQMsaqKkTQJzxbEEdq0GLoD2aSx6Yy1jpw,15910
356
- flwr_nightly-1.19.0.dev20250522.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
357
- flwr_nightly-1.19.0.dev20250522.dist-info/entry_points.txt,sha256=2-1L-GNKhwGw2_7_RoH55vHw2SIHjdAQy3HAVAWl9PY,374
358
- flwr_nightly-1.19.0.dev20250522.dist-info/RECORD,,
354
+ flwr/supernode/start_client_internal.py,sha256=4z9qtwT7ZwNwahpX1SRfuaoYw1HCICPFUvjPBLHgsA0,18806
355
+ flwr_nightly-1.19.0.dev20250523.dist-info/METADATA,sha256=9-WhjxFCBkKSfaVdbgEMccDDHsMsc7yc6YOxyPGARiQ,15910
356
+ flwr_nightly-1.19.0.dev20250523.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
357
+ flwr_nightly-1.19.0.dev20250523.dist-info/entry_points.txt,sha256=08k99PaHg3Wr6W49rFXYtjmgcfIdpFLNeu6O0bXDYnU,370
358
+ flwr_nightly-1.19.0.dev20250523.dist-info/RECORD,,
@@ -1,7 +1,7 @@
1
1
  [console_scripts]
2
2
  flower-simulation=flwr.simulation.run_simulation:run_simulation_from_cli
3
3
  flower-superlink=flwr.server.app:run_superlink
4
- flower-supernode=flwr.client.supernode.app:run_supernode
4
+ flower-supernode=flwr.supernode.cli:flower_supernode
5
5
  flwr=flwr.cli.app:app
6
6
  flwr-clientapp=flwr.client.clientapp:flwr_clientapp
7
7
  flwr-serverapp=flwr.server.serverapp:flwr_serverapp