unique_toolkit 1.21.0__tar.gz → 1.21.2__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 unique_toolkit might be problematic. Click here for more details.

Files changed (173) hide show
  1. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/CHANGELOG.md +5 -0
  2. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/PKG-INFO +6 -1
  3. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/pyproject.toml +1 -1
  4. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/history_manager/history_manager.py +7 -0
  5. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/tools/test/test_tool_progress_reporter.py +33 -17
  6. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/tools/tool_manager.py +54 -4
  7. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/tools/tool_progress_reporter.py +27 -26
  8. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/LICENSE +0 -0
  9. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/README.md +0 -0
  10. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/__init__.py +0 -0
  11. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/_common/_base_service.py +0 -0
  12. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/_common/_time_utils.py +0 -0
  13. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/_common/api_calling/human_verification_manager.py +0 -0
  14. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/_common/base_model_type_attribute.py +0 -0
  15. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/_common/chunk_relevancy_sorter/config.py +0 -0
  16. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/_common/chunk_relevancy_sorter/exception.py +0 -0
  17. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/_common/chunk_relevancy_sorter/schemas.py +0 -0
  18. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/_common/chunk_relevancy_sorter/service.py +0 -0
  19. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/_common/chunk_relevancy_sorter/tests/test_service.py +0 -0
  20. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/_common/default_language_model.py +0 -0
  21. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/_common/endpoint_builder.py +0 -0
  22. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/_common/endpoint_requestor.py +0 -0
  23. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/_common/exception.py +0 -0
  24. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/_common/feature_flags/schema.py +0 -0
  25. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/_common/pydantic/rjsf_tags.py +0 -0
  26. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/_common/pydantic_helpers.py +0 -0
  27. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/_common/string_utilities.py +0 -0
  28. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/_common/token/image_token_counting.py +0 -0
  29. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/_common/token/token_counting.py +0 -0
  30. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/_common/utils/__init__.py +0 -0
  31. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/_common/utils/files.py +0 -0
  32. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/_common/utils/structured_output/__init__.py +0 -0
  33. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/_common/utils/structured_output/schema.py +0 -0
  34. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/_common/utils/write_configuration.py +0 -0
  35. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/_common/validate_required_values.py +0 -0
  36. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/_common/validators.py +0 -0
  37. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/__init__.py +0 -0
  38. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/debug_info_manager/debug_info_manager.py +0 -0
  39. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/debug_info_manager/test/test_debug_info_manager.py +0 -0
  40. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/evaluation/config.py +0 -0
  41. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/evaluation/context_relevancy/prompts.py +0 -0
  42. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/evaluation/context_relevancy/schema.py +0 -0
  43. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/evaluation/context_relevancy/service.py +0 -0
  44. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/evaluation/evaluation_manager.py +0 -0
  45. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/evaluation/exception.py +0 -0
  46. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/evaluation/hallucination/constants.py +0 -0
  47. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/evaluation/hallucination/hallucination_evaluation.py +0 -0
  48. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/evaluation/hallucination/prompts.py +0 -0
  49. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/evaluation/hallucination/service.py +0 -0
  50. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/evaluation/hallucination/utils.py +0 -0
  51. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/evaluation/output_parser.py +0 -0
  52. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/evaluation/schemas.py +0 -0
  53. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/evaluation/tests/test_context_relevancy_service.py +0 -0
  54. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/evaluation/tests/test_output_parser.py +0 -0
  55. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/history_manager/history_construction_with_contents.py +0 -0
  56. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/history_manager/loop_token_reducer.py +0 -0
  57. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/history_manager/utils.py +0 -0
  58. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/postprocessor/postprocessor_manager.py +0 -0
  59. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/reference_manager/reference_manager.py +0 -0
  60. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/responses_api/__init__.py +0 -0
  61. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/responses_api/postprocessors/code_display.py +0 -0
  62. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/responses_api/postprocessors/generated_files.py +0 -0
  63. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/responses_api/stream_handler.py +0 -0
  64. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/short_term_memory_manager/persistent_short_term_memory_manager.py +0 -0
  65. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/thinking_manager/thinking_manager.py +0 -0
  66. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/tools/__init__.py +0 -0
  67. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/tools/a2a/__init__.py +0 -0
  68. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/tools/a2a/config.py +0 -0
  69. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/tools/a2a/evaluation/__init__.py +0 -0
  70. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/tools/a2a/evaluation/_utils.py +0 -0
  71. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/tools/a2a/evaluation/config.py +0 -0
  72. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/tools/a2a/evaluation/evaluator.py +0 -0
  73. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/tools/a2a/evaluation/summarization_user_message.j2 +0 -0
  74. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/tools/a2a/manager.py +0 -0
  75. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/tools/a2a/postprocessing/__init__.py +0 -0
  76. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/tools/a2a/postprocessing/_display.py +0 -0
  77. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/tools/a2a/postprocessing/_utils.py +0 -0
  78. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/tools/a2a/postprocessing/config.py +0 -0
  79. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/tools/a2a/postprocessing/postprocessor.py +0 -0
  80. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_consolidate_references.py +0 -0
  81. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display.py +0 -0
  82. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_postprocessor_reference_functions.py +0 -0
  83. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/tools/a2a/prompts.py +0 -0
  84. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/tools/a2a/tool/__init__.py +0 -0
  85. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/tools/a2a/tool/_memory.py +0 -0
  86. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/tools/a2a/tool/_schema.py +0 -0
  87. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/tools/a2a/tool/config.py +0 -0
  88. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/tools/a2a/tool/service.py +0 -0
  89. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/tools/agent_chunks_hanlder.py +0 -0
  90. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/tools/config.py +0 -0
  91. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/tools/factory.py +0 -0
  92. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/tools/mcp/__init__.py +0 -0
  93. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/tools/mcp/manager.py +0 -0
  94. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/tools/mcp/models.py +0 -0
  95. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/tools/mcp/tool_wrapper.py +0 -0
  96. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/tools/openai_builtin/__init__.py +0 -0
  97. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/tools/openai_builtin/base.py +0 -0
  98. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/__init__.py +0 -0
  99. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/config.py +0 -0
  100. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/service.py +0 -0
  101. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/tools/openai_builtin/manager.py +0 -0
  102. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/tools/schemas.py +0 -0
  103. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/tools/test/test_mcp_manager.py +0 -0
  104. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/tools/tool.py +0 -0
  105. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/tools/utils/__init__.py +0 -0
  106. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/tools/utils/execution/__init__.py +0 -0
  107. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/tools/utils/execution/execution.py +0 -0
  108. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/tools/utils/source_handling/__init__.py +0 -0
  109. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/tools/utils/source_handling/schema.py +0 -0
  110. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/tools/utils/source_handling/source_formatting.py +0 -0
  111. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/agentic/tools/utils/source_handling/tests/test_source_formatting.py +0 -0
  112. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/app/__init__.py +0 -0
  113. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/app/dev_util.py +0 -0
  114. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/app/init_logging.py +0 -0
  115. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/app/init_sdk.py +0 -0
  116. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/app/performance/async_tasks.py +0 -0
  117. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/app/performance/async_wrapper.py +0 -0
  118. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/app/schemas.py +0 -0
  119. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/app/unique_settings.py +0 -0
  120. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/app/verification.py +0 -0
  121. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/chat/__init__.py +0 -0
  122. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/chat/constants.py +0 -0
  123. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/chat/deprecated/service.py +0 -0
  124. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/chat/functions.py +0 -0
  125. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/chat/rendering.py +0 -0
  126. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/chat/responses_api.py +0 -0
  127. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/chat/schemas.py +0 -0
  128. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/chat/service.py +0 -0
  129. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/chat/state.py +0 -0
  130. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/chat/utils.py +0 -0
  131. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/content/__init__.py +0 -0
  132. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/content/constants.py +0 -0
  133. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/content/functions.py +0 -0
  134. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/content/schemas.py +0 -0
  135. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/content/service.py +0 -0
  136. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/content/smart_rules.py +0 -0
  137. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/content/utils.py +0 -0
  138. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/embedding/__init__.py +0 -0
  139. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/embedding/constants.py +0 -0
  140. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/embedding/functions.py +0 -0
  141. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/embedding/schemas.py +0 -0
  142. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/embedding/service.py +0 -0
  143. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/embedding/utils.py +0 -0
  144. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/framework_utilities/__init__.py +0 -0
  145. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/framework_utilities/langchain/client.py +0 -0
  146. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/framework_utilities/langchain/history.py +0 -0
  147. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/framework_utilities/openai/__init__.py +0 -0
  148. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/framework_utilities/openai/client.py +0 -0
  149. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/framework_utilities/openai/message_builder.py +0 -0
  150. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/framework_utilities/utils.py +0 -0
  151. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/language_model/__init__.py +0 -0
  152. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/language_model/builder.py +0 -0
  153. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/language_model/constants.py +0 -0
  154. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/language_model/default_language_model.py +0 -0
  155. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/language_model/functions.py +0 -0
  156. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/language_model/infos.py +0 -0
  157. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/language_model/prompt.py +0 -0
  158. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/language_model/reference.py +0 -0
  159. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/language_model/schemas.py +0 -0
  160. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/language_model/service.py +0 -0
  161. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/language_model/utils.py +0 -0
  162. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/protocols/support.py +0 -0
  163. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/services/__init__.py +0 -0
  164. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/services/chat_service.py +0 -0
  165. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/services/knowledge_base.py +0 -0
  166. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/short_term_memory/__init__.py +0 -0
  167. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/short_term_memory/constants.py +0 -0
  168. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/short_term_memory/functions.py +0 -0
  169. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/short_term_memory/schemas.py +0 -0
  170. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/short_term_memory/service.py +0 -0
  171. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/smart_rules/__init__.py +0 -0
  172. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/smart_rules/compile.py +0 -0
  173. {unique_toolkit-1.21.0 → unique_toolkit-1.21.2}/unique_toolkit/test_utilities/events.py +0 -0
@@ -5,6 +5,11 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [1.21.2] - 2025-10-30
9
+ - Fixing that system format info is only appended to system prompt if tool is called
10
+
11
+ ## [1.21.1] - 2025-10-30
12
+ - Improve Spaces 2.0 display of tool progress reporter configuration.
8
13
 
9
14
  ## [1.21.0] - 2025-10-30
10
15
  - Add option to customize the display of tool progress statuses.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: unique_toolkit
3
- Version: 1.21.0
3
+ Version: 1.21.2
4
4
  Summary:
5
5
  License: Proprietary
6
6
  Author: Cedric Klinkert
@@ -118,6 +118,11 @@ All notable changes to this project will be documented in this file.
118
118
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
119
119
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
120
120
 
121
+ ## [1.21.2] - 2025-10-30
122
+ - Fixing that system format info is only appended to system prompt if tool is called
123
+
124
+ ## [1.21.1] - 2025-10-30
125
+ - Improve Spaces 2.0 display of tool progress reporter configuration.
121
126
 
122
127
  ## [1.21.0] - 2025-10-30
123
128
  - Add option to customize the display of tool progress statuses.
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "unique_toolkit"
3
- version = "1.21.0"
3
+ version = "1.21.2"
4
4
  description = ""
5
5
  authors = [
6
6
  "Cedric Klinkert <cedric.klinkert@unique.ch>",
@@ -120,9 +120,16 @@ class HistoryManager:
120
120
  reference_manager=reference_manager,
121
121
  )
122
122
  self._tool_call_result_history: list[ToolCallResponse] = []
123
+ self._tool_calls: list[LanguageModelFunction] = []
123
124
  self._loop_history: list[LanguageModelMessage] = []
124
125
  self._source_enumerator = 0
125
126
 
127
+ def add_tool_call(self, tool_call: LanguageModelFunction) -> None:
128
+ self._tool_calls.append(tool_call)
129
+
130
+ def get_tool_calls(self) -> list[LanguageModelFunction]:
131
+ return self._tool_calls
132
+
126
133
  def has_no_loop_messages(self) -> bool:
127
134
  return len(self._loop_history) == 0
128
135
 
@@ -252,8 +252,10 @@ class TestToolProgressReporterConfig:
252
252
  # Arrange
253
253
  custom_config = ToolProgressReporterConfig(
254
254
  state_to_display_template={
255
- ProgressState.RUNNING: " {tool_name}: {message}",
256
- ProgressState.FINISHED: " {tool_name}: {message}",
255
+ "started": " {tool_name}: {message}",
256
+ "running": " {tool_name}: {message}",
257
+ "finished": "✅ {tool_name}: {message}",
258
+ "failed": "❌ {tool_name}: {message}",
257
259
  }
258
260
  )
259
261
  reporter = ToolProgressReporter(chat_service, config=custom_config)
@@ -275,19 +277,21 @@ class TestToolProgressReporterConfig:
275
277
 
276
278
  @pytest.mark.ai
277
279
  @pytest.mark.asyncio
278
- async def test_config__skips_states_not_in_template__when_state_excluded(
280
+ async def test_config__skips_states_with_empty_template__when_state_hidden(
279
281
  self, chat_service, tool_call
280
282
  ) -> None:
281
283
  """
282
- Purpose: Verify that states not in the config mapping are not displayed.
284
+ Purpose: Verify that states with empty string templates are not displayed.
283
285
  Why this matters: Allows selective display of only certain states (e.g., hide STARTED).
284
- Setup summary: Create config excluding RUNNING state, verify message is not displayed.
286
+ Setup summary: Create config with empty string for RUNNING state, verify message is not displayed.
285
287
  """
286
288
  # Arrange
287
289
  custom_config = ToolProgressReporterConfig(
288
290
  state_to_display_template={
289
- ProgressState.FINISHED: "✅ {tool_name}: {message}",
290
- # RUNNING state is intentionally excluded
291
+ "started": "",
292
+ "running": "", # Empty string hides RUNNING state
293
+ "finished": "✅ {tool_name}: {message}",
294
+ "failed": "❌ {tool_name}: {message}",
291
295
  }
292
296
  )
293
297
  reporter = ToolProgressReporter(chat_service, config=custom_config)
@@ -304,7 +308,7 @@ class TestToolProgressReporterConfig:
304
308
  chat_service.modify_assistant_message_async.assert_called()
305
309
  call_args = chat_service.modify_assistant_message_async.call_args
306
310
  content = call_args.kwargs["content"]
307
- # Content should not contain the message since RUNNING is excluded
311
+ # Content should not contain the message since RUNNING template is empty
308
312
  assert "Processing" not in content
309
313
  assert "Test Tool" not in content
310
314
 
@@ -321,8 +325,10 @@ class TestToolProgressReporterConfig:
321
325
  # Arrange
322
326
  custom_config = ToolProgressReporterConfig(
323
327
  state_to_display_template={
324
- ProgressState.RUNNING: "▶️ {tool_name} - {message}",
325
- ProgressState.FINISHED: " {tool_name} - {message}",
328
+ "started": " {tool_name} - {message}",
329
+ "running": "▶️ {tool_name} - {message}",
330
+ "finished": "✓ {tool_name} - {message}",
331
+ "failed": "✗ {tool_name} - {message}",
326
332
  }
327
333
  )
328
334
  reporter = ToolProgressReporter(chat_service, config=custom_config)
@@ -355,14 +361,17 @@ class TestToolProgressReporterConfig:
355
361
  self, chat_service, tool_call
356
362
  ) -> None:
357
363
  """
358
- Purpose: Verify selective state display shows only FINISHED when it's the only state configured.
364
+ Purpose: Verify selective state display shows only FINISHED when other states use empty templates.
359
365
  Why this matters: Use case where user only wants final results, not intermediate steps.
360
- Setup summary: Configure only FINISHED state, send STARTED and FINISHED, verify only FINISHED appears.
366
+ Setup summary: Configure only FINISHED with content, send STARTED and FINISHED, verify only FINISHED appears.
361
367
  """
362
368
  # Arrange
363
369
  custom_config = ToolProgressReporterConfig(
364
370
  state_to_display_template={
365
- ProgressState.FINISHED: "Done: {tool_name} - {message}",
371
+ "started": "", # Empty template hides STARTED
372
+ "running": "", # Empty template hides RUNNING
373
+ "finished": "Done: {tool_name} - {message}",
374
+ "failed": "Failed: {tool_name} - {message}",
366
375
  }
367
376
  )
368
377
  reporter = ToolProgressReporter(chat_service, config=custom_config)
@@ -399,16 +408,23 @@ class TestToolProgressReporterConfig:
399
408
 
400
409
  @pytest.mark.ai
401
410
  @pytest.mark.asyncio
402
- async def test_config__handles_empty_template_dict__when_all_states_excluded(
411
+ async def test_config__handles_all_empty_templates__when_all_states_hidden(
403
412
  self, chat_service, tool_call
404
413
  ) -> None:
405
414
  """
406
- Purpose: Verify that an empty template dict results in no messages being displayed.
415
+ Purpose: Verify that all empty string templates result in no messages being displayed.
407
416
  Why this matters: Edge case handling and allows disabling all progress display.
408
- Setup summary: Create config with empty dict, verify no tool messages appear.
417
+ Setup summary: Create config with all empty templates, verify no tool messages appear.
409
418
  """
410
419
  # Arrange
411
- custom_config = ToolProgressReporterConfig(state_to_display_template={})
420
+ custom_config = ToolProgressReporterConfig(
421
+ state_to_display_template={
422
+ "started": "",
423
+ "running": "",
424
+ "finished": "",
425
+ "failed": "",
426
+ }
427
+ )
412
428
  reporter = ToolProgressReporter(chat_service, config=custom_config)
413
429
 
414
430
  # Act
@@ -1,7 +1,7 @@
1
1
  import asyncio
2
2
  from abc import ABC, abstractmethod
3
3
  from logging import Logger, getLogger
4
- from typing import override
4
+ from typing import Literal, override
5
5
 
6
6
  from openai.types.chat import (
7
7
  ChatCompletionNamedToolChoiceParam,
@@ -70,6 +70,24 @@ class BaseToolManager(ABC):
70
70
  def get_exclusive_tools(self) -> list[str]:
71
71
  raise NotImplementedError()
72
72
 
73
+ @abstractmethod
74
+ def filter_tool_calls(
75
+ self,
76
+ tool_calls: list[LanguageModelFunction],
77
+ tool_types: list[Literal["mcp", "internal", "subagent"]],
78
+ ) -> list[LanguageModelFunction]:
79
+ """
80
+ Filter tool calls by their types.
81
+
82
+ Args:
83
+ tool_calls: List of tool calls to filter
84
+ tool_types: List of tool types to include (e.g., ["mcp", "internal", "subagent"])
85
+
86
+ Returns:
87
+ Filtered list of tool calls matching the specified types
88
+ """
89
+ raise NotImplementedError()
90
+
73
91
  def does_a_tool_take_control(self, tool_calls: list[LanguageModelFunction]) -> bool:
74
92
  for tool_call in tool_calls:
75
93
  tool_instance = self.get_tool_by_name(tool_call.name)
@@ -266,7 +284,7 @@ class ToolManager(BaseToolManager):
266
284
  )
267
285
 
268
286
  # Build internal tools from configurations
269
- internal_tools = [
287
+ self._internal_tools = [
270
288
  ToolFactory.build_tool_with_settings(
271
289
  t.name,
272
290
  t,
@@ -278,9 +296,9 @@ class ToolManager(BaseToolManager):
278
296
  ]
279
297
 
280
298
  # Get MCP tools (these are already properly instantiated)
281
- mcp_tools = self._mcp_manager.get_all_mcp_tools()
299
+ self._mcp_tools = self._mcp_manager.get_all_mcp_tools()
282
300
  # Combine both types of tools
283
- self.available_tools = internal_tools + mcp_tools + sub_agents
301
+ self.available_tools = self._internal_tools + self._mcp_tools + sub_agents
284
302
  self._sub_agents = sub_agents
285
303
 
286
304
  for t in self.available_tools:
@@ -301,6 +319,29 @@ class ToolManager(BaseToolManager):
301
319
 
302
320
  self._tools.append(t)
303
321
 
322
+ @override
323
+ def filter_tool_calls(
324
+ self,
325
+ tool_calls: list[LanguageModelFunction],
326
+ tool_types: list[Literal["mcp", "internal", "subagent"]],
327
+ ) -> list[LanguageModelFunction]:
328
+ filtered_calls = []
329
+
330
+ # Build sets for efficient lookup
331
+ internal_tool_names = {tool.name for tool in self._internal_tools}
332
+ mcp_tool_names = {tool.name for tool in self._mcp_tools}
333
+ sub_agent_names = {tool.name for tool in self._sub_agents}
334
+
335
+ for tool_call in tool_calls:
336
+ if "internal" in tool_types and tool_call.name in internal_tool_names:
337
+ filtered_calls.append(tool_call)
338
+ elif "mcp" in tool_types and tool_call.name in mcp_tool_names:
339
+ filtered_calls.append(tool_call)
340
+ elif "subagent" in tool_types and tool_call.name in sub_agent_names:
341
+ filtered_calls.append(tool_call)
342
+
343
+ return filtered_calls
344
+
304
345
  @property
305
346
  def sub_agents(self) -> list[SubAgentTool]:
306
347
  return self._sub_agents
@@ -416,6 +457,15 @@ class ResponsesApiToolManager(BaseToolManager):
416
457
  builtin_tools=builtin_tools,
417
458
  )
418
459
 
460
+ @override
461
+ def filter_tool_calls(
462
+ self,
463
+ tool_calls: list[LanguageModelFunction],
464
+ tool_types: list[Literal["mcp", "internal", "subagent"]],
465
+ ) -> list[LanguageModelFunction]:
466
+ """Delegate filtering to the underlying tool manager."""
467
+ return self._tool_manager.filter_tool_calls(tool_calls, tool_types)
468
+
419
469
  @override
420
470
  def get_tool_by_name(self, name: str) -> Tool | None:
421
471
  return self._tool_manager.get_tool_by_name(name)
@@ -2,7 +2,7 @@ import re
2
2
  from datetime import datetime
3
3
  from enum import StrEnum
4
4
  from functools import wraps
5
- from typing import Protocol
5
+ from typing import Protocol, TypedDict
6
6
 
7
7
  from pydantic import BaseModel, Field
8
8
 
@@ -33,39 +33,37 @@ class ToolExecutionStatus(BaseModel):
33
33
  timestamp: datetime = Field(default_factory=datetime.now)
34
34
 
35
35
 
36
- _DEFAULT_STATE_TO_DISPLAY_TEMPLATE = {
37
- ProgressState.FINISHED: "{arrow}**{{tool_name}}** 🟢: {{message}}".format(
38
- arrow=ARROW
39
- ),
40
- ProgressState.RUNNING: "{arrow}**{{tool_name}}** 🟡: {{message}}".format(
41
- arrow=ARROW
42
- ),
43
- ProgressState.FAILED: "{arrow}**{{tool_name}}** 🔴: {{message}}".format(
44
- arrow=ARROW
45
- ),
46
- ProgressState.STARTED: "{arrow}**{{tool_name}}** ⚪: {{message}}".format(
47
- arrow=ARROW
48
- ),
36
+ class StateToDisplayTemplate(TypedDict):
37
+ started: str
38
+ running: str
39
+ failed: str
40
+ finished: str
41
+
42
+
43
+ _DEFAULT_STATE_TO_DISPLAY_TEMPLATE: StateToDisplayTemplate = {
44
+ "started": "{arrow}**{{tool_name}}** ⚪: {{message}}".format(arrow=ARROW),
45
+ "running": "{arrow}**{{tool_name}}** 🟡: {{message}}".format(arrow=ARROW),
46
+ "finished": "{arrow}**{{tool_name}}** 🟢: {{message}}".format(arrow=ARROW),
47
+ "failed": "{arrow}**{{tool_name}}** 🔴: {{message}}".format(arrow=ARROW),
49
48
  }
50
49
 
51
50
 
52
51
  state_to_display_template_description = """
53
- A mapping progress states to display templates.
54
- The display template is a string that will be used to display the progress status.
55
- The template can contain the following placeholders:
52
+ Display templates for the different progress states.
53
+ The template is a string that will be used to display the progress status.
54
+ It can contain the following placeholders:
56
55
  - `{tool_name}`: The name of the tool
57
56
  - `{message}`: The message to display (sent by the tool)
58
-
59
- If a state is not present in the mapping, then updates for that state will not be displayed.
60
57
  """.strip()
61
58
 
62
59
 
63
60
  class ToolProgressReporterConfig(BaseModel):
64
61
  model_config = get_configuration_dict()
65
62
 
66
- state_to_display_template: dict[ProgressState, str] = Field(
63
+ state_to_display_template: StateToDisplayTemplate = Field(
67
64
  default=_DEFAULT_STATE_TO_DISPLAY_TEMPLATE,
68
65
  description=state_to_display_template_description,
66
+ title="Display Templates",
69
67
  )
70
68
 
71
69
 
@@ -188,12 +186,15 @@ class ToolProgressReporter:
188
186
  def _get_tool_status_display_message(
189
187
  self, name: str, message: str, state: ProgressState
190
188
  ) -> str | None:
191
- if state in self._config.state_to_display_template:
192
- return self._config.state_to_display_template[state].format(
193
- tool_name=name,
194
- message=message,
195
- )
196
- return None
189
+ display_message = self._config.state_to_display_template[state.value].format(
190
+ tool_name=name,
191
+ message=message,
192
+ )
193
+ # Don't display empty messages
194
+ if display_message.strip() == "":
195
+ return None
196
+
197
+ return display_message
197
198
 
198
199
 
199
200
  class ToolWithToolProgressReporter(Protocol):
File without changes