unique_toolkit 1.70.4__tar.gz → 1.70.6__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.4 → unique_toolkit-1.70.6}/PKG-INFO +1 -1
  2. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/pyproject.toml +1 -1
  3. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/generated_files.py +71 -69
  4. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/README.md +0 -0
  5. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/__init__.py +0 -0
  6. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/__init__.py +0 -0
  7. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/_base_service.py +0 -0
  8. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/_time_utils.py +0 -0
  9. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/api_calling/human_verification_manager.py +0 -0
  10. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/base_model_type_attribute.py +0 -0
  11. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/chunk_relevancy_sorter/config.py +0 -0
  12. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/chunk_relevancy_sorter/exception.py +0 -0
  13. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/chunk_relevancy_sorter/schemas.py +0 -0
  14. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/chunk_relevancy_sorter/service.py +0 -0
  15. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/chunk_relevancy_sorter/tests/test_service.py +0 -0
  16. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/config_checker/README.md +0 -0
  17. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/config_checker/__init__.py +0 -0
  18. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/config_checker/__main__.py +0 -0
  19. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/config_checker/cli.py +0 -0
  20. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/config_checker/differ.py +0 -0
  21. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/config_checker/exporter.py +0 -0
  22. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/config_checker/models.py +0 -0
  23. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/config_checker/registry.py +0 -0
  24. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/config_checker/validator.py +0 -0
  25. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/default_language_model.py +0 -0
  26. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/docx_generator/__init__.py +0 -0
  27. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/docx_generator/config.py +0 -0
  28. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/docx_generator/pandoc_converter.py +0 -0
  29. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/docx_generator/schemas.py +0 -0
  30. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/docx_generator/service.py +0 -0
  31. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/docx_generator/template/Doc Template.docx +0 -0
  32. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/endpoint_builder.py +0 -0
  33. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/endpoint_requestor.py +0 -0
  34. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/event_bus.py +0 -0
  35. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/exception.py +0 -0
  36. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/execution.py +0 -0
  37. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/experimental/endpoint_builder.py +0 -0
  38. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/experimental/endpoint_requestor.py +0 -0
  39. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/experimental/write_up_agent/README.md +0 -0
  40. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/experimental/write_up_agent/__init__.py +0 -0
  41. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/experimental/write_up_agent/agent.py +0 -0
  42. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/experimental/write_up_agent/config.py +0 -0
  43. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/experimental/write_up_agent/examples/data.csv +0 -0
  44. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/experimental/write_up_agent/examples/example_usage.py +0 -0
  45. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/experimental/write_up_agent/schemas.py +0 -0
  46. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/experimental/write_up_agent/services/__init__.py +0 -0
  47. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/__init__.py +0 -0
  48. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/exceptions.py +0 -0
  49. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/service.py +0 -0
  50. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/utils.py +0 -0
  51. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/__init__.py +0 -0
  52. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/config.py +0 -0
  53. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/exceptions.py +0 -0
  54. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/config.py +0 -0
  55. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/system_prompt.j2 +0 -0
  56. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/user_prompt.j2 +0 -0
  57. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/service.py +0 -0
  58. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/__init__.py +0 -0
  59. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/default_template.j2 +0 -0
  60. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/exceptions.py +0 -0
  61. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/service.py +0 -0
  62. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/utils.py +0 -0
  63. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/experimental/write_up_agent/utils.py +0 -0
  64. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/feature_flags/schema.py +0 -0
  65. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/pydantic/rjsf_tags.py +0 -0
  66. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/pydantic_helpers.py +0 -0
  67. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/referencing.py +0 -0
  68. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/string_utilities.py +0 -0
  69. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/tests/test_referencing.py +0 -0
  70. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/tests/test_string_utilities.py +0 -0
  71. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/token/__init__.py +0 -0
  72. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/token/image_token_counting.py +0 -0
  73. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/token/token_counting.py +0 -0
  74. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/token/tokenizers/deepseek/tokenizer.json +0 -0
  75. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/token/tokenizers/qwen/tokenizer.json +0 -0
  76. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/utils/__init__.py +0 -0
  77. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/utils/files.py +0 -0
  78. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/utils/image/encode.py +0 -0
  79. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/utils/jinja/helpers.py +0 -0
  80. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/utils/jinja/render.py +0 -0
  81. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/utils/jinja/schema.py +0 -0
  82. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/utils/jinja/utils.py +0 -0
  83. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/utils/structured_output/__init__.py +0 -0
  84. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/utils/structured_output/schema.py +0 -0
  85. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/utils/write_configuration.py +0 -0
  86. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/validate_required_values.py +0 -0
  87. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/_common/validators.py +0 -0
  88. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/__init__.py +0 -0
  89. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/debug_info_manager/debug_info_manager.py +0 -0
  90. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/debug_info_manager/test/test_debug_info_manager.py +0 -0
  91. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/evaluation/config.py +0 -0
  92. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/__init__.py +0 -0
  93. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/system_prompt.j2 +0 -0
  94. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/user_prompt.j2 +0 -0
  95. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/evaluation/context_relevancy/schema.py +0 -0
  96. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/evaluation/context_relevancy/service.py +0 -0
  97. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/evaluation/evaluation_manager.py +0 -0
  98. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/evaluation/exception.py +0 -0
  99. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/evaluation/hallucination/constants.py +0 -0
  100. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/evaluation/hallucination/hallucination_evaluation.py +0 -0
  101. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/evaluation/hallucination/prompts/__init__.py +0 -0
  102. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/evaluation/hallucination/prompts/system_prompt.j2 +0 -0
  103. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/evaluation/hallucination/prompts/user_prompt.j2 +0 -0
  104. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/evaluation/hallucination/service.py +0 -0
  105. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/evaluation/hallucination/utils.py +0 -0
  106. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/evaluation/output_parser.py +0 -0
  107. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/evaluation/schemas.py +0 -0
  108. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/evaluation/tests/fixtures.py +0 -0
  109. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/evaluation/tests/test_config.py +0 -0
  110. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/evaluation/tests/test_context_relevancy_service.py +0 -0
  111. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/evaluation/tests/test_hallucination_constants.py +0 -0
  112. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/evaluation/tests/test_hallucination_utils.py +0 -0
  113. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/evaluation/tests/test_output_parser.py +0 -0
  114. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/evaluation/tests/test_prompt_loaders.py +0 -0
  115. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/evaluation/utils.py +0 -0
  116. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/feature_flags/__init__.py +0 -0
  117. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/feature_flags/feature_flags.py +0 -0
  118. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/history_manager/history_construction_with_contents.py +0 -0
  119. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/history_manager/history_manager.py +0 -0
  120. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/history_manager/loop_token_reducer.py +0 -0
  121. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/history_manager/utils.py +0 -0
  122. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/loop_runner/__init__.py +0 -0
  123. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/loop_runner/_iteration_handler_utils.py +0 -0
  124. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/loop_runner/_responses_iteration_handler_utils.py +0 -0
  125. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/loop_runner/_responses_stream_handler_utils.py +0 -0
  126. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/loop_runner/_stream_handler_utils.py +0 -0
  127. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/loop_runner/base.py +0 -0
  128. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/loop_runner/middleware/__init__.py +0 -0
  129. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/loop_runner/middleware/planning/__init__.py +0 -0
  130. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/loop_runner/middleware/planning/planning.py +0 -0
  131. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/loop_runner/middleware/planning/schema.py +0 -0
  132. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/loop_runner/runners/__init__.py +0 -0
  133. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/loop_runner/runners/basic.py +0 -0
  134. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/loop_runner/runners/mistral/__init__.py +0 -0
  135. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/loop_runner/runners/mistral/mistral_runner.py +0 -0
  136. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/loop_runner/runners/qwen/__init__.py +0 -0
  137. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/loop_runner/runners/qwen/helpers.py +0 -0
  138. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/loop_runner/runners/qwen/qwen_runner.py +0 -0
  139. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/message_log_manager/__init__.py +0 -0
  140. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/message_log_manager/service.py +0 -0
  141. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/postprocessor/postprocessor_manager.py +0 -0
  142. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/reference_manager/reference_manager.py +0 -0
  143. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/responses_api/__init__.py +0 -0
  144. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/responses_api/postprocessors/code_display.py +0 -0
  145. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/responses_api/postprocessors/generated_files.py +0 -0
  146. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/responses_api/stream_handler.py +0 -0
  147. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/short_term_memory_manager/persistent_short_term_memory_manager.py +0 -0
  148. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/thinking_manager/thinking_manager.py +0 -0
  149. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/tools/__init__.py +0 -0
  150. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/tools/a2a/__init__.py +0 -0
  151. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/tools/a2a/config.py +0 -0
  152. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/tools/a2a/evaluation/__init__.py +0 -0
  153. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/tools/a2a/evaluation/_utils.py +0 -0
  154. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/tools/a2a/evaluation/config.py +0 -0
  155. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/tools/a2a/evaluation/evaluator.py +0 -0
  156. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/tools/a2a/evaluation/summarization_user_message.j2 +0 -0
  157. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/tools/a2a/manager.py +0 -0
  158. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/tools/a2a/postprocessing/__init__.py +0 -0
  159. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/tools/a2a/postprocessing/_display_utils.py +0 -0
  160. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/tools/a2a/postprocessing/_ref_utils.py +0 -0
  161. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/tools/a2a/postprocessing/config.py +0 -0
  162. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/tools/a2a/postprocessing/display.py +0 -0
  163. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/tools/a2a/postprocessing/references.py +0 -0
  164. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display.py +0 -0
  165. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display_utils.py +0 -0
  166. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_ref_utils.py +0 -0
  167. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/tools/a2a/prompts.py +0 -0
  168. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/tools/a2a/response_watcher/__init__.py +0 -0
  169. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/tools/a2a/response_watcher/service.py +0 -0
  170. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/tools/a2a/tool/__init__.py +0 -0
  171. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/tools/a2a/tool/_memory.py +0 -0
  172. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/tools/a2a/tool/_schema.py +0 -0
  173. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/tools/a2a/tool/config.py +0 -0
  174. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/tools/a2a/tool/service.py +0 -0
  175. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/tools/a2a/tool/test/test_service_utils.py +0 -0
  176. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/tools/agent_chunks_hanlder.py +0 -0
  177. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/tools/config.py +0 -0
  178. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/tools/experimental/__init__.py +0 -0
  179. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/tools/experimental/open_file_tool/__init__.py +0 -0
  180. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/tools/experimental/open_file_tool/config.py +0 -0
  181. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/tools/experimental/open_file_tool/runtime.py +0 -0
  182. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/tools/experimental/open_file_tool/tool.py +0 -0
  183. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/tools/factory.py +0 -0
  184. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/tools/mcp/__init__.py +0 -0
  185. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/tools/mcp/manager.py +0 -0
  186. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/tools/mcp/models.py +0 -0
  187. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/tools/mcp/tool_wrapper.py +0 -0
  188. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/tools/openai_builtin/__init__.py +0 -0
  189. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/tools/openai_builtin/base.py +0 -0
  190. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/__init__.py +0 -0
  191. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/config.py +0 -0
  192. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/__init__.py +0 -0
  193. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/code_display.py +0 -0
  194. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/schemas.py +0 -0
  195. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/service.py +0 -0
  196. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/tools/openai_builtin/manager.py +0 -0
  197. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/tools/schemas.py +0 -0
  198. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/tools/test/test_mcp_manager.py +0 -0
  199. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/tools/test/test_tool_progress_reporter.py +0 -0
  200. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/tools/tool.py +0 -0
  201. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/tools/tool_manager.py +0 -0
  202. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/tools/tool_progress_reporter.py +0 -0
  203. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/tools/utils/__init__.py +0 -0
  204. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/tools/utils/source_handling/__init__.py +0 -0
  205. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/tools/utils/source_handling/schema.py +0 -0
  206. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/tools/utils/source_handling/source_formatting.py +0 -0
  207. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic/tools/utils/source_handling/tests/test_source_formatting.py +0 -0
  208. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic_table/__init__.py +0 -0
  209. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic_table/schemas.py +0 -0
  210. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/agentic_table/service.py +0 -0
  211. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/app/__init__.py +0 -0
  212. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/app/dev_util.py +0 -0
  213. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/app/fast_api_factory.py +0 -0
  214. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/app/init_logging.py +0 -0
  215. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/app/init_sdk.py +0 -0
  216. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/app/performance/async_tasks.py +0 -0
  217. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/app/performance/async_wrapper.py +0 -0
  218. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/app/schemas.py +0 -0
  219. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/app/unique_settings.py +0 -0
  220. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/app/verification.py +0 -0
  221. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/app/webhook.py +0 -0
  222. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/chat/__init__.py +0 -0
  223. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/chat/cancellation.py +0 -0
  224. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/chat/constants.py +0 -0
  225. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/chat/deprecated/service.py +0 -0
  226. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/chat/functions.py +0 -0
  227. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/chat/rendering.py +0 -0
  228. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/chat/responses_api.py +0 -0
  229. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/chat/schemas.py +0 -0
  230. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/chat/service.py +0 -0
  231. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/chat/state.py +0 -0
  232. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/chat/utils.py +0 -0
  233. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/content/__init__.py +0 -0
  234. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/content/constants.py +0 -0
  235. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/content/functions.py +0 -0
  236. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/content/schemas.py +0 -0
  237. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/content/service.py +0 -0
  238. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/content/smart_rules.py +0 -0
  239. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/content/utils.py +0 -0
  240. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/data_extraction/README.md +0 -0
  241. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/data_extraction/__init__.py +0 -0
  242. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/data_extraction/augmented/__init__.py +0 -0
  243. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/data_extraction/augmented/service.py +0 -0
  244. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/data_extraction/base.py +0 -0
  245. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/data_extraction/basic/__init__.py +0 -0
  246. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/data_extraction/basic/config.py +0 -0
  247. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/data_extraction/basic/prompt.py +0 -0
  248. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/data_extraction/basic/service.py +0 -0
  249. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/elicitation/__init__.py +0 -0
  250. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/elicitation/constants.py +0 -0
  251. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/elicitation/exceptions.py +0 -0
  252. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/elicitation/functions.py +0 -0
  253. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/elicitation/schemas.py +0 -0
  254. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/elicitation/service.py +0 -0
  255. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/embedding/__init__.py +0 -0
  256. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/embedding/constants.py +0 -0
  257. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/embedding/functions.py +0 -0
  258. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/embedding/schemas.py +0 -0
  259. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/embedding/service.py +0 -0
  260. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/embedding/utils.py +0 -0
  261. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/framework_utilities/__init__.py +0 -0
  262. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/framework_utilities/langchain/__init__.py +0 -0
  263. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/framework_utilities/langchain/client.py +0 -0
  264. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/framework_utilities/langchain/history.py +0 -0
  265. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/framework_utilities/openai/__init__.py +0 -0
  266. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/framework_utilities/openai/client.py +0 -0
  267. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/framework_utilities/openai/message_builder.py +0 -0
  268. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/framework_utilities/utils.py +0 -0
  269. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/language_model/__init__.py +0 -0
  270. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/language_model/_responses_api_utils.py +0 -0
  271. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/language_model/builder.py +0 -0
  272. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/language_model/constants.py +0 -0
  273. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/language_model/default_language_model.py +0 -0
  274. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/language_model/functions.py +0 -0
  275. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/language_model/infos.py +0 -0
  276. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/language_model/prompt.py +0 -0
  277. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/language_model/reference.py +0 -0
  278. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/language_model/schemas.py +0 -0
  279. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/language_model/service.py +0 -0
  280. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/language_model/stream_transform.py +0 -0
  281. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/language_model/utils.py +0 -0
  282. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/monitoring/__init__.py +0 -0
  283. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/monitoring/middleware.py +0 -0
  284. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/monitoring/registry.py +0 -0
  285. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/protocols/support.py +0 -0
  286. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/services/__init__.py +0 -0
  287. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/services/chat_service.py +0 -0
  288. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/services/factory.py +0 -0
  289. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/services/knowledge_base.py +0 -0
  290. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/short_term_memory/__init__.py +0 -0
  291. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/short_term_memory/constants.py +0 -0
  292. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/short_term_memory/functions.py +0 -0
  293. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/short_term_memory/schemas.py +0 -0
  294. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/short_term_memory/service.py +0 -0
  295. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/smart_rules/__init__.py +0 -0
  296. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/unique_toolkit/smart_rules/compile.py +0 -0
  297. {unique_toolkit-1.70.4 → unique_toolkit-1.70.6}/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.4
3
+ Version: 1.70.6
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.4"
3
+ version = "1.70.6"
4
4
  description = ""
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -9,7 +9,6 @@ from typing import NamedTuple, override
9
9
 
10
10
  import httpx
11
11
  from openai import AsyncOpenAI
12
- from openai.types.responses import ResponseCodeInterpreterToolCall
13
12
  from openai.types.responses.response_output_text import AnnotationContainerFileCitation
14
13
  from pydantic import BaseModel, Field, RootModel
15
14
  from pydantic.json_schema import SkipJsonSchema
@@ -587,7 +586,12 @@ class DisplayCodeInterpreterFilesPostProcessor(
587
586
  missed_files.append(filename)
588
587
 
589
588
  is_html_rendered = is_html
590
- if replaced and not (is_image or is_html_rendered or fence_ff_on):
589
+ has_superscript = f"<sup>{ref_number}</sup>" in loop_response.message.text
590
+ if (
591
+ replaced
592
+ and has_superscript
593
+ and not (is_image or is_html_rendered or fence_ff_on)
594
+ ):
591
595
  loop_response.message.references.append(
592
596
  ContentReference(
593
597
  sequence_number=ref_number,
@@ -613,7 +617,16 @@ class DisplayCodeInterpreterFilesPostProcessor(
613
617
  len(code_blocks),
614
618
  [f.filename for b in code_blocks for f in b.files],
615
619
  )
616
- _warn_unmatched_code_blocks(self._content_map, code_blocks)
620
+ unmatched_blocks = _warn_unmatched_code_blocks(
621
+ self._content_map, code_blocks
622
+ )
623
+ if unmatched_blocks:
624
+ self._log.info(
625
+ "Fence path: %d file(s) have no code-block match and will appear "
626
+ "as plain download links: %s",
627
+ len(unmatched_blocks),
628
+ list(unmatched_blocks),
629
+ )
617
630
  text_before = loop_response.message.text
618
631
  loop_response.message.text = _inject_code_execution_fences(
619
632
  loop_response.message.text,
@@ -625,19 +638,27 @@ class DisplayCodeInterpreterFilesPostProcessor(
625
638
  self._log.info("Fence injection modified the message text")
626
639
 
627
640
  if self._orphan_code_blocks:
628
- fence_id = _get_next_fence_id(loop_response.message.text)
629
- orphan_fences = _build_orphan_fences(self._orphan_code_blocks, fence_id)
630
- loop_response.message.text = (
631
- loop_response.message.text.rstrip() + "\n\n" + orphan_fences
632
- )
641
+ for block in self._orphan_code_blocks:
642
+ for file in block.files:
643
+ loop_response.message.references.append(
644
+ ContentReference(
645
+ sequence_number=ref_number,
646
+ source_id=file.content_id,
647
+ source="node-ingestion-chunks",
648
+ url=f"unique://content/{file.content_id}",
649
+ name=file.filename,
650
+ )
651
+ )
652
+ ref_number += 1
633
653
  changed = True
634
654
  self._log.info(
635
- "Appended %d orphan fence(s)", len(self._orphan_code_blocks)
655
+ "Added %d orphan code block(s) to message references",
656
+ len(self._orphan_code_blocks),
636
657
  )
637
658
 
638
659
  _warn_missing_content_ids(loop_response.message.text, self._content_map)
639
660
  loop_response.message.text, dangling_replaced = _replace_dangling_sandbox_links(
640
- loop_response.message.text, self._config.file_download_failed_message
661
+ loop_response.message.text
641
662
  )
642
663
  changed |= dangling_replaced
643
664
  if dangling_replaced:
@@ -949,13 +970,12 @@ class DisplayCodeInterpreterFilesPostProcessor(
949
970
  async def _upload_orphan_code_as_txt(
950
971
  self, loop_response: ResponsesLanguageModelStreamResponse
951
972
  ) -> list[CodeInterpreterBlock]:
952
- """Upload stdout (or code) from calls that produced no container files as .txt artifacts.
973
+ """Upload source **code** from calls that produced no container files as .txt artifacts.
953
974
 
954
975
  When code interpreter runs but generates no files or images, the response
955
976
  text has no sandbox links for fence injection to hook onto. This method
956
- converts those "orphan" calls into downloadable .txt files so the fence
957
- postprocessor can attach a fileWithSource component and the new Code
958
- Execution UI is shown instead of the legacy <details> block.
977
+ converts those "orphan" calls into downloadable .txt files (the executed
978
+ code, not stdout) so the postprocessor can attach a reference for download.
959
979
 
960
980
  Called only when the fence feature flag is enabled. Skipped entirely if
961
981
  any container files were produced (normal fencing handles those).
@@ -976,13 +996,9 @@ class DisplayCodeInterpreterFilesPostProcessor(
976
996
  if not call.code:
977
997
  continue
978
998
 
979
- # Code interpreter logs are only present on each code_interpreter_call when
980
- # the create/retrieve request sets include=["code_interpreter_call.outputs"]
981
- # (see OpenAI Responses API `include` and manual examples in
982
- # docs/manual_examples_for_docs/code_execution_openai_client.py). If
983
- # `outputs` is omitted, call.outputs is null and we fall back to the
984
- # source code as the downloadable txt.
985
- txt_content = _collect_stdout(call) or call.code
999
+ # Always persist the executed source as the downloadable .txt (not stdout),
1000
+ # so the attachment matches what ran in the sandbox.
1001
+ txt_content = call.code
986
1002
  filename = f"code_{i + 1}.txt" if use_numeric_suffix else "code.txt"
987
1003
 
988
1004
  try:
@@ -1020,38 +1036,6 @@ class DisplayCodeInterpreterFilesPostProcessor(
1020
1036
  return orphan_blocks
1021
1037
 
1022
1038
 
1023
- def _collect_stdout(call: ResponseCodeInterpreterToolCall) -> str:
1024
- """Collect all stdout logs from a code interpreter call's outputs."""
1025
- if not call.outputs:
1026
- return ""
1027
- return "\n".join(output.logs for output in call.outputs if output.type == "logs")
1028
-
1029
-
1030
- def _get_next_fence_id(text: str) -> int:
1031
- """Return the next available fence id by scanning existing fences in the text."""
1032
- existing = re.findall(r"````(?:imgWithSource|fileWithSource)\(id='(\d+)'", text)
1033
- if not existing:
1034
- return 1
1035
- return max(int(fid) for fid in existing) + 1
1036
-
1037
-
1038
- def _build_orphan_fences(
1039
- blocks: list[CodeInterpreterBlock], start_fence_id: int
1040
- ) -> str:
1041
- """Build concatenated fence text for orphan code blocks.
1042
-
1043
- Orphan blocks have no inline ref in the message text, so their fences are
1044
- appended directly rather than injected via pattern replacement.
1045
- """
1046
- fence_id = start_fence_id
1047
- parts: list[str] = []
1048
- for block in blocks:
1049
- for file in block.files:
1050
- parts.append(_build_file_fence(file, block.code, fence_id))
1051
- fence_id += 1
1052
- return "\n".join(parts)
1053
-
1054
-
1055
1039
  def _get_file_type(filename: str) -> CodeInterpreterFileType:
1056
1040
  mime = guess_type(filename)[0] or ""
1057
1041
  if mime.startswith("image/"):
@@ -1383,33 +1367,41 @@ def _warn_missing_content_ids(text: str, content_map: dict[str, str | None]) ->
1383
1367
  # so the entire `[label](sandbox://...)` token can be replaced rather than just the URL.
1384
1368
  _SANDBOX_MARKDOWN_LINK_RE = re.compile(r"!?\[.*?\]\(sandbox:/mnt/data/\S+?\)")
1385
1369
 
1370
+ # Extracts the bare filename from a sandbox URL like `sandbox:/mnt/data/foo.csv`.
1371
+ _SANDBOX_FILENAME_RE = re.compile(r"sandbox:/mnt/data/([^)\s]+)")
1372
+
1386
1373
 
1387
- def _replace_dangling_sandbox_links(text: str, error_message: str) -> tuple[str, bool]:
1388
- """Replace any remaining sandbox:/mnt/data/ markdown links with an error message.
1374
+ def _replace_dangling_sandbox_links(text: str) -> tuple[str, bool]:
1375
+ """Replace any remaining sandbox:/mnt/data/ markdown links with a per-file notice.
1389
1376
 
1390
1377
  A dangling link means either the LLM hallucinated a file reference (the sandbox
1391
1378
  link appears in the text but no matching container file annotation was emitted by
1392
1379
  OpenAI), or the link format did not match the expected regex in stage-1. In both
1393
1380
  cases the user would see a broken link; this function replaces each such link with
1394
- the configured error message and logs a warning so the incident is visible in logs.
1381
+ an actionable message that names the specific file, and logs a warning so the
1382
+ incident is visible in production logs.
1395
1383
  """
1396
- matches = _SANDBOX_MARKDOWN_LINK_RE.findall(text)
1397
- if not matches:
1384
+ if not _SANDBOX_MARKDOWN_LINK_RE.search(text):
1398
1385
  return text, False
1399
- for match in matches:
1386
+
1387
+ def _replacement(m: re.Match[str]) -> str:
1388
+ filename_match = _SANDBOX_FILENAME_RE.search(m.group())
1389
+ filename = filename_match.group(1) if filename_match else "the file"
1400
1390
  logger.warning(
1401
1391
  "Dangling sandbox link found in final text: '%s'. "
1402
1392
  "The file was either never uploaded or the link format did not match "
1403
- "the expected pattern — replacing with error message.",
1404
- match,
1393
+ "the expected pattern — replacing with per-file notice.",
1394
+ m.group(),
1405
1395
  )
1406
- return _SANDBOX_MARKDOWN_LINK_RE.sub(error_message, text), True
1396
+ return f"⚠️ The file *{filename}* could not be retrieved. You can ask me to regenerate it."
1397
+
1398
+ return _SANDBOX_MARKDOWN_LINK_RE.sub(_replacement, text), True
1407
1399
 
1408
1400
 
1409
1401
  def _warn_unmatched_code_blocks(
1410
1402
  content_map: dict[str, str | None],
1411
1403
  code_blocks: list[CodeInterpreterBlock],
1412
- ) -> None:
1404
+ ) -> dict[str, str]:
1413
1405
  """Warn for files that were uploaded but could not be matched to any code block.
1414
1406
 
1415
1407
  When the fence feature flag is on, every uploaded file should map to a code block
@@ -1417,8 +1409,13 @@ def _warn_unmatched_code_blocks(
1417
1409
  matched (e.g. the LLM used a variable for the output path rather than a literal
1418
1410
  string) it falls back to a plain unique://content/ link with no code context.
1419
1411
  The user can still download it, but the frontend artifact UI will not be shown.
1412
+
1413
+ Returns:
1414
+ Mapping of filename → content_id for every file that could not be matched
1415
+ to a code block. Callers may use this to inject additional fallback links.
1420
1416
  """
1421
1417
  fenced_filenames = {f.filename for block in code_blocks for f in block.files}
1418
+ unmatched: dict[str, str] = {}
1422
1419
  for filename, content_id in content_map.items():
1423
1420
  if content_id is None:
1424
1421
  continue
@@ -1434,6 +1431,8 @@ def _warn_unmatched_code_blocks(
1434
1431
  content_id,
1435
1432
  filename,
1436
1433
  )
1434
+ unmatched[filename] = content_id
1435
+ return unmatched
1437
1436
 
1438
1437
 
1439
1438
  def _get_next_ref_number(references: list[ContentReference] | None) -> int:
@@ -1474,11 +1473,12 @@ def _replace_container_image_citation(
1474
1473
  if not re.search(image_markdown, text):
1475
1474
  logger.warning(
1476
1475
  "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.",
1476
+ "file was uploaded but the LLM did not reference it — appending fallback link.",
1478
1477
  filename,
1479
1478
  content_id,
1480
1479
  )
1481
- return text, False
1480
+ fallback = f"\n\n📎 [{filename}](unique://content/{content_id})"
1481
+ return text + fallback, True
1482
1482
 
1483
1483
  logger.info("Inserting image citation for '%s'", filename)
1484
1484
  return re.sub(
@@ -1497,11 +1497,12 @@ def _replace_container_html_citation(
1497
1497
  if not re.search(html_markdown, text):
1498
1498
  logger.warning(
1499
1499
  "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.",
1500
+ "file was uploaded but the LLM did not reference it — appending fallback link.",
1501
1501
  filename,
1502
1502
  content_id,
1503
1503
  )
1504
- return text, False
1504
+ fallback = f"\n\n📎 [{filename}](unique://content/{content_id})"
1505
+ return text + fallback, True
1505
1506
 
1506
1507
  logger.info("Inserting HTML rendering block for '%s'", filename)
1507
1508
  block = f"```HtmlRendering\n800px\n600px\n\nunique://content/{content_id}\n\n```"
@@ -1554,11 +1555,12 @@ def _replace_container_file_citation(
1554
1555
  if not re.search(file_markdown, text):
1555
1556
  logger.warning(
1556
1557
  "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.",
1558
+ "file was uploaded but the LLM did not reference it — appending fallback link.",
1558
1559
  filename,
1559
1560
  content_id,
1560
1561
  )
1561
- return text, False
1562
+ fallback = f"\n\n📎 [{filename}](unique://content/{content_id})"
1563
+ return text + fallback, True
1562
1564
 
1563
1565
  logger.info("Displaying file %s", filename)
1564
1566
  replacement = (