flwr-nightly 1.14.0.dev20241213__py3-none-any.whl → 1.14.0.dev20241215__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.

Potentially problematic release.


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

@@ -12,10 +12,10 @@ dependencies = [
12
12
  "flwr-datasets>=0.3.0",
13
13
  "torch==2.3.1",
14
14
  "trl==0.8.1",
15
- "bitsandbytes==0.43.0",
15
+ "bitsandbytes==0.45.0",
16
16
  "scipy==1.13.0",
17
17
  "peft==0.6.2",
18
- "transformers==4.43.1",
18
+ "transformers==4.47.0",
19
19
  "sentencepiece==0.2.0",
20
20
  "omegaconf==2.3.0",
21
21
  "hf_transfer==0.1.8",
flwr/common/typing.py CHANGED
@@ -258,3 +258,11 @@ class Fab:
258
258
 
259
259
  class RunNotRunningException(BaseException):
260
260
  """Raised when a run is not running."""
261
+
262
+
263
+ class InvalidRunStatusException(BaseException):
264
+ """Raised when an RPC is invalidated by the RunStatus."""
265
+
266
+ def __init__(self, message: str) -> None:
267
+ super().__init__(message)
268
+ self.message = message
@@ -158,4 +158,5 @@ class GrpcAdapterServicer(grpcadapter_pb2_grpc.GrpcAdapterServicer):
158
158
  return message_handler.get_fab(
159
159
  request=request,
160
160
  ffs=self.ffs_factory.ffs(),
161
+ state=self.state_factory.state(),
161
162
  )
@@ -20,6 +20,7 @@ from logging import DEBUG, INFO
20
20
  import grpc
21
21
 
22
22
  from flwr.common.logger import log
23
+ from flwr.common.typing import InvalidRunStatusException
23
24
  from flwr.proto import fleet_pb2_grpc # pylint: disable=E0611
24
25
  from flwr.proto.fab_pb2 import GetFabRequest, GetFabResponse # pylint: disable=E0611
25
26
  from flwr.proto.fleet_pb2 import ( # pylint: disable=E0611
@@ -38,6 +39,7 @@ from flwr.proto.run_pb2 import GetRunRequest, GetRunResponse # pylint: disable=
38
39
  from flwr.server.superlink.ffs.ffs_factory import FfsFactory
39
40
  from flwr.server.superlink.fleet.message_handler import message_handler
40
41
  from flwr.server.superlink.linkstate import LinkStateFactory
42
+ from flwr.server.superlink.utils import abort_grpc_context
41
43
 
42
44
 
43
45
  class FleetServicer(fleet_pb2_grpc.FleetServicer):
@@ -105,27 +107,45 @@ class FleetServicer(fleet_pb2_grpc.FleetServicer):
105
107
  )
106
108
  else:
107
109
  log(INFO, "[Fleet.PushTaskRes] No task results to push")
108
- return message_handler.push_task_res(
109
- request=request,
110
- state=self.state_factory.state(),
111
- )
110
+
111
+ try:
112
+ res = message_handler.push_task_res(
113
+ request=request,
114
+ state=self.state_factory.state(),
115
+ )
116
+ except InvalidRunStatusException as e:
117
+ abort_grpc_context(e.message, context)
118
+
119
+ return res
112
120
 
113
121
  def GetRun(
114
122
  self, request: GetRunRequest, context: grpc.ServicerContext
115
123
  ) -> GetRunResponse:
116
124
  """Get run information."""
117
125
  log(INFO, "[Fleet.GetRun] Requesting `Run` for run_id=%s", request.run_id)
118
- return message_handler.get_run(
119
- request=request,
120
- state=self.state_factory.state(),
121
- )
126
+
127
+ try:
128
+ res = message_handler.get_run(
129
+ request=request,
130
+ state=self.state_factory.state(),
131
+ )
132
+ except InvalidRunStatusException as e:
133
+ abort_grpc_context(e.message, context)
134
+
135
+ return res
122
136
 
123
137
  def GetFab(
124
138
  self, request: GetFabRequest, context: grpc.ServicerContext
125
139
  ) -> GetFabResponse:
126
140
  """Get FAB."""
127
141
  log(INFO, "[Fleet.GetFab] Requesting FAB for fab_hash=%s", request.hash_str)
128
- return message_handler.get_fab(
129
- request=request,
130
- ffs=self.ffs_factory.ffs(),
131
- )
142
+ try:
143
+ res = message_handler.get_fab(
144
+ request=request,
145
+ ffs=self.ffs_factory.ffs(),
146
+ state=self.state_factory.state(),
147
+ )
148
+ except InvalidRunStatusException as e:
149
+ abort_grpc_context(e.message, context)
150
+
151
+ return res
@@ -19,8 +19,9 @@ import time
19
19
  from typing import Optional
20
20
  from uuid import UUID
21
21
 
22
+ from flwr.common.constant import Status
22
23
  from flwr.common.serde import fab_to_proto, user_config_to_proto
23
- from flwr.common.typing import Fab
24
+ from flwr.common.typing import Fab, InvalidRunStatusException
24
25
  from flwr.proto.fab_pb2 import GetFabRequest, GetFabResponse # pylint: disable=E0611
25
26
  from flwr.proto.fleet_pb2 import ( # pylint: disable=E0611
26
27
  CreateNodeRequest,
@@ -44,6 +45,7 @@ from flwr.proto.run_pb2 import ( # pylint: disable=E0611
44
45
  from flwr.proto.task_pb2 import TaskIns, TaskRes # pylint: disable=E0611
45
46
  from flwr.server.superlink.ffs.ffs import Ffs
46
47
  from flwr.server.superlink.linkstate import LinkState
48
+ from flwr.server.superlink.utils import check_abort
47
49
 
48
50
 
49
51
  def create_node(
@@ -98,6 +100,15 @@ def push_task_res(request: PushTaskResRequest, state: LinkState) -> PushTaskResR
98
100
  task_res: TaskRes = request.task_res_list[0]
99
101
  # pylint: enable=no-member
100
102
 
103
+ # Abort if the run is not running
104
+ abort_msg = check_abort(
105
+ task_res.run_id,
106
+ [Status.PENDING, Status.STARTING, Status.FINISHED],
107
+ state,
108
+ )
109
+ if abort_msg:
110
+ raise InvalidRunStatusException(abort_msg)
111
+
101
112
  # Set pushed_at (timestamp in seconds)
102
113
  task_res.task.pushed_at = time.time()
103
114
 
@@ -121,6 +132,15 @@ def get_run(
121
132
  if run is None:
122
133
  return GetRunResponse()
123
134
 
135
+ # Abort if the run is not running
136
+ abort_msg = check_abort(
137
+ request.run_id,
138
+ [Status.PENDING, Status.STARTING, Status.FINISHED],
139
+ state,
140
+ )
141
+ if abort_msg:
142
+ raise InvalidRunStatusException(abort_msg)
143
+
124
144
  return GetRunResponse(
125
145
  run=Run(
126
146
  run_id=run.run_id,
@@ -133,9 +153,18 @@ def get_run(
133
153
 
134
154
 
135
155
  def get_fab(
136
- request: GetFabRequest, ffs: Ffs # pylint: disable=W0613
156
+ request: GetFabRequest, ffs: Ffs, state: LinkState # pylint: disable=W0613
137
157
  ) -> GetFabResponse:
138
158
  """Get FAB."""
159
+ # Abort if the run is not running
160
+ abort_msg = check_abort(
161
+ request.run_id,
162
+ [Status.PENDING, Status.STARTING, Status.FINISHED],
163
+ state,
164
+ )
165
+ if abort_msg:
166
+ raise InvalidRunStatusException(abort_msg)
167
+
139
168
  if result := ffs.get(request.hash_str):
140
169
  fab = Fab(request.hash_str, result[0])
141
170
  return GetFabResponse(fab=fab_to_proto(fab))
@@ -154,8 +154,11 @@ async def get_fab(request: GetFabRequest) -> GetFabResponse:
154
154
  # Get ffs from app
155
155
  ffs: Ffs = cast(FfsFactory, app.state.FFS_FACTORY).ffs()
156
156
 
157
+ # Get state from app
158
+ state: LinkState = cast(LinkStateFactory, app.state.STATE_FACTORY).state()
159
+
157
160
  # Handle message
158
- return message_handler.get_fab(request=request, ffs=ffs)
161
+ return message_handler.get_fab(request=request, ffs=ffs, state=state)
159
162
 
160
163
 
161
164
  routes = [
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: flwr-nightly
3
- Version: 1.14.0.dev20241213
3
+ Version: 1.14.0.dev20241215
4
4
  Summary: Flower: A Friendly Federated AI Framework
5
5
  Home-page: https://flower.ai
6
6
  License: Apache-2.0
@@ -56,7 +56,7 @@ flwr/cli/new/templates/app/code/task.sklearn.py.tpl,sha256=SeIIo0rr_6ffn4Qx2xELD
56
56
  flwr/cli/new/templates/app/code/task.tensorflow.py.tpl,sha256=SKXAZdgBnPpbAbJ90Rb7oQ5ilnopBx_j_JNFoUDeEAI,1732
57
57
  flwr/cli/new/templates/app/code/utils.baseline.py.tpl,sha256=YkHAgppUeD2BnBoGfVB6dEvBfjuIPGsU1gw4CiUi3qA,40
58
58
  flwr/cli/new/templates/app/pyproject.baseline.toml.tpl,sha256=_bT_ze1QPajyFZW0AxLILai0_2qiquB5_7FCSF0ZqCk,2666
59
- flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl,sha256=WHLdFbHhfs3ZmLCG5pa5TUKFoRV67TT1J1SXMM0zStY,1873
59
+ flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl,sha256=GH8stg-XUQAsj_324Cc9RYm7etdtcR49ssglOloo8kE,1873
60
60
  flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl,sha256=_LSCSc9cAiRuvTLdsy9wphwzhV7FCOUxO1ce12YOk58,1143
61
61
  flwr/cli/new/templates/app/pyproject.jax.toml.tpl,sha256=8xC1457V13AxTsO7SaLsqhQQPN7Aau3wbNZqKJ9Inx8,673
62
62
  flwr/cli/new/templates/app/pyproject.mlx.toml.tpl,sha256=sJMPYaroZLM7EkIX5ulnCelKxHlpViYiSqhswEnGrB0,744
@@ -146,7 +146,7 @@ flwr/common/secure_aggregation/secaggplus_constants.py,sha256=9MF-oQh62uD7rt9VeN
146
146
  flwr/common/secure_aggregation/secaggplus_utils.py,sha256=OgYd68YBRaHQYLc-YdExj9CSpwL58bVTaPrdHoAj2AE,3214
147
147
  flwr/common/serde.py,sha256=K9ExsqcTPETESkt2HMaNtIQAIAfwmuwtJFlG-59I7Sw,31046
148
148
  flwr/common/telemetry.py,sha256=CHIwFFQ13sWFavmEvkvA43XR1sbh1S3nWvD5TuCO2eI,8774
149
- flwr/common/typing.py,sha256=Ux8rJllzqORzCiv9HYkqVVyEzmd3nOKbcmttj5d2P_I,5801
149
+ flwr/common/typing.py,sha256=eTlGl56rdus583r11xHY_ejG-3b3rknqF735UY5zMK8,6025
150
150
  flwr/common/version.py,sha256=aNSxLL49RKeLz8sPcZrsTEWtrAeQ0uxu6tjmfba4O60,1325
151
151
  flwr/proto/__init__.py,sha256=hbY7JYakwZwCkYgCNlmHdc8rtvfoJbAZLalMdc--CGc,683
152
152
  flwr/proto/clientappio_pb2.py,sha256=Y3PMv-JMaBGehpslgbvGY6l2u5vNpfCTFWu-fmAmBJ4,3703
@@ -266,19 +266,19 @@ flwr/server/superlink/ffs/ffs.py,sha256=qLI1UfosJugu2BKOJWqHIhafTm-YiuKqGf3OGWPH
266
266
  flwr/server/superlink/ffs/ffs_factory.py,sha256=N_eMuUZggotdGiDQ5r_Tf21xsu_ob0e3jyM6ag7d3kk,1490
267
267
  flwr/server/superlink/fleet/__init__.py,sha256=76od-HhYjOUoZFLFDFCFnNHI4JLAmaXQEAyp7LWlQpc,711
268
268
  flwr/server/superlink/fleet/grpc_adapter/__init__.py,sha256=spBQQJeYz8zPOBOfyMLv87kqWPASGB73AymcLXdFaYA,742
269
- flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py,sha256=WZb6y52_AzSV7qbTbZSSLkMIsxaP1tO0mVyDerce4oY,6367
269
+ flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py,sha256=u3CR2oeNRBIINksenwcZREurIPqKds3JBEAVBhJjRS8,6413
270
270
  flwr/server/superlink/fleet/grpc_bidi/__init__.py,sha256=dkSKQMuMTYh1qSnuN87cAPv_mcdLg3f0PqTABHs8gUE,735
271
271
  flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py,sha256=ud08wi9j8OYRYVTIioL1xenOgrEbtS7afyr8MnQEk4I,6021
272
272
  flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py,sha256=JkAH_nIZaqe_9kntrg26od_jaz5XdLFuvNMgGu8xk9Q,6485
273
273
  flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py,sha256=h3EhqgelegVC4EjOXH5birmAnMoCBJcP7jpHYCnHZPk,4887
274
274
  flwr/server/superlink/fleet/grpc_bidi/grpc_server.py,sha256=X4I2rd1ZC9fqjOg9uwdTydLxJ3JiWthkIAqb3wEv17g,12454
275
275
  flwr/server/superlink/fleet/grpc_rere/__init__.py,sha256=j2hyC342am-_Hgp1g80Y3fGDzfTI6n8QOOn2PyWf4eg,758
276
- flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py,sha256=JuNdT6hs4iRtuToV6vkEuftCE_LgSipBPeRAJLWnJKw,4783
276
+ flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py,sha256=KBVsGt57G2_OWB_74N29TYVzD36G0xJg2l5m0ArPoEU,5389
277
277
  flwr/server/superlink/fleet/grpc_rere/server_interceptor.py,sha256=8PHzqtW_rKBvqI5XVwYN-CBEpEonnj85iN0daSWliyI,8299
278
278
  flwr/server/superlink/fleet/message_handler/__init__.py,sha256=h8oLD7uo5lKICPy0rRdKRjTYe62u8PKkT_fA4xF5JPA,731
279
- flwr/server/superlink/fleet/message_handler/message_handler.py,sha256=WAis2WPj0L91HSfOZqX-k0n9Rs3igdARKRMsV1VlTnY,4465
279
+ flwr/server/superlink/fleet/message_handler/message_handler.py,sha256=BVc30QUQBP8aMZ77jT4-VEbbqMI7b4kbw33ERzlbwWk,5329
280
280
  flwr/server/superlink/fleet/rest_rere/__init__.py,sha256=5jbYbAn75sGv-gBwOPDySE0kz96F6dTYLeMrGqNi4lM,735
281
- flwr/server/superlink/fleet/rest_rere/rest_api.py,sha256=WX-CiZVa4ntzMlZfBzKJtOsliP1Sm7GyHhPMqVXaehg,6605
281
+ flwr/server/superlink/fleet/rest_rere/rest_api.py,sha256=0b10l9zz381GXgCmTZGoz76Z_fdRaa8XcqMGwuLqJ38,6723
282
282
  flwr/server/superlink/fleet/vce/__init__.py,sha256=TZJsKTpYO_djv2EXx9Ji62I8TA0JiZF8jvRyJRZkAes,784
283
283
  flwr/server/superlink/fleet/vce/backend/__init__.py,sha256=cGgal5qpd0_MwEdIqjJbHHSIgGa6GSPoI5_byUwtG_k,1437
284
284
  flwr/server/superlink/fleet/vce/backend/backend.py,sha256=LBAQxnbfPAphVOVIvYMj0QIvVP5O-RQxKQlUGNUj974,2194
@@ -321,8 +321,8 @@ flwr/superexec/exec_servicer.py,sha256=8tFwj1fDBF6PzwLhByTlxM-KNZc83bG1UdE92-8DS
321
321
  flwr/superexec/exec_user_auth_interceptor.py,sha256=K06OU-l4LnYhTDg071hGJuOaQWEJbZsYi5qxUmmtiG0,3704
322
322
  flwr/superexec/executor.py,sha256=_B55WW2TD1fBINpabSSDRenVHXYmvlfhv-k8hJKU4lQ,3115
323
323
  flwr/superexec/simulation.py,sha256=WQDon15oqpMopAZnwRZoTICYCfHqtkvFSqiTQ2hLD_g,4088
324
- flwr_nightly-1.14.0.dev20241213.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
325
- flwr_nightly-1.14.0.dev20241213.dist-info/METADATA,sha256=7JajP-LVEnutD2dJXttOrz81Lf5wzSZYrO5os1o-zrQ,15799
326
- flwr_nightly-1.14.0.dev20241213.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
327
- flwr_nightly-1.14.0.dev20241213.dist-info/entry_points.txt,sha256=JlNxX3qhaV18_2yj5a3kJW1ESxm31cal9iS_N_pf1Rk,538
328
- flwr_nightly-1.14.0.dev20241213.dist-info/RECORD,,
324
+ flwr_nightly-1.14.0.dev20241215.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
325
+ flwr_nightly-1.14.0.dev20241215.dist-info/METADATA,sha256=csVHUef81pr3BfCXzf9Q-1SeSVielWD42cIhAG1KeC4,15799
326
+ flwr_nightly-1.14.0.dev20241215.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
327
+ flwr_nightly-1.14.0.dev20241215.dist-info/entry_points.txt,sha256=JlNxX3qhaV18_2yj5a3kJW1ESxm31cal9iS_N_pf1Rk,538
328
+ flwr_nightly-1.14.0.dev20241215.dist-info/RECORD,,