unique_toolkit 1.45.2__tar.gz → 1.45.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 (251) hide show
  1. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/CHANGELOG.md +3 -0
  2. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/PKG-INFO +4 -1
  3. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/pyproject.toml +1 -1
  4. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/a2a/tool/service.py +143 -81
  5. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/mcp/tool_wrapper.py +48 -3
  6. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/LICENSE +0 -0
  7. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/README.md +0 -0
  8. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/__init__.py +0 -0
  9. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/_common/_base_service.py +0 -0
  10. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/_common/_time_utils.py +0 -0
  11. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/_common/api_calling/human_verification_manager.py +0 -0
  12. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/_common/base_model_type_attribute.py +0 -0
  13. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/_common/chunk_relevancy_sorter/config.py +0 -0
  14. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/_common/chunk_relevancy_sorter/exception.py +0 -0
  15. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/_common/chunk_relevancy_sorter/schemas.py +0 -0
  16. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/_common/chunk_relevancy_sorter/service.py +0 -0
  17. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/_common/chunk_relevancy_sorter/tests/test_service.py +0 -0
  18. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/_common/default_language_model.py +0 -0
  19. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/_common/docx_generator/__init__.py +0 -0
  20. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/_common/docx_generator/config.py +0 -0
  21. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/_common/docx_generator/schemas.py +0 -0
  22. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/_common/docx_generator/service.py +0 -0
  23. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/_common/docx_generator/template/Doc Template.docx +0 -0
  24. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/_common/endpoint_builder.py +0 -0
  25. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/_common/endpoint_requestor.py +0 -0
  26. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/_common/exception.py +0 -0
  27. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/_common/execution.py +0 -0
  28. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/_common/experimental/endpoint_builder.py +0 -0
  29. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/_common/experimental/endpoint_requestor.py +0 -0
  30. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/_common/experimental/write_up_agent/README.md +0 -0
  31. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/_common/experimental/write_up_agent/__init__.py +0 -0
  32. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/_common/experimental/write_up_agent/agent.py +0 -0
  33. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/_common/experimental/write_up_agent/config.py +0 -0
  34. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/_common/experimental/write_up_agent/examples/data.csv +0 -0
  35. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/_common/experimental/write_up_agent/examples/example_usage.py +0 -0
  36. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/_common/experimental/write_up_agent/schemas.py +0 -0
  37. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/_common/experimental/write_up_agent/services/__init__.py +0 -0
  38. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/__init__.py +0 -0
  39. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/exceptions.py +0 -0
  40. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/service.py +0 -0
  41. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/utils.py +0 -0
  42. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/__init__.py +0 -0
  43. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/config.py +0 -0
  44. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/exceptions.py +0 -0
  45. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/config.py +0 -0
  46. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/system_prompt.j2 +0 -0
  47. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/user_prompt.j2 +0 -0
  48. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/service.py +0 -0
  49. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/__init__.py +0 -0
  50. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/default_template.j2 +0 -0
  51. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/exceptions.py +0 -0
  52. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/service.py +0 -0
  53. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/utils.py +0 -0
  54. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/_common/experimental/write_up_agent/utils.py +0 -0
  55. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/_common/feature_flags/schema.py +0 -0
  56. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/_common/pydantic/rjsf_tags.py +0 -0
  57. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/_common/pydantic_helpers.py +0 -0
  58. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/_common/referencing.py +0 -0
  59. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/_common/string_utilities.py +0 -0
  60. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/_common/tests/test_referencing.py +0 -0
  61. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/_common/tests/test_string_utilities.py +0 -0
  62. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/_common/token/image_token_counting.py +0 -0
  63. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/_common/token/token_counting.py +0 -0
  64. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/_common/utils/__init__.py +0 -0
  65. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/_common/utils/files.py +0 -0
  66. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/_common/utils/image/encode.py +0 -0
  67. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/_common/utils/jinja/helpers.py +0 -0
  68. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/_common/utils/jinja/render.py +0 -0
  69. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/_common/utils/jinja/schema.py +0 -0
  70. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/_common/utils/jinja/utils.py +0 -0
  71. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/_common/utils/structured_output/__init__.py +0 -0
  72. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/_common/utils/structured_output/schema.py +0 -0
  73. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/_common/utils/write_configuration.py +0 -0
  74. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/_common/validate_required_values.py +0 -0
  75. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/_common/validators.py +0 -0
  76. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/__init__.py +0 -0
  77. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/debug_info_manager/debug_info_manager.py +0 -0
  78. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/debug_info_manager/test/test_debug_info_manager.py +0 -0
  79. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/evaluation/config.py +0 -0
  80. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/evaluation/context_relevancy/prompts.py +0 -0
  81. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/evaluation/context_relevancy/schema.py +0 -0
  82. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/evaluation/context_relevancy/service.py +0 -0
  83. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/evaluation/evaluation_manager.py +0 -0
  84. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/evaluation/exception.py +0 -0
  85. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/evaluation/hallucination/constants.py +0 -0
  86. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/evaluation/hallucination/hallucination_evaluation.py +0 -0
  87. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/evaluation/hallucination/prompts.py +0 -0
  88. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/evaluation/hallucination/service.py +0 -0
  89. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/evaluation/hallucination/utils.py +0 -0
  90. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/evaluation/output_parser.py +0 -0
  91. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/evaluation/schemas.py +0 -0
  92. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/evaluation/tests/test_context_relevancy_service.py +0 -0
  93. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/evaluation/tests/test_output_parser.py +0 -0
  94. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/feature_flags/__init__.py +0 -0
  95. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/feature_flags/feature_flags.py +0 -0
  96. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/history_manager/history_construction_with_contents.py +0 -0
  97. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/history_manager/history_manager.py +0 -0
  98. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/history_manager/loop_token_reducer.py +0 -0
  99. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/history_manager/utils.py +0 -0
  100. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/loop_runner/__init__.py +0 -0
  101. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/loop_runner/_iteration_handler_utils.py +0 -0
  102. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/loop_runner/_responses_iteration_handler_utils.py +0 -0
  103. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/loop_runner/_responses_stream_handler_utils.py +0 -0
  104. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/loop_runner/_stream_handler_utils.py +0 -0
  105. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/loop_runner/base.py +0 -0
  106. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/loop_runner/middleware/__init__.py +0 -0
  107. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/loop_runner/middleware/planning/__init__.py +0 -0
  108. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/loop_runner/middleware/planning/planning.py +0 -0
  109. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/loop_runner/middleware/planning/schema.py +0 -0
  110. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/loop_runner/runners/__init__.py +0 -0
  111. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/loop_runner/runners/basic.py +0 -0
  112. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/loop_runner/runners/qwen/__init__.py +0 -0
  113. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/loop_runner/runners/qwen/helpers.py +0 -0
  114. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/loop_runner/runners/qwen/qwen_runner.py +0 -0
  115. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/message_log_manager/__init__.py +0 -0
  116. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/message_log_manager/service.py +0 -0
  117. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/postprocessor/postprocessor_manager.py +0 -0
  118. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/reference_manager/reference_manager.py +0 -0
  119. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/responses_api/__init__.py +0 -0
  120. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/responses_api/postprocessors/code_display.py +0 -0
  121. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/responses_api/postprocessors/generated_files.py +0 -0
  122. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/responses_api/stream_handler.py +0 -0
  123. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/short_term_memory_manager/persistent_short_term_memory_manager.py +0 -0
  124. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/thinking_manager/thinking_manager.py +0 -0
  125. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/__init__.py +0 -0
  126. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/a2a/__init__.py +0 -0
  127. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/a2a/config.py +0 -0
  128. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/a2a/evaluation/__init__.py +0 -0
  129. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/a2a/evaluation/_utils.py +0 -0
  130. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/a2a/evaluation/config.py +0 -0
  131. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/a2a/evaluation/evaluator.py +0 -0
  132. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/a2a/evaluation/summarization_user_message.j2 +0 -0
  133. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/a2a/manager.py +0 -0
  134. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/a2a/postprocessing/__init__.py +0 -0
  135. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/a2a/postprocessing/_display_utils.py +0 -0
  136. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/a2a/postprocessing/_ref_utils.py +0 -0
  137. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/a2a/postprocessing/config.py +0 -0
  138. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/a2a/postprocessing/display.py +0 -0
  139. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/a2a/postprocessing/references.py +0 -0
  140. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display.py +0 -0
  141. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display_utils.py +0 -0
  142. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_ref_utils.py +0 -0
  143. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/a2a/prompts.py +0 -0
  144. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/a2a/response_watcher/__init__.py +0 -0
  145. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/a2a/response_watcher/service.py +0 -0
  146. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/a2a/tool/__init__.py +0 -0
  147. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/a2a/tool/_memory.py +0 -0
  148. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/a2a/tool/_schema.py +0 -0
  149. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/a2a/tool/config.py +0 -0
  150. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/a2a/tool/test/test_service_utils.py +0 -0
  151. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/agent_chunks_hanlder.py +0 -0
  152. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/config.py +0 -0
  153. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/factory.py +0 -0
  154. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/mcp/__init__.py +0 -0
  155. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/mcp/manager.py +0 -0
  156. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/mcp/models.py +0 -0
  157. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/openai_builtin/__init__.py +0 -0
  158. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/openai_builtin/base.py +0 -0
  159. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/__init__.py +0 -0
  160. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/config.py +0 -0
  161. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/service.py +0 -0
  162. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/openai_builtin/manager.py +0 -0
  163. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/schemas.py +0 -0
  164. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/test/test_mcp_manager.py +0 -0
  165. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/test/test_tool_progress_reporter.py +0 -0
  166. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/tool.py +0 -0
  167. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/tool_manager.py +0 -0
  168. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/tool_progress_reporter.py +0 -0
  169. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/utils/__init__.py +0 -0
  170. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/utils/source_handling/__init__.py +0 -0
  171. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/utils/source_handling/schema.py +0 -0
  172. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/utils/source_handling/source_formatting.py +0 -0
  173. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/utils/source_handling/tests/test_source_formatting.py +0 -0
  174. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic_table/__init__.py +0 -0
  175. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic_table/schemas.py +0 -0
  176. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/agentic_table/service.py +0 -0
  177. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/app/__init__.py +0 -0
  178. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/app/dev_util.py +0 -0
  179. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/app/fast_api_factory.py +0 -0
  180. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/app/init_logging.py +0 -0
  181. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/app/init_sdk.py +0 -0
  182. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/app/performance/async_tasks.py +0 -0
  183. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/app/performance/async_wrapper.py +0 -0
  184. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/app/schemas.py +0 -0
  185. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/app/unique_settings.py +0 -0
  186. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/app/verification.py +0 -0
  187. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/app/webhook.py +0 -0
  188. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/chat/__init__.py +0 -0
  189. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/chat/constants.py +0 -0
  190. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/chat/deprecated/service.py +0 -0
  191. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/chat/functions.py +0 -0
  192. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/chat/rendering.py +0 -0
  193. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/chat/responses_api.py +0 -0
  194. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/chat/schemas.py +0 -0
  195. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/chat/service.py +0 -0
  196. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/chat/state.py +0 -0
  197. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/chat/utils.py +0 -0
  198. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/content/__init__.py +0 -0
  199. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/content/constants.py +0 -0
  200. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/content/functions.py +0 -0
  201. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/content/schemas.py +0 -0
  202. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/content/service.py +0 -0
  203. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/content/smart_rules.py +0 -0
  204. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/content/utils.py +0 -0
  205. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/data_extraction/README.md +0 -0
  206. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/data_extraction/__init__.py +0 -0
  207. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/data_extraction/augmented/__init__.py +0 -0
  208. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/data_extraction/augmented/service.py +0 -0
  209. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/data_extraction/base.py +0 -0
  210. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/data_extraction/basic/__init__.py +0 -0
  211. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/data_extraction/basic/config.py +0 -0
  212. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/data_extraction/basic/prompt.py +0 -0
  213. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/data_extraction/basic/service.py +0 -0
  214. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/embedding/__init__.py +0 -0
  215. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/embedding/constants.py +0 -0
  216. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/embedding/functions.py +0 -0
  217. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/embedding/schemas.py +0 -0
  218. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/embedding/service.py +0 -0
  219. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/embedding/utils.py +0 -0
  220. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/framework_utilities/__init__.py +0 -0
  221. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/framework_utilities/langchain/__init__.py +0 -0
  222. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/framework_utilities/langchain/client.py +0 -0
  223. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/framework_utilities/langchain/history.py +0 -0
  224. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/framework_utilities/openai/__init__.py +0 -0
  225. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/framework_utilities/openai/client.py +0 -0
  226. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/framework_utilities/openai/message_builder.py +0 -0
  227. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/framework_utilities/utils.py +0 -0
  228. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/language_model/__init__.py +0 -0
  229. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/language_model/_responses_api_utils.py +0 -0
  230. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/language_model/builder.py +0 -0
  231. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/language_model/constants.py +0 -0
  232. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/language_model/default_language_model.py +0 -0
  233. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/language_model/functions.py +0 -0
  234. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/language_model/infos.py +0 -0
  235. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/language_model/prompt.py +0 -0
  236. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/language_model/reference.py +0 -0
  237. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/language_model/schemas.py +0 -0
  238. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/language_model/service.py +0 -0
  239. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/language_model/utils.py +0 -0
  240. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/protocols/support.py +0 -0
  241. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/services/__init__.py +0 -0
  242. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/services/chat_service.py +0 -0
  243. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/services/knowledge_base.py +0 -0
  244. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/short_term_memory/__init__.py +0 -0
  245. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/short_term_memory/constants.py +0 -0
  246. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/short_term_memory/functions.py +0 -0
  247. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/short_term_memory/schemas.py +0 -0
  248. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/short_term_memory/service.py +0 -0
  249. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/smart_rules/__init__.py +0 -0
  250. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/smart_rules/compile.py +0 -0
  251. {unique_toolkit-1.45.2 → unique_toolkit-1.45.3}/unique_toolkit/test_utilities/events.py +0 -0
@@ -5,6 +5,9 @@ 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.45.3] - 2026-01-26
9
+ - Include message log update in subagents and MCP tools
10
+
8
11
  ## [1.45.2] - 2026-01-26
9
12
  - Make FileMimeType backwards compatible with legacy extensions
10
13
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: unique_toolkit
3
- Version: 1.45.2
3
+ Version: 1.45.3
4
4
  Summary:
5
5
  License: Proprietary
6
6
  Author: Cedric Klinkert
@@ -125,6 +125,9 @@ All notable changes to this project will be documented in this file.
125
125
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
126
126
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
127
127
 
128
+ ## [1.45.3] - 2026-01-26
129
+ - Include message log update in subagents and MCP tools
130
+
128
131
  ## [1.45.2] - 2026-01-26
129
132
  - Make FileMimeType backwards compatible with legacy extensions
130
133
 
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "unique_toolkit"
3
- version = "1.45.2"
3
+ version = "1.45.3"
4
4
  description = ""
5
5
  authors = [
6
6
  "Cedric Klinkert <cedric.klinkert@unique.ch>",
@@ -17,6 +17,7 @@ from unique_toolkit._common.referencing import (
17
17
  )
18
18
  from unique_toolkit._common.utils.jinja.render import render_template
19
19
  from unique_toolkit.agentic.evaluation.schemas import EvaluationMetricName
20
+ from unique_toolkit.agentic.feature_flags import feature_flags
20
21
  from unique_toolkit.agentic.tools.a2a.response_watcher import SubAgentResponseWatcher
21
22
  from unique_toolkit.agentic.tools.a2a.tool._memory import (
22
23
  get_sub_agent_short_term_memory_manager,
@@ -39,6 +40,7 @@ from unique_toolkit.agentic.tools.tool_progress_reporter import (
39
40
  ToolProgressReporter,
40
41
  )
41
42
  from unique_toolkit.app import ChatEvent
43
+ from unique_toolkit.chat.schemas import MessageLog, MessageLogStatus
42
44
  from unique_toolkit.content import ContentChunk
43
45
  from unique_toolkit.language_model import (
44
46
  LanguageModelFunction,
@@ -151,107 +153,144 @@ class SubAgentTool(Tool[SubAgentToolConfig]):
151
153
 
152
154
  @override
153
155
  async def run(self, tool_call: LanguageModelFunction) -> ToolCallResponse:
154
- if self.config.tool_input_json_schema is not None:
155
- tool_input = json.dumps(tool_call.arguments)
156
- else:
157
- tool_input = SubAgentToolInput.model_validate(
158
- tool_call.arguments
159
- ).user_message
156
+ active_message_log: MessageLog | None = None
160
157
 
161
- timestamp = datetime.now()
158
+ try:
159
+ if self.config.tool_input_json_schema is not None:
160
+ tool_input = json.dumps(tool_call.arguments)
161
+ else:
162
+ tool_input = SubAgentToolInput.model_validate(
163
+ tool_call.arguments
164
+ ).user_message
162
165
 
163
- if self._lock.locked():
164
- await self._notify_progress(
165
- tool_call=tool_call,
166
- message=f"Waiting for another run of `{self.display_name()}` to finish",
167
- state=ProgressState.STARTED,
168
- )
166
+ timestamp = datetime.now()
169
167
 
170
- # When reusing the chat id, executing the sub agent in parrallel leads to race conditions and undefined behavior.
171
- # To avoid this, we use a lock to serialize the execution of the same sub agent.
172
- context = self._lock if self.config.reuse_chat else contextlib.nullcontext()
168
+ if self._lock.locked():
169
+ await self._notify_progress(
170
+ tool_call=tool_call,
171
+ message=f"Waiting for another run of `{self.display_name()}` to finish",
172
+ state=ProgressState.STARTED,
173
+ )
173
174
 
174
- async with context:
175
- sequence_number = self._sequence_number
176
- self._sequence_number += 1
175
+ active_message_log = self._create_or_update_message_log(
176
+ progress_message="_Waiting for another run of this sub agent to finish_",
177
+ active_message_log=active_message_log,
178
+ )
177
179
 
178
- await self._notify_progress(
179
- tool_call=tool_call,
180
- message=tool_input,
181
- state=ProgressState.RUNNING,
182
- )
180
+ # When reusing the chat id, executing the sub agent in parrallel leads to race conditions and undefined behavior.
181
+ # To avoid this, we use a lock to serialize the execution of the same sub agent.
182
+ context = self._lock if self.config.reuse_chat else contextlib.nullcontext()
183
183
 
184
- # Check if there is a saved chat id in short term memory
185
- chat_id = await self._get_chat_id()
184
+ async with context:
185
+ sequence_number = self._sequence_number
186
+ self._sequence_number += 1
186
187
 
187
- response = await self._execute_and_handle_timeout(
188
- tool_user_message=tool_input,
189
- chat_id=chat_id,
190
- tool_call=tool_call,
191
- )
188
+ await self._notify_progress(
189
+ tool_call=tool_call,
190
+ message=tool_input,
191
+ state=ProgressState.RUNNING,
192
+ )
192
193
 
193
- self._should_run_evaluation |= (
194
- response["assessment"] is not None and len(response["assessment"]) > 0
195
- ) # Run evaluation if any sub agent returned an assessment
194
+ active_message_log = self._create_or_update_message_log(
195
+ progress_message=f"_Executing sub agent with input: {tool_input}_",
196
+ active_message_log=active_message_log,
197
+ )
196
198
 
197
- self._notify_watcher(response, sequence_number, timestamp)
199
+ # Check if there is a saved chat id in short term memory
200
+ chat_id = await self._get_chat_id()
198
201
 
199
- if chat_id is None:
200
- await self._save_chat_id(response["chatId"])
202
+ response = await self._execute_and_handle_timeout(
203
+ tool_user_message=tool_input,
204
+ chat_id=chat_id,
205
+ tool_call=tool_call,
206
+ active_message_log=active_message_log,
207
+ )
201
208
 
202
- if response["text"] is None:
203
- raise ValueError("No response returned from sub agent")
209
+ self._should_run_evaluation |= (
210
+ response["assessment"] is not None
211
+ and len(response["assessment"]) > 0
212
+ ) # Run evaluation if any sub agent returned an assessment
204
213
 
205
- has_refs = False
206
- content = ""
207
- content_chunks = None
208
- if self.config.returns_content_chunks:
209
- content_chunks = _ContentChunkList.validate_json(response["text"])
210
- else:
211
- has_refs = self.config.use_sub_agent_references and _response_has_refs(
212
- response
213
- )
214
- content = response["text"]
215
- if has_refs:
216
- refs = response["references"]
217
- assert refs is not None # Checked in _response_has_refs
218
- content = _prepare_sub_agent_response_refs(
219
- response=content,
214
+ self._notify_watcher(response, sequence_number, timestamp)
215
+
216
+ if chat_id is None:
217
+ await self._save_chat_id(response["chatId"])
218
+
219
+ if response["text"] is None:
220
+ raise ValueError("No response returned from sub agent")
221
+
222
+ has_refs = False
223
+ content = ""
224
+ content_chunks = None
225
+ if self.config.returns_content_chunks:
226
+ content_chunks = _ContentChunkList.validate_json(response["text"])
227
+ else:
228
+ has_refs = (
229
+ self.config.use_sub_agent_references
230
+ and _response_has_refs(response)
231
+ )
232
+ content = response["text"]
233
+ if has_refs:
234
+ refs = response["references"]
235
+ assert refs is not None # Checked in _response_has_refs
236
+ content = _prepare_sub_agent_response_refs(
237
+ response=content,
238
+ name=self.name,
239
+ sequence_number=sequence_number,
240
+ refs=refs,
241
+ )
242
+ content = _remove_extra_refs(content, refs=refs)
243
+ else:
244
+ content = _remove_extra_refs(content, refs=[])
245
+
246
+ system_reminders = []
247
+ if not self.config.returns_content_chunks:
248
+ system_reminders = _get_sub_agent_system_reminders(
249
+ response=response["text"],
250
+ configs=self.config.system_reminders_config,
220
251
  name=self.name,
252
+ display_name=self.display_name(),
221
253
  sequence_number=sequence_number,
222
- refs=refs,
254
+ has_refs=has_refs,
223
255
  )
224
- content = _remove_extra_refs(content, refs=refs)
225
- else:
226
- content = _remove_extra_refs(content, refs=[])
227
-
228
- system_reminders = []
229
- if not self.config.returns_content_chunks:
230
- system_reminders = _get_sub_agent_system_reminders(
231
- response=response["text"],
232
- configs=self.config.system_reminders_config,
233
- name=self.name,
234
- display_name=self.display_name(),
235
- sequence_number=sequence_number,
236
- has_refs=has_refs,
256
+
257
+ await self._notify_progress(
258
+ tool_call=tool_call,
259
+ message=tool_input,
260
+ state=ProgressState.FINISHED,
237
261
  )
238
262
 
263
+ # Update message log entry to completed
264
+ active_message_log = self._create_or_update_message_log(
265
+ progress_message=f"_Completed sub agent with input: {tool_input}_",
266
+ status=MessageLogStatus.COMPLETED,
267
+ active_message_log=active_message_log,
268
+ )
269
+
270
+ return ToolCallResponse(
271
+ id=tool_call.id,
272
+ name=tool_call.name,
273
+ content=_format_response(
274
+ tool_name=self.name,
275
+ text=content,
276
+ system_reminders=system_reminders,
277
+ ),
278
+ content_chunks=content_chunks,
279
+ )
280
+ except TimeoutError as e:
281
+ raise e
282
+ except Exception as e:
239
283
  await self._notify_progress(
240
284
  tool_call=tool_call,
241
- message=tool_input,
242
- state=ProgressState.FINISHED,
285
+ message="Error while running sub agent",
286
+ state=ProgressState.FAILED,
243
287
  )
244
-
245
- return ToolCallResponse(
246
- id=tool_call.id,
247
- name=tool_call.name,
248
- content=_format_response(
249
- tool_name=self.name,
250
- text=content,
251
- system_reminders=system_reminders,
252
- ),
253
- content_chunks=content_chunks,
288
+ active_message_log = self._create_or_update_message_log(
289
+ progress_message="_Error while running sub agent_",
290
+ status=MessageLogStatus.FAILED,
291
+ active_message_log=active_message_log,
254
292
  )
293
+ raise e
255
294
 
256
295
  async def _get_chat_id(self) -> str | None:
257
296
  if not self.config.reuse_chat:
@@ -282,7 +321,10 @@ class SubAgentTool(Tool[SubAgentToolConfig]):
282
321
  message: str,
283
322
  state: ProgressState,
284
323
  ) -> None:
285
- if self.tool_progress_reporter is not None:
324
+ if (
325
+ self.tool_progress_reporter is not None
326
+ and not feature_flags.is_new_answers_ui_enabled(self._company_id)
327
+ ):
286
328
  await self.tool_progress_reporter.notify_from_tool_call(
287
329
  tool_call=tool_call,
288
330
  name=self._display_name,
@@ -290,6 +332,20 @@ class SubAgentTool(Tool[SubAgentToolConfig]):
290
332
  state=state,
291
333
  )
292
334
 
335
+ def _create_or_update_message_log(
336
+ self,
337
+ *,
338
+ progress_message: str | None = None,
339
+ status: MessageLogStatus = MessageLogStatus.RUNNING,
340
+ active_message_log: MessageLog | None = None,
341
+ ) -> MessageLog | None:
342
+ return self._message_step_logger.create_or_update_message_log(
343
+ active_message_log=active_message_log,
344
+ header=self._display_name,
345
+ progress_message=progress_message,
346
+ status=status,
347
+ )
348
+
293
349
  def _notify_watcher(
294
350
  self,
295
351
  response: unique_sdk.Space.Message,
@@ -316,6 +372,7 @@ class SubAgentTool(Tool[SubAgentToolConfig]):
316
372
  tool_user_message: str,
317
373
  chat_id: str | None,
318
374
  tool_call: LanguageModelFunction,
375
+ active_message_log: MessageLog | None = None,
319
376
  ) -> unique_sdk.Space.Message:
320
377
  try:
321
378
  return await send_message_and_wait_for_completion(
@@ -335,6 +392,11 @@ class SubAgentTool(Tool[SubAgentToolConfig]):
335
392
  message="Timeout while waiting for response from sub agent.",
336
393
  state=ProgressState.FAILED,
337
394
  )
395
+ active_message_log = self._create_or_update_message_log(
396
+ progress_message="_Timeout while waiting for response from sub agent_",
397
+ status=MessageLogStatus.FAILED,
398
+ active_message_log=active_message_log,
399
+ )
338
400
 
339
401
  raise TimeoutError(
340
402
  "Timeout while waiting for response from sub agent. The user should consider increasing the max wait time.",
@@ -5,6 +5,7 @@ from typing import Any, Dict
5
5
  import unique_sdk
6
6
 
7
7
  from unique_toolkit.agentic.evaluation.schemas import EvaluationMetricName
8
+ from unique_toolkit.agentic.feature_flags import feature_flags
8
9
  from unique_toolkit.agentic.tools.mcp.models import MCPToolConfig
9
10
  from unique_toolkit.agentic.tools.schemas import ToolCallResponse
10
11
  from unique_toolkit.agentic.tools.tool import Tool
@@ -13,6 +14,7 @@ from unique_toolkit.agentic.tools.tool_progress_reporter import (
13
14
  ToolProgressReporter,
14
15
  )
15
16
  from unique_toolkit.app.schemas import ChatEvent, McpServer, McpTool
17
+ from unique_toolkit.chat.schemas import MessageLog, MessageLogStatus
16
18
  from unique_toolkit.language_model.schemas import (
17
19
  LanguageModelFunction,
18
20
  LanguageModelToolDescription,
@@ -99,11 +101,21 @@ class MCPToolWrapper(Tool[MCPToolConfig]):
99
101
  return []
100
102
 
101
103
  async def run(self, tool_call: LanguageModelFunction) -> ToolCallResponse:
104
+ active_message_log: MessageLog | None = None
105
+
102
106
  """Execute the MCP tool using SDK to call public API"""
103
107
  self.logger.info(f"Running MCP tool: {self.name}")
104
108
 
109
+ # Create message log entry for the MCP tool run
110
+ active_message_log = self._create_or_update_message_log(
111
+ progress_message="_Executing MCP tool_",
112
+ active_message_log=active_message_log,
113
+ )
114
+
105
115
  # Notify progress if reporter is available
106
- if self._tool_progress_reporter:
116
+ if self._tool_progress_reporter and not feature_flags.is_new_answers_ui_enabled(
117
+ self.event.company_id
118
+ ):
107
119
  await self._tool_progress_reporter.notify_from_tool_call(
108
120
  tool_call=tool_call,
109
121
  name=f"**{self.display_name()}**",
@@ -131,7 +143,10 @@ class MCPToolWrapper(Tool[MCPToolConfig]):
131
143
  )
132
144
 
133
145
  # Notify completion
134
- if self._tool_progress_reporter:
146
+ if (
147
+ self._tool_progress_reporter
148
+ and not feature_flags.is_new_answers_ui_enabled(self.event.company_id)
149
+ ):
135
150
  await self._tool_progress_reporter.notify_from_tool_call(
136
151
  tool_call=tool_call,
137
152
  name=f"**{self.display_name()}**",
@@ -139,13 +154,23 @@ class MCPToolWrapper(Tool[MCPToolConfig]):
139
154
  state=ProgressState.FINISHED,
140
155
  )
141
156
 
157
+ # Update message log entry to completed
158
+ active_message_log = self._create_or_update_message_log(
159
+ progress_message="_Completed MCP tool_",
160
+ status=MessageLogStatus.COMPLETED,
161
+ active_message_log=active_message_log,
162
+ )
163
+
142
164
  return tool_response
143
165
 
144
166
  except Exception as e:
145
167
  self.logger.error(f"Error executing MCP tool {self.name}: {e}")
146
168
 
147
169
  # Notify failure
148
- if self._tool_progress_reporter:
170
+ if (
171
+ self._tool_progress_reporter
172
+ and not feature_flags.is_new_answers_ui_enabled(self.event.company_id)
173
+ ):
149
174
  await self._tool_progress_reporter.notify_from_tool_call(
150
175
  tool_call=tool_call,
151
176
  name=f"**{self.display_name()}**",
@@ -153,6 +178,12 @@ class MCPToolWrapper(Tool[MCPToolConfig]):
153
178
  state=ProgressState.FAILED,
154
179
  )
155
180
 
181
+ # Update message log entry to failed
182
+ active_message_log = self._create_or_update_message_log(
183
+ progress_message="_Failed executing MCP tool_",
184
+ status=MessageLogStatus.FAILED,
185
+ )
186
+
156
187
  return ToolCallResponse(
157
188
  id=tool_call.id or "",
158
189
  name=self.name,
@@ -164,6 +195,20 @@ class MCPToolWrapper(Tool[MCPToolConfig]):
164
195
  error_message=str(e),
165
196
  )
166
197
 
198
+ def _create_or_update_message_log(
199
+ self,
200
+ *,
201
+ progress_message: str | None = None,
202
+ status: MessageLogStatus = MessageLogStatus.RUNNING,
203
+ active_message_log: MessageLog | None = None,
204
+ ) -> MessageLog | None:
205
+ return self._message_step_logger.create_or_update_message_log(
206
+ active_message_log=active_message_log,
207
+ header=self.display_name(),
208
+ progress_message=progress_message,
209
+ status=status,
210
+ )
211
+
167
212
  def _extract_and_validate_arguments(
168
213
  self, tool_call: LanguageModelFunction
169
214
  ) -> Dict[str, Any]:
File without changes