sapiopycommons 2025.6.30a572__tar.gz → 2025.7.1a576__tar.gz

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 sapiopycommons might be problematic. Click here for more details.

Files changed (111) hide show
  1. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/PKG-INFO +1 -1
  2. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/pyproject.toml +1 -1
  3. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/ai/protobuf_utils.py +57 -3
  4. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/ai/test_client.py +7 -3
  5. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/ai/tool_service_base.py +1 -2
  6. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/.gitignore +0 -0
  7. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/LICENSE +0 -0
  8. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/README.md +0 -0
  9. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/__init__.py +0 -0
  10. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/ai/__init__.py +0 -0
  11. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/ai/api/fielddefinitions/proto/fields_pb2.py +0 -0
  12. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/ai/api/fielddefinitions/proto/fields_pb2.pyi +0 -0
  13. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/ai/api/fielddefinitions/proto/fields_pb2_grpc.py +0 -0
  14. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/ai/api/fielddefinitions/proto/velox_field_def_pb2.py +0 -0
  15. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/ai/api/fielddefinitions/proto/velox_field_def_pb2.pyi +0 -0
  16. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/ai/api/fielddefinitions/proto/velox_field_def_pb2_grpc.py +0 -0
  17. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/ai/api/plan/proto/step_output_pb2.py +0 -0
  18. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/ai/api/plan/proto/step_output_pb2.pyi +0 -0
  19. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/ai/api/plan/proto/step_output_pb2_grpc.py +0 -0
  20. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/ai/api/plan/proto/step_pb2.py +0 -0
  21. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/ai/api/plan/proto/step_pb2.pyi +0 -0
  22. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/ai/api/plan/proto/step_pb2_grpc.py +0 -0
  23. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/ai/api/plan/script/proto/script_pb2.py +0 -0
  24. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/ai/api/plan/script/proto/script_pb2.pyi +0 -0
  25. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/ai/api/plan/script/proto/script_pb2_grpc.py +0 -0
  26. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/ai/api/plan/tool/proto/entry_pb2.py +0 -0
  27. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/ai/api/plan/tool/proto/entry_pb2.pyi +0 -0
  28. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/ai/api/plan/tool/proto/entry_pb2_grpc.py +0 -0
  29. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/ai/api/plan/tool/proto/tool_pb2.py +0 -0
  30. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/ai/api/plan/tool/proto/tool_pb2.pyi +0 -0
  31. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/ai/api/plan/tool/proto/tool_pb2_grpc.py +0 -0
  32. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/ai/api/session/proto/sapio_conn_info_pb2.py +0 -0
  33. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/ai/api/session/proto/sapio_conn_info_pb2.pyi +0 -0
  34. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/ai/api/session/proto/sapio_conn_info_pb2_grpc.py +0 -0
  35. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/callbacks/__init__.py +0 -0
  36. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/callbacks/callback_util.py +0 -0
  37. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/callbacks/field_builder.py +0 -0
  38. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/chem/IndigoMolecules.py +0 -0
  39. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/chem/Molecules.py +0 -0
  40. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/chem/__init__.py +0 -0
  41. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/customreport/__init__.py +0 -0
  42. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/customreport/auto_pagers.py +0 -0
  43. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/customreport/column_builder.py +0 -0
  44. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/customreport/custom_report_builder.py +0 -0
  45. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/customreport/term_builder.py +0 -0
  46. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/datatype/__init__.py +0 -0
  47. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/datatype/attachment_util.py +0 -0
  48. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/datatype/data_fields.py +0 -0
  49. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/datatype/pseudo_data_types.py +0 -0
  50. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/eln/__init__.py +0 -0
  51. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/eln/experiment_handler.py +0 -0
  52. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/eln/experiment_report_util.py +0 -0
  53. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/eln/experiment_tags.py +0 -0
  54. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/eln/plate_designer.py +0 -0
  55. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/files/__init__.py +0 -0
  56. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/files/complex_data_loader.py +0 -0
  57. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/files/file_bridge.py +0 -0
  58. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/files/file_bridge_handler.py +0 -0
  59. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/files/file_data_handler.py +0 -0
  60. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/files/file_util.py +0 -0
  61. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/files/file_validator.py +0 -0
  62. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/files/file_writer.py +0 -0
  63. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/flowcyto/flow_cyto.py +0 -0
  64. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/flowcyto/flowcyto_data.py +0 -0
  65. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/general/__init__.py +0 -0
  66. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/general/accession_service.py +0 -0
  67. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/general/aliases.py +0 -0
  68. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/general/audit_log.py +0 -0
  69. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/general/custom_report_util.py +0 -0
  70. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/general/directive_util.py +0 -0
  71. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/general/exceptions.py +0 -0
  72. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/general/html_formatter.py +0 -0
  73. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/general/popup_util.py +0 -0
  74. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/general/sapio_links.py +0 -0
  75. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/general/storage_util.py +0 -0
  76. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/general/time_util.py +0 -0
  77. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/multimodal/multimodal.py +0 -0
  78. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/multimodal/multimodal_data.py +0 -0
  79. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/processtracking/__init__.py +0 -0
  80. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/processtracking/custom_workflow_handler.py +0 -0
  81. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/processtracking/endpoints.py +0 -0
  82. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/recordmodel/__init__.py +0 -0
  83. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/recordmodel/record_handler.py +0 -0
  84. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/rules/__init__.py +0 -0
  85. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/rules/eln_rule_handler.py +0 -0
  86. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/rules/on_save_rule_handler.py +0 -0
  87. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/samples/aliquot.py +0 -0
  88. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/sftpconnect/__init__.py +0 -0
  89. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/sftpconnect/sftp_builder.py +0 -0
  90. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/webhook/__init__.py +0 -0
  91. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/webhook/webhook_context.py +0 -0
  92. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/webhook/webhook_handlers.py +0 -0
  93. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/src/sapiopycommons/webhook/webservice_handlers.py +0 -0
  94. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/tests/AF-A0A009IHW8-F1-model_v4.cif +0 -0
  95. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/tests/_do_not_add_init_py_here +0 -0
  96. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/tests/accession_test.py +0 -0
  97. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/tests/aliquot_test.py +0 -0
  98. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/tests/bio_reg_test.py +0 -0
  99. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/tests/chem_test.py +0 -0
  100. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/tests/chem_test_curation_queue.py +0 -0
  101. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/tests/curation_queue_test.sdf +0 -0
  102. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/tests/data_type_models.py +0 -0
  103. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/tests/flowcyto/101_DEN084Y5_15_E01_008_clean.fcs +0 -0
  104. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/tests/flowcyto/101_DEN084Y5_15_E03_009_clean.fcs +0 -0
  105. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/tests/flowcyto/101_DEN084Y5_15_E05_010_clean.fcs +0 -0
  106. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/tests/flowcyto/8_color_ICS.wsp +0 -0
  107. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/tests/flowcyto/COVID19_W_001_O.fcs +0 -0
  108. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/tests/flowcyto_test.py +0 -0
  109. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/tests/kappa.chains.fasta +0 -0
  110. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/tests/mafft_test.py +0 -0
  111. {sapiopycommons-2025.6.30a572 → sapiopycommons-2025.7.1a576}/tests/test.gb +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: sapiopycommons
3
- Version: 2025.6.30a572
3
+ Version: 2025.7.1a576
4
4
  Summary: Official Sapio Python API Utilities Package
5
5
  Project-URL: Homepage, https://github.com/sapiosciences
6
6
  Author-email: Jonathan Steck <jsteck@sapiosciences.com>, Yechen Qiao <yqiao@sapiosciences.com>
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "sapiopycommons"
7
- version='2025.06.30a572'
7
+ version='2025.07.01a576'
8
8
  authors = [
9
9
  { name="Jonathan Steck", email="jsteck@sapiosciences.com" },
10
10
  { name="Yechen Qiao", email="yqiao@sapiosciences.com" },
@@ -276,7 +276,7 @@ class ProtobufUtils:
276
276
  double_format=ProtobufUtils.double_format_to_pbo(field.double_format),
277
277
  # color_ranges # Missing in FieldDefinition.py
278
278
  )
279
- # elif isinstance(field, VeloxFileBlobFieldDefinition): # Assuming this exists
279
+ # elif isinstance(field, VeloxFileBlobFieldDefinition):
280
280
  # file_blob_properties = FileBlobPropertiesPbo()
281
281
  elif isinstance(field, VeloxEnumFieldDefinition):
282
282
  enum_properties = EnumPropertiesPbo(
@@ -379,8 +379,8 @@ class ProtobufUtils:
379
379
  field_validator=ProtobufUtils.field_validator_to_pbo(field.field_validator),
380
380
  # preserve_padding # Missing in FieldDefinition.py
381
381
  )
382
- # else: # Handle unknown types or just let it pass with no specific properties
383
- # print(f"Warning: Unhandled field type for properties mapping: {type(field)}")
382
+ else:
383
+ print(f"Warning: Unhandled field type for properties mapping: {type(field)}")
384
384
 
385
385
  return VeloxFieldDefPbo(
386
386
  data_field_type=ProtobufUtils.field_type_to_pbo(field.data_field_type),
@@ -452,3 +452,57 @@ class ProtobufUtils:
452
452
  return value.int_value
453
453
  case _:
454
454
  return value.string_value
455
+
456
+ @staticmethod
457
+ def field_def_pbo_to_default_value(field_def: VeloxFieldDefPbo) -> FieldValue:
458
+ """
459
+ Get the default value of a VeloxFieldDefPbo.
460
+
461
+ :param field_def: The VeloxFieldDefPbo object.
462
+ :return: The default value for the field definition.
463
+ """
464
+ match field_def.data_field_type:
465
+ case FieldTypePbo.ACTION:
466
+ return None
467
+ case FieldTypePbo.ACTION_STRING:
468
+ return field_def.action_string_properties.default_value
469
+ case FieldTypePbo.AUTO_ACCESSION:
470
+ return None
471
+ case FieldTypePbo.BOOLEAN:
472
+ return field_def.boolean_properties.default_value
473
+ case FieldTypePbo.CHILDLINK:
474
+ return None
475
+ case FieldTypePbo.DATE:
476
+ return field_def.date_properties.default_value
477
+ case FieldTypePbo.DATE_RANGE:
478
+ return field_def.date_range_properties.default_value
479
+ case FieldTypePbo.DOUBLE:
480
+ return field_def.double_properties.default_value
481
+ case FieldTypePbo.ENUM:
482
+ return field_def.enum_properties.default_value
483
+ # case FieldTypePbo.FILE_BLOB:
484
+ # return None
485
+ case FieldTypePbo.IDENTIFIER:
486
+ return None
487
+ case FieldTypePbo.INTEGER:
488
+ return field_def.integer_properties.default_value
489
+ case FieldTypePbo.LINK:
490
+ return None
491
+ case FieldTypePbo.LONG:
492
+ return field_def.long_properties.default_value
493
+ case FieldTypePbo.MULTIPARENTLINK:
494
+ return None
495
+ case FieldTypePbo.PARENTLINK:
496
+ return None
497
+ case FieldTypePbo.PICKLIST:
498
+ return field_def.picklist_properties.default_value
499
+ case FieldTypePbo.SELECTION:
500
+ return field_def.selection_properties.default_value
501
+ case FieldTypePbo.SHORT:
502
+ return field_def.short_properties.default_value
503
+ case FieldTypePbo.SIDE_LINK:
504
+ return field_def.side_link_properties.default_value
505
+ case FieldTypePbo.STRING:
506
+ return field_def.string_properties.default_value
507
+ case _:
508
+ raise Exception(f"Unexpected field type: {field_def.data_field_type}")
@@ -18,6 +18,8 @@ class ToolOutput:
18
18
  A class for holding the output of a TestClient that calls a ToolService. ToolOutput objects an be
19
19
  printed to show the output of the tool in a human-readable format.
20
20
  """
21
+ tool_name: str
22
+
21
23
  binary_output: list[bytes]
22
24
  csv_output: list[dict[str, Any]]
23
25
  json_output: list[Any]
@@ -28,7 +30,8 @@ class ToolOutput:
28
30
 
29
31
  logs: list[str]
30
32
 
31
- def __init__(self):
33
+ def __init__(self, tool_name: str):
34
+ self.tool_name = tool_name
32
35
  self.binary_output = []
33
36
  self.csv_output = []
34
37
  self.json_output = []
@@ -38,7 +41,8 @@ class ToolOutput:
38
41
  self.logs = []
39
42
 
40
43
  def __str__(self):
41
- ret_val: str = ""
44
+ ret_val: str = f"{self.tool_name} Output:\n"
45
+ ret_val += "-" * 25 + "\n"
42
46
  ret_val += f"Binary Output: {len(self.binary_output)} item(s)\n"
43
47
  for binary in self.binary_output:
44
48
  ret_val += f"\t{len(binary)} byte(s)\n"
@@ -190,7 +194,7 @@ class TestClient:
190
194
  )
191
195
  )
192
196
 
193
- results = ToolOutput()
197
+ results = ToolOutput(tool_name)
194
198
  for item in response.output:
195
199
  container = item.item_container
196
200
 
@@ -773,8 +773,7 @@ class ToolBase(ABC):
773
773
  for field_name, field_def in self.get_config_defs().items():
774
774
  # Use the default value if the field is not present in the request.
775
775
  if field_name not in raw_configs:
776
- if hasattr(field_def, "default_value"):
777
- config_fields[field_name] = field_def.default_value
776
+ config_fields[field_name] = ProtobufUtils.field_def_pbo_to_default_value(field_def)
778
777
  else:
779
778
  config_fields[field_name] = ProtobufUtils.field_pbo_to_value(field_def, raw_configs[field_name])
780
779
  return config_fields