sapiopycommons 2025.7.23a659__tar.gz → 2025.7.30a660__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 (115) hide show
  1. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/PKG-INFO +1 -1
  2. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/pyproject.toml +1 -1
  3. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/ai/protobuf_utils.py +0 -2
  4. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/ai/test_client.py +1 -2
  5. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/ai/tool_service_base.py +17 -9
  6. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/.gitignore +0 -0
  7. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/LICENSE +0 -0
  8. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/README.md +0 -0
  9. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/__init__.py +0 -0
  10. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/ai/__init__.py +0 -0
  11. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/ai/api/fielddefinitions/proto/fields_pb2.py +0 -0
  12. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/ai/api/fielddefinitions/proto/fields_pb2.pyi +0 -0
  13. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/ai/api/fielddefinitions/proto/fields_pb2_grpc.py +0 -0
  14. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/ai/api/fielddefinitions/proto/velox_field_def_pb2.py +0 -0
  15. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/ai/api/fielddefinitions/proto/velox_field_def_pb2.pyi +0 -0
  16. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/ai/api/fielddefinitions/proto/velox_field_def_pb2_grpc.py +0 -0
  17. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/ai/api/plan/proto/step_output_pb2.py +0 -0
  18. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/ai/api/plan/proto/step_output_pb2.pyi +0 -0
  19. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/ai/api/plan/proto/step_output_pb2_grpc.py +0 -0
  20. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/ai/api/plan/proto/step_pb2.py +0 -0
  21. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/ai/api/plan/proto/step_pb2.pyi +0 -0
  22. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/ai/api/plan/proto/step_pb2_grpc.py +0 -0
  23. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/ai/api/plan/script/proto/script_pb2.py +0 -0
  24. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/ai/api/plan/script/proto/script_pb2.pyi +0 -0
  25. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/ai/api/plan/script/proto/script_pb2_grpc.py +0 -0
  26. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/ai/api/plan/tool/proto/entry_pb2.py +0 -0
  27. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/ai/api/plan/tool/proto/entry_pb2.pyi +0 -0
  28. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/ai/api/plan/tool/proto/entry_pb2_grpc.py +0 -0
  29. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/ai/api/plan/tool/proto/tool_pb2.py +0 -0
  30. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/ai/api/plan/tool/proto/tool_pb2.pyi +0 -0
  31. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/ai/api/plan/tool/proto/tool_pb2_grpc.py +0 -0
  32. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/ai/api/session/proto/sapio_conn_info_pb2.py +0 -0
  33. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/ai/api/session/proto/sapio_conn_info_pb2.pyi +0 -0
  34. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/ai/api/session/proto/sapio_conn_info_pb2_grpc.py +0 -0
  35. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/callbacks/__init__.py +0 -0
  36. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/callbacks/callback_util.py +0 -0
  37. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/callbacks/field_builder.py +0 -0
  38. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/chem/IndigoMolecules.py +0 -0
  39. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/chem/Molecules.py +0 -0
  40. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/chem/__init__.py +0 -0
  41. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/customreport/__init__.py +0 -0
  42. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/customreport/auto_pagers.py +0 -0
  43. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/customreport/column_builder.py +0 -0
  44. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/customreport/custom_report_builder.py +0 -0
  45. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/customreport/term_builder.py +0 -0
  46. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/datatype/__init__.py +0 -0
  47. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/datatype/attachment_util.py +0 -0
  48. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/datatype/data_fields.py +0 -0
  49. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/datatype/pseudo_data_types.py +0 -0
  50. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/eln/__init__.py +0 -0
  51. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/eln/experiment_cache.py +0 -0
  52. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/eln/experiment_handler.py +0 -0
  53. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/eln/experiment_report_util.py +0 -0
  54. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/eln/experiment_step_factory.py +0 -0
  55. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/eln/experiment_tags.py +0 -0
  56. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/eln/plate_designer.py +0 -0
  57. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/eln/step_creation.py +0 -0
  58. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/files/__init__.py +0 -0
  59. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/files/complex_data_loader.py +0 -0
  60. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/files/file_bridge.py +0 -0
  61. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/files/file_bridge_handler.py +0 -0
  62. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/files/file_data_handler.py +0 -0
  63. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/files/file_util.py +0 -0
  64. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/files/file_validator.py +0 -0
  65. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/files/file_writer.py +0 -0
  66. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/flowcyto/flow_cyto.py +0 -0
  67. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/flowcyto/flowcyto_data.py +0 -0
  68. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/general/__init__.py +0 -0
  69. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/general/accession_service.py +0 -0
  70. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/general/aliases.py +0 -0
  71. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/general/audit_log.py +0 -0
  72. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/general/custom_report_util.py +0 -0
  73. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/general/data_structure_util.py +0 -0
  74. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/general/directive_util.py +0 -0
  75. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/general/exceptions.py +0 -0
  76. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/general/html_formatter.py +0 -0
  77. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/general/popup_util.py +0 -0
  78. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/general/sapio_links.py +0 -0
  79. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/general/storage_util.py +0 -0
  80. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/general/time_util.py +0 -0
  81. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/multimodal/multimodal.py +0 -0
  82. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/multimodal/multimodal_data.py +0 -0
  83. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/processtracking/__init__.py +0 -0
  84. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/processtracking/custom_workflow_handler.py +0 -0
  85. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/processtracking/endpoints.py +0 -0
  86. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/recordmodel/__init__.py +0 -0
  87. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/recordmodel/record_handler.py +0 -0
  88. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/rules/__init__.py +0 -0
  89. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/rules/eln_rule_handler.py +0 -0
  90. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/rules/on_save_rule_handler.py +0 -0
  91. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/samples/aliquot.py +0 -0
  92. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/sftpconnect/__init__.py +0 -0
  93. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/sftpconnect/sftp_builder.py +0 -0
  94. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/webhook/__init__.py +0 -0
  95. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/webhook/webhook_context.py +0 -0
  96. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/webhook/webhook_handlers.py +0 -0
  97. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/src/sapiopycommons/webhook/webservice_handlers.py +0 -0
  98. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/tests/AF-A0A009IHW8-F1-model_v4.cif +0 -0
  99. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/tests/_do_not_add_init_py_here +0 -0
  100. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/tests/accession_test.py +0 -0
  101. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/tests/aliquot_test.py +0 -0
  102. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/tests/bio_reg_test.py +0 -0
  103. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/tests/chem_test.py +0 -0
  104. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/tests/chem_test_curation_queue.py +0 -0
  105. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/tests/curation_queue_test.sdf +0 -0
  106. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/tests/data_type_models.py +0 -0
  107. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/tests/flowcyto/101_DEN084Y5_15_E01_008_clean.fcs +0 -0
  108. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/tests/flowcyto/101_DEN084Y5_15_E03_009_clean.fcs +0 -0
  109. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/tests/flowcyto/101_DEN084Y5_15_E05_010_clean.fcs +0 -0
  110. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/tests/flowcyto/8_color_ICS.wsp +0 -0
  111. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/tests/flowcyto/COVID19_W_001_O.fcs +0 -0
  112. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/tests/flowcyto_test.py +0 -0
  113. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/tests/kappa.chains.fasta +0 -0
  114. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/tests/mafft_test.py +0 -0
  115. {sapiopycommons-2025.7.23a659 → sapiopycommons-2025.7.30a660}/tests/test.gb +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: sapiopycommons
3
- Version: 2025.7.23a659
3
+ Version: 2025.7.30a660
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.07.23a659'
7
+ version='2025.07.30a660'
8
8
  authors = [
9
9
  { name="Jonathan Steck", email="jsteck@sapiosciences.com" },
10
10
  { name="Yechen Qiao", email="yqiao@sapiosciences.com" },
@@ -1,5 +1,3 @@
1
- from typing import Any
2
-
3
1
  from sapiopylib.rest.pojo.Sort import SortDirection
4
2
  from sapiopylib.rest.pojo.datatype.FieldDefinition import AbstractVeloxFieldDefinition, FieldType, \
5
3
  VeloxBooleanFieldDefinition, VeloxDateFieldDefinition, VeloxAccessionFieldDefinition, VeloxActionFieldDefinition, \
@@ -1,11 +1,10 @@
1
1
  import base64
2
2
  import json
3
- from typing import Mapping, Any
3
+ from typing import Any
4
4
 
5
5
  import grpc
6
6
  from sapiopylib.rest.User import SapioUser
7
7
 
8
- from sapiopycommons.ai.api.fielddefinitions.proto.fields_pb2 import FieldValuePbo
9
8
  from sapiopycommons.ai.api.plan.tool.proto.entry_pb2 import DataTypePbo, StepBinaryContainerPbo, StepCsvRowPbo, \
10
9
  StepCsvHeaderRowPbo, StepCsvContainerPbo, StepJsonContainerPbo, StepImageContainerPbo, StepTextContainerPbo, \
11
10
  StepItemContainerPbo, StepInputBatchPbo
@@ -289,14 +289,18 @@ class ToolServiceBase(ToolServiceServicer, ABC):
289
289
  generated by the tool.
290
290
  """
291
291
  # Locate the tool named in the request.
292
- tool: ToolBase | None = None
293
- for t in self.register_tools():
294
- if t.name() == request.tool_name:
295
- tool = t()
296
- break
297
- if not tool:
298
- return False, f"Tool \"{request.tool_name}\" not found in the registered tools for this service.", [], []
299
-
292
+ find_tool: str = request.tool_name
293
+ registered_tools: dict[str, type[ToolBase]] = {t.name(): t for t in self.register_tools()}
294
+ if find_tool not in registered_tools:
295
+ # If the tool is not found, list all of the registered tools for this service so that the LLM can correct
296
+ # the tool it is requesting.
297
+ all_tool_names: str = "\n".join(registered_tools.keys())
298
+ msg: str = (f"Tool \"{find_tool}\" not found in the registered tools for this service. The registered tools "
299
+ f"for this service are: \n{all_tool_names}")
300
+ return False, msg, [], []
301
+
302
+ # Instantiate the tool class.
303
+ tool: ToolBase = registered_tools[find_tool]()
300
304
  try:
301
305
  # Setup the tool with details from the request.
302
306
  tool.setup(user, request, context)
@@ -893,7 +897,11 @@ class ToolBase(ABC):
893
897
  if field_name not in raw_configs:
894
898
  config_fields[field_name] = ProtobufUtils.field_def_pbo_to_default_value(field_def)
895
899
  else:
896
- config_fields[field_name] = ProtobufUtils.field_pbo_to_value(raw_configs[field_name])
900
+ field_value: Any = ProtobufUtils.field_pbo_to_value(raw_configs[field_name])
901
+ if field_value is not None:
902
+ config_fields[field_name] = field_value
903
+ else:
904
+ config_fields[field_name] = ProtobufUtils.field_def_pbo_to_default_value(field_def)
897
905
  return config_fields
898
906
 
899
907
  @staticmethod