flwr 1.15.2__py3-none-any.whl → 1.17.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- flwr/cli/build.py +2 -0
- flwr/cli/log.py +20 -21
- flwr/cli/new/templates/app/code/flwr_tune/client_app.py.tpl +1 -1
- flwr/cli/new/templates/app/pyproject.baseline.toml.tpl +1 -1
- flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +1 -1
- flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +1 -1
- flwr/cli/new/templates/app/pyproject.jax.toml.tpl +1 -1
- flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +1 -1
- flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +1 -1
- flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +1 -1
- flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +1 -1
- flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +1 -1
- flwr/cli/run/run.py +5 -9
- flwr/client/app.py +6 -4
- flwr/client/client_app.py +260 -86
- flwr/client/clientapp/app.py +6 -2
- flwr/client/grpc_client/connection.py +24 -21
- flwr/client/message_handler/message_handler.py +28 -28
- flwr/client/mod/__init__.py +2 -2
- flwr/client/mod/centraldp_mods.py +7 -7
- flwr/client/mod/comms_mods.py +16 -22
- flwr/client/mod/localdp_mod.py +4 -4
- flwr/client/mod/secure_aggregation/secaggplus_mod.py +31 -31
- flwr/client/rest_client/connection.py +4 -6
- flwr/client/run_info_store.py +2 -2
- flwr/client/supernode/__init__.py +0 -2
- flwr/client/supernode/app.py +1 -11
- flwr/common/__init__.py +12 -4
- flwr/common/address.py +35 -0
- flwr/common/args.py +8 -2
- flwr/common/auth_plugin/auth_plugin.py +2 -1
- flwr/common/config.py +4 -4
- flwr/common/constant.py +16 -0
- flwr/common/context.py +4 -4
- flwr/common/event_log_plugin/__init__.py +22 -0
- flwr/common/event_log_plugin/event_log_plugin.py +60 -0
- flwr/common/grpc.py +1 -1
- flwr/common/logger.py +2 -2
- flwr/common/message.py +338 -102
- flwr/common/object_ref.py +0 -10
- flwr/common/record/__init__.py +8 -4
- flwr/common/record/arrayrecord.py +626 -0
- flwr/common/record/{configsrecord.py → configrecord.py} +75 -29
- flwr/common/record/conversion_utils.py +9 -18
- flwr/common/record/{metricsrecord.py → metricrecord.py} +78 -32
- flwr/common/record/recorddict.py +288 -0
- flwr/common/recorddict_compat.py +410 -0
- flwr/common/secure_aggregation/quantization.py +5 -1
- flwr/common/secure_aggregation/secaggplus_constants.py +1 -1
- flwr/common/serde.py +67 -190
- flwr/common/telemetry.py +0 -10
- flwr/common/typing.py +44 -8
- flwr/proto/exec_pb2.py +3 -3
- flwr/proto/exec_pb2.pyi +3 -3
- flwr/proto/message_pb2.py +12 -12
- flwr/proto/message_pb2.pyi +9 -9
- flwr/proto/recorddict_pb2.py +70 -0
- flwr/proto/{recordset_pb2.pyi → recorddict_pb2.pyi} +35 -35
- flwr/proto/run_pb2.py +31 -31
- flwr/proto/run_pb2.pyi +3 -3
- flwr/server/__init__.py +3 -1
- flwr/server/app.py +74 -3
- flwr/server/compat/__init__.py +2 -2
- flwr/server/compat/app.py +15 -12
- flwr/server/compat/app_utils.py +26 -18
- flwr/server/compat/{driver_client_proxy.py → grid_client_proxy.py} +41 -41
- flwr/server/fleet_event_log_interceptor.py +94 -0
- flwr/server/{driver → grid}/__init__.py +8 -7
- flwr/server/{driver/driver.py → grid/grid.py} +48 -19
- flwr/server/{driver/grpc_driver.py → grid/grpc_grid.py} +88 -56
- flwr/server/{driver/inmemory_driver.py → grid/inmemory_grid.py} +41 -54
- flwr/server/run_serverapp.py +6 -17
- flwr/server/server_app.py +126 -33
- flwr/server/serverapp/app.py +10 -10
- flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +2 -2
- flwr/server/superlink/fleet/message_handler/message_handler.py +8 -12
- flwr/server/superlink/fleet/vce/backend/backend.py +3 -3
- flwr/server/superlink/fleet/vce/backend/raybackend.py +2 -2
- flwr/server/superlink/fleet/vce/vce_api.py +33 -38
- flwr/server/superlink/linkstate/in_memory_linkstate.py +171 -132
- flwr/server/superlink/linkstate/linkstate.py +51 -64
- flwr/server/superlink/linkstate/sqlite_linkstate.py +253 -285
- flwr/server/superlink/linkstate/utils.py +171 -133
- flwr/server/superlink/{driver → serverappio}/__init__.py +1 -1
- flwr/server/superlink/{driver → serverappio}/serverappio_grpc.py +1 -1
- flwr/server/superlink/{driver → serverappio}/serverappio_servicer.py +27 -29
- flwr/server/superlink/simulation/simulationio_servicer.py +2 -2
- flwr/server/typing.py +3 -3
- flwr/server/utils/__init__.py +2 -2
- flwr/server/utils/validator.py +53 -68
- flwr/server/workflow/default_workflows.py +52 -58
- flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +48 -50
- flwr/simulation/app.py +2 -2
- flwr/simulation/ray_transport/ray_actor.py +4 -2
- flwr/simulation/ray_transport/ray_client_proxy.py +34 -32
- flwr/simulation/run_simulation.py +15 -15
- flwr/superexec/app.py +0 -14
- flwr/superexec/deployment.py +4 -4
- flwr/superexec/exec_event_log_interceptor.py +135 -0
- flwr/superexec/exec_grpc.py +10 -4
- flwr/superexec/exec_servicer.py +6 -6
- flwr/superexec/exec_user_auth_interceptor.py +22 -4
- flwr/superexec/executor.py +3 -3
- flwr/superexec/simulation.py +3 -3
- {flwr-1.15.2.dist-info → flwr-1.17.0.dist-info}/METADATA +5 -5
- {flwr-1.15.2.dist-info → flwr-1.17.0.dist-info}/RECORD +111 -112
- {flwr-1.15.2.dist-info → flwr-1.17.0.dist-info}/entry_points.txt +0 -3
- flwr/client/message_handler/task_handler.py +0 -37
- flwr/common/record/parametersrecord.py +0 -204
- flwr/common/record/recordset.py +0 -202
- flwr/common/recordset_compat.py +0 -418
- flwr/proto/recordset_pb2.py +0 -70
- flwr/proto/task_pb2.py +0 -33
- flwr/proto/task_pb2.pyi +0 -100
- flwr/proto/task_pb2_grpc.py +0 -4
- flwr/proto/task_pb2_grpc.pyi +0 -4
- /flwr/proto/{recordset_pb2_grpc.py → recorddict_pb2_grpc.py} +0 -0
- /flwr/proto/{recordset_pb2_grpc.pyi → recorddict_pb2_grpc.pyi} +0 -0
- {flwr-1.15.2.dist-info → flwr-1.17.0.dist-info}/LICENSE +0 -0
- {flwr-1.15.2.dist-info → flwr-1.17.0.dist-info}/WHEEL +0 -0
flwr/proto/message_pb2.pyi
CHANGED
|
@@ -4,7 +4,7 @@ isort:skip_file
|
|
|
4
4
|
"""
|
|
5
5
|
import builtins
|
|
6
6
|
import flwr.proto.error_pb2
|
|
7
|
-
import flwr.proto.
|
|
7
|
+
import flwr.proto.recorddict_pb2
|
|
8
8
|
import flwr.proto.transport_pb2
|
|
9
9
|
import google.protobuf.descriptor
|
|
10
10
|
import google.protobuf.internal.containers
|
|
@@ -22,13 +22,13 @@ class Message(google.protobuf.message.Message):
|
|
|
22
22
|
@property
|
|
23
23
|
def metadata(self) -> global___Metadata: ...
|
|
24
24
|
@property
|
|
25
|
-
def content(self) -> flwr.proto.
|
|
25
|
+
def content(self) -> flwr.proto.recorddict_pb2.RecordDict: ...
|
|
26
26
|
@property
|
|
27
27
|
def error(self) -> flwr.proto.error_pb2.Error: ...
|
|
28
28
|
def __init__(self,
|
|
29
29
|
*,
|
|
30
30
|
metadata: typing.Optional[global___Metadata] = ...,
|
|
31
|
-
content: typing.Optional[flwr.proto.
|
|
31
|
+
content: typing.Optional[flwr.proto.recorddict_pb2.RecordDict] = ...,
|
|
32
32
|
error: typing.Optional[flwr.proto.error_pb2.Error] = ...,
|
|
33
33
|
) -> None: ...
|
|
34
34
|
def HasField(self, field_name: typing_extensions.Literal["content",b"content","error",b"error","metadata",b"metadata"]) -> builtins.bool: ...
|
|
@@ -77,7 +77,7 @@ class Context(google.protobuf.message.Message):
|
|
|
77
77
|
@property
|
|
78
78
|
def node_config(self) -> google.protobuf.internal.containers.MessageMap[typing.Text, flwr.proto.transport_pb2.Scalar]: ...
|
|
79
79
|
@property
|
|
80
|
-
def state(self) -> flwr.proto.
|
|
80
|
+
def state(self) -> flwr.proto.recorddict_pb2.RecordDict: ...
|
|
81
81
|
@property
|
|
82
82
|
def run_config(self) -> google.protobuf.internal.containers.MessageMap[typing.Text, flwr.proto.transport_pb2.Scalar]: ...
|
|
83
83
|
def __init__(self,
|
|
@@ -85,7 +85,7 @@ class Context(google.protobuf.message.Message):
|
|
|
85
85
|
run_id: builtins.int = ...,
|
|
86
86
|
node_id: builtins.int = ...,
|
|
87
87
|
node_config: typing.Optional[typing.Mapping[typing.Text, flwr.proto.transport_pb2.Scalar]] = ...,
|
|
88
|
-
state: typing.Optional[flwr.proto.
|
|
88
|
+
state: typing.Optional[flwr.proto.recorddict_pb2.RecordDict] = ...,
|
|
89
89
|
run_config: typing.Optional[typing.Mapping[typing.Text, flwr.proto.transport_pb2.Scalar]] = ...,
|
|
90
90
|
) -> None: ...
|
|
91
91
|
def HasField(self, field_name: typing_extensions.Literal["state",b"state"]) -> builtins.bool: ...
|
|
@@ -98,7 +98,7 @@ class Metadata(google.protobuf.message.Message):
|
|
|
98
98
|
MESSAGE_ID_FIELD_NUMBER: builtins.int
|
|
99
99
|
SRC_NODE_ID_FIELD_NUMBER: builtins.int
|
|
100
100
|
DST_NODE_ID_FIELD_NUMBER: builtins.int
|
|
101
|
-
|
|
101
|
+
REPLY_TO_MESSAGE_ID_FIELD_NUMBER: builtins.int
|
|
102
102
|
GROUP_ID_FIELD_NUMBER: builtins.int
|
|
103
103
|
TTL_FIELD_NUMBER: builtins.int
|
|
104
104
|
MESSAGE_TYPE_FIELD_NUMBER: builtins.int
|
|
@@ -107,7 +107,7 @@ class Metadata(google.protobuf.message.Message):
|
|
|
107
107
|
message_id: typing.Text
|
|
108
108
|
src_node_id: builtins.int
|
|
109
109
|
dst_node_id: builtins.int
|
|
110
|
-
|
|
110
|
+
reply_to_message_id: typing.Text
|
|
111
111
|
group_id: typing.Text
|
|
112
112
|
ttl: builtins.float
|
|
113
113
|
message_type: typing.Text
|
|
@@ -118,11 +118,11 @@ class Metadata(google.protobuf.message.Message):
|
|
|
118
118
|
message_id: typing.Text = ...,
|
|
119
119
|
src_node_id: builtins.int = ...,
|
|
120
120
|
dst_node_id: builtins.int = ...,
|
|
121
|
-
|
|
121
|
+
reply_to_message_id: typing.Text = ...,
|
|
122
122
|
group_id: typing.Text = ...,
|
|
123
123
|
ttl: builtins.float = ...,
|
|
124
124
|
message_type: typing.Text = ...,
|
|
125
125
|
created_at: builtins.float = ...,
|
|
126
126
|
) -> None: ...
|
|
127
|
-
def ClearField(self, field_name: typing_extensions.Literal["created_at",b"created_at","dst_node_id",b"dst_node_id","group_id",b"group_id","message_id",b"message_id","message_type",b"message_type","
|
|
127
|
+
def ClearField(self, field_name: typing_extensions.Literal["created_at",b"created_at","dst_node_id",b"dst_node_id","group_id",b"group_id","message_id",b"message_id","message_type",b"message_type","reply_to_message_id",b"reply_to_message_id","run_id",b"run_id","src_node_id",b"src_node_id","ttl",b"ttl"]) -> None: ...
|
|
128
128
|
global___Metadata = Metadata
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
|
3
|
+
# source: flwr/proto/recorddict.proto
|
|
4
|
+
# Protobuf Python Version: 4.25.1
|
|
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
|
+
|
|
16
|
+
|
|
17
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1b\x66lwr/proto/recorddict.proto\x12\nflwr.proto\"\x1a\n\nDoubleList\x12\x0c\n\x04vals\x18\x01 \x03(\x01\"\x18\n\x08SintList\x12\x0c\n\x04vals\x18\x01 \x03(\x12\"\x18\n\x08UintList\x12\x0c\n\x04vals\x18\x01 \x03(\x04\"\x18\n\x08\x42oolList\x12\x0c\n\x04vals\x18\x01 \x03(\x08\"\x1a\n\nStringList\x12\x0c\n\x04vals\x18\x01 \x03(\t\"\x19\n\tBytesList\x12\x0c\n\x04vals\x18\x01 \x03(\x0c\"B\n\x05\x41rray\x12\r\n\x05\x64type\x18\x01 \x01(\t\x12\r\n\x05shape\x18\x02 \x03(\x05\x12\r\n\x05stype\x18\x03 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\x0c\"\xd7\x01\n\x11MetricRecordValue\x12\x10\n\x06\x64ouble\x18\x01 \x01(\x01H\x00\x12\x10\n\x06sint64\x18\x02 \x01(\x12H\x00\x12\x10\n\x06uint64\x18\x03 \x01(\x04H\x00\x12-\n\x0b\x64ouble_list\x18\x15 \x01(\x0b\x32\x16.flwr.proto.DoubleListH\x00\x12)\n\tsint_list\x18\x16 \x01(\x0b\x32\x14.flwr.proto.SintListH\x00\x12)\n\tuint_list\x18\x17 \x01(\x0b\x32\x14.flwr.proto.UintListH\x00\x42\x07\n\x05value\"\x91\x03\n\x11\x43onfigRecordValue\x12\x10\n\x06\x64ouble\x18\x01 \x01(\x01H\x00\x12\x10\n\x06sint64\x18\x02 \x01(\x12H\x00\x12\x10\n\x06uint64\x18\x03 \x01(\x04H\x00\x12\x0e\n\x04\x62ool\x18\x04 \x01(\x08H\x00\x12\x10\n\x06string\x18\x05 \x01(\tH\x00\x12\x0f\n\x05\x62ytes\x18\x06 \x01(\x0cH\x00\x12-\n\x0b\x64ouble_list\x18\x15 \x01(\x0b\x32\x16.flwr.proto.DoubleListH\x00\x12)\n\tsint_list\x18\x16 \x01(\x0b\x32\x14.flwr.proto.SintListH\x00\x12)\n\tuint_list\x18\x17 \x01(\x0b\x32\x14.flwr.proto.UintListH\x00\x12)\n\tbool_list\x18\x18 \x01(\x0b\x32\x14.flwr.proto.BoolListH\x00\x12-\n\x0bstring_list\x18\x19 \x01(\x0b\x32\x16.flwr.proto.StringListH\x00\x12+\n\nbytes_list\x18\x1a \x01(\x0b\x32\x15.flwr.proto.BytesListH\x00\x42\x07\n\x05value\"H\n\x0b\x41rrayRecord\x12\x11\n\tdata_keys\x18\x01 \x03(\t\x12&\n\x0b\x64\x61ta_values\x18\x02 \x03(\x0b\x32\x11.flwr.proto.Array\"\x8c\x01\n\x0cMetricRecord\x12\x30\n\x04\x64\x61ta\x18\x01 \x03(\x0b\x32\".flwr.proto.MetricRecord.DataEntry\x1aJ\n\tDataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12,\n\x05value\x18\x02 \x01(\x0b\x32\x1d.flwr.proto.MetricRecordValue:\x02\x38\x01\"\x8c\x01\n\x0c\x43onfigRecord\x12\x30\n\x04\x64\x61ta\x18\x01 \x03(\x0b\x32\".flwr.proto.ConfigRecord.DataEntry\x1aJ\n\tDataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12,\n\x05value\x18\x02 \x01(\x0b\x32\x1d.flwr.proto.ConfigRecordValue:\x02\x38\x01\"\x88\x03\n\nRecordDict\x12\x32\n\x06\x61rrays\x18\x01 \x03(\x0b\x32\".flwr.proto.RecordDict.ArraysEntry\x12\x34\n\x07metrics\x18\x02 \x03(\x0b\x32#.flwr.proto.RecordDict.MetricsEntry\x12\x34\n\x07\x63onfigs\x18\x03 \x03(\x0b\x32#.flwr.proto.RecordDict.ConfigsEntry\x1a\x46\n\x0b\x41rraysEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12&\n\x05value\x18\x02 \x01(\x0b\x32\x17.flwr.proto.ArrayRecord:\x02\x38\x01\x1aH\n\x0cMetricsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\'\n\x05value\x18\x02 \x01(\x0b\x32\x18.flwr.proto.MetricRecord:\x02\x38\x01\x1aH\n\x0c\x43onfigsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\'\n\x05value\x18\x02 \x01(\x0b\x32\x18.flwr.proto.ConfigRecord:\x02\x38\x01\x62\x06proto3')
|
|
18
|
+
|
|
19
|
+
_globals = globals()
|
|
20
|
+
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
|
21
|
+
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'flwr.proto.recorddict_pb2', _globals)
|
|
22
|
+
if _descriptor._USE_C_DESCRIPTORS == False:
|
|
23
|
+
DESCRIPTOR._options = None
|
|
24
|
+
_globals['_METRICRECORD_DATAENTRY']._options = None
|
|
25
|
+
_globals['_METRICRECORD_DATAENTRY']._serialized_options = b'8\001'
|
|
26
|
+
_globals['_CONFIGRECORD_DATAENTRY']._options = None
|
|
27
|
+
_globals['_CONFIGRECORD_DATAENTRY']._serialized_options = b'8\001'
|
|
28
|
+
_globals['_RECORDDICT_ARRAYSENTRY']._options = None
|
|
29
|
+
_globals['_RECORDDICT_ARRAYSENTRY']._serialized_options = b'8\001'
|
|
30
|
+
_globals['_RECORDDICT_METRICSENTRY']._options = None
|
|
31
|
+
_globals['_RECORDDICT_METRICSENTRY']._serialized_options = b'8\001'
|
|
32
|
+
_globals['_RECORDDICT_CONFIGSENTRY']._options = None
|
|
33
|
+
_globals['_RECORDDICT_CONFIGSENTRY']._serialized_options = b'8\001'
|
|
34
|
+
_globals['_DOUBLELIST']._serialized_start=43
|
|
35
|
+
_globals['_DOUBLELIST']._serialized_end=69
|
|
36
|
+
_globals['_SINTLIST']._serialized_start=71
|
|
37
|
+
_globals['_SINTLIST']._serialized_end=95
|
|
38
|
+
_globals['_UINTLIST']._serialized_start=97
|
|
39
|
+
_globals['_UINTLIST']._serialized_end=121
|
|
40
|
+
_globals['_BOOLLIST']._serialized_start=123
|
|
41
|
+
_globals['_BOOLLIST']._serialized_end=147
|
|
42
|
+
_globals['_STRINGLIST']._serialized_start=149
|
|
43
|
+
_globals['_STRINGLIST']._serialized_end=175
|
|
44
|
+
_globals['_BYTESLIST']._serialized_start=177
|
|
45
|
+
_globals['_BYTESLIST']._serialized_end=202
|
|
46
|
+
_globals['_ARRAY']._serialized_start=204
|
|
47
|
+
_globals['_ARRAY']._serialized_end=270
|
|
48
|
+
_globals['_METRICRECORDVALUE']._serialized_start=273
|
|
49
|
+
_globals['_METRICRECORDVALUE']._serialized_end=488
|
|
50
|
+
_globals['_CONFIGRECORDVALUE']._serialized_start=491
|
|
51
|
+
_globals['_CONFIGRECORDVALUE']._serialized_end=892
|
|
52
|
+
_globals['_ARRAYRECORD']._serialized_start=894
|
|
53
|
+
_globals['_ARRAYRECORD']._serialized_end=966
|
|
54
|
+
_globals['_METRICRECORD']._serialized_start=969
|
|
55
|
+
_globals['_METRICRECORD']._serialized_end=1109
|
|
56
|
+
_globals['_METRICRECORD_DATAENTRY']._serialized_start=1035
|
|
57
|
+
_globals['_METRICRECORD_DATAENTRY']._serialized_end=1109
|
|
58
|
+
_globals['_CONFIGRECORD']._serialized_start=1112
|
|
59
|
+
_globals['_CONFIGRECORD']._serialized_end=1252
|
|
60
|
+
_globals['_CONFIGRECORD_DATAENTRY']._serialized_start=1178
|
|
61
|
+
_globals['_CONFIGRECORD_DATAENTRY']._serialized_end=1252
|
|
62
|
+
_globals['_RECORDDICT']._serialized_start=1255
|
|
63
|
+
_globals['_RECORDDICT']._serialized_end=1647
|
|
64
|
+
_globals['_RECORDDICT_ARRAYSENTRY']._serialized_start=1429
|
|
65
|
+
_globals['_RECORDDICT_ARRAYSENTRY']._serialized_end=1499
|
|
66
|
+
_globals['_RECORDDICT_METRICSENTRY']._serialized_start=1501
|
|
67
|
+
_globals['_RECORDDICT_METRICSENTRY']._serialized_end=1573
|
|
68
|
+
_globals['_RECORDDICT_CONFIGSENTRY']._serialized_start=1575
|
|
69
|
+
_globals['_RECORDDICT_CONFIGSENTRY']._serialized_end=1647
|
|
70
|
+
# @@protoc_insertion_point(module_scope)
|
|
@@ -104,7 +104,7 @@ class Array(google.protobuf.message.Message):
|
|
|
104
104
|
def ClearField(self, field_name: typing_extensions.Literal["data",b"data","dtype",b"dtype","shape",b"shape","stype",b"stype"]) -> None: ...
|
|
105
105
|
global___Array = Array
|
|
106
106
|
|
|
107
|
-
class
|
|
107
|
+
class MetricRecordValue(google.protobuf.message.Message):
|
|
108
108
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
109
109
|
DOUBLE_FIELD_NUMBER: builtins.int
|
|
110
110
|
SINT64_FIELD_NUMBER: builtins.int
|
|
@@ -137,9 +137,9 @@ class MetricsRecordValue(google.protobuf.message.Message):
|
|
|
137
137
|
def HasField(self, field_name: typing_extensions.Literal["double",b"double","double_list",b"double_list","sint64",b"sint64","sint_list",b"sint_list","uint64",b"uint64","uint_list",b"uint_list","value",b"value"]) -> builtins.bool: ...
|
|
138
138
|
def ClearField(self, field_name: typing_extensions.Literal["double",b"double","double_list",b"double_list","sint64",b"sint64","sint_list",b"sint_list","uint64",b"uint64","uint_list",b"uint_list","value",b"value"]) -> None: ...
|
|
139
139
|
def WhichOneof(self, oneof_group: typing_extensions.Literal["value",b"value"]) -> typing.Optional[typing_extensions.Literal["double","sint64","uint64","double_list","sint_list","uint_list"]]: ...
|
|
140
|
-
|
|
140
|
+
global___MetricRecordValue = MetricRecordValue
|
|
141
141
|
|
|
142
|
-
class
|
|
142
|
+
class ConfigRecordValue(google.protobuf.message.Message):
|
|
143
143
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
144
144
|
DOUBLE_FIELD_NUMBER: builtins.int
|
|
145
145
|
SINT64_FIELD_NUMBER: builtins.int
|
|
@@ -193,9 +193,9 @@ class ConfigsRecordValue(google.protobuf.message.Message):
|
|
|
193
193
|
def HasField(self, field_name: typing_extensions.Literal["bool",b"bool","bool_list",b"bool_list","bytes",b"bytes","bytes_list",b"bytes_list","double",b"double","double_list",b"double_list","sint64",b"sint64","sint_list",b"sint_list","string",b"string","string_list",b"string_list","uint64",b"uint64","uint_list",b"uint_list","value",b"value"]) -> builtins.bool: ...
|
|
194
194
|
def ClearField(self, field_name: typing_extensions.Literal["bool",b"bool","bool_list",b"bool_list","bytes",b"bytes","bytes_list",b"bytes_list","double",b"double","double_list",b"double_list","sint64",b"sint64","sint_list",b"sint_list","string",b"string","string_list",b"string_list","uint64",b"uint64","uint_list",b"uint_list","value",b"value"]) -> None: ...
|
|
195
195
|
def WhichOneof(self, oneof_group: typing_extensions.Literal["value",b"value"]) -> typing.Optional[typing_extensions.Literal["double","sint64","uint64","bool","string","bytes","double_list","sint_list","uint_list","bool_list","string_list","bytes_list"]]: ...
|
|
196
|
-
|
|
196
|
+
global___ConfigRecordValue = ConfigRecordValue
|
|
197
197
|
|
|
198
|
-
class
|
|
198
|
+
class ArrayRecord(google.protobuf.message.Message):
|
|
199
199
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
200
200
|
DATA_KEYS_FIELD_NUMBER: builtins.int
|
|
201
201
|
DATA_VALUES_FIELD_NUMBER: builtins.int
|
|
@@ -209,9 +209,9 @@ class ParametersRecord(google.protobuf.message.Message):
|
|
|
209
209
|
data_values: typing.Optional[typing.Iterable[global___Array]] = ...,
|
|
210
210
|
) -> None: ...
|
|
211
211
|
def ClearField(self, field_name: typing_extensions.Literal["data_keys",b"data_keys","data_values",b"data_values"]) -> None: ...
|
|
212
|
-
|
|
212
|
+
global___ArrayRecord = ArrayRecord
|
|
213
213
|
|
|
214
|
-
class
|
|
214
|
+
class MetricRecord(google.protobuf.message.Message):
|
|
215
215
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
216
216
|
class DataEntry(google.protobuf.message.Message):
|
|
217
217
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
@@ -219,26 +219,26 @@ class MetricsRecord(google.protobuf.message.Message):
|
|
|
219
219
|
VALUE_FIELD_NUMBER: builtins.int
|
|
220
220
|
key: typing.Text
|
|
221
221
|
@property
|
|
222
|
-
def value(self) ->
|
|
222
|
+
def value(self) -> global___MetricRecordValue: ...
|
|
223
223
|
def __init__(self,
|
|
224
224
|
*,
|
|
225
225
|
key: typing.Text = ...,
|
|
226
|
-
value: typing.Optional[
|
|
226
|
+
value: typing.Optional[global___MetricRecordValue] = ...,
|
|
227
227
|
) -> None: ...
|
|
228
228
|
def HasField(self, field_name: typing_extensions.Literal["value",b"value"]) -> builtins.bool: ...
|
|
229
229
|
def ClearField(self, field_name: typing_extensions.Literal["key",b"key","value",b"value"]) -> None: ...
|
|
230
230
|
|
|
231
231
|
DATA_FIELD_NUMBER: builtins.int
|
|
232
232
|
@property
|
|
233
|
-
def data(self) -> google.protobuf.internal.containers.MessageMap[typing.Text,
|
|
233
|
+
def data(self) -> google.protobuf.internal.containers.MessageMap[typing.Text, global___MetricRecordValue]: ...
|
|
234
234
|
def __init__(self,
|
|
235
235
|
*,
|
|
236
|
-
data: typing.Optional[typing.Mapping[typing.Text,
|
|
236
|
+
data: typing.Optional[typing.Mapping[typing.Text, global___MetricRecordValue]] = ...,
|
|
237
237
|
) -> None: ...
|
|
238
238
|
def ClearField(self, field_name: typing_extensions.Literal["data",b"data"]) -> None: ...
|
|
239
|
-
|
|
239
|
+
global___MetricRecord = MetricRecord
|
|
240
240
|
|
|
241
|
-
class
|
|
241
|
+
class ConfigRecord(google.protobuf.message.Message):
|
|
242
242
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
243
243
|
class DataEntry(google.protobuf.message.Message):
|
|
244
244
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
@@ -246,38 +246,38 @@ class ConfigsRecord(google.protobuf.message.Message):
|
|
|
246
246
|
VALUE_FIELD_NUMBER: builtins.int
|
|
247
247
|
key: typing.Text
|
|
248
248
|
@property
|
|
249
|
-
def value(self) ->
|
|
249
|
+
def value(self) -> global___ConfigRecordValue: ...
|
|
250
250
|
def __init__(self,
|
|
251
251
|
*,
|
|
252
252
|
key: typing.Text = ...,
|
|
253
|
-
value: typing.Optional[
|
|
253
|
+
value: typing.Optional[global___ConfigRecordValue] = ...,
|
|
254
254
|
) -> None: ...
|
|
255
255
|
def HasField(self, field_name: typing_extensions.Literal["value",b"value"]) -> builtins.bool: ...
|
|
256
256
|
def ClearField(self, field_name: typing_extensions.Literal["key",b"key","value",b"value"]) -> None: ...
|
|
257
257
|
|
|
258
258
|
DATA_FIELD_NUMBER: builtins.int
|
|
259
259
|
@property
|
|
260
|
-
def data(self) -> google.protobuf.internal.containers.MessageMap[typing.Text,
|
|
260
|
+
def data(self) -> google.protobuf.internal.containers.MessageMap[typing.Text, global___ConfigRecordValue]: ...
|
|
261
261
|
def __init__(self,
|
|
262
262
|
*,
|
|
263
|
-
data: typing.Optional[typing.Mapping[typing.Text,
|
|
263
|
+
data: typing.Optional[typing.Mapping[typing.Text, global___ConfigRecordValue]] = ...,
|
|
264
264
|
) -> None: ...
|
|
265
265
|
def ClearField(self, field_name: typing_extensions.Literal["data",b"data"]) -> None: ...
|
|
266
|
-
|
|
266
|
+
global___ConfigRecord = ConfigRecord
|
|
267
267
|
|
|
268
|
-
class
|
|
268
|
+
class RecordDict(google.protobuf.message.Message):
|
|
269
269
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
270
|
-
class
|
|
270
|
+
class ArraysEntry(google.protobuf.message.Message):
|
|
271
271
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
272
272
|
KEY_FIELD_NUMBER: builtins.int
|
|
273
273
|
VALUE_FIELD_NUMBER: builtins.int
|
|
274
274
|
key: typing.Text
|
|
275
275
|
@property
|
|
276
|
-
def value(self) ->
|
|
276
|
+
def value(self) -> global___ArrayRecord: ...
|
|
277
277
|
def __init__(self,
|
|
278
278
|
*,
|
|
279
279
|
key: typing.Text = ...,
|
|
280
|
-
value: typing.Optional[
|
|
280
|
+
value: typing.Optional[global___ArrayRecord] = ...,
|
|
281
281
|
) -> None: ...
|
|
282
282
|
def HasField(self, field_name: typing_extensions.Literal["value",b"value"]) -> builtins.bool: ...
|
|
283
283
|
def ClearField(self, field_name: typing_extensions.Literal["key",b"key","value",b"value"]) -> None: ...
|
|
@@ -288,11 +288,11 @@ class RecordSet(google.protobuf.message.Message):
|
|
|
288
288
|
VALUE_FIELD_NUMBER: builtins.int
|
|
289
289
|
key: typing.Text
|
|
290
290
|
@property
|
|
291
|
-
def value(self) ->
|
|
291
|
+
def value(self) -> global___MetricRecord: ...
|
|
292
292
|
def __init__(self,
|
|
293
293
|
*,
|
|
294
294
|
key: typing.Text = ...,
|
|
295
|
-
value: typing.Optional[
|
|
295
|
+
value: typing.Optional[global___MetricRecord] = ...,
|
|
296
296
|
) -> None: ...
|
|
297
297
|
def HasField(self, field_name: typing_extensions.Literal["value",b"value"]) -> builtins.bool: ...
|
|
298
298
|
def ClearField(self, field_name: typing_extensions.Literal["key",b"key","value",b"value"]) -> None: ...
|
|
@@ -303,29 +303,29 @@ class RecordSet(google.protobuf.message.Message):
|
|
|
303
303
|
VALUE_FIELD_NUMBER: builtins.int
|
|
304
304
|
key: typing.Text
|
|
305
305
|
@property
|
|
306
|
-
def value(self) ->
|
|
306
|
+
def value(self) -> global___ConfigRecord: ...
|
|
307
307
|
def __init__(self,
|
|
308
308
|
*,
|
|
309
309
|
key: typing.Text = ...,
|
|
310
|
-
value: typing.Optional[
|
|
310
|
+
value: typing.Optional[global___ConfigRecord] = ...,
|
|
311
311
|
) -> None: ...
|
|
312
312
|
def HasField(self, field_name: typing_extensions.Literal["value",b"value"]) -> builtins.bool: ...
|
|
313
313
|
def ClearField(self, field_name: typing_extensions.Literal["key",b"key","value",b"value"]) -> None: ...
|
|
314
314
|
|
|
315
|
-
|
|
315
|
+
ARRAYS_FIELD_NUMBER: builtins.int
|
|
316
316
|
METRICS_FIELD_NUMBER: builtins.int
|
|
317
317
|
CONFIGS_FIELD_NUMBER: builtins.int
|
|
318
318
|
@property
|
|
319
|
-
def
|
|
319
|
+
def arrays(self) -> google.protobuf.internal.containers.MessageMap[typing.Text, global___ArrayRecord]: ...
|
|
320
320
|
@property
|
|
321
|
-
def metrics(self) -> google.protobuf.internal.containers.MessageMap[typing.Text,
|
|
321
|
+
def metrics(self) -> google.protobuf.internal.containers.MessageMap[typing.Text, global___MetricRecord]: ...
|
|
322
322
|
@property
|
|
323
|
-
def configs(self) -> google.protobuf.internal.containers.MessageMap[typing.Text,
|
|
323
|
+
def configs(self) -> google.protobuf.internal.containers.MessageMap[typing.Text, global___ConfigRecord]: ...
|
|
324
324
|
def __init__(self,
|
|
325
325
|
*,
|
|
326
|
-
|
|
327
|
-
metrics: typing.Optional[typing.Mapping[typing.Text,
|
|
328
|
-
configs: typing.Optional[typing.Mapping[typing.Text,
|
|
326
|
+
arrays: typing.Optional[typing.Mapping[typing.Text, global___ArrayRecord]] = ...,
|
|
327
|
+
metrics: typing.Optional[typing.Mapping[typing.Text, global___MetricRecord]] = ...,
|
|
328
|
+
configs: typing.Optional[typing.Mapping[typing.Text, global___ConfigRecord]] = ...,
|
|
329
329
|
) -> None: ...
|
|
330
|
-
def ClearField(self, field_name: typing_extensions.Literal["
|
|
331
|
-
|
|
330
|
+
def ClearField(self, field_name: typing_extensions.Literal["arrays",b"arrays","configs",b"configs","metrics",b"metrics"]) -> None: ...
|
|
331
|
+
global___RecordDict = RecordDict
|
flwr/proto/run_pb2.py
CHANGED
|
@@ -14,11 +14,11 @@ _sym_db = _symbol_database.Default()
|
|
|
14
14
|
|
|
15
15
|
from flwr.proto import fab_pb2 as flwr_dot_proto_dot_fab__pb2
|
|
16
16
|
from flwr.proto import node_pb2 as flwr_dot_proto_dot_node__pb2
|
|
17
|
-
from flwr.proto import
|
|
17
|
+
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\
|
|
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')
|
|
22
22
|
|
|
23
23
|
_globals = globals()
|
|
24
24
|
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
|
@@ -31,34 +31,34 @@ if _descriptor._USE_C_DESCRIPTORS == False:
|
|
|
31
31
|
_globals['_CREATERUNREQUEST_OVERRIDECONFIGENTRY']._serialized_options = b'8\001'
|
|
32
32
|
_globals['_GETRUNSTATUSRESPONSE_RUNSTATUSDICTENTRY']._options = None
|
|
33
33
|
_globals['_GETRUNSTATUSRESPONSE_RUNSTATUSDICTENTRY']._serialized_options = b'8\001'
|
|
34
|
-
_globals['_RUN']._serialized_start=
|
|
35
|
-
_globals['_RUN']._serialized_end=
|
|
36
|
-
_globals['_RUN_OVERRIDECONFIGENTRY']._serialized_start=
|
|
37
|
-
_globals['_RUN_OVERRIDECONFIGENTRY']._serialized_end=
|
|
38
|
-
_globals['_RUNSTATUS']._serialized_start=
|
|
39
|
-
_globals['_RUNSTATUS']._serialized_end=
|
|
40
|
-
_globals['_CREATERUNREQUEST']._serialized_start=
|
|
41
|
-
_globals['_CREATERUNREQUEST']._serialized_end=
|
|
42
|
-
_globals['_CREATERUNREQUEST_OVERRIDECONFIGENTRY']._serialized_start=
|
|
43
|
-
_globals['_CREATERUNREQUEST_OVERRIDECONFIGENTRY']._serialized_end=
|
|
44
|
-
_globals['_CREATERUNRESPONSE']._serialized_start=
|
|
45
|
-
_globals['_CREATERUNRESPONSE']._serialized_end=
|
|
46
|
-
_globals['_GETRUNREQUEST']._serialized_start=
|
|
47
|
-
_globals['_GETRUNREQUEST']._serialized_end=
|
|
48
|
-
_globals['_GETRUNRESPONSE']._serialized_start=
|
|
49
|
-
_globals['_GETRUNRESPONSE']._serialized_end=
|
|
50
|
-
_globals['_UPDATERUNSTATUSREQUEST']._serialized_start=
|
|
51
|
-
_globals['_UPDATERUNSTATUSREQUEST']._serialized_end=
|
|
52
|
-
_globals['_UPDATERUNSTATUSRESPONSE']._serialized_start=
|
|
53
|
-
_globals['_UPDATERUNSTATUSRESPONSE']._serialized_end=
|
|
54
|
-
_globals['_GETRUNSTATUSREQUEST']._serialized_start=
|
|
55
|
-
_globals['_GETRUNSTATUSREQUEST']._serialized_end=
|
|
56
|
-
_globals['_GETRUNSTATUSRESPONSE']._serialized_start=
|
|
57
|
-
_globals['_GETRUNSTATUSRESPONSE']._serialized_end=
|
|
58
|
-
_globals['_GETRUNSTATUSRESPONSE_RUNSTATUSDICTENTRY']._serialized_start=
|
|
59
|
-
_globals['_GETRUNSTATUSRESPONSE_RUNSTATUSDICTENTRY']._serialized_end=
|
|
60
|
-
_globals['_GETFEDERATIONOPTIONSREQUEST']._serialized_start=
|
|
61
|
-
_globals['_GETFEDERATIONOPTIONSREQUEST']._serialized_end=
|
|
62
|
-
_globals['_GETFEDERATIONOPTIONSRESPONSE']._serialized_start=
|
|
34
|
+
_globals['_RUN']._serialized_start=139
|
|
35
|
+
_globals['_RUN']._serialized_end=473
|
|
36
|
+
_globals['_RUN_OVERRIDECONFIGENTRY']._serialized_start=400
|
|
37
|
+
_globals['_RUN_OVERRIDECONFIGENTRY']._serialized_end=473
|
|
38
|
+
_globals['_RUNSTATUS']._serialized_start=475
|
|
39
|
+
_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
63
|
_globals['_GETFEDERATIONOPTIONSRESPONSE']._serialized_end=1424
|
|
64
64
|
# @@protoc_insertion_point(module_scope)
|
flwr/proto/run_pb2.pyi
CHANGED
|
@@ -5,7 +5,7 @@ isort:skip_file
|
|
|
5
5
|
import builtins
|
|
6
6
|
import flwr.proto.fab_pb2
|
|
7
7
|
import flwr.proto.node_pb2
|
|
8
|
-
import flwr.proto.
|
|
8
|
+
import flwr.proto.recorddict_pb2
|
|
9
9
|
import flwr.proto.transport_pb2
|
|
10
10
|
import google.protobuf.descriptor
|
|
11
11
|
import google.protobuf.internal.containers
|
|
@@ -258,10 +258,10 @@ class GetFederationOptionsResponse(google.protobuf.message.Message):
|
|
|
258
258
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
259
259
|
FEDERATION_OPTIONS_FIELD_NUMBER: builtins.int
|
|
260
260
|
@property
|
|
261
|
-
def federation_options(self) -> flwr.proto.
|
|
261
|
+
def federation_options(self) -> flwr.proto.recorddict_pb2.ConfigRecord: ...
|
|
262
262
|
def __init__(self,
|
|
263
263
|
*,
|
|
264
|
-
federation_options: typing.Optional[flwr.proto.
|
|
264
|
+
federation_options: typing.Optional[flwr.proto.recorddict_pb2.ConfigRecord] = ...,
|
|
265
265
|
) -> None: ...
|
|
266
266
|
def HasField(self, field_name: typing_extensions.Literal["federation_options",b"federation_options"]) -> builtins.bool: ...
|
|
267
267
|
def ClearField(self, field_name: typing_extensions.Literal["federation_options",b"federation_options"]) -> None: ...
|
flwr/server/__init__.py
CHANGED
|
@@ -21,7 +21,8 @@ from .app import start_server as start_server
|
|
|
21
21
|
from .client_manager import ClientManager as ClientManager
|
|
22
22
|
from .client_manager import SimpleClientManager as SimpleClientManager
|
|
23
23
|
from .compat import LegacyContext as LegacyContext
|
|
24
|
-
from .
|
|
24
|
+
from .grid import Driver as Driver
|
|
25
|
+
from .grid import Grid as Grid
|
|
25
26
|
from .history import History as History
|
|
26
27
|
from .server import Server as Server
|
|
27
28
|
from .server_app import ServerApp as ServerApp
|
|
@@ -31,6 +32,7 @@ from .serverapp_components import ServerAppComponents as ServerAppComponents
|
|
|
31
32
|
__all__ = [
|
|
32
33
|
"ClientManager",
|
|
33
34
|
"Driver",
|
|
35
|
+
"Grid",
|
|
34
36
|
"History",
|
|
35
37
|
"LegacyContext",
|
|
36
38
|
"Server",
|
flwr/server/app.py
CHANGED
|
@@ -54,7 +54,9 @@ from flwr.common.constant import (
|
|
|
54
54
|
TRANSPORT_TYPE_GRPC_ADAPTER,
|
|
55
55
|
TRANSPORT_TYPE_GRPC_RERE,
|
|
56
56
|
TRANSPORT_TYPE_REST,
|
|
57
|
+
EventLogWriterType,
|
|
57
58
|
)
|
|
59
|
+
from flwr.common.event_log_plugin import EventLogWriterPlugin
|
|
58
60
|
from flwr.common.exit import ExitCode, flwr_exit
|
|
59
61
|
from flwr.common.exit_handlers import register_exit_handlers
|
|
60
62
|
from flwr.common.grpc import generic_create_grpc_server
|
|
@@ -66,6 +68,7 @@ from flwr.proto.fleet_pb2_grpc import ( # pylint: disable=E0611
|
|
|
66
68
|
add_FleetServicer_to_server,
|
|
67
69
|
)
|
|
68
70
|
from flwr.proto.grpcadapter_pb2_grpc import add_GrpcAdapterServicer_to_server
|
|
71
|
+
from flwr.server.fleet_event_log_interceptor import FleetEventLogInterceptor
|
|
69
72
|
from flwr.server.serverapp.app import flwr_serverapp
|
|
70
73
|
from flwr.simulation.app import flwr_simulation
|
|
71
74
|
from flwr.superexec.app import load_executor
|
|
@@ -76,13 +79,13 @@ from .history import History
|
|
|
76
79
|
from .server import Server, init_defaults, run_fl
|
|
77
80
|
from .server_config import ServerConfig
|
|
78
81
|
from .strategy import Strategy
|
|
79
|
-
from .superlink.driver.serverappio_grpc import run_serverappio_api_grpc
|
|
80
82
|
from .superlink.ffs.ffs_factory import FfsFactory
|
|
81
83
|
from .superlink.fleet.grpc_adapter.grpc_adapter_servicer import GrpcAdapterServicer
|
|
82
84
|
from .superlink.fleet.grpc_bidi.grpc_server import start_grpc_server
|
|
83
85
|
from .superlink.fleet.grpc_rere.fleet_servicer import FleetServicer
|
|
84
86
|
from .superlink.fleet.grpc_rere.server_interceptor import AuthenticateServerInterceptor
|
|
85
87
|
from .superlink.linkstate import LinkStateFactory
|
|
88
|
+
from .superlink.serverappio.serverappio_grpc import run_serverappio_api_grpc
|
|
86
89
|
from .superlink.simulation.simulationio_grpc import run_simulationio_api_grpc
|
|
87
90
|
|
|
88
91
|
DATABASE = ":flwr-in-memory-state:"
|
|
@@ -90,7 +93,13 @@ BASE_DIR = get_flwr_dir() / "superlink" / "ffs"
|
|
|
90
93
|
|
|
91
94
|
|
|
92
95
|
try:
|
|
93
|
-
from flwr.ee import
|
|
96
|
+
from flwr.ee import (
|
|
97
|
+
add_ee_args_superlink,
|
|
98
|
+
get_dashboard_server,
|
|
99
|
+
get_exec_auth_plugins,
|
|
100
|
+
get_exec_event_log_writer_plugins,
|
|
101
|
+
get_fleet_event_log_writer_plugins,
|
|
102
|
+
)
|
|
94
103
|
except ImportError:
|
|
95
104
|
|
|
96
105
|
# pylint: disable-next=unused-argument
|
|
@@ -101,6 +110,18 @@ except ImportError:
|
|
|
101
110
|
"""Return all Exec API authentication plugins."""
|
|
102
111
|
raise NotImplementedError("No authentication plugins are currently supported.")
|
|
103
112
|
|
|
113
|
+
def get_exec_event_log_writer_plugins() -> dict[str, type[EventLogWriterPlugin]]:
|
|
114
|
+
"""Return all Exec API event log writer plugins."""
|
|
115
|
+
raise NotImplementedError(
|
|
116
|
+
"No event log writer plugins are currently supported."
|
|
117
|
+
)
|
|
118
|
+
|
|
119
|
+
def get_fleet_event_log_writer_plugins() -> dict[str, type[EventLogWriterPlugin]]:
|
|
120
|
+
"""Return all Fleet API event log writer plugins."""
|
|
121
|
+
raise NotImplementedError(
|
|
122
|
+
"No event log writer plugins are currently supported."
|
|
123
|
+
)
|
|
124
|
+
|
|
104
125
|
|
|
105
126
|
def start_server( # pylint: disable=too-many-arguments,too-many-locals
|
|
106
127
|
*,
|
|
@@ -272,9 +293,13 @@ def run_superlink() -> None:
|
|
|
272
293
|
verify_tls_cert = not getattr(args, "disable_oidc_tls_cert_verification", None)
|
|
273
294
|
|
|
274
295
|
auth_plugin: Optional[ExecAuthPlugin] = None
|
|
296
|
+
event_log_plugin: Optional[EventLogWriterPlugin] = None
|
|
275
297
|
# Load the auth plugin if the args.user_auth_config is provided
|
|
276
298
|
if cfg_path := getattr(args, "user_auth_config", None):
|
|
277
299
|
auth_plugin = _try_obtain_exec_auth_plugin(Path(cfg_path), verify_tls_cert)
|
|
300
|
+
# Enable event logging if the args.enable_event_log is True
|
|
301
|
+
if args.enable_event_log:
|
|
302
|
+
event_log_plugin = _try_obtain_exec_event_log_writer_plugin()
|
|
278
303
|
|
|
279
304
|
# Initialize StateFactory
|
|
280
305
|
state_factory = LinkStateFactory(args.database)
|
|
@@ -294,6 +319,7 @@ def run_superlink() -> None:
|
|
|
294
319
|
[args.executor_config] if args.executor_config else args.executor_config
|
|
295
320
|
),
|
|
296
321
|
auth_plugin=auth_plugin,
|
|
322
|
+
event_log_plugin=event_log_plugin,
|
|
297
323
|
)
|
|
298
324
|
grpc_servers = [exec_server]
|
|
299
325
|
|
|
@@ -385,6 +411,11 @@ def run_superlink() -> None:
|
|
|
385
411
|
log(DEBUG, "Automatic node authentication enabled")
|
|
386
412
|
|
|
387
413
|
interceptors = [AuthenticateServerInterceptor(state_factory, auto_auth)]
|
|
414
|
+
if getattr(args, "enable_event_log", None):
|
|
415
|
+
fleet_log_plugin = _try_obtain_fleet_event_log_writer_plugin()
|
|
416
|
+
if fleet_log_plugin is not None:
|
|
417
|
+
interceptors.append(FleetEventLogInterceptor(fleet_log_plugin))
|
|
418
|
+
log(INFO, "Flower Fleet event logging enabled")
|
|
388
419
|
|
|
389
420
|
fleet_server = _run_fleet_api_grpc_rere(
|
|
390
421
|
address=fleet_address,
|
|
@@ -431,6 +462,17 @@ def run_superlink() -> None:
|
|
|
431
462
|
scheduler_th.start()
|
|
432
463
|
bckg_threads.append(scheduler_th)
|
|
433
464
|
|
|
465
|
+
# Add Dashboard server if available
|
|
466
|
+
if dashboard_address := getattr(args, "dashboard_address", None):
|
|
467
|
+
dashboard_address_str, _, _ = _format_address(dashboard_address)
|
|
468
|
+
dashboard_server = get_dashboard_server(
|
|
469
|
+
address=dashboard_address_str,
|
|
470
|
+
state_factory=state_factory,
|
|
471
|
+
certificates=None,
|
|
472
|
+
)
|
|
473
|
+
|
|
474
|
+
grpc_servers.append(dashboard_server)
|
|
475
|
+
|
|
434
476
|
# Graceful shutdown
|
|
435
477
|
register_exit_handlers(
|
|
436
478
|
event_type=EventType.RUN_SUPERLINK_LEAVE,
|
|
@@ -598,6 +640,34 @@ def _try_obtain_exec_auth_plugin(
|
|
|
598
640
|
sys.exit("No authentication plugins are currently supported.")
|
|
599
641
|
|
|
600
642
|
|
|
643
|
+
def _try_obtain_exec_event_log_writer_plugin() -> Optional[EventLogWriterPlugin]:
|
|
644
|
+
"""Return an instance of the event log writer plugin."""
|
|
645
|
+
try:
|
|
646
|
+
all_plugins: dict[str, type[EventLogWriterPlugin]] = (
|
|
647
|
+
get_exec_event_log_writer_plugins()
|
|
648
|
+
)
|
|
649
|
+
plugin_class = all_plugins[EventLogWriterType.STDOUT]
|
|
650
|
+
return plugin_class()
|
|
651
|
+
except KeyError:
|
|
652
|
+
sys.exit("No event log writer plugin is provided.")
|
|
653
|
+
except NotImplementedError:
|
|
654
|
+
sys.exit("No event log writer plugins are currently supported.")
|
|
655
|
+
|
|
656
|
+
|
|
657
|
+
def _try_obtain_fleet_event_log_writer_plugin() -> Optional[EventLogWriterPlugin]:
|
|
658
|
+
"""Return an instance of the Fleet Servicer event log writer plugin."""
|
|
659
|
+
try:
|
|
660
|
+
all_plugins: dict[str, type[EventLogWriterPlugin]] = (
|
|
661
|
+
get_fleet_event_log_writer_plugins()
|
|
662
|
+
)
|
|
663
|
+
plugin_class = all_plugins[EventLogWriterType.STDOUT]
|
|
664
|
+
return plugin_class()
|
|
665
|
+
except KeyError:
|
|
666
|
+
sys.exit("No Fleet API event log writer plugin is provided.")
|
|
667
|
+
except NotImplementedError:
|
|
668
|
+
sys.exit("No Fleet API event log writer plugins are currently supported.")
|
|
669
|
+
|
|
670
|
+
|
|
601
671
|
def _run_fleet_api_grpc_rere(
|
|
602
672
|
address: str,
|
|
603
673
|
state_factory: LinkStateFactory,
|
|
@@ -710,7 +780,8 @@ def _add_args_common(parser: argparse.ArgumentParser) -> None:
|
|
|
710
780
|
"--insecure",
|
|
711
781
|
action="store_true",
|
|
712
782
|
help="Run the server without HTTPS, regardless of whether certificate "
|
|
713
|
-
"paths are provided.
|
|
783
|
+
"paths are provided. Data transmitted between the gRPC client and server "
|
|
784
|
+
"is not encrypted. By default, the server runs with HTTPS enabled. "
|
|
714
785
|
"Use this flag only if you understand the risks.",
|
|
715
786
|
)
|
|
716
787
|
parser.add_argument(
|
flwr/server/compat/__init__.py
CHANGED
|
@@ -15,10 +15,10 @@
|
|
|
15
15
|
"""Flower ServerApp compatibility package."""
|
|
16
16
|
|
|
17
17
|
|
|
18
|
-
from .app import
|
|
18
|
+
from .app import start_grid as start_grid
|
|
19
19
|
from .legacy_context import LegacyContext as LegacyContext
|
|
20
20
|
|
|
21
21
|
__all__ = [
|
|
22
22
|
"LegacyContext",
|
|
23
|
-
"
|
|
23
|
+
"start_grid",
|
|
24
24
|
]
|