unique_toolkit 1.63.2__tar.gz → 1.64.0__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 (289) hide show
  1. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/PKG-INFO +1 -1
  2. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/pyproject.toml +1 -1
  3. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/tools/openai_builtin/base.py +10 -0
  4. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/code_display.py +16 -18
  5. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/generated_files.py +143 -7
  6. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/service.py +9 -1
  7. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/tools/openai_builtin/manager.py +12 -0
  8. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/tools/tool_manager.py +6 -0
  9. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/README.md +0 -0
  10. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/__init__.py +0 -0
  11. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/__init__.py +0 -0
  12. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/_base_service.py +0 -0
  13. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/_time_utils.py +0 -0
  14. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/api_calling/human_verification_manager.py +0 -0
  15. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/base_model_type_attribute.py +0 -0
  16. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/chunk_relevancy_sorter/config.py +0 -0
  17. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/chunk_relevancy_sorter/exception.py +0 -0
  18. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/chunk_relevancy_sorter/schemas.py +0 -0
  19. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/chunk_relevancy_sorter/service.py +0 -0
  20. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/chunk_relevancy_sorter/tests/test_service.py +0 -0
  21. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/config_checker/README.md +0 -0
  22. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/config_checker/__init__.py +0 -0
  23. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/config_checker/__main__.py +0 -0
  24. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/config_checker/cli.py +0 -0
  25. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/config_checker/differ.py +0 -0
  26. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/config_checker/exporter.py +0 -0
  27. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/config_checker/models.py +0 -0
  28. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/config_checker/registry.py +0 -0
  29. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/config_checker/validator.py +0 -0
  30. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/default_language_model.py +0 -0
  31. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/docx_generator/__init__.py +0 -0
  32. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/docx_generator/config.py +0 -0
  33. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/docx_generator/pandoc_converter.py +0 -0
  34. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/docx_generator/schemas.py +0 -0
  35. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/docx_generator/service.py +0 -0
  36. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/docx_generator/template/Doc Template.docx +0 -0
  37. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/endpoint_builder.py +0 -0
  38. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/endpoint_requestor.py +0 -0
  39. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/event_bus.py +0 -0
  40. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/exception.py +0 -0
  41. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/execution.py +0 -0
  42. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/experimental/endpoint_builder.py +0 -0
  43. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/experimental/endpoint_requestor.py +0 -0
  44. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/experimental/write_up_agent/README.md +0 -0
  45. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/experimental/write_up_agent/__init__.py +0 -0
  46. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/experimental/write_up_agent/agent.py +0 -0
  47. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/experimental/write_up_agent/config.py +0 -0
  48. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/experimental/write_up_agent/examples/data.csv +0 -0
  49. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/experimental/write_up_agent/examples/example_usage.py +0 -0
  50. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/experimental/write_up_agent/schemas.py +0 -0
  51. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/experimental/write_up_agent/services/__init__.py +0 -0
  52. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/__init__.py +0 -0
  53. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/exceptions.py +0 -0
  54. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/service.py +0 -0
  55. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/utils.py +0 -0
  56. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/__init__.py +0 -0
  57. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/config.py +0 -0
  58. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/exceptions.py +0 -0
  59. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/config.py +0 -0
  60. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/system_prompt.j2 +0 -0
  61. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/user_prompt.j2 +0 -0
  62. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/service.py +0 -0
  63. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/__init__.py +0 -0
  64. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/default_template.j2 +0 -0
  65. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/exceptions.py +0 -0
  66. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/service.py +0 -0
  67. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/utils.py +0 -0
  68. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/experimental/write_up_agent/utils.py +0 -0
  69. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/feature_flags/schema.py +0 -0
  70. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/pydantic/rjsf_tags.py +0 -0
  71. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/pydantic_helpers.py +0 -0
  72. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/referencing.py +0 -0
  73. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/string_utilities.py +0 -0
  74. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/tests/test_referencing.py +0 -0
  75. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/tests/test_string_utilities.py +0 -0
  76. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/token/__init__.py +0 -0
  77. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/token/image_token_counting.py +0 -0
  78. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/token/token_counting.py +0 -0
  79. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/token/tokenizers/deepseek/tokenizer.json +0 -0
  80. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/token/tokenizers/qwen/tokenizer.json +0 -0
  81. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/utils/__init__.py +0 -0
  82. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/utils/files.py +0 -0
  83. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/utils/image/encode.py +0 -0
  84. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/utils/jinja/helpers.py +0 -0
  85. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/utils/jinja/render.py +0 -0
  86. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/utils/jinja/schema.py +0 -0
  87. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/utils/jinja/utils.py +0 -0
  88. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/utils/structured_output/__init__.py +0 -0
  89. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/utils/structured_output/schema.py +0 -0
  90. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/utils/write_configuration.py +0 -0
  91. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/validate_required_values.py +0 -0
  92. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/_common/validators.py +0 -0
  93. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/__init__.py +0 -0
  94. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/debug_info_manager/debug_info_manager.py +0 -0
  95. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/debug_info_manager/test/test_debug_info_manager.py +0 -0
  96. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/evaluation/config.py +0 -0
  97. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/__init__.py +0 -0
  98. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/system_prompt.j2 +0 -0
  99. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/user_prompt.j2 +0 -0
  100. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/evaluation/context_relevancy/schema.py +0 -0
  101. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/evaluation/context_relevancy/service.py +0 -0
  102. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/evaluation/evaluation_manager.py +0 -0
  103. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/evaluation/exception.py +0 -0
  104. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/evaluation/hallucination/constants.py +0 -0
  105. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/evaluation/hallucination/hallucination_evaluation.py +0 -0
  106. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/evaluation/hallucination/prompts/__init__.py +0 -0
  107. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/evaluation/hallucination/prompts/system_prompt.j2 +0 -0
  108. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/evaluation/hallucination/prompts/user_prompt.j2 +0 -0
  109. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/evaluation/hallucination/service.py +0 -0
  110. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/evaluation/hallucination/utils.py +0 -0
  111. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/evaluation/output_parser.py +0 -0
  112. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/evaluation/schemas.py +0 -0
  113. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/evaluation/tests/fixtures.py +0 -0
  114. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/evaluation/tests/test_config.py +0 -0
  115. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/evaluation/tests/test_context_relevancy_service.py +0 -0
  116. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/evaluation/tests/test_hallucination_constants.py +0 -0
  117. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/evaluation/tests/test_hallucination_utils.py +0 -0
  118. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/evaluation/tests/test_output_parser.py +0 -0
  119. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/evaluation/tests/test_prompt_loaders.py +0 -0
  120. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/evaluation/utils.py +0 -0
  121. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/feature_flags/__init__.py +0 -0
  122. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/feature_flags/feature_flags.py +0 -0
  123. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/history_manager/history_construction_with_contents.py +0 -0
  124. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/history_manager/history_manager.py +0 -0
  125. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/history_manager/loop_token_reducer.py +0 -0
  126. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/history_manager/utils.py +0 -0
  127. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/loop_runner/__init__.py +0 -0
  128. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/loop_runner/_iteration_handler_utils.py +0 -0
  129. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/loop_runner/_responses_iteration_handler_utils.py +0 -0
  130. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/loop_runner/_responses_stream_handler_utils.py +0 -0
  131. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/loop_runner/_stream_handler_utils.py +0 -0
  132. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/loop_runner/base.py +0 -0
  133. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/loop_runner/middleware/__init__.py +0 -0
  134. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/loop_runner/middleware/planning/__init__.py +0 -0
  135. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/loop_runner/middleware/planning/planning.py +0 -0
  136. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/loop_runner/middleware/planning/schema.py +0 -0
  137. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/loop_runner/runners/__init__.py +0 -0
  138. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/loop_runner/runners/basic.py +0 -0
  139. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/loop_runner/runners/mistral/__init__.py +0 -0
  140. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/loop_runner/runners/mistral/mistral_runner.py +0 -0
  141. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/loop_runner/runners/qwen/__init__.py +0 -0
  142. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/loop_runner/runners/qwen/helpers.py +0 -0
  143. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/loop_runner/runners/qwen/qwen_runner.py +0 -0
  144. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/message_log_manager/__init__.py +0 -0
  145. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/message_log_manager/service.py +0 -0
  146. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/postprocessor/postprocessor_manager.py +0 -0
  147. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/reference_manager/reference_manager.py +0 -0
  148. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/responses_api/__init__.py +0 -0
  149. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/responses_api/postprocessors/code_display.py +0 -0
  150. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/responses_api/postprocessors/generated_files.py +0 -0
  151. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/responses_api/stream_handler.py +0 -0
  152. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/short_term_memory_manager/persistent_short_term_memory_manager.py +0 -0
  153. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/thinking_manager/thinking_manager.py +0 -0
  154. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/tools/__init__.py +0 -0
  155. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/tools/a2a/__init__.py +0 -0
  156. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/tools/a2a/config.py +0 -0
  157. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/tools/a2a/evaluation/__init__.py +0 -0
  158. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/tools/a2a/evaluation/_utils.py +0 -0
  159. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/tools/a2a/evaluation/config.py +0 -0
  160. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/tools/a2a/evaluation/evaluator.py +0 -0
  161. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/tools/a2a/evaluation/summarization_user_message.j2 +0 -0
  162. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/tools/a2a/manager.py +0 -0
  163. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/tools/a2a/postprocessing/__init__.py +0 -0
  164. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/tools/a2a/postprocessing/_display_utils.py +0 -0
  165. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/tools/a2a/postprocessing/_ref_utils.py +0 -0
  166. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/tools/a2a/postprocessing/config.py +0 -0
  167. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/tools/a2a/postprocessing/display.py +0 -0
  168. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/tools/a2a/postprocessing/references.py +0 -0
  169. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display.py +0 -0
  170. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display_utils.py +0 -0
  171. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_ref_utils.py +0 -0
  172. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/tools/a2a/prompts.py +0 -0
  173. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/tools/a2a/response_watcher/__init__.py +0 -0
  174. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/tools/a2a/response_watcher/service.py +0 -0
  175. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/tools/a2a/tool/__init__.py +0 -0
  176. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/tools/a2a/tool/_memory.py +0 -0
  177. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/tools/a2a/tool/_schema.py +0 -0
  178. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/tools/a2a/tool/config.py +0 -0
  179. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/tools/a2a/tool/service.py +0 -0
  180. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/tools/a2a/tool/test/test_service_utils.py +0 -0
  181. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/tools/agent_chunks_hanlder.py +0 -0
  182. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/tools/config.py +0 -0
  183. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/tools/factory.py +0 -0
  184. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/tools/mcp/__init__.py +0 -0
  185. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/tools/mcp/manager.py +0 -0
  186. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/tools/mcp/models.py +0 -0
  187. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/tools/mcp/tool_wrapper.py +0 -0
  188. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/tools/openai_builtin/__init__.py +0 -0
  189. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/__init__.py +0 -0
  190. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/config.py +0 -0
  191. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/__init__.py +0 -0
  192. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/schemas.py +0 -0
  193. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/tools/schemas.py +0 -0
  194. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/tools/test/test_mcp_manager.py +0 -0
  195. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/tools/test/test_tool_progress_reporter.py +0 -0
  196. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/tools/tool.py +0 -0
  197. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/tools/tool_progress_reporter.py +0 -0
  198. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/tools/utils/__init__.py +0 -0
  199. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/tools/utils/source_handling/__init__.py +0 -0
  200. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/tools/utils/source_handling/schema.py +0 -0
  201. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/tools/utils/source_handling/source_formatting.py +0 -0
  202. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic/tools/utils/source_handling/tests/test_source_formatting.py +0 -0
  203. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic_table/__init__.py +0 -0
  204. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic_table/schemas.py +0 -0
  205. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/agentic_table/service.py +0 -0
  206. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/app/__init__.py +0 -0
  207. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/app/dev_util.py +0 -0
  208. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/app/fast_api_factory.py +0 -0
  209. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/app/init_logging.py +0 -0
  210. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/app/init_sdk.py +0 -0
  211. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/app/performance/async_tasks.py +0 -0
  212. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/app/performance/async_wrapper.py +0 -0
  213. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/app/schemas.py +0 -0
  214. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/app/unique_settings.py +0 -0
  215. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/app/verification.py +0 -0
  216. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/app/webhook.py +0 -0
  217. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/chat/__init__.py +0 -0
  218. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/chat/cancellation.py +0 -0
  219. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/chat/constants.py +0 -0
  220. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/chat/deprecated/service.py +0 -0
  221. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/chat/functions.py +0 -0
  222. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/chat/rendering.py +0 -0
  223. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/chat/responses_api.py +0 -0
  224. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/chat/schemas.py +0 -0
  225. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/chat/service.py +0 -0
  226. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/chat/state.py +0 -0
  227. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/chat/utils.py +0 -0
  228. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/content/__init__.py +0 -0
  229. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/content/constants.py +0 -0
  230. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/content/functions.py +0 -0
  231. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/content/schemas.py +0 -0
  232. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/content/service.py +0 -0
  233. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/content/smart_rules.py +0 -0
  234. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/content/utils.py +0 -0
  235. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/data_extraction/README.md +0 -0
  236. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/data_extraction/__init__.py +0 -0
  237. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/data_extraction/augmented/__init__.py +0 -0
  238. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/data_extraction/augmented/service.py +0 -0
  239. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/data_extraction/base.py +0 -0
  240. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/data_extraction/basic/__init__.py +0 -0
  241. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/data_extraction/basic/config.py +0 -0
  242. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/data_extraction/basic/prompt.py +0 -0
  243. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/data_extraction/basic/service.py +0 -0
  244. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/elicitation/__init__.py +0 -0
  245. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/elicitation/constants.py +0 -0
  246. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/elicitation/exceptions.py +0 -0
  247. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/elicitation/functions.py +0 -0
  248. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/elicitation/schemas.py +0 -0
  249. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/elicitation/service.py +0 -0
  250. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/embedding/__init__.py +0 -0
  251. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/embedding/constants.py +0 -0
  252. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/embedding/functions.py +0 -0
  253. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/embedding/schemas.py +0 -0
  254. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/embedding/service.py +0 -0
  255. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/embedding/utils.py +0 -0
  256. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/framework_utilities/__init__.py +0 -0
  257. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/framework_utilities/langchain/__init__.py +0 -0
  258. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/framework_utilities/langchain/client.py +0 -0
  259. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/framework_utilities/langchain/history.py +0 -0
  260. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/framework_utilities/openai/__init__.py +0 -0
  261. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/framework_utilities/openai/client.py +0 -0
  262. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/framework_utilities/openai/message_builder.py +0 -0
  263. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/framework_utilities/utils.py +0 -0
  264. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/language_model/__init__.py +0 -0
  265. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/language_model/_responses_api_utils.py +0 -0
  266. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/language_model/builder.py +0 -0
  267. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/language_model/constants.py +0 -0
  268. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/language_model/default_language_model.py +0 -0
  269. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/language_model/functions.py +0 -0
  270. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/language_model/infos.py +0 -0
  271. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/language_model/prompt.py +0 -0
  272. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/language_model/reference.py +0 -0
  273. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/language_model/schemas.py +0 -0
  274. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/language_model/service.py +0 -0
  275. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/language_model/stream_transform.py +0 -0
  276. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/language_model/utils.py +0 -0
  277. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/protocols/support.py +0 -0
  278. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/services/__init__.py +0 -0
  279. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/services/chat_service.py +0 -0
  280. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/services/factory.py +0 -0
  281. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/services/knowledge_base.py +0 -0
  282. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/short_term_memory/__init__.py +0 -0
  283. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/short_term_memory/constants.py +0 -0
  284. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/short_term_memory/functions.py +0 -0
  285. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/short_term_memory/schemas.py +0 -0
  286. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/short_term_memory/service.py +0 -0
  287. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/smart_rules/__init__.py +0 -0
  288. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/unique_toolkit/smart_rules/compile.py +0 -0
  289. {unique_toolkit-1.63.2 → unique_toolkit-1.64.0}/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: 1.63.2
3
+ Version: 1.64.0
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>
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "unique_toolkit"
3
- version = "1.63.2"
3
+ version = "1.64.0"
4
4
  description = ""
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -2,6 +2,7 @@ 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
5
6
  from openai.types.responses.tool_param import CodeInterpreter
6
7
 
7
8
  from unique_toolkit.agentic.tools.schemas import ToolPrompts
@@ -44,3 +45,12 @@ class OpenAIBuiltInTool(ABC, Generic[ToolType]):
44
45
  @abstractmethod
45
46
  def display_name(self) -> str:
46
47
  raise NotImplementedError()
48
+
49
+ def get_required_include_params(self) -> list[ResponseIncludable]:
50
+ """Return Responses API `include` values required by this tool.
51
+
52
+ Subclasses override this when they need additional data attached to the
53
+ response (e.g. code interpreter execution logs). The default is an
54
+ empty list, meaning no extra includes are needed.
55
+ """
56
+ return []
@@ -6,6 +6,7 @@ from typing import override
6
6
  from pydantic import BaseModel, Field
7
7
  from pydantic.json_schema import SkipJsonSchema
8
8
 
9
+ from unique_toolkit.agentic.feature_flags.feature_flags import feature_flags
9
10
  from unique_toolkit.agentic.postprocessor.postprocessor_manager import (
10
11
  ResponsesApiPostprocessor,
11
12
  )
@@ -24,22 +25,6 @@ _TEMPLATE = """
24
25
 
25
26
  """.lstrip()
26
27
 
27
- # Pattern matching the block emitted by _TEMPLATE (including trailing </br>).
28
- # Used when another postprocessor supersedes this content (e.g. fence injection).
29
- _EXECUTED_CODE_BLOCK_RE = re.compile(
30
- r"\n*<details><summary>Code Interpreter Call</summary>.*?</details>[ \t]*\n*(?:[ \t]*</br>[ \t]*\n*)?",
31
- re.DOTALL,
32
- )
33
-
34
-
35
- def strip_executed_code_blocks(text: str) -> str:
36
- """Remove all executed-code <details> blocks emitted by this postprocessor.
37
-
38
- Call this when the same content is represented elsewhere (e.g. imgWithSource
39
- / fileWithSource fences) so the message does not contain duplicate code blocks.
40
- """
41
- return _EXECUTED_CODE_BLOCK_RE.sub("", text)
42
-
43
28
 
44
29
  logger = logging.getLogger(__name__)
45
30
 
@@ -59,18 +44,32 @@ class ShowExecutedCodePostprocessorConfig(BaseModel):
59
44
 
60
45
 
61
46
  class ShowExecutedCodePostprocessor(ResponsesApiPostprocessor):
62
- def __init__(self, config: ShowExecutedCodePostprocessorConfig):
47
+ def __init__(
48
+ self,
49
+ config: ShowExecutedCodePostprocessorConfig,
50
+ company_id: str | None = None,
51
+ ):
63
52
  super().__init__(self.__class__.__name__)
64
53
  self._config = config
54
+ self._company_id = company_id
65
55
 
66
56
  @override
67
57
  async def run(self, loop_response: ResponsesLanguageModelStreamResponse) -> None:
58
+ if feature_flags.enable_code_execution_fence_un_17972.is_enabled(
59
+ self._company_id
60
+ ):
61
+ return
68
62
  await asyncio.sleep(self._config.sleep_time_before_display)
69
63
 
70
64
  @override
71
65
  def apply_postprocessing_to_response(
72
66
  self, loop_response: ResponsesLanguageModelStreamResponse
73
67
  ) -> bool:
68
+ if feature_flags.enable_code_execution_fence_un_17972.is_enabled(
69
+ self._company_id
70
+ ):
71
+ return False
72
+
74
73
  prepended_text = ""
75
74
  for output in loop_response.code_interpreter_calls:
76
75
  prepended_text += _TEMPLATE.format(code=output.code)
@@ -83,6 +82,5 @@ class ShowExecutedCodePostprocessor(ResponsesApiPostprocessor):
83
82
  async def remove_from_text(self, text) -> str:
84
83
  if not self._config.remove_from_history:
85
84
  return text
86
- # Remove code interpreter blocks using regex
87
85
  pattern = r"<details><summary>Code Interpreter Call</summary>.*?</details>"
88
86
  return re.sub(pattern, "", text, flags=re.DOTALL)
@@ -6,6 +6,7 @@ from mimetypes import guess_type
6
6
  from typing import NamedTuple, override
7
7
 
8
8
  from openai import AsyncOpenAI
9
+ from openai.types.responses import ResponseCodeInterpreterToolCall
9
10
  from openai.types.responses.response_output_text import AnnotationContainerFileCitation
10
11
  from pydantic import BaseModel, Field, RootModel
11
12
  from pydantic.json_schema import SkipJsonSchema
@@ -20,9 +21,6 @@ from unique_toolkit.agentic.short_term_memory_manager.persistent_short_term_memo
20
21
  PersistentShortMemoryManager,
21
22
  )
22
23
  from unique_toolkit.agentic.tools.config import get_configuration_dict
23
- from unique_toolkit.agentic.tools.openai_builtin.code_interpreter.postprocessors.code_display import (
24
- strip_executed_code_blocks,
25
- )
26
24
  from unique_toolkit.agentic.tools.openai_builtin.code_interpreter.schemas import (
27
25
  CodeInterpreterBlock,
28
26
  CodeInterpreterFile,
@@ -110,6 +108,7 @@ class DisplayCodeInterpreterFilesPostProcessor(
110
108
  if self._chat_service is None:
111
109
  raise ValueError("ChatService is required if uploadToChat is True")
112
110
 
111
+ self._orphan_code_blocks: list[CodeInterpreterBlock] = []
113
112
  self._short_term_memory_manager = None
114
113
  if chat_id is not None and user_id is not None and company_id is not None:
115
114
  self._short_term_memory_manager = _init_short_term_memory_manager(
@@ -150,10 +149,23 @@ class DisplayCodeInterpreterFilesPostProcessor(
150
149
  ]
151
150
  )
152
151
 
152
+ if feature_flags.enable_code_execution_fence_un_17972.is_enabled(
153
+ self._company_id
154
+ ):
155
+ self._orphan_code_blocks = await self._upload_orphan_code_as_txt(
156
+ loop_response
157
+ )
158
+ else:
159
+ self._orphan_code_blocks = []
160
+
153
161
  @override
154
162
  def apply_postprocessing_to_response(
155
163
  self, loop_response: ResponsesLanguageModelStreamResponse
156
164
  ) -> bool:
165
+ if loop_response.message.references is None:
166
+ loop_response.message.references = []
167
+ if loop_response.message.text is None:
168
+ loop_response.message.text = ""
157
169
  ref_number = _get_next_ref_number(loop_response.message.references)
158
170
  changed = False
159
171
 
@@ -248,6 +260,27 @@ class DisplayCodeInterpreterFilesPostProcessor(
248
260
  )
249
261
  changed |= loop_response.message.text != text_before
250
262
 
263
+ if self._orphan_code_blocks:
264
+ fence_id = _get_next_fence_id(loop_response.message.text)
265
+ orphan_fences = _build_orphan_fences(self._orphan_code_blocks, fence_id)
266
+ loop_response.message.text = (
267
+ loop_response.message.text.rstrip() + "\n\n" + orphan_fences
268
+ )
269
+ ref_number = _get_next_ref_number(loop_response.message.references)
270
+ for block in self._orphan_code_blocks:
271
+ for file in block.files:
272
+ loop_response.message.references.append(
273
+ ContentReference(
274
+ sequence_number=ref_number,
275
+ source_id=file.content_id,
276
+ source="node-ingestion-chunks",
277
+ url=f"unique://content/{file.content_id}",
278
+ name=file.filename,
279
+ )
280
+ )
281
+ ref_number += 1
282
+ changed = True
283
+
251
284
  _warn_missing_content_ids(loop_response.message.text, self._content_map)
252
285
  loop_response.message.text, dangling_replaced = _replace_dangling_sandbox_links(
253
286
  loop_response.message.text, self._config.file_download_failed_message
@@ -317,6 +350,110 @@ class DisplayCodeInterpreterFilesPostProcessor(
317
350
  _DisplayedFilesShortTermMemorySchema(root=content_infos)
318
351
  )
319
352
 
353
+ async def _upload_orphan_code_as_txt(
354
+ self, loop_response: ResponsesLanguageModelStreamResponse
355
+ ) -> list[CodeInterpreterBlock]:
356
+ """Upload stdout (or code) from calls that produced no container files as .txt artifacts.
357
+
358
+ When code interpreter runs but generates no files or images, the response
359
+ text has no sandbox links for fence injection to hook onto. This method
360
+ converts those "orphan" calls into downloadable .txt files so the fence
361
+ postprocessor can attach a fileWithSource component and the new Code
362
+ Execution UI is shown instead of the legacy <details> block.
363
+
364
+ Called only when the fence feature flag is enabled. Skipped entirely if
365
+ any container files were produced (normal fencing handles those).
366
+ """
367
+ if loop_response.container_files:
368
+ return []
369
+
370
+ calls = loop_response.code_interpreter_calls
371
+ if not calls:
372
+ return []
373
+
374
+ assert self._chat_service is not None # Checked in __init__
375
+
376
+ use_numeric_suffix = len(calls) > 1
377
+ orphan_blocks: list[CodeInterpreterBlock] = []
378
+
379
+ for i, call in enumerate(calls):
380
+ if not call.code:
381
+ continue
382
+
383
+ # Code interpreter logs are only present on each code_interpreter_call when
384
+ # the create/retrieve request sets include=["code_interpreter_call.outputs"]
385
+ # (see OpenAI Responses API `include` and manual examples in
386
+ # docs/manual_examples_for_docs/code_execution_openai_client.py). If
387
+ # `outputs` is omitted, call.outputs is null and we fall back to the
388
+ # source code as the downloadable txt.
389
+ txt_content = _collect_stdout(call) or call.code
390
+ filename = f"code_{i + 1}.txt" if use_numeric_suffix else "code.txt"
391
+
392
+ try:
393
+ content = await self._chat_service.upload_to_chat_from_bytes_async(
394
+ content=txt_content.encode("utf-8"),
395
+ content_name=filename,
396
+ mime_type="text/plain",
397
+ skip_ingestion=True,
398
+ hide_in_chat=True,
399
+ )
400
+ except Exception:
401
+ logger.exception(
402
+ "Failed to upload orphan code block as txt for call %d ('%s'); "
403
+ "falling back to legacy code block display.",
404
+ i,
405
+ filename,
406
+ )
407
+ continue
408
+
409
+ orphan_file = CodeInterpreterFile(
410
+ filename=filename,
411
+ content_id=content.id,
412
+ type="document",
413
+ )
414
+ orphan_blocks.append(
415
+ CodeInterpreterBlock(code=call.code, files=[orphan_file])
416
+ )
417
+ logger.info(
418
+ "Uploaded orphan code block as '%s' (content_id=%s)",
419
+ filename,
420
+ content.id,
421
+ )
422
+
423
+ return orphan_blocks
424
+
425
+
426
+ def _collect_stdout(call: ResponseCodeInterpreterToolCall) -> str:
427
+ """Collect all stdout logs from a code interpreter call's outputs."""
428
+ if not call.outputs:
429
+ return ""
430
+ return "\n".join(output.logs for output in call.outputs if output.type == "logs")
431
+
432
+
433
+ def _get_next_fence_id(text: str) -> int:
434
+ """Return the next available fence id by scanning existing fences in the text."""
435
+ existing = re.findall(r"````(?:imgWithSource|fileWithSource)\(id='(\d+)'", text)
436
+ if not existing:
437
+ return 1
438
+ return max(int(fid) for fid in existing) + 1
439
+
440
+
441
+ def _build_orphan_fences(
442
+ blocks: list[CodeInterpreterBlock], start_fence_id: int
443
+ ) -> str:
444
+ """Build concatenated fence text for orphan code blocks.
445
+
446
+ Orphan blocks have no inline ref in the message text, so their fences are
447
+ appended directly rather than injected via pattern replacement.
448
+ """
449
+ fence_id = start_fence_id
450
+ parts: list[str] = []
451
+ for block in blocks:
452
+ for file in block.files:
453
+ parts.append(_build_file_fence(file, block.code, fence_id))
454
+ fence_id += 1
455
+ return "\n".join(parts)
456
+
320
457
 
321
458
  def _get_file_type(filename: str) -> CodeInterpreterFileType:
322
459
  mime = guess_type(filename)[0] or ""
@@ -460,8 +597,6 @@ def _inject_code_execution_fences(
460
597
 
461
598
  Each file gets its own fence placed at the position of its inline ref. Duplicate
462
599
  refs for the same file (overwrite case) are removed after the first is replaced.
463
- When at least one fence was injected, executed-code <details> blocks are
464
- stripped via strip_executed_code_blocks() from the code_display postprocessor.
465
600
 
466
601
  fence_id is a message-level counter so each fence has a unique id.
467
602
  """
@@ -487,7 +622,6 @@ def _inject_code_execution_fences(
487
622
  # Remove duplicate refs (overwrite case)
488
623
  text = re.sub(pattern, "", text)
489
624
  if any_fence_injected:
490
- text = strip_executed_code_blocks(text)
491
625
  text = _ensure_fences_are_standalone(text)
492
626
  text = _CONSECUTIVE_FENCES_RE.sub(r"\1\n", text)
493
627
  return text
@@ -694,7 +828,9 @@ def _warn_unmatched_code_blocks(
694
828
  )
695
829
 
696
830
 
697
- def _get_next_ref_number(references: list[ContentReference]) -> int:
831
+ def _get_next_ref_number(references: list[ContentReference] | None) -> int:
832
+ if not references:
833
+ return 1
698
834
  max_ref_number = 0
699
835
  for ref in references:
700
836
  max_ref_number = max(max_ref_number, ref.sequence_number)
@@ -2,7 +2,7 @@ import logging
2
2
  from typing import Any, override
3
3
 
4
4
  from openai import AsyncOpenAI, BaseModel, NotFoundError
5
- from openai.types.responses import ResponseCodeInterpreterToolCall
5
+ from openai.types.responses import ResponseCodeInterpreterToolCall, ResponseIncludable
6
6
  from openai.types.responses.tool_param import CodeInterpreter
7
7
 
8
8
  from unique_toolkit import ContentService, ShortTermMemoryService
@@ -280,6 +280,14 @@ class OpenAICodeInterpreterTool(OpenAIBuiltInTool[CodeInterpreter]):
280
280
  def display_name(self) -> str:
281
281
  return self.DISPLAY_NAME
282
282
 
283
+ @override
284
+ def get_required_include_params(self) -> list[ResponseIncludable]:
285
+ if feature_flags.enable_code_execution_fence_un_17972.is_enabled(
286
+ self._company_id
287
+ ):
288
+ return ["code_interpreter_call.outputs"]
289
+ return []
290
+
283
291
  @classmethod
284
292
  def get_debug_info(cls, call: ResponseCodeInterpreterToolCall) -> dict[str, Any]:
285
293
  return {
@@ -1,4 +1,5 @@
1
1
  from openai import AsyncOpenAI
2
+ from openai.types.responses import ResponseIncludable
2
3
 
3
4
  from unique_toolkit.agentic.tools.config import ToolBuildConfig
4
5
  from unique_toolkit.agentic.tools.openai_builtin.base import (
@@ -79,3 +80,14 @@ class OpenAIBuiltInToolManager:
79
80
 
80
81
  def get_all_openai_builtin_tools(self) -> list[OpenAIBuiltInTool]:
81
82
  return self._builtin_tools.copy()
83
+
84
+ def get_required_include_params(self) -> list[ResponseIncludable]:
85
+ """Aggregate include params required by all active built-in tools."""
86
+ seen: set[str] = set()
87
+ result: list[ResponseIncludable] = []
88
+ for tool in self._builtin_tools:
89
+ for param in tool.get_required_include_params():
90
+ if param not in seen:
91
+ seen.add(param)
92
+ result.append(param)
93
+ return result
@@ -7,6 +7,7 @@ from openai.types.chat import (
7
7
  ChatCompletionNamedToolChoiceParam,
8
8
  )
9
9
  from openai.types.responses import (
10
+ ResponseIncludable,
10
11
  ToolParam,
11
12
  response_create_params,
12
13
  )
@@ -490,6 +491,7 @@ class ResponsesApiToolManager(_ToolManager[Literal["responses"]]):
490
491
  a2a_manager: A2AManager,
491
492
  builtin_tool_manager: OpenAIBuiltInToolManager,
492
493
  ) -> None:
494
+ self._builtin_tool_manager = builtin_tool_manager
493
495
  super().__init__(
494
496
  logger=logger,
495
497
  config=config,
@@ -500,3 +502,7 @@ class ResponsesApiToolManager(_ToolManager[Literal["responses"]]):
500
502
  api_mode="responses",
501
503
  builtin_tool_manager=builtin_tool_manager,
502
504
  )
505
+
506
+ def get_required_include_params(self) -> list[ResponseIncludable]:
507
+ """Return Responses API include params required by all active built-in tools."""
508
+ return self._builtin_tool_manager.get_required_include_params()