flwr-nightly 1.13.0.dev20241021__py3-none-any.whl → 1.13.0.dev20241106__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.
- flwr/cli/build.py +2 -2
- flwr/cli/config_utils.py +97 -0
- flwr/cli/log.py +63 -97
- flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl +1 -1
- flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +1 -0
- flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +1 -1
- flwr/cli/run/run.py +18 -83
- flwr/client/app.py +13 -14
- flwr/client/clientapp/app.py +1 -2
- flwr/client/{node_state.py → run_info_store.py} +4 -3
- flwr/client/supernode/app.py +6 -8
- flwr/common/constant.py +39 -4
- flwr/common/context.py +9 -4
- flwr/common/date.py +3 -3
- flwr/common/logger.py +103 -0
- flwr/common/serde.py +24 -0
- flwr/common/telemetry.py +0 -6
- flwr/common/typing.py +9 -0
- flwr/proto/exec_pb2.py +6 -6
- flwr/proto/exec_pb2.pyi +8 -2
- flwr/proto/log_pb2.py +29 -0
- flwr/proto/log_pb2.pyi +39 -0
- flwr/proto/log_pb2_grpc.py +4 -0
- flwr/proto/log_pb2_grpc.pyi +4 -0
- flwr/proto/message_pb2.py +8 -8
- flwr/proto/message_pb2.pyi +4 -1
- flwr/proto/serverappio_pb2.py +52 -0
- flwr/proto/{driver_pb2.pyi → serverappio_pb2.pyi} +54 -0
- flwr/proto/serverappio_pb2_grpc.py +376 -0
- flwr/proto/serverappio_pb2_grpc.pyi +147 -0
- flwr/proto/simulationio_pb2.py +38 -0
- flwr/proto/simulationio_pb2.pyi +65 -0
- flwr/proto/simulationio_pb2_grpc.py +171 -0
- flwr/proto/simulationio_pb2_grpc.pyi +68 -0
- flwr/server/app.py +247 -105
- flwr/server/driver/driver.py +15 -1
- flwr/server/driver/grpc_driver.py +26 -33
- flwr/server/driver/inmemory_driver.py +6 -14
- flwr/server/run_serverapp.py +29 -23
- flwr/server/{superlink/state → serverapp}/__init__.py +3 -9
- flwr/server/serverapp/app.py +270 -0
- flwr/server/strategy/fedadam.py +11 -1
- flwr/server/superlink/driver/__init__.py +1 -1
- flwr/server/superlink/driver/{driver_grpc.py → serverappio_grpc.py} +19 -16
- flwr/server/superlink/driver/{driver_servicer.py → serverappio_servicer.py} +125 -39
- flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +4 -2
- flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +2 -2
- flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +4 -2
- flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +2 -2
- flwr/server/superlink/fleet/message_handler/message_handler.py +7 -7
- flwr/server/superlink/fleet/rest_rere/rest_api.py +7 -7
- flwr/server/superlink/fleet/vce/vce_api.py +23 -23
- flwr/server/superlink/linkstate/__init__.py +28 -0
- flwr/server/superlink/{state/in_memory_state.py → linkstate/in_memory_linkstate.py} +180 -21
- flwr/server/superlink/{state/state.py → linkstate/linkstate.py} +144 -15
- flwr/server/superlink/{state/state_factory.py → linkstate/linkstate_factory.py} +9 -9
- flwr/server/superlink/{state/sqlite_state.py → linkstate/sqlite_linkstate.py} +300 -50
- flwr/server/superlink/{state → linkstate}/utils.py +84 -2
- flwr/server/superlink/simulation/__init__.py +15 -0
- flwr/server/superlink/simulation/simulationio_grpc.py +65 -0
- flwr/server/superlink/simulation/simulationio_servicer.py +132 -0
- flwr/simulation/__init__.py +2 -0
- flwr/simulation/app.py +1 -1
- flwr/simulation/ray_transport/ray_client_proxy.py +2 -2
- flwr/simulation/run_simulation.py +57 -131
- flwr/simulation/simulationio_connection.py +86 -0
- flwr/superexec/app.py +6 -134
- flwr/superexec/deployment.py +60 -65
- flwr/superexec/exec_grpc.py +15 -8
- flwr/superexec/exec_servicer.py +34 -63
- flwr/superexec/executor.py +22 -4
- flwr/superexec/simulation.py +13 -8
- {flwr_nightly-1.13.0.dev20241021.dist-info → flwr_nightly-1.13.0.dev20241106.dist-info}/METADATA +1 -1
- {flwr_nightly-1.13.0.dev20241021.dist-info → flwr_nightly-1.13.0.dev20241106.dist-info}/RECORD +77 -64
- {flwr_nightly-1.13.0.dev20241021.dist-info → flwr_nightly-1.13.0.dev20241106.dist-info}/entry_points.txt +1 -0
- flwr/client/node_state_tests.py +0 -66
- flwr/proto/driver_pb2.py +0 -42
- flwr/proto/driver_pb2_grpc.py +0 -239
- flwr/proto/driver_pb2_grpc.pyi +0 -94
- {flwr_nightly-1.13.0.dev20241021.dist-info → flwr_nightly-1.13.0.dev20241106.dist-info}/LICENSE +0 -0
- {flwr_nightly-1.13.0.dev20241021.dist-info → flwr_nightly-1.13.0.dev20241106.dist-info}/WHEEL +0 -0
flwr/client/supernode/app.py
CHANGED
|
@@ -31,6 +31,8 @@ from flwr.common import EventType, event
|
|
|
31
31
|
from flwr.common.config import parse_config_args
|
|
32
32
|
from flwr.common.constant import (
|
|
33
33
|
FLEET_API_GRPC_RERE_DEFAULT_ADDRESS,
|
|
34
|
+
ISOLATION_MODE_PROCESS,
|
|
35
|
+
ISOLATION_MODE_SUBPROCESS,
|
|
34
36
|
TRANSPORT_TYPE_GRPC_ADAPTER,
|
|
35
37
|
TRANSPORT_TYPE_GRPC_RERE,
|
|
36
38
|
TRANSPORT_TYPE_REST,
|
|
@@ -38,11 +40,7 @@ from flwr.common.constant import (
|
|
|
38
40
|
from flwr.common.exit_handlers import register_exit_handlers
|
|
39
41
|
from flwr.common.logger import log, warn_deprecated_feature
|
|
40
42
|
|
|
41
|
-
from ..app import
|
|
42
|
-
ISOLATION_MODE_PROCESS,
|
|
43
|
-
ISOLATION_MODE_SUBPROCESS,
|
|
44
|
-
start_client_internal,
|
|
45
|
-
)
|
|
43
|
+
from ..app import start_client_internal
|
|
46
44
|
from ..clientapp.utils import get_load_client_app_fn
|
|
47
45
|
|
|
48
46
|
|
|
@@ -200,10 +198,10 @@ def _parse_args_run_supernode() -> argparse.ArgumentParser:
|
|
|
200
198
|
ISOLATION_MODE_SUBPROCESS,
|
|
201
199
|
ISOLATION_MODE_PROCESS,
|
|
202
200
|
],
|
|
203
|
-
help="Isolation mode when running `ClientApp` (optional, possible values: "
|
|
204
|
-
"`subprocess`, `process`). By default, `ClientApp` runs in the same process "
|
|
201
|
+
help="Isolation mode when running a `ClientApp` (optional, possible values: "
|
|
202
|
+
"`subprocess`, `process`). By default, a `ClientApp` runs in the same process "
|
|
205
203
|
"that executes the SuperNode. Use `subprocess` to configure SuperNode to run "
|
|
206
|
-
"`ClientApp` in a subprocess. Use `process` to indicate that a separate "
|
|
204
|
+
"a `ClientApp` in a subprocess. Use `process` to indicate that a separate "
|
|
207
205
|
"independent process gets created outside of SuperNode.",
|
|
208
206
|
)
|
|
209
207
|
parser.add_argument(
|
flwr/common/constant.py
CHANGED
|
@@ -40,15 +40,15 @@ TRANSPORT_TYPES = [
|
|
|
40
40
|
# Addresses
|
|
41
41
|
# SuperNode
|
|
42
42
|
CLIENTAPPIO_API_DEFAULT_ADDRESS = "0.0.0.0:9094"
|
|
43
|
-
# SuperExec
|
|
44
|
-
EXEC_API_DEFAULT_ADDRESS = "0.0.0.0:9093"
|
|
45
43
|
# SuperLink
|
|
46
|
-
|
|
44
|
+
SERVERAPPIO_API_DEFAULT_ADDRESS = "0.0.0.0:9091"
|
|
47
45
|
FLEET_API_GRPC_RERE_DEFAULT_ADDRESS = "0.0.0.0:9092"
|
|
48
46
|
FLEET_API_GRPC_BIDI_DEFAULT_ADDRESS = (
|
|
49
47
|
"[::]:8080" # IPv6 to keep start_server compatible
|
|
50
48
|
)
|
|
51
|
-
FLEET_API_REST_DEFAULT_ADDRESS = "0.0.0.0:
|
|
49
|
+
FLEET_API_REST_DEFAULT_ADDRESS = "0.0.0.0:9095"
|
|
50
|
+
EXEC_API_DEFAULT_ADDRESS = "0.0.0.0:9093"
|
|
51
|
+
SIMULATIONIO_API_DEFAULT_ADDRESS = "0.0.0.0:9096"
|
|
52
52
|
|
|
53
53
|
# Constants for ping
|
|
54
54
|
PING_DEFAULT_INTERVAL = 30
|
|
@@ -84,6 +84,16 @@ GRPC_ADAPTER_METADATA_MESSAGE_QUALNAME_KEY = "grpc-message-qualname"
|
|
|
84
84
|
# Message TTL
|
|
85
85
|
MESSAGE_TTL_TOLERANCE = 1e-1
|
|
86
86
|
|
|
87
|
+
# Isolation modes
|
|
88
|
+
ISOLATION_MODE_SUBPROCESS = "subprocess"
|
|
89
|
+
ISOLATION_MODE_PROCESS = "process"
|
|
90
|
+
|
|
91
|
+
# Log streaming configurations
|
|
92
|
+
CONN_REFRESH_PERIOD = 60 # Stream connection refresh period
|
|
93
|
+
CONN_RECONNECT_INTERVAL = 0.5 # Reconnect interval between two stream connections
|
|
94
|
+
LOG_STREAM_INTERVAL = 0.5 # Log stream interval for `ExecServicer.StreamLogs`
|
|
95
|
+
LOG_UPLOAD_INTERVAL = 0.2 # Minimum interval between two log uploads
|
|
96
|
+
|
|
87
97
|
|
|
88
98
|
class MessageType:
|
|
89
99
|
"""Message type."""
|
|
@@ -129,3 +139,28 @@ class ErrorCode:
|
|
|
129
139
|
def __new__(cls) -> ErrorCode:
|
|
130
140
|
"""Prevent instantiation."""
|
|
131
141
|
raise TypeError(f"{cls.__name__} cannot be instantiated.")
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
class Status:
|
|
145
|
+
"""Run status."""
|
|
146
|
+
|
|
147
|
+
PENDING = "pending"
|
|
148
|
+
STARTING = "starting"
|
|
149
|
+
RUNNING = "running"
|
|
150
|
+
FINISHED = "finished"
|
|
151
|
+
|
|
152
|
+
def __new__(cls) -> Status:
|
|
153
|
+
"""Prevent instantiation."""
|
|
154
|
+
raise TypeError(f"{cls.__name__} cannot be instantiated.")
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
class SubStatus:
|
|
158
|
+
"""Run sub-status."""
|
|
159
|
+
|
|
160
|
+
COMPLETED = "completed"
|
|
161
|
+
FAILED = "failed"
|
|
162
|
+
STOPPED = "stopped"
|
|
163
|
+
|
|
164
|
+
def __new__(cls) -> SubStatus:
|
|
165
|
+
"""Prevent instantiation."""
|
|
166
|
+
raise TypeError(f"{cls.__name__} cannot be instantiated.")
|
flwr/common/context.py
CHANGED
|
@@ -27,36 +27,41 @@ class Context:
|
|
|
27
27
|
|
|
28
28
|
Parameters
|
|
29
29
|
----------
|
|
30
|
+
run_id : int
|
|
31
|
+
The ID that identifies the run.
|
|
30
32
|
node_id : int
|
|
31
33
|
The ID that identifies the node.
|
|
32
34
|
node_config : UserConfig
|
|
33
35
|
A config (key/value mapping) unique to the node and independent of the
|
|
34
36
|
`run_config`. This config persists across all runs this node participates in.
|
|
35
37
|
state : RecordSet
|
|
36
|
-
Holds records added by the entity in a given
|
|
38
|
+
Holds records added by the entity in a given `run_id` and that will stay local.
|
|
37
39
|
This means that the data it holds will never leave the system it's running from.
|
|
38
40
|
This can be used as an intermediate storage or scratchpad when
|
|
39
41
|
executing mods. It can also be used as a memory to access
|
|
40
42
|
at different points during the lifecycle of this entity (e.g. across
|
|
41
43
|
multiple rounds)
|
|
42
44
|
run_config : UserConfig
|
|
43
|
-
A config (key/value mapping) held by the entity in a given
|
|
44
|
-
stay local. It can be used at any point during the lifecycle of this entity
|
|
45
|
+
A config (key/value mapping) held by the entity in a given `run_id` and that
|
|
46
|
+
will stay local. It can be used at any point during the lifecycle of this entity
|
|
45
47
|
(e.g. across multiple rounds)
|
|
46
48
|
"""
|
|
47
49
|
|
|
50
|
+
run_id: int
|
|
48
51
|
node_id: int
|
|
49
52
|
node_config: UserConfig
|
|
50
53
|
state: RecordSet
|
|
51
54
|
run_config: UserConfig
|
|
52
55
|
|
|
53
|
-
def __init__( # pylint: disable=too-many-arguments
|
|
56
|
+
def __init__( # pylint: disable=too-many-arguments, too-many-positional-arguments
|
|
54
57
|
self,
|
|
58
|
+
run_id: int,
|
|
55
59
|
node_id: int,
|
|
56
60
|
node_config: UserConfig,
|
|
57
61
|
state: RecordSet,
|
|
58
62
|
run_config: UserConfig,
|
|
59
63
|
) -> None:
|
|
64
|
+
self.run_id = run_id
|
|
60
65
|
self.node_id = node_id
|
|
61
66
|
self.node_config = node_config
|
|
62
67
|
self.state = state
|
flwr/common/date.py
CHANGED
|
@@ -15,9 +15,9 @@
|
|
|
15
15
|
"""Flower date utils."""
|
|
16
16
|
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
import datetime
|
|
19
19
|
|
|
20
20
|
|
|
21
|
-
def now() -> datetime:
|
|
21
|
+
def now() -> datetime.datetime:
|
|
22
22
|
"""Construct a datetime from time.time() with time zone set to UTC."""
|
|
23
|
-
return datetime.now(tz=timezone.utc)
|
|
23
|
+
return datetime.datetime.now(tz=datetime.timezone.utc)
|
flwr/common/logger.py
CHANGED
|
@@ -16,10 +16,22 @@
|
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
import logging
|
|
19
|
+
import sys
|
|
20
|
+
import threading
|
|
21
|
+
import time
|
|
19
22
|
from logging import WARN, LogRecord
|
|
20
23
|
from logging.handlers import HTTPHandler
|
|
24
|
+
from queue import Empty, Queue
|
|
21
25
|
from typing import TYPE_CHECKING, Any, Optional, TextIO
|
|
22
26
|
|
|
27
|
+
import grpc
|
|
28
|
+
|
|
29
|
+
from flwr.proto.log_pb2 import PushLogsRequest # pylint: disable=E0611
|
|
30
|
+
from flwr.proto.node_pb2 import Node # pylint: disable=E0611
|
|
31
|
+
from flwr.proto.serverappio_pb2_grpc import ServerAppIoStub # pylint: disable=E0611
|
|
32
|
+
|
|
33
|
+
from .constant import LOG_UPLOAD_INTERVAL
|
|
34
|
+
|
|
23
35
|
# Create logger
|
|
24
36
|
LOGGER_NAME = "flwr"
|
|
25
37
|
FLOWER_LOGGER = logging.getLogger(LOGGER_NAME)
|
|
@@ -259,3 +271,94 @@ def set_logger_propagation(
|
|
|
259
271
|
if not child_logger.propagate:
|
|
260
272
|
child_logger.log(logging.DEBUG, "Logger propagate set to False")
|
|
261
273
|
return child_logger
|
|
274
|
+
|
|
275
|
+
|
|
276
|
+
def mirror_output_to_queue(log_queue: Queue[Optional[str]]) -> None:
|
|
277
|
+
"""Mirror stdout and stderr output to the provided queue."""
|
|
278
|
+
|
|
279
|
+
def get_write_fn(stream: TextIO) -> Any:
|
|
280
|
+
original_write = stream.write
|
|
281
|
+
|
|
282
|
+
def fn(s: str) -> int:
|
|
283
|
+
ret = original_write(s)
|
|
284
|
+
stream.flush()
|
|
285
|
+
log_queue.put(s)
|
|
286
|
+
return ret
|
|
287
|
+
|
|
288
|
+
return fn
|
|
289
|
+
|
|
290
|
+
sys.stdout.write = get_write_fn(sys.stdout) # type: ignore[method-assign]
|
|
291
|
+
sys.stderr.write = get_write_fn(sys.stderr) # type: ignore[method-assign]
|
|
292
|
+
console_handler.stream = sys.stdout
|
|
293
|
+
|
|
294
|
+
|
|
295
|
+
def restore_output() -> None:
|
|
296
|
+
"""Restore stdout and stderr.
|
|
297
|
+
|
|
298
|
+
This will stop mirroring output to queues.
|
|
299
|
+
"""
|
|
300
|
+
sys.stdout = sys.__stdout__
|
|
301
|
+
sys.stderr = sys.__stderr__
|
|
302
|
+
console_handler.stream = sys.stdout
|
|
303
|
+
|
|
304
|
+
|
|
305
|
+
def _log_uploader(
|
|
306
|
+
log_queue: Queue[Optional[str]], node_id: int, run_id: int, stub: ServerAppIoStub
|
|
307
|
+
) -> None:
|
|
308
|
+
"""Upload logs to the SuperLink."""
|
|
309
|
+
exit_flag = False
|
|
310
|
+
node = Node(node_id=node_id, anonymous=False)
|
|
311
|
+
msgs: list[str] = []
|
|
312
|
+
while True:
|
|
313
|
+
# Fetch all messages from the queue
|
|
314
|
+
try:
|
|
315
|
+
while True:
|
|
316
|
+
msg = log_queue.get_nowait()
|
|
317
|
+
# Quit the loops if the returned message is `None`
|
|
318
|
+
# This is a signal that the run has finished
|
|
319
|
+
if msg is None:
|
|
320
|
+
exit_flag = True
|
|
321
|
+
break
|
|
322
|
+
msgs.append(msg)
|
|
323
|
+
except Empty:
|
|
324
|
+
pass
|
|
325
|
+
|
|
326
|
+
# Upload if any logs
|
|
327
|
+
if msgs:
|
|
328
|
+
req = PushLogsRequest(
|
|
329
|
+
node=node,
|
|
330
|
+
run_id=run_id,
|
|
331
|
+
logs=msgs,
|
|
332
|
+
)
|
|
333
|
+
try:
|
|
334
|
+
stub.PushLogs(req)
|
|
335
|
+
msgs.clear()
|
|
336
|
+
except grpc.RpcError as e:
|
|
337
|
+
# Ignore minor network errors
|
|
338
|
+
# pylint: disable-next=no-member
|
|
339
|
+
if e.code() != grpc.StatusCode.UNAVAILABLE:
|
|
340
|
+
raise e
|
|
341
|
+
|
|
342
|
+
if exit_flag:
|
|
343
|
+
break
|
|
344
|
+
|
|
345
|
+
time.sleep(LOG_UPLOAD_INTERVAL)
|
|
346
|
+
|
|
347
|
+
|
|
348
|
+
def start_log_uploader(
|
|
349
|
+
log_queue: Queue[Optional[str]], node_id: int, run_id: int, stub: ServerAppIoStub
|
|
350
|
+
) -> threading.Thread:
|
|
351
|
+
"""Start the log uploader thread and return it."""
|
|
352
|
+
thread = threading.Thread(
|
|
353
|
+
target=_log_uploader, args=(log_queue, node_id, run_id, stub)
|
|
354
|
+
)
|
|
355
|
+
thread.start()
|
|
356
|
+
return thread
|
|
357
|
+
|
|
358
|
+
|
|
359
|
+
def stop_log_uploader(
|
|
360
|
+
log_queue: Queue[Optional[str]], log_uploader: threading.Thread
|
|
361
|
+
) -> None:
|
|
362
|
+
"""Stop the log uploader thread."""
|
|
363
|
+
log_queue.put(None)
|
|
364
|
+
log_uploader.join()
|
flwr/common/serde.py
CHANGED
|
@@ -40,6 +40,7 @@ from flwr.proto.recordset_pb2 import ParametersRecord as ProtoParametersRecord
|
|
|
40
40
|
from flwr.proto.recordset_pb2 import RecordSet as ProtoRecordSet
|
|
41
41
|
from flwr.proto.recordset_pb2 import SintList, StringList, UintList
|
|
42
42
|
from flwr.proto.run_pb2 import Run as ProtoRun
|
|
43
|
+
from flwr.proto.run_pb2 import RunStatus as ProtoRunStatus
|
|
43
44
|
from flwr.proto.task_pb2 import Task, TaskIns, TaskRes
|
|
44
45
|
from flwr.proto.transport_pb2 import (
|
|
45
46
|
ClientMessage,
|
|
@@ -839,6 +840,7 @@ def message_from_proto(message_proto: ProtoMessage) -> Message:
|
|
|
839
840
|
def context_to_proto(context: Context) -> ProtoContext:
|
|
840
841
|
"""Serialize `Context` to ProtoBuf."""
|
|
841
842
|
proto = ProtoContext(
|
|
843
|
+
run_id=context.run_id,
|
|
842
844
|
node_id=context.node_id,
|
|
843
845
|
node_config=user_config_to_proto(context.node_config),
|
|
844
846
|
state=recordset_to_proto(context.state),
|
|
@@ -850,6 +852,7 @@ def context_to_proto(context: Context) -> ProtoContext:
|
|
|
850
852
|
def context_from_proto(context_proto: ProtoContext) -> Context:
|
|
851
853
|
"""Deserialize `Context` from ProtoBuf."""
|
|
852
854
|
context = Context(
|
|
855
|
+
run_id=context_proto.run_id,
|
|
853
856
|
node_id=context_proto.node_id,
|
|
854
857
|
node_config=user_config_from_proto(context_proto.node_config),
|
|
855
858
|
state=recordset_from_proto(context_proto.state),
|
|
@@ -910,3 +913,24 @@ def clientappstatus_from_proto(
|
|
|
910
913
|
if msg.code == ClientAppOutputCode.UNKNOWN_ERROR:
|
|
911
914
|
code = typing.ClientAppOutputCode.UNKNOWN_ERROR
|
|
912
915
|
return typing.ClientAppOutputStatus(code=code, message=msg.message)
|
|
916
|
+
|
|
917
|
+
|
|
918
|
+
# === Run status ===
|
|
919
|
+
|
|
920
|
+
|
|
921
|
+
def run_status_to_proto(run_status: typing.RunStatus) -> ProtoRunStatus:
|
|
922
|
+
"""Serialize `RunStatus` to ProtoBuf."""
|
|
923
|
+
return ProtoRunStatus(
|
|
924
|
+
status=run_status.status,
|
|
925
|
+
sub_status=run_status.sub_status,
|
|
926
|
+
details=run_status.details,
|
|
927
|
+
)
|
|
928
|
+
|
|
929
|
+
|
|
930
|
+
def run_status_from_proto(run_status_proto: ProtoRunStatus) -> typing.RunStatus:
|
|
931
|
+
"""Deserialize `RunStatus` from ProtoBuf."""
|
|
932
|
+
return typing.RunStatus(
|
|
933
|
+
status=run_status_proto.status,
|
|
934
|
+
sub_status=run_status_proto.sub_status,
|
|
935
|
+
details=run_status_proto.details,
|
|
936
|
+
)
|
flwr/common/telemetry.py
CHANGED
|
@@ -150,12 +150,6 @@ class EventType(str, Enum):
|
|
|
150
150
|
|
|
151
151
|
# Not yet implemented
|
|
152
152
|
|
|
153
|
-
# --- SuperExec --------------------------------------------------------------------
|
|
154
|
-
|
|
155
|
-
# SuperExec
|
|
156
|
-
RUN_SUPEREXEC_ENTER = auto()
|
|
157
|
-
RUN_SUPEREXEC_LEAVE = auto()
|
|
158
|
-
|
|
159
153
|
# --- Simulation Engine ------------------------------------------------------------
|
|
160
154
|
|
|
161
155
|
# CLI: flower-simulation
|
flwr/common/typing.py
CHANGED
|
@@ -218,6 +218,15 @@ class Run:
|
|
|
218
218
|
override_config: UserConfig
|
|
219
219
|
|
|
220
220
|
|
|
221
|
+
@dataclass
|
|
222
|
+
class RunStatus:
|
|
223
|
+
"""Run status information."""
|
|
224
|
+
|
|
225
|
+
status: str
|
|
226
|
+
sub_status: str
|
|
227
|
+
details: str
|
|
228
|
+
|
|
229
|
+
|
|
221
230
|
@dataclass
|
|
222
231
|
class Fab:
|
|
223
232
|
"""Fab file representation."""
|
flwr/proto/exec_pb2.py
CHANGED
|
@@ -16,7 +16,7 @@ from flwr.proto import fab_pb2 as flwr_dot_proto_dot_fab__pb2
|
|
|
16
16
|
from flwr.proto import transport_pb2 as flwr_dot_proto_dot_transport__pb2
|
|
17
17
|
|
|
18
18
|
|
|
19
|
-
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x15\x66lwr/proto/exec.proto\x12\nflwr.proto\x1a\x14\x66lwr/proto/fab.proto\x1a\x1a\x66lwr/proto/transport.proto\"\xdf\x02\n\x0fStartRunRequest\x12\x1c\n\x03\x66\x61\x62\x18\x01 \x01(\x0b\x32\x0f.flwr.proto.Fab\x12H\n\x0foverride_config\x18\x02 \x03(\x0b\x32/.flwr.proto.StartRunRequest.OverrideConfigEntry\x12L\n\x11\x66\x65\x64\x65ration_config\x18\x03 \x03(\x0b\x32\x31.flwr.proto.StartRunRequest.FederationConfigEntry\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\x1aK\n\x15\x46\x65\x64\x65rationConfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\"\"\n\x10StartRunResponse\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\"
|
|
19
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x15\x66lwr/proto/exec.proto\x12\nflwr.proto\x1a\x14\x66lwr/proto/fab.proto\x1a\x1a\x66lwr/proto/transport.proto\"\xdf\x02\n\x0fStartRunRequest\x12\x1c\n\x03\x66\x61\x62\x18\x01 \x01(\x0b\x32\x0f.flwr.proto.Fab\x12H\n\x0foverride_config\x18\x02 \x03(\x0b\x32/.flwr.proto.StartRunRequest.OverrideConfigEntry\x12L\n\x11\x66\x65\x64\x65ration_config\x18\x03 \x03(\x0b\x32\x31.flwr.proto.StartRunRequest.FederationConfigEntry\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\x1aK\n\x15\x46\x65\x64\x65rationConfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\"\"\n\x10StartRunResponse\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\"<\n\x11StreamLogsRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\x12\x17\n\x0f\x61\x66ter_timestamp\x18\x02 \x01(\x01\"B\n\x12StreamLogsResponse\x12\x12\n\nlog_output\x18\x01 \x01(\t\x12\x18\n\x10latest_timestamp\x18\x02 \x01(\x01\x32\xa0\x01\n\x04\x45xec\x12G\n\x08StartRun\x12\x1b.flwr.proto.StartRunRequest\x1a\x1c.flwr.proto.StartRunResponse\"\x00\x12O\n\nStreamLogs\x12\x1d.flwr.proto.StreamLogsRequest\x1a\x1e.flwr.proto.StreamLogsResponse\"\x00\x30\x01\x62\x06proto3')
|
|
20
20
|
|
|
21
21
|
_globals = globals()
|
|
22
22
|
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
|
@@ -36,9 +36,9 @@ if _descriptor._USE_C_DESCRIPTORS == False:
|
|
|
36
36
|
_globals['_STARTRUNRESPONSE']._serialized_start=441
|
|
37
37
|
_globals['_STARTRUNRESPONSE']._serialized_end=475
|
|
38
38
|
_globals['_STREAMLOGSREQUEST']._serialized_start=477
|
|
39
|
-
_globals['_STREAMLOGSREQUEST']._serialized_end=
|
|
40
|
-
_globals['_STREAMLOGSRESPONSE']._serialized_start=
|
|
41
|
-
_globals['_STREAMLOGSRESPONSE']._serialized_end=
|
|
42
|
-
_globals['_EXEC']._serialized_start=
|
|
43
|
-
_globals['_EXEC']._serialized_end=
|
|
39
|
+
_globals['_STREAMLOGSREQUEST']._serialized_end=537
|
|
40
|
+
_globals['_STREAMLOGSRESPONSE']._serialized_start=539
|
|
41
|
+
_globals['_STREAMLOGSRESPONSE']._serialized_end=605
|
|
42
|
+
_globals['_EXEC']._serialized_start=608
|
|
43
|
+
_globals['_EXEC']._serialized_end=768
|
|
44
44
|
# @@protoc_insertion_point(module_scope)
|
flwr/proto/exec_pb2.pyi
CHANGED
|
@@ -78,21 +78,27 @@ global___StartRunResponse = StartRunResponse
|
|
|
78
78
|
class StreamLogsRequest(google.protobuf.message.Message):
|
|
79
79
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
80
80
|
RUN_ID_FIELD_NUMBER: builtins.int
|
|
81
|
+
AFTER_TIMESTAMP_FIELD_NUMBER: builtins.int
|
|
81
82
|
run_id: builtins.int
|
|
83
|
+
after_timestamp: builtins.float
|
|
82
84
|
def __init__(self,
|
|
83
85
|
*,
|
|
84
86
|
run_id: builtins.int = ...,
|
|
87
|
+
after_timestamp: builtins.float = ...,
|
|
85
88
|
) -> None: ...
|
|
86
|
-
def ClearField(self, field_name: typing_extensions.Literal["run_id",b"run_id"]) -> None: ...
|
|
89
|
+
def ClearField(self, field_name: typing_extensions.Literal["after_timestamp",b"after_timestamp","run_id",b"run_id"]) -> None: ...
|
|
87
90
|
global___StreamLogsRequest = StreamLogsRequest
|
|
88
91
|
|
|
89
92
|
class StreamLogsResponse(google.protobuf.message.Message):
|
|
90
93
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
91
94
|
LOG_OUTPUT_FIELD_NUMBER: builtins.int
|
|
95
|
+
LATEST_TIMESTAMP_FIELD_NUMBER: builtins.int
|
|
92
96
|
log_output: typing.Text
|
|
97
|
+
latest_timestamp: builtins.float
|
|
93
98
|
def __init__(self,
|
|
94
99
|
*,
|
|
95
100
|
log_output: typing.Text = ...,
|
|
101
|
+
latest_timestamp: builtins.float = ...,
|
|
96
102
|
) -> None: ...
|
|
97
|
-
def ClearField(self, field_name: typing_extensions.Literal["log_output",b"log_output"]) -> None: ...
|
|
103
|
+
def ClearField(self, field_name: typing_extensions.Literal["latest_timestamp",b"latest_timestamp","log_output",b"log_output"]) -> None: ...
|
|
98
104
|
global___StreamLogsResponse = StreamLogsResponse
|
flwr/proto/log_pb2.py
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
|
3
|
+
# source: flwr/proto/log.proto
|
|
4
|
+
# Protobuf Python Version: 4.25.0
|
|
5
|
+
"""Generated protocol buffer code."""
|
|
6
|
+
from google.protobuf import descriptor as _descriptor
|
|
7
|
+
from google.protobuf import descriptor_pool as _descriptor_pool
|
|
8
|
+
from google.protobuf import symbol_database as _symbol_database
|
|
9
|
+
from google.protobuf.internal import builder as _builder
|
|
10
|
+
# @@protoc_insertion_point(imports)
|
|
11
|
+
|
|
12
|
+
_sym_db = _symbol_database.Default()
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
from flwr.proto import node_pb2 as flwr_dot_proto_dot_node__pb2
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x14\x66lwr/proto/log.proto\x12\nflwr.proto\x1a\x15\x66lwr/proto/node.proto\"O\n\x0fPushLogsRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x0e\n\x06run_id\x18\x02 \x01(\x04\x12\x0c\n\x04logs\x18\x03 \x03(\t\"\x12\n\x10PushLogsResponseb\x06proto3')
|
|
19
|
+
|
|
20
|
+
_globals = globals()
|
|
21
|
+
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
|
22
|
+
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'flwr.proto.log_pb2', _globals)
|
|
23
|
+
if _descriptor._USE_C_DESCRIPTORS == False:
|
|
24
|
+
DESCRIPTOR._options = None
|
|
25
|
+
_globals['_PUSHLOGSREQUEST']._serialized_start=59
|
|
26
|
+
_globals['_PUSHLOGSREQUEST']._serialized_end=138
|
|
27
|
+
_globals['_PUSHLOGSRESPONSE']._serialized_start=140
|
|
28
|
+
_globals['_PUSHLOGSRESPONSE']._serialized_end=158
|
|
29
|
+
# @@protoc_insertion_point(module_scope)
|
flwr/proto/log_pb2.pyi
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"""
|
|
2
|
+
@generated by mypy-protobuf. Do not edit manually!
|
|
3
|
+
isort:skip_file
|
|
4
|
+
"""
|
|
5
|
+
import builtins
|
|
6
|
+
import flwr.proto.node_pb2
|
|
7
|
+
import google.protobuf.descriptor
|
|
8
|
+
import google.protobuf.internal.containers
|
|
9
|
+
import google.protobuf.message
|
|
10
|
+
import typing
|
|
11
|
+
import typing_extensions
|
|
12
|
+
|
|
13
|
+
DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
|
|
14
|
+
|
|
15
|
+
class PushLogsRequest(google.protobuf.message.Message):
|
|
16
|
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
17
|
+
NODE_FIELD_NUMBER: builtins.int
|
|
18
|
+
RUN_ID_FIELD_NUMBER: builtins.int
|
|
19
|
+
LOGS_FIELD_NUMBER: builtins.int
|
|
20
|
+
@property
|
|
21
|
+
def node(self) -> flwr.proto.node_pb2.Node: ...
|
|
22
|
+
run_id: builtins.int
|
|
23
|
+
@property
|
|
24
|
+
def logs(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[typing.Text]: ...
|
|
25
|
+
def __init__(self,
|
|
26
|
+
*,
|
|
27
|
+
node: typing.Optional[flwr.proto.node_pb2.Node] = ...,
|
|
28
|
+
run_id: builtins.int = ...,
|
|
29
|
+
logs: typing.Optional[typing.Iterable[typing.Text]] = ...,
|
|
30
|
+
) -> None: ...
|
|
31
|
+
def HasField(self, field_name: typing_extensions.Literal["node",b"node"]) -> builtins.bool: ...
|
|
32
|
+
def ClearField(self, field_name: typing_extensions.Literal["logs",b"logs","node",b"node","run_id",b"run_id"]) -> None: ...
|
|
33
|
+
global___PushLogsRequest = PushLogsRequest
|
|
34
|
+
|
|
35
|
+
class PushLogsResponse(google.protobuf.message.Message):
|
|
36
|
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
37
|
+
def __init__(self,
|
|
38
|
+
) -> None: ...
|
|
39
|
+
global___PushLogsResponse = PushLogsResponse
|
flwr/proto/message_pb2.py
CHANGED
|
@@ -17,7 +17,7 @@ from flwr.proto import recordset_pb2 as flwr_dot_proto_dot_recordset__pb2
|
|
|
17
17
|
from flwr.proto import transport_pb2 as flwr_dot_proto_dot_transport__pb2
|
|
18
18
|
|
|
19
19
|
|
|
20
|
-
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x18\x66lwr/proto/message.proto\x12\nflwr.proto\x1a\x16\x66lwr/proto/error.proto\x1a\x1a\x66lwr/proto/recordset.proto\x1a\x1a\x66lwr/proto/transport.proto\"{\n\x07Message\x12&\n\x08metadata\x18\x01 \x01(\x0b\x32\x14.flwr.proto.Metadata\x12&\n\x07\x63ontent\x18\x02 \x01(\x0b\x32\x15.flwr.proto.RecordSet\x12 \n\x05\x65rror\x18\x03 \x01(\x0b\x32\x11.flwr.proto.Error\"\
|
|
20
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x18\x66lwr/proto/message.proto\x12\nflwr.proto\x1a\x16\x66lwr/proto/error.proto\x1a\x1a\x66lwr/proto/recordset.proto\x1a\x1a\x66lwr/proto/transport.proto\"{\n\x07Message\x12&\n\x08metadata\x18\x01 \x01(\x0b\x32\x14.flwr.proto.Metadata\x12&\n\x07\x63ontent\x18\x02 \x01(\x0b\x32\x15.flwr.proto.RecordSet\x12 \n\x05\x65rror\x18\x03 \x01(\x0b\x32\x11.flwr.proto.Error\"\xcf\x02\n\x07\x43ontext\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\x12\x0f\n\x07node_id\x18\x02 \x01(\x04\x12\x38\n\x0bnode_config\x18\x03 \x03(\x0b\x32#.flwr.proto.Context.NodeConfigEntry\x12$\n\x05state\x18\x04 \x01(\x0b\x32\x15.flwr.proto.RecordSet\x12\x36\n\nrun_config\x18\x05 \x03(\x0b\x32\".flwr.proto.Context.RunConfigEntry\x1a\x45\n\x0fNodeConfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\x1a\x44\n\x0eRunConfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\"\xbb\x01\n\x08Metadata\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\x12\x12\n\nmessage_id\x18\x02 \x01(\t\x12\x13\n\x0bsrc_node_id\x18\x03 \x01(\x04\x12\x13\n\x0b\x64st_node_id\x18\x04 \x01(\x04\x12\x18\n\x10reply_to_message\x18\x05 \x01(\t\x12\x10\n\x08group_id\x18\x06 \x01(\t\x12\x0b\n\x03ttl\x18\x07 \x01(\x01\x12\x14\n\x0cmessage_type\x18\x08 \x01(\t\x12\x12\n\ncreated_at\x18\t \x01(\x01\x62\x06proto3')
|
|
21
21
|
|
|
22
22
|
_globals = globals()
|
|
23
23
|
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
|
@@ -31,11 +31,11 @@ if _descriptor._USE_C_DESCRIPTORS == False:
|
|
|
31
31
|
_globals['_MESSAGE']._serialized_start=120
|
|
32
32
|
_globals['_MESSAGE']._serialized_end=243
|
|
33
33
|
_globals['_CONTEXT']._serialized_start=246
|
|
34
|
-
_globals['_CONTEXT']._serialized_end=
|
|
35
|
-
_globals['_CONTEXT_NODECONFIGENTRY']._serialized_start=
|
|
36
|
-
_globals['_CONTEXT_NODECONFIGENTRY']._serialized_end=
|
|
37
|
-
_globals['_CONTEXT_RUNCONFIGENTRY']._serialized_start=
|
|
38
|
-
_globals['_CONTEXT_RUNCONFIGENTRY']._serialized_end=
|
|
39
|
-
_globals['_METADATA']._serialized_start=
|
|
40
|
-
_globals['_METADATA']._serialized_end=
|
|
34
|
+
_globals['_CONTEXT']._serialized_end=581
|
|
35
|
+
_globals['_CONTEXT_NODECONFIGENTRY']._serialized_start=442
|
|
36
|
+
_globals['_CONTEXT_NODECONFIGENTRY']._serialized_end=511
|
|
37
|
+
_globals['_CONTEXT_RUNCONFIGENTRY']._serialized_start=513
|
|
38
|
+
_globals['_CONTEXT_RUNCONFIGENTRY']._serialized_end=581
|
|
39
|
+
_globals['_METADATA']._serialized_start=584
|
|
40
|
+
_globals['_METADATA']._serialized_end=771
|
|
41
41
|
# @@protoc_insertion_point(module_scope)
|
flwr/proto/message_pb2.pyi
CHANGED
|
@@ -67,10 +67,12 @@ class Context(google.protobuf.message.Message):
|
|
|
67
67
|
def HasField(self, field_name: typing_extensions.Literal["value",b"value"]) -> builtins.bool: ...
|
|
68
68
|
def ClearField(self, field_name: typing_extensions.Literal["key",b"key","value",b"value"]) -> None: ...
|
|
69
69
|
|
|
70
|
+
RUN_ID_FIELD_NUMBER: builtins.int
|
|
70
71
|
NODE_ID_FIELD_NUMBER: builtins.int
|
|
71
72
|
NODE_CONFIG_FIELD_NUMBER: builtins.int
|
|
72
73
|
STATE_FIELD_NUMBER: builtins.int
|
|
73
74
|
RUN_CONFIG_FIELD_NUMBER: builtins.int
|
|
75
|
+
run_id: builtins.int
|
|
74
76
|
node_id: builtins.int
|
|
75
77
|
@property
|
|
76
78
|
def node_config(self) -> google.protobuf.internal.containers.MessageMap[typing.Text, flwr.proto.transport_pb2.Scalar]: ...
|
|
@@ -80,13 +82,14 @@ class Context(google.protobuf.message.Message):
|
|
|
80
82
|
def run_config(self) -> google.protobuf.internal.containers.MessageMap[typing.Text, flwr.proto.transport_pb2.Scalar]: ...
|
|
81
83
|
def __init__(self,
|
|
82
84
|
*,
|
|
85
|
+
run_id: builtins.int = ...,
|
|
83
86
|
node_id: builtins.int = ...,
|
|
84
87
|
node_config: typing.Optional[typing.Mapping[typing.Text, flwr.proto.transport_pb2.Scalar]] = ...,
|
|
85
88
|
state: typing.Optional[flwr.proto.recordset_pb2.RecordSet] = ...,
|
|
86
89
|
run_config: typing.Optional[typing.Mapping[typing.Text, flwr.proto.transport_pb2.Scalar]] = ...,
|
|
87
90
|
) -> None: ...
|
|
88
91
|
def HasField(self, field_name: typing_extensions.Literal["state",b"state"]) -> builtins.bool: ...
|
|
89
|
-
def ClearField(self, field_name: typing_extensions.Literal["node_config",b"node_config","node_id",b"node_id","run_config",b"run_config","state",b"state"]) -> None: ...
|
|
92
|
+
def ClearField(self, field_name: typing_extensions.Literal["node_config",b"node_config","node_id",b"node_id","run_config",b"run_config","run_id",b"run_id","state",b"state"]) -> None: ...
|
|
90
93
|
global___Context = Context
|
|
91
94
|
|
|
92
95
|
class Metadata(google.protobuf.message.Message):
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
|
3
|
+
# source: flwr/proto/serverappio.proto
|
|
4
|
+
# Protobuf Python Version: 4.25.0
|
|
5
|
+
"""Generated protocol buffer code."""
|
|
6
|
+
from google.protobuf import descriptor as _descriptor
|
|
7
|
+
from google.protobuf import descriptor_pool as _descriptor_pool
|
|
8
|
+
from google.protobuf import symbol_database as _symbol_database
|
|
9
|
+
from google.protobuf.internal import builder as _builder
|
|
10
|
+
# @@protoc_insertion_point(imports)
|
|
11
|
+
|
|
12
|
+
_sym_db = _symbol_database.Default()
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
from flwr.proto import log_pb2 as flwr_dot_proto_dot_log__pb2
|
|
16
|
+
from flwr.proto import node_pb2 as flwr_dot_proto_dot_node__pb2
|
|
17
|
+
from flwr.proto import message_pb2 as flwr_dot_proto_dot_message__pb2
|
|
18
|
+
from flwr.proto import task_pb2 as flwr_dot_proto_dot_task__pb2
|
|
19
|
+
from flwr.proto import run_pb2 as flwr_dot_proto_dot_run__pb2
|
|
20
|
+
from flwr.proto import fab_pb2 as flwr_dot_proto_dot_fab__pb2
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1c\x66lwr/proto/serverappio.proto\x12\nflwr.proto\x1a\x14\x66lwr/proto/log.proto\x1a\x15\x66lwr/proto/node.proto\x1a\x18\x66lwr/proto/message.proto\x1a\x15\x66lwr/proto/task.proto\x1a\x14\x66lwr/proto/run.proto\x1a\x14\x66lwr/proto/fab.proto\"!\n\x0fGetNodesRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\"3\n\x10GetNodesResponse\x12\x1f\n\x05nodes\x18\x01 \x03(\x0b\x32\x10.flwr.proto.Node\"@\n\x12PushTaskInsRequest\x12*\n\rtask_ins_list\x18\x01 \x03(\x0b\x32\x13.flwr.proto.TaskIns\"\'\n\x13PushTaskInsResponse\x12\x10\n\x08task_ids\x18\x02 \x03(\t\"F\n\x12PullTaskResRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x10\n\x08task_ids\x18\x02 \x03(\t\"A\n\x13PullTaskResResponse\x12*\n\rtask_res_list\x18\x01 \x03(\x0b\x32\x13.flwr.proto.TaskRes\"\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\xca\x06\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\x12P\n\x0bPushTaskIns\x12\x1e.flwr.proto.PushTaskInsRequest\x1a\x1f.flwr.proto.PushTaskInsResponse\"\x00\x12P\n\x0bPullTaskRes\x12\x1e.flwr.proto.PullTaskResRequest\x1a\x1f.flwr.proto.PullTaskResResponse\"\x00\x12\x41\n\x06GetRun\x12\x19.flwr.proto.GetRunRequest\x1a\x1a.flwr.proto.GetRunResponse\"\x00\x12\x41\n\x06GetFab\x12\x19.flwr.proto.GetFabRequest\x1a\x1a.flwr.proto.GetFabResponse\"\x00\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\x12G\n\x08PushLogs\x12\x1b.flwr.proto.PushLogsRequest\x1a\x1c.flwr.proto.PushLogsResponse\"\x00\x62\x06proto3')
|
|
24
|
+
|
|
25
|
+
_globals = globals()
|
|
26
|
+
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
|
27
|
+
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'flwr.proto.serverappio_pb2', _globals)
|
|
28
|
+
if _descriptor._USE_C_DESCRIPTORS == False:
|
|
29
|
+
DESCRIPTOR._options = None
|
|
30
|
+
_globals['_GETNODESREQUEST']._serialized_start=182
|
|
31
|
+
_globals['_GETNODESREQUEST']._serialized_end=215
|
|
32
|
+
_globals['_GETNODESRESPONSE']._serialized_start=217
|
|
33
|
+
_globals['_GETNODESRESPONSE']._serialized_end=268
|
|
34
|
+
_globals['_PUSHTASKINSREQUEST']._serialized_start=270
|
|
35
|
+
_globals['_PUSHTASKINSREQUEST']._serialized_end=334
|
|
36
|
+
_globals['_PUSHTASKINSRESPONSE']._serialized_start=336
|
|
37
|
+
_globals['_PUSHTASKINSRESPONSE']._serialized_end=375
|
|
38
|
+
_globals['_PULLTASKRESREQUEST']._serialized_start=377
|
|
39
|
+
_globals['_PULLTASKRESREQUEST']._serialized_end=447
|
|
40
|
+
_globals['_PULLTASKRESRESPONSE']._serialized_start=449
|
|
41
|
+
_globals['_PULLTASKRESRESPONSE']._serialized_end=514
|
|
42
|
+
_globals['_PULLSERVERAPPINPUTSREQUEST']._serialized_start=516
|
|
43
|
+
_globals['_PULLSERVERAPPINPUTSREQUEST']._serialized_end=544
|
|
44
|
+
_globals['_PULLSERVERAPPINPUTSRESPONSE']._serialized_start=546
|
|
45
|
+
_globals['_PULLSERVERAPPINPUTSRESPONSE']._serialized_end=673
|
|
46
|
+
_globals['_PUSHSERVERAPPOUTPUTSREQUEST']._serialized_start=675
|
|
47
|
+
_globals['_PUSHSERVERAPPOUTPUTSREQUEST']._serialized_end=758
|
|
48
|
+
_globals['_PUSHSERVERAPPOUTPUTSRESPONSE']._serialized_start=760
|
|
49
|
+
_globals['_PUSHSERVERAPPOUTPUTSRESPONSE']._serialized_end=790
|
|
50
|
+
_globals['_SERVERAPPIO']._serialized_start=793
|
|
51
|
+
_globals['_SERVERAPPIO']._serialized_end=1635
|
|
52
|
+
# @@protoc_insertion_point(module_scope)
|