unique_toolkit 1.70.3__tar.gz → 1.70.5__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 (297) hide show
  1. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/PKG-INFO +1 -1
  2. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/pyproject.toml +1 -1
  3. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/generated_files.py +33 -9
  4. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/service.py +47 -5
  5. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/README.md +0 -0
  6. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/__init__.py +0 -0
  7. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/__init__.py +0 -0
  8. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/_base_service.py +0 -0
  9. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/_time_utils.py +0 -0
  10. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/api_calling/human_verification_manager.py +0 -0
  11. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/base_model_type_attribute.py +0 -0
  12. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/chunk_relevancy_sorter/config.py +0 -0
  13. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/chunk_relevancy_sorter/exception.py +0 -0
  14. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/chunk_relevancy_sorter/schemas.py +0 -0
  15. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/chunk_relevancy_sorter/service.py +0 -0
  16. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/chunk_relevancy_sorter/tests/test_service.py +0 -0
  17. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/config_checker/README.md +0 -0
  18. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/config_checker/__init__.py +0 -0
  19. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/config_checker/__main__.py +0 -0
  20. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/config_checker/cli.py +0 -0
  21. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/config_checker/differ.py +0 -0
  22. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/config_checker/exporter.py +0 -0
  23. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/config_checker/models.py +0 -0
  24. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/config_checker/registry.py +0 -0
  25. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/config_checker/validator.py +0 -0
  26. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/default_language_model.py +0 -0
  27. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/docx_generator/__init__.py +0 -0
  28. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/docx_generator/config.py +0 -0
  29. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/docx_generator/pandoc_converter.py +0 -0
  30. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/docx_generator/schemas.py +0 -0
  31. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/docx_generator/service.py +0 -0
  32. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/docx_generator/template/Doc Template.docx +0 -0
  33. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/endpoint_builder.py +0 -0
  34. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/endpoint_requestor.py +0 -0
  35. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/event_bus.py +0 -0
  36. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/exception.py +0 -0
  37. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/execution.py +0 -0
  38. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/experimental/endpoint_builder.py +0 -0
  39. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/experimental/endpoint_requestor.py +0 -0
  40. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/experimental/write_up_agent/README.md +0 -0
  41. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/experimental/write_up_agent/__init__.py +0 -0
  42. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/experimental/write_up_agent/agent.py +0 -0
  43. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/experimental/write_up_agent/config.py +0 -0
  44. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/experimental/write_up_agent/examples/data.csv +0 -0
  45. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/experimental/write_up_agent/examples/example_usage.py +0 -0
  46. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/experimental/write_up_agent/schemas.py +0 -0
  47. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/experimental/write_up_agent/services/__init__.py +0 -0
  48. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/__init__.py +0 -0
  49. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/exceptions.py +0 -0
  50. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/service.py +0 -0
  51. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/utils.py +0 -0
  52. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/__init__.py +0 -0
  53. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/config.py +0 -0
  54. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/exceptions.py +0 -0
  55. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/config.py +0 -0
  56. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/system_prompt.j2 +0 -0
  57. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/user_prompt.j2 +0 -0
  58. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/service.py +0 -0
  59. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/__init__.py +0 -0
  60. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/default_template.j2 +0 -0
  61. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/exceptions.py +0 -0
  62. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/service.py +0 -0
  63. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/utils.py +0 -0
  64. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/experimental/write_up_agent/utils.py +0 -0
  65. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/feature_flags/schema.py +0 -0
  66. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/pydantic/rjsf_tags.py +0 -0
  67. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/pydantic_helpers.py +0 -0
  68. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/referencing.py +0 -0
  69. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/string_utilities.py +0 -0
  70. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/tests/test_referencing.py +0 -0
  71. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/tests/test_string_utilities.py +0 -0
  72. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/token/__init__.py +0 -0
  73. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/token/image_token_counting.py +0 -0
  74. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/token/token_counting.py +0 -0
  75. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/token/tokenizers/deepseek/tokenizer.json +0 -0
  76. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/token/tokenizers/qwen/tokenizer.json +0 -0
  77. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/utils/__init__.py +0 -0
  78. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/utils/files.py +0 -0
  79. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/utils/image/encode.py +0 -0
  80. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/utils/jinja/helpers.py +0 -0
  81. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/utils/jinja/render.py +0 -0
  82. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/utils/jinja/schema.py +0 -0
  83. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/utils/jinja/utils.py +0 -0
  84. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/utils/structured_output/__init__.py +0 -0
  85. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/utils/structured_output/schema.py +0 -0
  86. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/utils/write_configuration.py +0 -0
  87. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/validate_required_values.py +0 -0
  88. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/_common/validators.py +0 -0
  89. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/__init__.py +0 -0
  90. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/debug_info_manager/debug_info_manager.py +0 -0
  91. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/debug_info_manager/test/test_debug_info_manager.py +0 -0
  92. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/evaluation/config.py +0 -0
  93. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/__init__.py +0 -0
  94. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/system_prompt.j2 +0 -0
  95. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/user_prompt.j2 +0 -0
  96. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/evaluation/context_relevancy/schema.py +0 -0
  97. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/evaluation/context_relevancy/service.py +0 -0
  98. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/evaluation/evaluation_manager.py +0 -0
  99. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/evaluation/exception.py +0 -0
  100. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/evaluation/hallucination/constants.py +0 -0
  101. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/evaluation/hallucination/hallucination_evaluation.py +0 -0
  102. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/evaluation/hallucination/prompts/__init__.py +0 -0
  103. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/evaluation/hallucination/prompts/system_prompt.j2 +0 -0
  104. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/evaluation/hallucination/prompts/user_prompt.j2 +0 -0
  105. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/evaluation/hallucination/service.py +0 -0
  106. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/evaluation/hallucination/utils.py +0 -0
  107. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/evaluation/output_parser.py +0 -0
  108. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/evaluation/schemas.py +0 -0
  109. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/evaluation/tests/fixtures.py +0 -0
  110. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/evaluation/tests/test_config.py +0 -0
  111. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/evaluation/tests/test_context_relevancy_service.py +0 -0
  112. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/evaluation/tests/test_hallucination_constants.py +0 -0
  113. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/evaluation/tests/test_hallucination_utils.py +0 -0
  114. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/evaluation/tests/test_output_parser.py +0 -0
  115. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/evaluation/tests/test_prompt_loaders.py +0 -0
  116. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/evaluation/utils.py +0 -0
  117. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/feature_flags/__init__.py +0 -0
  118. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/feature_flags/feature_flags.py +0 -0
  119. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/history_manager/history_construction_with_contents.py +0 -0
  120. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/history_manager/history_manager.py +0 -0
  121. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/history_manager/loop_token_reducer.py +0 -0
  122. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/history_manager/utils.py +0 -0
  123. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/loop_runner/__init__.py +0 -0
  124. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/loop_runner/_iteration_handler_utils.py +0 -0
  125. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/loop_runner/_responses_iteration_handler_utils.py +0 -0
  126. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/loop_runner/_responses_stream_handler_utils.py +0 -0
  127. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/loop_runner/_stream_handler_utils.py +0 -0
  128. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/loop_runner/base.py +0 -0
  129. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/loop_runner/middleware/__init__.py +0 -0
  130. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/loop_runner/middleware/planning/__init__.py +0 -0
  131. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/loop_runner/middleware/planning/planning.py +0 -0
  132. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/loop_runner/middleware/planning/schema.py +0 -0
  133. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/loop_runner/runners/__init__.py +0 -0
  134. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/loop_runner/runners/basic.py +0 -0
  135. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/loop_runner/runners/mistral/__init__.py +0 -0
  136. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/loop_runner/runners/mistral/mistral_runner.py +0 -0
  137. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/loop_runner/runners/qwen/__init__.py +0 -0
  138. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/loop_runner/runners/qwen/helpers.py +0 -0
  139. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/loop_runner/runners/qwen/qwen_runner.py +0 -0
  140. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/message_log_manager/__init__.py +0 -0
  141. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/message_log_manager/service.py +0 -0
  142. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/postprocessor/postprocessor_manager.py +0 -0
  143. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/reference_manager/reference_manager.py +0 -0
  144. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/responses_api/__init__.py +0 -0
  145. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/responses_api/postprocessors/code_display.py +0 -0
  146. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/responses_api/postprocessors/generated_files.py +0 -0
  147. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/responses_api/stream_handler.py +0 -0
  148. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/short_term_memory_manager/persistent_short_term_memory_manager.py +0 -0
  149. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/thinking_manager/thinking_manager.py +0 -0
  150. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/tools/__init__.py +0 -0
  151. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/tools/a2a/__init__.py +0 -0
  152. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/tools/a2a/config.py +0 -0
  153. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/tools/a2a/evaluation/__init__.py +0 -0
  154. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/tools/a2a/evaluation/_utils.py +0 -0
  155. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/tools/a2a/evaluation/config.py +0 -0
  156. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/tools/a2a/evaluation/evaluator.py +0 -0
  157. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/tools/a2a/evaluation/summarization_user_message.j2 +0 -0
  158. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/tools/a2a/manager.py +0 -0
  159. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/tools/a2a/postprocessing/__init__.py +0 -0
  160. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/tools/a2a/postprocessing/_display_utils.py +0 -0
  161. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/tools/a2a/postprocessing/_ref_utils.py +0 -0
  162. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/tools/a2a/postprocessing/config.py +0 -0
  163. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/tools/a2a/postprocessing/display.py +0 -0
  164. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/tools/a2a/postprocessing/references.py +0 -0
  165. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display.py +0 -0
  166. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display_utils.py +0 -0
  167. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_ref_utils.py +0 -0
  168. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/tools/a2a/prompts.py +0 -0
  169. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/tools/a2a/response_watcher/__init__.py +0 -0
  170. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/tools/a2a/response_watcher/service.py +0 -0
  171. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/tools/a2a/tool/__init__.py +0 -0
  172. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/tools/a2a/tool/_memory.py +0 -0
  173. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/tools/a2a/tool/_schema.py +0 -0
  174. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/tools/a2a/tool/config.py +0 -0
  175. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/tools/a2a/tool/service.py +0 -0
  176. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/tools/a2a/tool/test/test_service_utils.py +0 -0
  177. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/tools/agent_chunks_hanlder.py +0 -0
  178. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/tools/config.py +0 -0
  179. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/tools/experimental/__init__.py +0 -0
  180. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/tools/experimental/open_file_tool/__init__.py +0 -0
  181. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/tools/experimental/open_file_tool/config.py +0 -0
  182. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/tools/experimental/open_file_tool/runtime.py +0 -0
  183. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/tools/experimental/open_file_tool/tool.py +0 -0
  184. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/tools/factory.py +0 -0
  185. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/tools/mcp/__init__.py +0 -0
  186. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/tools/mcp/manager.py +0 -0
  187. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/tools/mcp/models.py +0 -0
  188. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/tools/mcp/tool_wrapper.py +0 -0
  189. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/tools/openai_builtin/__init__.py +0 -0
  190. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/tools/openai_builtin/base.py +0 -0
  191. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/__init__.py +0 -0
  192. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/config.py +0 -0
  193. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/__init__.py +0 -0
  194. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/code_display.py +0 -0
  195. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/schemas.py +0 -0
  196. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/tools/openai_builtin/manager.py +0 -0
  197. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/tools/schemas.py +0 -0
  198. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/tools/test/test_mcp_manager.py +0 -0
  199. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/tools/test/test_tool_progress_reporter.py +0 -0
  200. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/tools/tool.py +0 -0
  201. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/tools/tool_manager.py +0 -0
  202. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/tools/tool_progress_reporter.py +0 -0
  203. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/tools/utils/__init__.py +0 -0
  204. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/tools/utils/source_handling/__init__.py +0 -0
  205. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/tools/utils/source_handling/schema.py +0 -0
  206. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/tools/utils/source_handling/source_formatting.py +0 -0
  207. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic/tools/utils/source_handling/tests/test_source_formatting.py +0 -0
  208. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic_table/__init__.py +0 -0
  209. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic_table/schemas.py +0 -0
  210. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/agentic_table/service.py +0 -0
  211. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/app/__init__.py +0 -0
  212. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/app/dev_util.py +0 -0
  213. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/app/fast_api_factory.py +0 -0
  214. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/app/init_logging.py +0 -0
  215. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/app/init_sdk.py +0 -0
  216. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/app/performance/async_tasks.py +0 -0
  217. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/app/performance/async_wrapper.py +0 -0
  218. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/app/schemas.py +0 -0
  219. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/app/unique_settings.py +0 -0
  220. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/app/verification.py +0 -0
  221. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/app/webhook.py +0 -0
  222. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/chat/__init__.py +0 -0
  223. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/chat/cancellation.py +0 -0
  224. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/chat/constants.py +0 -0
  225. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/chat/deprecated/service.py +0 -0
  226. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/chat/functions.py +0 -0
  227. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/chat/rendering.py +0 -0
  228. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/chat/responses_api.py +0 -0
  229. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/chat/schemas.py +0 -0
  230. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/chat/service.py +0 -0
  231. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/chat/state.py +0 -0
  232. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/chat/utils.py +0 -0
  233. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/content/__init__.py +0 -0
  234. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/content/constants.py +0 -0
  235. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/content/functions.py +0 -0
  236. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/content/schemas.py +0 -0
  237. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/content/service.py +0 -0
  238. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/content/smart_rules.py +0 -0
  239. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/content/utils.py +0 -0
  240. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/data_extraction/README.md +0 -0
  241. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/data_extraction/__init__.py +0 -0
  242. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/data_extraction/augmented/__init__.py +0 -0
  243. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/data_extraction/augmented/service.py +0 -0
  244. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/data_extraction/base.py +0 -0
  245. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/data_extraction/basic/__init__.py +0 -0
  246. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/data_extraction/basic/config.py +0 -0
  247. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/data_extraction/basic/prompt.py +0 -0
  248. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/data_extraction/basic/service.py +0 -0
  249. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/elicitation/__init__.py +0 -0
  250. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/elicitation/constants.py +0 -0
  251. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/elicitation/exceptions.py +0 -0
  252. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/elicitation/functions.py +0 -0
  253. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/elicitation/schemas.py +0 -0
  254. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/elicitation/service.py +0 -0
  255. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/embedding/__init__.py +0 -0
  256. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/embedding/constants.py +0 -0
  257. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/embedding/functions.py +0 -0
  258. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/embedding/schemas.py +0 -0
  259. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/embedding/service.py +0 -0
  260. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/embedding/utils.py +0 -0
  261. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/framework_utilities/__init__.py +0 -0
  262. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/framework_utilities/langchain/__init__.py +0 -0
  263. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/framework_utilities/langchain/client.py +0 -0
  264. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/framework_utilities/langchain/history.py +0 -0
  265. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/framework_utilities/openai/__init__.py +0 -0
  266. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/framework_utilities/openai/client.py +0 -0
  267. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/framework_utilities/openai/message_builder.py +0 -0
  268. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/framework_utilities/utils.py +0 -0
  269. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/language_model/__init__.py +0 -0
  270. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/language_model/_responses_api_utils.py +0 -0
  271. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/language_model/builder.py +0 -0
  272. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/language_model/constants.py +0 -0
  273. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/language_model/default_language_model.py +0 -0
  274. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/language_model/functions.py +0 -0
  275. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/language_model/infos.py +0 -0
  276. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/language_model/prompt.py +0 -0
  277. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/language_model/reference.py +0 -0
  278. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/language_model/schemas.py +0 -0
  279. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/language_model/service.py +0 -0
  280. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/language_model/stream_transform.py +0 -0
  281. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/language_model/utils.py +0 -0
  282. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/monitoring/__init__.py +0 -0
  283. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/monitoring/middleware.py +0 -0
  284. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/monitoring/registry.py +0 -0
  285. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/protocols/support.py +0 -0
  286. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/services/__init__.py +0 -0
  287. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/services/chat_service.py +0 -0
  288. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/services/factory.py +0 -0
  289. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/services/knowledge_base.py +0 -0
  290. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/short_term_memory/__init__.py +0 -0
  291. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/short_term_memory/constants.py +0 -0
  292. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/short_term_memory/functions.py +0 -0
  293. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/short_term_memory/schemas.py +0 -0
  294. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/short_term_memory/service.py +0 -0
  295. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/smart_rules/__init__.py +0 -0
  296. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/unique_toolkit/smart_rules/compile.py +0 -0
  297. {unique_toolkit-1.70.3 → unique_toolkit-1.70.5}/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.70.3
3
+ Version: 1.70.5
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.70.3"
3
+ version = "1.70.5"
4
4
  description = ""
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -587,7 +587,12 @@ class DisplayCodeInterpreterFilesPostProcessor(
587
587
  missed_files.append(filename)
588
588
 
589
589
  is_html_rendered = is_html
590
- if replaced and not (is_image or is_html_rendered or fence_ff_on):
590
+ has_superscript = f"<sup>{ref_number}</sup>" in loop_response.message.text
591
+ if (
592
+ replaced
593
+ and has_superscript
594
+ and not (is_image or is_html_rendered or fence_ff_on)
595
+ ):
591
596
  loop_response.message.references.append(
592
597
  ContentReference(
593
598
  sequence_number=ref_number,
@@ -613,7 +618,16 @@ class DisplayCodeInterpreterFilesPostProcessor(
613
618
  len(code_blocks),
614
619
  [f.filename for b in code_blocks for f in b.files],
615
620
  )
616
- _warn_unmatched_code_blocks(self._content_map, code_blocks)
621
+ unmatched_blocks = _warn_unmatched_code_blocks(
622
+ self._content_map, code_blocks
623
+ )
624
+ if unmatched_blocks:
625
+ self._log.info(
626
+ "Fence path: %d file(s) have no code-block match and will appear "
627
+ "as plain download links: %s",
628
+ len(unmatched_blocks),
629
+ list(unmatched_blocks),
630
+ )
617
631
  text_before = loop_response.message.text
618
632
  loop_response.message.text = _inject_code_execution_fences(
619
633
  loop_response.message.text,
@@ -1409,7 +1423,7 @@ def _replace_dangling_sandbox_links(text: str, error_message: str) -> tuple[str,
1409
1423
  def _warn_unmatched_code_blocks(
1410
1424
  content_map: dict[str, str | None],
1411
1425
  code_blocks: list[CodeInterpreterBlock],
1412
- ) -> None:
1426
+ ) -> dict[str, str]:
1413
1427
  """Warn for files that were uploaded but could not be matched to any code block.
1414
1428
 
1415
1429
  When the fence feature flag is on, every uploaded file should map to a code block
@@ -1417,8 +1431,13 @@ def _warn_unmatched_code_blocks(
1417
1431
  matched (e.g. the LLM used a variable for the output path rather than a literal
1418
1432
  string) it falls back to a plain unique://content/ link with no code context.
1419
1433
  The user can still download it, but the frontend artifact UI will not be shown.
1434
+
1435
+ Returns:
1436
+ Mapping of filename → content_id for every file that could not be matched
1437
+ to a code block. Callers may use this to inject additional fallback links.
1420
1438
  """
1421
1439
  fenced_filenames = {f.filename for block in code_blocks for f in block.files}
1440
+ unmatched: dict[str, str] = {}
1422
1441
  for filename, content_id in content_map.items():
1423
1442
  if content_id is None:
1424
1443
  continue
@@ -1434,6 +1453,8 @@ def _warn_unmatched_code_blocks(
1434
1453
  content_id,
1435
1454
  filename,
1436
1455
  )
1456
+ unmatched[filename] = content_id
1457
+ return unmatched
1437
1458
 
1438
1459
 
1439
1460
  def _get_next_ref_number(references: list[ContentReference] | None) -> int:
@@ -1474,11 +1495,12 @@ def _replace_container_image_citation(
1474
1495
  if not re.search(image_markdown, text):
1475
1496
  logger.warning(
1476
1497
  "No sandbox link found for image '%s' (content_id=%s); "
1477
- "file was uploaded but the LLM did not reference it — it will not be displayed.",
1498
+ "file was uploaded but the LLM did not reference it — appending fallback link.",
1478
1499
  filename,
1479
1500
  content_id,
1480
1501
  )
1481
- return text, False
1502
+ fallback = f"\n\n📎 [{filename}](unique://content/{content_id})"
1503
+ return text + fallback, True
1482
1504
 
1483
1505
  logger.info("Inserting image citation for '%s'", filename)
1484
1506
  return re.sub(
@@ -1497,11 +1519,12 @@ def _replace_container_html_citation(
1497
1519
  if not re.search(html_markdown, text):
1498
1520
  logger.warning(
1499
1521
  "No sandbox link found for HTML file '%s' (content_id=%s); "
1500
- "file was uploaded but the LLM did not reference it — it will not be displayed.",
1522
+ "file was uploaded but the LLM did not reference it — appending fallback link.",
1501
1523
  filename,
1502
1524
  content_id,
1503
1525
  )
1504
- return text, False
1526
+ fallback = f"\n\n📎 [{filename}](unique://content/{content_id})"
1527
+ return text + fallback, True
1505
1528
 
1506
1529
  logger.info("Inserting HTML rendering block for '%s'", filename)
1507
1530
  block = f"```HtmlRendering\n800px\n600px\n\nunique://content/{content_id}\n\n```"
@@ -1554,11 +1577,12 @@ def _replace_container_file_citation(
1554
1577
  if not re.search(file_markdown, text):
1555
1578
  logger.warning(
1556
1579
  "No sandbox link found for file '%s' (content_id=%s); "
1557
- "file was uploaded but the LLM did not reference it — it will not be displayed.",
1580
+ "file was uploaded but the LLM did not reference it — appending fallback link.",
1558
1581
  filename,
1559
1582
  content_id,
1560
1583
  )
1561
- return text, False
1584
+ fallback = f"\n\n📎 [{filename}](unique://content/{content_id})"
1585
+ return text + fallback, True
1562
1586
 
1563
1587
  logger.info("Displaying file %s", filename)
1564
1588
  replacement = (
@@ -6,6 +6,12 @@ from typing import Any, override
6
6
  from openai import AsyncOpenAI, BaseModel, NotFoundError
7
7
  from openai.types.responses import ResponseCodeInterpreterToolCall, ResponseIncludable
8
8
  from openai.types.responses.tool_param import CodeInterpreter
9
+ from tenacity import (
10
+ AsyncRetrying,
11
+ before_sleep_log,
12
+ stop_after_attempt,
13
+ wait_exponential,
14
+ )
9
15
 
10
16
  from unique_toolkit import ContentService, ShortTermMemoryService
11
17
  from unique_toolkit.agentic.feature_flags.feature_flags import feature_flags
@@ -26,6 +32,25 @@ from unique_toolkit.content.schemas import (
26
32
 
27
33
  logger = logging.getLogger(__name__)
28
34
 
35
+ _UPLOAD_MAX_RETRIES = 2
36
+ _UPLOAD_RETRY_BASE_DELAY = 0.5
37
+
38
+
39
+ def _build_upload_retry() -> AsyncRetrying:
40
+ """Exponential-backoff retry policy for transient upload/download failures.
41
+
42
+ Matches the pattern used in the ``DisplayCodeInterpreterFilesPostProcessor``
43
+ so that every outbound I/O call gets the same behaviour: up to
44
+ ``_UPLOAD_MAX_RETRIES`` extra attempts, doubling the wait each time,
45
+ with a WARNING log before each sleep.
46
+ """
47
+ return AsyncRetrying(
48
+ stop=stop_after_attempt(1 + _UPLOAD_MAX_RETRIES),
49
+ wait=wait_exponential(multiplier=_UPLOAD_RETRY_BASE_DELAY),
50
+ before_sleep=before_sleep_log(logger, logging.WARNING),
51
+ reraise=True,
52
+ )
53
+
29
54
 
30
55
  _SHORT_TERM_MEMORY_NAME = "container_code_execution"
31
56
 
@@ -127,17 +152,34 @@ async def _upload_files_to_container(
127
152
 
128
153
  if upload:
129
154
  logger.info(
130
- "Uploding file %s to container %s", file.id, memory.container_id
155
+ "Uploading file %s (%s) to container %s",
156
+ file.id,
157
+ file.key,
158
+ memory.container_id,
131
159
  )
132
- file_content = await content_service.download_content_to_bytes_async(
133
- content_id=file.id, chat_id=chat_id
160
+ file_content = await _build_upload_retry()(
161
+ content_service.download_content_to_bytes_async,
162
+ content_id=file.id,
163
+ chat_id=chat_id,
134
164
  )
135
-
136
- openai_file = await client.containers.files.create(
165
+ logger.info(
166
+ "Downloaded %d bytes for file %s; uploading to container %s",
167
+ len(file_content),
168
+ file.id,
169
+ container_id,
170
+ )
171
+ openai_file = await _build_upload_retry()(
172
+ client.containers.files.create,
137
173
  container_id=container_id,
138
174
  file=(file.key, file_content),
139
175
  )
140
176
  memory.file_ids[file.id] = openai_file.id
177
+ logger.info(
178
+ "File %s successfully uploaded as OpenAI file %s in container %s",
179
+ file.id,
180
+ openai_file.id,
181
+ container_id,
182
+ )
141
183
 
142
184
  return memory
143
185