unique_toolkit 2026.42.4__tar.gz → 2026.44.0.dev0__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 (433) hide show
  1. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/PKG-INFO +2 -2
  2. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/pyproject.toml +2 -2
  3. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/history_manager/history_manager.py +1 -78
  4. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/history_manager/loop_token_reducer.py +3 -19
  5. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/language_model/functions.py +0 -35
  6. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/language_model/infos.py +1 -83
  7. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/protocols/support.py +1 -14
  8. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/services/chat_service.py +0 -22
  9. unique_toolkit-2026.42.4/unique_toolkit/agentic/history_manager/context_overflow.py +0 -259
  10. unique_toolkit-2026.42.4/unique_toolkit/language_model/provider_token_count.py +0 -165
  11. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/README.md +0 -0
  12. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/__init__.py +0 -0
  13. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/__init__.py +0 -0
  14. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/_base_service.py +0 -0
  15. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/_time_utils.py +0 -0
  16. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/api_calling/human_verification_manager.py +0 -0
  17. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/base_model_type_attribute.py +0 -0
  18. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/chunk_relevancy_sorter/config.py +0 -0
  19. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/chunk_relevancy_sorter/exception.py +0 -0
  20. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/chunk_relevancy_sorter/schemas.py +0 -0
  21. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/chunk_relevancy_sorter/service.py +0 -0
  22. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/chunk_relevancy_sorter/tests/test_service.py +0 -0
  23. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/config_checker/README.md +0 -0
  24. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/config_checker/__init__.py +0 -0
  25. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/config_checker/__main__.py +0 -0
  26. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/config_checker/cli.py +0 -0
  27. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/config_checker/differ.py +0 -0
  28. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/config_checker/exporter.py +0 -0
  29. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/config_checker/models.py +0 -0
  30. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/config_checker/registry.py +0 -0
  31. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/config_checker/validator.py +0 -0
  32. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/default_language_model.py +0 -0
  33. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/docx_generator/__init__.py +0 -0
  34. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/docx_generator/config.py +0 -0
  35. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/docx_generator/pandoc_converter.py +0 -0
  36. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/docx_generator/schemas.py +0 -0
  37. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/docx_generator/service.py +0 -0
  38. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/docx_generator/template/Doc Template.docx +0 -0
  39. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/endpoint_builder.py +0 -0
  40. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/endpoint_requestor.py +0 -0
  41. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/event_bus.py +0 -0
  42. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/exception.py +0 -0
  43. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/execution.py +0 -0
  44. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/experimental/endpoint_builder.py +0 -0
  45. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/experimental/endpoint_requestor.py +0 -0
  46. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/README.md +0 -0
  47. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/__init__.py +0 -0
  48. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/agent.py +0 -0
  49. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/config.py +0 -0
  50. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/examples/data.csv +0 -0
  51. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/examples/example_usage.py +0 -0
  52. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/schemas.py +0 -0
  53. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/__init__.py +0 -0
  54. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/__init__.py +0 -0
  55. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/exceptions.py +0 -0
  56. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/service.py +0 -0
  57. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/utils.py +0 -0
  58. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/__init__.py +0 -0
  59. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/config.py +0 -0
  60. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/exceptions.py +0 -0
  61. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/config.py +0 -0
  62. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/system_prompt.j2 +0 -0
  63. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/user_prompt.j2 +0 -0
  64. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/service.py +0 -0
  65. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/__init__.py +0 -0
  66. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/default_template.j2 +0 -0
  67. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/exceptions.py +0 -0
  68. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/service.py +0 -0
  69. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/utils.py +0 -0
  70. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/utils.py +0 -0
  71. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/feature_flags/schema.py +0 -0
  72. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/metadata_filter_scope.py +0 -0
  73. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/pydantic/rjsf_tags.py +0 -0
  74. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/pydantic_helpers.py +0 -0
  75. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/referencing.py +0 -0
  76. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/string_utilities.py +0 -0
  77. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/tests/test_referencing.py +0 -0
  78. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/tests/test_string_utilities.py +0 -0
  79. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/token/__init__.py +0 -0
  80. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/token/image_token_counting.py +0 -0
  81. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/token/token_counting.py +0 -0
  82. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/token/tokenizers/deepseek/tokenizer.json +0 -0
  83. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/token/tokenizers/qwen/tokenizer.json +0 -0
  84. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/utils/__init__.py +0 -0
  85. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/utils/files.py +0 -0
  86. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/utils/image/encode.py +0 -0
  87. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/utils/jinja/helpers.py +0 -0
  88. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/utils/jinja/render.py +0 -0
  89. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/utils/jinja/schema.py +0 -0
  90. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/utils/jinja/utils.py +0 -0
  91. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/utils/structured_output/__init__.py +0 -0
  92. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/utils/structured_output/schema.py +0 -0
  93. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/utils/write_configuration.py +0 -0
  94. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/validate_required_values.py +0 -0
  95. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/_common/validators.py +0 -0
  96. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/__init__.py +0 -0
  97. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/debug_info_manager/debug_info_manager.py +0 -0
  98. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/debug_info_manager/test/test_debug_info_manager.py +0 -0
  99. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/evaluation/config.py +0 -0
  100. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/__init__.py +0 -0
  101. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/system_prompt.j2 +0 -0
  102. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/user_prompt.j2 +0 -0
  103. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/evaluation/context_relevancy/schema.py +0 -0
  104. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/evaluation/context_relevancy/service.py +0 -0
  105. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/evaluation/evaluation_manager.py +0 -0
  106. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/evaluation/exception.py +0 -0
  107. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/evaluation/hallucination/constants.py +0 -0
  108. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/evaluation/hallucination/hallucination_evaluation.py +0 -0
  109. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/evaluation/hallucination/prompts/__init__.py +0 -0
  110. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/evaluation/hallucination/prompts/system_prompt.j2 +0 -0
  111. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/evaluation/hallucination/prompts/user_prompt.j2 +0 -0
  112. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/evaluation/hallucination/service.py +0 -0
  113. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/evaluation/hallucination/utils.py +0 -0
  114. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/evaluation/output_parser.py +0 -0
  115. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/evaluation/schemas.py +0 -0
  116. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/evaluation/tests/fixtures.py +0 -0
  117. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/evaluation/tests/test_config.py +0 -0
  118. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/evaluation/tests/test_context_relevancy_service.py +0 -0
  119. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/evaluation/tests/test_hallucination_constants.py +0 -0
  120. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/evaluation/tests/test_hallucination_external_context.py +0 -0
  121. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/evaluation/tests/test_hallucination_utils.py +0 -0
  122. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/evaluation/tests/test_output_parser.py +0 -0
  123. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/evaluation/tests/test_prompt_loaders.py +0 -0
  124. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/evaluation/utils.py +0 -0
  125. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/feature_flags/__init__.py +0 -0
  126. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/feature_flags/feature_flags.py +0 -0
  127. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/history_manager/history_construction_with_contents.py +0 -0
  128. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/history_manager/settings.py +0 -0
  129. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/history_manager/utils.py +0 -0
  130. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/loop_runner/__init__.py +0 -0
  131. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/loop_runner/_iteration_handler_utils.py +0 -0
  132. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/loop_runner/_responses_iteration_handler_utils.py +0 -0
  133. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/loop_runner/_responses_stream_handler_utils.py +0 -0
  134. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/loop_runner/_stream_handler_utils.py +0 -0
  135. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/loop_runner/base.py +0 -0
  136. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/loop_runner/middleware/__init__.py +0 -0
  137. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/loop_runner/middleware/planning/__init__.py +0 -0
  138. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/loop_runner/middleware/planning/planning.py +0 -0
  139. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/loop_runner/middleware/planning/schema.py +0 -0
  140. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/loop_runner/runners/__init__.py +0 -0
  141. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/loop_runner/runners/basic.py +0 -0
  142. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/loop_runner/runners/mistral/__init__.py +0 -0
  143. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/loop_runner/runners/mistral/mistral_runner.py +0 -0
  144. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/loop_runner/runners/prompt_forced_tool/__init__.py +0 -0
  145. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/loop_runner/runners/prompt_forced_tool/helpers.py +0 -0
  146. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/loop_runner/runners/prompt_forced_tool/runner.py +0 -0
  147. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/loop_runner/runners/qwen/__init__.py +0 -0
  148. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/loop_runner/runners/qwen/helpers.py +0 -0
  149. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/loop_runner/runners/qwen/qwen_runner.py +0 -0
  150. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/message_log_manager/__init__.py +0 -0
  151. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/message_log_manager/service.py +0 -0
  152. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/message_log_order.py +0 -0
  153. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/postprocessor/postprocessor_manager.py +0 -0
  154. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/reference_manager/reference_manager.py +0 -0
  155. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/reference_manager/tests/test_external_context.py +0 -0
  156. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/responses_api/__init__.py +0 -0
  157. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/responses_api/postprocessors/code_display.py +0 -0
  158. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/responses_api/postprocessors/generated_files.py +0 -0
  159. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/responses_api/stream_handler.py +0 -0
  160. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/short_term_memory_manager/persistent_short_term_memory_manager.py +0 -0
  161. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/thinking_manager/thinking_manager.py +0 -0
  162. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/__init__.py +0 -0
  163. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/a2a/__init__.py +0 -0
  164. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/a2a/config.py +0 -0
  165. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/a2a/evaluation/__init__.py +0 -0
  166. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/a2a/evaluation/_utils.py +0 -0
  167. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/a2a/evaluation/config.py +0 -0
  168. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/a2a/evaluation/evaluator.py +0 -0
  169. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/a2a/evaluation/summarization_user_message.j2 +0 -0
  170. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/a2a/manager.py +0 -0
  171. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/a2a/postprocessing/__init__.py +0 -0
  172. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/a2a/postprocessing/_display_utils.py +0 -0
  173. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/a2a/postprocessing/_ref_utils.py +0 -0
  174. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/a2a/postprocessing/config.py +0 -0
  175. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/a2a/postprocessing/display.py +0 -0
  176. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/a2a/postprocessing/references.py +0 -0
  177. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display.py +0 -0
  178. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display_utils.py +0 -0
  179. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_ref_utils.py +0 -0
  180. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_references.py +0 -0
  181. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/a2a/prompts.py +0 -0
  182. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/a2a/response_watcher/__init__.py +0 -0
  183. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/a2a/response_watcher/service.py +0 -0
  184. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/a2a/tool/__init__.py +0 -0
  185. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/a2a/tool/_memory.py +0 -0
  186. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/a2a/tool/_schema.py +0 -0
  187. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/a2a/tool/config.py +0 -0
  188. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/a2a/tool/service.py +0 -0
  189. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/a2a/tool/test/test_service_utils.py +0 -0
  190. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/agent_chunks_hanlder.py +0 -0
  191. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/config.py +0 -0
  192. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/experimental/__init__.py +0 -0
  193. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/experimental/ask_user_tool/__init__.py +0 -0
  194. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/experimental/ask_user_tool/config.py +0 -0
  195. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/experimental/ask_user_tool/tool.py +0 -0
  196. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/experimental/open_file_tool/__init__.py +0 -0
  197. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/experimental/open_file_tool/config.py +0 -0
  198. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/experimental/open_file_tool/runtime.py +0 -0
  199. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/experimental/open_file_tool/tool.py +0 -0
  200. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/experimental/retrieve_search_scope_tool/__init__.py +0 -0
  201. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/experimental/retrieve_search_scope_tool/config.py +0 -0
  202. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/experimental/retrieve_search_scope_tool/tool.py +0 -0
  203. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/experimental/todo/__init__.py +0 -0
  204. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/experimental/todo/config.py +0 -0
  205. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/experimental/todo/prompts/__init__.py +0 -0
  206. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/experimental/todo/prompts/execution_reminder.j2 +0 -0
  207. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/experimental/todo/prompts/system_prompt.j2 +0 -0
  208. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/experimental/todo/prompts/tool_description.j2 +0 -0
  209. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/experimental/todo/prompts/verification_nudge.j2 +0 -0
  210. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/experimental/todo/schemas.py +0 -0
  211. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/experimental/todo/service.py +0 -0
  212. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/factory.py +0 -0
  213. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/mcp/__init__.py +0 -0
  214. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/mcp/manager.py +0 -0
  215. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/mcp/models.py +0 -0
  216. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/mcp/tool_wrapper.py +0 -0
  217. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/names.py +0 -0
  218. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/__init__.py +0 -0
  219. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/base.py +0 -0
  220. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/__init__.py +0 -0
  221. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/activator/__init__.py +0 -0
  222. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/activator/config.py +0 -0
  223. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/activator/service.py +0 -0
  224. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/builder/__init__.py +0 -0
  225. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/builder/_container.py +0 -0
  226. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/builder/_files.py +0 -0
  227. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/builder/_memory.py +0 -0
  228. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/builder/builder.py +0 -0
  229. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/config.py +0 -0
  230. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/__init__.py +0 -0
  231. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/artifacts.py +0 -0
  232. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/code_display.py +0 -0
  233. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/generated_files.py +0 -0
  234. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/office_preview.py +0 -0
  235. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/schemas.py +0 -0
  236. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/tool/__init__.py +0 -0
  237. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/tool/config.py +0 -0
  238. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/tool/service.py +0 -0
  239. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/manager.py +0 -0
  240. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/run_context.py +0 -0
  241. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/schemas.py +0 -0
  242. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/test/test_mcp_manager.py +0 -0
  243. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/test/test_tool_progress_reporter.py +0 -0
  244. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/tool.py +0 -0
  245. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/tool_manager.py +0 -0
  246. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/tool_progress_reporter.py +0 -0
  247. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/utils/__init__.py +0 -0
  248. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/utils/source_handling/__init__.py +0 -0
  249. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/utils/source_handling/schema.py +0 -0
  250. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/utils/source_handling/source_formatting.py +0 -0
  251. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic/tools/utils/source_handling/tests/test_source_formatting.py +0 -0
  252. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic_table/__init__.py +0 -0
  253. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic_table/schemas.py +0 -0
  254. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic_table/service.py +0 -0
  255. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/agentic_table/synthetic_chat_event.py +0 -0
  256. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/app/__init__.py +0 -0
  257. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/app/chat_event_filter_options_settings.py +0 -0
  258. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/app/dev_util.py +0 -0
  259. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/app/fast_api_factory.py +0 -0
  260. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/app/feature_flags.py +0 -0
  261. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/app/find_env_file.py +0 -0
  262. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/app/init_logging.py +0 -0
  263. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/app/init_sdk.py +0 -0
  264. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/app/performance/async_tasks.py +0 -0
  265. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/app/performance/async_wrapper.py +0 -0
  266. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/app/schemas.py +0 -0
  267. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/app/unique_settings.py +0 -0
  268. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/app/verification.py +0 -0
  269. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/app/webhook.py +0 -0
  270. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/chat/__init__.py +0 -0
  271. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/chat/cancellation.py +0 -0
  272. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/chat/constants.py +0 -0
  273. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/chat/deprecated/__init__.py +0 -0
  274. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/chat/deprecated/service.py +0 -0
  275. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/chat/functions.py +0 -0
  276. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/chat/rendering.py +0 -0
  277. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/chat/responses_api.py +0 -0
  278. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/chat/schemas.py +0 -0
  279. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/chat/service.py +0 -0
  280. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/chat/state.py +0 -0
  281. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/chat/utils.py +0 -0
  282. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/content/__init__.py +0 -0
  283. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/content/constants.py +0 -0
  284. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/content/functions.py +0 -0
  285. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/content/schemas.py +0 -0
  286. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/content/service.py +0 -0
  287. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/content/smart_rules.py +0 -0
  288. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/content/utils.py +0 -0
  289. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/data_extraction/README.md +0 -0
  290. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/data_extraction/__init__.py +0 -0
  291. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/data_extraction/augmented/__init__.py +0 -0
  292. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/data_extraction/augmented/service.py +0 -0
  293. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/data_extraction/base.py +0 -0
  294. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/data_extraction/basic/__init__.py +0 -0
  295. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/data_extraction/basic/config.py +0 -0
  296. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/data_extraction/basic/prompt.py +0 -0
  297. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/data_extraction/basic/service.py +0 -0
  298. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/elicitation/__init__.py +0 -0
  299. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/elicitation/constants.py +0 -0
  300. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/elicitation/exceptions.py +0 -0
  301. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/elicitation/functions.py +0 -0
  302. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/elicitation/schemas.py +0 -0
  303. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/elicitation/service.py +0 -0
  304. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/embedding/__init__.py +0 -0
  305. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/embedding/constants.py +0 -0
  306. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/embedding/functions.py +0 -0
  307. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/embedding/schemas.py +0 -0
  308. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/embedding/service.py +0 -0
  309. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/embedding/utils.py +0 -0
  310. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/README.md +0 -0
  311. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/__init__.py +0 -0
  312. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/_internal/__init__.py +0 -0
  313. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/_internal/streaming/__init__.py +0 -0
  314. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/_internal/streaming/common.py +0 -0
  315. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/_internal/streaming/pattern_replacer.py +0 -0
  316. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/components/__init__.py +0 -0
  317. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/components/_base.py +0 -0
  318. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/components/content_tree/__init__.py +0 -0
  319. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/components/content_tree/functions.py +0 -0
  320. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/components/content_tree/schemas.py +0 -0
  321. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/components/content_tree/service.py +0 -0
  322. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/components/internal_search/__init__.py +0 -0
  323. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/components/internal_search/base/__init__.py +0 -0
  324. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/components/internal_search/base/config.py +0 -0
  325. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/components/internal_search/base/schemas.py +0 -0
  326. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/components/internal_search/base/service.py +0 -0
  327. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/components/internal_search/base/utils.py +0 -0
  328. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/components/internal_search/chat/__init__.py +0 -0
  329. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/components/internal_search/chat/config.py +0 -0
  330. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/components/internal_search/chat/schemas.py +0 -0
  331. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/components/internal_search/chat/service.py +0 -0
  332. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/components/internal_search/knowledge_base/__init__.py +0 -0
  333. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/components/internal_search/knowledge_base/config.py +0 -0
  334. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/components/internal_search/knowledge_base/schemas.py +0 -0
  335. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/components/internal_search/knowledge_base/service.py +0 -0
  336. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/components/internal_search/post_processing/__init__.py +0 -0
  337. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/components/internal_search/post_processing/config.py +0 -0
  338. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/components/internal_search/post_processing/service.py +0 -0
  339. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/content_tree/__init__.py +0 -0
  340. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/identity/__init__.py +0 -0
  341. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/integrations/__init__.py +0 -0
  342. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/integrations/openai/__init__.py +0 -0
  343. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/__init__.py +0 -0
  344. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/__init__.py +0 -0
  345. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/_async_bridge.py +0 -0
  346. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/_model_params.py +0 -0
  347. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/__init__.py +0 -0
  348. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/complete_with_references.py +0 -0
  349. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/stream_event_router.py +0 -0
  350. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/text_event_handler.py +0 -0
  351. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/tool_call_event_handler.py +0 -0
  352. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/events.py +0 -0
  353. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/protocols/__init__.py +0 -0
  354. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/protocols/chat_completions.py +0 -0
  355. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/protocols/responses.py +0 -0
  356. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/__init__.py +0 -0
  357. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/code_interpreter_event_handler.py +0 -0
  358. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/complete_with_references.py +0 -0
  359. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/completed_event_handler.py +0 -0
  360. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/stream_event_router.py +0 -0
  361. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/text_delta_event_handler.py +0 -0
  362. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/tool_call_event_handler.py +0 -0
  363. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/subscribers/__init__.py +0 -0
  364. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/subscribers/message_persister.py +0 -0
  365. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/subscribers/progress_log_persister.py +0 -0
  366. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/resources/__init__.py +0 -0
  367. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/resources/content_folder/__init__.py +0 -0
  368. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/resources/content_folder/functions.py +0 -0
  369. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/resources/content_folder/schemas.py +0 -0
  370. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/resources/content_folder/service.py +0 -0
  371. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/resources/facades/__init__.py +0 -0
  372. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/resources/facades/identity/__init__.py +0 -0
  373. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/resources/facades/identity/service.py +0 -0
  374. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/resources/feature_flags/README.md +0 -0
  375. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/resources/feature_flags/__init__.py +0 -0
  376. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/resources/feature_flags/_graphql_client.py +0 -0
  377. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/resources/feature_flags/_ttl_cache.py +0 -0
  378. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/resources/feature_flags/client.py +0 -0
  379. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/resources/feature_flags/schemas.py +0 -0
  380. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/resources/feature_flags/settings.py +0 -0
  381. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/resources/group/__init__.py +0 -0
  382. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/resources/group/functions.py +0 -0
  383. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/resources/group/schemas.py +0 -0
  384. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/resources/group/service.py +0 -0
  385. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/resources/scheduled_task/__init__.py +0 -0
  386. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/resources/scheduled_task/cron.py +0 -0
  387. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/resources/scheduled_task/functions.py +0 -0
  388. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/resources/scheduled_task/schemas.py +0 -0
  389. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/resources/scheduled_task/service.py +0 -0
  390. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/resources/user/__init__.py +0 -0
  391. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/resources/user/functions.py +0 -0
  392. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/resources/user/schemas.py +0 -0
  393. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/resources/user/service.py +0 -0
  394. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/experimental/testing/__init__.py +0 -0
  395. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/framework_utilities/__init__.py +0 -0
  396. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/framework_utilities/langchain/__init__.py +0 -0
  397. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/framework_utilities/langchain/client.py +0 -0
  398. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/framework_utilities/langchain/history.py +0 -0
  399. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/framework_utilities/openai/__init__.py +0 -0
  400. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/framework_utilities/openai/client.py +0 -0
  401. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/framework_utilities/openai/message_builder.py +0 -0
  402. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/framework_utilities/utils.py +0 -0
  403. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/language_model/__init__.py +0 -0
  404. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/language_model/_responses_api_utils.py +0 -0
  405. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/language_model/builder.py +0 -0
  406. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/language_model/constants.py +0 -0
  407. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/language_model/default_language_model.py +0 -0
  408. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/language_model/invocation_stats.py +0 -0
  409. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/language_model/model_costs.py +0 -0
  410. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/language_model/prompt.py +0 -0
  411. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/language_model/reference.py +0 -0
  412. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/language_model/schemas.py +0 -0
  413. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/language_model/service.py +0 -0
  414. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/language_model/settings.py +0 -0
  415. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/language_model/stream_transform.py +0 -0
  416. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/language_model/utils.py +0 -0
  417. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/monitoring/__init__.py +0 -0
  418. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/monitoring/gunicorn.py +0 -0
  419. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/monitoring/memory.py +0 -0
  420. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/monitoring/middleware.py +0 -0
  421. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/monitoring/registry.py +0 -0
  422. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/monitoring/tracing.py +0 -0
  423. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/services/__init__.py +0 -0
  424. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/services/factory.py +0 -0
  425. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/services/knowledge_base.py +0 -0
  426. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/short_term_memory/__init__.py +0 -0
  427. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/short_term_memory/constants.py +0 -0
  428. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/short_term_memory/functions.py +0 -0
  429. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/short_term_memory/schemas.py +0 -0
  430. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/short_term_memory/service.py +0 -0
  431. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/smart_rules/__init__.py +0 -0
  432. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/smart_rules/compile.py +0 -0
  433. {unique_toolkit-2026.42.4 → unique_toolkit-2026.44.0.dev0}/unique_toolkit/test_utilities/events.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: unique-toolkit
3
- Version: 2026.42.4
3
+ Version: 2026.44.0.dev0
4
4
  Summary:
5
5
  Author: Cedric Klinkert, Martin Fadler, Sadique Sheik, Fabian Schläpfer, Pascal Hauri, Ejiroghene Oki-Peter, Rami Azouz, Ricardo Visini, Sanzio Monti
6
6
  Author-email: Cedric Klinkert <cedric.klinkert@unique.ch>, Martin Fadler <martin.fadler@unique.ch>, Sadique Sheik <sadique@unique.ch>, Fabian Schläpfer <fabian@unique.ch>, Pascal Hauri <pascal@unique.ch>, Ejiroghene Oki-Peter <oki-peter.ejiroghene@unique.ai>, Rami Azouz <rami.ext@unique.ch>, Ricardo Visini <ricardo.visini@unique.ch>, Sanzio Monti <sanzio.monti@unique.ai>
@@ -16,7 +16,7 @@ Requires-Dist: sseclient>=0.0.27,<0.0.28
16
16
  Requires-Dist: openai>=1.105.0,<3
17
17
  Requires-Dist: platformdirs>=4.0.0,<5
18
18
  Requires-Dist: pillow>=12.1.1
19
- Requires-Dist: unique-sdk>=2026.42.4
19
+ Requires-Dist: unique-sdk>=2026.44.0.dev0,<2026.44.0rc0
20
20
  Requires-Dist: jambo>=0.1.2,<0.2
21
21
  Requires-Dist: jinja2>=3.1.6,<4
22
22
  Requires-Dist: docxtpl>=0.20.1,<0.21
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "unique_toolkit"
3
- version = "2026.42.4"
3
+ version = "2026.44.0.dev0"
4
4
  description = ""
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -28,7 +28,7 @@ dependencies = [
28
28
  "openai>=1.105.0,<3",
29
29
  "platformdirs>=4.0.0,<5",
30
30
  "pillow>=12.1.1",
31
- "unique-sdk>=2026.42.4",
31
+ "unique-sdk>=2026.44.0.dev0,<2026.44.0rc0",
32
32
  "jambo>=0.1.2,<0.2",
33
33
  "jinja2>=3.1.6,<4",
34
34
  "docxtpl>=0.20.1,<0.21",
@@ -152,7 +152,6 @@ class HistoryManager:
152
152
  return len(self._loop_history) == 0
153
153
 
154
154
  def add_tool_call_results(self, tool_call_results: list[ToolCallResponse]):
155
- self._collected_tool_response_image_urls = []
156
155
  for tool_response in tool_call_results:
157
156
  if tool_response.image_data_urls:
158
157
  for url in tool_response.image_data_urls:
@@ -221,83 +220,6 @@ class HistoryManager:
221
220
  def add_assistant_message(self, message: LanguageModelAssistantMessage) -> None:
222
221
  self._loop_history.append(message)
223
222
 
224
- def tighten_token_budget(self, factor: float) -> None:
225
- self._token_reducer.tighten_effective_token_limit(factor)
226
-
227
- @property
228
- def effective_token_limit(self) -> int:
229
- return self._token_reducer.effective_token_limit
230
-
231
- @property
232
- def last_token_count(self) -> int:
233
- return self._token_reducer.last_token_count
234
-
235
- def withhold_latest_tool_call_results(self, notice: str) -> int:
236
- """Replace every result of the most recent tool-call batch with *notice*.
237
-
238
- The withheld results' chunks are dropped from the reference manager. They
239
- are the newest chunks, so source numbers of earlier results stay valid.
240
- Returns the number of newly withheld results; results that already hold
241
- *notice* are not counted.
242
- """
243
- batch_start: int | None = None
244
- for index in range(len(self._loop_history) - 1, -1, -1):
245
- candidate = self._loop_history[index]
246
- if (
247
- isinstance(candidate, LanguageModelAssistantMessage)
248
- and candidate.tool_calls
249
- ):
250
- batch_start = index
251
- break
252
- if batch_start is None:
253
- return 0
254
-
255
- withheld_tool_call_ids: list[str] = []
256
- for index in range(batch_start + 1, len(self._loop_history)):
257
- message = self._loop_history[index]
258
- if not isinstance(message, LanguageModelToolMessage):
259
- continue
260
- if message.content == notice:
261
- continue
262
- self._loop_history[index] = LanguageModelToolMessage(
263
- content=notice,
264
- tool_call_id=message.tool_call_id,
265
- name=message.name,
266
- )
267
- withheld_tool_call_ids.append(message.tool_call_id)
268
- if not withheld_tool_call_ids:
269
- return 0
270
-
271
- withheld_chunks = {
272
- id(chunk)
273
- for tool_call_id in withheld_tool_call_ids
274
- for chunk in self._reference_manager.get_chunks_of_tool(tool_call_id)
275
- }
276
- if withheld_chunks:
277
- self._reference_manager.replace(
278
- chunks=[
279
- chunk
280
- for chunk in self._reference_manager.get_chunks()
281
- if id(chunk) not in withheld_chunks
282
- ]
283
- )
284
- for tool_call_id in withheld_tool_call_ids:
285
- self._reference_manager.replace_chunks_of_tool(tool_call_id, [])
286
-
287
- if self._collected_tool_response_image_urls:
288
- withheld_ids = set(withheld_tool_call_ids)
289
- self._collected_tool_response_image_urls = [
290
- (url, tool_call_id)
291
- for url, tool_call_id in self._collected_tool_response_image_urls
292
- if tool_call_id not in withheld_ids
293
- ]
294
-
295
- self._logger.warning(
296
- f"Withheld {len(withheld_tool_call_ids)} tool call result(s) that "
297
- "exceeded the context window."
298
- )
299
- return len(withheld_tool_call_ids)
300
-
301
223
  async def get_history_for_model_call(
302
224
  self,
303
225
  original_user_message: str,
@@ -316,6 +238,7 @@ class HistoryManager:
316
238
  remove_from_text=remove_from_text,
317
239
  image_data_urls_from_tools=image_data_from_tools,
318
240
  )
241
+ self._collected_tool_response_image_urls = []
319
242
 
320
243
  if not self._source_offset_initialized:
321
244
  offset = max(0, self._token_reducer.max_db_source_number + 1)
@@ -38,6 +38,7 @@ MAX_INPUT_TOKENS_SAFETY_PERCENTAGE = env_settings.input_correction_reduction_fac
38
38
  SAFETY_MARGIN_FOR_AGGRESSIVE_REDUCTION = env_settings.input_aggressive_reduction_factor
39
39
 
40
40
  PLAIN_TEXT_TRUNCATION_MARKER = "\n\n[... tool response too long and was truncated]"
41
+ # TODO: Make this configurable
41
42
  MIN_PLAIN_TEXT_CHARS_TO_KEEP = 1000
42
43
 
43
44
 
@@ -105,7 +106,6 @@ class LoopTokenReducer:
105
106
  self._language_model.token_limits.token_limit_input
106
107
  * (1 - MAX_INPUT_TOKENS_SAFETY_PERCENTAGE)
107
108
  )
108
- self._last_token_count = 0
109
109
  self._max_db_source_number: int = -1
110
110
  self._db_source_map: dict[int, ContentChunk] = {}
111
111
  self._enable_tool_call_persistence = enable_tool_call_persistence
@@ -131,23 +131,6 @@ class LoopTokenReducer:
131
131
  def db_source_map(self) -> dict[int, ContentChunk]:
132
132
  return self._db_source_map
133
133
 
134
- @property
135
- def effective_token_limit(self) -> int:
136
- return self._effective_token_limit
137
-
138
- @property
139
- def last_token_count(self) -> int:
140
- return self._last_token_count
141
-
142
- def tighten_effective_token_limit(self, factor: float) -> None:
143
- """Shrink the input-token budget for the rest of the run after the provider counted more tokens than the local encoder."""
144
- previous_limit = self._effective_token_limit
145
- self._effective_token_limit = int(previous_limit * factor)
146
- self._logger.warning(
147
- f"Tightened effective token limit from {previous_limit} to "
148
- f"{self._effective_token_limit} tokens."
149
- )
150
-
151
134
  def _get_encoder(self, language_model: LMI) -> Callable[[str], list[int]]:
152
135
  return language_model.get_encoder()
153
136
 
@@ -196,7 +179,6 @@ class LoopTokenReducer:
196
179
  break
197
180
 
198
181
  token_count = self._count_message_tokens(messages)
199
- self._last_token_count = token_count
200
182
  self._logger.info(
201
183
  f"Final token count after reduction: {token_count} of model_capacity {self._language_model.token_limits.token_limit_input}"
202
184
  )
@@ -209,6 +191,8 @@ class LoopTokenReducer:
209
191
  This is purely a size check. Whether anything can actually be reduced to
210
192
  get back under the limit is a separate concern (:meth:`_can_reduce_history`).
211
193
  """
194
+ # TODO: This is not fully correct at the moment as the token_count
195
+ # include system_prompt and user question already
212
196
  return token_count > self._effective_token_limit
213
197
 
214
198
  def _can_reduce_history(self, loop_history: list[LanguageModelMessage]) -> bool:
@@ -21,9 +21,6 @@ from unique_toolkit.language_model.infos import (
21
21
  LanguageModelName,
22
22
  ModelCapabilities,
23
23
  )
24
- from unique_toolkit.language_model.provider_token_count import (
25
- build_provider_token_count_payload,
26
- )
27
24
  from unique_toolkit.language_model.reference import (
28
25
  add_references_to_message,
29
26
  )
@@ -751,35 +748,3 @@ async def stream_complete_with_references_openai(
751
748
  except Exception as e:
752
749
  logger.error("Error streaming completion (model=%s): %s", model_name_, e)
753
750
  raise
754
-
755
-
756
- async def count_tokens_with_provider_async(
757
- *,
758
- company_id: str,
759
- user_id: str,
760
- messages: LanguageModelMessages | list[ChatCompletionMessageParam],
761
- model_name: LanguageModelName | str,
762
- temperature: float = DEFAULT_COMPLETE_TEMPERATURE,
763
- tools: Sequence[LanguageModelTool | LanguageModelToolDescription] | None = None,
764
- other_options: dict[str, Any] | None = None,
765
- ) -> int:
766
- """Count the completion payload with LiteLLM's provider-backed counter."""
767
- options, model, messages_dict, _ = _prepare_all_completions_params_util(
768
- messages=messages,
769
- model_name=model_name,
770
- temperature=temperature,
771
- tools=tools,
772
- other_options=other_options,
773
- )
774
- raw_tools = options.get("tools")
775
- payload = build_provider_token_count_payload(
776
- model=model,
777
- messages=messages_dict,
778
- tools=raw_tools if isinstance(raw_tools, list) else None,
779
- )
780
- response = await unique_sdk.Integrated.count_tokens_async(
781
- user_id=user_id,
782
- company_id=company_id,
783
- **payload,
784
- )
785
- return response["input_tokens"]
@@ -88,7 +88,6 @@ class LanguageModelName(StrEnum):
88
88
  "litellm:anthropic-claude-3-7-sonnet-thinking"
89
89
  )
90
90
  ANTHROPIC_CLAUDE_HAIKU_4_5 = "litellm:anthropic-claude-haiku-4-5"
91
- ANTHROPIC_CLAUDE_HAIKU_5_5 = "litellm:anthropic-claude-haiku-5-5"
92
91
  ANTHROPIC_CLAUDE_SONNET_4 = "litellm:anthropic-claude-sonnet-4"
93
92
  ANTHROPIC_CLAUDE_SONNET_4_5 = "litellm:anthropic-claude-sonnet-4-5"
94
93
  ANTHROPIC_CLAUDE_SONNET_4_6 = "litellm:anthropic-claude-sonnet-4-6"
@@ -165,7 +164,6 @@ class LanguageModelName(StrEnum):
165
164
  LITELLM_KIMI_K3 = "litellm:kimi-k3"
166
165
  LITELLM_QWEN_3 = "litellm:qwen-3-235B-A22B"
167
166
  LITELLM_QWEN_3_THINKING = "litellm:qwen-3-235B-A22B-thinking"
168
- VERTEX_CLAUDE_HAIKU_5_5 = "litellm:vertex-claude-haiku-5-5"
169
167
  VERTEX_CLAUDE_SONNET_4_6 = "litellm:vertex-claude-sonnet-4-6"
170
168
  VERTEX_CLAUDE_SONNET_5 = "litellm:vertex-claude-sonnet-5"
171
169
  VERTEX_CLAUDE_SONNET_5_5 = "litellm:vertex-claude-sonnet-5-5"
@@ -334,28 +332,6 @@ def _load_custom_decoder(tokenizer_name: str) -> TypeDecoder:
334
332
  return tokenizer.decode
335
333
 
336
334
 
337
- _CLAUDE_CONTEXT_WINDOWS = {
338
- "claude-3-7-sonnet": 200_000,
339
- "claude-3-7-sonnet-thinking": 200_000,
340
- "claude-haiku-4-5": 200_000,
341
- "claude-opus-4": 200_000,
342
- "claude-opus-4-1": 200_000,
343
- "claude-opus-4-5": 200_000,
344
- "claude-opus-4-6": 200_000,
345
- "claude-sonnet-4": 200_000,
346
- "claude-sonnet-4-5": 200_000,
347
- "claude-sonnet-4-6": 200_000,
348
- "claude-fable-5": 1_000_000,
349
- "claude-haiku-5-5": 1_000_000,
350
- "claude-opus-4-7": 1_000_000,
351
- "claude-opus-4-8": 1_000_000,
352
- "claude-opus-5": 1_000_000,
353
- "claude-opus-5-5": 1_000_000,
354
- "claude-sonnet-5": 1_000_000,
355
- "claude-sonnet-5-5": 1_000_000,
356
- }
357
-
358
-
359
335
  class LanguageModelInfo(BaseModel):
360
336
  model_config = get_configuration_dict()
361
337
  name: (
@@ -1786,40 +1762,6 @@ class LanguageModelInfo(BaseModel):
1786
1762
  published_at=date(2025, 10, 1),
1787
1763
  supported_reasoning_efforts=[],
1788
1764
  )
1789
- case (
1790
- LanguageModelName.ANTHROPIC_CLAUDE_HAIKU_5_5
1791
- | LanguageModelName.VERTEX_CLAUDE_HAIKU_5_5
1792
- ):
1793
- return cls(
1794
- name=model_name,
1795
- capabilities=[
1796
- ModelCapabilities.FUNCTION_CALLING,
1797
- ModelCapabilities.STREAMING,
1798
- ModelCapabilities.VISION,
1799
- ModelCapabilities.REASONING,
1800
- ],
1801
- provider=LanguageModelProvider.LITELLM,
1802
- family=ModelFamily.ANTHROPIC,
1803
- version="claude-haiku-5-5",
1804
- encoder_name=EncoderName.O200K_BASE, # TODO: Update encoder with litellm
1805
- token_limits=LanguageModelTokenLimits(
1806
- # TODO: Remove the 1.3 adjustment once a proper Claude tokenizer is implemented. UN-24123
1807
- # 1M context / 128K max output. https://platform.claude.com/docs/en/models/haiku-5-5/overview
1808
- token_limit_input=int(1_000_000 / 1.3),
1809
- token_limit_output=int(128_000 / 1.3),
1810
- ),
1811
- info_cutoff_at=date(2026, 6, 1),
1812
- published_at=date(2026, 10, 7),
1813
- # Effort levels: https://platform.claude.com/docs/en/build-with-claude/effort
1814
- default_options={"reasoning_effort": "medium"},
1815
- supported_reasoning_efforts=[
1816
- "low",
1817
- "medium",
1818
- "high",
1819
- "xhigh",
1820
- "max",
1821
- ],
1822
- )
1823
1765
  case LanguageModelName.ANTHROPIC_CLAUDE_SONNET_4:
1824
1766
  return cls(
1825
1767
  name=model_name,
@@ -2020,9 +1962,8 @@ class LanguageModelInfo(BaseModel):
2020
1962
  ),
2021
1963
  info_cutoff_at=date(2025, 8, 1),
2022
1964
  published_at=date(2025, 11, 13),
2023
- # No default: a set effort enables thinking, which a forced
2024
- # tool_choice rejects.
2025
1965
  # https://platform.claude.com/docs/en/build-with-claude/effort
1966
+ default_options={"reasoning_effort": "medium"},
2026
1967
  supported_reasoning_efforts=["low", "medium", "high"],
2027
1968
  )
2028
1969
  case (
@@ -3758,29 +3699,6 @@ class LanguageModelInfo(BaseModel):
3758
3699
  else:
3759
3700
  return self.name
3760
3701
 
3761
- @property
3762
- def provider_context_window(self) -> int:
3763
- """Return the raw provider input context window before local-tokenizer adjustments."""
3764
- if self.family == ModelFamily.ANTHROPIC:
3765
- known_window = _CLAUDE_CONTEXT_WINDOWS.get(self.version)
3766
- if known_window is None:
3767
- model_name = str(self.name)
3768
- known_window = next(
3769
- (
3770
- window
3771
- for version, window in sorted(
3772
- _CLAUDE_CONTEXT_WINDOWS.items(),
3773
- key=lambda item: len(item[0]),
3774
- reverse=True,
3775
- )
3776
- if version in model_name
3777
- ),
3778
- None,
3779
- )
3780
- if known_window is not None:
3781
- return known_window
3782
- return self.token_limits.token_limit_input
3783
-
3784
3702
 
3785
3703
  @deprecated(
3786
3704
  """
@@ -1,4 +1,4 @@
1
- from typing import Any, Protocol, Sequence, runtime_checkable
1
+ from typing import Any, Protocol, Sequence
2
2
 
3
3
  from openai.types.chat import (
4
4
  ChatCompletionMessageParam,
@@ -55,19 +55,6 @@ class SupportsComplete(Protocol):
55
55
  ) -> LanguageModelResponse: ...
56
56
 
57
57
 
58
- @runtime_checkable
59
- class SupportsTokenCount(Protocol):
60
- async def count_tokens_async(
61
- self,
62
- *,
63
- messages: LanguageModelMessages | list[ChatCompletionMessageParam],
64
- model_name: LanguageModelName | str,
65
- temperature: float = DEFAULT_COMPLETE_TEMPERATURE,
66
- tools: Sequence[LanguageModelTool | LanguageModelToolDescription] | None = None,
67
- other_options: dict[str, Any] | None = None,
68
- ) -> int: ...
69
-
70
-
71
58
  class SupportCompleteWithReferences(Protocol):
72
59
  def complete_with_references(
73
60
  self,
@@ -104,9 +104,6 @@ from unique_toolkit.language_model.constants import (
104
104
  DEFAULT_COMPLETE_TEMPERATURE,
105
105
  DEFAULT_COMPLETE_TIMEOUT,
106
106
  )
107
- from unique_toolkit.language_model.functions import (
108
- count_tokens_with_provider_async,
109
- )
110
107
  from unique_toolkit.language_model.infos import (
111
108
  LanguageModelName,
112
109
  )
@@ -1722,25 +1719,6 @@ class ChatService(ChatServiceDeprecated):
1722
1719
  other_options=other_options,
1723
1720
  )
1724
1721
 
1725
- async def count_tokens_async(
1726
- self,
1727
- *,
1728
- messages: LanguageModelMessages | list[ChatCompletionMessageParam],
1729
- model_name: LanguageModelName | str,
1730
- temperature: float = DEFAULT_COMPLETE_TEMPERATURE,
1731
- tools: Sequence[LanguageModelTool | LanguageModelToolDescription] | None = None,
1732
- other_options: dict[str, Any] | None = None,
1733
- ) -> int:
1734
- return await count_tokens_with_provider_async(
1735
- company_id=self._company_id,
1736
- user_id=self._user_id,
1737
- messages=messages,
1738
- model_name=model_name,
1739
- temperature=temperature,
1740
- tools=tools,
1741
- other_options=other_options,
1742
- )
1743
-
1744
1722
  async def complete_async(
1745
1723
  self,
1746
1724
  messages: LanguageModelMessages | list[ChatCompletionMessageParam],
@@ -1,259 +0,0 @@
1
- """Keep agent-loop prompts inside the provider's context window, verified by the provider's own token counter."""
2
-
3
- from __future__ import annotations
4
-
5
- import asyncio
6
- import time
7
- from collections.abc import Awaitable, Callable
8
- from logging import Logger
9
- from typing import Any, TypeVar
10
-
11
- from unique_toolkit.agentic.history_manager.history_manager import HistoryManager
12
- from unique_toolkit.agentic.loop_runner.base import _LoopIterationRunnerKwargs
13
- from unique_toolkit.language_model.infos import LanguageModelInfo
14
- from unique_toolkit.language_model.settings import ModelFamily
15
- from unique_toolkit.protocols.support import SupportsTokenCount
16
-
17
- _T = TypeVar("_T")
18
-
19
- _CONTEXT_OVERFLOW_SIGNALS = (
20
- "context_length_exceeded",
21
- "contextwindowexceedederror",
22
- "tokenlimitexceeded",
23
- "maximum context length",
24
- "prompt is too long",
25
- "input is too long",
26
- "too many input tokens",
27
- "exceeds the maximum number of tokens",
28
- )
29
- _CONTEXT_WINDOW_QUALIFIERS = ("exceed", "too long", "maximum")
30
-
31
- CONTEXT_OVERFLOW_TOKEN_BUDGET_FACTOR = 0.7
32
- PROVIDER_COUNT_TARGET_RATIO = 0.95
33
- MAX_PROVIDER_OVERFLOW_REDUCTION_FACTOR = 0.9
34
- APPROXIMATE_TOKENIZER_TRIGGER_RATIO = 0.7
35
- NATIVE_TOKENIZER_TRIGGER_RATIO = 0.85
36
- LOCAL_LIMIT_TRIGGER_RATIO = 0.95
37
- DEFAULT_OUTPUT_TOKEN_RESERVE = 10_000
38
- PROVIDER_TOKEN_COUNT_TIMEOUT_SECONDS = 10
39
-
40
- _NATIVE_TOKENIZER_FAMILIES = {
41
- ModelFamily.OPENAI,
42
- ModelFamily.DEEPSEEK,
43
- ModelFamily.QWEN,
44
- }
45
-
46
- WITHHELD_TOOL_RESULT_NOTICE = (
47
- "The combined output of the tool calls made in this step was too large for "
48
- "the model's context window, so this result was withheld. Do not repeat "
49
- "these tool calls in parallel. Call them one at a time instead, and narrow "
50
- "each call (for example a lower result limit, a shorter date range or a "
51
- "more specific query) so that each result stays small."
52
- )
53
-
54
-
55
- def is_context_window_exceeded_error(exc: BaseException) -> bool:
56
- """Return True if *exc* indicates the prompt exceeded the model's context window."""
57
- error_text = f"{type(exc).__name__} {exc}".lower()
58
- if any(signal in error_text for signal in _CONTEXT_OVERFLOW_SIGNALS):
59
- return True
60
- return "context window" in error_text and any(
61
- qualifier in error_text for qualifier in _CONTEXT_WINDOW_QUALIFIERS
62
- )
63
-
64
-
65
- def supports_provider_token_count(model: LanguageModelInfo) -> bool:
66
- return model.family == ModelFamily.ANTHROPIC
67
-
68
-
69
- def provider_context_window(model: LanguageModelInfo) -> int:
70
- return model.provider_context_window
71
-
72
-
73
- def provider_count_trigger_tokens(
74
- model: LanguageModelInfo,
75
- effective_local_limit: int,
76
- ) -> int:
77
- """Local count at which an authoritative provider count becomes worthwhile."""
78
- ratio = (
79
- NATIVE_TOKENIZER_TRIGGER_RATIO
80
- if model.family in _NATIVE_TOKENIZER_FAMILIES
81
- else APPROXIMATE_TOKENIZER_TRIGGER_RATIO
82
- )
83
- return min(
84
- int(provider_context_window(model) * ratio),
85
- int(effective_local_limit * LOCAL_LIMIT_TRIGGER_RATIO),
86
- )
87
-
88
-
89
- def provider_input_target(
90
- model: LanguageModelInfo,
91
- other_options: dict[str, Any] | None,
92
- ) -> int:
93
- """Maximum provider-counted input while preserving output and safety room."""
94
- options = other_options or {}
95
- configured_output = options.get("max_completion_tokens", options.get("max_tokens"))
96
- output_reserve = (
97
- configured_output
98
- if isinstance(configured_output, int) and configured_output >= 0
99
- else min(
100
- DEFAULT_OUTPUT_TOKEN_RESERVE,
101
- model.token_limits.token_limit_output,
102
- )
103
- )
104
- return max(
105
- 1,
106
- int(provider_context_window(model) * PROVIDER_COUNT_TARGET_RATIO)
107
- - output_reserve,
108
- )
109
-
110
-
111
- def provider_overflow_reduction_factor(provider_count: int, target: int) -> float:
112
- """Budget multiplier that brings an oversized provider count under *target*."""
113
- return min(
114
- MAX_PROVIDER_OVERFLOW_REDUCTION_FACTOR,
115
- target / provider_count * PROVIDER_COUNT_TARGET_RATIO,
116
- )
117
-
118
-
119
- class ContextOverflowGuard:
120
- """Preflight provider token-budget verification and overflow retry policy."""
121
-
122
- def __init__(
123
- self,
124
- *,
125
- logger: Logger,
126
- history_manager: HistoryManager,
127
- token_counter: object,
128
- model: LanguageModelInfo,
129
- ) -> None:
130
- self._logger = logger
131
- self._history_manager = history_manager
132
- self._token_counter = token_counter
133
- self._model = model
134
-
135
- async def preflight_token_budget(
136
- self,
137
- kwargs: _LoopIterationRunnerKwargs,
138
- recompose: Callable[[], Awaitable[None]],
139
- ) -> None:
140
- """Verify near-limit payloads using the provider's tokenizer before the LLM call."""
141
- if not supports_provider_token_count(self._model):
142
- return
143
- if not isinstance(self._token_counter, SupportsTokenCount):
144
- return
145
-
146
- local_count = self._history_manager.last_token_count
147
- effective_limit = self._history_manager.effective_token_limit
148
- trigger = provider_count_trigger_tokens(self._model, effective_limit)
149
- if local_count < trigger:
150
- return
151
-
152
- target = provider_input_target(self._model, kwargs.get("other_options"))
153
- provider_count = await self._try_provider_token_count(kwargs)
154
- if provider_count is None or provider_count <= target:
155
- return
156
-
157
- self._logger.warning(
158
- f"Provider token count {provider_count} exceeds the safe input target "
159
- f"{target}. Reducing tool results before the LLM call."
160
- )
161
- reduction_factor = provider_overflow_reduction_factor(provider_count, target)
162
- self._history_manager.tighten_token_budget(reduction_factor)
163
- await recompose()
164
-
165
- reduced_count = await self._try_provider_token_count(kwargs)
166
- if reduced_count is None or reduced_count <= target:
167
- return
168
-
169
- if not self._history_manager.withhold_latest_tool_call_results(
170
- WITHHELD_TOOL_RESULT_NOTICE
171
- ):
172
- self._logger.warning(
173
- f"Provider token count remains above target ({reduced_count} > "
174
- f"{target}), but there are no tool results to withhold."
175
- )
176
- return
177
-
178
- self._logger.warning(
179
- "Provider token count remains above target after reduction. "
180
- "Withholding the latest tool-call batch."
181
- )
182
- await recompose()
183
-
184
- withheld_count = await self._try_provider_token_count(kwargs)
185
- if withheld_count is None or withheld_count <= target:
186
- return
187
-
188
- self._logger.warning(
189
- f"Provider token count {withheld_count} still exceeds the safe input "
190
- f"target {target} after withholding. Reducing history further."
191
- )
192
- self._history_manager.tighten_token_budget(
193
- provider_overflow_reduction_factor(withheld_count, target)
194
- )
195
- await recompose()
196
-
197
- async def retry_after_overflow(
198
- self,
199
- exc: Exception,
200
- *,
201
- recompose: Callable[[], Awaitable[None]],
202
- run_iteration: Callable[[], Awaitable[_T]],
203
- ) -> _T:
204
- """Retry an oversized LLM call by tightening the budget or withholding the latest tool batch."""
205
- self._logger.warning(
206
- "LLM call exceeded the context window. Retrying with a tighter token budget.",
207
- exc_info=exc,
208
- )
209
- self._history_manager.tighten_token_budget(CONTEXT_OVERFLOW_TOKEN_BUDGET_FACTOR)
210
- await recompose()
211
- try:
212
- return await run_iteration()
213
- except Exception as retry_exc:
214
- if not is_context_window_exceeded_error(retry_exc):
215
- raise
216
- if not self._history_manager.withhold_latest_tool_call_results(
217
- WITHHELD_TOOL_RESULT_NOTICE
218
- ):
219
- raise
220
- self._logger.warning(
221
- "LLM call still exceeded the context window. Retrying with the "
222
- "latest tool call results withheld.",
223
- exc_info=retry_exc,
224
- )
225
- await recompose()
226
- return await run_iteration()
227
-
228
- async def _try_provider_token_count(
229
- self, kwargs: _LoopIterationRunnerKwargs
230
- ) -> int | None:
231
- counter = self._token_counter
232
- if not isinstance(counter, SupportsTokenCount):
233
- return None
234
- started_at = time.perf_counter()
235
- try:
236
- count = await asyncio.wait_for(
237
- counter.count_tokens_async(
238
- messages=kwargs["messages"],
239
- model_name=self._model.name,
240
- temperature=kwargs.get("temperature", 0.0),
241
- tools=kwargs.get("tools"),
242
- other_options=kwargs.get("other_options"),
243
- ),
244
- timeout=PROVIDER_TOKEN_COUNT_TIMEOUT_SECONDS,
245
- )
246
- except Exception:
247
- elapsed_ms = (time.perf_counter() - started_at) * 1000
248
- self._logger.warning(
249
- f"Provider token counting failed after {elapsed_ms:.0f} ms. "
250
- "Continuing with the local token budget.",
251
- exc_info=True,
252
- )
253
- return None
254
- elapsed_ms = (time.perf_counter() - started_at) * 1000
255
- self._logger.info(
256
- f"Provider token count for {self._model.name}: {count} tokens "
257
- f"in {elapsed_ms:.0f} ms."
258
- )
259
- return count if count > 0 else None