unique-toolkit 2026.22.0.dev0__tar.gz → 2026.22.0.dev2__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 (394) hide show
  1. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/PKG-INFO +2 -2
  2. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/pyproject.toml +2 -2
  3. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/config.py +42 -5
  4. unique_toolkit-2026.22.0.dev2/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/artifacts.py +103 -0
  5. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/generated_files.py +7 -55
  6. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/service.py +70 -40
  7. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/services/chat_service.py +37 -9
  8. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/README.md +0 -0
  9. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/__init__.py +0 -0
  10. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/__init__.py +0 -0
  11. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/_base_service.py +0 -0
  12. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/_time_utils.py +0 -0
  13. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/api_calling/human_verification_manager.py +0 -0
  14. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/base_model_type_attribute.py +0 -0
  15. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/chunk_relevancy_sorter/config.py +0 -0
  16. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/chunk_relevancy_sorter/exception.py +0 -0
  17. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/chunk_relevancy_sorter/schemas.py +0 -0
  18. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/chunk_relevancy_sorter/service.py +0 -0
  19. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/chunk_relevancy_sorter/tests/test_service.py +0 -0
  20. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/config_checker/README.md +0 -0
  21. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/config_checker/__init__.py +0 -0
  22. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/config_checker/__main__.py +0 -0
  23. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/config_checker/cli.py +0 -0
  24. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/config_checker/differ.py +0 -0
  25. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/config_checker/exporter.py +0 -0
  26. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/config_checker/models.py +0 -0
  27. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/config_checker/registry.py +0 -0
  28. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/config_checker/validator.py +0 -0
  29. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/default_language_model.py +0 -0
  30. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/docx_generator/__init__.py +0 -0
  31. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/docx_generator/config.py +0 -0
  32. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/docx_generator/pandoc_converter.py +0 -0
  33. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/docx_generator/schemas.py +0 -0
  34. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/docx_generator/service.py +0 -0
  35. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/docx_generator/template/Doc Template.docx +0 -0
  36. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/endpoint_builder.py +0 -0
  37. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/endpoint_requestor.py +0 -0
  38. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/event_bus.py +0 -0
  39. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/exception.py +0 -0
  40. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/execution.py +0 -0
  41. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/experimental/endpoint_builder.py +0 -0
  42. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/experimental/endpoint_requestor.py +0 -0
  43. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/experimental/write_up_agent/README.md +0 -0
  44. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/experimental/write_up_agent/__init__.py +0 -0
  45. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/experimental/write_up_agent/agent.py +0 -0
  46. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/experimental/write_up_agent/config.py +0 -0
  47. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/experimental/write_up_agent/examples/data.csv +0 -0
  48. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/experimental/write_up_agent/examples/example_usage.py +0 -0
  49. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/experimental/write_up_agent/schemas.py +0 -0
  50. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/experimental/write_up_agent/services/__init__.py +0 -0
  51. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/__init__.py +0 -0
  52. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/exceptions.py +0 -0
  53. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/service.py +0 -0
  54. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/utils.py +0 -0
  55. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/__init__.py +0 -0
  56. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/config.py +0 -0
  57. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/exceptions.py +0 -0
  58. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/config.py +0 -0
  59. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/system_prompt.j2 +0 -0
  60. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/user_prompt.j2 +0 -0
  61. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/service.py +0 -0
  62. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/__init__.py +0 -0
  63. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/default_template.j2 +0 -0
  64. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/exceptions.py +0 -0
  65. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/service.py +0 -0
  66. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/utils.py +0 -0
  67. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/experimental/write_up_agent/utils.py +0 -0
  68. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/feature_flags/schema.py +0 -0
  69. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/metadata_filter_scope.py +0 -0
  70. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/pydantic/rjsf_tags.py +0 -0
  71. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/pydantic_helpers.py +0 -0
  72. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/referencing.py +0 -0
  73. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/string_utilities.py +0 -0
  74. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/tests/test_referencing.py +0 -0
  75. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/tests/test_string_utilities.py +0 -0
  76. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/token/__init__.py +0 -0
  77. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/token/image_token_counting.py +0 -0
  78. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/token/token_counting.py +0 -0
  79. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/token/tokenizers/deepseek/tokenizer.json +0 -0
  80. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/token/tokenizers/qwen/tokenizer.json +0 -0
  81. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/utils/__init__.py +0 -0
  82. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/utils/files.py +0 -0
  83. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/utils/image/encode.py +0 -0
  84. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/utils/jinja/helpers.py +0 -0
  85. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/utils/jinja/render.py +0 -0
  86. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/utils/jinja/schema.py +0 -0
  87. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/utils/jinja/utils.py +0 -0
  88. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/utils/structured_output/__init__.py +0 -0
  89. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/utils/structured_output/schema.py +0 -0
  90. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/utils/write_configuration.py +0 -0
  91. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/validate_required_values.py +0 -0
  92. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/validators.py +0 -0
  93. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/__init__.py +0 -0
  94. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/debug_info_manager/debug_info_manager.py +0 -0
  95. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/debug_info_manager/test/test_debug_info_manager.py +0 -0
  96. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/evaluation/config.py +0 -0
  97. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/__init__.py +0 -0
  98. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/system_prompt.j2 +0 -0
  99. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/user_prompt.j2 +0 -0
  100. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/evaluation/context_relevancy/schema.py +0 -0
  101. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/evaluation/context_relevancy/service.py +0 -0
  102. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/evaluation/evaluation_manager.py +0 -0
  103. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/evaluation/exception.py +0 -0
  104. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/evaluation/hallucination/constants.py +0 -0
  105. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/evaluation/hallucination/hallucination_evaluation.py +0 -0
  106. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/evaluation/hallucination/prompts/__init__.py +0 -0
  107. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/evaluation/hallucination/prompts/system_prompt.j2 +0 -0
  108. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/evaluation/hallucination/prompts/user_prompt.j2 +0 -0
  109. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/evaluation/hallucination/service.py +0 -0
  110. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/evaluation/hallucination/utils.py +0 -0
  111. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/evaluation/output_parser.py +0 -0
  112. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/evaluation/schemas.py +0 -0
  113. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/evaluation/tests/fixtures.py +0 -0
  114. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/evaluation/tests/test_config.py +0 -0
  115. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/evaluation/tests/test_context_relevancy_service.py +0 -0
  116. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/evaluation/tests/test_hallucination_constants.py +0 -0
  117. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/evaluation/tests/test_hallucination_utils.py +0 -0
  118. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/evaluation/tests/test_output_parser.py +0 -0
  119. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/evaluation/tests/test_prompt_loaders.py +0 -0
  120. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/evaluation/utils.py +0 -0
  121. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/feature_flags/__init__.py +0 -0
  122. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/feature_flags/feature_flags.py +0 -0
  123. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/history_manager/history_construction_with_contents.py +0 -0
  124. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/history_manager/history_manager.py +0 -0
  125. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/history_manager/loop_token_reducer.py +0 -0
  126. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/history_manager/utils.py +0 -0
  127. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/loop_runner/__init__.py +0 -0
  128. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/loop_runner/_iteration_handler_utils.py +0 -0
  129. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/loop_runner/_responses_iteration_handler_utils.py +0 -0
  130. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/loop_runner/_responses_stream_handler_utils.py +0 -0
  131. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/loop_runner/_stream_handler_utils.py +0 -0
  132. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/loop_runner/base.py +0 -0
  133. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/loop_runner/middleware/__init__.py +0 -0
  134. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/loop_runner/middleware/planning/__init__.py +0 -0
  135. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/loop_runner/middleware/planning/planning.py +0 -0
  136. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/loop_runner/middleware/planning/schema.py +0 -0
  137. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/loop_runner/runners/__init__.py +0 -0
  138. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/loop_runner/runners/basic.py +0 -0
  139. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/loop_runner/runners/mistral/__init__.py +0 -0
  140. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/loop_runner/runners/mistral/mistral_runner.py +0 -0
  141. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/loop_runner/runners/qwen/__init__.py +0 -0
  142. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/loop_runner/runners/qwen/helpers.py +0 -0
  143. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/loop_runner/runners/qwen/qwen_runner.py +0 -0
  144. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/message_log_manager/__init__.py +0 -0
  145. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/message_log_manager/service.py +0 -0
  146. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/message_log_order.py +0 -0
  147. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/postprocessor/postprocessor_manager.py +0 -0
  148. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/reference_manager/reference_manager.py +0 -0
  149. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/responses_api/__init__.py +0 -0
  150. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/responses_api/postprocessors/code_display.py +0 -0
  151. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/responses_api/postprocessors/generated_files.py +0 -0
  152. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/responses_api/stream_handler.py +0 -0
  153. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/short_term_memory_manager/persistent_short_term_memory_manager.py +0 -0
  154. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/thinking_manager/thinking_manager.py +0 -0
  155. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/__init__.py +0 -0
  156. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/a2a/__init__.py +0 -0
  157. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/a2a/config.py +0 -0
  158. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/a2a/evaluation/__init__.py +0 -0
  159. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/a2a/evaluation/_utils.py +0 -0
  160. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/a2a/evaluation/config.py +0 -0
  161. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/a2a/evaluation/evaluator.py +0 -0
  162. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/a2a/evaluation/summarization_user_message.j2 +0 -0
  163. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/a2a/manager.py +0 -0
  164. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/a2a/postprocessing/__init__.py +0 -0
  165. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/a2a/postprocessing/_display_utils.py +0 -0
  166. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/a2a/postprocessing/_ref_utils.py +0 -0
  167. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/a2a/postprocessing/config.py +0 -0
  168. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/a2a/postprocessing/display.py +0 -0
  169. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/a2a/postprocessing/references.py +0 -0
  170. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display.py +0 -0
  171. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display_utils.py +0 -0
  172. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_ref_utils.py +0 -0
  173. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_references.py +0 -0
  174. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/a2a/prompts.py +0 -0
  175. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/a2a/response_watcher/__init__.py +0 -0
  176. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/a2a/response_watcher/service.py +0 -0
  177. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/a2a/tool/__init__.py +0 -0
  178. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/a2a/tool/_memory.py +0 -0
  179. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/a2a/tool/_schema.py +0 -0
  180. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/a2a/tool/config.py +0 -0
  181. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/a2a/tool/service.py +0 -0
  182. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/a2a/tool/test/test_service_utils.py +0 -0
  183. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/agent_chunks_hanlder.py +0 -0
  184. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/config.py +0 -0
  185. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/experimental/__init__.py +0 -0
  186. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/experimental/open_file_tool/__init__.py +0 -0
  187. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/experimental/open_file_tool/config.py +0 -0
  188. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/experimental/open_file_tool/runtime.py +0 -0
  189. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/experimental/open_file_tool/tool.py +0 -0
  190. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/experimental/retrieve_search_scope_tool/__init__.py +0 -0
  191. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/experimental/retrieve_search_scope_tool/config.py +0 -0
  192. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/experimental/retrieve_search_scope_tool/tool.py +0 -0
  193. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/experimental/todo/__init__.py +0 -0
  194. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/experimental/todo/config.py +0 -0
  195. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/experimental/todo/prompts/__init__.py +0 -0
  196. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/experimental/todo/prompts/execution_reminder.j2 +0 -0
  197. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/experimental/todo/prompts/system_prompt.j2 +0 -0
  198. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/experimental/todo/prompts/tool_description.j2 +0 -0
  199. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/experimental/todo/prompts/verification_nudge.j2 +0 -0
  200. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/experimental/todo/schemas.py +0 -0
  201. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/experimental/todo/service.py +0 -0
  202. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/factory.py +0 -0
  203. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/mcp/__init__.py +0 -0
  204. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/mcp/manager.py +0 -0
  205. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/mcp/models.py +0 -0
  206. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/mcp/tool_wrapper.py +0 -0
  207. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/names.py +0 -0
  208. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/openai_builtin/__init__.py +0 -0
  209. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/openai_builtin/base.py +0 -0
  210. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/__init__.py +0 -0
  211. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/__init__.py +0 -0
  212. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/code_display.py +0 -0
  213. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/schemas.py +0 -0
  214. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/openai_builtin/manager.py +0 -0
  215. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/schemas.py +0 -0
  216. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/test/test_mcp_manager.py +0 -0
  217. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/test/test_tool_progress_reporter.py +0 -0
  218. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/tool.py +0 -0
  219. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/tool_manager.py +0 -0
  220. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/tool_progress_reporter.py +0 -0
  221. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/utils/__init__.py +0 -0
  222. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/utils/source_handling/__init__.py +0 -0
  223. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/utils/source_handling/schema.py +0 -0
  224. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/utils/source_handling/source_formatting.py +0 -0
  225. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/utils/source_handling/tests/test_source_formatting.py +0 -0
  226. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic_table/__init__.py +0 -0
  227. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic_table/schemas.py +0 -0
  228. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic_table/service.py +0 -0
  229. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/app/__init__.py +0 -0
  230. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/app/chat_event_filter_options_settings.py +0 -0
  231. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/app/dev_util.py +0 -0
  232. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/app/fast_api_factory.py +0 -0
  233. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/app/feature_flags.py +0 -0
  234. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/app/find_env_file.py +0 -0
  235. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/app/init_logging.py +0 -0
  236. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/app/init_sdk.py +0 -0
  237. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/app/performance/async_tasks.py +0 -0
  238. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/app/performance/async_wrapper.py +0 -0
  239. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/app/schemas.py +0 -0
  240. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/app/unique_settings.py +0 -0
  241. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/app/verification.py +0 -0
  242. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/app/webhook.py +0 -0
  243. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/chat/__init__.py +0 -0
  244. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/chat/cancellation.py +0 -0
  245. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/chat/constants.py +0 -0
  246. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/chat/deprecated/service.py +0 -0
  247. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/chat/functions.py +0 -0
  248. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/chat/rendering.py +0 -0
  249. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/chat/responses_api.py +0 -0
  250. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/chat/schemas.py +0 -0
  251. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/chat/service.py +0 -0
  252. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/chat/state.py +0 -0
  253. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/chat/utils.py +0 -0
  254. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/content/__init__.py +0 -0
  255. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/content/constants.py +0 -0
  256. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/content/functions.py +0 -0
  257. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/content/schemas.py +0 -0
  258. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/content/service.py +0 -0
  259. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/content/smart_rules.py +0 -0
  260. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/content/utils.py +0 -0
  261. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/data_extraction/README.md +0 -0
  262. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/data_extraction/__init__.py +0 -0
  263. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/data_extraction/augmented/__init__.py +0 -0
  264. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/data_extraction/augmented/service.py +0 -0
  265. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/data_extraction/base.py +0 -0
  266. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/data_extraction/basic/__init__.py +0 -0
  267. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/data_extraction/basic/config.py +0 -0
  268. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/data_extraction/basic/prompt.py +0 -0
  269. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/data_extraction/basic/service.py +0 -0
  270. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/elicitation/__init__.py +0 -0
  271. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/elicitation/constants.py +0 -0
  272. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/elicitation/exceptions.py +0 -0
  273. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/elicitation/functions.py +0 -0
  274. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/elicitation/schemas.py +0 -0
  275. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/elicitation/service.py +0 -0
  276. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/embedding/__init__.py +0 -0
  277. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/embedding/constants.py +0 -0
  278. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/embedding/functions.py +0 -0
  279. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/embedding/schemas.py +0 -0
  280. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/embedding/service.py +0 -0
  281. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/embedding/utils.py +0 -0
  282. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/README.md +0 -0
  283. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/__init__.py +0 -0
  284. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/_internal/__init__.py +0 -0
  285. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/_internal/streaming/__init__.py +0 -0
  286. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/_internal/streaming/common.py +0 -0
  287. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/_internal/streaming/pattern_replacer.py +0 -0
  288. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/components/__init__.py +0 -0
  289. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/components/_base.py +0 -0
  290. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/components/content_tree/__init__.py +0 -0
  291. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/components/content_tree/functions.py +0 -0
  292. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/components/content_tree/schemas.py +0 -0
  293. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/components/content_tree/service.py +0 -0
  294. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/components/internal_search/__init__.py +0 -0
  295. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/components/internal_search/base/__init__.py +0 -0
  296. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/components/internal_search/base/config.py +0 -0
  297. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/components/internal_search/base/schemas.py +0 -0
  298. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/components/internal_search/base/service.py +0 -0
  299. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/components/internal_search/base/utils.py +0 -0
  300. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/components/internal_search/chat/__init__.py +0 -0
  301. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/components/internal_search/chat/config.py +0 -0
  302. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/components/internal_search/chat/schemas.py +0 -0
  303. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/components/internal_search/chat/service.py +0 -0
  304. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/components/internal_search/knowledge_base/__init__.py +0 -0
  305. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/components/internal_search/knowledge_base/config.py +0 -0
  306. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/components/internal_search/knowledge_base/schemas.py +0 -0
  307. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/components/internal_search/knowledge_base/service.py +0 -0
  308. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/components/internal_search/post_processing/__init__.py +0 -0
  309. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/components/internal_search/post_processing/config.py +0 -0
  310. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/components/internal_search/post_processing/service.py +0 -0
  311. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/content_tree/__init__.py +0 -0
  312. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/identity/__init__.py +0 -0
  313. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/integrations/__init__.py +0 -0
  314. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/integrations/openai/__init__.py +0 -0
  315. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/integrations/openai/streaming/__init__.py +0 -0
  316. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/__init__.py +0 -0
  317. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/_async_bridge.py +0 -0
  318. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/__init__.py +0 -0
  319. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/complete_with_references.py +0 -0
  320. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/stream_event_router.py +0 -0
  321. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/text_event_handler.py +0 -0
  322. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/tool_call_event_handler.py +0 -0
  323. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/events.py +0 -0
  324. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/protocols/__init__.py +0 -0
  325. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/protocols/chat_completions.py +0 -0
  326. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/protocols/responses.py +0 -0
  327. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/__init__.py +0 -0
  328. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/code_interpreter_event_handler.py +0 -0
  329. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/complete_with_references.py +0 -0
  330. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/completed_event_handler.py +0 -0
  331. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/stream_event_router.py +0 -0
  332. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/text_delta_event_handler.py +0 -0
  333. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/tool_call_event_handler.py +0 -0
  334. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/subscribers/__init__.py +0 -0
  335. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/subscribers/message_persister.py +0 -0
  336. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/subscribers/progress_log_persister.py +0 -0
  337. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/resources/__init__.py +0 -0
  338. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/resources/content_folder/__init__.py +0 -0
  339. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/resources/content_folder/functions.py +0 -0
  340. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/resources/content_folder/schemas.py +0 -0
  341. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/resources/content_folder/service.py +0 -0
  342. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/resources/facades/__init__.py +0 -0
  343. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/resources/facades/identity/__init__.py +0 -0
  344. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/resources/facades/identity/service.py +0 -0
  345. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/resources/group/__init__.py +0 -0
  346. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/resources/group/functions.py +0 -0
  347. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/resources/group/schemas.py +0 -0
  348. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/resources/group/service.py +0 -0
  349. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/resources/scheduled_task/__init__.py +0 -0
  350. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/resources/scheduled_task/cron.py +0 -0
  351. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/resources/scheduled_task/functions.py +0 -0
  352. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/resources/scheduled_task/schemas.py +0 -0
  353. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/resources/scheduled_task/service.py +0 -0
  354. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/resources/user/__init__.py +0 -0
  355. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/resources/user/functions.py +0 -0
  356. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/resources/user/schemas.py +0 -0
  357. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/resources/user/service.py +0 -0
  358. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/testing/__init__.py +0 -0
  359. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/framework_utilities/__init__.py +0 -0
  360. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/framework_utilities/langchain/__init__.py +0 -0
  361. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/framework_utilities/langchain/client.py +0 -0
  362. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/framework_utilities/langchain/history.py +0 -0
  363. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/framework_utilities/openai/__init__.py +0 -0
  364. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/framework_utilities/openai/client.py +0 -0
  365. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/framework_utilities/openai/message_builder.py +0 -0
  366. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/framework_utilities/utils.py +0 -0
  367. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/language_model/__init__.py +0 -0
  368. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/language_model/_responses_api_utils.py +0 -0
  369. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/language_model/builder.py +0 -0
  370. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/language_model/constants.py +0 -0
  371. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/language_model/default_language_model.py +0 -0
  372. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/language_model/functions.py +0 -0
  373. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/language_model/infos.py +0 -0
  374. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/language_model/prompt.py +0 -0
  375. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/language_model/reference.py +0 -0
  376. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/language_model/schemas.py +0 -0
  377. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/language_model/service.py +0 -0
  378. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/language_model/stream_transform.py +0 -0
  379. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/language_model/utils.py +0 -0
  380. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/monitoring/__init__.py +0 -0
  381. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/monitoring/middleware.py +0 -0
  382. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/monitoring/registry.py +0 -0
  383. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/protocols/support.py +0 -0
  384. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/services/__init__.py +0 -0
  385. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/services/factory.py +0 -0
  386. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/services/knowledge_base.py +0 -0
  387. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/short_term_memory/__init__.py +0 -0
  388. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/short_term_memory/constants.py +0 -0
  389. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/short_term_memory/functions.py +0 -0
  390. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/short_term_memory/schemas.py +0 -0
  391. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/short_term_memory/service.py +0 -0
  392. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/smart_rules/__init__.py +0 -0
  393. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/smart_rules/compile.py +0 -0
  394. {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/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.22.0.dev0
3
+ Version: 2026.22.0.dev2
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.22.0.dev0,<2026.22.0rc0
19
+ Requires-Dist: unique-sdk>=2026.22.0.dev2,<2026.22.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.22.0.dev0"
3
+ version = "2026.22.0.dev2"
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.22.0.dev0,<2026.22.0rc0",
31
+ "unique-sdk>=2026.22.0.dev2,<2026.22.0rc0",
32
32
  "jambo>=0.1.2,<0.2",
33
33
  "jinja2>=3.1.6,<4",
34
34
  "docxtpl>=0.20.1,<0.21",
@@ -17,7 +17,36 @@ from unique_toolkit.agentic.tools.openai_builtin.code_interpreter.postprocessors
17
17
  )
18
18
  from unique_toolkit.agentic.tools.schemas import BaseToolConfig
19
19
 
20
- DEFAULT_TOOL_DESCRIPTION_FOR_SYSTEM_PROMPT = """
20
+ _TOOL_DESCRIPTION_FILES_SUFFIX = """
21
+ {%- if user_uploaded_files and user_uploaded_files | length > 0 %}
22
+
23
+ ## User Uploaded Files
24
+ The following files have been uploaded by the user and are available in the environment:
25
+ {% for file in user_uploaded_files %}
26
+ - {{ file }}
27
+ {% endfor %}
28
+ {% endif %}
29
+
30
+ {%- if kb_uploaded_files and kb_uploaded_files | length > 0 %}
31
+
32
+ ## Knowledge Base Files
33
+ These files are made available by the system but were NOT uploaded by the user:
34
+ {% for file in kb_uploaded_files %}
35
+ - {{ file }}
36
+ {% endfor %}
37
+ {% endif %}
38
+
39
+ {%- if code_interpreter_artifacts and code_interpreter_artifacts | length > 0 %}
40
+
41
+ ## Code Interpreter Artifacts
42
+ The following files have been generated by you using the python tool in previous turns:
43
+ {% for file in code_interpreter_artifacts %}
44
+ - {{ file }}
45
+ {% endfor %}
46
+ {% endif %}
47
+ """.strip()
48
+
49
+ _TOOL_DESCRIPTION_FOR_SYSTEM_PROMPT_BASE = """
21
50
  Use this tool to run python code, e.g to generate plots, process excel files, perform calculations, etc.
22
51
 
23
52
  Instructions:
@@ -37,7 +66,7 @@ WHENEVER you reference a generated file, you MUST use the following format:
37
66
  IMPORTANT: Do NOT append a leading `!` even when displaying an image.
38
67
  Always use a line break between the title and the markdown!
39
68
  - Files with image file extensions are displayed directly in the chat, while other file extensions are shown as download links.
40
- - Not using syntax above will FAIL to show images to the user.
69
+ - Not using syntax above will FAIL to show images to the user.
41
70
  - YOU MUST use the syntax above to display images, otherwise the image will not be displayed in the chat.
42
71
  - Only the following file types are allowed to be uploaded to the platform, anything else will FAIL: PDF, DOCX, XLSX, PPTX, CSV, HTML, MD, TXT, PNG, JPG, JPEG.
43
72
  - You MUST always use this syntax, otherwise the files will not be displayed in the chat.
@@ -58,7 +87,11 @@ Handling User Queries:
58
87
  - REMEMBER that you can always read the content of text, csv files if needed. In this case, you MUST always limit the amount of data displayed.
59
88
  - If a tool step fails, you must recover as much as possible.
60
89
  - After exhausting all possible solutions without success, inform the user of what was tried and request clarification/help.
61
- """.strip()
90
+ """
91
+
92
+ DEFAULT_TOOL_DESCRIPTION_FOR_SYSTEM_PROMPT = (
93
+ _TOOL_DESCRIPTION_FOR_SYSTEM_PROMPT_BASE + _TOOL_DESCRIPTION_FILES_SUFFIX
94
+ ).strip()
62
95
 
63
96
  # Used when the code-execution fence feature flag (UN-17972) is enabled.
64
97
  # The frontend derives the artifact title from the filename itself, so the
@@ -71,7 +104,7 @@ Handling User Queries:
71
104
  # UN-19880: kaleido is not installed in the Azure OpenAI code interpreter environment,
72
105
  # so plotly's fig.write_image() always fails. The "Visualization library choice" section
73
106
  # steers the model to use matplotlib for PNG outputs and plotly only for HTML artifacts.
74
- DEFAULT_TOOL_DESCRIPTION_FOR_SYSTEM_PROMPT_FENCE = """
107
+ _TOOL_DESCRIPTION_FOR_SYSTEM_PROMPT_FENCE_BASE = """
75
108
  Use this tool to run python code, e.g to generate plots, process excel files, perform calculations, etc.
76
109
 
77
110
  Instructions:
@@ -137,7 +170,11 @@ Handling User Queries:
137
170
  - REMEMBER that you can always read the content of text, csv files if needed. In this case, you MUST always limit the amount of data displayed.
138
171
  - If a tool step fails, you must recover as much as possible.
139
172
  - After exhausting all possible solutions without success, inform the user of what was tried and request clarification/help.
140
- """.strip()
173
+ """
174
+
175
+ DEFAULT_TOOL_DESCRIPTION_FOR_SYSTEM_PROMPT_FENCE = (
176
+ _TOOL_DESCRIPTION_FOR_SYSTEM_PROMPT_FENCE_BASE + _TOOL_DESCRIPTION_FILES_SUFFIX
177
+ ).strip()
141
178
 
142
179
 
143
180
  DEFAULT_TOOL_DESCRIPTION_FOR_USER_PROMPT = ""
@@ -0,0 +1,103 @@
1
+ import logging
2
+ from mimetypes import guess_type
3
+
4
+ from openai.types.responses.response_output_text import AnnotationContainerFileCitation
5
+ from pydantic import BaseModel
6
+
7
+ from unique_toolkit import ChatService
8
+ from unique_toolkit._common.utils.files import FileMimeType, ImageMimeType
9
+ from unique_toolkit.content.schemas import Content
10
+
11
+ _CODE_EXECUTION_ARTIFACT_METADATA_KEY: str = "codeExecutionArtifactMetadata"
12
+
13
+ _LOGGER = logging.getLogger(__name__)
14
+
15
+
16
+ class CodeExecutionArtifactMetadata(BaseModel):
17
+ container_id: str
18
+ file_id: str
19
+ filepath: str
20
+
21
+
22
+ def _kb_safe_mime(mime: str) -> str:
23
+ """Return a MIME type the Unique KB will accept.
24
+
25
+ Membership is defined by ``FileMimeType`` and ``ImageMimeType`` in
26
+ ``unique_toolkit._common.utils.files`` (same catalog as path-based helpers
27
+ like ``FileMimeType.is_valid_mime``, but here we already have a resolved
28
+ MIME string from ``mimetypes.guess_type``, so we use StrEnum value lookup
29
+ instead of re-parsing a path).
30
+
31
+ The KB GraphQL API rejects many code-file MIME types (e.g. ``text/x-python``
32
+ for ``.py`` files). Anything not in those enums is coerced to
33
+ ``text/plain`` so the file can be stored and downloaded without changing
34
+ its bytes.
35
+
36
+ Other ``image/*`` subtypes (e.g. ``image/jpg``) still pass through unchanged.
37
+ """
38
+ try:
39
+ FileMimeType(mime)
40
+ return mime
41
+ except ValueError:
42
+ pass
43
+ try:
44
+ ImageMimeType(mime)
45
+ return mime
46
+ except ValueError:
47
+ pass
48
+ if mime.startswith("image/"):
49
+ return mime
50
+ return "text/plain"
51
+
52
+
53
+ async def save_code_execution_artifact(
54
+ chat_service: ChatService,
55
+ file: AnnotationContainerFileCitation,
56
+ file_bytes: bytes,
57
+ ) -> Content:
58
+ raw_mime = guess_type(file.filename)[0] or "text/plain"
59
+ mime = _kb_safe_mime(raw_mime)
60
+
61
+ if mime != raw_mime:
62
+ _LOGGER.info(
63
+ "MIME type '%s' is not supported by the Unique KB; "
64
+ "uploading '%s' as 'text/plain' so the file can be stored and downloaded.",
65
+ raw_mime,
66
+ file.filename,
67
+ )
68
+
69
+ _LOGGER.info(
70
+ "Uploading '%s' to knowledge base (%d bytes, mime type %s)",
71
+ file.filename,
72
+ len(file_bytes),
73
+ mime,
74
+ )
75
+
76
+ return await chat_service.upload_to_chat_from_bytes_async(
77
+ content=file_bytes,
78
+ content_name=file.filename,
79
+ mime_type=mime,
80
+ skip_ingestion=True,
81
+ hide_in_chat=True,
82
+ metadata={
83
+ _CODE_EXECUTION_ARTIFACT_METADATA_KEY: CodeExecutionArtifactMetadata(
84
+ container_id=file.container_id,
85
+ file_id=file.file_id,
86
+ filepath=f"/mnt/data/{file.filename}",
87
+ ).model_dump()
88
+ },
89
+ )
90
+
91
+
92
+ def load_code_execution_metadata(
93
+ content: Content,
94
+ ) -> CodeExecutionArtifactMetadata | None:
95
+ if (
96
+ content.metadata is None
97
+ or _CODE_EXECUTION_ARTIFACT_METADATA_KEY not in content.metadata
98
+ ):
99
+ return None
100
+
101
+ return CodeExecutionArtifactMetadata.model_validate(
102
+ content.metadata[_CODE_EXECUTION_ARTIFACT_METADATA_KEY]
103
+ )
@@ -21,7 +21,6 @@ from tenacity import (
21
21
 
22
22
  from unique_toolkit import ChatService
23
23
  from unique_toolkit._common.execution import failsafe_async
24
- from unique_toolkit._common.utils.files import FileMimeType, ImageMimeType
25
24
  from unique_toolkit.agentic.feature_flags.feature_flags import feature_flags
26
25
  from unique_toolkit.agentic.postprocessor.postprocessor_manager import (
27
26
  ResponsesApiPostprocessor,
@@ -30,6 +29,9 @@ from unique_toolkit.agentic.short_term_memory_manager.persistent_short_term_memo
30
29
  PersistentShortMemoryManager,
31
30
  )
32
31
  from unique_toolkit.agentic.tools.config import get_configuration_dict
32
+ from unique_toolkit.agentic.tools.openai_builtin.code_interpreter.postprocessors.artifacts import (
33
+ save_code_execution_artifact,
34
+ )
33
35
  from unique_toolkit.agentic.tools.openai_builtin.code_interpreter.schemas import (
34
36
  CodeInterpreterBlock,
35
37
  CodeInterpreterFile,
@@ -661,32 +663,13 @@ class DisplayCodeInterpreterFilesPostProcessor(
661
663
  container_file.filename, "uploading", force_publish=True
662
664
  )
663
665
 
664
- raw_mime = guess_type(container_file.filename)[0] or "text/plain"
665
- mime = _kb_safe_mime(raw_mime)
666
- if mime != raw_mime:
667
- self._log.info(
668
- "MIME type '%s' is not supported by the Unique KB; "
669
- "uploading '%s' as '%s' so the file can be stored and downloaded.",
670
- raw_mime,
671
- container_file.filename,
672
- mime,
673
- )
674
- self._log.info(
675
- "Uploading '%s' to knowledge base (mime=%s, %d bytes)",
676
- container_file.filename,
677
- mime,
678
- len(file_bytes),
679
- )
680
-
681
666
  assert self._chat_service is not None # Checked in __init__
682
667
  upload_t0 = time.monotonic()
683
668
  content = await self._build_retry()(
684
- self._chat_service.upload_to_chat_from_bytes_async,
685
- content=file_bytes,
686
- content_name=container_file.filename,
687
- mime_type=mime,
688
- skip_ingestion=True,
689
- hide_in_chat=True,
669
+ save_code_execution_artifact,
670
+ chat_service=self._chat_service,
671
+ file=container_file,
672
+ file_bytes=file_bytes,
690
673
  )
691
674
  upload_ms = (time.monotonic() - upload_t0) * 1000
692
675
  if upload_ms > 2000:
@@ -929,37 +912,6 @@ def _get_file_type(filename: str) -> CodeInterpreterFileType:
929
912
  return "document"
930
913
 
931
914
 
932
- def _kb_safe_mime(mime: str) -> str:
933
- """Return a MIME type the Unique KB will accept.
934
-
935
- Membership is defined by ``FileMimeType`` and ``ImageMimeType`` in
936
- ``unique_toolkit._common.utils.files`` (same catalog as path-based helpers
937
- like ``FileMimeType.is_valid_mime``, but here we already have a resolved
938
- MIME string from ``mimetypes.guess_type``, so we use StrEnum value lookup
939
- instead of re-parsing a path).
940
-
941
- The KB GraphQL API rejects many code-file MIME types (e.g. ``text/x-python``
942
- for ``.py`` files). Anything not in those enums is coerced to
943
- ``text/plain`` so the file can be stored and downloaded without changing
944
- its bytes.
945
-
946
- Other ``image/*`` subtypes (e.g. ``image/jpg``) still pass through unchanged.
947
- """
948
- try:
949
- FileMimeType(mime)
950
- return mime
951
- except ValueError:
952
- pass
953
- try:
954
- ImageMimeType(mime)
955
- return mime
956
- except ValueError:
957
- pass
958
- if mime.startswith("image/"):
959
- return mime
960
- return "text/plain"
961
-
962
-
963
915
  def _file_title(filename: str) -> str:
964
916
  """Derive a human-readable title from a filename.
965
917
 
@@ -8,10 +8,10 @@ from openai import (
8
8
  AsyncOpenAI,
9
9
  BaseModel,
10
10
  NotFoundError,
11
- OpenAIError,
12
11
  )
13
12
  from openai.types.responses import ResponseCodeInterpreterToolCall, ResponseIncludable
14
13
  from openai.types.responses.tool_param import CodeInterpreter
14
+ from pydantic import ValidationError
15
15
  from tenacity import (
16
16
  AsyncRetrying,
17
17
  before_sleep_log,
@@ -20,7 +20,11 @@ from tenacity import (
20
20
  )
21
21
 
22
22
  from unique_toolkit import ContentService, ShortTermMemoryService
23
- from unique_toolkit._common.execution import SafeTaskExecutor
23
+ from unique_toolkit._common.execution import (
24
+ SafeTaskExecutor,
25
+ failsafe_async,
26
+ )
27
+ from unique_toolkit._common.utils.jinja.render import render_template
24
28
  from unique_toolkit.agentic.feature_flags.feature_flags import feature_flags
25
29
  from unique_toolkit.agentic.short_term_memory_manager.persistent_short_term_memory_manager import (
26
30
  PersistentShortMemoryManager,
@@ -32,6 +36,9 @@ from unique_toolkit.agentic.tools.openai_builtin.base import (
32
36
  from unique_toolkit.agentic.tools.openai_builtin.code_interpreter.config import (
33
37
  OpenAICodeInterpreterConfig,
34
38
  )
39
+ from unique_toolkit.agentic.tools.openai_builtin.code_interpreter.postprocessors.artifacts import (
40
+ load_code_execution_metadata,
41
+ )
35
42
  from unique_toolkit.agentic.tools.schemas import ToolPrompts
36
43
  from unique_toolkit.content.schemas import (
37
44
  Content,
@@ -62,13 +69,13 @@ def _build_upload_retry() -> AsyncRetrying:
62
69
  _SHORT_TERM_MEMORY_NAME = "container_code_execution"
63
70
 
64
71
 
65
- class CodeExecutionShortTermMemorySchema(BaseModel):
72
+ class _CodeExecutionShortTermMemorySchema(BaseModel):
66
73
  container_id: str
67
- file_ids: dict[str, str] = {} # Mapping of unique file id to openai file id
74
+ file_paths: dict[str, str] = {}
68
75
 
69
76
 
70
77
  CodeExecutionMemoryManager = PersistentShortMemoryManager[
71
- CodeExecutionShortTermMemorySchema
78
+ _CodeExecutionShortTermMemorySchema
72
79
  ]
73
80
 
74
81
 
@@ -83,7 +90,7 @@ def _get_container_code_execution_short_term_memory_manager(
83
90
  )
84
91
  short_term_memory_manager = PersistentShortMemoryManager(
85
92
  short_term_memory_service=short_term_memory_service,
86
- short_term_memory_schema=CodeExecutionShortTermMemorySchema,
93
+ short_term_memory_schema=_CodeExecutionShortTermMemorySchema,
87
94
  short_term_memory_name=_SHORT_TERM_MEMORY_NAME,
88
95
  )
89
96
  return short_term_memory_manager
@@ -91,7 +98,7 @@ def _get_container_code_execution_short_term_memory_manager(
91
98
 
92
99
  async def _check_container_exists(
93
100
  client: AsyncOpenAI,
94
- memory: CodeExecutionShortTermMemorySchema,
101
+ memory: _CodeExecutionShortTermMemorySchema,
95
102
  ) -> bool:
96
103
  try:
97
104
  container = await client.containers.retrieve(memory.container_id)
@@ -129,27 +136,15 @@ async def _create_container(
129
136
  return container.id
130
137
 
131
138
 
132
- async def _check_file_already_uploaded(
133
- client: AsyncOpenAI,
139
+ def _check_file_already_uploaded(
134
140
  content_id: str,
135
- memory: CodeExecutionShortTermMemorySchema,
141
+ memory: _CodeExecutionShortTermMemorySchema,
136
142
  ) -> bool:
137
- container_id = memory.container_id
138
-
139
- if content_id not in memory.file_ids:
143
+ if content_id not in memory.file_paths:
140
144
  logger.info("File with id %s not in short term memory", content_id)
141
145
  return False
142
146
 
143
- file_id = memory.file_ids[content_id]
144
- try:
145
- await client.containers.files.retrieve(
146
- container_id=container_id, file_id=file_id
147
- )
148
- logger.info("File with id %s already uploaded to container", content_id)
149
- return True
150
- except OpenAIError: # Azure API Errors are not stable
151
- logger.exception("Error while retrieving file %s", file_id)
152
- return False
147
+ return True
153
148
 
154
149
 
155
150
  async def _upload_file_to_container(
@@ -189,20 +184,17 @@ async def _upload_file_to_container(
189
184
  container_id,
190
185
  )
191
186
 
192
- return openai_file.id
187
+ return openai_file.path
193
188
 
194
189
 
195
190
  async def _upload_files_to_container(
196
191
  client: AsyncOpenAI,
197
192
  uploaded_files: list[Content],
198
- memory: CodeExecutionShortTermMemorySchema,
193
+ memory: _CodeExecutionShortTermMemorySchema,
199
194
  content_service: ContentService,
200
- ) -> tuple[CodeExecutionShortTermMemorySchema, bool]:
201
-
195
+ ) -> tuple[_CodeExecutionShortTermMemorySchema, bool]:
202
196
  async def _check_and_upload(content: Content) -> str | None:
203
- if await _check_file_already_uploaded(
204
- client=client, content_id=content.id, memory=memory
205
- ):
197
+ if _check_file_already_uploaded(content_id=content.id, memory=memory):
206
198
  return None
207
199
 
208
200
  return await _upload_file_to_container(
@@ -227,8 +219,8 @@ async def _upload_files_to_container(
227
219
 
228
220
  updated = False
229
221
  for content, result in zip(unique_contents, results):
230
- if result.success and (file_id := result.unpack()) is not None:
231
- memory.file_ids[content.id] = file_id
222
+ if result.success and (filepath := result.unpack()) is not None:
223
+ memory.file_paths[content.id] = filepath
232
224
  updated = True
233
225
 
234
226
  return memory, updated
@@ -263,6 +255,9 @@ class OpenAICodeInterpreterTool(OpenAIBuiltInTool[CodeInterpreter]):
263
255
  container_id: str | None,
264
256
  company_id: str = "",
265
257
  is_exclusive: bool = False,
258
+ user_uploaded_files: list[str] | None = None,
259
+ kb_uploaded_files: list[str] | None = None,
260
+ code_execution_files: list[str] | None = None,
266
261
  ) -> None:
267
262
  self._config = config
268
263
 
@@ -273,6 +268,10 @@ class OpenAICodeInterpreterTool(OpenAIBuiltInTool[CodeInterpreter]):
273
268
  self._company_id = company_id
274
269
  self._is_exclusive = is_exclusive
275
270
 
271
+ self._user_uploaded_files = user_uploaded_files
272
+ self._kb_uploaded_files = kb_uploaded_files
273
+ self._code_interpreter_artifacts = code_execution_files
274
+
276
275
  @property
277
276
  @override
278
277
  def name(self) -> OpenAIBuiltInToolName:
@@ -334,7 +333,10 @@ class OpenAICodeInterpreterTool(OpenAIBuiltInTool[CodeInterpreter]):
334
333
  chat_id=chat_id,
335
334
  )
336
335
 
337
- memory = await memory_manager.load_async()
336
+ # Ignore old memory schema
337
+ memory = await failsafe_async(
338
+ failure_return_value=None, exceptions=(ValidationError,), log_exc_info=False
339
+ )(memory_manager.load_async)()
338
340
 
339
341
  container_updated = False
340
342
  if memory is None or not await _check_container_exists(
@@ -347,20 +349,32 @@ class OpenAICodeInterpreterTool(OpenAIBuiltInTool[CodeInterpreter]):
347
349
  company_id=company_id,
348
350
  expires_after_minutes=config.expires_after_minutes,
349
351
  )
350
- memory = CodeExecutionShortTermMemorySchema(container_id=container_id)
352
+ memory = _CodeExecutionShortTermMemorySchema(container_id=container_id)
351
353
  container_updated = True
352
354
 
355
+ code_execution_files = []
356
+ user_uploaded_files = []
357
+ for content in uploaded_files:
358
+ if (metadata := load_code_execution_metadata(content)) is not None:
359
+ code_execution_files.append(content)
360
+ if metadata.container_id == memory.container_id:
361
+ # Already available in container
362
+ memory.file_paths[content.id] = metadata.filepath
363
+ else:
364
+ user_uploaded_files.append(content)
365
+
353
366
  files_to_upload: list[Content] = []
367
+
354
368
  if config.upload_files_in_chat_to_container:
355
369
  files_to_upload.extend(uploaded_files)
356
370
 
371
+ kb_files = []
357
372
  if config.additional_uploaded_documents:
358
- files_to_upload.extend(
359
- await _resolve_kb_contents(
360
- content_service=content_service,
361
- content_ids=config.additional_uploaded_documents,
362
- )
373
+ kb_files = await _resolve_kb_contents(
374
+ content_service=content_service,
375
+ content_ids=config.additional_uploaded_documents,
363
376
  )
377
+ files_to_upload.extend(kb_files)
364
378
 
365
379
  files_updated = False
366
380
  if files_to_upload:
@@ -374,20 +388,36 @@ class OpenAICodeInterpreterTool(OpenAIBuiltInTool[CodeInterpreter]):
374
388
  if container_updated or files_updated:
375
389
  await memory_manager.save_async(memory)
376
390
 
391
+ def _extract_paths(contents: list[Content]) -> list[str]:
392
+ return [
393
+ memory.file_paths[content.id]
394
+ for content in contents
395
+ if content.id in memory.file_paths
396
+ ]
397
+
377
398
  return OpenAICodeInterpreterTool(
378
399
  config=config,
379
400
  container_id=memory.container_id,
380
401
  company_id=company_id,
381
402
  is_exclusive=is_exclusive,
403
+ user_uploaded_files=_extract_paths(user_uploaded_files),
404
+ kb_uploaded_files=_extract_paths(kb_files),
405
+ code_execution_files=_extract_paths(code_execution_files),
382
406
  )
383
407
 
384
408
  @override
385
409
  def get_tool_prompts(self) -> ToolPrompts:
410
+ rendered_prompt = render_template(
411
+ self._config.tool_description_for_system_prompt,
412
+ user_uploaded_files=self._user_uploaded_files,
413
+ kb_uploaded_files=self._kb_uploaded_files,
414
+ code_interpreter_artifacts=self._code_interpreter_artifacts,
415
+ )
386
416
  return ToolPrompts(
387
417
  name="python", # https://platform.openai.com/docs/guides/tools-code-interpreter
388
418
  display_name=self.DISPLAY_NAME,
389
419
  tool_description=self._config.tool_description,
390
- tool_system_prompt=self._config.tool_description_for_system_prompt,
420
+ tool_system_prompt=rendered_prompt,
391
421
  tool_format_information_for_system_prompt="",
392
422
  tool_user_prompt=self._config.tool_description_for_user_prompt,
393
423
  tool_format_information_for_user_prompt="",
@@ -1986,6 +1986,19 @@ class ChatService(ChatServiceDeprecated):
1986
1986
  chat_id=self._content_scope_chat_id,
1987
1987
  )
1988
1988
 
1989
+ @staticmethod
1990
+ def _filter_images_and_documents(
1991
+ contents: list[Content],
1992
+ ) -> tuple[list[Content], list[Content]]:
1993
+ images: list[Content] = []
1994
+ files: list[Content] = []
1995
+ for c in contents:
1996
+ if is_file_content(filename=c.key):
1997
+ files.append(c)
1998
+ if is_image_content(filename=c.key):
1999
+ images.append(c)
2000
+ return images, files
2001
+
1989
2002
  def download_chat_images_and_documents(self) -> tuple[list[Content], list[Content]]:
1990
2003
  """Return images and documents from the content-scope chat (e.g. parent chat when subagent).
1991
2004
 
@@ -1995,19 +2008,34 @@ class ChatService(ChatServiceDeprecated):
1995
2008
  Returns:
1996
2009
  tuple[list[Content], list[Content]]: (images, documents) from the content-scope chat.
1997
2010
  """
1998
- images: list[Content] = []
1999
- files: list[Content] = []
2000
- for c in search_contents(
2011
+ contents = search_contents(
2001
2012
  user_id=self._user_id,
2002
2013
  company_id=self._company_id,
2003
2014
  chat_id=self._content_scope_chat_id,
2004
2015
  where={"ownerId": {"equals": self._content_scope_chat_id}},
2005
- ):
2006
- if is_file_content(filename=c.key):
2007
- files.append(c)
2008
- if is_image_content(filename=c.key):
2009
- images.append(c)
2010
- return images, files
2016
+ )
2017
+ return self._filter_images_and_documents(contents)
2018
+
2019
+ async def download_chat_images_and_documents_async(
2020
+ self,
2021
+ ) -> tuple[list[Content], list[Content]]:
2022
+ """Async version of download_chat_images_and_documents.
2023
+
2024
+ Return images and documents from the content-scope chat (e.g. parent chat when subagent).
2025
+
2026
+ Uses the service's content-scope chat id, so when running as a subagent
2027
+ with correlation, this accesses files from the primary chat session.
2028
+
2029
+ Returns:
2030
+ tuple[list[Content], list[Content]]: (images, documents) from the content-scope chat.
2031
+ """
2032
+ contents = await search_contents_async(
2033
+ user_id=self._user_id,
2034
+ company_id=self._company_id,
2035
+ chat_id=self._content_scope_chat_id,
2036
+ where={"ownerId": {"equals": self._content_scope_chat_id}},
2037
+ )
2038
+ return self._filter_images_and_documents(contents)
2011
2039
 
2012
2040
  async def search_content_chunks_async(
2013
2041
  self,