unique_toolkit 1.35.0__tar.gz → 1.35.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.
Files changed (215) hide show
  1. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/CHANGELOG.md +6 -0
  2. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/PKG-INFO +7 -1
  3. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/pyproject.toml +1 -1
  4. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/history_manager/loop_token_reducer.py +51 -19
  5. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/LICENSE +0 -0
  6. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/README.md +0 -0
  7. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/__init__.py +0 -0
  8. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/_common/_base_service.py +0 -0
  9. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/_common/_time_utils.py +0 -0
  10. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/_common/api_calling/human_verification_manager.py +0 -0
  11. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/_common/base_model_type_attribute.py +0 -0
  12. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/_common/chunk_relevancy_sorter/config.py +0 -0
  13. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/_common/chunk_relevancy_sorter/exception.py +0 -0
  14. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/_common/chunk_relevancy_sorter/schemas.py +0 -0
  15. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/_common/chunk_relevancy_sorter/service.py +0 -0
  16. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/_common/chunk_relevancy_sorter/tests/test_service.py +0 -0
  17. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/_common/default_language_model.py +0 -0
  18. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/_common/docx_generator/__init__.py +0 -0
  19. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/_common/docx_generator/config.py +0 -0
  20. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/_common/docx_generator/schemas.py +0 -0
  21. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/_common/docx_generator/service.py +0 -0
  22. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/_common/docx_generator/template/Doc Template.docx +0 -0
  23. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/_common/endpoint_builder.py +0 -0
  24. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/_common/endpoint_requestor.py +0 -0
  25. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/_common/exception.py +0 -0
  26. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/_common/experimental/endpoint_builder.py +0 -0
  27. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/_common/experimental/endpoint_requestor.py +0 -0
  28. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/_common/feature_flags/schema.py +0 -0
  29. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/_common/pydantic/rjsf_tags.py +0 -0
  30. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/_common/pydantic_helpers.py +0 -0
  31. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/_common/referencing.py +0 -0
  32. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/_common/string_utilities.py +0 -0
  33. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/_common/tests/test_referencing.py +0 -0
  34. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/_common/tests/test_string_utilities.py +0 -0
  35. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/_common/token/image_token_counting.py +0 -0
  36. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/_common/token/token_counting.py +0 -0
  37. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/_common/utils/__init__.py +0 -0
  38. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/_common/utils/files.py +0 -0
  39. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/_common/utils/image/encode.py +0 -0
  40. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/_common/utils/jinja/helpers.py +0 -0
  41. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/_common/utils/jinja/render.py +0 -0
  42. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/_common/utils/jinja/schema.py +0 -0
  43. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/_common/utils/jinja/utils.py +0 -0
  44. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/_common/utils/structured_output/__init__.py +0 -0
  45. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/_common/utils/structured_output/schema.py +0 -0
  46. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/_common/utils/write_configuration.py +0 -0
  47. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/_common/validate_required_values.py +0 -0
  48. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/_common/validators.py +0 -0
  49. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/__init__.py +0 -0
  50. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/debug_info_manager/debug_info_manager.py +0 -0
  51. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/debug_info_manager/test/test_debug_info_manager.py +0 -0
  52. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/evaluation/config.py +0 -0
  53. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/evaluation/context_relevancy/prompts.py +0 -0
  54. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/evaluation/context_relevancy/schema.py +0 -0
  55. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/evaluation/context_relevancy/service.py +0 -0
  56. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/evaluation/evaluation_manager.py +0 -0
  57. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/evaluation/exception.py +0 -0
  58. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/evaluation/hallucination/constants.py +0 -0
  59. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/evaluation/hallucination/hallucination_evaluation.py +0 -0
  60. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/evaluation/hallucination/prompts.py +0 -0
  61. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/evaluation/hallucination/service.py +0 -0
  62. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/evaluation/hallucination/utils.py +0 -0
  63. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/evaluation/output_parser.py +0 -0
  64. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/evaluation/schemas.py +0 -0
  65. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/evaluation/tests/test_context_relevancy_service.py +0 -0
  66. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/evaluation/tests/test_output_parser.py +0 -0
  67. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/history_manager/history_construction_with_contents.py +0 -0
  68. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/history_manager/history_manager.py +0 -0
  69. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/history_manager/utils.py +0 -0
  70. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/loop_runner/__init__.py +0 -0
  71. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/loop_runner/_stream_handler_utils.py +0 -0
  72. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/loop_runner/base.py +0 -0
  73. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/loop_runner/middleware/__init__.py +0 -0
  74. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/loop_runner/middleware/planning/__init__.py +0 -0
  75. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/loop_runner/middleware/planning/planning.py +0 -0
  76. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/loop_runner/middleware/planning/schema.py +0 -0
  77. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/loop_runner/runners/__init__.py +0 -0
  78. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/loop_runner/runners/basic.py +0 -0
  79. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/message_log_manager/__init__.py +0 -0
  80. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/message_log_manager/service.py +0 -0
  81. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/postprocessor/postprocessor_manager.py +0 -0
  82. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/reference_manager/reference_manager.py +0 -0
  83. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/responses_api/__init__.py +0 -0
  84. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/responses_api/postprocessors/code_display.py +0 -0
  85. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/responses_api/postprocessors/generated_files.py +0 -0
  86. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/responses_api/stream_handler.py +0 -0
  87. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/short_term_memory_manager/persistent_short_term_memory_manager.py +0 -0
  88. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/thinking_manager/thinking_manager.py +0 -0
  89. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/tools/__init__.py +0 -0
  90. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/tools/a2a/__init__.py +0 -0
  91. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/tools/a2a/config.py +0 -0
  92. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/tools/a2a/evaluation/__init__.py +0 -0
  93. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/tools/a2a/evaluation/_utils.py +0 -0
  94. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/tools/a2a/evaluation/config.py +0 -0
  95. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/tools/a2a/evaluation/evaluator.py +0 -0
  96. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/tools/a2a/evaluation/summarization_user_message.j2 +0 -0
  97. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/tools/a2a/manager.py +0 -0
  98. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/tools/a2a/postprocessing/__init__.py +0 -0
  99. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/tools/a2a/postprocessing/_display_utils.py +0 -0
  100. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/tools/a2a/postprocessing/_ref_utils.py +0 -0
  101. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/tools/a2a/postprocessing/config.py +0 -0
  102. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/tools/a2a/postprocessing/display.py +0 -0
  103. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/tools/a2a/postprocessing/references.py +0 -0
  104. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display.py +0 -0
  105. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display_utils.py +0 -0
  106. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_ref_utils.py +0 -0
  107. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/tools/a2a/prompts.py +0 -0
  108. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/tools/a2a/response_watcher/__init__.py +0 -0
  109. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/tools/a2a/response_watcher/service.py +0 -0
  110. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/tools/a2a/tool/__init__.py +0 -0
  111. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/tools/a2a/tool/_memory.py +0 -0
  112. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/tools/a2a/tool/_schema.py +0 -0
  113. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/tools/a2a/tool/config.py +0 -0
  114. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/tools/a2a/tool/service.py +0 -0
  115. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/tools/agent_chunks_hanlder.py +0 -0
  116. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/tools/config.py +0 -0
  117. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/tools/factory.py +0 -0
  118. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/tools/mcp/__init__.py +0 -0
  119. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/tools/mcp/manager.py +0 -0
  120. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/tools/mcp/models.py +0 -0
  121. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/tools/mcp/tool_wrapper.py +0 -0
  122. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/tools/openai_builtin/__init__.py +0 -0
  123. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/tools/openai_builtin/base.py +0 -0
  124. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/__init__.py +0 -0
  125. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/config.py +0 -0
  126. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/service.py +0 -0
  127. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/tools/openai_builtin/manager.py +0 -0
  128. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/tools/schemas.py +0 -0
  129. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/tools/test/test_mcp_manager.py +0 -0
  130. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/tools/test/test_tool_progress_reporter.py +0 -0
  131. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/tools/tool.py +0 -0
  132. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/tools/tool_manager.py +0 -0
  133. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/tools/tool_progress_reporter.py +0 -0
  134. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/tools/utils/__init__.py +0 -0
  135. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/tools/utils/execution/__init__.py +0 -0
  136. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/tools/utils/execution/execution.py +0 -0
  137. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/tools/utils/source_handling/__init__.py +0 -0
  138. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/tools/utils/source_handling/schema.py +0 -0
  139. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/tools/utils/source_handling/source_formatting.py +0 -0
  140. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/agentic/tools/utils/source_handling/tests/test_source_formatting.py +0 -0
  141. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/app/__init__.py +0 -0
  142. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/app/dev_util.py +0 -0
  143. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/app/fast_api_factory.py +0 -0
  144. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/app/init_logging.py +0 -0
  145. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/app/init_sdk.py +0 -0
  146. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/app/performance/async_tasks.py +0 -0
  147. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/app/performance/async_wrapper.py +0 -0
  148. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/app/schemas.py +0 -0
  149. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/app/unique_settings.py +0 -0
  150. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/app/verification.py +0 -0
  151. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/app/webhook.py +0 -0
  152. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/chat/__init__.py +0 -0
  153. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/chat/constants.py +0 -0
  154. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/chat/deprecated/service.py +0 -0
  155. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/chat/functions.py +0 -0
  156. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/chat/rendering.py +0 -0
  157. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/chat/responses_api.py +0 -0
  158. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/chat/schemas.py +0 -0
  159. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/chat/service.py +0 -0
  160. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/chat/state.py +0 -0
  161. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/chat/utils.py +0 -0
  162. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/content/__init__.py +0 -0
  163. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/content/constants.py +0 -0
  164. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/content/functions.py +0 -0
  165. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/content/schemas.py +0 -0
  166. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/content/service.py +0 -0
  167. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/content/smart_rules.py +0 -0
  168. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/content/utils.py +0 -0
  169. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/data_extraction/README.md +0 -0
  170. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/data_extraction/__init__.py +0 -0
  171. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/data_extraction/augmented/__init__.py +0 -0
  172. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/data_extraction/augmented/service.py +0 -0
  173. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/data_extraction/base.py +0 -0
  174. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/data_extraction/basic/__init__.py +0 -0
  175. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/data_extraction/basic/config.py +0 -0
  176. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/data_extraction/basic/prompt.py +0 -0
  177. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/data_extraction/basic/service.py +0 -0
  178. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/embedding/__init__.py +0 -0
  179. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/embedding/constants.py +0 -0
  180. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/embedding/functions.py +0 -0
  181. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/embedding/schemas.py +0 -0
  182. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/embedding/service.py +0 -0
  183. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/embedding/utils.py +0 -0
  184. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/framework_utilities/__init__.py +0 -0
  185. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/framework_utilities/langchain/__init__.py +0 -0
  186. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/framework_utilities/langchain/client.py +0 -0
  187. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/framework_utilities/langchain/history.py +0 -0
  188. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/framework_utilities/openai/__init__.py +0 -0
  189. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/framework_utilities/openai/client.py +0 -0
  190. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/framework_utilities/openai/message_builder.py +0 -0
  191. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/framework_utilities/utils.py +0 -0
  192. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/language_model/__init__.py +0 -0
  193. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/language_model/_responses_api_utils.py +0 -0
  194. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/language_model/builder.py +0 -0
  195. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/language_model/constants.py +0 -0
  196. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/language_model/default_language_model.py +0 -0
  197. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/language_model/functions.py +0 -0
  198. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/language_model/infos.py +0 -0
  199. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/language_model/prompt.py +0 -0
  200. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/language_model/reference.py +0 -0
  201. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/language_model/schemas.py +0 -0
  202. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/language_model/service.py +0 -0
  203. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/language_model/utils.py +0 -0
  204. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/protocols/support.py +0 -0
  205. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/services/__init__.py +0 -0
  206. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/services/chat_service.py +0 -0
  207. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/services/knowledge_base.py +0 -0
  208. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/short_term_memory/__init__.py +0 -0
  209. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/short_term_memory/constants.py +0 -0
  210. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/short_term_memory/functions.py +0 -0
  211. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/short_term_memory/schemas.py +0 -0
  212. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/short_term_memory/service.py +0 -0
  213. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/smart_rules/__init__.py +0 -0
  214. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/smart_rules/compile.py +0 -0
  215. {unique_toolkit-1.35.0 → unique_toolkit-1.35.2}/unique_toolkit/test_utilities/events.py +0 -0
@@ -5,6 +5,12 @@ 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.35.2] - 2025-12-05
9
+ - Increase speed of token reducer
10
+
11
+ ## [1.35.1] - 2025-12-05
12
+ - Improve efficiency of token reducer if tool calls overshoot max token limit
13
+
8
14
  ## [1.35.0] - 2025-12-04
9
15
  - Add `LoopIterationRunner` abstraction and support for planning before every loop iteration.
10
16
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: unique_toolkit
3
- Version: 1.35.0
3
+ Version: 1.35.2
4
4
  Summary:
5
5
  License: Proprietary
6
6
  Author: Cedric Klinkert
@@ -121,6 +121,12 @@ All notable changes to this project will be documented in this file.
121
121
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
122
122
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
123
123
 
124
+ ## [1.35.2] - 2025-12-05
125
+ - Increase speed of token reducer
126
+
127
+ ## [1.35.1] - 2025-12-05
128
+ - Improve efficiency of token reducer if tool calls overshoot max token limit
129
+
124
130
  ## [1.35.0] - 2025-12-04
125
131
  - Add `LoopIterationRunner` abstraction and support for planning before every loop iteration.
126
132
 
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "unique_toolkit"
3
- version = "1.35.0"
3
+ version = "1.35.2"
4
4
  description = ""
5
5
  authors = [
6
6
  "Cedric Klinkert <cedric.klinkert@unique.ch>",
@@ -31,6 +31,7 @@ from unique_toolkit.language_model.schemas import (
31
31
  MAX_INPUT_TOKENS_SAFETY_PERCENTAGE = (
32
32
  0.1 # 10% safety margin for input tokens we need 10% less does not work.
33
33
  )
34
+ SAFETY_MARGIN_FOR_AGGRESSIVE_REDUCTION = 0.9
34
35
 
35
36
 
36
37
  class SourceReductionResult(BaseModel):
@@ -63,6 +64,10 @@ class LoopTokenReducer:
63
64
  self._content_service = ContentService.from_event(event)
64
65
  self._user_message = event.payload.user_message
65
66
  self._chat_id = event.payload.chat_id
67
+ self._effective_token_limit = int(
68
+ self._language_model.token_limits.token_limit_input
69
+ * (1 - MAX_INPUT_TOKENS_SAFETY_PERCENTAGE)
70
+ )
66
71
 
67
72
  def _get_encoder(self, language_model: LMI) -> tiktoken.Encoding:
68
73
  name = language_model.encoder_name or "cl100k_base"
@@ -95,7 +100,7 @@ class LoopTokenReducer:
95
100
 
96
101
  while self._exceeds_token_limit(token_count):
97
102
  token_count_before_reduction = token_count
98
- loop_history = self._handle_token_limit_exceeded(loop_history)
103
+ loop_history = self._handle_token_limit_exceeded(loop_history, token_count)
99
104
  messages = self._construct_history(
100
105
  history_from_db,
101
106
  loop_history,
@@ -120,14 +125,10 @@ class LoopTokenReducer:
120
125
  len(chunks) > 1
121
126
  for chunks in self._reference_manager.get_chunks_of_all_tools()
122
127
  )
123
- max_tokens = int(
124
- self._language_model.token_limits.token_limit_input
125
- * (1 - MAX_INPUT_TOKENS_SAFETY_PERCENTAGE)
126
- )
127
128
  # TODO: This is not fully correct at the moment as the token_count
128
129
  # include system_prompt and user question already
129
130
  # TODO: There is a problem if we exceed but only have one chunk per tool call
130
- exceeds_limit = token_count > max_tokens
131
+ exceeds_limit = token_count > self._effective_token_limit
131
132
 
132
133
  return has_multiple_chunks_for_a_tool_call and exceeds_limit
133
134
 
@@ -171,16 +172,21 @@ class LoopTokenReducer:
171
172
  return constructed_history
172
173
 
173
174
  def _handle_token_limit_exceeded(
174
- self, loop_history: list[LanguageModelMessage]
175
+ self, loop_history: list[LanguageModelMessage], token_count: int
175
176
  ) -> list[LanguageModelMessage]:
176
177
  """Handle case where token limit is exceeded by reducing sources in tool responses."""
178
+ overshoot_factor = (
179
+ token_count / self._effective_token_limit
180
+ if self._effective_token_limit > 0
181
+ else 1.0
182
+ )
177
183
  self._logger.warning(
178
- f"Length of messages is exceeds limit of {self._language_model.token_limits.token_limit_input} tokens. "
179
- "Reducing number of sources per tool call.",
184
+ f"Length of messages exceeds limit of {self._effective_token_limit} tokens "
185
+ f"(overshoot factor: {overshoot_factor:.2f}x). Reducing number of sources per tool call.",
180
186
  )
181
187
 
182
188
  return self._reduce_message_length_by_reducing_sources_in_tool_response(
183
- loop_history
189
+ loop_history, overshoot_factor
184
190
  )
185
191
 
186
192
  def _replace_user_message(
@@ -312,10 +318,18 @@ class LoopTokenReducer:
312
318
  def _reduce_message_length_by_reducing_sources_in_tool_response(
313
319
  self,
314
320
  history: list[LanguageModelMessage],
321
+ overshoot_factor: float,
315
322
  ) -> list[LanguageModelMessage]:
316
323
  """
317
- Reduce the message length by removing the last source result of each tool call.
318
- If there is only one source for a tool call, the tool call message is returned unchanged.
324
+ Reduce the message length by removing sources from each tool call based on overshoot.
325
+
326
+ The number of chunks to keep per tool call is calculated as:
327
+ chunks_to_keep = num_sources / (overshoot_factor * SAFETY_MARGIN_FOR_AGGRESSIVE_REDUCTION)
328
+
329
+ This ensures more aggressive reduction when we're significantly over the limit.
330
+ Using SAFETY_MARGIN_FOR_AGGRESSIVE_REDUCTION factor provides a safety margin to avoid over-reduction.
331
+ E.g., if overshoot_factor = 2 (2x over limit), keep 1/1.5 = 2/3 of chunks.
332
+ Always keeps at least 1 chunk.
319
333
  """
320
334
  history_reduced: list[LanguageModelMessage] = []
321
335
  content_chunks_reduced: list[ContentChunk] = []
@@ -328,6 +342,7 @@ class LoopTokenReducer:
328
342
  message, # type: ignore
329
343
  chunk_offset,
330
344
  source_offset,
345
+ overshoot_factor,
331
346
  )
332
347
  content_chunks_reduced.extend(result.reduced_chunks)
333
348
  history_reduced.append(result.message)
@@ -350,10 +365,15 @@ class LoopTokenReducer:
350
365
  message: LanguageModelToolMessage,
351
366
  chunk_offset: int,
352
367
  source_offset: int,
368
+ overshoot_factor: float,
353
369
  ) -> SourceReductionResult:
354
370
  """
355
- Reduce the sources in the tool message by removing the last source.
356
- If there is only one source, the message is returned unchanged.
371
+ Reduce the sources in the tool message based on overshoot factor.
372
+
373
+ Chunks to keep = num_sources / (overshoot_factor * SAFETY_MARGIN_FOR_AGGRESSIVE_REDUCTION)
374
+ This ensures fewer chunks are kept when overshoot is larger.
375
+ E.g., if overshoot_factor = 2 (2x over limit), keep 1/1.5 = 2/3 of chunks
376
+ Always keeps at least 1 chunk.
357
377
  """
358
378
  tool_chunks = self._reference_manager.get_chunks_of_tool(message.tool_call_id)
359
379
  num_sources = len(tool_chunks)
@@ -366,16 +386,28 @@ class LoopTokenReducer:
366
386
  source_offset=source_offset,
367
387
  )
368
388
 
369
- # Reduce chunks, keeping all but the last one if multiple exist
370
- if num_sources == 1:
389
+ # Calculate how many chunks to keep based on overshoot
390
+ # Use SAFETY_MARGIN_FOR_AGGRESSIVE_REDUCTION safety margin for aggressive reduction, but only when overshoot is
391
+ # significant enough (>= ~1.33). Otherwise, the margin would prevent reduction.
392
+ divisor = (
393
+ overshoot_factor * SAFETY_MARGIN_FOR_AGGRESSIVE_REDUCTION
394
+ if overshoot_factor * SAFETY_MARGIN_FOR_AGGRESSIVE_REDUCTION
395
+ >= 1.2 # Skip safety margin for small overshoots (e.g., 1.03) to avoid tiny reduction steps
396
+ else overshoot_factor
397
+ )
398
+ chunks_to_keep = max(1, int(num_sources // divisor))
399
+
400
+ # Reduce chunks
401
+ if chunks_to_keep >= num_sources:
402
+ # No reduction needed for this tool call
371
403
  reduced_chunks = tool_chunks
372
404
  content_chunks_reduced = self._reference_manager.get_chunks()[
373
405
  chunk_offset : chunk_offset + num_sources
374
406
  ]
375
407
  else:
376
- reduced_chunks = tool_chunks[:-1]
408
+ reduced_chunks = tool_chunks[:chunks_to_keep]
377
409
  content_chunks_reduced = self._reference_manager.get_chunks()[
378
- chunk_offset : chunk_offset + num_sources - 1
410
+ chunk_offset : chunk_offset + chunks_to_keep
379
411
  ]
380
412
  self._reference_manager.replace_chunks_of_tool(
381
413
  message.tool_call_id, reduced_chunks
@@ -392,7 +424,7 @@ class LoopTokenReducer:
392
424
  message=new_message,
393
425
  reduced_chunks=content_chunks_reduced,
394
426
  chunk_offset=chunk_offset + num_sources,
395
- source_offset=source_offset + num_sources - (1 if num_sources != 1 else 0),
427
+ source_offset=source_offset + len(reduced_chunks),
396
428
  )
397
429
 
398
430
  def _create_tool_call_message_with_reduced_sources(
File without changes