unique_toolkit 2026.44.0.dev4__tar.gz → 2026.44.0.dev5__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.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/PKG-INFO +2 -2
  2. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/pyproject.toml +2 -2
  3. unique_toolkit-2026.44.0.dev5/unique_toolkit/agentic/history_manager/context_overflow.py +264 -0
  4. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/history_manager/history_manager.py +73 -1
  5. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/history_manager/loop_token_reducer.py +23 -3
  6. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/language_model/functions.py +35 -0
  7. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/language_model/infos.py +45 -0
  8. unique_toolkit-2026.44.0.dev5/unique_toolkit/language_model/provider_token_count.py +170 -0
  9. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/protocols/support.py +14 -1
  10. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/services/chat_service.py +22 -0
  11. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/README.md +0 -0
  12. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/__init__.py +0 -0
  13. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/__init__.py +0 -0
  14. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/_base_service.py +0 -0
  15. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/_time_utils.py +0 -0
  16. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/api_calling/human_verification_manager.py +0 -0
  17. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/base_model_type_attribute.py +0 -0
  18. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/chunk_relevancy_sorter/config.py +0 -0
  19. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/chunk_relevancy_sorter/exception.py +0 -0
  20. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/chunk_relevancy_sorter/schemas.py +0 -0
  21. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/chunk_relevancy_sorter/service.py +0 -0
  22. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/chunk_relevancy_sorter/tests/test_service.py +0 -0
  23. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/config_checker/README.md +0 -0
  24. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/config_checker/__init__.py +0 -0
  25. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/config_checker/__main__.py +0 -0
  26. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/config_checker/cli.py +0 -0
  27. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/config_checker/differ.py +0 -0
  28. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/config_checker/exporter.py +0 -0
  29. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/config_checker/models.py +0 -0
  30. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/config_checker/registry.py +0 -0
  31. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/config_checker/validator.py +0 -0
  32. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/default_language_model.py +0 -0
  33. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/docx_generator/__init__.py +0 -0
  34. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/docx_generator/config.py +0 -0
  35. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/docx_generator/pandoc_converter.py +0 -0
  36. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/docx_generator/schemas.py +0 -0
  37. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/docx_generator/service.py +0 -0
  38. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/docx_generator/template/Doc Template.docx +0 -0
  39. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/endpoint_builder.py +0 -0
  40. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/endpoint_requestor.py +0 -0
  41. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/event_bus.py +0 -0
  42. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/exception.py +0 -0
  43. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/execution.py +0 -0
  44. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/experimental/endpoint_builder.py +0 -0
  45. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/experimental/endpoint_requestor.py +0 -0
  46. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/experimental/write_up_agent/README.md +0 -0
  47. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/experimental/write_up_agent/__init__.py +0 -0
  48. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/experimental/write_up_agent/agent.py +0 -0
  49. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/experimental/write_up_agent/config.py +0 -0
  50. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/experimental/write_up_agent/examples/data.csv +0 -0
  51. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/experimental/write_up_agent/examples/example_usage.py +0 -0
  52. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/experimental/write_up_agent/schemas.py +0 -0
  53. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/experimental/write_up_agent/services/__init__.py +0 -0
  54. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/__init__.py +0 -0
  55. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/exceptions.py +0 -0
  56. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/service.py +0 -0
  57. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/utils.py +0 -0
  58. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/__init__.py +0 -0
  59. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/config.py +0 -0
  60. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/exceptions.py +0 -0
  61. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/config.py +0 -0
  62. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/system_prompt.j2 +0 -0
  63. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/user_prompt.j2 +0 -0
  64. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/service.py +0 -0
  65. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/__init__.py +0 -0
  66. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/default_template.j2 +0 -0
  67. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/exceptions.py +0 -0
  68. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/service.py +0 -0
  69. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/utils.py +0 -0
  70. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/experimental/write_up_agent/utils.py +0 -0
  71. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/feature_flags/schema.py +0 -0
  72. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/metadata_filter_scope.py +0 -0
  73. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/pydantic/rjsf_tags.py +0 -0
  74. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/pydantic_helpers.py +0 -0
  75. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/referencing.py +0 -0
  76. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/string_utilities.py +0 -0
  77. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/tests/test_referencing.py +0 -0
  78. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/tests/test_string_utilities.py +0 -0
  79. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/token/__init__.py +0 -0
  80. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/token/image_token_counting.py +0 -0
  81. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/token/token_counting.py +0 -0
  82. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/token/tokenizers/deepseek/tokenizer.json +0 -0
  83. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/token/tokenizers/qwen/tokenizer.json +0 -0
  84. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/utils/__init__.py +0 -0
  85. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/utils/files.py +0 -0
  86. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/utils/image/encode.py +0 -0
  87. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/utils/jinja/helpers.py +0 -0
  88. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/utils/jinja/render.py +0 -0
  89. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/utils/jinja/schema.py +0 -0
  90. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/utils/jinja/utils.py +0 -0
  91. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/utils/structured_output/__init__.py +0 -0
  92. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/utils/structured_output/schema.py +0 -0
  93. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/utils/write_configuration.py +0 -0
  94. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/validate_required_values.py +0 -0
  95. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/validators.py +0 -0
  96. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/__init__.py +0 -0
  97. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/debug_info_manager/debug_info_manager.py +0 -0
  98. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/debug_info_manager/test/test_debug_info_manager.py +0 -0
  99. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/evaluation/config.py +0 -0
  100. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/__init__.py +0 -0
  101. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/system_prompt.j2 +0 -0
  102. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/user_prompt.j2 +0 -0
  103. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/evaluation/context_relevancy/schema.py +0 -0
  104. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/evaluation/context_relevancy/service.py +0 -0
  105. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/evaluation/evaluation_manager.py +0 -0
  106. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/evaluation/exception.py +0 -0
  107. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/evaluation/hallucination/constants.py +0 -0
  108. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/evaluation/hallucination/hallucination_evaluation.py +0 -0
  109. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/evaluation/hallucination/prompts/__init__.py +0 -0
  110. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/evaluation/hallucination/prompts/system_prompt.j2 +0 -0
  111. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/evaluation/hallucination/prompts/user_prompt.j2 +0 -0
  112. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/evaluation/hallucination/service.py +0 -0
  113. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/evaluation/hallucination/utils.py +0 -0
  114. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/evaluation/output_parser.py +0 -0
  115. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/evaluation/schemas.py +0 -0
  116. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/evaluation/tests/fixtures.py +0 -0
  117. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/evaluation/tests/test_config.py +0 -0
  118. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/evaluation/tests/test_context_relevancy_service.py +0 -0
  119. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/evaluation/tests/test_hallucination_constants.py +0 -0
  120. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/evaluation/tests/test_hallucination_external_context.py +0 -0
  121. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/evaluation/tests/test_hallucination_utils.py +0 -0
  122. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/evaluation/tests/test_output_parser.py +0 -0
  123. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/evaluation/tests/test_prompt_loaders.py +0 -0
  124. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/evaluation/utils.py +0 -0
  125. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/feature_flags/__init__.py +0 -0
  126. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/feature_flags/feature_flags.py +0 -0
  127. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/history_manager/history_construction_with_contents.py +0 -0
  128. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/history_manager/settings.py +0 -0
  129. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/history_manager/utils.py +0 -0
  130. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/loop_runner/__init__.py +0 -0
  131. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/loop_runner/_iteration_handler_utils.py +0 -0
  132. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/loop_runner/_responses_iteration_handler_utils.py +0 -0
  133. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/loop_runner/_responses_stream_handler_utils.py +0 -0
  134. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/loop_runner/_stream_handler_utils.py +0 -0
  135. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/loop_runner/base.py +0 -0
  136. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/loop_runner/middleware/__init__.py +0 -0
  137. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/loop_runner/middleware/planning/__init__.py +0 -0
  138. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/loop_runner/middleware/planning/planning.py +0 -0
  139. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/loop_runner/middleware/planning/schema.py +0 -0
  140. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/loop_runner/runners/__init__.py +0 -0
  141. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/loop_runner/runners/basic.py +0 -0
  142. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/loop_runner/runners/mistral/__init__.py +0 -0
  143. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/loop_runner/runners/mistral/mistral_runner.py +0 -0
  144. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/loop_runner/runners/prompt_forced_tool/__init__.py +0 -0
  145. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/loop_runner/runners/prompt_forced_tool/helpers.py +0 -0
  146. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/loop_runner/runners/prompt_forced_tool/runner.py +0 -0
  147. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/loop_runner/runners/qwen/__init__.py +0 -0
  148. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/loop_runner/runners/qwen/helpers.py +0 -0
  149. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/loop_runner/runners/qwen/qwen_runner.py +0 -0
  150. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/message_log_manager/__init__.py +0 -0
  151. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/message_log_manager/service.py +0 -0
  152. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/message_log_order.py +0 -0
  153. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/postprocessor/postprocessor_manager.py +0 -0
  154. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/reference_manager/reference_manager.py +0 -0
  155. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/reference_manager/tests/test_external_context.py +0 -0
  156. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/responses_api/__init__.py +0 -0
  157. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/responses_api/postprocessors/code_display.py +0 -0
  158. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/responses_api/postprocessors/generated_files.py +0 -0
  159. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/responses_api/stream_handler.py +0 -0
  160. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/short_term_memory_manager/persistent_short_term_memory_manager.py +0 -0
  161. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/thinking_manager/thinking_manager.py +0 -0
  162. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/__init__.py +0 -0
  163. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/a2a/__init__.py +0 -0
  164. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/a2a/config.py +0 -0
  165. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/a2a/evaluation/__init__.py +0 -0
  166. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/a2a/evaluation/_utils.py +0 -0
  167. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/a2a/evaluation/config.py +0 -0
  168. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/a2a/evaluation/evaluator.py +0 -0
  169. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/a2a/evaluation/summarization_user_message.j2 +0 -0
  170. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/a2a/manager.py +0 -0
  171. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/a2a/postprocessing/__init__.py +0 -0
  172. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/a2a/postprocessing/_display_utils.py +0 -0
  173. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/a2a/postprocessing/_ref_utils.py +0 -0
  174. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/a2a/postprocessing/config.py +0 -0
  175. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/a2a/postprocessing/display.py +0 -0
  176. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/a2a/postprocessing/references.py +0 -0
  177. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display.py +0 -0
  178. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display_utils.py +0 -0
  179. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_ref_utils.py +0 -0
  180. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_references.py +0 -0
  181. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/a2a/prompts.py +0 -0
  182. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/a2a/response_watcher/__init__.py +0 -0
  183. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/a2a/response_watcher/service.py +0 -0
  184. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/a2a/tool/__init__.py +0 -0
  185. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/a2a/tool/_memory.py +0 -0
  186. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/a2a/tool/_schema.py +0 -0
  187. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/a2a/tool/config.py +0 -0
  188. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/a2a/tool/service.py +0 -0
  189. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/a2a/tool/test/test_service_utils.py +0 -0
  190. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/agent_chunks_hanlder.py +0 -0
  191. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/config.py +0 -0
  192. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/experimental/__init__.py +0 -0
  193. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/experimental/ask_user_tool/__init__.py +0 -0
  194. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/experimental/ask_user_tool/config.py +0 -0
  195. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/experimental/ask_user_tool/tool.py +0 -0
  196. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/experimental/open_file_tool/__init__.py +0 -0
  197. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/experimental/open_file_tool/config.py +0 -0
  198. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/experimental/open_file_tool/runtime.py +0 -0
  199. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/experimental/open_file_tool/tool.py +0 -0
  200. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/experimental/retrieve_search_scope_tool/__init__.py +0 -0
  201. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/experimental/retrieve_search_scope_tool/config.py +0 -0
  202. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/experimental/retrieve_search_scope_tool/tool.py +0 -0
  203. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/experimental/todo/__init__.py +0 -0
  204. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/experimental/todo/config.py +0 -0
  205. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/experimental/todo/prompts/__init__.py +0 -0
  206. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/experimental/todo/prompts/execution_reminder.j2 +0 -0
  207. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/experimental/todo/prompts/system_prompt.j2 +0 -0
  208. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/experimental/todo/prompts/tool_description.j2 +0 -0
  209. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/experimental/todo/prompts/verification_nudge.j2 +0 -0
  210. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/experimental/todo/schemas.py +0 -0
  211. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/experimental/todo/service.py +0 -0
  212. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/factory.py +0 -0
  213. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/mcp/__init__.py +0 -0
  214. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/mcp/manager.py +0 -0
  215. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/mcp/models.py +0 -0
  216. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/mcp/tool_wrapper.py +0 -0
  217. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/names.py +0 -0
  218. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/openai_builtin/__init__.py +0 -0
  219. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/openai_builtin/base.py +0 -0
  220. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/__init__.py +0 -0
  221. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/activator/__init__.py +0 -0
  222. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/activator/config.py +0 -0
  223. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/activator/service.py +0 -0
  224. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/builder/__init__.py +0 -0
  225. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/builder/_container.py +0 -0
  226. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/builder/_files.py +0 -0
  227. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/builder/_memory.py +0 -0
  228. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/builder/builder.py +0 -0
  229. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/config.py +0 -0
  230. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/__init__.py +0 -0
  231. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/artifacts.py +0 -0
  232. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/code_display.py +0 -0
  233. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/generated_files.py +0 -0
  234. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/office_preview.py +0 -0
  235. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/schemas.py +0 -0
  236. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/tool/__init__.py +0 -0
  237. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/tool/config.py +0 -0
  238. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/tool/service.py +0 -0
  239. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/openai_builtin/manager.py +0 -0
  240. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/run_context.py +0 -0
  241. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/schemas.py +0 -0
  242. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/test/test_mcp_manager.py +0 -0
  243. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/test/test_tool_progress_reporter.py +0 -0
  244. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/tool.py +0 -0
  245. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/tool_manager.py +0 -0
  246. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/tool_progress_reporter.py +0 -0
  247. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/utils/__init__.py +0 -0
  248. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/utils/source_handling/__init__.py +0 -0
  249. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/utils/source_handling/schema.py +0 -0
  250. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/utils/source_handling/source_formatting.py +0 -0
  251. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/utils/source_handling/tests/test_source_formatting.py +0 -0
  252. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic_table/__init__.py +0 -0
  253. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic_table/schemas.py +0 -0
  254. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic_table/service.py +0 -0
  255. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic_table/synthetic_chat_event.py +0 -0
  256. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/app/__init__.py +0 -0
  257. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/app/chat_event_filter_options_settings.py +0 -0
  258. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/app/dev_util.py +0 -0
  259. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/app/fast_api_factory.py +0 -0
  260. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/app/feature_flags.py +0 -0
  261. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/app/find_env_file.py +0 -0
  262. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/app/init_logging.py +0 -0
  263. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/app/init_sdk.py +0 -0
  264. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/app/performance/async_tasks.py +0 -0
  265. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/app/performance/async_wrapper.py +0 -0
  266. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/app/schemas.py +0 -0
  267. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/app/unique_settings.py +0 -0
  268. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/app/verification.py +0 -0
  269. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/app/webhook.py +0 -0
  270. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/chat/__init__.py +0 -0
  271. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/chat/cancellation.py +0 -0
  272. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/chat/constants.py +0 -0
  273. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/chat/deprecated/__init__.py +0 -0
  274. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/chat/deprecated/service.py +0 -0
  275. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/chat/functions.py +0 -0
  276. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/chat/rendering.py +0 -0
  277. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/chat/responses_api.py +0 -0
  278. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/chat/schemas.py +0 -0
  279. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/chat/service.py +0 -0
  280. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/chat/state.py +0 -0
  281. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/chat/utils.py +0 -0
  282. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/content/__init__.py +0 -0
  283. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/content/constants.py +0 -0
  284. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/content/functions.py +0 -0
  285. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/content/schemas.py +0 -0
  286. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/content/service.py +0 -0
  287. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/content/smart_rules.py +0 -0
  288. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/content/utils.py +0 -0
  289. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/data_extraction/README.md +0 -0
  290. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/data_extraction/__init__.py +0 -0
  291. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/data_extraction/augmented/__init__.py +0 -0
  292. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/data_extraction/augmented/service.py +0 -0
  293. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/data_extraction/base.py +0 -0
  294. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/data_extraction/basic/__init__.py +0 -0
  295. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/data_extraction/basic/config.py +0 -0
  296. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/data_extraction/basic/prompt.py +0 -0
  297. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/data_extraction/basic/service.py +0 -0
  298. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/elicitation/__init__.py +0 -0
  299. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/elicitation/constants.py +0 -0
  300. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/elicitation/exceptions.py +0 -0
  301. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/elicitation/functions.py +0 -0
  302. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/elicitation/schemas.py +0 -0
  303. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/elicitation/service.py +0 -0
  304. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/embedding/__init__.py +0 -0
  305. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/embedding/constants.py +0 -0
  306. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/embedding/functions.py +0 -0
  307. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/embedding/schemas.py +0 -0
  308. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/embedding/service.py +0 -0
  309. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/embedding/utils.py +0 -0
  310. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/README.md +0 -0
  311. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/__init__.py +0 -0
  312. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/_internal/__init__.py +0 -0
  313. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/_internal/streaming/__init__.py +0 -0
  314. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/_internal/streaming/common.py +0 -0
  315. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/_internal/streaming/pattern_replacer.py +0 -0
  316. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/components/__init__.py +0 -0
  317. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/components/_base.py +0 -0
  318. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/components/content_tree/__init__.py +0 -0
  319. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/components/content_tree/functions.py +0 -0
  320. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/components/content_tree/schemas.py +0 -0
  321. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/components/content_tree/service.py +0 -0
  322. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/components/internal_search/__init__.py +0 -0
  323. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/components/internal_search/base/__init__.py +0 -0
  324. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/components/internal_search/base/config.py +0 -0
  325. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/components/internal_search/base/schemas.py +0 -0
  326. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/components/internal_search/base/service.py +0 -0
  327. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/components/internal_search/base/utils.py +0 -0
  328. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/components/internal_search/chat/__init__.py +0 -0
  329. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/components/internal_search/chat/config.py +0 -0
  330. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/components/internal_search/chat/schemas.py +0 -0
  331. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/components/internal_search/chat/service.py +0 -0
  332. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/components/internal_search/knowledge_base/__init__.py +0 -0
  333. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/components/internal_search/knowledge_base/config.py +0 -0
  334. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/components/internal_search/knowledge_base/schemas.py +0 -0
  335. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/components/internal_search/knowledge_base/service.py +0 -0
  336. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/components/internal_search/post_processing/__init__.py +0 -0
  337. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/components/internal_search/post_processing/config.py +0 -0
  338. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/components/internal_search/post_processing/service.py +0 -0
  339. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/content_tree/__init__.py +0 -0
  340. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/identity/__init__.py +0 -0
  341. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/integrations/__init__.py +0 -0
  342. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/integrations/openai/__init__.py +0 -0
  343. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/integrations/openai/streaming/__init__.py +0 -0
  344. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/__init__.py +0 -0
  345. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/_async_bridge.py +0 -0
  346. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/_model_params.py +0 -0
  347. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/__init__.py +0 -0
  348. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/complete_with_references.py +0 -0
  349. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/stream_event_router.py +0 -0
  350. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/text_event_handler.py +0 -0
  351. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/tool_call_event_handler.py +0 -0
  352. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/events.py +0 -0
  353. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/protocols/__init__.py +0 -0
  354. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/protocols/chat_completions.py +0 -0
  355. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/protocols/responses.py +0 -0
  356. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/__init__.py +0 -0
  357. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/code_interpreter_event_handler.py +0 -0
  358. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/complete_with_references.py +0 -0
  359. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/completed_event_handler.py +0 -0
  360. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/stream_event_router.py +0 -0
  361. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/text_delta_event_handler.py +0 -0
  362. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/tool_call_event_handler.py +0 -0
  363. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/subscribers/__init__.py +0 -0
  364. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/subscribers/message_persister.py +0 -0
  365. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/subscribers/progress_log_persister.py +0 -0
  366. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/resources/__init__.py +0 -0
  367. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/resources/content_folder/__init__.py +0 -0
  368. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/resources/content_folder/functions.py +0 -0
  369. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/resources/content_folder/schemas.py +0 -0
  370. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/resources/content_folder/service.py +0 -0
  371. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/resources/facades/__init__.py +0 -0
  372. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/resources/facades/identity/__init__.py +0 -0
  373. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/resources/facades/identity/service.py +0 -0
  374. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/resources/feature_flags/README.md +0 -0
  375. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/resources/feature_flags/__init__.py +0 -0
  376. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/resources/feature_flags/_graphql_client.py +0 -0
  377. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/resources/feature_flags/_ttl_cache.py +0 -0
  378. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/resources/feature_flags/client.py +0 -0
  379. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/resources/feature_flags/schemas.py +0 -0
  380. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/resources/feature_flags/settings.py +0 -0
  381. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/resources/group/__init__.py +0 -0
  382. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/resources/group/functions.py +0 -0
  383. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/resources/group/schemas.py +0 -0
  384. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/resources/group/service.py +0 -0
  385. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/resources/scheduled_task/__init__.py +0 -0
  386. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/resources/scheduled_task/cron.py +0 -0
  387. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/resources/scheduled_task/functions.py +0 -0
  388. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/resources/scheduled_task/schemas.py +0 -0
  389. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/resources/scheduled_task/service.py +0 -0
  390. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/resources/user/__init__.py +0 -0
  391. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/resources/user/functions.py +0 -0
  392. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/resources/user/schemas.py +0 -0
  393. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/resources/user/service.py +0 -0
  394. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/testing/__init__.py +0 -0
  395. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/framework_utilities/__init__.py +0 -0
  396. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/framework_utilities/langchain/__init__.py +0 -0
  397. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/framework_utilities/langchain/client.py +0 -0
  398. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/framework_utilities/langchain/history.py +0 -0
  399. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/framework_utilities/openai/__init__.py +0 -0
  400. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/framework_utilities/openai/client.py +0 -0
  401. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/framework_utilities/openai/message_builder.py +0 -0
  402. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/framework_utilities/utils.py +0 -0
  403. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/language_model/__init__.py +0 -0
  404. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/language_model/_responses_api_utils.py +0 -0
  405. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/language_model/builder.py +0 -0
  406. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/language_model/constants.py +0 -0
  407. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/language_model/default_language_model.py +0 -0
  408. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/language_model/invocation_stats.py +0 -0
  409. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/language_model/model_costs.py +0 -0
  410. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/language_model/prompt.py +0 -0
  411. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/language_model/reference.py +0 -0
  412. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/language_model/schemas.py +0 -0
  413. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/language_model/service.py +0 -0
  414. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/language_model/settings.py +0 -0
  415. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/language_model/stream_transform.py +0 -0
  416. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/language_model/utils.py +0 -0
  417. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/monitoring/__init__.py +0 -0
  418. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/monitoring/gunicorn.py +0 -0
  419. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/monitoring/memory.py +0 -0
  420. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/monitoring/middleware.py +0 -0
  421. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/monitoring/registry.py +0 -0
  422. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/monitoring/tracing.py +0 -0
  423. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/services/__init__.py +0 -0
  424. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/services/factory.py +0 -0
  425. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/services/knowledge_base.py +0 -0
  426. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/short_term_memory/__init__.py +0 -0
  427. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/short_term_memory/constants.py +0 -0
  428. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/short_term_memory/functions.py +0 -0
  429. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/short_term_memory/schemas.py +0 -0
  430. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/short_term_memory/service.py +0 -0
  431. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/smart_rules/__init__.py +0 -0
  432. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/smart_rules/compile.py +0 -0
  433. {unique_toolkit-2026.44.0.dev4 → unique_toolkit-2026.44.0.dev5}/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.44.0.dev4
3
+ Version: 2026.44.0.dev5
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.44.0.dev7,<2026.44.0rc0
19
+ Requires-Dist: unique-sdk>=2026.44.0.dev8,<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.44.0.dev4"
3
+ version = "2026.44.0.dev5"
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.44.0.dev7,<2026.44.0rc0",
31
+ "unique-sdk>=2026.44.0.dev8,<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",
@@ -0,0 +1,264 @@
1
+ """Keep agent-loop prompts inside the provider's context window.
2
+
3
+ The local reducer estimates tokens with an OpenAI tokenizer, which can undercount
4
+ other providers by 2x or more. ``ContextOverflowGuard`` verifies near-limit
5
+ payloads with the provider's own counter before the LLM call and recovers when the
6
+ provider still rejects a prompt as too long.
7
+ """
8
+
9
+ from __future__ import annotations
10
+
11
+ import asyncio
12
+ import time
13
+ from collections.abc import Awaitable, Callable
14
+ from logging import Logger
15
+ from typing import Any, TypeVar
16
+
17
+ from unique_toolkit.agentic.history_manager.history_manager import HistoryManager
18
+ from unique_toolkit.agentic.loop_runner.base import _LoopIterationRunnerKwargs
19
+ from unique_toolkit.language_model.infos import LanguageModelInfo
20
+ from unique_toolkit.language_model.settings import ModelFamily
21
+ from unique_toolkit.protocols.support import SupportsTokenCount
22
+
23
+ _T = TypeVar("_T")
24
+
25
+ _CONTEXT_OVERFLOW_SIGNALS = (
26
+ "context_length_exceeded",
27
+ "contextwindowexceedederror",
28
+ "tokenlimitexceeded",
29
+ "maximum context length",
30
+ "prompt is too long",
31
+ "input is too long",
32
+ "too many input tokens",
33
+ "exceeds the maximum number of tokens",
34
+ )
35
+ _CONTEXT_WINDOW_QUALIFIERS = ("exceed", "too long", "maximum")
36
+
37
+ CONTEXT_OVERFLOW_TOKEN_BUDGET_FACTOR = 0.7
38
+ PROVIDER_COUNT_TARGET_RATIO = 0.95
39
+ MAX_PROVIDER_OVERFLOW_REDUCTION_FACTOR = 0.9
40
+ APPROXIMATE_TOKENIZER_TRIGGER_RATIO = 0.7
41
+ NATIVE_TOKENIZER_TRIGGER_RATIO = 0.85
42
+ LOCAL_LIMIT_TRIGGER_RATIO = 0.95
43
+ DEFAULT_OUTPUT_TOKEN_RESERVE = 10_000
44
+ PROVIDER_TOKEN_COUNT_TIMEOUT_SECONDS = 10
45
+
46
+ _NATIVE_TOKENIZER_FAMILIES = {
47
+ ModelFamily.OPENAI,
48
+ ModelFamily.DEEPSEEK,
49
+ ModelFamily.QWEN,
50
+ }
51
+
52
+ WITHHELD_TOOL_RESULT_NOTICE = (
53
+ "The combined output of the tool calls made in this step was too large for "
54
+ "the model's context window, so this result was withheld. Do not repeat "
55
+ "these tool calls in parallel. Call them one at a time instead, and narrow "
56
+ "each call (for example a lower result limit, a shorter date range or a "
57
+ "more specific query) so that each result stays small."
58
+ )
59
+
60
+
61
+ def is_context_window_exceeded_error(exc: BaseException) -> bool:
62
+ """Return True if *exc* indicates the prompt exceeded the model's context window."""
63
+ error_text = f"{type(exc).__name__} {exc}".lower()
64
+ if any(signal in error_text for signal in _CONTEXT_OVERFLOW_SIGNALS):
65
+ return True
66
+ return "context window" in error_text and any(
67
+ qualifier in error_text for qualifier in _CONTEXT_WINDOW_QUALIFIERS
68
+ )
69
+
70
+
71
+ def supports_provider_token_count(model: LanguageModelInfo) -> bool:
72
+ return model.family == ModelFamily.ANTHROPIC
73
+
74
+
75
+ def provider_context_window(model: LanguageModelInfo) -> int:
76
+ return model.provider_context_window
77
+
78
+
79
+ def provider_count_trigger_tokens(
80
+ model: LanguageModelInfo,
81
+ effective_local_limit: int,
82
+ ) -> int:
83
+ """Local count at which an authoritative provider count becomes worthwhile."""
84
+ ratio = (
85
+ NATIVE_TOKENIZER_TRIGGER_RATIO
86
+ if model.family in _NATIVE_TOKENIZER_FAMILIES
87
+ else APPROXIMATE_TOKENIZER_TRIGGER_RATIO
88
+ )
89
+ return min(
90
+ int(provider_context_window(model) * ratio),
91
+ int(effective_local_limit * LOCAL_LIMIT_TRIGGER_RATIO),
92
+ )
93
+
94
+
95
+ def provider_input_target(
96
+ model: LanguageModelInfo,
97
+ other_options: dict[str, Any] | None,
98
+ ) -> int:
99
+ """Maximum provider-counted input while preserving output and safety room."""
100
+ options = other_options or {}
101
+ configured_output = options.get("max_completion_tokens", options.get("max_tokens"))
102
+ output_reserve = (
103
+ configured_output
104
+ if isinstance(configured_output, int) and configured_output >= 0
105
+ else min(
106
+ DEFAULT_OUTPUT_TOKEN_RESERVE,
107
+ model.token_limits.token_limit_output,
108
+ )
109
+ )
110
+ return max(
111
+ 1,
112
+ int(provider_context_window(model) * PROVIDER_COUNT_TARGET_RATIO)
113
+ - output_reserve,
114
+ )
115
+
116
+
117
+ def provider_overflow_reduction_factor(provider_count: int, target: int) -> float:
118
+ """Budget multiplier that brings an oversized provider count under *target*."""
119
+ return min(
120
+ MAX_PROVIDER_OVERFLOW_REDUCTION_FACTOR,
121
+ target / provider_count * PROVIDER_COUNT_TARGET_RATIO,
122
+ )
123
+
124
+
125
+ class ContextOverflowGuard:
126
+ """Preflight provider token-budget verification and overflow retry policy."""
127
+
128
+ def __init__(
129
+ self,
130
+ *,
131
+ logger: Logger,
132
+ history_manager: HistoryManager,
133
+ token_counter: object,
134
+ model: LanguageModelInfo,
135
+ ) -> None:
136
+ self._logger = logger
137
+ self._history_manager = history_manager
138
+ self._token_counter = token_counter
139
+ self._model = model
140
+
141
+ async def preflight_token_budget(
142
+ self,
143
+ kwargs: _LoopIterationRunnerKwargs,
144
+ recompose: Callable[[], Awaitable[None]],
145
+ ) -> None:
146
+ """Verify near-limit payloads using the provider's tokenizer before the LLM call."""
147
+ if not supports_provider_token_count(self._model):
148
+ return
149
+ if not isinstance(self._token_counter, SupportsTokenCount):
150
+ return
151
+
152
+ local_count = self._history_manager.last_token_count
153
+ effective_limit = self._history_manager.effective_token_limit
154
+ trigger = provider_count_trigger_tokens(self._model, effective_limit)
155
+ if local_count < trigger:
156
+ return
157
+
158
+ target = provider_input_target(self._model, kwargs.get("other_options"))
159
+ provider_count = await self._try_provider_token_count(kwargs)
160
+ if provider_count is None or provider_count <= target:
161
+ return
162
+
163
+ self._logger.warning(
164
+ f"Provider token count {provider_count} exceeds the safe input target "
165
+ f"{target}. Reducing tool results before the LLM call."
166
+ )
167
+ reduction_factor = provider_overflow_reduction_factor(provider_count, target)
168
+ self._history_manager.tighten_token_budget(reduction_factor)
169
+ await recompose()
170
+
171
+ reduced_count = await self._try_provider_token_count(kwargs)
172
+ if reduced_count is None or reduced_count <= target:
173
+ return
174
+
175
+ if not self._history_manager.withhold_latest_tool_call_results(
176
+ WITHHELD_TOOL_RESULT_NOTICE
177
+ ):
178
+ self._logger.warning(
179
+ f"Provider token count remains above target ({reduced_count} > "
180
+ f"{target}), but there are no tool results to withhold."
181
+ )
182
+ return
183
+
184
+ self._logger.warning(
185
+ "Provider token count remains above target after reduction. "
186
+ "Withholding the latest tool-call batch."
187
+ )
188
+ await recompose()
189
+
190
+ withheld_count = await self._try_provider_token_count(kwargs)
191
+ if withheld_count is None or withheld_count <= target:
192
+ return
193
+
194
+ self._logger.warning(
195
+ f"Provider token count {withheld_count} still exceeds the safe input "
196
+ f"target {target} after withholding. Reducing history further."
197
+ )
198
+ self._history_manager.tighten_token_budget(
199
+ provider_overflow_reduction_factor(withheld_count, target)
200
+ )
201
+ await recompose()
202
+
203
+ async def retry_after_overflow(
204
+ self,
205
+ exc: Exception,
206
+ *,
207
+ recompose: Callable[[], Awaitable[None]],
208
+ run_iteration: Callable[[], Awaitable[_T]],
209
+ ) -> _T:
210
+ """Retry an oversized LLM call by tightening the budget or withholding the latest tool batch."""
211
+ self._logger.warning(
212
+ "LLM call exceeded the context window. Retrying with a tighter token budget.",
213
+ exc_info=exc,
214
+ )
215
+ self._history_manager.tighten_token_budget(CONTEXT_OVERFLOW_TOKEN_BUDGET_FACTOR)
216
+ await recompose()
217
+ try:
218
+ return await run_iteration()
219
+ except Exception as retry_exc:
220
+ if not is_context_window_exceeded_error(retry_exc):
221
+ raise
222
+ if not self._history_manager.withhold_latest_tool_call_results(
223
+ WITHHELD_TOOL_RESULT_NOTICE
224
+ ):
225
+ raise
226
+ self._logger.warning(
227
+ "LLM call still exceeded the context window. Retrying with the "
228
+ "latest tool call results withheld."
229
+ )
230
+ await recompose()
231
+ return await run_iteration()
232
+
233
+ async def _try_provider_token_count(
234
+ self, kwargs: _LoopIterationRunnerKwargs
235
+ ) -> int | None:
236
+ counter = self._token_counter
237
+ if not isinstance(counter, SupportsTokenCount):
238
+ return None
239
+ started_at = time.perf_counter()
240
+ try:
241
+ count = await asyncio.wait_for(
242
+ counter.count_tokens_async(
243
+ messages=kwargs["messages"],
244
+ model_name=self._model.name,
245
+ temperature=kwargs.get("temperature", 0.0),
246
+ tools=kwargs.get("tools"),
247
+ other_options=kwargs.get("other_options"),
248
+ ),
249
+ timeout=PROVIDER_TOKEN_COUNT_TIMEOUT_SECONDS,
250
+ )
251
+ except Exception:
252
+ elapsed_ms = (time.perf_counter() - started_at) * 1000
253
+ self._logger.warning(
254
+ f"Provider token counting failed after {elapsed_ms:.0f} ms. "
255
+ "Continuing with the local token budget.",
256
+ exc_info=True,
257
+ )
258
+ return None
259
+ elapsed_ms = (time.perf_counter() - started_at) * 1000
260
+ self._logger.info(
261
+ f"Provider token count for {self._model.name}: {count} tokens "
262
+ f"in {elapsed_ms:.0f} ms."
263
+ )
264
+ return count if count > 0 else None
@@ -152,6 +152,7 @@ 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 = []
155
156
  for tool_response in tool_call_results:
156
157
  if tool_response.image_data_urls:
157
158
  for url in tool_response.image_data_urls:
@@ -220,6 +221,78 @@ class HistoryManager:
220
221
  def add_assistant_message(self, message: LanguageModelAssistantMessage) -> None:
221
222
  self._loop_history.append(message)
222
223
 
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 withheld results.
241
+ """
242
+ batch_start: int | None = None
243
+ for index in range(len(self._loop_history) - 1, -1, -1):
244
+ candidate = self._loop_history[index]
245
+ if (
246
+ isinstance(candidate, LanguageModelAssistantMessage)
247
+ and candidate.tool_calls
248
+ ):
249
+ batch_start = index
250
+ break
251
+ if batch_start is None:
252
+ return 0
253
+
254
+ withheld_tool_call_ids: list[str] = []
255
+ for index in range(batch_start + 1, len(self._loop_history)):
256
+ message = self._loop_history[index]
257
+ if not isinstance(message, LanguageModelToolMessage):
258
+ continue
259
+ self._loop_history[index] = LanguageModelToolMessage(
260
+ content=notice,
261
+ tool_call_id=message.tool_call_id,
262
+ name=message.name,
263
+ )
264
+ withheld_tool_call_ids.append(message.tool_call_id)
265
+
266
+ withheld_chunks = {
267
+ id(chunk)
268
+ for tool_call_id in withheld_tool_call_ids
269
+ for chunk in self._reference_manager.get_chunks_of_tool(tool_call_id)
270
+ }
271
+ if withheld_chunks:
272
+ self._reference_manager.replace(
273
+ chunks=[
274
+ chunk
275
+ for chunk in self._reference_manager.get_chunks()
276
+ if id(chunk) not in withheld_chunks
277
+ ]
278
+ )
279
+ for tool_call_id in withheld_tool_call_ids:
280
+ self._reference_manager.replace_chunks_of_tool(tool_call_id, [])
281
+
282
+ if self._collected_tool_response_image_urls:
283
+ withheld_ids = set(withheld_tool_call_ids)
284
+ self._collected_tool_response_image_urls = [
285
+ (url, tool_call_id)
286
+ for url, tool_call_id in self._collected_tool_response_image_urls
287
+ if tool_call_id not in withheld_ids
288
+ ]
289
+
290
+ self._logger.warning(
291
+ f"Withheld {len(withheld_tool_call_ids)} tool call result(s) that "
292
+ "exceeded the context window."
293
+ )
294
+ return len(withheld_tool_call_ids)
295
+
223
296
  async def get_history_for_model_call(
224
297
  self,
225
298
  original_user_message: str,
@@ -238,7 +311,6 @@ class HistoryManager:
238
311
  remove_from_text=remove_from_text,
239
312
  image_data_urls_from_tools=image_data_from_tools,
240
313
  )
241
- self._collected_tool_response_image_urls = []
242
314
 
243
315
  if not self._source_offset_initialized:
244
316
  offset = max(0, self._token_reducer.max_db_source_number + 1)
@@ -38,7 +38,6 @@ 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
42
41
  MIN_PLAIN_TEXT_CHARS_TO_KEEP = 1000
43
42
 
44
43
 
@@ -106,6 +105,7 @@ class LoopTokenReducer:
106
105
  self._language_model.token_limits.token_limit_input
107
106
  * (1 - MAX_INPUT_TOKENS_SAFETY_PERCENTAGE)
108
107
  )
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,6 +131,27 @@ 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.
144
+
145
+ Used after the provider rejected a payload this reducer counted as within
146
+ budget, i.e. the encoder underestimates the model's real token count.
147
+ """
148
+ previous_limit = self._effective_token_limit
149
+ self._effective_token_limit = int(previous_limit * factor)
150
+ self._logger.warning(
151
+ f"Tightened effective token limit from {previous_limit} to "
152
+ f"{self._effective_token_limit} tokens."
153
+ )
154
+
134
155
  def _get_encoder(self, language_model: LMI) -> Callable[[str], list[int]]:
135
156
  return language_model.get_encoder()
136
157
 
@@ -179,6 +200,7 @@ class LoopTokenReducer:
179
200
  break
180
201
 
181
202
  token_count = self._count_message_tokens(messages)
203
+ self._last_token_count = token_count
182
204
  self._logger.info(
183
205
  f"Final token count after reduction: {token_count} of model_capacity {self._language_model.token_limits.token_limit_input}"
184
206
  )
@@ -191,8 +213,6 @@ class LoopTokenReducer:
191
213
  This is purely a size check. Whether anything can actually be reduced to
192
214
  get back under the limit is a separate concern (:meth:`_can_reduce_history`).
193
215
  """
194
- # TODO: This is not fully correct at the moment as the token_count
195
- # include system_prompt and user question already
196
216
  return token_count > self._effective_token_limit
197
217
 
198
218
  def _can_reduce_history(self, loop_history: list[LanguageModelMessage]) -> bool:
@@ -21,6 +21,9 @@ 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
+ )
24
27
  from unique_toolkit.language_model.reference import (
25
28
  add_references_to_message,
26
29
  )
@@ -748,3 +751,35 @@ async def stream_complete_with_references_openai(
748
751
  except Exception as e:
749
752
  logger.error("Error streaming completion (model=%s): %s", model_name_, e)
750
753
  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"]
@@ -335,6 +335,28 @@ def _load_custom_decoder(tokenizer_name: str) -> TypeDecoder:
335
335
  return tokenizer.decode
336
336
 
337
337
 
338
+ _CLAUDE_CONTEXT_WINDOWS = {
339
+ "claude-3-7-sonnet": 200_000,
340
+ "claude-3-7-sonnet-thinking": 200_000,
341
+ "claude-haiku-4-5": 200_000,
342
+ "claude-opus-4": 200_000,
343
+ "claude-opus-4-1": 200_000,
344
+ "claude-opus-4-5": 200_000,
345
+ "claude-opus-4-6": 200_000,
346
+ "claude-sonnet-4": 200_000,
347
+ "claude-sonnet-4-5": 200_000,
348
+ "claude-sonnet-4-6": 200_000,
349
+ "claude-fable-5": 1_000_000,
350
+ "claude-haiku-5-5": 1_000_000,
351
+ "claude-opus-4-7": 1_000_000,
352
+ "claude-opus-4-8": 1_000_000,
353
+ "claude-opus-5": 1_000_000,
354
+ "claude-opus-5-5": 1_000_000,
355
+ "claude-sonnet-5": 1_000_000,
356
+ "claude-sonnet-5-5": 1_000_000,
357
+ }
358
+
359
+
338
360
  class LanguageModelInfo(BaseModel):
339
361
  model_config = get_configuration_dict()
340
362
  name: (
@@ -3731,6 +3753,29 @@ class LanguageModelInfo(BaseModel):
3731
3753
  else:
3732
3754
  return self.name
3733
3755
 
3756
+ @property
3757
+ def provider_context_window(self) -> int:
3758
+ """Return the raw provider input context window before local-tokenizer adjustments."""
3759
+ if self.family == ModelFamily.ANTHROPIC:
3760
+ known_window = _CLAUDE_CONTEXT_WINDOWS.get(self.version)
3761
+ if known_window is None:
3762
+ model_name = str(self.name)
3763
+ known_window = next(
3764
+ (
3765
+ window
3766
+ for version, window in sorted(
3767
+ _CLAUDE_CONTEXT_WINDOWS.items(),
3768
+ key=lambda item: len(item[0]),
3769
+ reverse=True,
3770
+ )
3771
+ if version in model_name
3772
+ ),
3773
+ None,
3774
+ )
3775
+ if known_window is not None:
3776
+ return known_window
3777
+ return self.token_limits.token_limit_input
3778
+
3734
3779
 
3735
3780
  @deprecated(
3736
3781
  """