unique_toolkit 1.77.2__tar.gz → 1.77.3__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.
Files changed (315) hide show
  1. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/PKG-INFO +1 -1
  2. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/pyproject.toml +1 -1
  3. unique_toolkit-1.77.3/unique_toolkit/experimental/__init__.py +23 -0
  4. unique_toolkit-1.77.3/unique_toolkit/experimental/scheduled_task/__init__.py +71 -0
  5. unique_toolkit-1.77.3/unique_toolkit/experimental/scheduled_task/cron.py +90 -0
  6. unique_toolkit-1.77.3/unique_toolkit/experimental/scheduled_task/functions.py +311 -0
  7. unique_toolkit-1.77.3/unique_toolkit/experimental/scheduled_task/schemas.py +152 -0
  8. unique_toolkit-1.77.3/unique_toolkit/experimental/scheduled_task/service.py +285 -0
  9. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/README.md +0 -0
  10. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/__init__.py +0 -0
  11. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/__init__.py +0 -0
  12. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/_base_service.py +0 -0
  13. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/_time_utils.py +0 -0
  14. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/api_calling/human_verification_manager.py +0 -0
  15. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/base_model_type_attribute.py +0 -0
  16. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/chunk_relevancy_sorter/config.py +0 -0
  17. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/chunk_relevancy_sorter/exception.py +0 -0
  18. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/chunk_relevancy_sorter/schemas.py +0 -0
  19. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/chunk_relevancy_sorter/service.py +0 -0
  20. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/chunk_relevancy_sorter/tests/test_service.py +0 -0
  21. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/config_checker/README.md +0 -0
  22. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/config_checker/__init__.py +0 -0
  23. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/config_checker/__main__.py +0 -0
  24. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/config_checker/cli.py +0 -0
  25. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/config_checker/differ.py +0 -0
  26. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/config_checker/exporter.py +0 -0
  27. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/config_checker/models.py +0 -0
  28. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/config_checker/registry.py +0 -0
  29. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/config_checker/validator.py +0 -0
  30. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/default_language_model.py +0 -0
  31. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/docx_generator/__init__.py +0 -0
  32. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/docx_generator/config.py +0 -0
  33. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/docx_generator/pandoc_converter.py +0 -0
  34. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/docx_generator/schemas.py +0 -0
  35. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/docx_generator/service.py +0 -0
  36. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/docx_generator/template/Doc Template.docx +0 -0
  37. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/endpoint_builder.py +0 -0
  38. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/endpoint_requestor.py +0 -0
  39. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/event_bus.py +0 -0
  40. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/exception.py +0 -0
  41. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/execution.py +0 -0
  42. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/experimental/endpoint_builder.py +0 -0
  43. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/experimental/endpoint_requestor.py +0 -0
  44. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/experimental/write_up_agent/README.md +0 -0
  45. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/experimental/write_up_agent/__init__.py +0 -0
  46. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/experimental/write_up_agent/agent.py +0 -0
  47. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/experimental/write_up_agent/config.py +0 -0
  48. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/experimental/write_up_agent/examples/data.csv +0 -0
  49. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/experimental/write_up_agent/examples/example_usage.py +0 -0
  50. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/experimental/write_up_agent/schemas.py +0 -0
  51. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/experimental/write_up_agent/services/__init__.py +0 -0
  52. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/__init__.py +0 -0
  53. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/exceptions.py +0 -0
  54. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/service.py +0 -0
  55. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/utils.py +0 -0
  56. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/__init__.py +0 -0
  57. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/config.py +0 -0
  58. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/exceptions.py +0 -0
  59. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/config.py +0 -0
  60. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/system_prompt.j2 +0 -0
  61. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/user_prompt.j2 +0 -0
  62. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/service.py +0 -0
  63. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/__init__.py +0 -0
  64. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/default_template.j2 +0 -0
  65. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/exceptions.py +0 -0
  66. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/service.py +0 -0
  67. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/utils.py +0 -0
  68. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/experimental/write_up_agent/utils.py +0 -0
  69. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/feature_flags/schema.py +0 -0
  70. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/pydantic/rjsf_tags.py +0 -0
  71. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/pydantic_helpers.py +0 -0
  72. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/referencing.py +0 -0
  73. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/string_utilities.py +0 -0
  74. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/tests/test_referencing.py +0 -0
  75. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/tests/test_string_utilities.py +0 -0
  76. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/token/__init__.py +0 -0
  77. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/token/image_token_counting.py +0 -0
  78. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/token/token_counting.py +0 -0
  79. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/token/tokenizers/deepseek/tokenizer.json +0 -0
  80. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/token/tokenizers/qwen/tokenizer.json +0 -0
  81. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/utils/__init__.py +0 -0
  82. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/utils/files.py +0 -0
  83. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/utils/image/encode.py +0 -0
  84. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/utils/jinja/helpers.py +0 -0
  85. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/utils/jinja/render.py +0 -0
  86. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/utils/jinja/schema.py +0 -0
  87. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/utils/jinja/utils.py +0 -0
  88. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/utils/structured_output/__init__.py +0 -0
  89. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/utils/structured_output/schema.py +0 -0
  90. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/utils/write_configuration.py +0 -0
  91. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/validate_required_values.py +0 -0
  92. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/_common/validators.py +0 -0
  93. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/__init__.py +0 -0
  94. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/debug_info_manager/debug_info_manager.py +0 -0
  95. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/debug_info_manager/test/test_debug_info_manager.py +0 -0
  96. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/evaluation/config.py +0 -0
  97. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/__init__.py +0 -0
  98. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/system_prompt.j2 +0 -0
  99. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/user_prompt.j2 +0 -0
  100. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/evaluation/context_relevancy/schema.py +0 -0
  101. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/evaluation/context_relevancy/service.py +0 -0
  102. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/evaluation/evaluation_manager.py +0 -0
  103. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/evaluation/exception.py +0 -0
  104. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/evaluation/hallucination/constants.py +0 -0
  105. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/evaluation/hallucination/hallucination_evaluation.py +0 -0
  106. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/evaluation/hallucination/prompts/__init__.py +0 -0
  107. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/evaluation/hallucination/prompts/system_prompt.j2 +0 -0
  108. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/evaluation/hallucination/prompts/user_prompt.j2 +0 -0
  109. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/evaluation/hallucination/service.py +0 -0
  110. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/evaluation/hallucination/utils.py +0 -0
  111. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/evaluation/output_parser.py +0 -0
  112. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/evaluation/schemas.py +0 -0
  113. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/evaluation/tests/fixtures.py +0 -0
  114. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/evaluation/tests/test_config.py +0 -0
  115. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/evaluation/tests/test_context_relevancy_service.py +0 -0
  116. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/evaluation/tests/test_hallucination_constants.py +0 -0
  117. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/evaluation/tests/test_hallucination_utils.py +0 -0
  118. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/evaluation/tests/test_output_parser.py +0 -0
  119. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/evaluation/tests/test_prompt_loaders.py +0 -0
  120. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/evaluation/utils.py +0 -0
  121. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/feature_flags/__init__.py +0 -0
  122. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/feature_flags/feature_flags.py +0 -0
  123. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/history_manager/history_construction_with_contents.py +0 -0
  124. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/history_manager/history_manager.py +0 -0
  125. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/history_manager/loop_token_reducer.py +0 -0
  126. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/history_manager/utils.py +0 -0
  127. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/loop_runner/__init__.py +0 -0
  128. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/loop_runner/_iteration_handler_utils.py +0 -0
  129. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/loop_runner/_responses_iteration_handler_utils.py +0 -0
  130. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/loop_runner/_responses_stream_handler_utils.py +0 -0
  131. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/loop_runner/_stream_handler_utils.py +0 -0
  132. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/loop_runner/base.py +0 -0
  133. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/loop_runner/middleware/__init__.py +0 -0
  134. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/loop_runner/middleware/planning/__init__.py +0 -0
  135. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/loop_runner/middleware/planning/planning.py +0 -0
  136. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/loop_runner/middleware/planning/schema.py +0 -0
  137. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/loop_runner/runners/__init__.py +0 -0
  138. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/loop_runner/runners/basic.py +0 -0
  139. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/loop_runner/runners/mistral/__init__.py +0 -0
  140. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/loop_runner/runners/mistral/mistral_runner.py +0 -0
  141. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/loop_runner/runners/qwen/__init__.py +0 -0
  142. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/loop_runner/runners/qwen/helpers.py +0 -0
  143. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/loop_runner/runners/qwen/qwen_runner.py +0 -0
  144. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/message_log_manager/__init__.py +0 -0
  145. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/message_log_manager/service.py +0 -0
  146. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/postprocessor/postprocessor_manager.py +0 -0
  147. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/reference_manager/reference_manager.py +0 -0
  148. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/responses_api/__init__.py +0 -0
  149. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/responses_api/postprocessors/code_display.py +0 -0
  150. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/responses_api/postprocessors/generated_files.py +0 -0
  151. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/responses_api/stream_handler.py +0 -0
  152. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/short_term_memory_manager/persistent_short_term_memory_manager.py +0 -0
  153. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/thinking_manager/thinking_manager.py +0 -0
  154. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/tools/__init__.py +0 -0
  155. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/tools/a2a/__init__.py +0 -0
  156. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/tools/a2a/config.py +0 -0
  157. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/tools/a2a/evaluation/__init__.py +0 -0
  158. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/tools/a2a/evaluation/_utils.py +0 -0
  159. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/tools/a2a/evaluation/config.py +0 -0
  160. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/tools/a2a/evaluation/evaluator.py +0 -0
  161. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/tools/a2a/evaluation/summarization_user_message.j2 +0 -0
  162. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/tools/a2a/manager.py +0 -0
  163. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/tools/a2a/postprocessing/__init__.py +0 -0
  164. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/tools/a2a/postprocessing/_display_utils.py +0 -0
  165. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/tools/a2a/postprocessing/_ref_utils.py +0 -0
  166. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/tools/a2a/postprocessing/config.py +0 -0
  167. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/tools/a2a/postprocessing/display.py +0 -0
  168. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/tools/a2a/postprocessing/references.py +0 -0
  169. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display.py +0 -0
  170. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display_utils.py +0 -0
  171. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_ref_utils.py +0 -0
  172. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/tools/a2a/prompts.py +0 -0
  173. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/tools/a2a/response_watcher/__init__.py +0 -0
  174. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/tools/a2a/response_watcher/service.py +0 -0
  175. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/tools/a2a/tool/__init__.py +0 -0
  176. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/tools/a2a/tool/_memory.py +0 -0
  177. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/tools/a2a/tool/_schema.py +0 -0
  178. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/tools/a2a/tool/config.py +0 -0
  179. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/tools/a2a/tool/service.py +0 -0
  180. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/tools/a2a/tool/test/test_service_utils.py +0 -0
  181. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/tools/agent_chunks_hanlder.py +0 -0
  182. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/tools/config.py +0 -0
  183. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/tools/experimental/__init__.py +0 -0
  184. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/tools/experimental/open_file_tool/__init__.py +0 -0
  185. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/tools/experimental/open_file_tool/config.py +0 -0
  186. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/tools/experimental/open_file_tool/runtime.py +0 -0
  187. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/tools/experimental/open_file_tool/tool.py +0 -0
  188. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/tools/experimental/todo/__init__.py +0 -0
  189. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/tools/experimental/todo/config.py +0 -0
  190. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/tools/experimental/todo/prompts/__init__.py +0 -0
  191. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/tools/experimental/todo/prompts/execution_reminder.j2 +0 -0
  192. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/tools/experimental/todo/prompts/system_prompt.j2 +0 -0
  193. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/tools/experimental/todo/prompts/tool_description.j2 +0 -0
  194. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/tools/experimental/todo/prompts/verification_nudge.j2 +0 -0
  195. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/tools/experimental/todo/schemas.py +0 -0
  196. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/tools/experimental/todo/service.py +0 -0
  197. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/tools/factory.py +0 -0
  198. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/tools/mcp/__init__.py +0 -0
  199. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/tools/mcp/manager.py +0 -0
  200. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/tools/mcp/models.py +0 -0
  201. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/tools/mcp/tool_wrapper.py +0 -0
  202. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/tools/openai_builtin/__init__.py +0 -0
  203. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/tools/openai_builtin/base.py +0 -0
  204. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/__init__.py +0 -0
  205. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/config.py +0 -0
  206. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/__init__.py +0 -0
  207. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/code_display.py +0 -0
  208. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/generated_files.py +0 -0
  209. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/schemas.py +0 -0
  210. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/service.py +0 -0
  211. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/tools/openai_builtin/manager.py +0 -0
  212. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/tools/schemas.py +0 -0
  213. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/tools/test/test_mcp_manager.py +0 -0
  214. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/tools/test/test_tool_progress_reporter.py +0 -0
  215. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/tools/tool.py +0 -0
  216. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/tools/tool_manager.py +0 -0
  217. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/tools/tool_progress_reporter.py +0 -0
  218. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/tools/utils/__init__.py +0 -0
  219. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/tools/utils/source_handling/__init__.py +0 -0
  220. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/tools/utils/source_handling/schema.py +0 -0
  221. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/tools/utils/source_handling/source_formatting.py +0 -0
  222. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic/tools/utils/source_handling/tests/test_source_formatting.py +0 -0
  223. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic_table/__init__.py +0 -0
  224. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic_table/schemas.py +0 -0
  225. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/agentic_table/service.py +0 -0
  226. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/app/__init__.py +0 -0
  227. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/app/chat_event_filter_options_settings.py +0 -0
  228. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/app/dev_util.py +0 -0
  229. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/app/fast_api_factory.py +0 -0
  230. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/app/feature_flags.py +0 -0
  231. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/app/find_env_file.py +0 -0
  232. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/app/init_logging.py +0 -0
  233. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/app/init_sdk.py +0 -0
  234. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/app/performance/async_tasks.py +0 -0
  235. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/app/performance/async_wrapper.py +0 -0
  236. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/app/schemas.py +0 -0
  237. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/app/unique_settings.py +0 -0
  238. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/app/verification.py +0 -0
  239. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/app/webhook.py +0 -0
  240. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/chat/__init__.py +0 -0
  241. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/chat/cancellation.py +0 -0
  242. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/chat/constants.py +0 -0
  243. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/chat/deprecated/service.py +0 -0
  244. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/chat/functions.py +0 -0
  245. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/chat/rendering.py +0 -0
  246. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/chat/responses_api.py +0 -0
  247. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/chat/schemas.py +0 -0
  248. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/chat/service.py +0 -0
  249. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/chat/state.py +0 -0
  250. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/chat/utils.py +0 -0
  251. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/content/__init__.py +0 -0
  252. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/content/constants.py +0 -0
  253. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/content/functions.py +0 -0
  254. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/content/schemas.py +0 -0
  255. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/content/service.py +0 -0
  256. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/content/smart_rules.py +0 -0
  257. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/content/utils.py +0 -0
  258. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/data_extraction/README.md +0 -0
  259. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/data_extraction/__init__.py +0 -0
  260. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/data_extraction/augmented/__init__.py +0 -0
  261. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/data_extraction/augmented/service.py +0 -0
  262. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/data_extraction/base.py +0 -0
  263. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/data_extraction/basic/__init__.py +0 -0
  264. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/data_extraction/basic/config.py +0 -0
  265. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/data_extraction/basic/prompt.py +0 -0
  266. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/data_extraction/basic/service.py +0 -0
  267. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/elicitation/__init__.py +0 -0
  268. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/elicitation/constants.py +0 -0
  269. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/elicitation/exceptions.py +0 -0
  270. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/elicitation/functions.py +0 -0
  271. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/elicitation/schemas.py +0 -0
  272. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/elicitation/service.py +0 -0
  273. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/embedding/__init__.py +0 -0
  274. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/embedding/constants.py +0 -0
  275. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/embedding/functions.py +0 -0
  276. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/embedding/schemas.py +0 -0
  277. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/embedding/service.py +0 -0
  278. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/embedding/utils.py +0 -0
  279. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/framework_utilities/__init__.py +0 -0
  280. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/framework_utilities/langchain/__init__.py +0 -0
  281. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/framework_utilities/langchain/client.py +0 -0
  282. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/framework_utilities/langchain/history.py +0 -0
  283. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/framework_utilities/openai/__init__.py +0 -0
  284. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/framework_utilities/openai/client.py +0 -0
  285. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/framework_utilities/openai/message_builder.py +0 -0
  286. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/framework_utilities/utils.py +0 -0
  287. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/language_model/__init__.py +0 -0
  288. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/language_model/_responses_api_utils.py +0 -0
  289. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/language_model/builder.py +0 -0
  290. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/language_model/constants.py +0 -0
  291. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/language_model/default_language_model.py +0 -0
  292. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/language_model/functions.py +0 -0
  293. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/language_model/infos.py +0 -0
  294. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/language_model/prompt.py +0 -0
  295. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/language_model/reference.py +0 -0
  296. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/language_model/schemas.py +0 -0
  297. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/language_model/service.py +0 -0
  298. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/language_model/stream_transform.py +0 -0
  299. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/language_model/utils.py +0 -0
  300. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/monitoring/__init__.py +0 -0
  301. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/monitoring/middleware.py +0 -0
  302. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/monitoring/registry.py +0 -0
  303. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/protocols/support.py +0 -0
  304. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/services/__init__.py +0 -0
  305. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/services/chat_service.py +0 -0
  306. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/services/factory.py +0 -0
  307. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/services/knowledge_base.py +0 -0
  308. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/short_term_memory/__init__.py +0 -0
  309. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/short_term_memory/constants.py +0 -0
  310. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/short_term_memory/functions.py +0 -0
  311. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/short_term_memory/schemas.py +0 -0
  312. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/short_term_memory/service.py +0 -0
  313. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/smart_rules/__init__.py +0 -0
  314. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/smart_rules/compile.py +0 -0
  315. {unique_toolkit-1.77.2 → unique_toolkit-1.77.3}/unique_toolkit/test_utilities/events.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: unique-toolkit
3
- Version: 1.77.2
3
+ Version: 1.77.3
4
4
  Summary:
5
5
  Author: Cedric Klinkert, Martin Fadler, Sadique Sheik, Fabian Schläpfer, Pascal Hauri, Ejiroghene Oki-Peter, Rami Azouz, Ricardo Visini, Sanzio Monti
6
6
  Author-email: Cedric Klinkert <cedric.klinkert@unique.ch>, Martin Fadler <martin.fadler@unique.ch>, Sadique Sheik <sadique@unique.ch>, Fabian Schläpfer <fabian@unique.ch>, Pascal Hauri <pascal@unique.ch>, Ejiroghene Oki-Peter <oki-peter.ejiroghene@unique.ai>, Rami Azouz <rami.ext@unique.ch>, Ricardo Visini <ricardo.visini@unique.ch>, Sanzio Monti <sanzio.monti@unique.ai>
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "unique_toolkit"
3
- version = "1.77.2"
3
+ version = "1.77.3"
4
4
  description = ""
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -0,0 +1,23 @@
1
+ """``unique_toolkit.experimental`` — opt-in surface for experimental services.
2
+
3
+ .. warning::
4
+
5
+ Anything exported from this subpackage is **experimental**. The public API,
6
+ method names, argument shapes, and return types may change at any time and
7
+ are **not** covered by the toolkit's normal stability guarantees. Pin the
8
+ toolkit version if you depend on a specific shape.
9
+
10
+ Currently exposes:
11
+
12
+ - :class:`unique_toolkit.experimental.scheduled_task.ScheduledTasks` — cron-based
13
+ scheduled tasks that trigger assistants on a recurring schedule (wrapper over
14
+ :class:`unique_sdk.ScheduledTask`).
15
+ """
16
+
17
+ from unique_toolkit.experimental.scheduled_task import (
18
+ ScheduledTasks as ScheduledTasks,
19
+ )
20
+
21
+ __all__ = [
22
+ "ScheduledTasks",
23
+ ]
@@ -0,0 +1,71 @@
1
+ """``unique_toolkit.experimental.scheduled_task`` — cron-based assistant triggers.
2
+
3
+ .. warning::
4
+
5
+ **Experimental.** This subpackage is exposed under
6
+ :mod:`unique_toolkit.experimental` and its public API may change without
7
+ notice. It is not covered by the toolkit's normal stability guarantees.
8
+
9
+ A thin, typed wrapper around :class:`unique_sdk.ScheduledTask`. The single
10
+ entry point is :class:`ScheduledTasks`; the subpackage also re-exports the
11
+ Pydantic schemas used on responses, plus a :class:`Cron` ``StrEnum`` of
12
+ ready-made cron strings for the most common schedules.
13
+ """
14
+
15
+ from unique_toolkit.experimental.scheduled_task.cron import Cron as Cron
16
+ from unique_toolkit.experimental.scheduled_task.functions import (
17
+ create_scheduled_task as create_scheduled_task,
18
+ )
19
+ from unique_toolkit.experimental.scheduled_task.functions import (
20
+ create_scheduled_task_async as create_scheduled_task_async,
21
+ )
22
+ from unique_toolkit.experimental.scheduled_task.functions import (
23
+ delete_scheduled_task as delete_scheduled_task,
24
+ )
25
+ from unique_toolkit.experimental.scheduled_task.functions import (
26
+ delete_scheduled_task_async as delete_scheduled_task_async,
27
+ )
28
+ from unique_toolkit.experimental.scheduled_task.functions import (
29
+ get_scheduled_task as get_scheduled_task,
30
+ )
31
+ from unique_toolkit.experimental.scheduled_task.functions import (
32
+ get_scheduled_task_async as get_scheduled_task_async,
33
+ )
34
+ from unique_toolkit.experimental.scheduled_task.functions import (
35
+ list_scheduled_tasks as list_scheduled_tasks,
36
+ )
37
+ from unique_toolkit.experimental.scheduled_task.functions import (
38
+ list_scheduled_tasks_async as list_scheduled_tasks_async,
39
+ )
40
+ from unique_toolkit.experimental.scheduled_task.functions import (
41
+ update_scheduled_task as update_scheduled_task,
42
+ )
43
+ from unique_toolkit.experimental.scheduled_task.functions import (
44
+ update_scheduled_task_async as update_scheduled_task_async,
45
+ )
46
+ from unique_toolkit.experimental.scheduled_task.schemas import (
47
+ DeletedScheduledTask as DeletedScheduledTask,
48
+ )
49
+ from unique_toolkit.experimental.scheduled_task.schemas import (
50
+ ScheduledTask as ScheduledTask,
51
+ )
52
+ from unique_toolkit.experimental.scheduled_task.service import (
53
+ ScheduledTasks as ScheduledTasks,
54
+ )
55
+
56
+ __all__ = [
57
+ "Cron",
58
+ "DeletedScheduledTask",
59
+ "ScheduledTask",
60
+ "ScheduledTasks",
61
+ "create_scheduled_task",
62
+ "create_scheduled_task_async",
63
+ "delete_scheduled_task",
64
+ "delete_scheduled_task_async",
65
+ "get_scheduled_task",
66
+ "get_scheduled_task_async",
67
+ "list_scheduled_tasks",
68
+ "list_scheduled_tasks_async",
69
+ "update_scheduled_task",
70
+ "update_scheduled_task_async",
71
+ ]
@@ -0,0 +1,90 @@
1
+ """Convenience catalogue of 5-field (UTC) cron strings for scheduled tasks.
2
+
3
+ The server stores schedules as plain cron strings. :class:`Cron` is a
4
+ :class:`~enum.StrEnum` of the most common schedules — every member *is* a
5
+ ``str``, so you can drop it straight into :meth:`ScheduledTasks.create`
6
+ without any conversion. For schedules that aren't covered, pass a raw cron
7
+ string.
8
+
9
+ .. note::
10
+
11
+ All expressions are interpreted in **UTC** by the server.
12
+
13
+ .. warning::
14
+
15
+ **Experimental.** Ships under :mod:`unique_toolkit.experimental`. API may
16
+ change without notice.
17
+
18
+ Example
19
+ -------
20
+
21
+ >>> from unique_toolkit.experimental.scheduled_task import Cron
22
+ >>> Cron.DAILY_MIDNIGHT
23
+ <Cron.DAILY_MIDNIGHT: '0 0 * * *'>
24
+ >>> str(Cron.DAILY_MIDNIGHT)
25
+ '0 0 * * *'
26
+ """
27
+
28
+ from __future__ import annotations
29
+
30
+ from enum import StrEnum
31
+
32
+
33
+ class Cron(StrEnum):
34
+ """Named ready-made 5-field cron expressions (UTC).
35
+
36
+ Each member is a ``str`` subclass, so instances can be passed straight
37
+ through to anything expecting a cron string — including
38
+ :meth:`ScheduledTasks.create`.
39
+ """
40
+
41
+ EVERY_MINUTE = "* * * * *"
42
+ """Fires every minute."""
43
+
44
+ EVERY_FIVE_MINUTES = "*/5 * * * *"
45
+ """Fires every 5 minutes."""
46
+
47
+ EVERY_FIFTEEN_MINUTES = "*/15 * * * *"
48
+ """Fires every 15 minutes."""
49
+
50
+ EVERY_THIRTY_MINUTES = "*/30 * * * *"
51
+ """Fires every 30 minutes."""
52
+
53
+ HOURLY = "0 * * * *"
54
+ """Fires once an hour on the hour (``:00``)."""
55
+
56
+ DAILY_MIDNIGHT = "0 0 * * *"
57
+ """Fires once a day at 00:00 UTC."""
58
+
59
+ DAILY_NOON = "0 12 * * *"
60
+ """Fires once a day at 12:00 UTC."""
61
+
62
+ DAILY_9AM = "0 9 * * *"
63
+ """Fires once a day at 09:00 UTC."""
64
+
65
+ WEEKDAYS_9AM = "0 9 * * 1-5"
66
+ """Fires on weekdays (Mon-Fri) at 09:00 UTC."""
67
+
68
+ WEEKDAYS_MIDNIGHT = "0 0 * * 1-5"
69
+ """Fires on weekdays (Mon-Fri) at 00:00 UTC."""
70
+
71
+ WEEKENDS_MIDNIGHT = "0 0 * * 0,6"
72
+ """Fires on weekends (Sat & Sun) at 00:00 UTC."""
73
+
74
+ WEEKLY_SUNDAY_MIDNIGHT = "0 0 * * 0"
75
+ """Fires every Sunday at 00:00 UTC."""
76
+
77
+ WEEKLY_MONDAY_MIDNIGHT = "0 0 * * 1"
78
+ """Fires every Monday at 00:00 UTC."""
79
+
80
+ MONTHLY_FIRST_MIDNIGHT = "0 0 1 * *"
81
+ """Fires on the 1st of every month at 00:00 UTC."""
82
+
83
+ MONTHLY_FIFTEENTH_MIDNIGHT = "0 0 15 * *"
84
+ """Fires on the 15th of every month at 00:00 UTC."""
85
+
86
+ YEARLY_JAN_FIRST = "0 0 1 1 *"
87
+ """Fires on January 1st at 00:00 UTC."""
88
+
89
+
90
+ __all__ = ["Cron"]
@@ -0,0 +1,311 @@
1
+ """Low-level function wrappers around :class:`unique_sdk.ScheduledTask`.
2
+
3
+ Each SDK operation gets a ``<verb>`` and ``<verb>_async`` pair. The functions
4
+ take ``user_id`` and ``company_id`` as the first two positional arguments (the
5
+ acting user's credentials) and return toolkit Pydantic models — SDK
6
+ ``TypedDict``\\s never leak out of this module.
7
+
8
+ Notes on update semantics
9
+ -------------------------
10
+
11
+ :func:`update_scheduled_task` / :func:`update_scheduled_task_async` support two
12
+ mutually-exclusive intents for :attr:`chat_id`:
13
+
14
+ - Pass ``chat_id="chat_…"`` to repoint the task at a different chat.
15
+ - Pass ``clear_chat_id=True`` to drop the current link (the SDK sends
16
+ ``chatId=None`` on the wire; the server then spawns a fresh chat on every
17
+ trigger).
18
+ - Omit both to leave the current chat setting untouched.
19
+
20
+ Mixing them raises :class:`TypeError` before the SDK call.
21
+
22
+ .. warning::
23
+
24
+ **Experimental.** Lives under :mod:`unique_toolkit.experimental`. The API
25
+ may change without notice.
26
+ """
27
+
28
+ from __future__ import annotations
29
+
30
+ import asyncio
31
+ from typing import Any
32
+
33
+ import unique_sdk
34
+
35
+ from unique_toolkit.experimental.scheduled_task.schemas import (
36
+ DeletedScheduledTask,
37
+ ScheduledTask,
38
+ )
39
+
40
+
41
+ def create_scheduled_task(
42
+ user_id: str,
43
+ company_id: str,
44
+ *,
45
+ cron_expression: str,
46
+ assistant_id: str,
47
+ prompt: str,
48
+ enabled: bool = True,
49
+ chat_id: str | None = None,
50
+ ) -> ScheduledTask:
51
+ """Create a new cron-based scheduled task.
52
+
53
+ Args:
54
+ user_id: Acting user (SDK requirement).
55
+ company_id: Owning company (SDK requirement).
56
+ cron_expression: 5-field UTC cron expression (``"m h dom mon dow"``).
57
+ assistant_id: Assistant id to execute on every trigger.
58
+ prompt: Prompt text sent to the assistant on each run.
59
+ enabled: Whether the task is active from creation. Defaults to
60
+ ``True`` so tasks fire as soon as they are registered; pass
61
+ ``False`` to stage a task that can be enabled later via
62
+ :func:`update_scheduled_task`.
63
+ chat_id: Optional chat to continue; ``None`` (default) means a fresh
64
+ chat is created every run.
65
+
66
+ Returns:
67
+ The created :class:`ScheduledTask` as echoed by the server.
68
+ """
69
+ params: dict[str, Any] = {
70
+ "cronExpression": cron_expression,
71
+ "assistantId": assistant_id,
72
+ "prompt": prompt,
73
+ "enabled": enabled,
74
+ }
75
+ if chat_id is not None:
76
+ params["chatId"] = chat_id
77
+
78
+ payload = unique_sdk.ScheduledTask.create(
79
+ user_id=user_id,
80
+ company_id=company_id,
81
+ **params,
82
+ )
83
+ return ScheduledTask.model_validate(payload, by_alias=True, by_name=True)
84
+
85
+
86
+ async def create_scheduled_task_async(
87
+ user_id: str,
88
+ company_id: str,
89
+ *,
90
+ cron_expression: str,
91
+ assistant_id: str,
92
+ prompt: str,
93
+ enabled: bool = True,
94
+ chat_id: str | None = None,
95
+ ) -> ScheduledTask:
96
+ """Async :func:`create_scheduled_task`."""
97
+ params: dict[str, Any] = {
98
+ "cronExpression": cron_expression,
99
+ "assistantId": assistant_id,
100
+ "prompt": prompt,
101
+ "enabled": enabled,
102
+ }
103
+ if chat_id is not None:
104
+ params["chatId"] = chat_id
105
+
106
+ payload = await unique_sdk.ScheduledTask.create_async(
107
+ user_id=user_id,
108
+ company_id=company_id,
109
+ **params,
110
+ )
111
+ return ScheduledTask.model_validate(payload, by_alias=True, by_name=True)
112
+
113
+
114
+ def list_scheduled_tasks(user_id: str, company_id: str) -> list[ScheduledTask]:
115
+ """List every scheduled task visible to the acting user."""
116
+ result = unique_sdk.ScheduledTask.list(user_id=user_id, company_id=company_id)
117
+ return [
118
+ ScheduledTask.model_validate(task, by_alias=True, by_name=True)
119
+ for task in result
120
+ ]
121
+
122
+
123
+ async def list_scheduled_tasks_async(
124
+ user_id: str, company_id: str
125
+ ) -> list[ScheduledTask]:
126
+ """Async :func:`list_scheduled_tasks`."""
127
+ result = await unique_sdk.ScheduledTask.list_async(
128
+ user_id=user_id, company_id=company_id
129
+ )
130
+ return [
131
+ ScheduledTask.model_validate(task, by_alias=True, by_name=True)
132
+ for task in result
133
+ ]
134
+
135
+
136
+ def get_scheduled_task(
137
+ user_id: str,
138
+ company_id: str,
139
+ *,
140
+ task_id: str,
141
+ ) -> ScheduledTask:
142
+ """Fetch the full detail of a single scheduled task by id."""
143
+ payload = unique_sdk.ScheduledTask.retrieve(
144
+ user_id=user_id,
145
+ company_id=company_id,
146
+ id=task_id,
147
+ )
148
+ return ScheduledTask.model_validate(payload, by_alias=True, by_name=True)
149
+
150
+
151
+ async def get_scheduled_task_async(
152
+ user_id: str,
153
+ company_id: str,
154
+ *,
155
+ task_id: str,
156
+ ) -> ScheduledTask:
157
+ """Async :func:`get_scheduled_task`."""
158
+ payload = await unique_sdk.ScheduledTask.retrieve_async(
159
+ user_id=user_id,
160
+ company_id=company_id,
161
+ id=task_id,
162
+ )
163
+ return ScheduledTask.model_validate(payload, by_alias=True, by_name=True)
164
+
165
+
166
+ def update_scheduled_task(
167
+ user_id: str,
168
+ company_id: str,
169
+ *,
170
+ task_id: str,
171
+ cron_expression: str | None = None,
172
+ assistant_id: str | None = None,
173
+ prompt: str | None = None,
174
+ chat_id: str | None = None,
175
+ clear_chat_id: bool = False,
176
+ enabled: bool | None = None,
177
+ ) -> ScheduledTask:
178
+ """Update an existing scheduled task (server-side partial update).
179
+
180
+ Only the keyword arguments you pass are sent to the API; everything else is
181
+ left untouched. Pass ``clear_chat_id=True`` to remove the current chat link
182
+ (``chatId=None`` on the wire) — the server will then spin up a brand-new
183
+ chat on every future trigger.
184
+
185
+ Raises:
186
+ TypeError: If ``chat_id`` and ``clear_chat_id=True`` are combined.
187
+ """
188
+ params = _build_update_params(
189
+ cron_expression=cron_expression,
190
+ assistant_id=assistant_id,
191
+ prompt=prompt,
192
+ chat_id=chat_id,
193
+ clear_chat_id=clear_chat_id,
194
+ enabled=enabled,
195
+ )
196
+ payload = unique_sdk.ScheduledTask.modify(
197
+ user_id=user_id,
198
+ company_id=company_id,
199
+ id=task_id,
200
+ **params,
201
+ )
202
+ return ScheduledTask.model_validate(payload, by_alias=True, by_name=True)
203
+
204
+
205
+ async def update_scheduled_task_async(
206
+ user_id: str,
207
+ company_id: str,
208
+ *,
209
+ task_id: str,
210
+ cron_expression: str | None = None,
211
+ assistant_id: str | None = None,
212
+ prompt: str | None = None,
213
+ chat_id: str | None = None,
214
+ clear_chat_id: bool = False,
215
+ enabled: bool | None = None,
216
+ ) -> ScheduledTask:
217
+ """Async :func:`update_scheduled_task`."""
218
+ params = _build_update_params(
219
+ cron_expression=cron_expression,
220
+ assistant_id=assistant_id,
221
+ prompt=prompt,
222
+ chat_id=chat_id,
223
+ clear_chat_id=clear_chat_id,
224
+ enabled=enabled,
225
+ )
226
+ payload = await unique_sdk.ScheduledTask.modify_async(
227
+ user_id=user_id,
228
+ company_id=company_id,
229
+ id=task_id,
230
+ **params,
231
+ )
232
+ return ScheduledTask.model_validate(payload, by_alias=True, by_name=True)
233
+
234
+
235
+ def delete_scheduled_task(
236
+ user_id: str,
237
+ company_id: str,
238
+ *,
239
+ task_id: str,
240
+ ) -> DeletedScheduledTask:
241
+ """Permanently delete a scheduled task. This action cannot be undone."""
242
+ payload = unique_sdk.ScheduledTask.delete(
243
+ user_id=user_id,
244
+ company_id=company_id,
245
+ id=task_id,
246
+ )
247
+ return DeletedScheduledTask.model_validate(payload, by_alias=True, by_name=True)
248
+
249
+
250
+ async def delete_scheduled_task_async(
251
+ user_id: str,
252
+ company_id: str,
253
+ *,
254
+ task_id: str,
255
+ ) -> DeletedScheduledTask:
256
+ """Async :func:`delete_scheduled_task`.
257
+
258
+ Falls back to :func:`asyncio.to_thread` if the SDK method does not provide
259
+ an ``_async`` variant, so the event loop is never blocked.
260
+ """
261
+ sdk_async = getattr(unique_sdk.ScheduledTask, "delete_async", None)
262
+ if sdk_async is None:
263
+ return await asyncio.to_thread(
264
+ delete_scheduled_task,
265
+ user_id,
266
+ company_id,
267
+ task_id=task_id,
268
+ )
269
+ payload = await sdk_async(
270
+ user_id=user_id,
271
+ company_id=company_id,
272
+ id=task_id,
273
+ )
274
+ return DeletedScheduledTask.model_validate(payload, by_alias=True, by_name=True)
275
+
276
+
277
+ def _build_update_params(
278
+ *,
279
+ cron_expression: str | None,
280
+ assistant_id: str | None,
281
+ prompt: str | None,
282
+ chat_id: str | None,
283
+ clear_chat_id: bool,
284
+ enabled: bool | None,
285
+ ) -> dict[str, Any]:
286
+ """Translate toolkit kwargs into the SDK ``ScheduledTask.ModifyParams`` shape.
287
+
288
+ Fields that were not provided are omitted entirely (partial update). The
289
+ ``chat_id`` / ``clear_chat_id`` pair is mutually exclusive; passing both is
290
+ a usage error and raises :class:`TypeError` here — never at the SDK layer.
291
+ """
292
+ if chat_id is not None and clear_chat_id:
293
+ raise TypeError(
294
+ "update_scheduled_task: pass either chat_id= to set a new chat or "
295
+ "clear_chat_id=True to clear it, not both."
296
+ )
297
+
298
+ params: dict[str, Any] = {}
299
+ if cron_expression is not None:
300
+ params["cronExpression"] = cron_expression
301
+ if assistant_id is not None:
302
+ params["assistantId"] = assistant_id
303
+ if prompt is not None:
304
+ params["prompt"] = prompt
305
+ if chat_id is not None:
306
+ params["chatId"] = chat_id
307
+ elif clear_chat_id:
308
+ params["chatId"] = None
309
+ if enabled is not None:
310
+ params["enabled"] = enabled
311
+ return params
@@ -0,0 +1,152 @@
1
+ """Pydantic schemas for the :mod:`unique_toolkit.experimental.scheduled_task` subpackage.
2
+
3
+ These models mirror the :class:`unique_sdk.ScheduledTask` TypedDicts but add:
4
+
5
+ - field-level documentation (``Field(..., description=...)``) so the intent of each
6
+ attribute is visible in IDEs, the docs site, and ``help(...)``;
7
+ - camelCase aliases so the SDK's wire payload (``cronExpression``, ``assistantId``, …)
8
+ can be validated directly via :meth:`BaseModel.model_validate`.
9
+
10
+ .. warning::
11
+
12
+ **Experimental.** Lives under :mod:`unique_toolkit.experimental`; the public
13
+ shape of these models may still change without notice.
14
+ """
15
+
16
+ from __future__ import annotations
17
+
18
+ from datetime import datetime
19
+ from typing import Literal
20
+
21
+ from humps import camelize
22
+ from pydantic import BaseModel, ConfigDict, Field
23
+
24
+ _model_config = ConfigDict(
25
+ alias_generator=camelize,
26
+ populate_by_name=True,
27
+ arbitrary_types_allowed=True,
28
+ )
29
+
30
+
31
+ class ScheduledTask(BaseModel):
32
+ """A cron-based scheduled task that triggers an assistant on a recurring schedule.
33
+
34
+ Scheduled tasks are stored and executed on the Unique AI Platform by a
35
+ Kubernetes CronJob — they are **not** local crontab entries. Every minute,
36
+ the platform evaluates all enabled tasks and triggers the ones whose cron
37
+ expression matches the current time (UTC).
38
+
39
+ Each task carries:
40
+
41
+ - a :attr:`cron_expression` in **5-field UTC** form,
42
+ - the :attr:`assistant_id` to execute on each tick,
43
+ - the :attr:`prompt` sent to that assistant,
44
+ - an optional :attr:`chat_id` used to *continue* an existing conversation
45
+ (omit / set to ``None`` to get a fresh chat on every run), and
46
+ - an :attr:`enabled` flag to pause/resume execution without deleting the task.
47
+
48
+ Maps to ``unique_sdk.ScheduledTask`` and is the return value of every toolkit
49
+ CRUD method except :meth:`~unique_toolkit.experimental.scheduled_task.service.ScheduledTasks.delete`.
50
+ """
51
+
52
+ model_config = _model_config
53
+
54
+ id: str = Field(
55
+ description=(
56
+ "Unique scheduled-task identifier. Stable for the lifetime of the "
57
+ "task; use it to :meth:`get`, :meth:`update`, or :meth:`delete` "
58
+ "later."
59
+ ),
60
+ )
61
+ object: Literal["scheduled_task"] = Field(
62
+ default="scheduled_task",
63
+ description=(
64
+ 'Server-side object-type tag; always the literal ``"scheduled_task"``.'
65
+ ),
66
+ )
67
+ cron_expression: str = Field(
68
+ description=(
69
+ "5-field cron expression evaluated in **UTC** as returned by the "
70
+ "server. Stored as the raw wire string so that compound patterns "
71
+ "(ranges, steps, lists) survive round-trips; use "
72
+ ":meth:`CronExpression.parse` on the client if you want a typed "
73
+ "view."
74
+ ),
75
+ )
76
+
77
+ assistant_id: str = Field(
78
+ description=(
79
+ "Id of the assistant to invoke on each trigger. Typically starts with "
80
+ "``assistant_``. The acting user must have access to the assistant."
81
+ ),
82
+ )
83
+ assistant_name: str | None = Field(
84
+ default=None,
85
+ description=(
86
+ "Display name of the assistant, as resolved by the server at read time. "
87
+ "``None`` if the assistant was deleted or the caller cannot see it."
88
+ ),
89
+ )
90
+ chat_id: str | None = Field(
91
+ default=None,
92
+ description=(
93
+ "Id of the chat to continue on each trigger. When ``None`` (the default), "
94
+ "a brand-new chat is created for every run; when set, the assistant "
95
+ "appends to that chat, so prompts should be idempotent or progressive."
96
+ ),
97
+ )
98
+ prompt: str = Field(
99
+ description=(
100
+ "Prompt text delivered to the assistant on every trigger. Treat as a "
101
+ "user message sent by the acting user."
102
+ ),
103
+ )
104
+ enabled: bool = Field(
105
+ description=(
106
+ "Whether the task is active. Disabled tasks are preserved (id, cron, "
107
+ "history) but are skipped by the scheduler until re-enabled."
108
+ ),
109
+ )
110
+ last_run_at: datetime | None = Field(
111
+ default=None,
112
+ description=(
113
+ "ISO-8601 timestamp of the last execution, or ``None`` if the task has "
114
+ "never run (e.g. freshly created or permanently disabled)."
115
+ ),
116
+ )
117
+ created_at: datetime = Field(
118
+ description="ISO-8601 timestamp set by the server when the task was created.",
119
+ )
120
+ updated_at: datetime = Field(
121
+ description=(
122
+ "ISO-8601 timestamp of the last modification, including toggles of "
123
+ ":attr:`enabled` and edits to :attr:`chat_id` or :attr:`prompt`."
124
+ ),
125
+ )
126
+
127
+
128
+ class DeletedScheduledTask(BaseModel):
129
+ """Response returned by :meth:`unique_sdk.ScheduledTask.delete`.
130
+
131
+ The API echoes the deleted task's id and flags the row as removed. Deletion
132
+ is permanent; a deleted task cannot be recovered, so re-scheduling requires
133
+ calling :meth:`~unique_toolkit.experimental.scheduled_task.service.ScheduledTasks.create`
134
+ with fresh parameters.
135
+ """
136
+
137
+ model_config = _model_config
138
+
139
+ id: str = Field(description="Id of the scheduled task that was deleted.")
140
+ object: Literal["scheduled_task"] = Field(
141
+ default="scheduled_task",
142
+ description=(
143
+ 'Server-side object-type tag; always the literal ``"scheduled_task"``.'
144
+ ),
145
+ )
146
+ deleted: bool = Field(
147
+ description=(
148
+ "``True`` when the server successfully removed the row. The toolkit "
149
+ "surfaces this verbatim — a ``False`` value should be treated as an "
150
+ "unexpected server response and reported."
151
+ ),
152
+ )