unique_toolkit 2026.38.0__tar.gz → 2026.38.0.dev0__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 (428) hide show
  1. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/PKG-INFO +2 -2
  2. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/pyproject.toml +2 -2
  3. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/utils/files.py +4 -36
  4. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/experimental/ask_user_tool/config.py +5 -24
  5. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/experimental/ask_user_tool/tool.py +1 -10
  6. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/artifacts.py +5 -7
  7. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/generated_files.py +21 -127
  8. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/schemas.py +0 -10
  9. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic_table/schemas.py +0 -10
  10. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/chat/responses_api.py +7 -42
  11. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/components/content_tree/functions.py +36 -194
  12. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/components/internal_search/base/service.py +4 -18
  13. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/_model_params.py +9 -15
  14. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/resources/feature_flags/_ttl_cache.py +4 -13
  15. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/language_model/infos.py +4 -166
  16. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/language_model/model_costs.py +5 -59
  17. unique_toolkit-2026.38.0/unique_toolkit/monitoring/memory.py +0 -195
  18. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/README.md +0 -0
  19. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/__init__.py +0 -0
  20. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/__init__.py +0 -0
  21. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/_base_service.py +0 -0
  22. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/_time_utils.py +0 -0
  23. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/api_calling/human_verification_manager.py +0 -0
  24. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/base_model_type_attribute.py +0 -0
  25. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/chunk_relevancy_sorter/config.py +0 -0
  26. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/chunk_relevancy_sorter/exception.py +0 -0
  27. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/chunk_relevancy_sorter/schemas.py +0 -0
  28. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/chunk_relevancy_sorter/service.py +0 -0
  29. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/chunk_relevancy_sorter/tests/test_service.py +0 -0
  30. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/config_checker/README.md +0 -0
  31. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/config_checker/__init__.py +0 -0
  32. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/config_checker/__main__.py +0 -0
  33. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/config_checker/cli.py +0 -0
  34. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/config_checker/differ.py +0 -0
  35. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/config_checker/exporter.py +0 -0
  36. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/config_checker/models.py +0 -0
  37. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/config_checker/registry.py +0 -0
  38. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/config_checker/validator.py +0 -0
  39. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/default_language_model.py +0 -0
  40. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/docx_generator/__init__.py +0 -0
  41. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/docx_generator/config.py +0 -0
  42. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/docx_generator/pandoc_converter.py +0 -0
  43. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/docx_generator/schemas.py +0 -0
  44. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/docx_generator/service.py +0 -0
  45. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/docx_generator/template/Doc Template.docx +0 -0
  46. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/endpoint_builder.py +0 -0
  47. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/endpoint_requestor.py +0 -0
  48. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/event_bus.py +0 -0
  49. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/exception.py +0 -0
  50. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/execution.py +0 -0
  51. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/experimental/endpoint_builder.py +0 -0
  52. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/experimental/endpoint_requestor.py +0 -0
  53. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/README.md +0 -0
  54. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/__init__.py +0 -0
  55. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/agent.py +0 -0
  56. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/config.py +0 -0
  57. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/examples/data.csv +0 -0
  58. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/examples/example_usage.py +0 -0
  59. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/schemas.py +0 -0
  60. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/__init__.py +0 -0
  61. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/__init__.py +0 -0
  62. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/exceptions.py +0 -0
  63. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/service.py +0 -0
  64. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/utils.py +0 -0
  65. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/__init__.py +0 -0
  66. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/config.py +0 -0
  67. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/exceptions.py +0 -0
  68. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/config.py +0 -0
  69. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/system_prompt.j2 +0 -0
  70. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/user_prompt.j2 +0 -0
  71. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/service.py +0 -0
  72. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/__init__.py +0 -0
  73. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/default_template.j2 +0 -0
  74. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/exceptions.py +0 -0
  75. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/service.py +0 -0
  76. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/utils.py +0 -0
  77. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/utils.py +0 -0
  78. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/feature_flags/schema.py +0 -0
  79. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/metadata_filter_scope.py +0 -0
  80. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/pydantic/rjsf_tags.py +0 -0
  81. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/pydantic_helpers.py +0 -0
  82. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/referencing.py +0 -0
  83. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/string_utilities.py +0 -0
  84. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/tests/test_referencing.py +0 -0
  85. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/tests/test_string_utilities.py +0 -0
  86. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/token/__init__.py +0 -0
  87. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/token/image_token_counting.py +0 -0
  88. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/token/token_counting.py +0 -0
  89. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/token/tokenizers/deepseek/tokenizer.json +0 -0
  90. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/token/tokenizers/qwen/tokenizer.json +0 -0
  91. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/utils/__init__.py +0 -0
  92. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/utils/image/encode.py +0 -0
  93. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/utils/jinja/helpers.py +0 -0
  94. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/utils/jinja/render.py +0 -0
  95. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/utils/jinja/schema.py +0 -0
  96. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/utils/jinja/utils.py +0 -0
  97. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/utils/structured_output/__init__.py +0 -0
  98. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/utils/structured_output/schema.py +0 -0
  99. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/utils/write_configuration.py +0 -0
  100. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/validate_required_values.py +0 -0
  101. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/validators.py +0 -0
  102. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/__init__.py +0 -0
  103. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/debug_info_manager/debug_info_manager.py +0 -0
  104. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/debug_info_manager/test/test_debug_info_manager.py +0 -0
  105. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/evaluation/config.py +0 -0
  106. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/__init__.py +0 -0
  107. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/system_prompt.j2 +0 -0
  108. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/user_prompt.j2 +0 -0
  109. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/evaluation/context_relevancy/schema.py +0 -0
  110. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/evaluation/context_relevancy/service.py +0 -0
  111. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/evaluation/evaluation_manager.py +0 -0
  112. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/evaluation/exception.py +0 -0
  113. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/evaluation/hallucination/constants.py +0 -0
  114. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/evaluation/hallucination/hallucination_evaluation.py +0 -0
  115. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/evaluation/hallucination/prompts/__init__.py +0 -0
  116. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/evaluation/hallucination/prompts/system_prompt.j2 +0 -0
  117. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/evaluation/hallucination/prompts/user_prompt.j2 +0 -0
  118. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/evaluation/hallucination/service.py +0 -0
  119. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/evaluation/hallucination/utils.py +0 -0
  120. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/evaluation/output_parser.py +0 -0
  121. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/evaluation/schemas.py +0 -0
  122. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/evaluation/tests/fixtures.py +0 -0
  123. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/evaluation/tests/test_config.py +0 -0
  124. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/evaluation/tests/test_context_relevancy_service.py +0 -0
  125. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/evaluation/tests/test_hallucination_constants.py +0 -0
  126. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/evaluation/tests/test_hallucination_external_context.py +0 -0
  127. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/evaluation/tests/test_hallucination_utils.py +0 -0
  128. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/evaluation/tests/test_output_parser.py +0 -0
  129. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/evaluation/tests/test_prompt_loaders.py +0 -0
  130. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/evaluation/utils.py +0 -0
  131. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/feature_flags/__init__.py +0 -0
  132. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/feature_flags/feature_flags.py +0 -0
  133. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/history_manager/history_construction_with_contents.py +0 -0
  134. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/history_manager/history_manager.py +0 -0
  135. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/history_manager/loop_token_reducer.py +0 -0
  136. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/history_manager/settings.py +0 -0
  137. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/history_manager/utils.py +0 -0
  138. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/loop_runner/__init__.py +0 -0
  139. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/loop_runner/_iteration_handler_utils.py +0 -0
  140. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/loop_runner/_responses_iteration_handler_utils.py +0 -0
  141. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/loop_runner/_responses_stream_handler_utils.py +0 -0
  142. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/loop_runner/_stream_handler_utils.py +0 -0
  143. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/loop_runner/base.py +0 -0
  144. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/loop_runner/middleware/__init__.py +0 -0
  145. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/loop_runner/middleware/planning/__init__.py +0 -0
  146. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/loop_runner/middleware/planning/planning.py +0 -0
  147. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/loop_runner/middleware/planning/schema.py +0 -0
  148. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/loop_runner/runners/__init__.py +0 -0
  149. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/loop_runner/runners/basic.py +0 -0
  150. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/loop_runner/runners/mistral/__init__.py +0 -0
  151. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/loop_runner/runners/mistral/mistral_runner.py +0 -0
  152. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/loop_runner/runners/qwen/__init__.py +0 -0
  153. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/loop_runner/runners/qwen/helpers.py +0 -0
  154. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/loop_runner/runners/qwen/qwen_runner.py +0 -0
  155. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/message_log_manager/__init__.py +0 -0
  156. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/message_log_manager/service.py +0 -0
  157. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/message_log_order.py +0 -0
  158. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/postprocessor/postprocessor_manager.py +0 -0
  159. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/reference_manager/reference_manager.py +0 -0
  160. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/reference_manager/tests/test_external_context.py +0 -0
  161. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/responses_api/__init__.py +0 -0
  162. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/responses_api/postprocessors/code_display.py +0 -0
  163. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/responses_api/postprocessors/generated_files.py +0 -0
  164. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/responses_api/stream_handler.py +0 -0
  165. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/short_term_memory_manager/persistent_short_term_memory_manager.py +0 -0
  166. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/thinking_manager/thinking_manager.py +0 -0
  167. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/__init__.py +0 -0
  168. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/a2a/__init__.py +0 -0
  169. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/a2a/config.py +0 -0
  170. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/a2a/evaluation/__init__.py +0 -0
  171. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/a2a/evaluation/_utils.py +0 -0
  172. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/a2a/evaluation/config.py +0 -0
  173. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/a2a/evaluation/evaluator.py +0 -0
  174. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/a2a/evaluation/summarization_user_message.j2 +0 -0
  175. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/a2a/manager.py +0 -0
  176. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/a2a/postprocessing/__init__.py +0 -0
  177. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/a2a/postprocessing/_display_utils.py +0 -0
  178. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/a2a/postprocessing/_ref_utils.py +0 -0
  179. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/a2a/postprocessing/config.py +0 -0
  180. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/a2a/postprocessing/display.py +0 -0
  181. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/a2a/postprocessing/references.py +0 -0
  182. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display.py +0 -0
  183. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display_utils.py +0 -0
  184. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_ref_utils.py +0 -0
  185. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_references.py +0 -0
  186. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/a2a/prompts.py +0 -0
  187. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/a2a/response_watcher/__init__.py +0 -0
  188. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/a2a/response_watcher/service.py +0 -0
  189. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/a2a/tool/__init__.py +0 -0
  190. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/a2a/tool/_memory.py +0 -0
  191. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/a2a/tool/_schema.py +0 -0
  192. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/a2a/tool/config.py +0 -0
  193. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/a2a/tool/service.py +0 -0
  194. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/a2a/tool/test/test_service_utils.py +0 -0
  195. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/agent_chunks_hanlder.py +0 -0
  196. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/config.py +0 -0
  197. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/experimental/__init__.py +0 -0
  198. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/experimental/ask_user_tool/__init__.py +0 -0
  199. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/experimental/open_file_tool/__init__.py +0 -0
  200. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/experimental/open_file_tool/config.py +0 -0
  201. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/experimental/open_file_tool/runtime.py +0 -0
  202. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/experimental/open_file_tool/tool.py +0 -0
  203. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/experimental/retrieve_search_scope_tool/__init__.py +0 -0
  204. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/experimental/retrieve_search_scope_tool/config.py +0 -0
  205. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/experimental/retrieve_search_scope_tool/tool.py +0 -0
  206. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/experimental/todo/__init__.py +0 -0
  207. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/experimental/todo/config.py +0 -0
  208. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/experimental/todo/prompts/__init__.py +0 -0
  209. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/experimental/todo/prompts/execution_reminder.j2 +0 -0
  210. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/experimental/todo/prompts/system_prompt.j2 +0 -0
  211. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/experimental/todo/prompts/tool_description.j2 +0 -0
  212. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/experimental/todo/prompts/verification_nudge.j2 +0 -0
  213. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/experimental/todo/schemas.py +0 -0
  214. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/experimental/todo/service.py +0 -0
  215. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/factory.py +0 -0
  216. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/mcp/__init__.py +0 -0
  217. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/mcp/manager.py +0 -0
  218. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/mcp/models.py +0 -0
  219. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/mcp/tool_wrapper.py +0 -0
  220. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/names.py +0 -0
  221. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/__init__.py +0 -0
  222. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/base.py +0 -0
  223. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/__init__.py +0 -0
  224. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/activator/__init__.py +0 -0
  225. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/activator/config.py +0 -0
  226. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/activator/service.py +0 -0
  227. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/builder/__init__.py +0 -0
  228. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/builder/_container.py +0 -0
  229. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/builder/_files.py +0 -0
  230. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/builder/_memory.py +0 -0
  231. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/builder/builder.py +0 -0
  232. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/config.py +0 -0
  233. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/__init__.py +0 -0
  234. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/code_display.py +0 -0
  235. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/office_preview.py +0 -0
  236. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/tool/__init__.py +0 -0
  237. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/tool/config.py +0 -0
  238. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/tool/service.py +0 -0
  239. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/manager.py +0 -0
  240. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/run_context.py +0 -0
  241. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/schemas.py +0 -0
  242. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/test/test_mcp_manager.py +0 -0
  243. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/test/test_tool_progress_reporter.py +0 -0
  244. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/tool.py +0 -0
  245. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/tool_manager.py +0 -0
  246. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/tool_progress_reporter.py +0 -0
  247. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/utils/__init__.py +0 -0
  248. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/utils/source_handling/__init__.py +0 -0
  249. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/utils/source_handling/schema.py +0 -0
  250. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/utils/source_handling/source_formatting.py +0 -0
  251. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/utils/source_handling/tests/test_source_formatting.py +0 -0
  252. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic_table/__init__.py +0 -0
  253. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic_table/service.py +0 -0
  254. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic_table/synthetic_chat_event.py +0 -0
  255. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/app/__init__.py +0 -0
  256. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/app/chat_event_filter_options_settings.py +0 -0
  257. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/app/dev_util.py +0 -0
  258. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/app/fast_api_factory.py +0 -0
  259. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/app/feature_flags.py +0 -0
  260. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/app/find_env_file.py +0 -0
  261. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/app/init_logging.py +0 -0
  262. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/app/init_sdk.py +0 -0
  263. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/app/performance/async_tasks.py +0 -0
  264. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/app/performance/async_wrapper.py +0 -0
  265. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/app/schemas.py +0 -0
  266. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/app/unique_settings.py +0 -0
  267. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/app/verification.py +0 -0
  268. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/app/webhook.py +0 -0
  269. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/chat/__init__.py +0 -0
  270. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/chat/cancellation.py +0 -0
  271. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/chat/constants.py +0 -0
  272. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/chat/deprecated/__init__.py +0 -0
  273. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/chat/deprecated/service.py +0 -0
  274. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/chat/functions.py +0 -0
  275. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/chat/rendering.py +0 -0
  276. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/chat/schemas.py +0 -0
  277. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/chat/service.py +0 -0
  278. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/chat/state.py +0 -0
  279. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/chat/utils.py +0 -0
  280. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/content/__init__.py +0 -0
  281. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/content/constants.py +0 -0
  282. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/content/functions.py +0 -0
  283. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/content/schemas.py +0 -0
  284. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/content/service.py +0 -0
  285. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/content/smart_rules.py +0 -0
  286. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/content/utils.py +0 -0
  287. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/data_extraction/README.md +0 -0
  288. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/data_extraction/__init__.py +0 -0
  289. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/data_extraction/augmented/__init__.py +0 -0
  290. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/data_extraction/augmented/service.py +0 -0
  291. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/data_extraction/base.py +0 -0
  292. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/data_extraction/basic/__init__.py +0 -0
  293. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/data_extraction/basic/config.py +0 -0
  294. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/data_extraction/basic/prompt.py +0 -0
  295. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/data_extraction/basic/service.py +0 -0
  296. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/elicitation/__init__.py +0 -0
  297. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/elicitation/constants.py +0 -0
  298. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/elicitation/exceptions.py +0 -0
  299. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/elicitation/functions.py +0 -0
  300. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/elicitation/schemas.py +0 -0
  301. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/elicitation/service.py +0 -0
  302. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/embedding/__init__.py +0 -0
  303. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/embedding/constants.py +0 -0
  304. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/embedding/functions.py +0 -0
  305. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/embedding/schemas.py +0 -0
  306. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/embedding/service.py +0 -0
  307. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/embedding/utils.py +0 -0
  308. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/README.md +0 -0
  309. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/__init__.py +0 -0
  310. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/_internal/__init__.py +0 -0
  311. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/_internal/streaming/__init__.py +0 -0
  312. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/_internal/streaming/common.py +0 -0
  313. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/_internal/streaming/pattern_replacer.py +0 -0
  314. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/components/__init__.py +0 -0
  315. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/components/_base.py +0 -0
  316. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/components/content_tree/__init__.py +0 -0
  317. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/components/content_tree/schemas.py +0 -0
  318. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/components/content_tree/service.py +0 -0
  319. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/components/internal_search/__init__.py +0 -0
  320. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/components/internal_search/base/__init__.py +0 -0
  321. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/components/internal_search/base/config.py +0 -0
  322. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/components/internal_search/base/schemas.py +0 -0
  323. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/components/internal_search/base/utils.py +0 -0
  324. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/components/internal_search/chat/__init__.py +0 -0
  325. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/components/internal_search/chat/config.py +0 -0
  326. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/components/internal_search/chat/schemas.py +0 -0
  327. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/components/internal_search/chat/service.py +0 -0
  328. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/components/internal_search/knowledge_base/__init__.py +0 -0
  329. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/components/internal_search/knowledge_base/config.py +0 -0
  330. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/components/internal_search/knowledge_base/schemas.py +0 -0
  331. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/components/internal_search/knowledge_base/service.py +0 -0
  332. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/components/internal_search/post_processing/__init__.py +0 -0
  333. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/components/internal_search/post_processing/config.py +0 -0
  334. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/components/internal_search/post_processing/service.py +0 -0
  335. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/content_tree/__init__.py +0 -0
  336. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/identity/__init__.py +0 -0
  337. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/integrations/__init__.py +0 -0
  338. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/integrations/openai/__init__.py +0 -0
  339. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/__init__.py +0 -0
  340. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/__init__.py +0 -0
  341. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/_async_bridge.py +0 -0
  342. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/__init__.py +0 -0
  343. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/complete_with_references.py +0 -0
  344. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/stream_event_router.py +0 -0
  345. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/text_event_handler.py +0 -0
  346. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/tool_call_event_handler.py +0 -0
  347. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/events.py +0 -0
  348. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/protocols/__init__.py +0 -0
  349. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/protocols/chat_completions.py +0 -0
  350. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/protocols/responses.py +0 -0
  351. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/__init__.py +0 -0
  352. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/code_interpreter_event_handler.py +0 -0
  353. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/complete_with_references.py +0 -0
  354. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/completed_event_handler.py +0 -0
  355. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/stream_event_router.py +0 -0
  356. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/text_delta_event_handler.py +0 -0
  357. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/tool_call_event_handler.py +0 -0
  358. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/subscribers/__init__.py +0 -0
  359. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/subscribers/message_persister.py +0 -0
  360. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/subscribers/progress_log_persister.py +0 -0
  361. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/resources/__init__.py +0 -0
  362. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/resources/content_folder/__init__.py +0 -0
  363. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/resources/content_folder/functions.py +0 -0
  364. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/resources/content_folder/schemas.py +0 -0
  365. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/resources/content_folder/service.py +0 -0
  366. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/resources/facades/__init__.py +0 -0
  367. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/resources/facades/identity/__init__.py +0 -0
  368. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/resources/facades/identity/service.py +0 -0
  369. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/resources/feature_flags/README.md +0 -0
  370. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/resources/feature_flags/__init__.py +0 -0
  371. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/resources/feature_flags/_graphql_client.py +0 -0
  372. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/resources/feature_flags/client.py +0 -0
  373. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/resources/feature_flags/schemas.py +0 -0
  374. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/resources/feature_flags/settings.py +0 -0
  375. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/resources/group/__init__.py +0 -0
  376. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/resources/group/functions.py +0 -0
  377. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/resources/group/schemas.py +0 -0
  378. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/resources/group/service.py +0 -0
  379. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/resources/scheduled_task/__init__.py +0 -0
  380. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/resources/scheduled_task/cron.py +0 -0
  381. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/resources/scheduled_task/functions.py +0 -0
  382. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/resources/scheduled_task/schemas.py +0 -0
  383. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/resources/scheduled_task/service.py +0 -0
  384. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/resources/user/__init__.py +0 -0
  385. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/resources/user/functions.py +0 -0
  386. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/resources/user/schemas.py +0 -0
  387. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/resources/user/service.py +0 -0
  388. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/testing/__init__.py +0 -0
  389. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/framework_utilities/__init__.py +0 -0
  390. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/framework_utilities/langchain/__init__.py +0 -0
  391. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/framework_utilities/langchain/client.py +0 -0
  392. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/framework_utilities/langchain/history.py +0 -0
  393. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/framework_utilities/openai/__init__.py +0 -0
  394. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/framework_utilities/openai/client.py +0 -0
  395. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/framework_utilities/openai/message_builder.py +0 -0
  396. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/framework_utilities/utils.py +0 -0
  397. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/language_model/__init__.py +0 -0
  398. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/language_model/_responses_api_utils.py +0 -0
  399. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/language_model/builder.py +0 -0
  400. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/language_model/constants.py +0 -0
  401. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/language_model/default_language_model.py +0 -0
  402. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/language_model/functions.py +0 -0
  403. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/language_model/invocation_stats.py +0 -0
  404. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/language_model/prompt.py +0 -0
  405. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/language_model/reference.py +0 -0
  406. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/language_model/schemas.py +0 -0
  407. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/language_model/service.py +0 -0
  408. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/language_model/settings.py +0 -0
  409. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/language_model/stream_transform.py +0 -0
  410. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/language_model/utils.py +0 -0
  411. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/monitoring/__init__.py +0 -0
  412. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/monitoring/gunicorn.py +0 -0
  413. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/monitoring/middleware.py +0 -0
  414. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/monitoring/registry.py +0 -0
  415. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/monitoring/tracing.py +0 -0
  416. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/protocols/support.py +0 -0
  417. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/services/__init__.py +0 -0
  418. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/services/chat_service.py +0 -0
  419. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/services/factory.py +0 -0
  420. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/services/knowledge_base.py +0 -0
  421. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/short_term_memory/__init__.py +0 -0
  422. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/short_term_memory/constants.py +0 -0
  423. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/short_term_memory/functions.py +0 -0
  424. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/short_term_memory/schemas.py +0 -0
  425. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/short_term_memory/service.py +0 -0
  426. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/smart_rules/__init__.py +0 -0
  427. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/smart_rules/compile.py +0 -0
  428. {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/test_utilities/events.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: unique-toolkit
3
- Version: 2026.38.0
3
+ Version: 2026.38.0.dev0
4
4
  Summary:
5
5
  Author: Cedric Klinkert, Martin Fadler, Sadique Sheik, Fabian Schläpfer, Pascal Hauri, Ejiroghene Oki-Peter, Rami Azouz, Ricardo Visini, Sanzio Monti
6
6
  Author-email: Cedric Klinkert <cedric.klinkert@unique.ch>, Martin Fadler <martin.fadler@unique.ch>, Sadique Sheik <sadique@unique.ch>, Fabian Schläpfer <fabian@unique.ch>, Pascal Hauri <pascal@unique.ch>, Ejiroghene Oki-Peter <oki-peter.ejiroghene@unique.ai>, Rami Azouz <rami.ext@unique.ch>, Ricardo Visini <ricardo.visini@unique.ch>, Sanzio Monti <sanzio.monti@unique.ai>
@@ -16,7 +16,7 @@ Requires-Dist: sseclient>=0.0.27,<0.0.28
16
16
  Requires-Dist: openai>=1.105.0,<3
17
17
  Requires-Dist: platformdirs>=4.0.0,<5
18
18
  Requires-Dist: pillow>=12.1.1
19
- Requires-Dist: unique-sdk>=2026.38.0
19
+ Requires-Dist: unique-sdk>=2026.38.0.dev0,<2026.38.0rc0
20
20
  Requires-Dist: jambo>=0.1.2,<0.2
21
21
  Requires-Dist: jinja2>=3.1.6,<4
22
22
  Requires-Dist: docxtpl>=0.20.1,<0.21
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "unique_toolkit"
3
- version = "2026.38.0"
3
+ version = "2026.38.0.dev0"
4
4
  description = ""
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -28,7 +28,7 @@ dependencies = [
28
28
  "openai>=1.105.0,<3",
29
29
  "platformdirs>=4.0.0,<5",
30
30
  "pillow>=12.1.1",
31
- "unique-sdk>=2026.38.0",
31
+ "unique-sdk>=2026.38.0.dev0,<2026.38.0rc0",
32
32
  "jambo>=0.1.2,<0.2",
33
33
  "jinja2>=3.1.6,<4",
34
34
  "docxtpl>=0.20.1,<0.21",
@@ -4,21 +4,6 @@ import mimetypes
4
4
  from enum import StrEnum
5
5
  from pathlib import Path
6
6
 
7
- # Takes precedence over `mimetypes` (which lacks `.msg` and varies by host)
8
- # so classification matches the platform's supported-mime-types catalog.
9
- _EXTENSION_MIME_OVERRIDES: dict[str, str] = {
10
- ".msg": "application/vnd.ms-outlook",
11
- ".eml": "message/rfc822",
12
- }
13
-
14
-
15
- def guess_mime_type(filename: str | Path) -> str | None:
16
- suffix = Path(filename).suffix.lower()
17
- if override := _EXTENSION_MIME_OVERRIDES.get(suffix):
18
- return override
19
- mime_type, _ = mimetypes.guess_type(str(filename))
20
- return mime_type
21
-
22
7
 
23
8
  class FileMimeType(StrEnum):
24
9
  PDF = "application/pdf"
@@ -38,12 +23,10 @@ class FileMimeType(StrEnum):
38
23
  MD = "text/markdown"
39
24
  TXT = "text/plain"
40
25
  JSON = "application/json"
41
- MSG = "application/vnd.ms-outlook"
42
- EML = "message/rfc822"
43
26
 
44
27
  @classmethod
45
28
  def get_mime_from_file_path(cls, filepath: Path) -> "FileMimeType | None":
46
- mime_type = guess_mime_type(filepath)
29
+ mime_type, _ = mimetypes.guess_type(filepath)
47
30
  if mime_type is None:
48
31
  return None
49
32
 
@@ -83,11 +66,6 @@ class FileMimeType(StrEnum):
83
66
  def is_csv(self) -> bool:
84
67
  return self == self.__class__.CSV
85
68
 
86
- @property
87
- def is_email(self) -> bool:
88
- cls = self.__class__
89
- return self in {cls.MSG, cls.EML}
90
-
91
69
  @classmethod
92
70
  def is_docx_mime(cls, filepath: Path) -> bool:
93
71
  mime_type = cls.get_mime_from_file_path(filepath)
@@ -144,22 +122,12 @@ def get_common_name(extension: FileMimeType) -> str:
144
122
  return "markdown"
145
123
  case FileMimeType.HTML:
146
124
  return "html"
147
- case FileMimeType.MSG | FileMimeType.EML:
148
- return "email"
149
125
  case _: # pyright: ignore[reportUnnecessaryComparison]
150
126
  return "unknown" # pyright: ignore[reportUnreachable]
151
127
 
152
128
 
153
- _MIME_EXTENSION_OVERRIDES: dict[str, str] = {
154
- mime: ext for ext, mime in _EXTENSION_MIME_OVERRIDES.items()
155
- }
156
-
157
-
158
129
  def get_file_extensions(mimes: list[FileMimeType]) -> list[str]:
159
- types = [
160
- _MIME_EXTENSION_OVERRIDES.get(mime) or mimetypes.guess_extension(mime)
161
- for mime in mimes
162
- ]
130
+ types = [mimetypes.guess_extension(mime) for mime in mimes]
163
131
  return [t for t in types if t]
164
132
 
165
133
 
@@ -174,7 +142,7 @@ class ImageMimeType(StrEnum):
174
142
 
175
143
 
176
144
  def is_file_content(filename: str) -> bool:
177
- mimetype = guess_mime_type(filename)
145
+ mimetype, _ = mimetypes.guess_type(filename)
178
146
 
179
147
  if not mimetype:
180
148
  return False
@@ -183,7 +151,7 @@ def is_file_content(filename: str) -> bool:
183
151
 
184
152
 
185
153
  def is_image_content(filename: str) -> bool:
186
- mimetype = guess_mime_type(filename)
154
+ mimetype, _ = mimetypes.guess_type(filename)
187
155
 
188
156
  if not mimetype:
189
157
  return False
@@ -11,32 +11,26 @@ from unique_toolkit.elicitation import (
11
11
  )
12
12
 
13
13
  _DEFAULT_TOOL_DESCRIPTION = """
14
- Ask the user a question through a structured form and block until they answer. Use whenever you need information, a decision, or confirmation before continuing correctly: clarifying questions, confirmation before destructive or irreversible work, missing parameters, or choosing among plausible options. Do not ask the user in normal chat text while this tool is available—call AskUser, wait for the result, then continue. If unsure which interpretation, scope, or value applies, call AskUser instead of guessing. The form's Confirm/Decline buttons are the user's consent: for destructive actions state the consequence in `message` and proceed only when the user confirms; use an empty-properties schema when there is nothing else to ask. Form and chat anchoring are handled for you; the call blocks until the user responds, declines, cancels, or times out.
14
+ Ask the user a question through a structured form and block until they answer. Use whenever you need information, a decision, or confirmation before continuing correctly: clarifying questions, confirmation before destructive or irreversible work, missing parameters, or choosing among plausible options. Do not ask the user in normal chat text while this tool is available—call AskUser, wait for the result, then continue. If unsure which interpretation, scope, or value applies, call AskUser instead of guessing. Destructive actions must include an explicit confirmation field. Form and chat anchoring are handled for you; the call blocks until the user responds, declines, cancels, or times out.
15
15
  """.strip()
16
16
 
17
17
  _DEFAULT_TOOL_DESCRIPTION_FOR_SYSTEM_PROMPT = """
18
18
  - If your next message would ask the user for information, a decision, or confirmation, call AskUser instead of writing the question in chat.
19
19
  - If more than one reasonable reading of the request exists, call AskUser before acting—do not silently pick a default.
20
- - Destructive or irreversible actions need the user's confirmation: state the consequence in `message` and proceed only on an accepted result. The Confirm button is the consent on any form, so never model it as a boolean `confirm` field; if there is nothing else to ask, use `response_schema` `{"type":"object","properties":{}}`.
20
+ - Destructive or irreversible actions require an explicit confirmation field (e.g. boolean `confirm`) in `response_schema`.
21
21
  """.strip()
22
22
 
23
23
  _DEFAULT_MESSAGE_DESCRIPTION = "The question or prompt shown to the user"
24
24
 
25
25
  _DEFAULT_RESPONSE_SCHEMA_DESCRIPTION = """
26
- JSON Schema object (root type "object") for the form shown to the user; you construct it. The Confirm/Decline buttons are the user's consent on any form, so a confirmation needs no field of its own: empty properties for a plain yes/no; single string property for free-text; string + enum for one choice (dropdown); array with items.enum for choose-many; boolean only for a genuine data field where unchecked (false) is a valid answer. Mark needed fields required and add short property descriptions (shown as help text). A required boolean means "must be answered", not "must be ticked": the user can submit it unchecked. Give every boolean a title, it is the checkbox label. Prefer one small form over many calls.
26
+ JSON Schema object (root type "object") for the form shown to the user; you construct it. Single string property for free-text; boolean for a confirmation; string + enum for one choice (dropdown); array with items.enum for choose-many. Mark needed fields required and add short property descriptions (shown as help text). Prefer one small form over many calls.
27
27
  Examples:
28
- - confirm: {"type":"object","properties":{}};
29
28
  - free-text: {"type":"object","properties":{"answer":{"type":"string"}},"required":["answer"]};
29
+ - confirm: {"type":"object","properties":{"confirm":{"type":"boolean"}},"required":["confirm"]};
30
30
  - choice: {"type":"object","properties":{"region":{"type":"string","enum":["EU","US"]}},"required":["region"]};
31
- - multi: {"type":"object","properties":{"topics":{"type":"array","items":{"type":"string","enum":["a","b"]}}}};
32
- - yes/no data: {"type":"object","properties":{"include_appendix":{"type":"boolean","title":"Include appendix"}}}.
31
+ - multi: {"type":"object","properties":{"topics":{"type":"array","items":{"type":"string","enum":["a","b"]}}}}.
33
32
  """.strip()
34
33
 
35
- _DEFAULT_ACCEPTED_MESSAGE = (
36
- "The user confirmed the request. The form had no fields, so there is no "
37
- "response content. Proceed with the confirmed action."
38
- )
39
-
40
34
  _TIMEOUT_SECONDS_MIN = 1
41
35
  _TIMOUT_SECONDS_MAX = 3600
42
36
 
@@ -87,19 +81,6 @@ class AskUserToolConfig(BaseToolConfig):
87
81
  title="`response_schema` tool input field description",
88
82
  )
89
83
 
90
- accepted_message: Annotated[
91
- str,
92
- RJSFMetaTag.StringWidget.textarea(rows=2),
93
- ] = Field(
94
- default=_DEFAULT_ACCEPTED_MESSAGE,
95
- description=(
96
- "Message returned to the model when the user accepts a form without "
97
- "fields (empty-properties confirmation schema). Forms with fields "
98
- "return the submitted values as JSON instead."
99
- ),
100
- title="Accepted response (empty form)",
101
- )
102
-
103
84
  declined_message: Annotated[
104
85
  str,
105
86
  RJSFMetaTag.StringWidget.textarea(
@@ -158,17 +158,8 @@ class AskUserTool(Tool[AskUserToolConfig]):
158
158
 
159
159
  _LOGGER.info("User responded to elicitation request")
160
160
 
161
- # Decide on the schema, not the payload: a form with optional fields left
162
- # blank also comes back empty, and that is an answer ("{}"), not consent.
163
- if not params.response_schema.get("properties"):
164
- return ToolCallResponse(
165
- id=tool_call.id,
166
- name=self.name,
167
- content=self.config.accepted_message,
168
- )
169
-
170
161
  return ToolCallResponse(
171
162
  id=tool_call.id,
172
163
  name=self.name,
173
- content=json.dumps(elicitation.response_content or {}, ensure_ascii=False),
164
+ content=json.dumps(elicitation.response_content, ensure_ascii=False),
174
165
  )
@@ -6,6 +6,7 @@ from pathlib import Path
6
6
  from typing import Any
7
7
 
8
8
  import unique_sdk.utils.file_io as file_io
9
+ from openai.types.responses.response_output_text import AnnotationContainerFileCitation
9
10
  from pydantic import BaseModel
10
11
 
11
12
  from unique_toolkit import ChatService
@@ -15,9 +16,6 @@ from unique_toolkit.agentic.tools.openai_builtin.code_interpreter.postprocessors
15
16
  convert_office_bytes_to_preview_pdf,
16
17
  office_extension,
17
18
  )
18
- from unique_toolkit.agentic.tools.openai_builtin.code_interpreter.schemas import (
19
- CodeInterpreterContainerFile,
20
- )
21
19
  from unique_toolkit.content.schemas import Content
22
20
 
23
21
  _CODE_EXECUTION_ARTIFACT_METADATA_KEY: str = "codeExecutionArtifactMetadata"
@@ -63,7 +61,7 @@ def _kb_safe_mime(mime: str) -> str:
63
61
 
64
62
 
65
63
  def _artifact_metadata(
66
- file: CodeInterpreterContainerFile,
64
+ file: AnnotationContainerFileCitation,
67
65
  ) -> dict[str, Any]:
68
66
  return {
69
67
  _CODE_EXECUTION_ARTIFACT_METADATA_KEY: CodeExecutionArtifactMetadata(
@@ -76,7 +74,7 @@ def _artifact_metadata(
76
74
 
77
75
  async def _upload_artifact_bytes(
78
76
  chat_service: ChatService,
79
- file: CodeInterpreterContainerFile,
77
+ file: AnnotationContainerFileCitation,
80
78
  file_bytes: bytes,
81
79
  mime: str,
82
80
  ) -> Content:
@@ -99,7 +97,7 @@ async def _upload_artifact_bytes(
99
97
 
100
98
  async def _upload_office_artifact_with_preview(
101
99
  chat_service: ChatService,
102
- file: CodeInterpreterContainerFile,
100
+ file: AnnotationContainerFileCitation,
103
101
  file_bytes: bytes,
104
102
  mime: str,
105
103
  ) -> Content | None:
@@ -148,7 +146,7 @@ async def _upload_office_artifact_with_preview(
148
146
 
149
147
  async def save_code_execution_artifact(
150
148
  chat_service: ChatService,
151
- file: CodeInterpreterContainerFile,
149
+ file: AnnotationContainerFileCitation,
152
150
  file_bytes: bytes,
153
151
  *,
154
152
  attach_office_preview: bool = False,
@@ -6,10 +6,10 @@ import time
6
6
  from dataclasses import dataclass
7
7
  from mimetypes import guess_type
8
8
  from typing import NamedTuple, TypedDict, override
9
- from urllib.parse import quote, unquote
10
9
 
11
10
  import httpx
12
11
  from openai import AsyncOpenAI
12
+ from openai.types.responses.response_output_text import AnnotationContainerFileCitation
13
13
  from pydantic import BaseModel, Field, RootModel
14
14
  from pydantic.json_schema import SkipJsonSchema
15
15
  from tenacity import (
@@ -34,7 +34,6 @@ from unique_toolkit.agentic.tools.openai_builtin.code_interpreter.postprocessors
34
34
  )
35
35
  from unique_toolkit.agentic.tools.openai_builtin.code_interpreter.schemas import (
36
36
  CodeInterpreterBlock,
37
- CodeInterpreterContainerFile,
38
37
  CodeInterpreterFile,
39
38
  CodeInterpreterFileType,
40
39
  )
@@ -312,7 +311,7 @@ class _FileProgressTracker:
312
311
  if state.phase == "pending":
313
312
  continue
314
313
  progress = self._format_inline(filename, state)
315
- pattern = _sandbox_link_pattern(filename)
314
+ pattern = rf"!?\[.*?\]\(sandbox:/mnt/data/{re.escape(filename)}\)"
316
315
  text = re.sub(pattern, progress, text)
317
316
 
318
317
  active = {
@@ -402,7 +401,6 @@ class DisplayCodeInterpreterFilesPostProcessor(
402
401
 
403
402
  # Cleared at the start of each run(); holds this-turn download sizes.
404
403
  self._file_size_map: dict[str, int] = {}
405
- self._container_files: list[CodeInterpreterContainerFile] = []
406
404
 
407
405
  # Resolved in run() (before apply_postprocessing_to_response) since flag evaluation is async.
408
406
  self._fence_ff_on = False
@@ -421,89 +419,6 @@ class DisplayCodeInterpreterFilesPostProcessor(
421
419
  reraise=True,
422
420
  )
423
421
 
424
- async def _resolve_container_files(
425
- self, loop_response: ResponsesLanguageModelStreamResponse
426
- ) -> list[CodeInterpreterContainerFile]:
427
- """
428
- Matches files cited by the agent to their id.
429
- First tries to match files using the `citations` in the llm response.
430
- If that fails, uses `container.files.list` in order to find the correct file
431
- """
432
- container_files = [
433
- CodeInterpreterContainerFile(
434
- container_id=annotation.container_id,
435
- file_id=annotation.file_id,
436
- filename=annotation.filename,
437
- )
438
- for annotation in loop_response.container_files
439
- ]
440
-
441
- text = loop_response.message.text or ""
442
- cited_files = set(_extract_container_file_citations_from_text(text))
443
-
444
- unresolved_files = cited_files - {file.filename for file in container_files}
445
-
446
- if len(unresolved_files) == 0:
447
- return container_files
448
-
449
- code_interpreter_calls = loop_response.code_interpreter_calls
450
-
451
- if len(code_interpreter_calls) == 0:
452
- return container_files
453
-
454
- container_id = code_interpreter_calls[0].container_id
455
-
456
- self._log.info(
457
- "Recovering %d unresolved sandbox link(s) from container %s: %s",
458
- len(unresolved_files),
459
- container_id,
460
- list(unresolved_files),
461
- )
462
-
463
- try:
464
- async for container_file in self._client.containers.files.list(
465
- container_id=container_id,
466
- order="desc",
467
- ):
468
- if container_file.source != "assistant":
469
- continue
470
-
471
- path = container_file.path
472
- filename = (
473
- path.removeprefix("/mnt/data/")
474
- if path.startswith("/mnt/data/")
475
- else path
476
- )
477
-
478
- if filename in unresolved_files:
479
- unresolved_files.remove(filename)
480
- container_files.append(
481
- CodeInterpreterContainerFile(
482
- container_id=container_file.container_id,
483
- file_id=container_file.id,
484
- filename=filename,
485
- )
486
- )
487
-
488
- if len(unresolved_files) == 0:
489
- break
490
-
491
- except Exception:
492
- self._log.exception(
493
- "Failed to list files for container %s while recovering "
494
- "missing citations; dangling-link handling will continue.",
495
- container_id,
496
- )
497
-
498
- if len(unresolved_files) > 0:
499
- self._log.info(
500
- "%d sandbox link(s) left unresolved after recovery: %s",
501
- len(unresolved_files),
502
- list(unresolved_files),
503
- )
504
-
505
- return container_files
506
-
507
422
  @override
508
423
  async def run(
509
424
  self, loop_response: ResponsesLanguageModelStreamResponse
@@ -522,10 +437,9 @@ class DisplayCodeInterpreterFilesPostProcessor(
522
437
  company_id=self._company_id or COMPANY_ID_PLACEHOLDER,
523
438
  )
524
439
 
525
- container_files = await self._resolve_container_files(loop_response)
526
- self._container_files = container_files
440
+ container_files = loop_response.container_files
527
441
  self._log.info(
528
- "run() resolved %d container file(s): %s",
442
+ "run() found %d container file annotation(s): %s",
529
443
  len(container_files),
530
444
  [cf.filename for cf in container_files],
531
445
  )
@@ -621,12 +535,10 @@ class DisplayCodeInterpreterFilesPostProcessor(
621
535
  save_ms,
622
536
  )
623
537
 
624
- return self._compute_artifacts_debug_info(loop_response, container_files)
538
+ return self._compute_artifacts_debug_info(loop_response)
625
539
 
626
540
  def _compute_artifacts_debug_info(
627
- self,
628
- loop_response: ResponsesLanguageModelStreamResponse,
629
- container_files: list[CodeInterpreterContainerFile],
541
+ self, loop_response: ResponsesLanguageModelStreamResponse
630
542
  ) -> ArtifactsDebugInfo | None:
631
543
  """Compute this turn's successfully-created artifacts.
632
544
 
@@ -650,7 +562,7 @@ class DisplayCodeInterpreterFilesPostProcessor(
650
562
 
651
563
  created_filenames = {
652
564
  cf.filename
653
- for cf in container_files
565
+ for cf in loop_response.container_files
654
566
  if self._content_map.get(cf.filename) is not None
655
567
  }
656
568
  total_bytes = sum(
@@ -767,10 +679,7 @@ class DisplayCodeInterpreterFilesPostProcessor(
767
679
 
768
680
  if self._fence_ff_on:
769
681
  code_blocks = _build_code_blocks(
770
- loop_response,
771
- self._content_map,
772
- self._container_files,
773
- include_html=self._html_fence_ff_on,
682
+ loop_response, self._content_map, include_html=self._html_fence_ff_on
774
683
  )
775
684
  self._log.info(
776
685
  "Fence injection — %d code block(s), files: %s",
@@ -824,7 +733,7 @@ class DisplayCodeInterpreterFilesPostProcessor(
824
733
  @failsafe_async(failure_return_value=None, logger=logger)
825
734
  async def _download_and_upload_container_files_to_knowledge_base(
826
735
  self,
827
- container_file: CodeInterpreterContainerFile,
736
+ container_file: AnnotationContainerFileCitation,
828
737
  semaphore: asyncio.Semaphore,
829
738
  tracker: _FileProgressTracker | None = None,
830
739
  ) -> _ContentInfo | None:
@@ -895,7 +804,7 @@ class DisplayCodeInterpreterFilesPostProcessor(
895
804
 
896
805
  async def _download_file_bytes_with_progress(
897
806
  self,
898
- container_file: CodeInterpreterContainerFile,
807
+ container_file: AnnotationContainerFileCitation,
899
808
  tracker: _FileProgressTracker | None,
900
809
  ) -> bytes:
901
810
  """Download container file with streaming progress and manual retry loop.
@@ -978,7 +887,7 @@ class DisplayCodeInterpreterFilesPostProcessor(
978
887
 
979
888
  async def _stream_download_bytes(
980
889
  self,
981
- container_file: CodeInterpreterContainerFile,
890
+ container_file: AnnotationContainerFileCitation,
982
891
  tracker: _FileProgressTracker | None,
983
892
  retry_attempt: int,
984
893
  download_start: float,
@@ -1286,7 +1195,6 @@ def _inject_code_execution_fences(
1286
1195
  def _build_code_blocks(
1287
1196
  loop_response: ResponsesLanguageModelStreamResponse,
1288
1197
  content_map: dict[str, str | None],
1289
- container_files: list[CodeInterpreterContainerFile],
1290
1198
  include_html: bool = False,
1291
1199
  ) -> list[CodeInterpreterBlock]:
1292
1200
  """Map each code interpreter call to the files it produced via /mnt/data/ path matching.
@@ -1317,7 +1225,7 @@ def _build_code_blocks(
1317
1225
  for idx, call in enumerate(calls):
1318
1226
  if not call.code:
1319
1227
  continue
1320
- for annotation in container_files:
1228
+ for annotation in loop_response.container_files:
1321
1229
  if (
1322
1230
  content_map.get(annotation.filename) is not None
1323
1231
  and f"/mnt/data/{annotation.filename}" in call.code
@@ -1346,7 +1254,7 @@ def _build_code_blocks(
1346
1254
  for idx, call in enumerate(calls):
1347
1255
  if not call.code:
1348
1256
  continue
1349
- for annotation in container_files:
1257
+ for annotation in loop_response.container_files:
1350
1258
  if annotation.filename in primary_matched_filenames:
1351
1259
  continue
1352
1260
  if content_map.get(annotation.filename) is None:
@@ -1373,7 +1281,7 @@ def _build_code_blocks(
1373
1281
  if call.code:
1374
1282
  last_block_idx = idx
1375
1283
  if last_block_idx is not None:
1376
- for annotation in container_files:
1284
+ for annotation in loop_response.container_files:
1377
1285
  if annotation.filename in file_to_block_idx:
1378
1286
  continue
1379
1287
  if content_map.get(annotation.filename) is None:
@@ -1386,7 +1294,7 @@ def _build_code_blocks(
1386
1294
  # file appears exactly once per block (last annotation wins, consistent with
1387
1295
  # the last-writer-wins rule applied in step 1).
1388
1296
  block_file_map: dict[int, dict[str, CodeInterpreterFile]] = {}
1389
- for annotation in container_files:
1297
+ for annotation in loop_response.container_files:
1390
1298
  if not include_html and _get_file_type(annotation.filename) == "html":
1391
1299
  continue
1392
1300
  content_id = content_map.get(annotation.filename)
@@ -1437,24 +1345,10 @@ def _warn_missing_content_ids(text: str, content_map: dict[str, str | None]) ->
1437
1345
  # so the entire `[label](sandbox://...)` token can be replaced rather than just the URL.
1438
1346
  _SANDBOX_MARKDOWN_LINK_RE = re.compile(r"!?\[.*?\]\(sandbox:/mnt/data/\S+?\)")
1439
1347
 
1440
-
1441
- def _sandbox_link_pattern(filename: str) -> str:
1442
- """Return a pattern matching the markdown sandbox link for `filename`."""
1443
- spellings = "|".join(
1444
- dict.fromkeys([re.escape(filename), re.escape(quote(filename))])
1445
- )
1446
- return rf"!?\[.*?\]\(sandbox:/mnt/data/(?:{spellings})\)"
1447
-
1448
-
1449
1348
  # Extracts the bare filename from a sandbox URL like `sandbox:/mnt/data/foo.csv`.
1450
1349
  _SANDBOX_FILENAME_RE = re.compile(r"sandbox:/mnt/data/([^)\s]+)")
1451
1350
 
1452
1351
 
1453
- def _extract_container_file_citations_from_text(text: str) -> list[str]:
1454
- """Extract container filenames from sandbox citations in their text order."""
1455
- return [unquote(filename) for filename in _SANDBOX_FILENAME_RE.findall(text)]
1456
-
1457
-
1458
1352
  def _replace_dangling_sandbox_links(
1459
1353
  text: str, *, ci_ran: bool = True
1460
1354
  ) -> tuple[str, bool]:
@@ -1477,8 +1371,8 @@ def _replace_dangling_sandbox_links(
1477
1371
  return text, False
1478
1372
 
1479
1373
  def _replacement(m: re.Match[str]) -> str:
1480
- filenames = _extract_container_file_citations_from_text(m.group())
1481
- filename = filenames[0] if filenames else "the file"
1374
+ filename_match = _SANDBOX_FILENAME_RE.search(m.group())
1375
+ filename = filename_match.group(1) if filename_match else "the file"
1482
1376
  logger.warning(
1483
1377
  "Dangling sandbox link found in final text: '%s'. ci_ran=%s. "
1484
1378
  "The file was either never generated or the link format did not match "
@@ -1539,7 +1433,7 @@ def _get_next_ref_number(references: list[ContentReference] | None) -> int:
1539
1433
  def _replace_container_file_error(
1540
1434
  text: str, filename: str, error_message: str
1541
1435
  ) -> tuple[str, bool]:
1542
- image_markdown = _sandbox_link_pattern(filename)
1436
+ image_markdown = rf"!?\[.*?\]\(sandbox:/mnt/data/{re.escape(filename)}\)"
1543
1437
 
1544
1438
  if not re.search(image_markdown, text):
1545
1439
  logger.warning(
@@ -1560,7 +1454,7 @@ def _replace_container_file_error(
1560
1454
  def _replace_container_image_citation(
1561
1455
  text: str, filename: str, content_id: str
1562
1456
  ) -> tuple[str, bool]:
1563
- image_markdown = _sandbox_link_pattern(filename)
1457
+ image_markdown = rf"!?\[.*?\]\(sandbox:/mnt/data/{re.escape(filename)}\)"
1564
1458
 
1565
1459
  if not re.search(image_markdown, text):
1566
1460
  logger.warning(
@@ -1582,7 +1476,7 @@ def _replace_container_image_citation(
1582
1476
  def _replace_container_html_citation(
1583
1477
  text: str, filename: str, content_id: str
1584
1478
  ) -> tuple[str, bool]:
1585
- link_core = _sandbox_link_pattern(filename)
1479
+ link_core = rf"!?\[.*?\]\(sandbox:/mnt/data/{re.escape(filename)}\)"
1586
1480
  html_markdown = link_core
1587
1481
 
1588
1482
  if not re.search(html_markdown, text):
@@ -1640,7 +1534,7 @@ def _replace_container_file_citation(
1640
1534
  original pre-fence behaviour is restored: the link is replaced with <sup>N</sup>
1641
1535
  and the file remains accessible via the references panel.
1642
1536
  """
1643
- file_markdown = _sandbox_link_pattern(filename)
1537
+ file_markdown = rf"!?\[.*?\]\(sandbox:/mnt/data/{re.escape(filename)}\)"
1644
1538
 
1645
1539
  if not re.search(file_markdown, text):
1646
1540
  logger.warning(
@@ -1,6 +1,5 @@
1
1
  """Code interpreter types used by the generated-files postprocessor."""
2
2
 
3
- from dataclasses import dataclass
4
3
  from typing import Literal
5
4
 
6
5
  from pydantic import BaseModel
@@ -8,15 +7,6 @@ from pydantic import BaseModel
8
7
  CodeInterpreterFileType = Literal["image", "document", "html"]
9
8
 
10
9
 
11
- @dataclass(frozen=True)
12
- class CodeInterpreterContainerFile:
13
- """Provider-independent identity of a file in a code interpreter container."""
14
-
15
- container_id: str
16
- file_id: str
17
- filename: str
18
-
19
-
20
10
  class CodeInterpreterFile(BaseModel):
21
11
  """A single file produced by a code interpreter execution."""
22
12
 
@@ -1,4 +1,3 @@
1
- from datetime import datetime
2
1
  from enum import StrEnum
3
2
  from typing import Annotated, Any, Generic, Literal, TypeVar, override
4
3
 
@@ -502,15 +501,6 @@ class MagicTableSheet(BaseModel):
502
501
  created_by: str
503
502
  company_id: str
504
503
  created_at: str
505
- user_aborted_at: datetime | None = Field(
506
- default=None,
507
- description=(
508
- "When the user stopped an in-progress refresh. Set by "
509
- "stopMagicTableRefresh and returned on GET sheet/library so the "
510
- "agent can poll and exit. None when the run was not aborted or "
511
- "when an older backend omits the field."
512
- ),
513
- )
514
504
  magic_table_cells: list[MagicTableCell] = Field(
515
505
  default_factory=list, description="The cells in the sheet"
516
506
  )