unique_toolkit 1.70.2__tar.gz → 1.70.4__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.2 → unique_toolkit-1.70.4}/PKG-INFO +1 -1
  2. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/pyproject.toml +1 -1
  3. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/pydantic/rjsf_tags.py +77 -4
  4. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/tools/a2a/tool/config.py +2 -2
  5. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/service.py +47 -5
  6. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/README.md +0 -0
  7. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/__init__.py +0 -0
  8. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/__init__.py +0 -0
  9. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/_base_service.py +0 -0
  10. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/_time_utils.py +0 -0
  11. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/api_calling/human_verification_manager.py +0 -0
  12. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/base_model_type_attribute.py +0 -0
  13. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/chunk_relevancy_sorter/config.py +0 -0
  14. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/chunk_relevancy_sorter/exception.py +0 -0
  15. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/chunk_relevancy_sorter/schemas.py +0 -0
  16. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/chunk_relevancy_sorter/service.py +0 -0
  17. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/chunk_relevancy_sorter/tests/test_service.py +0 -0
  18. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/config_checker/README.md +0 -0
  19. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/config_checker/__init__.py +0 -0
  20. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/config_checker/__main__.py +0 -0
  21. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/config_checker/cli.py +0 -0
  22. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/config_checker/differ.py +0 -0
  23. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/config_checker/exporter.py +0 -0
  24. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/config_checker/models.py +0 -0
  25. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/config_checker/registry.py +0 -0
  26. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/config_checker/validator.py +0 -0
  27. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/default_language_model.py +0 -0
  28. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/docx_generator/__init__.py +0 -0
  29. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/docx_generator/config.py +0 -0
  30. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/docx_generator/pandoc_converter.py +0 -0
  31. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/docx_generator/schemas.py +0 -0
  32. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/docx_generator/service.py +0 -0
  33. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/docx_generator/template/Doc Template.docx +0 -0
  34. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/endpoint_builder.py +0 -0
  35. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/endpoint_requestor.py +0 -0
  36. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/event_bus.py +0 -0
  37. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/exception.py +0 -0
  38. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/execution.py +0 -0
  39. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/experimental/endpoint_builder.py +0 -0
  40. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/experimental/endpoint_requestor.py +0 -0
  41. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/experimental/write_up_agent/README.md +0 -0
  42. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/experimental/write_up_agent/__init__.py +0 -0
  43. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/experimental/write_up_agent/agent.py +0 -0
  44. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/experimental/write_up_agent/config.py +0 -0
  45. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/experimental/write_up_agent/examples/data.csv +0 -0
  46. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/experimental/write_up_agent/examples/example_usage.py +0 -0
  47. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/experimental/write_up_agent/schemas.py +0 -0
  48. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/experimental/write_up_agent/services/__init__.py +0 -0
  49. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/__init__.py +0 -0
  50. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/exceptions.py +0 -0
  51. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/service.py +0 -0
  52. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/utils.py +0 -0
  53. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/__init__.py +0 -0
  54. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/config.py +0 -0
  55. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/exceptions.py +0 -0
  56. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/config.py +0 -0
  57. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/system_prompt.j2 +0 -0
  58. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/user_prompt.j2 +0 -0
  59. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/service.py +0 -0
  60. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/__init__.py +0 -0
  61. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/default_template.j2 +0 -0
  62. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/exceptions.py +0 -0
  63. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/service.py +0 -0
  64. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/utils.py +0 -0
  65. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/experimental/write_up_agent/utils.py +0 -0
  66. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/feature_flags/schema.py +0 -0
  67. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/pydantic_helpers.py +0 -0
  68. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/referencing.py +0 -0
  69. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/string_utilities.py +0 -0
  70. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/tests/test_referencing.py +0 -0
  71. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/tests/test_string_utilities.py +0 -0
  72. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/token/__init__.py +0 -0
  73. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/token/image_token_counting.py +0 -0
  74. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/token/token_counting.py +0 -0
  75. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/token/tokenizers/deepseek/tokenizer.json +0 -0
  76. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/token/tokenizers/qwen/tokenizer.json +0 -0
  77. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/utils/__init__.py +0 -0
  78. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/utils/files.py +0 -0
  79. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/utils/image/encode.py +0 -0
  80. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/utils/jinja/helpers.py +0 -0
  81. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/utils/jinja/render.py +0 -0
  82. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/utils/jinja/schema.py +0 -0
  83. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/utils/jinja/utils.py +0 -0
  84. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/utils/structured_output/__init__.py +0 -0
  85. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/utils/structured_output/schema.py +0 -0
  86. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/utils/write_configuration.py +0 -0
  87. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/validate_required_values.py +0 -0
  88. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/_common/validators.py +0 -0
  89. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/__init__.py +0 -0
  90. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/debug_info_manager/debug_info_manager.py +0 -0
  91. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/debug_info_manager/test/test_debug_info_manager.py +0 -0
  92. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/evaluation/config.py +0 -0
  93. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/__init__.py +0 -0
  94. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/system_prompt.j2 +0 -0
  95. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/user_prompt.j2 +0 -0
  96. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/evaluation/context_relevancy/schema.py +0 -0
  97. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/evaluation/context_relevancy/service.py +0 -0
  98. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/evaluation/evaluation_manager.py +0 -0
  99. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/evaluation/exception.py +0 -0
  100. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/evaluation/hallucination/constants.py +0 -0
  101. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/evaluation/hallucination/hallucination_evaluation.py +0 -0
  102. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/evaluation/hallucination/prompts/__init__.py +0 -0
  103. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/evaluation/hallucination/prompts/system_prompt.j2 +0 -0
  104. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/evaluation/hallucination/prompts/user_prompt.j2 +0 -0
  105. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/evaluation/hallucination/service.py +0 -0
  106. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/evaluation/hallucination/utils.py +0 -0
  107. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/evaluation/output_parser.py +0 -0
  108. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/evaluation/schemas.py +0 -0
  109. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/evaluation/tests/fixtures.py +0 -0
  110. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/evaluation/tests/test_config.py +0 -0
  111. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/evaluation/tests/test_context_relevancy_service.py +0 -0
  112. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/evaluation/tests/test_hallucination_constants.py +0 -0
  113. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/evaluation/tests/test_hallucination_utils.py +0 -0
  114. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/evaluation/tests/test_output_parser.py +0 -0
  115. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/evaluation/tests/test_prompt_loaders.py +0 -0
  116. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/evaluation/utils.py +0 -0
  117. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/feature_flags/__init__.py +0 -0
  118. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/feature_flags/feature_flags.py +0 -0
  119. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/history_manager/history_construction_with_contents.py +0 -0
  120. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/history_manager/history_manager.py +0 -0
  121. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/history_manager/loop_token_reducer.py +0 -0
  122. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/history_manager/utils.py +0 -0
  123. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/loop_runner/__init__.py +0 -0
  124. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/loop_runner/_iteration_handler_utils.py +0 -0
  125. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/loop_runner/_responses_iteration_handler_utils.py +0 -0
  126. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/loop_runner/_responses_stream_handler_utils.py +0 -0
  127. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/loop_runner/_stream_handler_utils.py +0 -0
  128. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/loop_runner/base.py +0 -0
  129. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/loop_runner/middleware/__init__.py +0 -0
  130. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/loop_runner/middleware/planning/__init__.py +0 -0
  131. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/loop_runner/middleware/planning/planning.py +0 -0
  132. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/loop_runner/middleware/planning/schema.py +0 -0
  133. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/loop_runner/runners/__init__.py +0 -0
  134. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/loop_runner/runners/basic.py +0 -0
  135. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/loop_runner/runners/mistral/__init__.py +0 -0
  136. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/loop_runner/runners/mistral/mistral_runner.py +0 -0
  137. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/loop_runner/runners/qwen/__init__.py +0 -0
  138. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/loop_runner/runners/qwen/helpers.py +0 -0
  139. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/loop_runner/runners/qwen/qwen_runner.py +0 -0
  140. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/message_log_manager/__init__.py +0 -0
  141. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/message_log_manager/service.py +0 -0
  142. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/postprocessor/postprocessor_manager.py +0 -0
  143. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/reference_manager/reference_manager.py +0 -0
  144. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/responses_api/__init__.py +0 -0
  145. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/responses_api/postprocessors/code_display.py +0 -0
  146. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/responses_api/postprocessors/generated_files.py +0 -0
  147. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/responses_api/stream_handler.py +0 -0
  148. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/short_term_memory_manager/persistent_short_term_memory_manager.py +0 -0
  149. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/thinking_manager/thinking_manager.py +0 -0
  150. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/tools/__init__.py +0 -0
  151. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/tools/a2a/__init__.py +0 -0
  152. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/tools/a2a/config.py +0 -0
  153. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/tools/a2a/evaluation/__init__.py +0 -0
  154. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/tools/a2a/evaluation/_utils.py +0 -0
  155. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/tools/a2a/evaluation/config.py +0 -0
  156. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/tools/a2a/evaluation/evaluator.py +0 -0
  157. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/tools/a2a/evaluation/summarization_user_message.j2 +0 -0
  158. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/tools/a2a/manager.py +0 -0
  159. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/tools/a2a/postprocessing/__init__.py +0 -0
  160. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/tools/a2a/postprocessing/_display_utils.py +0 -0
  161. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/tools/a2a/postprocessing/_ref_utils.py +0 -0
  162. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/tools/a2a/postprocessing/config.py +0 -0
  163. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/tools/a2a/postprocessing/display.py +0 -0
  164. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/tools/a2a/postprocessing/references.py +0 -0
  165. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display.py +0 -0
  166. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display_utils.py +0 -0
  167. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_ref_utils.py +0 -0
  168. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/tools/a2a/prompts.py +0 -0
  169. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/tools/a2a/response_watcher/__init__.py +0 -0
  170. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/tools/a2a/response_watcher/service.py +0 -0
  171. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/tools/a2a/tool/__init__.py +0 -0
  172. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/tools/a2a/tool/_memory.py +0 -0
  173. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/tools/a2a/tool/_schema.py +0 -0
  174. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/tools/a2a/tool/service.py +0 -0
  175. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/tools/a2a/tool/test/test_service_utils.py +0 -0
  176. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/tools/agent_chunks_hanlder.py +0 -0
  177. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/tools/config.py +0 -0
  178. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/tools/experimental/__init__.py +0 -0
  179. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/tools/experimental/open_file_tool/__init__.py +0 -0
  180. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/tools/experimental/open_file_tool/config.py +0 -0
  181. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/tools/experimental/open_file_tool/runtime.py +0 -0
  182. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/tools/experimental/open_file_tool/tool.py +0 -0
  183. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/tools/factory.py +0 -0
  184. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/tools/mcp/__init__.py +0 -0
  185. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/tools/mcp/manager.py +0 -0
  186. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/tools/mcp/models.py +0 -0
  187. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/tools/mcp/tool_wrapper.py +0 -0
  188. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/tools/openai_builtin/__init__.py +0 -0
  189. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/tools/openai_builtin/base.py +0 -0
  190. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/__init__.py +0 -0
  191. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/config.py +0 -0
  192. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/__init__.py +0 -0
  193. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/code_display.py +0 -0
  194. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/generated_files.py +0 -0
  195. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/schemas.py +0 -0
  196. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/tools/openai_builtin/manager.py +0 -0
  197. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/tools/schemas.py +0 -0
  198. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/tools/test/test_mcp_manager.py +0 -0
  199. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/tools/test/test_tool_progress_reporter.py +0 -0
  200. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/tools/tool.py +0 -0
  201. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/tools/tool_manager.py +0 -0
  202. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/tools/tool_progress_reporter.py +0 -0
  203. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/tools/utils/__init__.py +0 -0
  204. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/tools/utils/source_handling/__init__.py +0 -0
  205. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/tools/utils/source_handling/schema.py +0 -0
  206. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/tools/utils/source_handling/source_formatting.py +0 -0
  207. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic/tools/utils/source_handling/tests/test_source_formatting.py +0 -0
  208. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic_table/__init__.py +0 -0
  209. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic_table/schemas.py +0 -0
  210. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/agentic_table/service.py +0 -0
  211. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/app/__init__.py +0 -0
  212. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/app/dev_util.py +0 -0
  213. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/app/fast_api_factory.py +0 -0
  214. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/app/init_logging.py +0 -0
  215. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/app/init_sdk.py +0 -0
  216. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/app/performance/async_tasks.py +0 -0
  217. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/app/performance/async_wrapper.py +0 -0
  218. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/app/schemas.py +0 -0
  219. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/app/unique_settings.py +0 -0
  220. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/app/verification.py +0 -0
  221. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/app/webhook.py +0 -0
  222. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/chat/__init__.py +0 -0
  223. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/chat/cancellation.py +0 -0
  224. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/chat/constants.py +0 -0
  225. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/chat/deprecated/service.py +0 -0
  226. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/chat/functions.py +0 -0
  227. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/chat/rendering.py +0 -0
  228. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/chat/responses_api.py +0 -0
  229. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/chat/schemas.py +0 -0
  230. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/chat/service.py +0 -0
  231. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/chat/state.py +0 -0
  232. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/chat/utils.py +0 -0
  233. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/content/__init__.py +0 -0
  234. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/content/constants.py +0 -0
  235. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/content/functions.py +0 -0
  236. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/content/schemas.py +0 -0
  237. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/content/service.py +0 -0
  238. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/content/smart_rules.py +0 -0
  239. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/content/utils.py +0 -0
  240. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/data_extraction/README.md +0 -0
  241. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/data_extraction/__init__.py +0 -0
  242. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/data_extraction/augmented/__init__.py +0 -0
  243. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/data_extraction/augmented/service.py +0 -0
  244. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/data_extraction/base.py +0 -0
  245. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/data_extraction/basic/__init__.py +0 -0
  246. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/data_extraction/basic/config.py +0 -0
  247. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/data_extraction/basic/prompt.py +0 -0
  248. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/data_extraction/basic/service.py +0 -0
  249. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/elicitation/__init__.py +0 -0
  250. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/elicitation/constants.py +0 -0
  251. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/elicitation/exceptions.py +0 -0
  252. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/elicitation/functions.py +0 -0
  253. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/elicitation/schemas.py +0 -0
  254. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/elicitation/service.py +0 -0
  255. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/embedding/__init__.py +0 -0
  256. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/embedding/constants.py +0 -0
  257. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/embedding/functions.py +0 -0
  258. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/embedding/schemas.py +0 -0
  259. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/embedding/service.py +0 -0
  260. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/embedding/utils.py +0 -0
  261. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/framework_utilities/__init__.py +0 -0
  262. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/framework_utilities/langchain/__init__.py +0 -0
  263. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/framework_utilities/langchain/client.py +0 -0
  264. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/framework_utilities/langchain/history.py +0 -0
  265. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/framework_utilities/openai/__init__.py +0 -0
  266. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/framework_utilities/openai/client.py +0 -0
  267. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/framework_utilities/openai/message_builder.py +0 -0
  268. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/framework_utilities/utils.py +0 -0
  269. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/language_model/__init__.py +0 -0
  270. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/language_model/_responses_api_utils.py +0 -0
  271. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/language_model/builder.py +0 -0
  272. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/language_model/constants.py +0 -0
  273. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/language_model/default_language_model.py +0 -0
  274. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/language_model/functions.py +0 -0
  275. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/language_model/infos.py +0 -0
  276. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/language_model/prompt.py +0 -0
  277. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/language_model/reference.py +0 -0
  278. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/language_model/schemas.py +0 -0
  279. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/language_model/service.py +0 -0
  280. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/language_model/stream_transform.py +0 -0
  281. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/language_model/utils.py +0 -0
  282. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/monitoring/__init__.py +0 -0
  283. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/monitoring/middleware.py +0 -0
  284. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/monitoring/registry.py +0 -0
  285. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/protocols/support.py +0 -0
  286. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/services/__init__.py +0 -0
  287. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/services/chat_service.py +0 -0
  288. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/services/factory.py +0 -0
  289. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/services/knowledge_base.py +0 -0
  290. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/short_term_memory/__init__.py +0 -0
  291. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/short_term_memory/constants.py +0 -0
  292. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/short_term_memory/functions.py +0 -0
  293. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/short_term_memory/schemas.py +0 -0
  294. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/short_term_memory/service.py +0 -0
  295. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/smart_rules/__init__.py +0 -0
  296. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/unique_toolkit/smart_rules/compile.py +0 -0
  297. {unique_toolkit-1.70.2 → unique_toolkit-1.70.4}/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.2
3
+ Version: 1.70.4
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.2"
3
+ version = "1.70.4"
4
4
  description = ""
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -23,6 +23,9 @@ from typing_extensions import get_type_hints
23
23
 
24
24
  _UNION_ORIGINS = {Union, types.UnionType}
25
25
 
26
+ # Sentinel: omit ``default_string_empty_value`` so plain ``str`` fields stay unchanged.
27
+ _DEFAULT_STRING_EMPTY_VALUE_UNSET = object()
28
+
26
29
 
27
30
  class CustomWidgetName(StrEnum):
28
31
  """Mirrors TypeScript CustomWidgetName. Keep in sync when extending."""
@@ -129,6 +132,7 @@ class RJSFMetaTag:
129
132
  description: str | None = None,
130
133
  help: str | None = None,
131
134
  class_names: str | None = None,
135
+ empty_value: str = "",
132
136
  **kwargs: Any,
133
137
  ) -> RJSFMetaTag:
134
138
  """Create a text field (default for strings)."""
@@ -142,6 +146,7 @@ class RJSFMetaTag:
142
146
  "ui:description": description,
143
147
  "ui:help": help,
144
148
  "ui:classNames": class_names,
149
+ "ui:emptyValue": empty_value,
145
150
  **kwargs,
146
151
  }
147
152
  return RJSFMetaTag({k: v for k, v in attrs.items() if v is not None})
@@ -157,6 +162,7 @@ class RJSFMetaTag:
157
162
  title: str | None = None,
158
163
  description: str | None = None,
159
164
  help: str | None = None,
165
+ empty_value: str = "",
160
166
  **kwargs: Any,
161
167
  ) -> RJSFMetaTag:
162
168
  """Create a textarea field."""
@@ -169,6 +175,7 @@ class RJSFMetaTag:
169
175
  "ui:title": title,
170
176
  "ui:description": description,
171
177
  "ui:help": help,
178
+ "ui:emptyValue": empty_value,
172
179
  **kwargs,
173
180
  }
174
181
  return RJSFMetaTag({k: v for k, v in attrs.items() if v is not None})
@@ -183,6 +190,7 @@ class RJSFMetaTag:
183
190
  title: str | None = None,
184
191
  description: str | None = None,
185
192
  help: str | None = None,
193
+ empty_value: str = "",
186
194
  **kwargs: Any,
187
195
  ) -> RJSFMetaTag:
188
196
  """Create a password field."""
@@ -194,6 +202,7 @@ class RJSFMetaTag:
194
202
  "ui:title": title,
195
203
  "ui:description": description,
196
204
  "ui:help": help,
205
+ "ui:emptyValue": empty_value,
197
206
  **kwargs,
198
207
  }
199
208
  return RJSFMetaTag({k: v for k, v in attrs.items() if v is not None})
@@ -206,6 +215,7 @@ class RJSFMetaTag:
206
215
  title: str | None = None,
207
216
  description: str | None = None,
208
217
  help: str | None = None,
218
+ empty_value: str = "",
209
219
  **kwargs: Any,
210
220
  ) -> RJSFMetaTag:
211
221
  """Create a color picker field."""
@@ -215,6 +225,7 @@ class RJSFMetaTag:
215
225
  "ui:title": title,
216
226
  "ui:description": description,
217
227
  "ui:help": help,
228
+ "ui:emptyValue": empty_value,
218
229
  **kwargs,
219
230
  }
220
231
  return RJSFMetaTag({k: v for k, v in attrs.items() if v is not None})
@@ -229,6 +240,7 @@ class RJSFMetaTag:
229
240
  title: str | None = None,
230
241
  description: str | None = None,
231
242
  help: str | None = None,
243
+ empty_value: str = "",
232
244
  **kwargs: Any,
233
245
  ) -> RJSFMetaTag:
234
246
  """Create an email field."""
@@ -240,6 +252,7 @@ class RJSFMetaTag:
240
252
  "ui:title": title,
241
253
  "ui:description": description,
242
254
  "ui:help": help,
255
+ "ui:emptyValue": empty_value,
243
256
  **kwargs,
244
257
  }
245
258
  return RJSFMetaTag({k: v for k, v in attrs.items() if v is not None})
@@ -254,6 +267,7 @@ class RJSFMetaTag:
254
267
  title: str | None = None,
255
268
  description: str | None = None,
256
269
  help: str | None = None,
270
+ empty_value: str = "",
257
271
  **kwargs: Any,
258
272
  ) -> RJSFMetaTag:
259
273
  """Create a URL field."""
@@ -265,6 +279,7 @@ class RJSFMetaTag:
265
279
  "ui:title": title,
266
280
  "ui:description": description,
267
281
  "ui:help": help,
282
+ "ui:emptyValue": empty_value,
268
283
  **kwargs,
269
284
  }
270
285
  return RJSFMetaTag({k: v for k, v in attrs.items() if v is not None})
@@ -277,6 +292,7 @@ class RJSFMetaTag:
277
292
  title: str | None = None,
278
293
  description: str | None = None,
279
294
  help: str | None = None,
295
+ empty_value: str | None = None,
280
296
  **kwargs: Any,
281
297
  ) -> RJSFMetaTag:
282
298
  """Create a date field."""
@@ -286,6 +302,7 @@ class RJSFMetaTag:
286
302
  "ui:title": title,
287
303
  "ui:description": description,
288
304
  "ui:help": help,
305
+ "ui:emptyValue": empty_value,
289
306
  **kwargs,
290
307
  }
291
308
  return RJSFMetaTag({k: v for k, v in attrs.items() if v is not None})
@@ -298,6 +315,7 @@ class RJSFMetaTag:
298
315
  title: str | None = None,
299
316
  description: str | None = None,
300
317
  help: str | None = None,
318
+ empty_value: str | None = None,
301
319
  **kwargs: Any,
302
320
  ) -> RJSFMetaTag:
303
321
  """Create a datetime field."""
@@ -307,6 +325,7 @@ class RJSFMetaTag:
307
325
  "ui:title": title,
308
326
  "ui:description": description,
309
327
  "ui:help": help,
328
+ "ui:emptyValue": empty_value,
310
329
  **kwargs,
311
330
  }
312
331
  return RJSFMetaTag({k: v for k, v in attrs.items() if v is not None})
@@ -319,6 +338,7 @@ class RJSFMetaTag:
319
338
  title: str | None = None,
320
339
  description: str | None = None,
321
340
  help: str | None = None,
341
+ empty_value: str | None = None,
322
342
  **kwargs: Any,
323
343
  ) -> RJSFMetaTag:
324
344
  """Create a time field."""
@@ -328,6 +348,7 @@ class RJSFMetaTag:
328
348
  "ui:title": title,
329
349
  "ui:description": description,
330
350
  "ui:help": help,
351
+ "ui:emptyValue": empty_value,
331
352
  **kwargs,
332
353
  }
333
354
  return RJSFMetaTag({k: v for k, v in attrs.items() if v is not None})
@@ -341,6 +362,7 @@ class RJSFMetaTag:
341
362
  title: str | None = None,
342
363
  description: str | None = None,
343
364
  help: str | None = None,
365
+ empty_value: str = "",
344
366
  **kwargs: Any,
345
367
  ) -> RJSFMetaTag:
346
368
  """Create a file upload field."""
@@ -351,6 +373,7 @@ class RJSFMetaTag:
351
373
  "ui:title": title,
352
374
  "ui:description": description,
353
375
  "ui:help": help,
376
+ "ui:emptyValue": empty_value,
354
377
  **kwargs,
355
378
  }
356
379
  return RJSFMetaTag({k: v for k, v in attrs.items() if v is not None})
@@ -820,12 +843,26 @@ def _is_pyd_model(t: Any) -> bool:
820
843
  return False
821
844
 
822
845
 
846
+ def _maybe_set_string_empty_value(
847
+ node: dict[str, Any],
848
+ base: Any,
849
+ default_string_empty_value: Any,
850
+ ) -> None:
851
+ """Set ``ui:emptyValue`` for plain ``str`` fields when requested and not already set."""
852
+ if default_string_empty_value is _DEFAULT_STRING_EMPTY_VALUE_UNSET:
853
+ return
854
+ if base is not str or "ui:emptyValue" in node:
855
+ return
856
+ node["ui:emptyValue"] = default_string_empty_value
857
+
858
+
823
859
  # --------- Build RJSF-style uiSchema dict from a model *type* ----------
824
860
  def ui_schema_for_model(
825
861
  model_cls: type[BaseModel],
826
862
  *,
827
863
  key_transform: Callable[[str], str] | None = None,
828
864
  value_transform: Callable[[str], str] | None = None,
865
+ default_string_empty_value: Any = _DEFAULT_STRING_EMPTY_VALUE_UNSET,
829
866
  ) -> dict[str, Any]:
830
867
  """
831
868
  Generate a React JSON Schema Form (RJSF) uiSchema from a Pydantic model.
@@ -853,6 +890,14 @@ def ui_schema_for_model(
853
890
  **string values inside ``ui:order`` lists**. Defaults to
854
891
  *key_transform* when not provided, since ``ui:order`` values
855
892
  must match the (transformed) property names.
893
+ default_string_empty_value: When not omitted, ``ui:emptyValue`` is
894
+ added for every plain ``str`` field (including ``list[str]``
895
+ items, ``dict`` values, and ``Union`` branches) that does not
896
+ already define ``ui:emptyValue`` (for example via
897
+ ``Annotated[..., RJSFMetaTag...]``). Use this so bare ``str``
898
+ annotations get RJSF empty-input behaviour without repeating
899
+ metadata. Pass ``None`` to emit JSON ``null`` as the empty
900
+ value.
856
901
 
857
902
  Returns:
858
903
  A dictionary representing the RJSF uiSchema with the structure:
@@ -899,7 +944,12 @@ def ui_schema_for_model(
899
944
 
900
945
  # Nested model -> inline children
901
946
  if _is_pyd_model(base):
902
- node.update(ui_schema_for_model(base))
947
+ node.update(
948
+ ui_schema_for_model(
949
+ base,
950
+ default_string_empty_value=default_string_empty_value,
951
+ )
952
+ )
903
953
 
904
954
  # Array-like -> items
905
955
  elif origin in (list, set, tuple):
@@ -911,7 +961,15 @@ def ui_schema_for_model(
911
961
  if item_meta:
912
962
  item_node.update(item_meta)
913
963
  if _is_pyd_model(item_base):
914
- item_node.update(ui_schema_for_model(item_base))
964
+ item_node.update(
965
+ ui_schema_for_model(
966
+ item_base,
967
+ default_string_empty_value=default_string_empty_value,
968
+ )
969
+ )
970
+ _maybe_set_string_empty_value(
971
+ item_node, item_base, default_string_empty_value
972
+ )
915
973
  node["items"] = item_node
916
974
 
917
975
  # Dict -> additionalProperties (value side)
@@ -924,7 +982,15 @@ def ui_schema_for_model(
924
982
  if val_meta:
925
983
  val_node.update(val_meta)
926
984
  if _is_pyd_model(val_base):
927
- val_node.update(ui_schema_for_model(val_base))
985
+ val_node.update(
986
+ ui_schema_for_model(
987
+ val_base,
988
+ default_string_empty_value=default_string_empty_value,
989
+ )
990
+ )
991
+ _maybe_set_string_empty_value(
992
+ val_node, val_base, default_string_empty_value
993
+ )
928
994
  node["additionalProperties"] = val_node
929
995
 
930
996
  # Union -> anyOf branches
@@ -938,7 +1004,13 @@ def ui_schema_for_model(
938
1004
  if alt_meta:
939
1005
  branch.update(alt_meta)
940
1006
  if _is_pyd_model(alt_b):
941
- branch.update(ui_schema_for_model(alt_b))
1007
+ branch.update(
1008
+ ui_schema_for_model(
1009
+ alt_b,
1010
+ default_string_empty_value=default_string_empty_value,
1011
+ )
1012
+ )
1013
+ _maybe_set_string_empty_value(branch, alt_b, default_string_empty_value)
942
1014
  branches.append(branch)
943
1015
  if branches:
944
1016
  # Check if the metadata already has an anyOf structure (from Union composer)
@@ -950,6 +1022,7 @@ def ui_schema_for_model(
950
1022
  node["anyOf"] = branches
951
1023
 
952
1024
  # Scalars: node already has metadata if any
1025
+ _maybe_set_string_empty_value(node, base, default_string_empty_value)
953
1026
 
954
1027
  ui[fname] = node
955
1028
 
@@ -160,11 +160,11 @@ class SubAgentToolConfig(BaseToolConfig):
160
160
  description="Description of the message parameter extracted by the orchestrator and sent as the input message to the sub-agent.",
161
161
  )
162
162
 
163
- poll_interval: float = Field(
163
+ poll_interval: Annotated[float, RJSFMetaTag.NumberWidget.updown()] = Field(
164
164
  default=1.0,
165
165
  description="Time interval in seconds between polling attempts when waiting for sub-agent response.",
166
166
  )
167
- max_wait: float = Field(
167
+ max_wait: Annotated[float, RJSFMetaTag.NumberWidget.updown()] = Field(
168
168
  default=120.0,
169
169
  description="Maximum time in seconds to wait for the sub-agent response before timing out.",
170
170
  )
@@ -6,6 +6,12 @@ from typing import Any, override
6
6
  from openai import AsyncOpenAI, BaseModel, NotFoundError
7
7
  from openai.types.responses import ResponseCodeInterpreterToolCall, ResponseIncludable
8
8
  from openai.types.responses.tool_param import CodeInterpreter
9
+ from tenacity import (
10
+ AsyncRetrying,
11
+ before_sleep_log,
12
+ stop_after_attempt,
13
+ wait_exponential,
14
+ )
9
15
 
10
16
  from unique_toolkit import ContentService, ShortTermMemoryService
11
17
  from unique_toolkit.agentic.feature_flags.feature_flags import feature_flags
@@ -26,6 +32,25 @@ from unique_toolkit.content.schemas import (
26
32
 
27
33
  logger = logging.getLogger(__name__)
28
34
 
35
+ _UPLOAD_MAX_RETRIES = 2
36
+ _UPLOAD_RETRY_BASE_DELAY = 0.5
37
+
38
+
39
+ def _build_upload_retry() -> AsyncRetrying:
40
+ """Exponential-backoff retry policy for transient upload/download failures.
41
+
42
+ Matches the pattern used in the ``DisplayCodeInterpreterFilesPostProcessor``
43
+ so that every outbound I/O call gets the same behaviour: up to
44
+ ``_UPLOAD_MAX_RETRIES`` extra attempts, doubling the wait each time,
45
+ with a WARNING log before each sleep.
46
+ """
47
+ return AsyncRetrying(
48
+ stop=stop_after_attempt(1 + _UPLOAD_MAX_RETRIES),
49
+ wait=wait_exponential(multiplier=_UPLOAD_RETRY_BASE_DELAY),
50
+ before_sleep=before_sleep_log(logger, logging.WARNING),
51
+ reraise=True,
52
+ )
53
+
29
54
 
30
55
  _SHORT_TERM_MEMORY_NAME = "container_code_execution"
31
56
 
@@ -127,17 +152,34 @@ async def _upload_files_to_container(
127
152
 
128
153
  if upload:
129
154
  logger.info(
130
- "Uploding file %s to container %s", file.id, memory.container_id
155
+ "Uploading file %s (%s) to container %s",
156
+ file.id,
157
+ file.key,
158
+ memory.container_id,
131
159
  )
132
- file_content = await content_service.download_content_to_bytes_async(
133
- content_id=file.id, chat_id=chat_id
160
+ file_content = await _build_upload_retry()(
161
+ content_service.download_content_to_bytes_async,
162
+ content_id=file.id,
163
+ chat_id=chat_id,
134
164
  )
135
-
136
- openai_file = await client.containers.files.create(
165
+ logger.info(
166
+ "Downloaded %d bytes for file %s; uploading to container %s",
167
+ len(file_content),
168
+ file.id,
169
+ container_id,
170
+ )
171
+ openai_file = await _build_upload_retry()(
172
+ client.containers.files.create,
137
173
  container_id=container_id,
138
174
  file=(file.key, file_content),
139
175
  )
140
176
  memory.file_ids[file.id] = openai_file.id
177
+ logger.info(
178
+ "File %s successfully uploaded as OpenAI file %s in container %s",
179
+ file.id,
180
+ openai_file.id,
181
+ container_id,
182
+ )
141
183
 
142
184
  return memory
143
185