unique-toolkit 2026.28.0.dev5__tar.gz → 2026.28.0.dev7__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 (411) hide show
  1. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/PKG-INFO +2 -2
  2. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/pyproject.toml +2 -2
  3. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/chunk_relevancy_sorter/service.py +1 -1
  4. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/evaluation/context_relevancy/service.py +1 -1
  5. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/evaluation/hallucination/constants.py +12 -0
  6. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/evaluation/hallucination/hallucination_evaluation.py +11 -0
  7. unique_toolkit-2026.28.0.dev7/unique_toolkit/agentic/evaluation/tests/test_hallucination_external_context.py +122 -0
  8. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/reference_manager/reference_manager.py +16 -0
  9. unique_toolkit-2026.28.0.dev7/unique_toolkit/agentic/reference_manager/tests/test_external_context.py +35 -0
  10. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/experimental/retrieve_search_scope_tool/tool.py +1 -1
  11. unique_toolkit-2026.28.0.dev7/unique_toolkit/agentic/tools/run_context.py +24 -0
  12. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/tool.py +44 -5
  13. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/tool_manager.py +147 -20
  14. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic_table/schemas.py +62 -24
  15. unique_toolkit-2026.28.0.dev7/unique_toolkit/agentic_table/synthetic_chat_event.py +67 -0
  16. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/app/schemas.py +54 -15
  17. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/app/unique_settings.py +38 -0
  18. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/content/schemas.py +9 -1
  19. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/content/service.py +79 -40
  20. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/language_model/service.py +21 -21
  21. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/services/factory.py +10 -2
  22. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/services/knowledge_base.py +2 -2
  23. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/short_term_memory/service.py +27 -17
  24. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/README.md +0 -0
  25. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/__init__.py +0 -0
  26. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/__init__.py +0 -0
  27. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/_base_service.py +0 -0
  28. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/_time_utils.py +0 -0
  29. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/api_calling/human_verification_manager.py +0 -0
  30. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/base_model_type_attribute.py +0 -0
  31. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/chunk_relevancy_sorter/config.py +0 -0
  32. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/chunk_relevancy_sorter/exception.py +0 -0
  33. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/chunk_relevancy_sorter/schemas.py +0 -0
  34. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/chunk_relevancy_sorter/tests/test_service.py +0 -0
  35. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/config_checker/README.md +0 -0
  36. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/config_checker/__init__.py +0 -0
  37. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/config_checker/__main__.py +0 -0
  38. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/config_checker/cli.py +0 -0
  39. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/config_checker/differ.py +0 -0
  40. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/config_checker/exporter.py +0 -0
  41. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/config_checker/models.py +0 -0
  42. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/config_checker/registry.py +0 -0
  43. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/config_checker/validator.py +0 -0
  44. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/default_language_model.py +0 -0
  45. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/docx_generator/__init__.py +0 -0
  46. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/docx_generator/config.py +0 -0
  47. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/docx_generator/pandoc_converter.py +0 -0
  48. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/docx_generator/schemas.py +0 -0
  49. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/docx_generator/service.py +0 -0
  50. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/docx_generator/template/Doc Template.docx +0 -0
  51. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/endpoint_builder.py +0 -0
  52. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/endpoint_requestor.py +0 -0
  53. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/event_bus.py +0 -0
  54. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/exception.py +0 -0
  55. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/execution.py +0 -0
  56. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/experimental/endpoint_builder.py +0 -0
  57. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/experimental/endpoint_requestor.py +0 -0
  58. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/experimental/write_up_agent/README.md +0 -0
  59. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/experimental/write_up_agent/__init__.py +0 -0
  60. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/experimental/write_up_agent/agent.py +0 -0
  61. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/experimental/write_up_agent/config.py +0 -0
  62. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/experimental/write_up_agent/examples/data.csv +0 -0
  63. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/experimental/write_up_agent/examples/example_usage.py +0 -0
  64. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/experimental/write_up_agent/schemas.py +0 -0
  65. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/experimental/write_up_agent/services/__init__.py +0 -0
  66. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/__init__.py +0 -0
  67. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/exceptions.py +0 -0
  68. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/service.py +0 -0
  69. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/utils.py +0 -0
  70. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/__init__.py +0 -0
  71. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/config.py +0 -0
  72. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/exceptions.py +0 -0
  73. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/config.py +0 -0
  74. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/system_prompt.j2 +0 -0
  75. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/user_prompt.j2 +0 -0
  76. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/service.py +0 -0
  77. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/__init__.py +0 -0
  78. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/default_template.j2 +0 -0
  79. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/exceptions.py +0 -0
  80. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/service.py +0 -0
  81. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/utils.py +0 -0
  82. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/experimental/write_up_agent/utils.py +0 -0
  83. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/feature_flags/schema.py +0 -0
  84. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/metadata_filter_scope.py +0 -0
  85. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/pydantic/rjsf_tags.py +0 -0
  86. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/pydantic_helpers.py +0 -0
  87. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/referencing.py +0 -0
  88. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/string_utilities.py +0 -0
  89. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/tests/test_referencing.py +0 -0
  90. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/tests/test_string_utilities.py +0 -0
  91. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/token/__init__.py +0 -0
  92. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/token/image_token_counting.py +0 -0
  93. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/token/token_counting.py +0 -0
  94. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/token/tokenizers/deepseek/tokenizer.json +0 -0
  95. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/token/tokenizers/qwen/tokenizer.json +0 -0
  96. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/utils/__init__.py +0 -0
  97. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/utils/files.py +0 -0
  98. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/utils/image/encode.py +0 -0
  99. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/utils/jinja/helpers.py +0 -0
  100. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/utils/jinja/render.py +0 -0
  101. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/utils/jinja/schema.py +0 -0
  102. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/utils/jinja/utils.py +0 -0
  103. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/utils/structured_output/__init__.py +0 -0
  104. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/utils/structured_output/schema.py +0 -0
  105. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/utils/write_configuration.py +0 -0
  106. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/validate_required_values.py +0 -0
  107. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/_common/validators.py +0 -0
  108. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/__init__.py +0 -0
  109. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/debug_info_manager/debug_info_manager.py +0 -0
  110. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/debug_info_manager/test/test_debug_info_manager.py +0 -0
  111. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/evaluation/config.py +0 -0
  112. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/__init__.py +0 -0
  113. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/system_prompt.j2 +0 -0
  114. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/user_prompt.j2 +0 -0
  115. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/evaluation/context_relevancy/schema.py +0 -0
  116. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/evaluation/evaluation_manager.py +0 -0
  117. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/evaluation/exception.py +0 -0
  118. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/evaluation/hallucination/prompts/__init__.py +0 -0
  119. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/evaluation/hallucination/prompts/system_prompt.j2 +0 -0
  120. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/evaluation/hallucination/prompts/user_prompt.j2 +0 -0
  121. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/evaluation/hallucination/service.py +0 -0
  122. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/evaluation/hallucination/utils.py +0 -0
  123. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/evaluation/output_parser.py +0 -0
  124. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/evaluation/schemas.py +0 -0
  125. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/evaluation/tests/fixtures.py +0 -0
  126. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/evaluation/tests/test_config.py +0 -0
  127. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/evaluation/tests/test_context_relevancy_service.py +0 -0
  128. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/evaluation/tests/test_hallucination_constants.py +0 -0
  129. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/evaluation/tests/test_hallucination_utils.py +0 -0
  130. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/evaluation/tests/test_output_parser.py +0 -0
  131. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/evaluation/tests/test_prompt_loaders.py +0 -0
  132. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/evaluation/utils.py +0 -0
  133. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/feature_flags/__init__.py +0 -0
  134. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/feature_flags/feature_flags.py +0 -0
  135. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/history_manager/history_construction_with_contents.py +0 -0
  136. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/history_manager/history_manager.py +0 -0
  137. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/history_manager/loop_token_reducer.py +0 -0
  138. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/history_manager/settings.py +0 -0
  139. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/history_manager/utils.py +0 -0
  140. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/loop_runner/__init__.py +0 -0
  141. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/loop_runner/_iteration_handler_utils.py +0 -0
  142. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/loop_runner/_responses_iteration_handler_utils.py +0 -0
  143. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/loop_runner/_responses_stream_handler_utils.py +0 -0
  144. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/loop_runner/_stream_handler_utils.py +0 -0
  145. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/loop_runner/base.py +0 -0
  146. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/loop_runner/middleware/__init__.py +0 -0
  147. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/loop_runner/middleware/planning/__init__.py +0 -0
  148. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/loop_runner/middleware/planning/planning.py +0 -0
  149. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/loop_runner/middleware/planning/schema.py +0 -0
  150. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/loop_runner/runners/__init__.py +0 -0
  151. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/loop_runner/runners/basic.py +0 -0
  152. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/loop_runner/runners/mistral/__init__.py +0 -0
  153. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/loop_runner/runners/mistral/mistral_runner.py +0 -0
  154. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/loop_runner/runners/qwen/__init__.py +0 -0
  155. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/loop_runner/runners/qwen/helpers.py +0 -0
  156. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/loop_runner/runners/qwen/qwen_runner.py +0 -0
  157. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/message_log_manager/__init__.py +0 -0
  158. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/message_log_manager/service.py +0 -0
  159. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/message_log_order.py +0 -0
  160. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/postprocessor/postprocessor_manager.py +0 -0
  161. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/responses_api/__init__.py +0 -0
  162. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/responses_api/postprocessors/code_display.py +0 -0
  163. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/responses_api/postprocessors/generated_files.py +0 -0
  164. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/responses_api/stream_handler.py +0 -0
  165. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/short_term_memory_manager/persistent_short_term_memory_manager.py +0 -0
  166. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/thinking_manager/thinking_manager.py +0 -0
  167. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/__init__.py +0 -0
  168. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/a2a/__init__.py +0 -0
  169. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/a2a/config.py +0 -0
  170. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/a2a/evaluation/__init__.py +0 -0
  171. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/a2a/evaluation/_utils.py +0 -0
  172. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/a2a/evaluation/config.py +0 -0
  173. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/a2a/evaluation/evaluator.py +0 -0
  174. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/a2a/evaluation/summarization_user_message.j2 +0 -0
  175. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/a2a/manager.py +0 -0
  176. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/a2a/postprocessing/__init__.py +0 -0
  177. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/a2a/postprocessing/_display_utils.py +0 -0
  178. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/a2a/postprocessing/_ref_utils.py +0 -0
  179. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/a2a/postprocessing/config.py +0 -0
  180. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/a2a/postprocessing/display.py +0 -0
  181. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/a2a/postprocessing/references.py +0 -0
  182. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display.py +0 -0
  183. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display_utils.py +0 -0
  184. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_ref_utils.py +0 -0
  185. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_references.py +0 -0
  186. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/a2a/prompts.py +0 -0
  187. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/a2a/response_watcher/__init__.py +0 -0
  188. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/a2a/response_watcher/service.py +0 -0
  189. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/a2a/tool/__init__.py +0 -0
  190. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/a2a/tool/_memory.py +0 -0
  191. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/a2a/tool/_schema.py +0 -0
  192. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/a2a/tool/config.py +0 -0
  193. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/a2a/tool/service.py +0 -0
  194. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/a2a/tool/test/test_service_utils.py +0 -0
  195. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/agent_chunks_hanlder.py +0 -0
  196. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/config.py +0 -0
  197. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/experimental/__init__.py +0 -0
  198. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/experimental/ask_user_tool/__init__.py +0 -0
  199. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/experimental/ask_user_tool/config.py +0 -0
  200. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/experimental/ask_user_tool/tool.py +0 -0
  201. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/experimental/open_file_tool/__init__.py +0 -0
  202. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/experimental/open_file_tool/config.py +0 -0
  203. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/experimental/open_file_tool/runtime.py +0 -0
  204. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/experimental/open_file_tool/tool.py +0 -0
  205. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/experimental/retrieve_search_scope_tool/__init__.py +0 -0
  206. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/experimental/retrieve_search_scope_tool/config.py +0 -0
  207. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/experimental/todo/__init__.py +0 -0
  208. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/experimental/todo/config.py +0 -0
  209. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/experimental/todo/prompts/__init__.py +0 -0
  210. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/experimental/todo/prompts/execution_reminder.j2 +0 -0
  211. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/experimental/todo/prompts/system_prompt.j2 +0 -0
  212. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/experimental/todo/prompts/tool_description.j2 +0 -0
  213. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/experimental/todo/prompts/verification_nudge.j2 +0 -0
  214. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/experimental/todo/schemas.py +0 -0
  215. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/experimental/todo/service.py +0 -0
  216. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/factory.py +0 -0
  217. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/mcp/__init__.py +0 -0
  218. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/mcp/manager.py +0 -0
  219. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/mcp/models.py +0 -0
  220. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/mcp/tool_wrapper.py +0 -0
  221. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/names.py +0 -0
  222. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/openai_builtin/__init__.py +0 -0
  223. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/openai_builtin/base.py +0 -0
  224. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/__init__.py +0 -0
  225. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/config.py +0 -0
  226. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/__init__.py +0 -0
  227. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/artifacts.py +0 -0
  228. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/code_display.py +0 -0
  229. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/generated_files.py +0 -0
  230. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/schemas.py +0 -0
  231. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/service.py +0 -0
  232. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/openai_builtin/manager.py +0 -0
  233. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/schemas.py +0 -0
  234. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/test/test_mcp_manager.py +0 -0
  235. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/test/test_tool_progress_reporter.py +0 -0
  236. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/tool_progress_reporter.py +0 -0
  237. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/utils/__init__.py +0 -0
  238. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/utils/source_handling/__init__.py +0 -0
  239. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/utils/source_handling/schema.py +0 -0
  240. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/utils/source_handling/source_formatting.py +0 -0
  241. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic/tools/utils/source_handling/tests/test_source_formatting.py +0 -0
  242. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic_table/__init__.py +0 -0
  243. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/agentic_table/service.py +0 -0
  244. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/app/__init__.py +0 -0
  245. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/app/chat_event_filter_options_settings.py +0 -0
  246. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/app/dev_util.py +0 -0
  247. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/app/fast_api_factory.py +0 -0
  248. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/app/feature_flags.py +0 -0
  249. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/app/find_env_file.py +0 -0
  250. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/app/init_logging.py +0 -0
  251. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/app/init_sdk.py +0 -0
  252. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/app/performance/async_tasks.py +0 -0
  253. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/app/performance/async_wrapper.py +0 -0
  254. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/app/verification.py +0 -0
  255. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/app/webhook.py +0 -0
  256. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/chat/__init__.py +0 -0
  257. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/chat/cancellation.py +0 -0
  258. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/chat/constants.py +0 -0
  259. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/chat/deprecated/service.py +0 -0
  260. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/chat/functions.py +0 -0
  261. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/chat/rendering.py +0 -0
  262. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/chat/responses_api.py +0 -0
  263. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/chat/schemas.py +0 -0
  264. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/chat/service.py +0 -0
  265. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/chat/state.py +0 -0
  266. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/chat/utils.py +0 -0
  267. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/content/__init__.py +0 -0
  268. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/content/constants.py +0 -0
  269. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/content/functions.py +0 -0
  270. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/content/smart_rules.py +0 -0
  271. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/content/utils.py +0 -0
  272. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/data_extraction/README.md +0 -0
  273. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/data_extraction/__init__.py +0 -0
  274. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/data_extraction/augmented/__init__.py +0 -0
  275. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/data_extraction/augmented/service.py +0 -0
  276. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/data_extraction/base.py +0 -0
  277. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/data_extraction/basic/__init__.py +0 -0
  278. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/data_extraction/basic/config.py +0 -0
  279. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/data_extraction/basic/prompt.py +0 -0
  280. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/data_extraction/basic/service.py +0 -0
  281. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/elicitation/__init__.py +0 -0
  282. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/elicitation/constants.py +0 -0
  283. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/elicitation/exceptions.py +0 -0
  284. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/elicitation/functions.py +0 -0
  285. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/elicitation/schemas.py +0 -0
  286. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/elicitation/service.py +0 -0
  287. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/embedding/__init__.py +0 -0
  288. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/embedding/constants.py +0 -0
  289. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/embedding/functions.py +0 -0
  290. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/embedding/schemas.py +0 -0
  291. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/embedding/service.py +0 -0
  292. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/embedding/utils.py +0 -0
  293. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/README.md +0 -0
  294. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/__init__.py +0 -0
  295. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/_internal/__init__.py +0 -0
  296. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/_internal/streaming/__init__.py +0 -0
  297. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/_internal/streaming/common.py +0 -0
  298. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/_internal/streaming/pattern_replacer.py +0 -0
  299. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/components/__init__.py +0 -0
  300. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/components/_base.py +0 -0
  301. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/components/content_tree/__init__.py +0 -0
  302. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/components/content_tree/functions.py +0 -0
  303. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/components/content_tree/schemas.py +0 -0
  304. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/components/content_tree/service.py +0 -0
  305. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/components/internal_search/__init__.py +0 -0
  306. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/components/internal_search/base/__init__.py +0 -0
  307. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/components/internal_search/base/config.py +0 -0
  308. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/components/internal_search/base/schemas.py +0 -0
  309. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/components/internal_search/base/service.py +0 -0
  310. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/components/internal_search/base/utils.py +0 -0
  311. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/components/internal_search/chat/__init__.py +0 -0
  312. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/components/internal_search/chat/config.py +0 -0
  313. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/components/internal_search/chat/schemas.py +0 -0
  314. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/components/internal_search/chat/service.py +0 -0
  315. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/components/internal_search/knowledge_base/__init__.py +0 -0
  316. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/components/internal_search/knowledge_base/config.py +0 -0
  317. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/components/internal_search/knowledge_base/schemas.py +0 -0
  318. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/components/internal_search/knowledge_base/service.py +0 -0
  319. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/components/internal_search/post_processing/__init__.py +0 -0
  320. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/components/internal_search/post_processing/config.py +0 -0
  321. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/components/internal_search/post_processing/service.py +0 -0
  322. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/content_tree/__init__.py +0 -0
  323. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/identity/__init__.py +0 -0
  324. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/integrations/__init__.py +0 -0
  325. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/integrations/openai/__init__.py +0 -0
  326. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/integrations/openai/streaming/__init__.py +0 -0
  327. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/__init__.py +0 -0
  328. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/_async_bridge.py +0 -0
  329. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/__init__.py +0 -0
  330. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/complete_with_references.py +0 -0
  331. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/stream_event_router.py +0 -0
  332. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/text_event_handler.py +0 -0
  333. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/tool_call_event_handler.py +0 -0
  334. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/events.py +0 -0
  335. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/protocols/__init__.py +0 -0
  336. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/protocols/chat_completions.py +0 -0
  337. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/protocols/responses.py +0 -0
  338. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/__init__.py +0 -0
  339. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/code_interpreter_event_handler.py +0 -0
  340. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/complete_with_references.py +0 -0
  341. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/completed_event_handler.py +0 -0
  342. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/stream_event_router.py +0 -0
  343. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/text_delta_event_handler.py +0 -0
  344. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/tool_call_event_handler.py +0 -0
  345. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/subscribers/__init__.py +0 -0
  346. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/subscribers/message_persister.py +0 -0
  347. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/subscribers/progress_log_persister.py +0 -0
  348. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/resources/__init__.py +0 -0
  349. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/resources/content_folder/__init__.py +0 -0
  350. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/resources/content_folder/functions.py +0 -0
  351. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/resources/content_folder/schemas.py +0 -0
  352. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/resources/content_folder/service.py +0 -0
  353. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/resources/facades/__init__.py +0 -0
  354. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/resources/facades/identity/__init__.py +0 -0
  355. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/resources/facades/identity/service.py +0 -0
  356. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/resources/feature_flags/README.md +0 -0
  357. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/resources/feature_flags/__init__.py +0 -0
  358. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/resources/feature_flags/_graphql_client.py +0 -0
  359. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/resources/feature_flags/_ttl_cache.py +0 -0
  360. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/resources/feature_flags/client.py +0 -0
  361. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/resources/feature_flags/schemas.py +0 -0
  362. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/resources/feature_flags/settings.py +0 -0
  363. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/resources/group/__init__.py +0 -0
  364. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/resources/group/functions.py +0 -0
  365. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/resources/group/schemas.py +0 -0
  366. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/resources/group/service.py +0 -0
  367. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/resources/scheduled_task/__init__.py +0 -0
  368. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/resources/scheduled_task/cron.py +0 -0
  369. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/resources/scheduled_task/functions.py +0 -0
  370. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/resources/scheduled_task/schemas.py +0 -0
  371. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/resources/scheduled_task/service.py +0 -0
  372. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/resources/user/__init__.py +0 -0
  373. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/resources/user/functions.py +0 -0
  374. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/resources/user/schemas.py +0 -0
  375. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/resources/user/service.py +0 -0
  376. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/experimental/testing/__init__.py +0 -0
  377. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/framework_utilities/__init__.py +0 -0
  378. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/framework_utilities/langchain/__init__.py +0 -0
  379. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/framework_utilities/langchain/client.py +0 -0
  380. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/framework_utilities/langchain/history.py +0 -0
  381. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/framework_utilities/openai/__init__.py +0 -0
  382. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/framework_utilities/openai/client.py +0 -0
  383. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/framework_utilities/openai/message_builder.py +0 -0
  384. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/framework_utilities/utils.py +0 -0
  385. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/language_model/__init__.py +0 -0
  386. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/language_model/_responses_api_utils.py +0 -0
  387. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/language_model/builder.py +0 -0
  388. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/language_model/constants.py +0 -0
  389. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/language_model/default_language_model.py +0 -0
  390. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/language_model/functions.py +0 -0
  391. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/language_model/infos.py +0 -0
  392. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/language_model/prompt.py +0 -0
  393. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/language_model/reference.py +0 -0
  394. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/language_model/schemas.py +0 -0
  395. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/language_model/settings.py +0 -0
  396. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/language_model/stream_transform.py +0 -0
  397. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/language_model/utils.py +0 -0
  398. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/monitoring/__init__.py +0 -0
  399. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/monitoring/gunicorn.py +0 -0
  400. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/monitoring/middleware.py +0 -0
  401. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/monitoring/registry.py +0 -0
  402. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/protocols/support.py +0 -0
  403. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/services/__init__.py +0 -0
  404. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/services/chat_service.py +0 -0
  405. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/short_term_memory/__init__.py +0 -0
  406. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/short_term_memory/constants.py +0 -0
  407. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/short_term_memory/functions.py +0 -0
  408. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/short_term_memory/schemas.py +0 -0
  409. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/smart_rules/__init__.py +0 -0
  410. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/unique_toolkit/smart_rules/compile.py +0 -0
  411. {unique_toolkit-2026.28.0.dev5 → unique_toolkit-2026.28.0.dev7}/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.28.0.dev5
3
+ Version: 2026.28.0.dev7
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.28.0.dev6,<2026.28.0rc0
19
+ Requires-Dist: unique-sdk>=2026.28.0.dev10,<2026.28.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.28.0.dev5"
3
+ version = "2026.28.0.dev7"
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.28.0.dev6,<2026.28.0rc0",
31
+ "unique-sdk>=2026.28.0.dev10,<2026.28.0rc0",
32
32
  "jambo>=0.1.2,<0.2",
33
33
  "jinja2>=3.1.6,<4",
34
34
  "docxtpl>=0.20.1,<0.21",
@@ -71,7 +71,7 @@ class ChunkRelevancySorter:
71
71
  company_id: str | None = None,
72
72
  user_id: str | None = None,
73
73
  ):
74
- if isinstance(event, (ChatEvent, BaseEvent)):
74
+ if isinstance(event, BaseEvent):
75
75
  self.chunk_relevancy_evaluator = ContextRelevancyEvaluator.from_event(event)
76
76
  else:
77
77
  [company_id, user_id] = validate_required_values([company_id, user_id])
@@ -81,7 +81,7 @@ class ContextRelevancyEvaluator:
81
81
  company_id: str | None = None,
82
82
  user_id: str | None = None,
83
83
  ):
84
- if isinstance(event, (ChatEvent, BaseEvent)):
84
+ if isinstance(event, BaseEvent):
85
85
  self.language_model_service = LanguageModelService.from_event(event)
86
86
  else:
87
87
  [company_id, user_id] = validate_required_values([company_id, user_id])
@@ -52,6 +52,18 @@ class HallucinationConfig(EvaluationMetricConfig):
52
52
  default={},
53
53
  description="Additional options to pass to the language model.",
54
54
  )
55
+ max_external_context_chars_per_source: SkipJsonSchema[int] = Field(
56
+ default=20_000,
57
+ ge=0,
58
+ description=(
59
+ "Per-source character cap applied to external (non-chunk) "
60
+ "context texts, e.g. MCP tool output. Raw/large tool results "
61
+ "inflate the judge prompt and the eval-LLM call; each external "
62
+ "text is truncated to this many characters before being added "
63
+ "to the context. 0 disables truncation. Does not affect "
64
+ "chunk-derived context."
65
+ ),
66
+ )
55
67
  score_to_label: dict[str, str] = {
56
68
  "LOW": "GREEN",
57
69
  "MEDIUM": "YELLOW",
@@ -54,6 +54,17 @@ class HallucinationEvaluation(Evaluation):
54
54
  reference_pattern=self.config.reference_pattern,
55
55
  )
56
56
 
57
+ # Append non-chunk groundedness context (e.g. MCP tool output). These
58
+ # are added in full ("all retrieved output as context") rather than via
59
+ # source-marker selection, since they carry no [sourceN] markers.
60
+ external_context_texts = self._reference_manager.get_external_context_texts()
61
+ max_chars = self.config.max_external_context_chars_per_source
62
+ if max_chars > 0:
63
+ external_context_texts = [
64
+ text[:max_chars] for text in external_context_texts
65
+ ]
66
+ context_texts = context_texts + external_context_texts
67
+
57
68
  evaluation_result: EvaluationMetricResult = await check_hallucination(
58
69
  company_id=self._company_id,
59
70
  user_id=self._user_id,
@@ -0,0 +1,122 @@
1
+ """Tests that HallucinationEvaluation grounds against non-chunk context.
2
+
3
+ UN-21951: external context texts (e.g. MCP tool output) registered on the
4
+ ReferenceManager must be appended to the evaluation context — in addition to
5
+ chunk-derived context, capped by ``max_external_context_chars_per_source`` —
6
+ without being converted to ContentChunks.
7
+ """
8
+
9
+ from types import SimpleNamespace
10
+
11
+ import pytest
12
+
13
+ from unique_toolkit.agentic.evaluation.hallucination import (
14
+ hallucination_evaluation as he,
15
+ )
16
+ from unique_toolkit.agentic.evaluation.hallucination.constants import (
17
+ HallucinationConfig,
18
+ SourceSelectionMode,
19
+ )
20
+ from unique_toolkit.agentic.evaluation.schemas import (
21
+ EvaluationMetricName,
22
+ EvaluationMetricResult,
23
+ )
24
+ from unique_toolkit.agentic.reference_manager.reference_manager import (
25
+ ReferenceManager,
26
+ )
27
+ from unique_toolkit.chat.schemas import ChatMessageRole
28
+ from unique_toolkit.language_model.schemas import (
29
+ LanguageModelStreamResponse,
30
+ LanguageModelStreamResponseMessage,
31
+ )
32
+
33
+
34
+ def _make_event() -> SimpleNamespace:
35
+ return SimpleNamespace(
36
+ company_id="company_1",
37
+ user_id="user_1",
38
+ payload=SimpleNamespace(
39
+ user_message=SimpleNamespace(text="what is ACME revenue?"),
40
+ ),
41
+ )
42
+
43
+
44
+ def _make_response(text: str = "ACME revenue is 1M.") -> LanguageModelStreamResponse:
45
+ return LanguageModelStreamResponse(
46
+ message=LanguageModelStreamResponseMessage(
47
+ id="msg_1",
48
+ previous_message_id=None,
49
+ role=ChatMessageRole.ASSISTANT,
50
+ text=text,
51
+ chat_id="chat_1",
52
+ original_text=text,
53
+ references=None,
54
+ ),
55
+ tool_calls=None,
56
+ )
57
+
58
+
59
+ @pytest.fixture
60
+ def captured_context(monkeypatch: pytest.MonkeyPatch) -> dict:
61
+ """Patch check_hallucination to capture the context_texts it receives."""
62
+ captured: dict = {}
63
+
64
+ async def _fake_check_hallucination(*, company_id, user_id, input, config):
65
+ captured["context_texts"] = list(input.context_texts or [])
66
+ return EvaluationMetricResult(
67
+ name=EvaluationMetricName.HALLUCINATION,
68
+ value="LOW",
69
+ reason="grounded",
70
+ )
71
+
72
+ monkeypatch.setattr(he, "check_hallucination", _fake_check_hallucination)
73
+ return captured
74
+
75
+
76
+ async def test_external_context_is_appended(captured_context: dict) -> None:
77
+ manager = ReferenceManager()
78
+ manager.add_external_context_texts(["ACME revenue: 1M"])
79
+ evaluation = he.HallucinationEvaluation(
80
+ HallucinationConfig(source_selection_mode=SourceSelectionMode.FROM_IDS),
81
+ _make_event(), # type: ignore[arg-type]
82
+ manager,
83
+ )
84
+
85
+ result = await evaluation.run(_make_response())
86
+
87
+ # No chunks → context comes solely from the external (MCP) source.
88
+ assert captured_context["context_texts"] == ["ACME revenue: 1M"]
89
+ assert result.value == "LOW"
90
+ assert result.is_positive is True
91
+
92
+
93
+ async def test_external_context_is_truncated(captured_context: dict) -> None:
94
+ manager = ReferenceManager()
95
+ manager.add_external_context_texts(["x" * 100])
96
+ evaluation = he.HallucinationEvaluation(
97
+ HallucinationConfig(
98
+ source_selection_mode=SourceSelectionMode.FROM_IDS,
99
+ max_external_context_chars_per_source=10,
100
+ ),
101
+ _make_event(), # type: ignore[arg-type]
102
+ manager,
103
+ )
104
+
105
+ await evaluation.run(_make_response())
106
+
107
+ assert captured_context["context_texts"] == ["x" * 10]
108
+
109
+
110
+ async def test_no_external_context_preserves_chunk_only_behaviour(
111
+ captured_context: dict,
112
+ ) -> None:
113
+ manager = ReferenceManager() # no chunks, no external context
114
+ evaluation = he.HallucinationEvaluation(
115
+ HallucinationConfig(source_selection_mode=SourceSelectionMode.FROM_IDS),
116
+ _make_event(), # type: ignore[arg-type]
117
+ manager,
118
+ )
119
+
120
+ await evaluation.run(_make_response())
121
+
122
+ assert captured_context["context_texts"] == []
@@ -32,6 +32,7 @@ class ReferenceManager:
32
32
  self._tool_chunks: dict[str, tool_chunks] = {}
33
33
  self._chunks: list[ContentChunk] = []
34
34
  self._references: list[list[ContentReference]] = []
35
+ self._external_context_texts: list[str] = []
35
36
 
36
37
  def extract_referenceable_chunks(
37
38
  self, tool_responses: list[ToolCallResponse]
@@ -47,6 +48,21 @@ class ReferenceManager:
47
48
  def get_chunks(self) -> list[ContentChunk]:
48
49
  return self._chunks
49
50
 
51
+ def add_external_context_texts(self, texts: list[str]) -> None:
52
+ """Register groundedness context that is not backed by ContentChunks.
53
+
54
+ Some retrieval sources (e.g. MCP tool output) provide text the answer
55
+ is built on but are deliberately *not* modelled as ContentChunks — they
56
+ are a different entity from ingested document chunks and must not flow
57
+ through the chunk/reference pipeline. They still need to ground the
58
+ hallucination check, so they are stored here and appended to the
59
+ evaluation context alongside the chunk-derived texts.
60
+ """
61
+ self._external_context_texts.extend(text for text in texts if text)
62
+
63
+ def get_external_context_texts(self) -> list[str]:
64
+ return self._external_context_texts
65
+
50
66
  def get_tool_chunks(self) -> dict[str, tool_chunks]:
51
67
  return self._tool_chunks
52
68
 
@@ -0,0 +1,35 @@
1
+ """Tests for non-chunk groundedness context on the ReferenceManager.
2
+
3
+ External context texts (e.g. MCP tool output, UN-21951) ground the
4
+ hallucination check without being modelled as ContentChunks.
5
+ """
6
+
7
+ from unique_toolkit.agentic.reference_manager.reference_manager import (
8
+ ReferenceManager,
9
+ )
10
+
11
+
12
+ def test_external_context_starts_empty() -> None:
13
+ manager = ReferenceManager()
14
+ assert manager.get_external_context_texts() == []
15
+
16
+
17
+ def test_add_external_context_texts_accumulates() -> None:
18
+ manager = ReferenceManager()
19
+ manager.add_external_context_texts(["a", "b"])
20
+ manager.add_external_context_texts(["c"])
21
+ assert manager.get_external_context_texts() == ["a", "b", "c"]
22
+
23
+
24
+ def test_add_external_context_texts_drops_empty_strings() -> None:
25
+ manager = ReferenceManager()
26
+ manager.add_external_context_texts(["keep", "", "also"])
27
+ assert manager.get_external_context_texts() == ["keep", "also"]
28
+
29
+
30
+ def test_external_context_is_independent_of_chunks() -> None:
31
+ manager = ReferenceManager()
32
+ manager.add_external_context_texts(["mcp output"])
33
+ # External context must not leak into the chunk pipeline.
34
+ assert manager.get_chunks() == []
35
+ assert manager.get_external_context_texts() == ["mcp output"]
@@ -116,7 +116,7 @@ class RetrieveSearchScopeTool(Tool[RetrieveSearchScopeConfig]):
116
116
  )
117
117
 
118
118
  try:
119
- settings = UniqueSettings.from_chat_event(self._event)
119
+ settings = UniqueSettings.from_chat_event(self.event)
120
120
  kb_service = UniqueServiceFactory(
121
121
  settings=settings
122
122
  ).knowledge_base_service()
@@ -0,0 +1,24 @@
1
+ from __future__ import annotations
2
+
3
+ from pydantic import BaseModel, ConfigDict, Field
4
+ from typing_extensions import Self
5
+
6
+ from unique_toolkit.app.schemas import ChatEvent
7
+
8
+
9
+ class ToolRunContext(BaseModel):
10
+ """Tool-manager runtime state decoupled from a raw :class:`ChatEvent`."""
11
+
12
+ model_config = ConfigDict(frozen=True, arbitrary_types_allowed=True)
13
+
14
+ tool_choices: list[str] = Field(default_factory=list)
15
+ disabled_tools: list[str] = Field(default_factory=list)
16
+ tool_init_event: ChatEvent | None = None
17
+
18
+ @classmethod
19
+ def from_chat_event(cls, event: ChatEvent) -> Self:
20
+ return cls(
21
+ tool_choices=list(event.payload.tool_choices),
22
+ disabled_tools=list(event.payload.disabled_tools),
23
+ tool_init_event=event,
24
+ )
@@ -18,7 +18,8 @@ from unique_toolkit.app.schemas import ChatEvent
18
18
  from unique_toolkit.language_model import LanguageModelToolDescription
19
19
 
20
20
  if TYPE_CHECKING:
21
- pass
21
+ from unique_toolkit.language_model.service import LanguageModelService
22
+ from unique_toolkit.services.chat_service import ChatService
22
23
  from unique_toolkit.language_model.schemas import (
23
24
  LanguageModelFunction,
24
25
  )
@@ -169,6 +170,9 @@ class Tool(ABC, Generic[ConfigType]):
169
170
  def __init__(self, config: ConfigType) -> None: ...
170
171
 
171
172
  @overload
173
+ @deprecated(
174
+ "Passing event is deprecated. Use Tool(config) and inject context in run()."
175
+ )
172
176
  def __init__(
173
177
  self,
174
178
  config: ConfigType,
@@ -176,17 +180,32 @@ class Tool(ABC, Generic[ConfigType]):
176
180
  tool_progress_reporter: ToolProgressReporter | None = ...,
177
181
  ) -> None: ...
178
182
 
183
+ @overload
184
+ def __init__(
185
+ self,
186
+ config: ConfigType,
187
+ *,
188
+ chat_service: ChatService,
189
+ language_model_service: LanguageModelService,
190
+ tool_progress_reporter: ToolProgressReporter | None = ...,
191
+ ) -> None: ...
192
+
179
193
  def __init__(
180
194
  self,
181
195
  config: ConfigType,
182
196
  event: ChatEvent | None = None,
183
197
  tool_progress_reporter: ToolProgressReporter | None = None,
198
+ *,
199
+ chat_service: ChatService | None = None,
200
+ language_model_service: LanguageModelService | None = None,
184
201
  ) -> None:
185
202
  """Initialize the tool.
186
203
 
187
- Preferred (decoupled): `Tool(config)` — configuration only.
204
+ Preferred (decoupled): ``Tool(config)`` — configuration only.
188
205
 
189
- Backward compatible: `Tool(config, event, tool_progress_reporter)` — creates
206
+ Service injection: ``Tool(config, chat_service=..., language_model_service=...)``.
207
+
208
+ Backward compatible: ``Tool(config, event, tool_progress_reporter)`` — creates
190
209
  deprecated chat_service, language_model_service, message_step_logger for
191
210
  legacy subclasses.
192
211
  """
@@ -200,6 +219,25 @@ class Tool(ABC, Generic[ConfigType]):
200
219
  self.logger = getLogger(f"{module_name}.{__name__}")
201
220
  self.debug_info: dict[str, Any] = {}
202
221
 
222
+ if (chat_service is None) != (language_model_service is None):
223
+ raise ValueError(
224
+ "chat_service and language_model_service must be injected together; "
225
+ "supplying only one is not supported."
226
+ )
227
+
228
+ if chat_service is not None and language_model_service is not None:
229
+ from unique_toolkit.agentic.message_log_manager.service import (
230
+ MessageStepLogger,
231
+ )
232
+
233
+ self._tool_progress_reporter = tool_progress_reporter
234
+ self._chat_service = chat_service
235
+ self._language_model_service = language_model_service
236
+ self._message_step_logger = MessageStepLogger(
237
+ chat_service=self._chat_service,
238
+ )
239
+ return
240
+
203
241
  if event is not None:
204
242
  from unique_toolkit.agentic.message_log_manager.service import (
205
243
  MessageStepLogger,
@@ -220,11 +258,12 @@ class Tool(ABC, Generic[ConfigType]):
220
258
  "Never reuse event. Dangerous. Prefer Tool(config) and inject context in run()."
221
259
  )
222
260
  def event(self) -> ChatEvent:
223
- if not hasattr(self, "_event"):
261
+ chat_event = getattr(self, "_event", None)
262
+ if chat_event is None:
224
263
  raise AttributeError(
225
264
  "event not available (tool was initialized with config only). "
226
265
  )
227
- return self._event
266
+ return chat_event
228
267
 
229
268
  @property
230
269
  @deprecated(
@@ -12,6 +12,7 @@ from openai.types.responses import (
12
12
  response_create_params,
13
13
  )
14
14
  from pydantic import BaseModel, Field
15
+ from typing_extensions import Self
15
16
 
16
17
  from unique_toolkit._common.execution import (
17
18
  Result,
@@ -31,6 +32,7 @@ from unique_toolkit.agentic.tools.openai_builtin.base import (
31
32
  OpenAIBuiltInToolName,
32
33
  )
33
34
  from unique_toolkit.agentic.tools.openai_builtin.manager import OpenAIBuiltInToolManager
35
+ from unique_toolkit.agentic.tools.run_context import ToolRunContext
34
36
  from unique_toolkit.agentic.tools.schemas import ToolCallResponse, ToolPrompts
35
37
  from unique_toolkit.agentic.tools.tool import Tool
36
38
  from unique_toolkit.agentic.tools.tool_progress_reporter import ToolProgressReporter
@@ -88,13 +90,62 @@ class _ToolManager(Generic[_ApiMode]):
88
90
  a2a_manager: A2AManager,
89
91
  api_mode: _ApiMode,
90
92
  builtin_tool_manager: OpenAIBuiltInToolManager | None = None,
93
+ ) -> None:
94
+ self._setup(
95
+ logger=logger,
96
+ config=config,
97
+ run_context=ToolRunContext.from_chat_event(event),
98
+ tool_progress_reporter=tool_progress_reporter,
99
+ mcp_manager=mcp_manager,
100
+ a2a_manager=a2a_manager,
101
+ api_mode=api_mode,
102
+ builtin_tool_manager=builtin_tool_manager,
103
+ )
104
+
105
+ @classmethod
106
+ def from_run_context(
107
+ cls,
108
+ logger: Logger,
109
+ config: ToolManagerConfig,
110
+ *,
111
+ run_context: ToolRunContext,
112
+ tool_progress_reporter: ToolProgressReporter,
113
+ mcp_manager: MCPManager,
114
+ a2a_manager: A2AManager,
115
+ api_mode: _ApiMode,
116
+ builtin_tool_manager: OpenAIBuiltInToolManager | None = None,
117
+ ) -> Self:
118
+ instance = cls.__new__(cls)
119
+ instance._setup(
120
+ logger=logger,
121
+ config=config,
122
+ run_context=run_context,
123
+ tool_progress_reporter=tool_progress_reporter,
124
+ mcp_manager=mcp_manager,
125
+ a2a_manager=a2a_manager,
126
+ api_mode=api_mode,
127
+ builtin_tool_manager=builtin_tool_manager,
128
+ )
129
+ return instance
130
+
131
+ def _setup(
132
+ self,
133
+ *,
134
+ logger: Logger,
135
+ config: ToolManagerConfig,
136
+ run_context: ToolRunContext,
137
+ tool_progress_reporter: ToolProgressReporter,
138
+ mcp_manager: MCPManager,
139
+ a2a_manager: A2AManager,
140
+ api_mode: _ApiMode,
141
+ builtin_tool_manager: OpenAIBuiltInToolManager | None,
91
142
  ) -> None:
92
143
  self._logger = logger
93
144
  self._config = config
94
145
  self._tool_progress_reporter = tool_progress_reporter
95
146
  self._tools: list[Tool[Any] | OpenAIBuiltInTool[Any]] = []
96
- self._tool_choices = event.payload.tool_choices
97
- self._disabled_tools = event.payload.disabled_tools
147
+ self._tool_choices = run_context.tool_choices
148
+ self._disabled_tools = run_context.disabled_tools
98
149
  self._exclusive_tools = [
99
150
  tool.name for tool in self._config.tools if tool.is_exclusive
100
151
  ]
@@ -104,17 +155,33 @@ class _ToolManager(Generic[_ApiMode]):
104
155
  self._a2a_manager = a2a_manager
105
156
  self._builtin_tool_manager = builtin_tool_manager
106
157
  self._api_mode = api_mode
107
- self._init__tools(event)
108
-
109
- def _init__tools(self, event: ChatEvent) -> None:
158
+ self._sub_agents: list[SubAgentTool] = []
159
+ self._builtin_tools: list[OpenAIBuiltInTool[Any]] = []
160
+ self._mcp_tools: list[Tool[Any]] = []
161
+ self._internal_tools: list[Tool[Any]] = []
162
+ self.available_tools: list[
163
+ Tool[Any] | OpenAIBuiltInTool[Any] | SubAgentTool
164
+ ] = []
165
+ self._init__tools(run_context.tool_init_event)
166
+
167
+ def _init__tools(self, tool_init_event: ChatEvent | None) -> None:
110
168
  tool_choices = self._tool_choices
111
169
  tool_configs = self._config.tools
112
170
  self._logger.info("Initializing tool definitions...")
113
171
  self._logger.info(f"Tool choices: {tool_choices}")
114
172
 
115
- tool_configs, sub_agents = self._a2a_manager.get_all_sub_agents(
116
- tool_configs, event
117
- )
173
+ if tool_init_event is not None:
174
+ tool_configs, sub_agents = self._a2a_manager.get_all_sub_agents(
175
+ tool_configs,
176
+ tool_init_event,
177
+ )
178
+ else:
179
+ tool_configs = [
180
+ tool_config
181
+ for tool_config in tool_configs
182
+ if not tool_config.is_sub_agent
183
+ ]
184
+ sub_agents = []
118
185
  self._sub_agents = sub_agents
119
186
 
120
187
  registered_tool_names = set(t.name for t in self._sub_agents)
@@ -133,18 +200,27 @@ class _ToolManager(Generic[_ApiMode]):
133
200
  registered_tool_names.update(t.name for t in self._mcp_tools)
134
201
 
135
202
  # Build internal tools from configurations
136
- self._internal_tools = [
137
- ToolFactory.build_tool_with_settings(
138
- t.name,
139
- t,
140
- t.configuration,
141
- event,
142
- tool_progress_reporter=self._tool_progress_reporter,
143
- )
144
- for t in tool_configs
145
- if t.name not in registered_tool_names # Skip already handled tools
146
- and t.name not in OpenAIBuiltInToolName # Safeguard
147
- ]
203
+ self._internal_tools.clear()
204
+ for t in tool_configs:
205
+ if t.name in registered_tool_names:
206
+ continue
207
+ if t.name in OpenAIBuiltInToolName:
208
+ continue
209
+ if tool_init_event is not None:
210
+ built_tool = ToolFactory.build_tool_with_settings(
211
+ t.name,
212
+ t,
213
+ t.configuration,
214
+ tool_init_event,
215
+ tool_progress_reporter=self._tool_progress_reporter,
216
+ )
217
+ else:
218
+ self._logger.info(
219
+ "Skipping internal tool '%s' (requires chat event for initialization)",
220
+ t.name,
221
+ )
222
+ continue
223
+ self._internal_tools.append(built_tool)
148
224
 
149
225
  # Combine all types of tools
150
226
  self.available_tools = (
@@ -607,6 +683,30 @@ class ToolManager(_ToolManager[Literal["completions"]]):
607
683
  builtin_tool_manager=None,
608
684
  )
609
685
 
686
+ @classmethod
687
+ def from_run_context(
688
+ cls,
689
+ logger: Logger,
690
+ config: ToolManagerConfig,
691
+ *,
692
+ run_context: ToolRunContext,
693
+ tool_progress_reporter: ToolProgressReporter,
694
+ mcp_manager: MCPManager,
695
+ a2a_manager: A2AManager,
696
+ api_mode: Literal["completions"] = "completions",
697
+ builtin_tool_manager: OpenAIBuiltInToolManager | None = None,
698
+ ) -> Self:
699
+ return super().from_run_context(
700
+ logger=logger,
701
+ config=config,
702
+ run_context=run_context,
703
+ tool_progress_reporter=tool_progress_reporter,
704
+ mcp_manager=mcp_manager,
705
+ a2a_manager=a2a_manager,
706
+ api_mode=api_mode,
707
+ builtin_tool_manager=builtin_tool_manager,
708
+ )
709
+
610
710
 
611
711
  class ResponsesApiToolManager(_ToolManager[Literal["responses"]]):
612
712
  def __init__(
@@ -631,6 +731,33 @@ class ResponsesApiToolManager(_ToolManager[Literal["responses"]]):
631
731
  builtin_tool_manager=builtin_tool_manager,
632
732
  )
633
733
 
734
+ @classmethod
735
+ def from_run_context(
736
+ cls,
737
+ logger: Logger,
738
+ config: ToolManagerConfig,
739
+ *,
740
+ run_context: ToolRunContext,
741
+ tool_progress_reporter: ToolProgressReporter,
742
+ mcp_manager: MCPManager,
743
+ a2a_manager: A2AManager,
744
+ api_mode: Literal["responses"] = "responses",
745
+ builtin_tool_manager: OpenAIBuiltInToolManager | None = None,
746
+ ) -> Self:
747
+ if builtin_tool_manager is None:
748
+ msg = "builtin_tool_manager is required for ResponsesApiToolManager"
749
+ raise ValueError(msg)
750
+ return super().from_run_context(
751
+ logger=logger,
752
+ config=config,
753
+ run_context=run_context,
754
+ tool_progress_reporter=tool_progress_reporter,
755
+ mcp_manager=mcp_manager,
756
+ a2a_manager=a2a_manager,
757
+ api_mode=api_mode,
758
+ builtin_tool_manager=builtin_tool_manager,
759
+ )
760
+
634
761
  def get_required_include_params(self) -> list[ResponseIncludable]:
635
762
  """Return Responses API include params required by all active built-in tools."""
636
763
  return self._builtin_tool_manager.get_required_include_params()