flwr-nightly 1.19.0.dev20250531__py3-none-any.whl → 1.19.0.dev20250602__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.
@@ -13,10 +13,3 @@
13
13
  # limitations under the License.
14
14
  # ==============================================================================
15
15
  """Flower AppIO service."""
16
-
17
-
18
- from .app import flwr_clientapp as flwr_clientapp
19
-
20
- __all__ = [
21
- "flwr_clientapp",
22
- ]
@@ -50,6 +50,7 @@ def push_object_to_servicer(
50
50
  obj: InflatableObject,
51
51
  stub: Union[FleetStub, ServerAppIoStub],
52
52
  node: Node,
53
+ run_id: int,
53
54
  object_ids_to_push: Optional[set[str]] = None,
54
55
  ) -> set[str]:
55
56
  """Recursively deflate an object and push it to the servicer.
@@ -63,7 +64,7 @@ def push_object_to_servicer(
63
64
  if children := obj.children:
64
65
  for child in children.values():
65
66
  pushed_object_ids |= push_object_to_servicer(
66
- child, stub, node, object_ids_to_push
67
+ child, stub, node, run_id, object_ids_to_push
67
68
  )
68
69
 
69
70
  # Deflate object and push
@@ -74,6 +75,7 @@ def push_object_to_servicer(
74
75
  _: PushObjectResponse = stub.PushObject(
75
76
  PushObjectRequest(
76
77
  node=node,
78
+ run_id=run_id,
77
79
  object_id=object_id,
78
80
  object_content=object_content,
79
81
  )
@@ -87,11 +89,12 @@ def pull_object_from_servicer(
87
89
  object_id: str,
88
90
  stub: Union[FleetStub, ServerAppIoStub],
89
91
  node: Node,
92
+ run_id: int,
90
93
  ) -> InflatableObject:
91
94
  """Recursively inflate an object by pulling it from the servicer."""
92
95
  # Pull object
93
96
  object_proto: PullObjectResponse = stub.PullObject(
94
- PullObjectRequest(node=node, object_id=object_id)
97
+ PullObjectRequest(node=node, run_id=run_id, object_id=object_id)
95
98
  )
96
99
  object_content = object_proto.object_content
97
100
 
@@ -106,7 +109,7 @@ def pull_object_from_servicer(
106
109
  children: dict[str, InflatableObject] = {}
107
110
  for child_object_id in children_obj_ids:
108
111
  children[child_object_id] = pull_object_from_servicer(
109
- child_object_id, stub, node
112
+ child_object_id, stub, node, run_id
110
113
  )
111
114
 
112
115
  # Inflate object passing its children
@@ -175,13 +175,14 @@ class ConfigRecord(TypedDict[str, ConfigRecordValues], InflatableObject):
175
175
 
176
176
  def deflate(self) -> bytes:
177
177
  """Deflate object."""
178
+ protos = record_value_dict_to_proto(
179
+ self,
180
+ [bool, int, float, str, bytes],
181
+ ProtoConfigRecordValue,
182
+ )
178
183
  obj_body = ProtoConfigRecord(
179
- data=record_value_dict_to_proto(
180
- self,
181
- [bool, int, float, str, bytes],
182
- ProtoConfigRecordValue,
183
- )
184
- ).SerializeToString(deterministic=True)
184
+ items=[ProtoConfigRecord.Item(key=k, value=v) for k, v in protos.items()]
185
+ ).SerializeToString()
185
186
  return add_header_to_object_body(object_body=obj_body, obj=self)
186
187
 
187
188
  @classmethod
@@ -209,11 +210,11 @@ class ConfigRecord(TypedDict[str, ConfigRecordValues], InflatableObject):
209
210
 
210
211
  obj_body = get_object_body(object_content, cls)
211
212
  config_record_proto = ProtoConfigRecord.FromString(obj_body)
212
-
213
+ protos = {item.key: item.value for item in config_record_proto.items}
213
214
  return ConfigRecord(
214
215
  config_dict=cast(
215
216
  dict[str, ConfigRecordValues],
216
- record_value_dict_from_proto(config_record_proto.data),
217
+ record_value_dict_from_proto(protos),
217
218
  ),
218
219
  keep_input=False,
219
220
  )
@@ -154,9 +154,10 @@ class MetricRecord(TypedDict[str, MetricRecordValues], InflatableObject):
154
154
 
155
155
  def deflate(self) -> bytes:
156
156
  """Deflate object."""
157
+ protos = record_value_dict_to_proto(self, [float, int], ProtoMetricRecordValue)
157
158
  obj_body = ProtoMetricRecord(
158
- data=record_value_dict_to_proto(self, [float, int], ProtoMetricRecordValue)
159
- ).SerializeToString(deterministic=True)
159
+ items=[ProtoMetricRecord.Item(key=k, value=v) for k, v in protos.items()]
160
+ ).SerializeToString()
160
161
  return add_header_to_object_body(object_body=obj_body, obj=self)
161
162
 
162
163
  @classmethod
@@ -184,11 +185,11 @@ class MetricRecord(TypedDict[str, MetricRecordValues], InflatableObject):
184
185
 
185
186
  obj_body = get_object_body(object_content, cls)
186
187
  metric_record_proto = ProtoMetricRecord.FromString(obj_body)
187
-
188
+ protos = {item.key: item.value for item in metric_record_proto.items}
188
189
  return cls(
189
190
  metric_dict=cast(
190
191
  dict[str, MetricRecordValues],
191
- record_value_dict_from_proto(metric_record_proto.data),
192
+ record_value_dict_from_proto(protos),
192
193
  ),
193
194
  keep_input=False,
194
195
  )
flwr/common/serde.py CHANGED
@@ -399,8 +399,10 @@ def array_from_proto(array_proto: ProtoArray) -> Array:
399
399
  def array_record_to_proto(record: ArrayRecord) -> ProtoArrayRecord:
400
400
  """Serialize ArrayRecord to ProtoBuf."""
401
401
  return ProtoArrayRecord(
402
- data_keys=record.keys(),
403
- data_values=map(array_to_proto, record.values()),
402
+ items=[
403
+ ProtoArrayRecord.Item(key=k, value=array_to_proto(v))
404
+ for k, v in record.items()
405
+ ]
404
406
  )
405
407
 
406
408
 
@@ -410,7 +412,7 @@ def array_record_from_proto(
410
412
  """Deserialize ArrayRecord from ProtoBuf."""
411
413
  return ArrayRecord(
412
414
  array_dict=OrderedDict(
413
- zip(record_proto.data_keys, map(array_from_proto, record_proto.data_values))
415
+ {item.key: array_from_proto(item.value) for item in record_proto.items}
414
416
  ),
415
417
  keep_input=False,
416
418
  )
@@ -418,17 +420,19 @@ def array_record_from_proto(
418
420
 
419
421
  def metric_record_to_proto(record: MetricRecord) -> ProtoMetricRecord:
420
422
  """Serialize MetricRecord to ProtoBuf."""
423
+ protos = record_value_dict_to_proto(record, [float, int], ProtoMetricRecordValue)
421
424
  return ProtoMetricRecord(
422
- data=record_value_dict_to_proto(record, [float, int], ProtoMetricRecordValue)
425
+ items=[ProtoMetricRecord.Item(key=k, value=v) for k, v in protos.items()]
423
426
  )
424
427
 
425
428
 
426
429
  def metric_record_from_proto(record_proto: ProtoMetricRecord) -> MetricRecord:
427
430
  """Deserialize MetricRecord from ProtoBuf."""
431
+ protos = {item.key: item.value for item in record_proto.items}
428
432
  return MetricRecord(
429
433
  metric_dict=cast(
430
434
  dict[str, typing.MetricRecordValues],
431
- record_value_dict_from_proto(record_proto.data),
435
+ record_value_dict_from_proto(protos),
432
436
  ),
433
437
  keep_input=False,
434
438
  )
@@ -436,21 +440,23 @@ def metric_record_from_proto(record_proto: ProtoMetricRecord) -> MetricRecord:
436
440
 
437
441
  def config_record_to_proto(record: ConfigRecord) -> ProtoConfigRecord:
438
442
  """Serialize ConfigRecord to ProtoBuf."""
443
+ protos = record_value_dict_to_proto(
444
+ record,
445
+ [bool, int, float, str, bytes],
446
+ ProtoConfigRecordValue,
447
+ )
439
448
  return ProtoConfigRecord(
440
- data=record_value_dict_to_proto(
441
- record,
442
- [bool, int, float, str, bytes],
443
- ProtoConfigRecordValue,
444
- )
449
+ items=[ProtoConfigRecord.Item(key=k, value=v) for k, v in protos.items()]
445
450
  )
446
451
 
447
452
 
448
453
  def config_record_from_proto(record_proto: ProtoConfigRecord) -> ConfigRecord:
449
454
  """Deserialize ConfigRecord from ProtoBuf."""
455
+ protos = {item.key: item.value for item in record_proto.items}
450
456
  return ConfigRecord(
451
457
  config_dict=cast(
452
458
  dict[str, typing.ConfigRecordValues],
453
- record_value_dict_from_proto(record_proto.data),
459
+ record_value_dict_from_proto(protos),
454
460
  ),
455
461
  keep_input=False,
456
462
  )
@@ -461,28 +467,33 @@ def config_record_from_proto(record_proto: ProtoConfigRecord) -> ConfigRecord:
461
467
 
462
468
  def recorddict_to_proto(recorddict: RecordDict) -> ProtoRecordDict:
463
469
  """Serialize RecordDict to ProtoBuf."""
464
- return ProtoRecordDict(
465
- arrays={
466
- k: array_record_to_proto(v) for k, v in recorddict.array_records.items()
467
- },
468
- metrics={
469
- k: metric_record_to_proto(v) for k, v in recorddict.metric_records.items()
470
- },
471
- configs={
472
- k: config_record_to_proto(v) for k, v in recorddict.config_records.items()
473
- },
474
- )
470
+ item_cls = ProtoRecordDict.Item
471
+ items: list[ProtoRecordDict.Item] = []
472
+ for k, v in recorddict.items():
473
+ if isinstance(v, ArrayRecord):
474
+ items += [item_cls(key=k, array_record=array_record_to_proto(v))]
475
+ elif isinstance(v, MetricRecord):
476
+ items += [item_cls(key=k, metric_record=metric_record_to_proto(v))]
477
+ elif isinstance(v, ConfigRecord):
478
+ items += [item_cls(key=k, config_record=config_record_to_proto(v))]
479
+ else:
480
+ raise ValueError(f"Unsupported record type: {type(v)}")
481
+ return ProtoRecordDict(items=items)
475
482
 
476
483
 
477
484
  def recorddict_from_proto(recorddict_proto: ProtoRecordDict) -> RecordDict:
478
485
  """Deserialize RecordDict from ProtoBuf."""
479
486
  ret = RecordDict()
480
- for k, arr_record_proto in recorddict_proto.arrays.items():
481
- ret[k] = array_record_from_proto(arr_record_proto)
482
- for k, m_record_proto in recorddict_proto.metrics.items():
483
- ret[k] = metric_record_from_proto(m_record_proto)
484
- for k, c_record_proto in recorddict_proto.configs.items():
485
- ret[k] = config_record_from_proto(c_record_proto)
487
+ for item in recorddict_proto.items:
488
+ field = item.WhichOneof("value")
489
+ if field == "array_record":
490
+ ret[item.key] = array_record_from_proto(item.array_record)
491
+ elif field == "metric_record":
492
+ ret[item.key] = metric_record_from_proto(item.metric_record)
493
+ elif field == "config_record":
494
+ ret[item.key] = config_record_from_proto(item.config_record)
495
+ else:
496
+ raise ValueError(f"Unsupported record type: {field}")
486
497
  return ret
487
498
 
488
499
 
@@ -109,6 +109,8 @@ def record_value_dict_to_proto(
109
109
  ) -> dict[str, T]:
110
110
  """Serialize the record value dict to ProtoBuf.
111
111
 
112
+ This function will preserve the order of the keys in the input dictionary.
113
+
112
114
  Note: `bool` MUST be put in the front of allowd_types if it exists.
113
115
  """
114
116
  # Move bool to the front
flwr/proto/message_pb2.py CHANGED
@@ -18,7 +18,7 @@ from flwr.proto import transport_pb2 as flwr_dot_proto_dot_transport__pb2
18
18
  from flwr.proto import node_pb2 as flwr_dot_proto_dot_node__pb2
19
19
 
20
20
 
21
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x18\x66lwr/proto/message.proto\x12\nflwr.proto\x1a\x16\x66lwr/proto/error.proto\x1a\x1b\x66lwr/proto/recorddict.proto\x1a\x1a\x66lwr/proto/transport.proto\x1a\x15\x66lwr/proto/node.proto\"|\n\x07Message\x12&\n\x08metadata\x18\x01 \x01(\x0b\x32\x14.flwr.proto.Metadata\x12\'\n\x07\x63ontent\x18\x02 \x01(\x0b\x32\x16.flwr.proto.RecordDict\x12 \n\x05\x65rror\x18\x03 \x01(\x0b\x32\x11.flwr.proto.Error\"\xd0\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\x16.flwr.proto.RecordDict\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\"\xbe\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\x1b\n\x13reply_to_message_id\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\"\x1f\n\tObjectIDs\x12\x12\n\nobject_ids\x18\x01 \x03(\t\"^\n\x11PushObjectRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x11\n\tobject_id\x18\x02 \x01(\t\x12\x16\n\x0eobject_content\x18\x03 \x01(\x0c\"\x14\n\x12PushObjectResponse\"F\n\x11PullObjectRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x11\n\tobject_id\x18\x02 \x01(\t\",\n\x12PullObjectResponse\x12\x16\n\x0eobject_content\x18\x01 \x01(\x0c\x62\x06proto3')
21
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x18\x66lwr/proto/message.proto\x12\nflwr.proto\x1a\x16\x66lwr/proto/error.proto\x1a\x1b\x66lwr/proto/recorddict.proto\x1a\x1a\x66lwr/proto/transport.proto\x1a\x15\x66lwr/proto/node.proto\"|\n\x07Message\x12&\n\x08metadata\x18\x01 \x01(\x0b\x32\x14.flwr.proto.Metadata\x12\'\n\x07\x63ontent\x18\x02 \x01(\x0b\x32\x16.flwr.proto.RecordDict\x12 \n\x05\x65rror\x18\x03 \x01(\x0b\x32\x11.flwr.proto.Error\"\xd0\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\x16.flwr.proto.RecordDict\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\"\xbe\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\x1b\n\x13reply_to_message_id\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\"\x1f\n\tObjectIDs\x12\x12\n\nobject_ids\x18\x01 \x03(\t\"n\n\x11PushObjectRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x0e\n\x06run_id\x18\x02 \x01(\x04\x12\x11\n\tobject_id\x18\x03 \x01(\t\x12\x16\n\x0eobject_content\x18\x04 \x01(\x0c\"$\n\x12PushObjectResponse\x12\x0e\n\x06stored\x18\x01 \x01(\x08\"V\n\x11PullObjectRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x0e\n\x06run_id\x18\x02 \x01(\x04\x12\x11\n\tobject_id\x18\x03 \x01(\t\",\n\x12PullObjectResponse\x12\x16\n\x0eobject_content\x18\x01 \x01(\x0c\x62\x06proto3')
22
22
 
23
23
  _globals = globals()
24
24
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
@@ -42,11 +42,11 @@ if _descriptor._USE_C_DESCRIPTORS == False:
42
42
  _globals['_OBJECTIDS']._serialized_start=802
43
43
  _globals['_OBJECTIDS']._serialized_end=833
44
44
  _globals['_PUSHOBJECTREQUEST']._serialized_start=835
45
- _globals['_PUSHOBJECTREQUEST']._serialized_end=929
46
- _globals['_PUSHOBJECTRESPONSE']._serialized_start=931
47
- _globals['_PUSHOBJECTRESPONSE']._serialized_end=951
48
- _globals['_PULLOBJECTREQUEST']._serialized_start=953
49
- _globals['_PULLOBJECTREQUEST']._serialized_end=1023
50
- _globals['_PULLOBJECTRESPONSE']._serialized_start=1025
51
- _globals['_PULLOBJECTRESPONSE']._serialized_end=1069
45
+ _globals['_PUSHOBJECTREQUEST']._serialized_end=945
46
+ _globals['_PUSHOBJECTRESPONSE']._serialized_start=947
47
+ _globals['_PUSHOBJECTRESPONSE']._serialized_end=983
48
+ _globals['_PULLOBJECTREQUEST']._serialized_start=985
49
+ _globals['_PULLOBJECTREQUEST']._serialized_end=1071
50
+ _globals['_PULLOBJECTRESPONSE']._serialized_start=1073
51
+ _globals['_PULLOBJECTRESPONSE']._serialized_end=1117
52
52
  # @@protoc_insertion_point(module_scope)
@@ -144,43 +144,54 @@ class PushObjectRequest(google.protobuf.message.Message):
144
144
  """PushObject messages"""
145
145
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
146
146
  NODE_FIELD_NUMBER: builtins.int
147
+ RUN_ID_FIELD_NUMBER: builtins.int
147
148
  OBJECT_ID_FIELD_NUMBER: builtins.int
148
149
  OBJECT_CONTENT_FIELD_NUMBER: builtins.int
149
150
  @property
150
151
  def node(self) -> flwr.proto.node_pb2.Node: ...
152
+ run_id: builtins.int
151
153
  object_id: typing.Text
152
154
  object_content: builtins.bytes
153
155
  def __init__(self,
154
156
  *,
155
157
  node: typing.Optional[flwr.proto.node_pb2.Node] = ...,
158
+ run_id: builtins.int = ...,
156
159
  object_id: typing.Text = ...,
157
160
  object_content: builtins.bytes = ...,
158
161
  ) -> None: ...
159
162
  def HasField(self, field_name: typing_extensions.Literal["node",b"node"]) -> builtins.bool: ...
160
- def ClearField(self, field_name: typing_extensions.Literal["node",b"node","object_content",b"object_content","object_id",b"object_id"]) -> None: ...
163
+ def ClearField(self, field_name: typing_extensions.Literal["node",b"node","object_content",b"object_content","object_id",b"object_id","run_id",b"run_id"]) -> None: ...
161
164
  global___PushObjectRequest = PushObjectRequest
162
165
 
163
166
  class PushObjectResponse(google.protobuf.message.Message):
164
167
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
168
+ STORED_FIELD_NUMBER: builtins.int
169
+ stored: builtins.bool
165
170
  def __init__(self,
171
+ *,
172
+ stored: builtins.bool = ...,
166
173
  ) -> None: ...
174
+ def ClearField(self, field_name: typing_extensions.Literal["stored",b"stored"]) -> None: ...
167
175
  global___PushObjectResponse = PushObjectResponse
168
176
 
169
177
  class PullObjectRequest(google.protobuf.message.Message):
170
178
  """PullObject messages"""
171
179
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
172
180
  NODE_FIELD_NUMBER: builtins.int
181
+ RUN_ID_FIELD_NUMBER: builtins.int
173
182
  OBJECT_ID_FIELD_NUMBER: builtins.int
174
183
  @property
175
184
  def node(self) -> flwr.proto.node_pb2.Node: ...
185
+ run_id: builtins.int
176
186
  object_id: typing.Text
177
187
  def __init__(self,
178
188
  *,
179
189
  node: typing.Optional[flwr.proto.node_pb2.Node] = ...,
190
+ run_id: builtins.int = ...,
180
191
  object_id: typing.Text = ...,
181
192
  ) -> None: ...
182
193
  def HasField(self, field_name: typing_extensions.Literal["node",b"node"]) -> builtins.bool: ...
183
- def ClearField(self, field_name: typing_extensions.Literal["node",b"node","object_id",b"object_id"]) -> None: ...
194
+ def ClearField(self, field_name: typing_extensions.Literal["node",b"node","object_id",b"object_id","run_id",b"run_id"]) -> None: ...
184
195
  global___PullObjectRequest = PullObjectRequest
185
196
 
186
197
  class PullObjectResponse(google.protobuf.message.Message):
@@ -14,23 +14,13 @@ _sym_db = _symbol_database.Default()
14
14
 
15
15
 
16
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')
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\"q\n\x0b\x41rrayRecord\x12+\n\x05items\x18\x01 \x03(\x0b\x32\x1c.flwr.proto.ArrayRecord.Item\x1a\x35\n\x04Item\x12\x0b\n\x03key\x18\x01 \x01(\t\x12 \n\x05value\x18\x02 \x01(\x0b\x32\x11.flwr.proto.Array\"\x7f\n\x0cMetricRecord\x12,\n\x05items\x18\x01 \x03(\x0b\x32\x1d.flwr.proto.MetricRecord.Item\x1a\x41\n\x04Item\x12\x0b\n\x03key\x18\x01 \x01(\t\x12,\n\x05value\x18\x02 \x01(\x0b\x32\x1d.flwr.proto.MetricRecordValue\"\x7f\n\x0c\x43onfigRecord\x12,\n\x05items\x18\x01 \x03(\x0b\x32\x1d.flwr.proto.ConfigRecord.Item\x1a\x41\n\x04Item\x12\x0b\n\x03key\x18\x01 \x01(\t\x12,\n\x05value\x18\x02 \x01(\x0b\x32\x1d.flwr.proto.ConfigRecordValue\"\xee\x01\n\nRecordDict\x12*\n\x05items\x18\x01 \x03(\x0b\x32\x1b.flwr.proto.RecordDict.Item\x1a\xb3\x01\n\x04Item\x12\x0b\n\x03key\x18\x01 \x01(\t\x12/\n\x0c\x61rray_record\x18\x02 \x01(\x0b\x32\x17.flwr.proto.ArrayRecordH\x00\x12\x31\n\rmetric_record\x18\x03 \x01(\x0b\x32\x18.flwr.proto.MetricRecordH\x00\x12\x31\n\rconfig_record\x18\x04 \x01(\x0b\x32\x18.flwr.proto.ConfigRecordH\x00\x42\x07\n\x05valueb\x06proto3')
18
18
 
19
19
  _globals = globals()
20
20
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
21
21
  _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'flwr.proto.recorddict_pb2', _globals)
22
22
  if _descriptor._USE_C_DESCRIPTORS == False:
23
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
24
  _globals['_DOUBLELIST']._serialized_start=43
35
25
  _globals['_DOUBLELIST']._serialized_end=69
36
26
  _globals['_SINTLIST']._serialized_start=71
@@ -50,21 +40,19 @@ if _descriptor._USE_C_DESCRIPTORS == False:
50
40
  _globals['_CONFIGRECORDVALUE']._serialized_start=491
51
41
  _globals['_CONFIGRECORDVALUE']._serialized_end=892
52
42
  _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
43
+ _globals['_ARRAYRECORD']._serialized_end=1007
44
+ _globals['_ARRAYRECORD_ITEM']._serialized_start=954
45
+ _globals['_ARRAYRECORD_ITEM']._serialized_end=1007
46
+ _globals['_METRICRECORD']._serialized_start=1009
47
+ _globals['_METRICRECORD']._serialized_end=1136
48
+ _globals['_METRICRECORD_ITEM']._serialized_start=1071
49
+ _globals['_METRICRECORD_ITEM']._serialized_end=1136
50
+ _globals['_CONFIGRECORD']._serialized_start=1138
51
+ _globals['_CONFIGRECORD']._serialized_end=1265
52
+ _globals['_CONFIGRECORD_ITEM']._serialized_start=1200
53
+ _globals['_CONFIGRECORD_ITEM']._serialized_end=1265
54
+ _globals['_RECORDDICT']._serialized_start=1268
55
+ _globals['_RECORDDICT']._serialized_end=1506
56
+ _globals['_RECORDDICT_ITEM']._serialized_start=1327
57
+ _globals['_RECORDDICT_ITEM']._serialized_end=1506
70
58
  # @@protoc_insertion_point(module_scope)
@@ -197,23 +197,34 @@ global___ConfigRecordValue = ConfigRecordValue
197
197
 
198
198
  class ArrayRecord(google.protobuf.message.Message):
199
199
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
200
- DATA_KEYS_FIELD_NUMBER: builtins.int
201
- DATA_VALUES_FIELD_NUMBER: builtins.int
202
- @property
203
- def data_keys(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[typing.Text]: ...
200
+ class Item(google.protobuf.message.Message):
201
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
202
+ KEY_FIELD_NUMBER: builtins.int
203
+ VALUE_FIELD_NUMBER: builtins.int
204
+ key: typing.Text
205
+ @property
206
+ def value(self) -> global___Array: ...
207
+ def __init__(self,
208
+ *,
209
+ key: typing.Text = ...,
210
+ value: typing.Optional[global___Array] = ...,
211
+ ) -> None: ...
212
+ def HasField(self, field_name: typing_extensions.Literal["value",b"value"]) -> builtins.bool: ...
213
+ def ClearField(self, field_name: typing_extensions.Literal["key",b"key","value",b"value"]) -> None: ...
214
+
215
+ ITEMS_FIELD_NUMBER: builtins.int
204
216
  @property
205
- def data_values(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___Array]: ...
217
+ def items(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___ArrayRecord.Item]: ...
206
218
  def __init__(self,
207
219
  *,
208
- data_keys: typing.Optional[typing.Iterable[typing.Text]] = ...,
209
- data_values: typing.Optional[typing.Iterable[global___Array]] = ...,
220
+ items: typing.Optional[typing.Iterable[global___ArrayRecord.Item]] = ...,
210
221
  ) -> None: ...
211
- def ClearField(self, field_name: typing_extensions.Literal["data_keys",b"data_keys","data_values",b"data_values"]) -> None: ...
222
+ def ClearField(self, field_name: typing_extensions.Literal["items",b"items"]) -> None: ...
212
223
  global___ArrayRecord = ArrayRecord
213
224
 
214
225
  class MetricRecord(google.protobuf.message.Message):
215
226
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
216
- class DataEntry(google.protobuf.message.Message):
227
+ class Item(google.protobuf.message.Message):
217
228
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
218
229
  KEY_FIELD_NUMBER: builtins.int
219
230
  VALUE_FIELD_NUMBER: builtins.int
@@ -228,19 +239,19 @@ class MetricRecord(google.protobuf.message.Message):
228
239
  def HasField(self, field_name: typing_extensions.Literal["value",b"value"]) -> builtins.bool: ...
229
240
  def ClearField(self, field_name: typing_extensions.Literal["key",b"key","value",b"value"]) -> None: ...
230
241
 
231
- DATA_FIELD_NUMBER: builtins.int
242
+ ITEMS_FIELD_NUMBER: builtins.int
232
243
  @property
233
- def data(self) -> google.protobuf.internal.containers.MessageMap[typing.Text, global___MetricRecordValue]: ...
244
+ def items(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___MetricRecord.Item]: ...
234
245
  def __init__(self,
235
246
  *,
236
- data: typing.Optional[typing.Mapping[typing.Text, global___MetricRecordValue]] = ...,
247
+ items: typing.Optional[typing.Iterable[global___MetricRecord.Item]] = ...,
237
248
  ) -> None: ...
238
- def ClearField(self, field_name: typing_extensions.Literal["data",b"data"]) -> None: ...
249
+ def ClearField(self, field_name: typing_extensions.Literal["items",b"items"]) -> None: ...
239
250
  global___MetricRecord = MetricRecord
240
251
 
241
252
  class ConfigRecord(google.protobuf.message.Message):
242
253
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
243
- class DataEntry(google.protobuf.message.Message):
254
+ class Item(google.protobuf.message.Message):
244
255
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
245
256
  KEY_FIELD_NUMBER: builtins.int
246
257
  VALUE_FIELD_NUMBER: builtins.int
@@ -255,77 +266,48 @@ class ConfigRecord(google.protobuf.message.Message):
255
266
  def HasField(self, field_name: typing_extensions.Literal["value",b"value"]) -> builtins.bool: ...
256
267
  def ClearField(self, field_name: typing_extensions.Literal["key",b"key","value",b"value"]) -> None: ...
257
268
 
258
- DATA_FIELD_NUMBER: builtins.int
269
+ ITEMS_FIELD_NUMBER: builtins.int
259
270
  @property
260
- def data(self) -> google.protobuf.internal.containers.MessageMap[typing.Text, global___ConfigRecordValue]: ...
271
+ def items(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___ConfigRecord.Item]: ...
261
272
  def __init__(self,
262
273
  *,
263
- data: typing.Optional[typing.Mapping[typing.Text, global___ConfigRecordValue]] = ...,
274
+ items: typing.Optional[typing.Iterable[global___ConfigRecord.Item]] = ...,
264
275
  ) -> None: ...
265
- def ClearField(self, field_name: typing_extensions.Literal["data",b"data"]) -> None: ...
276
+ def ClearField(self, field_name: typing_extensions.Literal["items",b"items"]) -> None: ...
266
277
  global___ConfigRecord = ConfigRecord
267
278
 
268
279
  class RecordDict(google.protobuf.message.Message):
269
280
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
270
- class ArraysEntry(google.protobuf.message.Message):
281
+ class Item(google.protobuf.message.Message):
271
282
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
272
283
  KEY_FIELD_NUMBER: builtins.int
273
- VALUE_FIELD_NUMBER: builtins.int
284
+ ARRAY_RECORD_FIELD_NUMBER: builtins.int
285
+ METRIC_RECORD_FIELD_NUMBER: builtins.int
286
+ CONFIG_RECORD_FIELD_NUMBER: builtins.int
274
287
  key: typing.Text
275
288
  @property
276
- def value(self) -> global___ArrayRecord: ...
277
- def __init__(self,
278
- *,
279
- key: typing.Text = ...,
280
- value: typing.Optional[global___ArrayRecord] = ...,
281
- ) -> None: ...
282
- def HasField(self, field_name: typing_extensions.Literal["value",b"value"]) -> builtins.bool: ...
283
- def ClearField(self, field_name: typing_extensions.Literal["key",b"key","value",b"value"]) -> None: ...
284
-
285
- class MetricsEntry(google.protobuf.message.Message):
286
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
287
- KEY_FIELD_NUMBER: builtins.int
288
- VALUE_FIELD_NUMBER: builtins.int
289
- key: typing.Text
289
+ def array_record(self) -> global___ArrayRecord: ...
290
290
  @property
291
- def value(self) -> global___MetricRecord: ...
292
- def __init__(self,
293
- *,
294
- key: typing.Text = ...,
295
- value: typing.Optional[global___MetricRecord] = ...,
296
- ) -> None: ...
297
- def HasField(self, field_name: typing_extensions.Literal["value",b"value"]) -> builtins.bool: ...
298
- def ClearField(self, field_name: typing_extensions.Literal["key",b"key","value",b"value"]) -> None: ...
299
-
300
- class ConfigsEntry(google.protobuf.message.Message):
301
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
302
- KEY_FIELD_NUMBER: builtins.int
303
- VALUE_FIELD_NUMBER: builtins.int
304
- key: typing.Text
291
+ def metric_record(self) -> global___MetricRecord: ...
305
292
  @property
306
- def value(self) -> global___ConfigRecord: ...
293
+ def config_record(self) -> global___ConfigRecord: ...
307
294
  def __init__(self,
308
295
  *,
309
296
  key: typing.Text = ...,
310
- value: typing.Optional[global___ConfigRecord] = ...,
297
+ array_record: typing.Optional[global___ArrayRecord] = ...,
298
+ metric_record: typing.Optional[global___MetricRecord] = ...,
299
+ config_record: typing.Optional[global___ConfigRecord] = ...,
311
300
  ) -> None: ...
312
- def HasField(self, field_name: typing_extensions.Literal["value",b"value"]) -> builtins.bool: ...
313
- def ClearField(self, field_name: typing_extensions.Literal["key",b"key","value",b"value"]) -> None: ...
301
+ def HasField(self, field_name: typing_extensions.Literal["array_record",b"array_record","config_record",b"config_record","metric_record",b"metric_record","value",b"value"]) -> builtins.bool: ...
302
+ def ClearField(self, field_name: typing_extensions.Literal["array_record",b"array_record","config_record",b"config_record","key",b"key","metric_record",b"metric_record","value",b"value"]) -> None: ...
303
+ def WhichOneof(self, oneof_group: typing_extensions.Literal["value",b"value"]) -> typing.Optional[typing_extensions.Literal["array_record","metric_record","config_record"]]: ...
314
304
 
315
- ARRAYS_FIELD_NUMBER: builtins.int
316
- METRICS_FIELD_NUMBER: builtins.int
317
- CONFIGS_FIELD_NUMBER: builtins.int
318
- @property
319
- def arrays(self) -> google.protobuf.internal.containers.MessageMap[typing.Text, global___ArrayRecord]: ...
320
- @property
321
- def metrics(self) -> google.protobuf.internal.containers.MessageMap[typing.Text, global___MetricRecord]: ...
305
+ ITEMS_FIELD_NUMBER: builtins.int
322
306
  @property
323
- def configs(self) -> google.protobuf.internal.containers.MessageMap[typing.Text, global___ConfigRecord]: ...
307
+ def items(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___RecordDict.Item]: ...
324
308
  def __init__(self,
325
309
  *,
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]] = ...,
310
+ items: typing.Optional[typing.Iterable[global___RecordDict.Item]] = ...,
329
311
  ) -> None: ...
330
- def ClearField(self, field_name: typing_extensions.Literal["arrays",b"arrays","configs",b"configs","metrics",b"metrics"]) -> None: ...
312
+ def ClearField(self, field_name: typing_extensions.Literal["items",b"items"]) -> None: ...
331
313
  global___RecordDict = RecordDict
@@ -114,7 +114,7 @@ async def pull_message(request: PullMessagesRequest) -> PullMessagesResponse:
114
114
  """Pull PullMessages."""
115
115
  # Get state from app
116
116
  state: LinkState = cast(LinkStateFactory, app.state.STATE_FACTORY).state()
117
- store: ObjectStore = cast(ObjectStoreFactory, app.state.STATE_FACTORY).store()
117
+ store: ObjectStore = cast(ObjectStoreFactory, app.state.OBJECTSTORE_FACTORY).store()
118
118
 
119
119
  # Handle message
120
120
  return message_handler.pull_messages(request=request, state=state, store=store)
@@ -125,7 +125,7 @@ async def push_message(request: PushMessagesRequest) -> PushMessagesResponse:
125
125
  """Pull PushMessages."""
126
126
  # Get state from app
127
127
  state: LinkState = cast(LinkStateFactory, app.state.STATE_FACTORY).state()
128
- store: ObjectStore = cast(ObjectStoreFactory, app.state.STATE_FACTORY).store()
128
+ store: ObjectStore = cast(ObjectStoreFactory, app.state.OBJECTSTORE_FACTORY).store()
129
129
 
130
130
  # Handle message
131
131
  return message_handler.push_messages(request=request, state=state, store=store)
@@ -16,5 +16,9 @@
16
16
 
17
17
 
18
18
  from .flower_supernode import flower_supernode
19
+ from .flwr_clientapp import flwr_clientapp
19
20
 
20
- __all__ = ["flower_supernode"]
21
+ __all__ = [
22
+ "flower_supernode",
23
+ "flwr_clientapp",
24
+ ]