unique-toolkit 2026.30.0.dev15__tar.gz → 2026.30.0.dev17__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 (423) hide show
  1. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/PKG-INFO +2 -2
  2. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/pyproject.toml +2 -2
  3. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/history_manager/loop_token_reducer.py +97 -19
  4. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/openai_builtin/base.py +0 -10
  5. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/__init__.py +11 -3
  6. unique_toolkit-2026.30.0.dev17/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/activator/__init__.py +11 -0
  7. unique_toolkit-2026.30.0.dev17/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/activator/config.py +23 -0
  8. unique_toolkit-2026.30.0.dev17/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/activator/service.py +110 -0
  9. unique_toolkit-2026.30.0.dev17/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/builder/__init__.py +5 -0
  10. unique_toolkit-2026.30.0.dev17/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/builder/_container.py +50 -0
  11. unique_toolkit-2026.30.0.dev17/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/builder/_files.py +152 -0
  12. unique_toolkit-2026.30.0.dev17/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/builder/_memory.py +35 -0
  13. unique_toolkit-2026.30.0.dev17/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/builder/builder.py +166 -0
  14. unique_toolkit-2026.30.0.dev17/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/config.py +67 -0
  15. unique_toolkit-2026.30.0.dev17/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/tool/__init__.py +11 -0
  16. {unique_toolkit-2026.30.0.dev15/unique_toolkit/agentic/tools/openai_builtin/code_interpreter → unique_toolkit-2026.30.0.dev17/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/tool}/config.py +1 -41
  17. unique_toolkit-2026.30.0.dev17/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/tool/service.py +108 -0
  18. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/openai_builtin/manager.py +43 -29
  19. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/tool_manager.py +67 -8
  20. unique_toolkit-2026.30.0.dev15/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/service.py +0 -449
  21. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/README.md +0 -0
  22. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/__init__.py +0 -0
  23. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/__init__.py +0 -0
  24. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/_base_service.py +0 -0
  25. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/_time_utils.py +0 -0
  26. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/api_calling/human_verification_manager.py +0 -0
  27. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/base_model_type_attribute.py +0 -0
  28. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/chunk_relevancy_sorter/config.py +0 -0
  29. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/chunk_relevancy_sorter/exception.py +0 -0
  30. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/chunk_relevancy_sorter/schemas.py +0 -0
  31. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/chunk_relevancy_sorter/service.py +0 -0
  32. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/chunk_relevancy_sorter/tests/test_service.py +0 -0
  33. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/config_checker/README.md +0 -0
  34. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/config_checker/__init__.py +0 -0
  35. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/config_checker/__main__.py +0 -0
  36. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/config_checker/cli.py +0 -0
  37. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/config_checker/differ.py +0 -0
  38. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/config_checker/exporter.py +0 -0
  39. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/config_checker/models.py +0 -0
  40. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/config_checker/registry.py +0 -0
  41. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/config_checker/validator.py +0 -0
  42. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/default_language_model.py +0 -0
  43. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/docx_generator/__init__.py +0 -0
  44. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/docx_generator/config.py +0 -0
  45. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/docx_generator/pandoc_converter.py +0 -0
  46. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/docx_generator/schemas.py +0 -0
  47. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/docx_generator/service.py +0 -0
  48. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/docx_generator/template/Doc Template.docx +0 -0
  49. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/endpoint_builder.py +0 -0
  50. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/endpoint_requestor.py +0 -0
  51. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/event_bus.py +0 -0
  52. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/exception.py +0 -0
  53. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/execution.py +0 -0
  54. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/experimental/endpoint_builder.py +0 -0
  55. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/experimental/endpoint_requestor.py +0 -0
  56. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/experimental/write_up_agent/README.md +0 -0
  57. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/experimental/write_up_agent/__init__.py +0 -0
  58. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/experimental/write_up_agent/agent.py +0 -0
  59. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/experimental/write_up_agent/config.py +0 -0
  60. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/experimental/write_up_agent/examples/data.csv +0 -0
  61. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/experimental/write_up_agent/examples/example_usage.py +0 -0
  62. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/experimental/write_up_agent/schemas.py +0 -0
  63. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/experimental/write_up_agent/services/__init__.py +0 -0
  64. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/__init__.py +0 -0
  65. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/exceptions.py +0 -0
  66. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/service.py +0 -0
  67. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/utils.py +0 -0
  68. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/__init__.py +0 -0
  69. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/config.py +0 -0
  70. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/exceptions.py +0 -0
  71. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/config.py +0 -0
  72. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/system_prompt.j2 +0 -0
  73. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/user_prompt.j2 +0 -0
  74. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/service.py +0 -0
  75. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/__init__.py +0 -0
  76. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/default_template.j2 +0 -0
  77. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/exceptions.py +0 -0
  78. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/service.py +0 -0
  79. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/utils.py +0 -0
  80. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/experimental/write_up_agent/utils.py +0 -0
  81. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/feature_flags/schema.py +0 -0
  82. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/metadata_filter_scope.py +0 -0
  83. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/pydantic/rjsf_tags.py +0 -0
  84. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/pydantic_helpers.py +0 -0
  85. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/referencing.py +0 -0
  86. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/string_utilities.py +0 -0
  87. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/tests/test_referencing.py +0 -0
  88. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/tests/test_string_utilities.py +0 -0
  89. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/token/__init__.py +0 -0
  90. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/token/image_token_counting.py +0 -0
  91. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/token/token_counting.py +0 -0
  92. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/token/tokenizers/deepseek/tokenizer.json +0 -0
  93. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/token/tokenizers/qwen/tokenizer.json +0 -0
  94. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/utils/__init__.py +0 -0
  95. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/utils/files.py +0 -0
  96. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/utils/image/encode.py +0 -0
  97. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/utils/jinja/helpers.py +0 -0
  98. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/utils/jinja/render.py +0 -0
  99. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/utils/jinja/schema.py +0 -0
  100. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/utils/jinja/utils.py +0 -0
  101. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/utils/structured_output/__init__.py +0 -0
  102. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/utils/structured_output/schema.py +0 -0
  103. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/utils/write_configuration.py +0 -0
  104. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/validate_required_values.py +0 -0
  105. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/validators.py +0 -0
  106. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/__init__.py +0 -0
  107. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/debug_info_manager/debug_info_manager.py +0 -0
  108. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/debug_info_manager/test/test_debug_info_manager.py +0 -0
  109. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/evaluation/config.py +0 -0
  110. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/__init__.py +0 -0
  111. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/system_prompt.j2 +0 -0
  112. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/user_prompt.j2 +0 -0
  113. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/evaluation/context_relevancy/schema.py +0 -0
  114. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/evaluation/context_relevancy/service.py +0 -0
  115. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/evaluation/evaluation_manager.py +0 -0
  116. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/evaluation/exception.py +0 -0
  117. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/evaluation/hallucination/constants.py +0 -0
  118. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/evaluation/hallucination/hallucination_evaluation.py +0 -0
  119. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/evaluation/hallucination/prompts/__init__.py +0 -0
  120. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/evaluation/hallucination/prompts/system_prompt.j2 +0 -0
  121. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/evaluation/hallucination/prompts/user_prompt.j2 +0 -0
  122. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/evaluation/hallucination/service.py +0 -0
  123. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/evaluation/hallucination/utils.py +0 -0
  124. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/evaluation/output_parser.py +0 -0
  125. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/evaluation/schemas.py +0 -0
  126. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/evaluation/tests/fixtures.py +0 -0
  127. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/evaluation/tests/test_config.py +0 -0
  128. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/evaluation/tests/test_context_relevancy_service.py +0 -0
  129. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/evaluation/tests/test_hallucination_constants.py +0 -0
  130. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/evaluation/tests/test_hallucination_external_context.py +0 -0
  131. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/evaluation/tests/test_hallucination_utils.py +0 -0
  132. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/evaluation/tests/test_output_parser.py +0 -0
  133. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/evaluation/tests/test_prompt_loaders.py +0 -0
  134. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/evaluation/utils.py +0 -0
  135. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/feature_flags/__init__.py +0 -0
  136. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/feature_flags/feature_flags.py +0 -0
  137. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/history_manager/history_construction_with_contents.py +0 -0
  138. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/history_manager/history_manager.py +0 -0
  139. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/history_manager/settings.py +0 -0
  140. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/history_manager/utils.py +0 -0
  141. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/loop_runner/__init__.py +0 -0
  142. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/loop_runner/_iteration_handler_utils.py +0 -0
  143. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/loop_runner/_responses_iteration_handler_utils.py +0 -0
  144. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/loop_runner/_responses_stream_handler_utils.py +0 -0
  145. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/loop_runner/_stream_handler_utils.py +0 -0
  146. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/loop_runner/base.py +0 -0
  147. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/loop_runner/middleware/__init__.py +0 -0
  148. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/loop_runner/middleware/planning/__init__.py +0 -0
  149. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/loop_runner/middleware/planning/planning.py +0 -0
  150. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/loop_runner/middleware/planning/schema.py +0 -0
  151. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/loop_runner/runners/__init__.py +0 -0
  152. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/loop_runner/runners/basic.py +0 -0
  153. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/loop_runner/runners/mistral/__init__.py +0 -0
  154. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/loop_runner/runners/mistral/mistral_runner.py +0 -0
  155. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/loop_runner/runners/qwen/__init__.py +0 -0
  156. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/loop_runner/runners/qwen/helpers.py +0 -0
  157. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/loop_runner/runners/qwen/qwen_runner.py +0 -0
  158. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/message_log_manager/__init__.py +0 -0
  159. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/message_log_manager/service.py +0 -0
  160. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/message_log_order.py +0 -0
  161. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/postprocessor/postprocessor_manager.py +0 -0
  162. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/reference_manager/reference_manager.py +0 -0
  163. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/reference_manager/tests/test_external_context.py +0 -0
  164. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/responses_api/__init__.py +0 -0
  165. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/responses_api/postprocessors/code_display.py +0 -0
  166. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/responses_api/postprocessors/generated_files.py +0 -0
  167. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/responses_api/stream_handler.py +0 -0
  168. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/short_term_memory_manager/persistent_short_term_memory_manager.py +0 -0
  169. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/thinking_manager/thinking_manager.py +0 -0
  170. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/__init__.py +0 -0
  171. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/a2a/__init__.py +0 -0
  172. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/a2a/config.py +0 -0
  173. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/a2a/evaluation/__init__.py +0 -0
  174. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/a2a/evaluation/_utils.py +0 -0
  175. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/a2a/evaluation/config.py +0 -0
  176. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/a2a/evaluation/evaluator.py +0 -0
  177. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/a2a/evaluation/summarization_user_message.j2 +0 -0
  178. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/a2a/manager.py +0 -0
  179. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/a2a/postprocessing/__init__.py +0 -0
  180. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/a2a/postprocessing/_display_utils.py +0 -0
  181. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/a2a/postprocessing/_ref_utils.py +0 -0
  182. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/a2a/postprocessing/config.py +0 -0
  183. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/a2a/postprocessing/display.py +0 -0
  184. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/a2a/postprocessing/references.py +0 -0
  185. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display.py +0 -0
  186. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display_utils.py +0 -0
  187. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_ref_utils.py +0 -0
  188. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_references.py +0 -0
  189. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/a2a/prompts.py +0 -0
  190. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/a2a/response_watcher/__init__.py +0 -0
  191. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/a2a/response_watcher/service.py +0 -0
  192. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/a2a/tool/__init__.py +0 -0
  193. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/a2a/tool/_memory.py +0 -0
  194. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/a2a/tool/_schema.py +0 -0
  195. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/a2a/tool/config.py +0 -0
  196. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/a2a/tool/service.py +0 -0
  197. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/a2a/tool/test/test_service_utils.py +0 -0
  198. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/agent_chunks_hanlder.py +0 -0
  199. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/config.py +0 -0
  200. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/experimental/__init__.py +0 -0
  201. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/experimental/ask_user_tool/__init__.py +0 -0
  202. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/experimental/ask_user_tool/config.py +0 -0
  203. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/experimental/ask_user_tool/tool.py +0 -0
  204. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/experimental/open_file_tool/__init__.py +0 -0
  205. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/experimental/open_file_tool/config.py +0 -0
  206. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/experimental/open_file_tool/runtime.py +0 -0
  207. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/experimental/open_file_tool/tool.py +0 -0
  208. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/experimental/retrieve_search_scope_tool/__init__.py +0 -0
  209. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/experimental/retrieve_search_scope_tool/config.py +0 -0
  210. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/experimental/retrieve_search_scope_tool/tool.py +0 -0
  211. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/experimental/todo/__init__.py +0 -0
  212. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/experimental/todo/config.py +0 -0
  213. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/experimental/todo/prompts/__init__.py +0 -0
  214. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/experimental/todo/prompts/execution_reminder.j2 +0 -0
  215. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/experimental/todo/prompts/system_prompt.j2 +0 -0
  216. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/experimental/todo/prompts/tool_description.j2 +0 -0
  217. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/experimental/todo/prompts/verification_nudge.j2 +0 -0
  218. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/experimental/todo/schemas.py +0 -0
  219. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/experimental/todo/service.py +0 -0
  220. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/factory.py +0 -0
  221. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/mcp/__init__.py +0 -0
  222. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/mcp/manager.py +0 -0
  223. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/mcp/models.py +0 -0
  224. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/mcp/tool_wrapper.py +0 -0
  225. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/names.py +0 -0
  226. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/openai_builtin/__init__.py +0 -0
  227. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/__init__.py +0 -0
  228. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/artifacts.py +0 -0
  229. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/code_display.py +0 -0
  230. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/generated_files.py +0 -0
  231. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/schemas.py +0 -0
  232. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/run_context.py +0 -0
  233. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/schemas.py +0 -0
  234. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/test/test_mcp_manager.py +0 -0
  235. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/test/test_tool_progress_reporter.py +0 -0
  236. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/tool.py +0 -0
  237. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/tool_progress_reporter.py +0 -0
  238. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/utils/__init__.py +0 -0
  239. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/utils/source_handling/__init__.py +0 -0
  240. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/utils/source_handling/schema.py +0 -0
  241. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/utils/source_handling/source_formatting.py +0 -0
  242. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/utils/source_handling/tests/test_source_formatting.py +0 -0
  243. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic_table/__init__.py +0 -0
  244. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic_table/schemas.py +0 -0
  245. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic_table/service.py +0 -0
  246. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic_table/synthetic_chat_event.py +0 -0
  247. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/app/__init__.py +0 -0
  248. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/app/chat_event_filter_options_settings.py +0 -0
  249. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/app/dev_util.py +0 -0
  250. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/app/fast_api_factory.py +0 -0
  251. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/app/feature_flags.py +0 -0
  252. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/app/find_env_file.py +0 -0
  253. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/app/init_logging.py +0 -0
  254. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/app/init_sdk.py +0 -0
  255. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/app/performance/async_tasks.py +0 -0
  256. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/app/performance/async_wrapper.py +0 -0
  257. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/app/schemas.py +0 -0
  258. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/app/unique_settings.py +0 -0
  259. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/app/verification.py +0 -0
  260. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/app/webhook.py +0 -0
  261. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/chat/__init__.py +0 -0
  262. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/chat/cancellation.py +0 -0
  263. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/chat/constants.py +0 -0
  264. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/chat/deprecated/__init__.py +0 -0
  265. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/chat/deprecated/service.py +0 -0
  266. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/chat/functions.py +0 -0
  267. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/chat/rendering.py +0 -0
  268. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/chat/responses_api.py +0 -0
  269. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/chat/schemas.py +0 -0
  270. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/chat/service.py +0 -0
  271. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/chat/state.py +0 -0
  272. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/chat/utils.py +0 -0
  273. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/content/__init__.py +0 -0
  274. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/content/constants.py +0 -0
  275. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/content/functions.py +0 -0
  276. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/content/schemas.py +0 -0
  277. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/content/service.py +0 -0
  278. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/content/smart_rules.py +0 -0
  279. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/content/utils.py +0 -0
  280. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/data_extraction/README.md +0 -0
  281. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/data_extraction/__init__.py +0 -0
  282. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/data_extraction/augmented/__init__.py +0 -0
  283. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/data_extraction/augmented/service.py +0 -0
  284. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/data_extraction/base.py +0 -0
  285. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/data_extraction/basic/__init__.py +0 -0
  286. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/data_extraction/basic/config.py +0 -0
  287. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/data_extraction/basic/prompt.py +0 -0
  288. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/data_extraction/basic/service.py +0 -0
  289. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/elicitation/__init__.py +0 -0
  290. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/elicitation/constants.py +0 -0
  291. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/elicitation/exceptions.py +0 -0
  292. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/elicitation/functions.py +0 -0
  293. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/elicitation/schemas.py +0 -0
  294. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/elicitation/service.py +0 -0
  295. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/embedding/__init__.py +0 -0
  296. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/embedding/constants.py +0 -0
  297. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/embedding/functions.py +0 -0
  298. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/embedding/schemas.py +0 -0
  299. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/embedding/service.py +0 -0
  300. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/embedding/utils.py +0 -0
  301. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/README.md +0 -0
  302. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/__init__.py +0 -0
  303. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/_internal/__init__.py +0 -0
  304. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/_internal/streaming/__init__.py +0 -0
  305. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/_internal/streaming/common.py +0 -0
  306. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/_internal/streaming/pattern_replacer.py +0 -0
  307. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/components/__init__.py +0 -0
  308. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/components/_base.py +0 -0
  309. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/components/content_tree/__init__.py +0 -0
  310. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/components/content_tree/functions.py +0 -0
  311. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/components/content_tree/schemas.py +0 -0
  312. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/components/content_tree/service.py +0 -0
  313. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/components/internal_search/__init__.py +0 -0
  314. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/components/internal_search/base/__init__.py +0 -0
  315. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/components/internal_search/base/config.py +0 -0
  316. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/components/internal_search/base/schemas.py +0 -0
  317. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/components/internal_search/base/service.py +0 -0
  318. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/components/internal_search/base/utils.py +0 -0
  319. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/components/internal_search/chat/__init__.py +0 -0
  320. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/components/internal_search/chat/config.py +0 -0
  321. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/components/internal_search/chat/schemas.py +0 -0
  322. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/components/internal_search/chat/service.py +0 -0
  323. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/components/internal_search/knowledge_base/__init__.py +0 -0
  324. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/components/internal_search/knowledge_base/config.py +0 -0
  325. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/components/internal_search/knowledge_base/schemas.py +0 -0
  326. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/components/internal_search/knowledge_base/service.py +0 -0
  327. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/components/internal_search/post_processing/__init__.py +0 -0
  328. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/components/internal_search/post_processing/config.py +0 -0
  329. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/components/internal_search/post_processing/service.py +0 -0
  330. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/content_tree/__init__.py +0 -0
  331. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/identity/__init__.py +0 -0
  332. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/integrations/__init__.py +0 -0
  333. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/integrations/openai/__init__.py +0 -0
  334. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/integrations/openai/streaming/__init__.py +0 -0
  335. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/__init__.py +0 -0
  336. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/_async_bridge.py +0 -0
  337. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/__init__.py +0 -0
  338. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/complete_with_references.py +0 -0
  339. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/stream_event_router.py +0 -0
  340. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/text_event_handler.py +0 -0
  341. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/tool_call_event_handler.py +0 -0
  342. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/events.py +0 -0
  343. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/protocols/__init__.py +0 -0
  344. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/protocols/chat_completions.py +0 -0
  345. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/protocols/responses.py +0 -0
  346. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/__init__.py +0 -0
  347. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/code_interpreter_event_handler.py +0 -0
  348. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/complete_with_references.py +0 -0
  349. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/completed_event_handler.py +0 -0
  350. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/stream_event_router.py +0 -0
  351. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/text_delta_event_handler.py +0 -0
  352. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/tool_call_event_handler.py +0 -0
  353. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/subscribers/__init__.py +0 -0
  354. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/subscribers/message_persister.py +0 -0
  355. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/subscribers/progress_log_persister.py +0 -0
  356. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/resources/__init__.py +0 -0
  357. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/resources/content_folder/__init__.py +0 -0
  358. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/resources/content_folder/functions.py +0 -0
  359. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/resources/content_folder/schemas.py +0 -0
  360. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/resources/content_folder/service.py +0 -0
  361. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/resources/facades/__init__.py +0 -0
  362. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/resources/facades/identity/__init__.py +0 -0
  363. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/resources/facades/identity/service.py +0 -0
  364. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/resources/feature_flags/README.md +0 -0
  365. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/resources/feature_flags/__init__.py +0 -0
  366. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/resources/feature_flags/_graphql_client.py +0 -0
  367. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/resources/feature_flags/_ttl_cache.py +0 -0
  368. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/resources/feature_flags/client.py +0 -0
  369. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/resources/feature_flags/schemas.py +0 -0
  370. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/resources/feature_flags/settings.py +0 -0
  371. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/resources/group/__init__.py +0 -0
  372. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/resources/group/functions.py +0 -0
  373. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/resources/group/schemas.py +0 -0
  374. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/resources/group/service.py +0 -0
  375. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/resources/scheduled_task/__init__.py +0 -0
  376. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/resources/scheduled_task/cron.py +0 -0
  377. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/resources/scheduled_task/functions.py +0 -0
  378. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/resources/scheduled_task/schemas.py +0 -0
  379. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/resources/scheduled_task/service.py +0 -0
  380. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/resources/user/__init__.py +0 -0
  381. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/resources/user/functions.py +0 -0
  382. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/resources/user/schemas.py +0 -0
  383. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/resources/user/service.py +0 -0
  384. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/testing/__init__.py +0 -0
  385. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/framework_utilities/__init__.py +0 -0
  386. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/framework_utilities/langchain/__init__.py +0 -0
  387. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/framework_utilities/langchain/client.py +0 -0
  388. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/framework_utilities/langchain/history.py +0 -0
  389. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/framework_utilities/openai/__init__.py +0 -0
  390. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/framework_utilities/openai/client.py +0 -0
  391. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/framework_utilities/openai/message_builder.py +0 -0
  392. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/framework_utilities/utils.py +0 -0
  393. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/language_model/__init__.py +0 -0
  394. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/language_model/_responses_api_utils.py +0 -0
  395. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/language_model/builder.py +0 -0
  396. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/language_model/constants.py +0 -0
  397. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/language_model/default_language_model.py +0 -0
  398. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/language_model/functions.py +0 -0
  399. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/language_model/infos.py +0 -0
  400. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/language_model/prompt.py +0 -0
  401. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/language_model/reference.py +0 -0
  402. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/language_model/schemas.py +0 -0
  403. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/language_model/service.py +0 -0
  404. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/language_model/settings.py +0 -0
  405. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/language_model/stream_transform.py +0 -0
  406. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/language_model/utils.py +0 -0
  407. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/monitoring/__init__.py +0 -0
  408. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/monitoring/gunicorn.py +0 -0
  409. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/monitoring/middleware.py +0 -0
  410. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/monitoring/registry.py +0 -0
  411. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/protocols/support.py +0 -0
  412. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/services/__init__.py +0 -0
  413. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/services/chat_service.py +0 -0
  414. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/services/factory.py +0 -0
  415. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/services/knowledge_base.py +0 -0
  416. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/short_term_memory/__init__.py +0 -0
  417. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/short_term_memory/constants.py +0 -0
  418. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/short_term_memory/functions.py +0 -0
  419. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/short_term_memory/schemas.py +0 -0
  420. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/short_term_memory/service.py +0 -0
  421. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/smart_rules/__init__.py +0 -0
  422. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/smart_rules/compile.py +0 -0
  423. {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/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.30.0.dev15
3
+ Version: 2026.30.0.dev17
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.30.0.dev6,<2026.30.0rc0
19
+ Requires-Dist: unique-sdk>=2026.30.0.dev8,<2026.30.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.30.0.dev15"
3
+ version = "2026.30.0.dev17"
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.30.0.dev6,<2026.30.0rc0",
31
+ "unique-sdk>=2026.30.0.dev8,<2026.30.0rc0",
32
32
  "jambo>=0.1.2,<0.2",
33
33
  "jinja2>=3.1.6,<4",
34
34
  "docxtpl>=0.20.1,<0.21",
@@ -37,6 +37,37 @@ from unique_toolkit.services.factory import UniqueServiceFactory
37
37
  MAX_INPUT_TOKENS_SAFETY_PERCENTAGE = env_settings.input_correction_reduction_factor
38
38
  SAFETY_MARGIN_FOR_AGGRESSIVE_REDUCTION = env_settings.input_aggressive_reduction_factor
39
39
 
40
+ PLAIN_TEXT_TRUNCATION_MARKER = "\n\n[... tool response too long and was truncated]"
41
+ # TODO: Make this configurable
42
+ MIN_PLAIN_TEXT_CHARS_TO_KEEP = 1000
43
+
44
+
45
+ def _truncate_plain_text(text: str, overshoot_factor: float) -> str:
46
+ """Truncate plain text so it helps a tool response fit the token budget.
47
+
48
+ Keeps the head and appends a marker. The amount kept scales with the
49
+ overshoot (mirroring the source-reduction math) and never drops below
50
+ ``MIN_PLAIN_TEXT_CHARS_TO_KEEP``. Truncation is on characters rather than
51
+ tokens because the encoder is encode-only; on prose the character ratio is a
52
+ good proxy for the token ratio, and the outer loop re-counts and re-enters
53
+ until the payload fits or no further progress is possible. Any prior marker
54
+ is stripped first so repeated rounds neither stack markers nor re-flag an
55
+ already-floored string. Returns *text* unchanged when no truncation applies.
56
+ """
57
+ base = text.removesuffix(PLAIN_TEXT_TRUNCATION_MARKER)
58
+
59
+ # Copied as for the case where the tool returns chunks (below)
60
+ aggressive_divisor = overshoot_factor * SAFETY_MARGIN_FOR_AGGRESSIVE_REDUCTION
61
+ divisor = max(
62
+ aggressive_divisor if aggressive_divisor >= 1.2 else overshoot_factor, 1.0
63
+ )
64
+ chars_to_keep = max(MIN_PLAIN_TEXT_CHARS_TO_KEEP, int(len(base) // divisor))
65
+
66
+ if chars_to_keep >= len(base):
67
+ return text
68
+
69
+ return base[:chars_to_keep] + PLAIN_TEXT_TRUNCATION_MARKER
70
+
40
71
 
41
72
  class SourceReductionResult(BaseModel):
42
73
  message: LanguageModelToolMessage
@@ -118,7 +149,9 @@ class LoopTokenReducer:
118
149
  token_count = self._count_message_tokens(messages)
119
150
  self._log_token_usage(token_count)
120
151
 
121
- while self._exceeds_token_limit(token_count):
152
+ while self._exceeds_token_limit(token_count) and self._can_reduce_history(
153
+ loop_history
154
+ ):
122
155
  token_count_before_reduction = token_count
123
156
  loop_history[:] = self._handle_token_limit_exceeded(
124
157
  loop_history, token_count
@@ -141,18 +174,30 @@ class LoopTokenReducer:
141
174
  return messages
142
175
 
143
176
  def _exceeds_token_limit(self, token_count: int) -> bool:
144
- """Check if token count exceeds the maximum allowed limit and if at least one tool call has more than one source."""
145
- # At least one tool call should have more than one chunk as answer
177
+ """Whether the payload is over the effective input-token limit.
178
+
179
+ This is purely a size check. Whether anything can actually be reduced to
180
+ get back under the limit is a separate concern (:meth:`_can_reduce_history`).
181
+ """
182
+ # TODO: This is not fully correct at the moment as the token_count
183
+ # include system_prompt and user question already
184
+ return token_count > self._effective_token_limit
185
+
186
+ def _can_reduce_history(self, loop_history: list[LanguageModelMessage]) -> bool:
187
+ """Whether there is any tool response left to reduce.
188
+
189
+ Two independent reduction levers exist:
190
+ * a tool call with more than one chunk can shed sources, and
191
+ * a chunk-less plain-text tool response can be truncated.
192
+ When neither applies the reduction loop cannot make progress and stops.
193
+ """
146
194
  has_multiple_chunks_for_a_tool_call = any(
147
195
  len(chunks) > 1
148
196
  for chunks in self._reference_manager.get_chunks_of_all_tools()
149
197
  )
150
- # TODO: This is not fully correct at the moment as the token_count
151
- # include system_prompt and user question already
152
- # TODO: There is a problem if we exceed but only have one chunk per tool call
153
- exceeds_limit = token_count > self._effective_token_limit
154
-
155
- return has_multiple_chunks_for_a_tool_call and exceeds_limit
198
+ return has_multiple_chunks_for_a_tool_call or any(
199
+ self._can_truncate_message(message) for message in loop_history
200
+ )
156
201
 
157
202
  def _count_message_tokens(self, messages: LanguageModelMessages) -> int:
158
203
  """Count tokens in messages using the configured encoding model."""
@@ -211,7 +256,7 @@ class LoopTokenReducer:
211
256
  f"(overshoot factor: {overshoot_factor:.2f}x). Reducing number of sources per tool call.",
212
257
  )
213
258
 
214
- return self._reduce_message_length_by_reducing_sources_in_tool_response(
259
+ return self._reduce_message_length_by_reducing_tool_responses_content(
215
260
  loop_history, overshoot_factor
216
261
  )
217
262
 
@@ -451,7 +496,7 @@ class LoopTokenReducer:
451
496
 
452
497
  return limited_history_messages[idx:]
453
498
 
454
- def _reduce_message_length_by_reducing_sources_in_tool_response(
499
+ def _reduce_message_length_by_reducing_tool_responses_content(
455
500
  self,
456
501
  history: list[LanguageModelMessage],
457
502
  overshoot_factor: float,
@@ -473,21 +518,41 @@ class LoopTokenReducer:
473
518
  source_offset = max(0, self._max_db_source_number + 1)
474
519
 
475
520
  for message in history:
476
- if self._should_reduce_message(message):
477
- result = self._reduce_sources_in_tool_message(
521
+ if not self._should_reduce_message(message):
522
+ result = message
523
+ elif self._has_sources(message):
524
+ source_result = self._reduce_sources_in_tool_message(
478
525
  message,
479
526
  chunk_offset,
480
527
  source_offset,
481
528
  overshoot_factor,
482
529
  )
483
- content_chunks_reduced.extend(result.reduced_chunks)
484
- history_reduced.append(result.message)
485
- chunk_offset = result.chunk_offset
486
- source_offset = result.source_offset
530
+ content_chunks_reduced.extend(source_result.reduced_chunks)
531
+ chunk_offset = source_result.chunk_offset
532
+ source_offset = source_result.source_offset
533
+ result = source_result.message
534
+ elif self._can_truncate_message(message):
535
+ assert isinstance(message.content, str)
536
+ truncated = _truncate_plain_text(message.content, overshoot_factor)
537
+ if truncated != message.content:
538
+ self._logger.warning(
539
+ f"Truncated plain-text tool response '{message.name}' to "
540
+ f"{len(truncated)} chars "
541
+ f"(overshoot factor: {overshoot_factor:.2f}x)."
542
+ )
543
+ result = LanguageModelToolMessage(
544
+ content=truncated,
545
+ tool_call_id=message.tool_call_id,
546
+ name=message.name,
547
+ )
487
548
  else:
488
- history_reduced.append(message)
549
+ result = message
550
+
551
+ history_reduced.append(result)
552
+
553
+ if len(content_chunks_reduced) > 0:
554
+ self._reference_manager.replace(chunks=content_chunks_reduced)
489
555
 
490
- self._reference_manager.replace(chunks=content_chunks_reduced)
491
556
  return history_reduced
492
557
 
493
558
  def _should_reduce_message(
@@ -498,6 +563,19 @@ class LoopTokenReducer:
498
563
  message, LanguageModelToolMessage
499
564
  )
500
565
 
566
+ def _has_sources(self, message: LanguageModelToolMessage) -> bool:
567
+ return len(self._reference_manager.get_chunks_of_tool(message.tool_call_id)) > 0
568
+
569
+ def _can_truncate_message(self, message: LanguageModelMessage) -> bool:
570
+ if not self._should_reduce_message(message) or message.name == "TableSearch":
571
+ return False
572
+ if not isinstance(message.content, str):
573
+ return False
574
+ if self._has_sources(message):
575
+ return False
576
+ base = message.content.removesuffix(PLAIN_TEXT_TRUNCATION_MARKER)
577
+ return len(base) > MIN_PLAIN_TEXT_CHARS_TO_KEEP
578
+
501
579
  def _reduce_sources_in_tool_message(
502
580
  self,
503
581
  message: LanguageModelToolMessage,
@@ -2,7 +2,6 @@ from abc import ABC, abstractmethod
2
2
  from enum import StrEnum
3
3
  from typing import Generic, TypeVar
4
4
 
5
- from openai.types.responses import ResponseIncludable
6
5
  from openai.types.responses.tool_param import CodeInterpreter
7
6
 
8
7
  from unique_toolkit.agentic.tools.schemas import ToolPrompts
@@ -52,12 +51,3 @@ class OpenAIBuiltInTool(ABC, Generic[ToolType]):
52
51
  Default: False.
53
52
  """
54
53
  return False
55
-
56
- def get_required_include_params(self) -> list[ResponseIncludable]:
57
- """Return Responses API `include` values required by this tool.
58
-
59
- Subclasses override this when they need additional data attached to the
60
- response (e.g. code interpreter execution logs). The default is an
61
- empty list, meaning no extra includes are needed.
62
- """
63
- return []
@@ -1,5 +1,9 @@
1
- from unique_toolkit.agentic.tools.openai_builtin.code_interpreter.config import (
2
- OpenAICodeInterpreterConfig,
1
+ from unique_toolkit.agentic.tools.openai_builtin.code_interpreter.activator import (
2
+ CodeInterpreterActivatorConfig,
3
+ CodeInterpreterActivatorTool,
4
+ )
5
+ from unique_toolkit.agentic.tools.openai_builtin.code_interpreter.builder import (
6
+ CodeInterpreterBuilder,
3
7
  )
4
8
  from unique_toolkit.agentic.tools.openai_builtin.code_interpreter.postprocessors import (
5
9
  DisplayCodeInterpreterFilesPostProcessor,
@@ -7,11 +11,15 @@ from unique_toolkit.agentic.tools.openai_builtin.code_interpreter.postprocessors
7
11
  ShowExecutedCodePostprocessor,
8
12
  ShowExecutedCodePostprocessorConfig,
9
13
  )
10
- from unique_toolkit.agentic.tools.openai_builtin.code_interpreter.service import (
14
+ from unique_toolkit.agentic.tools.openai_builtin.code_interpreter.tool import (
15
+ OpenAICodeInterpreterConfig,
11
16
  OpenAICodeInterpreterTool,
12
17
  )
13
18
 
14
19
  __all__ = [
20
+ "CodeInterpreterActivatorConfig",
21
+ "CodeInterpreterActivatorTool",
22
+ "CodeInterpreterBuilder",
15
23
  "OpenAICodeInterpreterConfig",
16
24
  "OpenAICodeInterpreterTool",
17
25
  "ShowExecutedCodePostprocessor",
@@ -0,0 +1,11 @@
1
+ from unique_toolkit.agentic.tools.openai_builtin.code_interpreter.activator.config import (
2
+ CodeInterpreterActivatorConfig,
3
+ )
4
+ from unique_toolkit.agentic.tools.openai_builtin.code_interpreter.activator.service import (
5
+ CodeInterpreterActivatorTool,
6
+ )
7
+
8
+ __all__ = [
9
+ "CodeInterpreterActivatorConfig",
10
+ "CodeInterpreterActivatorTool",
11
+ ]
@@ -0,0 +1,23 @@
1
+ from pydantic import Field
2
+
3
+ from unique_toolkit.agentic.tools.schemas import (
4
+ BaseToolConfig,
5
+ )
6
+
7
+ _DEFAULT_TOOL_DESCRIPTION = """
8
+ Activate the code interpreter to run Python in a secure environment for
9
+ calculations, data analysis, processing uploaded files (including spreadsheets),
10
+ plotting and data visualization, and generating downloadable files.
11
+
12
+ CRITICAL: Act as though these capabilities are already available: whenever they are useful, call this tool
13
+ silently and proceed. Never mention this tool, its activation, or its setup to the user.
14
+ """.strip()
15
+
16
+ _DEFAULT_TOOL_DESCRIPTION_FOR_SYSTEM_PROMPT = _DEFAULT_TOOL_DESCRIPTION
17
+
18
+
19
+ class CodeInterpreterActivatorConfig(BaseToolConfig):
20
+ tool_description: str = Field(default=_DEFAULT_TOOL_DESCRIPTION)
21
+ tool_description_for_system_prompt: str = (
22
+ _DEFAULT_TOOL_DESCRIPTION_FOR_SYSTEM_PROMPT
23
+ )
@@ -0,0 +1,110 @@
1
+ import asyncio
2
+ import logging
3
+ from typing import override
4
+
5
+ from pydantic import BaseModel, Field
6
+
7
+ from unique_toolkit.agentic.evaluation.schemas import EvaluationMetricName
8
+ from unique_toolkit.agentic.tools.openai_builtin.code_interpreter.activator.config import (
9
+ CodeInterpreterActivatorConfig,
10
+ )
11
+ from unique_toolkit.agentic.tools.openai_builtin.code_interpreter.builder import (
12
+ CodeInterpreterBuilder,
13
+ )
14
+ from unique_toolkit.agentic.tools.openai_builtin.code_interpreter.tool import (
15
+ OpenAICodeInterpreterTool,
16
+ )
17
+ from unique_toolkit.agentic.tools.schemas import (
18
+ ToolCallResponse,
19
+ )
20
+ from unique_toolkit.agentic.tools.tool import Tool
21
+ from unique_toolkit.language_model.schemas import (
22
+ LanguageModelFunction,
23
+ LanguageModelToolDescription,
24
+ )
25
+
26
+ logger = logging.getLogger(__name__)
27
+
28
+
29
+ class _CodeParams(BaseModel):
30
+ arg: bool = Field(True, description="Ignored Argument.")
31
+
32
+
33
+ class CodeInterpreterActivatorTool(Tool[CodeInterpreterActivatorConfig]):
34
+ NAME = "ActivatePython"
35
+ DISPLAY_NAME = "Activate Python"
36
+
37
+ name = NAME
38
+
39
+ def __init__(
40
+ self,
41
+ config: CodeInterpreterActivatorConfig,
42
+ builder: CodeInterpreterBuilder,
43
+ ) -> None:
44
+ super().__init__(config=config)
45
+ self._builder = builder
46
+ self._built_tool: OpenAICodeInterpreterTool | None = None
47
+ self._activation_lock = asyncio.Lock()
48
+
49
+ @property
50
+ def is_activated(self) -> bool:
51
+ return self._built_tool is not None
52
+
53
+ def get_activated_tool(self) -> OpenAICodeInterpreterTool:
54
+ if self._built_tool is None:
55
+ raise RuntimeError(
56
+ "Code interpreter tool is not activated yet; call `run` first."
57
+ )
58
+ return self._built_tool
59
+
60
+ @override
61
+ def display_name(self) -> str:
62
+ return self.DISPLAY_NAME
63
+
64
+ @override
65
+ def is_enabled(self) -> bool:
66
+ return True
67
+
68
+ @override
69
+ def is_exclusive(self) -> bool:
70
+ return False
71
+
72
+ @override
73
+ def is_capability(self) -> bool:
74
+ return True
75
+
76
+ @override
77
+ def tool_description(self) -> LanguageModelToolDescription:
78
+ return LanguageModelToolDescription(
79
+ name=self.name,
80
+ description=self.config.tool_description,
81
+ parameters=_CodeParams,
82
+ )
83
+
84
+ @override
85
+ def tool_description_for_system_prompt(self) -> str:
86
+ return self.config.tool_description_for_system_prompt
87
+
88
+ @override
89
+ def evaluation_check_list(self) -> list[EvaluationMetricName]:
90
+ return []
91
+
92
+ @override
93
+ def get_evaluation_checks_based_on_tool_response(
94
+ self,
95
+ tool_response: ToolCallResponse,
96
+ ) -> list[EvaluationMetricName]:
97
+ return []
98
+
99
+ @override
100
+ async def run(self, tool_call: LanguageModelFunction) -> ToolCallResponse:
101
+ async with self._activation_lock:
102
+ if self._built_tool is None:
103
+ logger.info("Building code interpreter tool")
104
+ self._built_tool = await self._builder.build()
105
+
106
+ return ToolCallResponse(
107
+ id=tool_call.id,
108
+ name=self.name,
109
+ content="The python tool is now active. You may execute python code.",
110
+ )
@@ -0,0 +1,5 @@
1
+ from unique_toolkit.agentic.tools.openai_builtin.code_interpreter.builder.builder import (
2
+ CodeInterpreterBuilder,
3
+ )
4
+
5
+ __all__ = ["CodeInterpreterBuilder"]
@@ -0,0 +1,50 @@
1
+ import logging
2
+
3
+ from openai import AsyncOpenAI
4
+
5
+ from unique_toolkit.agentic.tools.openai_builtin.code_interpreter.builder._memory import (
6
+ CodeExecutionShortTermMemorySchema,
7
+ )
8
+
9
+ logger = logging.getLogger(__name__)
10
+
11
+
12
+ async def check_container_exists(
13
+ client: AsyncOpenAI,
14
+ memory: CodeExecutionShortTermMemorySchema,
15
+ ) -> bool:
16
+ try:
17
+ container = await client.containers.retrieve(memory.container_id)
18
+ # The error here is sometimes InternalServerError, and sometimes a NotFoundError. We catch everything and re-create on exception
19
+ except Exception:
20
+ logger.exception("Container %s not found", memory.container_id)
21
+ return False
22
+
23
+ if container.status not in ["active", "running"]:
24
+ logger.info(
25
+ "Container %s has status `%s`, recreating a new one",
26
+ memory.container_id,
27
+ container.status,
28
+ )
29
+ return False
30
+
31
+ logger.info("Container %s found in short term memory", memory.container_id)
32
+ return True
33
+
34
+
35
+ async def create_container(
36
+ client: AsyncOpenAI,
37
+ chat_id: str,
38
+ user_id: str,
39
+ company_id: str,
40
+ expires_after_minutes: int,
41
+ ) -> str:
42
+ container = await client.containers.create(
43
+ name=f"code_execution_{company_id}_{user_id}_{chat_id}",
44
+ expires_after={
45
+ "anchor": "last_active_at",
46
+ "minutes": expires_after_minutes,
47
+ },
48
+ )
49
+ logger.info("Created new container %s", container.id)
50
+ return container.id
@@ -0,0 +1,152 @@
1
+ import asyncio
2
+ import logging
3
+
4
+ from openai import AsyncOpenAI
5
+ from tenacity import (
6
+ AsyncRetrying,
7
+ before_sleep_log,
8
+ stop_after_attempt,
9
+ wait_exponential,
10
+ )
11
+
12
+ from unique_toolkit import ContentService
13
+ from unique_toolkit._common.execution import (
14
+ SafeTaskExecutor,
15
+ )
16
+ from unique_toolkit.agentic.tools.openai_builtin.code_interpreter.builder._memory import (
17
+ CodeExecutionShortTermMemorySchema,
18
+ )
19
+ from unique_toolkit.content.schemas import (
20
+ Content,
21
+ )
22
+
23
+ logger = logging.getLogger(__name__)
24
+
25
+ UPLOAD_MAX_RETRIES = 2
26
+ UPLOAD_RETRY_BASE_DELAY = 0.5
27
+
28
+
29
+ def build_upload_retry() -> AsyncRetrying:
30
+ """Exponential-backoff retry policy for transient upload/download failures.
31
+
32
+ Matches the pattern used in the ``DisplayCodeInterpreterFilesPostProcessor``
33
+ so that every outbound I/O call gets the same behaviour: up to
34
+ ``UPLOAD_MAX_RETRIES`` extra attempts, doubling the wait each time,
35
+ with a WARNING log before each sleep.
36
+ """
37
+ return AsyncRetrying(
38
+ stop=stop_after_attempt(1 + UPLOAD_MAX_RETRIES),
39
+ wait=wait_exponential(multiplier=UPLOAD_RETRY_BASE_DELAY),
40
+ before_sleep=before_sleep_log(logger, logging.WARNING),
41
+ reraise=True,
42
+ )
43
+
44
+
45
+ def check_file_already_uploaded(
46
+ content_id: str,
47
+ memory: CodeExecutionShortTermMemorySchema,
48
+ ) -> bool:
49
+ if content_id not in memory.file_paths:
50
+ logger.info("File with id %s not in short term memory", content_id)
51
+ return False
52
+
53
+ return True
54
+
55
+
56
+ async def upload_file_to_container(
57
+ client: AsyncOpenAI,
58
+ content_id: str,
59
+ filename: str,
60
+ content_service: ContentService,
61
+ container_id: str,
62
+ ) -> str:
63
+ logger.info(
64
+ "Uploading file %s (%s) to container %s",
65
+ content_id,
66
+ filename,
67
+ container_id,
68
+ )
69
+
70
+ file_content = await build_upload_retry()(
71
+ content_service.download_content_to_bytes_async,
72
+ content_id=content_id,
73
+ )
74
+ logger.info(
75
+ "Downloaded %d bytes for file %s; uploading to container %s",
76
+ len(file_content),
77
+ content_id,
78
+ container_id,
79
+ )
80
+
81
+ openai_file = await build_upload_retry()(
82
+ client.containers.files.create,
83
+ container_id=container_id,
84
+ file=(filename, file_content),
85
+ )
86
+ logger.info(
87
+ "File %s successfully uploaded as OpenAI file %s in container %s",
88
+ content_id,
89
+ openai_file.id,
90
+ container_id,
91
+ )
92
+
93
+ return openai_file.path
94
+
95
+
96
+ async def upload_files_to_container(
97
+ client: AsyncOpenAI,
98
+ uploaded_files: list[Content],
99
+ memory: CodeExecutionShortTermMemorySchema,
100
+ content_service: ContentService,
101
+ ) -> tuple[CodeExecutionShortTermMemorySchema, bool]:
102
+ async def _check_and_upload(content: Content) -> str | None:
103
+ if check_file_already_uploaded(content_id=content.id, memory=memory):
104
+ return None
105
+
106
+ return await upload_file_to_container(
107
+ client=client,
108
+ content_id=content.id,
109
+ filename=content.key,
110
+ content_service=content_service,
111
+ container_id=memory.container_id,
112
+ )
113
+
114
+ # Deduplicate
115
+ unique_contents = {content.id: content for content in uploaded_files}.values()
116
+
117
+ executor = SafeTaskExecutor(logger=logger)
118
+
119
+ results = await asyncio.gather(
120
+ *(
121
+ executor.execute_async(_check_and_upload, content)
122
+ for content in unique_contents
123
+ ),
124
+ )
125
+
126
+ updated = False
127
+ for content, result in zip(unique_contents, results):
128
+ if result.success and (filepath := result.unpack()) is not None:
129
+ memory.file_paths[content.id] = filepath
130
+ updated = True
131
+
132
+ return memory, updated
133
+
134
+
135
+ async def resolve_kb_contents(
136
+ content_service: ContentService,
137
+ content_ids: list[str],
138
+ ) -> list[Content]:
139
+ contents = await content_service.search_contents_async(
140
+ where={"id": {"in": content_ids}},
141
+ )
142
+
143
+ found_ids = {c.id for c in contents}
144
+ missing = [content_id for content_id in content_ids if content_id not in found_ids]
145
+ if missing:
146
+ logger.warning(
147
+ "additional_uploaded_documents: %d content ids not found or not accessible in KB: %s",
148
+ len(missing),
149
+ missing,
150
+ )
151
+
152
+ return contents
@@ -0,0 +1,35 @@
1
+ from openai import BaseModel
2
+
3
+ from unique_toolkit import ShortTermMemoryService
4
+ from unique_toolkit.agentic.short_term_memory_manager.persistent_short_term_memory_manager import (
5
+ PersistentShortMemoryManager,
6
+ )
7
+
8
+ SHORT_TERM_MEMORY_NAME = "container_code_execution"
9
+
10
+
11
+ class CodeExecutionShortTermMemorySchema(BaseModel):
12
+ container_id: str
13
+ file_paths: dict[str, str] = {}
14
+
15
+
16
+ CodeExecutionMemoryManager = PersistentShortMemoryManager[
17
+ CodeExecutionShortTermMemorySchema
18
+ ]
19
+
20
+
21
+ def get_container_code_execution_short_term_memory_manager(
22
+ company_id: str, user_id: str, chat_id: str
23
+ ) -> CodeExecutionMemoryManager:
24
+ short_term_memory_service = ShortTermMemoryService(
25
+ company_id=company_id,
26
+ user_id=user_id,
27
+ chat_id=chat_id,
28
+ message_id=None,
29
+ )
30
+ short_term_memory_manager = PersistentShortMemoryManager(
31
+ short_term_memory_service=short_term_memory_service,
32
+ short_term_memory_schema=CodeExecutionShortTermMemorySchema,
33
+ short_term_memory_name=SHORT_TERM_MEMORY_NAME,
34
+ )
35
+ return short_term_memory_manager