unique_toolkit 1.49.0__tar.gz → 1.50.1__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 (287) hide show
  1. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/CHANGELOG.md +13 -5
  2. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/PKG-INFO +15 -7
  3. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/pyproject.toml +9 -3
  4. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/service.py +2 -2
  5. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/content/functions.py +67 -0
  6. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/content/service.py +27 -0
  7. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/services/chat_service.py +20 -0
  8. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/services/knowledge_base.py +26 -0
  9. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/LICENSE +0 -0
  10. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/README.md +0 -0
  11. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/__init__.py +0 -0
  12. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/__init__.py +0 -0
  13. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/_base_service.py +0 -0
  14. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/_time_utils.py +0 -0
  15. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/api_calling/human_verification_manager.py +0 -0
  16. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/base_model_type_attribute.py +0 -0
  17. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/chunk_relevancy_sorter/config.py +0 -0
  18. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/chunk_relevancy_sorter/exception.py +0 -0
  19. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/chunk_relevancy_sorter/schemas.py +0 -0
  20. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/chunk_relevancy_sorter/service.py +0 -0
  21. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/chunk_relevancy_sorter/tests/test_service.py +0 -0
  22. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/config_checker/README.md +0 -0
  23. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/config_checker/__init__.py +0 -0
  24. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/config_checker/__main__.py +0 -0
  25. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/config_checker/cli.py +0 -0
  26. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/config_checker/differ.py +0 -0
  27. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/config_checker/exporter.py +0 -0
  28. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/config_checker/models.py +0 -0
  29. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/config_checker/registry.py +0 -0
  30. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/config_checker/validator.py +0 -0
  31. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/default_language_model.py +0 -0
  32. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/docx_generator/__init__.py +0 -0
  33. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/docx_generator/config.py +0 -0
  34. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/docx_generator/pandoc_converter.py +0 -0
  35. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/docx_generator/schemas.py +0 -0
  36. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/docx_generator/service.py +0 -0
  37. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/docx_generator/template/Doc Template.docx +0 -0
  38. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/endpoint_builder.py +0 -0
  39. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/endpoint_requestor.py +0 -0
  40. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/event_bus.py +0 -0
  41. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/exception.py +0 -0
  42. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/execution.py +0 -0
  43. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/experimental/endpoint_builder.py +0 -0
  44. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/experimental/endpoint_requestor.py +0 -0
  45. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/experimental/write_up_agent/README.md +0 -0
  46. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/experimental/write_up_agent/__init__.py +0 -0
  47. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/experimental/write_up_agent/agent.py +0 -0
  48. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/experimental/write_up_agent/config.py +0 -0
  49. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/experimental/write_up_agent/examples/data.csv +0 -0
  50. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/experimental/write_up_agent/examples/example_usage.py +0 -0
  51. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/experimental/write_up_agent/schemas.py +0 -0
  52. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/experimental/write_up_agent/services/__init__.py +0 -0
  53. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/__init__.py +0 -0
  54. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/exceptions.py +0 -0
  55. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/service.py +0 -0
  56. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/utils.py +0 -0
  57. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/__init__.py +0 -0
  58. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/config.py +0 -0
  59. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/exceptions.py +0 -0
  60. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/config.py +0 -0
  61. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/system_prompt.j2 +0 -0
  62. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/user_prompt.j2 +0 -0
  63. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/service.py +0 -0
  64. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/__init__.py +0 -0
  65. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/default_template.j2 +0 -0
  66. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/exceptions.py +0 -0
  67. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/service.py +0 -0
  68. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/utils.py +0 -0
  69. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/experimental/write_up_agent/utils.py +0 -0
  70. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/feature_flags/schema.py +0 -0
  71. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/pydantic/rjsf_tags.py +0 -0
  72. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/pydantic_helpers.py +0 -0
  73. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/referencing.py +0 -0
  74. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/string_utilities.py +0 -0
  75. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/tests/test_referencing.py +0 -0
  76. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/tests/test_string_utilities.py +0 -0
  77. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/token/__init__.py +0 -0
  78. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/token/image_token_counting.py +0 -0
  79. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/token/token_counting.py +0 -0
  80. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/token/tokenizers/deepseek/tokenizer.json +0 -0
  81. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/token/tokenizers/qwen/tokenizer.json +0 -0
  82. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/utils/__init__.py +0 -0
  83. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/utils/files.py +0 -0
  84. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/utils/image/encode.py +0 -0
  85. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/utils/jinja/helpers.py +0 -0
  86. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/utils/jinja/render.py +0 -0
  87. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/utils/jinja/schema.py +0 -0
  88. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/utils/jinja/utils.py +0 -0
  89. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/utils/structured_output/__init__.py +0 -0
  90. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/utils/structured_output/schema.py +0 -0
  91. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/utils/write_configuration.py +0 -0
  92. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/validate_required_values.py +0 -0
  93. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/_common/validators.py +0 -0
  94. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/__init__.py +0 -0
  95. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/debug_info_manager/debug_info_manager.py +0 -0
  96. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/debug_info_manager/test/test_debug_info_manager.py +0 -0
  97. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/evaluation/config.py +0 -0
  98. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/__init__.py +0 -0
  99. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/system_prompt.j2 +0 -0
  100. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/user_prompt.j2 +0 -0
  101. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/evaluation/context_relevancy/schema.py +0 -0
  102. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/evaluation/context_relevancy/service.py +0 -0
  103. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/evaluation/evaluation_manager.py +0 -0
  104. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/evaluation/exception.py +0 -0
  105. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/evaluation/hallucination/constants.py +0 -0
  106. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/evaluation/hallucination/hallucination_evaluation.py +0 -0
  107. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/evaluation/hallucination/prompts/__init__.py +0 -0
  108. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/evaluation/hallucination/prompts/system_prompt.j2 +0 -0
  109. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/evaluation/hallucination/prompts/user_prompt.j2 +0 -0
  110. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/evaluation/hallucination/service.py +0 -0
  111. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/evaluation/hallucination/utils.py +0 -0
  112. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/evaluation/output_parser.py +0 -0
  113. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/evaluation/schemas.py +0 -0
  114. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/evaluation/tests/fixtures.py +0 -0
  115. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/evaluation/tests/test_config.py +0 -0
  116. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/evaluation/tests/test_context_relevancy_service.py +0 -0
  117. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/evaluation/tests/test_hallucination_constants.py +0 -0
  118. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/evaluation/tests/test_hallucination_utils.py +0 -0
  119. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/evaluation/tests/test_output_parser.py +0 -0
  120. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/evaluation/tests/test_prompt_loaders.py +0 -0
  121. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/evaluation/utils.py +0 -0
  122. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/feature_flags/__init__.py +0 -0
  123. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/feature_flags/feature_flags.py +0 -0
  124. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/history_manager/history_construction_with_contents.py +0 -0
  125. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/history_manager/history_manager.py +0 -0
  126. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/history_manager/loop_token_reducer.py +0 -0
  127. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/history_manager/utils.py +0 -0
  128. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/loop_runner/__init__.py +0 -0
  129. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/loop_runner/_iteration_handler_utils.py +0 -0
  130. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/loop_runner/_responses_iteration_handler_utils.py +0 -0
  131. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/loop_runner/_responses_stream_handler_utils.py +0 -0
  132. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/loop_runner/_stream_handler_utils.py +0 -0
  133. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/loop_runner/base.py +0 -0
  134. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/loop_runner/middleware/__init__.py +0 -0
  135. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/loop_runner/middleware/planning/__init__.py +0 -0
  136. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/loop_runner/middleware/planning/planning.py +0 -0
  137. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/loop_runner/middleware/planning/schema.py +0 -0
  138. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/loop_runner/runners/__init__.py +0 -0
  139. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/loop_runner/runners/basic.py +0 -0
  140. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/loop_runner/runners/qwen/__init__.py +0 -0
  141. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/loop_runner/runners/qwen/helpers.py +0 -0
  142. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/loop_runner/runners/qwen/qwen_runner.py +0 -0
  143. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/message_log_manager/__init__.py +0 -0
  144. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/message_log_manager/service.py +0 -0
  145. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/postprocessor/postprocessor_manager.py +0 -0
  146. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/reference_manager/reference_manager.py +0 -0
  147. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/responses_api/__init__.py +0 -0
  148. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/responses_api/postprocessors/code_display.py +0 -0
  149. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/responses_api/postprocessors/generated_files.py +0 -0
  150. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/responses_api/stream_handler.py +0 -0
  151. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/short_term_memory_manager/persistent_short_term_memory_manager.py +0 -0
  152. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/thinking_manager/thinking_manager.py +0 -0
  153. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/tools/__init__.py +0 -0
  154. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/tools/a2a/__init__.py +0 -0
  155. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/tools/a2a/config.py +0 -0
  156. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/tools/a2a/evaluation/__init__.py +0 -0
  157. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/tools/a2a/evaluation/_utils.py +0 -0
  158. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/tools/a2a/evaluation/config.py +0 -0
  159. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/tools/a2a/evaluation/evaluator.py +0 -0
  160. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/tools/a2a/evaluation/summarization_user_message.j2 +0 -0
  161. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/tools/a2a/manager.py +0 -0
  162. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/tools/a2a/postprocessing/__init__.py +0 -0
  163. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/tools/a2a/postprocessing/_display_utils.py +0 -0
  164. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/tools/a2a/postprocessing/_ref_utils.py +0 -0
  165. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/tools/a2a/postprocessing/config.py +0 -0
  166. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/tools/a2a/postprocessing/display.py +0 -0
  167. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/tools/a2a/postprocessing/references.py +0 -0
  168. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display.py +0 -0
  169. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display_utils.py +0 -0
  170. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_ref_utils.py +0 -0
  171. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/tools/a2a/prompts.py +0 -0
  172. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/tools/a2a/response_watcher/__init__.py +0 -0
  173. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/tools/a2a/response_watcher/service.py +0 -0
  174. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/tools/a2a/tool/__init__.py +0 -0
  175. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/tools/a2a/tool/_memory.py +0 -0
  176. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/tools/a2a/tool/_schema.py +0 -0
  177. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/tools/a2a/tool/config.py +0 -0
  178. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/tools/a2a/tool/service.py +0 -0
  179. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/tools/a2a/tool/test/test_service_utils.py +0 -0
  180. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/tools/agent_chunks_hanlder.py +0 -0
  181. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/tools/config.py +0 -0
  182. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/tools/factory.py +0 -0
  183. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/tools/mcp/__init__.py +0 -0
  184. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/tools/mcp/manager.py +0 -0
  185. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/tools/mcp/models.py +0 -0
  186. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/tools/mcp/tool_wrapper.py +0 -0
  187. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/tools/openai_builtin/__init__.py +0 -0
  188. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/tools/openai_builtin/base.py +0 -0
  189. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/__init__.py +0 -0
  190. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/config.py +0 -0
  191. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/__init__.py +0 -0
  192. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/code_display.py +0 -0
  193. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/generated_files.py +0 -0
  194. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/tools/openai_builtin/manager.py +0 -0
  195. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/tools/schemas.py +0 -0
  196. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/tools/test/test_mcp_manager.py +0 -0
  197. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/tools/test/test_tool_progress_reporter.py +0 -0
  198. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/tools/tool.py +0 -0
  199. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/tools/tool_manager.py +0 -0
  200. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/tools/tool_progress_reporter.py +0 -0
  201. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/tools/utils/__init__.py +0 -0
  202. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/tools/utils/source_handling/__init__.py +0 -0
  203. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/tools/utils/source_handling/schema.py +0 -0
  204. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/tools/utils/source_handling/source_formatting.py +0 -0
  205. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic/tools/utils/source_handling/tests/test_source_formatting.py +0 -0
  206. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic_table/__init__.py +0 -0
  207. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic_table/schemas.py +0 -0
  208. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/agentic_table/service.py +0 -0
  209. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/app/__init__.py +0 -0
  210. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/app/dev_util.py +0 -0
  211. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/app/fast_api_factory.py +0 -0
  212. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/app/init_logging.py +0 -0
  213. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/app/init_sdk.py +0 -0
  214. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/app/performance/async_tasks.py +0 -0
  215. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/app/performance/async_wrapper.py +0 -0
  216. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/app/schemas.py +0 -0
  217. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/app/unique_settings.py +0 -0
  218. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/app/verification.py +0 -0
  219. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/app/webhook.py +0 -0
  220. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/chat/__init__.py +0 -0
  221. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/chat/cancellation.py +0 -0
  222. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/chat/constants.py +0 -0
  223. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/chat/deprecated/service.py +0 -0
  224. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/chat/functions.py +0 -0
  225. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/chat/rendering.py +0 -0
  226. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/chat/responses_api.py +0 -0
  227. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/chat/schemas.py +0 -0
  228. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/chat/service.py +0 -0
  229. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/chat/state.py +0 -0
  230. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/chat/utils.py +0 -0
  231. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/content/__init__.py +0 -0
  232. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/content/constants.py +0 -0
  233. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/content/schemas.py +0 -0
  234. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/content/smart_rules.py +0 -0
  235. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/content/utils.py +0 -0
  236. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/data_extraction/README.md +0 -0
  237. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/data_extraction/__init__.py +0 -0
  238. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/data_extraction/augmented/__init__.py +0 -0
  239. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/data_extraction/augmented/service.py +0 -0
  240. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/data_extraction/base.py +0 -0
  241. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/data_extraction/basic/__init__.py +0 -0
  242. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/data_extraction/basic/config.py +0 -0
  243. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/data_extraction/basic/prompt.py +0 -0
  244. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/data_extraction/basic/service.py +0 -0
  245. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/elicitation/__init__.py +0 -0
  246. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/elicitation/constants.py +0 -0
  247. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/elicitation/exceptions.py +0 -0
  248. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/elicitation/functions.py +0 -0
  249. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/elicitation/schemas.py +0 -0
  250. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/elicitation/service.py +0 -0
  251. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/embedding/__init__.py +0 -0
  252. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/embedding/constants.py +0 -0
  253. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/embedding/functions.py +0 -0
  254. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/embedding/schemas.py +0 -0
  255. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/embedding/service.py +0 -0
  256. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/embedding/utils.py +0 -0
  257. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/framework_utilities/__init__.py +0 -0
  258. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/framework_utilities/langchain/__init__.py +0 -0
  259. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/framework_utilities/langchain/client.py +0 -0
  260. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/framework_utilities/langchain/history.py +0 -0
  261. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/framework_utilities/openai/__init__.py +0 -0
  262. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/framework_utilities/openai/client.py +0 -0
  263. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/framework_utilities/openai/message_builder.py +0 -0
  264. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/framework_utilities/utils.py +0 -0
  265. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/language_model/__init__.py +0 -0
  266. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/language_model/_responses_api_utils.py +0 -0
  267. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/language_model/builder.py +0 -0
  268. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/language_model/constants.py +0 -0
  269. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/language_model/default_language_model.py +0 -0
  270. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/language_model/functions.py +0 -0
  271. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/language_model/infos.py +0 -0
  272. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/language_model/prompt.py +0 -0
  273. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/language_model/reference.py +0 -0
  274. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/language_model/schemas.py +0 -0
  275. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/language_model/service.py +0 -0
  276. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/language_model/stream_transform.py +0 -0
  277. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/language_model/utils.py +0 -0
  278. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/protocols/support.py +0 -0
  279. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/services/__init__.py +0 -0
  280. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/short_term_memory/__init__.py +0 -0
  281. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/short_term_memory/constants.py +0 -0
  282. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/short_term_memory/functions.py +0 -0
  283. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/short_term_memory/schemas.py +0 -0
  284. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/short_term_memory/service.py +0 -0
  285. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/smart_rules/__init__.py +0 -0
  286. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/smart_rules/compile.py +0 -0
  287. {unique_toolkit-1.49.0 → unique_toolkit-1.50.1}/unique_toolkit/test_utilities/events.py +0 -0
@@ -5,8 +5,16 @@ 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.50.1] - 2026-03-02
9
+ - Security: upgrade pillow from 10.4.0 to 12.1.1 (CVE / Dependabot alert — out-of-bounds write in PSD loader)
10
+ - Security: upgrade starlette from 0.48.0 to 0.49.1 (Dependabot alert)
11
+
12
+ ## [1.50.0] - 2026-03-02
13
+ - Add async download-to-bytes functions: `download_content_to_bytes_async` on `KnowledgeBaseService`, `ContentService`, and `download_chat_content_to_bytes_async` on `ChatService`
14
+
8
15
  ## [1.49.0] - 2026-03-02
9
16
  - Make the code execution tool always available to the agent
17
+
10
18
  ## [1.48.1] - 2026-03-02
11
19
  - Revert `DocxGeneratorConfig` and `DocxGeneratorService` additions from 1.47.11 (broke SWOT tool, pending further testing)
12
20
 
@@ -207,7 +215,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
207
215
  ## [1.43.1] - 2026-01-12
208
216
  - Remove accidental example report.md from repo
209
217
 
210
- ##[1.43.0] - 2026-01-11
218
+ ## [1.43.0] - 2026-01-11
211
219
  - Add `WriteUpAgent` as an experimental service
212
220
 
213
221
  ## [1.42.9] - 2026-01-11
@@ -304,7 +312,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
304
312
  ## [1.34.0] - 2025-12-02
305
313
  - Add option to upload code interpreter generated files to the chat.
306
314
 
307
- ##[1.33.3] - 2025-12-02
315
+ ## [1.33.3] - 2025-12-02
308
316
  - Fix serialization of ToolBuildConfig `configuration` field.
309
317
 
310
318
  ## [1.33.2] - 2025-12-01
@@ -350,17 +358,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
350
358
  - Add early return in `create_message_log_entry` if chat_service doesn't have assistant_message_id (relevant for agentic
351
359
  table)
352
360
 
353
- ##[1.29.0] - 2025-11-21
361
+ ## [1.29.0] - 2025-11-21
354
362
  - Add option to force include references in sub agent responses even if unused by main agent response.
355
363
 
356
364
  ## [1.28.9] - 2025-11-21
357
365
  - Remove `knolwedge_base_service` from DocXGeneratorService
358
366
 
359
- ##[1.28.8] - 2025-11-20
367
+ ## [1.28.8] - 2025-11-20
360
368
  - Add query params to api operation
361
369
  - Add query params to endpoint builder
362
370
 
363
- ##[1.28.7] - 2025-11-20
371
+ ## [1.28.7] - 2025-11-20
364
372
  - Adding Message Step Logger Class to the agentic tools.
365
373
 
366
374
  ## [1.28.6] - 2025-11-20
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: unique_toolkit
3
- Version: 1.49.0
3
+ Version: 1.50.1
4
4
  Summary:
5
5
  License: Proprietary
6
6
  Author: Cedric Klinkert
@@ -21,7 +21,7 @@ Requires-Dist: markdown-it-py (>=4.0.0,<5.0.0)
21
21
  Requires-Dist: numpy (>=2.4.2,<3.0.0)
22
22
  Requires-Dist: openai (>=1.99.9,<2.0.0)
23
23
  Requires-Dist: pandas (>=2.3.0,<3.0.0)
24
- Requires-Dist: pillow (>=10.4.0,<11.0.0)
24
+ Requires-Dist: pillow (>=12.1.1)
25
25
  Requires-Dist: platformdirs (>=4.0.0,<5.0.0)
26
26
  Requires-Dist: pydantic (>=2.8.2,<3.0.0)
27
27
  Requires-Dist: pydantic-settings (>=2.10.1,<3.0.0)
@@ -129,8 +129,16 @@ All notable changes to this project will be documented in this file.
129
129
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
130
130
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
131
131
 
132
+ ## [1.50.1] - 2026-03-02
133
+ - Security: upgrade pillow from 10.4.0 to 12.1.1 (CVE / Dependabot alert — out-of-bounds write in PSD loader)
134
+ - Security: upgrade starlette from 0.48.0 to 0.49.1 (Dependabot alert)
135
+
136
+ ## [1.50.0] - 2026-03-02
137
+ - Add async download-to-bytes functions: `download_content_to_bytes_async` on `KnowledgeBaseService`, `ContentService`, and `download_chat_content_to_bytes_async` on `ChatService`
138
+
132
139
  ## [1.49.0] - 2026-03-02
133
140
  - Make the code execution tool always available to the agent
141
+
134
142
  ## [1.48.1] - 2026-03-02
135
143
  - Revert `DocxGeneratorConfig` and `DocxGeneratorService` additions from 1.47.11 (broke SWOT tool, pending further testing)
136
144
 
@@ -331,7 +339,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
331
339
  ## [1.43.1] - 2026-01-12
332
340
  - Remove accidental example report.md from repo
333
341
 
334
- ##[1.43.0] - 2026-01-11
342
+ ## [1.43.0] - 2026-01-11
335
343
  - Add `WriteUpAgent` as an experimental service
336
344
 
337
345
  ## [1.42.9] - 2026-01-11
@@ -428,7 +436,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
428
436
  ## [1.34.0] - 2025-12-02
429
437
  - Add option to upload code interpreter generated files to the chat.
430
438
 
431
- ##[1.33.3] - 2025-12-02
439
+ ## [1.33.3] - 2025-12-02
432
440
  - Fix serialization of ToolBuildConfig `configuration` field.
433
441
 
434
442
  ## [1.33.2] - 2025-12-01
@@ -474,17 +482,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
474
482
  - Add early return in `create_message_log_entry` if chat_service doesn't have assistant_message_id (relevant for agentic
475
483
  table)
476
484
 
477
- ##[1.29.0] - 2025-11-21
485
+ ## [1.29.0] - 2025-11-21
478
486
  - Add option to force include references in sub agent responses even if unused by main agent response.
479
487
 
480
488
  ## [1.28.9] - 2025-11-21
481
489
  - Remove `knolwedge_base_service` from DocXGeneratorService
482
490
 
483
- ##[1.28.8] - 2025-11-20
491
+ ## [1.28.8] - 2025-11-20
484
492
  - Add query params to api operation
485
493
  - Add query params to endpoint builder
486
494
 
487
- ##[1.28.7] - 2025-11-20
495
+ ## [1.28.7] - 2025-11-20
488
496
  - Adding Message Step Logger Class to the agentic tools.
489
497
 
490
498
  ## [1.28.6] - 2025-11-20
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "unique_toolkit"
3
- version = "1.49.0"
3
+ version = "1.50.1"
4
4
  description = ""
5
5
  authors = [
6
6
  "Cedric Klinkert <cedric.klinkert@unique.ch>",
@@ -28,7 +28,7 @@ pydantic-settings = "^2.10.1"
28
28
  sseclient = "^0.0.27"
29
29
  openai = "^1.99.9"
30
30
  platformdirs = "^4.0.0"
31
- pillow = "^10.4.0"
31
+ pillow = ">=12.1.1"
32
32
  unique-sdk = "^0.10.80"
33
33
  jambo = "^0.1.2"
34
34
  jinja2 = "^3.1.6"
@@ -56,7 +56,8 @@ langchain-core = "^0.3.0"
56
56
  optional = true
57
57
 
58
58
  [tool.poetry.group.fastapi.dependencies]
59
- fastapi = "^0.119.0"
59
+ fastapi = "^0.121.0"
60
+ starlette = ">=0.49.1"
60
61
  uvicorn = "^0.37.0"
61
62
 
62
63
  [tool.poetry.group.ci.dependencies]
@@ -84,6 +85,11 @@ pandas = "^2.3.3"
84
85
  requires = ["poetry-core"]
85
86
  build-backend = "poetry.core.masonry.api"
86
87
 
88
+ [tool.uv]
89
+ constraint-dependencies = [
90
+ "starlette>=0.49.1",
91
+ ]
92
+
87
93
  [tool.poe.tasks]
88
94
  lint = "ruff check ."
89
95
  lint-fix = "ruff check . --fix"
@@ -125,9 +125,9 @@ async def _upload_files_to_container(
125
125
  logger.info(
126
126
  "Uploding file %s to container %s", file.id, memory.container_id
127
127
  )
128
- file_content = content_service.download_content_to_bytes(
128
+ file_content = await content_service.download_content_to_bytes_async(
129
129
  content_id=file.id, chat_id=chat_id
130
- ) # TODO: Use async version when available
130
+ )
131
131
 
132
132
  openai_file = await client.containers.files.create(
133
133
  container_id=container_id,
@@ -677,6 +677,39 @@ def request_content_by_id(
677
677
  return requests.get(url, headers=headers)
678
678
 
679
679
 
680
+ async def request_content_by_id_async(
681
+ user_id: str, company_id: str, content_id: str, chat_id: str | None
682
+ ) -> httpx.Response:
683
+ """
684
+ Sends an async request to download content.
685
+
686
+ Args:
687
+ user_id (str): The user ID.
688
+ company_id (str): The company ID.
689
+ content_id (str): The ID of the content to download.
690
+ chat_id (str): The ID of the chat from which to download the content. Defaults to None to download from knowledge base.
691
+
692
+ Returns:
693
+ httpx.Response: The response object containing the downloaded content.
694
+
695
+ """
696
+ logger.info(f"Requesting content with content_id: {content_id}")
697
+ url = f"{unique_sdk.api_base}/content/{content_id}/file"
698
+ if chat_id:
699
+ url = f"{url}?chatId={chat_id}"
700
+
701
+ headers = {
702
+ "x-api-version": unique_sdk.api_version,
703
+ "x-app-id": unique_sdk.app_id,
704
+ "x-user-id": user_id,
705
+ "x-company-id": company_id,
706
+ "Authorization": "Bearer %s" % (unique_sdk.api_key,),
707
+ }
708
+
709
+ async with httpx.AsyncClient() as client:
710
+ return await client.get(url, headers=headers)
711
+
712
+
680
713
  def download_content_to_file_by_id(
681
714
  user_id: str,
682
715
  company_id: str,
@@ -747,6 +780,40 @@ def download_content_to_bytes(
747
780
  return response.content
748
781
 
749
782
 
783
+ async def download_content_to_bytes_async(
784
+ user_id: str,
785
+ company_id: str,
786
+ content_id: str,
787
+ chat_id: str | None,
788
+ ) -> bytes:
789
+ """
790
+ Asynchronously downloads content to memory.
791
+
792
+ Args:
793
+ user_id (str): The user ID.
794
+ company_id (str): The company ID.
795
+ content_id (str): The ID of the content to download.
796
+ chat_id (str | None): The chat ID, or None to download from the knowledge base.
797
+
798
+ raises:
799
+ httpx.HTTPStatusError: If the download fails.
800
+ """
801
+ logger.info(f"Downloading content with content_id: {content_id}")
802
+ response = await request_content_by_id_async(
803
+ user_id, company_id, content_id, chat_id
804
+ )
805
+
806
+ if not response.is_success:
807
+ logger.error(
808
+ "Error downloading file %s: Status code %s",
809
+ content_id,
810
+ response.status_code,
811
+ )
812
+ response.raise_for_status()
813
+
814
+ return response.content
815
+
816
+
750
817
  # TODO: Discuss if we should deprecate this method due to unclear use by content_name
751
818
  def download_content(
752
819
  user_id: str,
@@ -15,6 +15,7 @@ from unique_toolkit.content.constants import DEFAULT_SEARCH_LANGUAGE
15
15
  from unique_toolkit.content.functions import (
16
16
  download_content,
17
17
  download_content_to_bytes,
18
+ download_content_to_bytes_async,
18
19
  download_content_to_file_by_id,
19
20
  request_content_by_id,
20
21
  search_content_chunks,
@@ -736,6 +737,32 @@ class ContentService:
736
737
  chat_id=chat_id,
737
738
  )
738
739
 
740
+ async def download_content_to_bytes_async(
741
+ self,
742
+ content_id: str,
743
+ chat_id: str | None = None,
744
+ ) -> bytes:
745
+ """
746
+ Asynchronously downloads content to memory.
747
+
748
+ Args:
749
+ content_id (str): The id of the uploaded content.
750
+ chat_id (Optional[str]): The chat_id, defaults to None.
751
+
752
+ Returns:
753
+ bytes: The downloaded content.
754
+
755
+ Raises:
756
+ Exception: If the download fails.
757
+ """
758
+ chat_id = chat_id or self._chat_id # type: ignore
759
+ return await download_content_to_bytes_async(
760
+ user_id=self._user_id,
761
+ company_id=self._company_id,
762
+ content_id=content_id,
763
+ chat_id=chat_id,
764
+ )
765
+
739
766
  def get_documents_uploaded_to_chat(self) -> list[Content]:
740
767
  chat_contents = self.search_contents(
741
768
  where={
@@ -70,6 +70,7 @@ from unique_toolkit.chat.schemas import (
70
70
  )
71
71
  from unique_toolkit.content.functions import (
72
72
  download_content_to_bytes,
73
+ download_content_to_bytes_async,
73
74
  search_contents,
74
75
  upload_content_from_bytes,
75
76
  upload_content_from_bytes_async,
@@ -1736,6 +1737,25 @@ class ChatService(ChatServiceDeprecated):
1736
1737
  chat_id=self._content_scope_chat_id,
1737
1738
  )
1738
1739
 
1740
+ async def download_chat_content_to_bytes_async(self, *, content_id: str) -> bytes:
1741
+ """Async download content by id from the content-scope chat (e.g. parent chat when subagent).
1742
+
1743
+ Uses the service's content-scope chat id, so when running as a subagent
1744
+ with correlation, this accesses files from the primary chat session.
1745
+
1746
+ Args:
1747
+ content_id: The content id to download.
1748
+
1749
+ Returns:
1750
+ bytes: The raw content bytes.
1751
+ """
1752
+ return await download_content_to_bytes_async(
1753
+ user_id=self._user_id,
1754
+ company_id=self._company_id,
1755
+ content_id=content_id,
1756
+ chat_id=self._content_scope_chat_id,
1757
+ )
1758
+
1739
1759
  def download_chat_images_and_documents(self) -> tuple[list[Content], list[Content]]:
1740
1760
  """Return images and documents from the content-scope chat (e.g. parent chat when subagent).
1741
1761
 
@@ -17,6 +17,7 @@ from unique_toolkit.content.functions import (
17
17
  delete_content,
18
18
  delete_content_async,
19
19
  download_content_to_bytes,
20
+ download_content_to_bytes_async,
20
21
  download_content_to_file_by_id,
21
22
  get_content_info,
22
23
  get_folder_info,
@@ -536,6 +537,31 @@ class KnowledgeBaseService:
536
537
  chat_id=None,
537
538
  )
538
539
 
540
+ async def download_content_to_bytes_async(
541
+ self,
542
+ *,
543
+ content_id: str,
544
+ ) -> bytes:
545
+ """
546
+ Asynchronously downloads content to memory.
547
+
548
+ Args:
549
+ content_id (str): The id of the uploaded content.
550
+
551
+ Returns:
552
+ bytes: The downloaded content.
553
+
554
+ Raises:
555
+ Exception: If the download fails.
556
+ """
557
+
558
+ return await download_content_to_bytes_async(
559
+ user_id=self._user_id,
560
+ company_id=self._company_id,
561
+ content_id=content_id,
562
+ chat_id=None,
563
+ )
564
+
539
565
  def batch_file_upload(
540
566
  self,
541
567
  *,
File without changes