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