sapiopycommons 2025.10.9a777__tar.gz → 2025.10.10a779__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 (130) hide show
  1. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/PKG-INFO +1 -1
  2. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/pyproject.toml +1 -1
  3. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/ai/agent_service_base.py +1 -1
  4. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/ai/test_client.py +43 -0
  5. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/.gitignore +0 -0
  6. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/LICENSE +0 -0
  7. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/README.md +0 -0
  8. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/__init__.py +0 -0
  9. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/ai/__init__.py +0 -0
  10. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/ai/converter_service_base.py +0 -0
  11. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/ai/external_credentials.py +0 -0
  12. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/ai/protoapi/externalcredentials/external_credentials_pb2.py +0 -0
  13. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/ai/protoapi/externalcredentials/external_credentials_pb2.pyi +0 -0
  14. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/ai/protoapi/externalcredentials/external_credentials_pb2_grpc.py +0 -0
  15. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/ai/protoapi/fielddefinitions/fields_pb2.py +0 -0
  16. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/ai/protoapi/fielddefinitions/fields_pb2.pyi +0 -0
  17. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/ai/protoapi/fielddefinitions/fields_pb2_grpc.py +0 -0
  18. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/ai/protoapi/fielddefinitions/velox_field_def_pb2.py +0 -0
  19. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/ai/protoapi/fielddefinitions/velox_field_def_pb2.pyi +0 -0
  20. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/ai/protoapi/fielddefinitions/velox_field_def_pb2_grpc.py +0 -0
  21. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/ai/protoapi/plan/converter/converter_pb2.py +0 -0
  22. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/ai/protoapi/plan/converter/converter_pb2.pyi +0 -0
  23. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/ai/protoapi/plan/converter/converter_pb2_grpc.py +0 -0
  24. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/ai/protoapi/plan/item/item_container_pb2.py +0 -0
  25. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/ai/protoapi/plan/item/item_container_pb2.pyi +0 -0
  26. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/ai/protoapi/plan/item/item_container_pb2_grpc.py +0 -0
  27. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/ai/protoapi/plan/script/script_pb2.py +0 -0
  28. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/ai/protoapi/plan/script/script_pb2.pyi +0 -0
  29. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/ai/protoapi/plan/script/script_pb2_grpc.py +0 -0
  30. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/ai/protoapi/plan/step_output_pb2.py +0 -0
  31. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/ai/protoapi/plan/step_output_pb2.pyi +0 -0
  32. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/ai/protoapi/plan/step_output_pb2_grpc.py +0 -0
  33. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/ai/protoapi/plan/step_pb2.py +0 -0
  34. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/ai/protoapi/plan/step_pb2.pyi +0 -0
  35. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/ai/protoapi/plan/step_pb2_grpc.py +0 -0
  36. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/ai/protoapi/plan/tool/entry_pb2.py +0 -0
  37. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/ai/protoapi/plan/tool/entry_pb2.pyi +0 -0
  38. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/ai/protoapi/plan/tool/entry_pb2_grpc.py +0 -0
  39. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/ai/protoapi/plan/tool/tool_pb2.py +0 -0
  40. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/ai/protoapi/plan/tool/tool_pb2.pyi +0 -0
  41. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/ai/protoapi/plan/tool/tool_pb2_grpc.py +0 -0
  42. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/ai/protoapi/session/sapio_conn_info_pb2.py +0 -0
  43. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/ai/protoapi/session/sapio_conn_info_pb2.pyi +0 -0
  44. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/ai/protoapi/session/sapio_conn_info_pb2_grpc.py +0 -0
  45. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/ai/protobuf_utils.py +0 -0
  46. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/ai/request_validation.py +0 -0
  47. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/ai/server.py +0 -0
  48. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/callbacks/__init__.py +0 -0
  49. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/callbacks/callback_util.py +0 -0
  50. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/callbacks/field_builder.py +0 -0
  51. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/chem/IndigoMolecules.py +0 -0
  52. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/chem/Molecules.py +0 -0
  53. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/chem/__init__.py +0 -0
  54. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/customreport/__init__.py +0 -0
  55. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/customreport/auto_pagers.py +0 -0
  56. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/customreport/column_builder.py +0 -0
  57. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/customreport/custom_report_builder.py +0 -0
  58. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/customreport/term_builder.py +0 -0
  59. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/datatype/__init__.py +0 -0
  60. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/datatype/attachment_util.py +0 -0
  61. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/datatype/data_fields.py +0 -0
  62. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/datatype/pseudo_data_types.py +0 -0
  63. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/eln/__init__.py +0 -0
  64. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/eln/experiment_cache.py +0 -0
  65. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/eln/experiment_handler.py +0 -0
  66. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/eln/experiment_report_util.py +0 -0
  67. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/eln/experiment_step_factory.py +0 -0
  68. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/eln/experiment_tags.py +0 -0
  69. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/eln/plate_designer.py +0 -0
  70. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/eln/step_creation.py +0 -0
  71. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/files/__init__.py +0 -0
  72. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/files/assay_plate_reader.py +0 -0
  73. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/files/complex_data_loader.py +0 -0
  74. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/files/file_bridge.py +0 -0
  75. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/files/file_bridge_handler.py +0 -0
  76. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/files/file_data_handler.py +0 -0
  77. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/files/file_text_converter.py +0 -0
  78. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/files/file_util.py +0 -0
  79. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/files/file_validator.py +0 -0
  80. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/files/file_writer.py +0 -0
  81. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/files/temp_files.py +0 -0
  82. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/flowcyto/flow_cyto.py +0 -0
  83. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/flowcyto/flowcyto_data.py +0 -0
  84. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/general/__init__.py +0 -0
  85. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/general/accession_service.py +0 -0
  86. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/general/aliases.py +0 -0
  87. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/general/audit_log.py +0 -0
  88. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/general/custom_report_util.py +0 -0
  89. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/general/data_structure_util.py +0 -0
  90. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/general/directive_util.py +0 -0
  91. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/general/exceptions.py +0 -0
  92. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/general/html_formatter.py +0 -0
  93. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/general/popup_util.py +0 -0
  94. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/general/sapio_links.py +0 -0
  95. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/general/storage_util.py +0 -0
  96. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/general/time_util.py +0 -0
  97. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/multimodal/multimodal.py +0 -0
  98. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/multimodal/multimodal_data.py +0 -0
  99. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/processtracking/__init__.py +0 -0
  100. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/processtracking/custom_workflow_handler.py +0 -0
  101. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/processtracking/endpoints.py +0 -0
  102. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/recordmodel/__init__.py +0 -0
  103. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/recordmodel/record_handler.py +0 -0
  104. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/rules/__init__.py +0 -0
  105. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/rules/eln_rule_handler.py +0 -0
  106. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/rules/on_save_rule_handler.py +0 -0
  107. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/samples/aliquot.py +0 -0
  108. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/sftpconnect/__init__.py +0 -0
  109. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/sftpconnect/sftp_builder.py +0 -0
  110. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/webhook/__init__.py +0 -0
  111. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/webhook/webhook_context.py +0 -0
  112. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/webhook/webhook_handlers.py +0 -0
  113. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/src/sapiopycommons/webhook/webservice_handlers.py +0 -0
  114. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/tests/AF-A0A009IHW8-F1-model_v4.cif +0 -0
  115. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/tests/_do_not_add_init_py_here +0 -0
  116. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/tests/accession_test.py +0 -0
  117. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/tests/aliquot_test.py +0 -0
  118. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/tests/assay_plate_reader/BMGLabtech96.txt +0 -0
  119. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/tests/assay_plate_reader/assay_plate_processing_test.py +0 -0
  120. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/tests/bio_reg_test.py +0 -0
  121. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/tests/chem_test.py +0 -0
  122. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/tests/chem_test_curation_queue.py +0 -0
  123. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/tests/curation_queue_test.sdf +0 -0
  124. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/tests/data_type_models.py +0 -0
  125. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/tests/file_compression_tests.py +0 -0
  126. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/tests/flowcyto/8_color_ICS.wsp +0 -0
  127. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/tests/flowcyto_test.py +0 -0
  128. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/tests/kappa.chains.fasta +0 -0
  129. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/tests/mafft_test.py +0 -0
  130. {sapiopycommons-2025.10.9a777 → sapiopycommons-2025.10.10a779}/tests/test.gb +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: sapiopycommons
3
- Version: 2025.10.9a777
3
+ Version: 2025.10.10a779
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.10.09a777'
7
+ version='2025.10.10a779'
8
8
  authors = [
9
9
  { name="Jonathan Steck", email="jsteck@sapiosciences.com" },
10
10
  { name="Yechen Qiao", email="yqiao@sapiosciences.com" },
@@ -280,7 +280,7 @@ class AgentServiceBase(ToolServiceServicer, ABC):
280
280
  :param info: The SapioConnectionInfo proto object.
281
281
  :param timeout_seconds: The request timeout for calls made from this user object.
282
282
  """
283
- user = SapioUser(info.webservice_url, True, timeout_seconds, guid=info.app_guid)
283
+ user = SapioUser(info.webservice_url.rstrip("/"), True, timeout_seconds, guid=info.app_guid)
284
284
  match info.secret_type:
285
285
  case SapioUserSecretTypePbo.SESSION_TOKEN:
286
286
  user.api_token = info.secret
@@ -43,6 +43,8 @@ class AgentOutput:
43
43
  status: str
44
44
  message: str
45
45
 
46
+ # Outputs are lists of lists, where the outer lists are the different outputs of the tool, and the inner lists
47
+ # are the entries for that output.
46
48
  binary_output: list[list[bytes]]
47
49
  csv_output: list[list[dict[str, Any]]]
48
50
  json_output: list[list[dict[str, Any]]]
@@ -61,10 +63,51 @@ class AgentOutput:
61
63
  self.new_records = []
62
64
  self.logs = []
63
65
 
66
+ def save_outputs(self, path: str = "test_outputs", file_extensions: list[str] | None = None) -> None:
67
+ """
68
+ Save all outputs to files in the specified directory. The files will be named according to the agent name
69
+ and the output type.
70
+
71
+ :param path: The directory to save the output files to.
72
+ :param file_extensions: A list of file extensions to use for binary output files. The length of this list
73
+ should match the number of binary outputs.
74
+ """
75
+ if not self:
76
+ return
77
+ import os
78
+ os.makedirs(path, exist_ok=True)
79
+ if self.binary_output and (not file_extensions or len(file_extensions) != len(self.binary_output)):
80
+ raise ValueError("File extensions must be provided for each binary output.")
81
+ for i, output in enumerate(self.binary_output):
82
+ ext: str = "." + file_extensions[i].lstrip(".")
83
+ for j, entry in enumerate(output):
84
+ with open(os.path.join(path, self.agent_name, f"binary_output_{i}_{j}{ext}"), "wb") as f:
85
+ f.write(entry)
86
+ for i, output in enumerate(self.csv_output):
87
+ with open(os.path.join(path, self.agent_name, f"csv_output_{i}.csv"), "w", encoding="utf-8") as f:
88
+ headers = output[0].keys()
89
+ f.write(",".join(headers) + "\n")
90
+ for row in output:
91
+ f.write(",".join(f'"{str(row[h])}"' for h in headers) + "\n")
92
+ for i, output in enumerate(self.json_output):
93
+ for j, entry in enumerate(output):
94
+ with open(os.path.join(path, self.agent_name, f"json_output_{i}_{j}.json"), "w", encoding="utf-8") as f:
95
+ json.dump(entry, f, indent=2)
96
+ for i, output in enumerate(self.text_output):
97
+ for j, entry in enumerate(output):
98
+ with open(os.path.join(path, self.agent_name, f"text_output_{i}_{j}.txt"), "w", encoding="utf-8") as f:
99
+ f.write(entry)
100
+
64
101
  def __bool__(self):
102
+ """
103
+ Return True if the agent call was successful, False otherwise.
104
+ """
65
105
  return self.status == "Success"
66
106
 
67
107
  def __str__(self):
108
+ """
109
+ Return a string representing a summary of the agent output.
110
+ """
68
111
  ret_val: str = f"{self.agent_name} Output:\n"
69
112
  ret_val += f"\tStatus: {self.status}\n"
70
113
  ret_val += f"\tMessage: {self.message}\n"