unique_toolkit 1.47.3__tar.gz → 1.47.5__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (286) hide show
  1. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/CHANGELOG.md +9 -0
  2. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/PKG-INFO +12 -2
  3. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/pyproject.toml +11 -1
  4. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/pydantic/rjsf_tags.py +140 -9
  5. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/tools/a2a/tool/config.py +20 -7
  6. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/config.py +25 -17
  7. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/generated_files.py +12 -20
  8. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/LICENSE +0 -0
  9. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/README.md +0 -0
  10. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/__init__.py +0 -0
  11. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/__init__.py +0 -0
  12. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/_base_service.py +0 -0
  13. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/_time_utils.py +0 -0
  14. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/api_calling/human_verification_manager.py +0 -0
  15. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/base_model_type_attribute.py +0 -0
  16. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/chunk_relevancy_sorter/config.py +0 -0
  17. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/chunk_relevancy_sorter/exception.py +0 -0
  18. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/chunk_relevancy_sorter/schemas.py +0 -0
  19. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/chunk_relevancy_sorter/service.py +0 -0
  20. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/chunk_relevancy_sorter/tests/test_service.py +0 -0
  21. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/config_checker/README.md +0 -0
  22. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/config_checker/__init__.py +0 -0
  23. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/config_checker/__main__.py +0 -0
  24. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/config_checker/cli.py +0 -0
  25. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/config_checker/differ.py +0 -0
  26. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/config_checker/exporter.py +0 -0
  27. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/config_checker/models.py +0 -0
  28. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/config_checker/registry.py +0 -0
  29. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/config_checker/validator.py +0 -0
  30. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/default_language_model.py +0 -0
  31. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/docx_generator/__init__.py +0 -0
  32. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/docx_generator/config.py +0 -0
  33. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/docx_generator/schemas.py +0 -0
  34. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/docx_generator/service.py +0 -0
  35. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/docx_generator/template/Doc Template.docx +0 -0
  36. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/endpoint_builder.py +0 -0
  37. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/endpoint_requestor.py +0 -0
  38. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/event_bus.py +0 -0
  39. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/exception.py +0 -0
  40. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/execution.py +0 -0
  41. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/experimental/endpoint_builder.py +0 -0
  42. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/experimental/endpoint_requestor.py +0 -0
  43. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/experimental/write_up_agent/README.md +0 -0
  44. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/experimental/write_up_agent/__init__.py +0 -0
  45. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/experimental/write_up_agent/agent.py +0 -0
  46. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/experimental/write_up_agent/config.py +0 -0
  47. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/experimental/write_up_agent/examples/data.csv +0 -0
  48. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/experimental/write_up_agent/examples/example_usage.py +0 -0
  49. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/experimental/write_up_agent/schemas.py +0 -0
  50. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/experimental/write_up_agent/services/__init__.py +0 -0
  51. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/__init__.py +0 -0
  52. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/exceptions.py +0 -0
  53. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/service.py +0 -0
  54. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/utils.py +0 -0
  55. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/__init__.py +0 -0
  56. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/config.py +0 -0
  57. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/exceptions.py +0 -0
  58. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/config.py +0 -0
  59. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/system_prompt.j2 +0 -0
  60. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/user_prompt.j2 +0 -0
  61. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/service.py +0 -0
  62. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/__init__.py +0 -0
  63. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/default_template.j2 +0 -0
  64. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/exceptions.py +0 -0
  65. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/service.py +0 -0
  66. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/utils.py +0 -0
  67. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/experimental/write_up_agent/utils.py +0 -0
  68. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/feature_flags/schema.py +0 -0
  69. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/pydantic_helpers.py +0 -0
  70. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/referencing.py +0 -0
  71. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/string_utilities.py +0 -0
  72. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/tests/test_referencing.py +0 -0
  73. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/tests/test_string_utilities.py +0 -0
  74. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/token/__init__.py +0 -0
  75. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/token/image_token_counting.py +0 -0
  76. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/token/token_counting.py +0 -0
  77. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/token/tokenizers/deepseek/tokenizer.json +0 -0
  78. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/token/tokenizers/qwen/tokenizer.json +0 -0
  79. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/utils/__init__.py +0 -0
  80. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/utils/files.py +0 -0
  81. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/utils/image/encode.py +0 -0
  82. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/utils/jinja/helpers.py +0 -0
  83. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/utils/jinja/render.py +0 -0
  84. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/utils/jinja/schema.py +0 -0
  85. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/utils/jinja/utils.py +0 -0
  86. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/utils/structured_output/__init__.py +0 -0
  87. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/utils/structured_output/schema.py +0 -0
  88. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/utils/write_configuration.py +0 -0
  89. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/validate_required_values.py +0 -0
  90. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/_common/validators.py +0 -0
  91. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/__init__.py +0 -0
  92. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/debug_info_manager/debug_info_manager.py +0 -0
  93. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/debug_info_manager/test/test_debug_info_manager.py +0 -0
  94. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/evaluation/config.py +0 -0
  95. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/__init__.py +0 -0
  96. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/system_prompt.j2 +0 -0
  97. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/user_prompt.j2 +0 -0
  98. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/evaluation/context_relevancy/schema.py +0 -0
  99. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/evaluation/context_relevancy/service.py +0 -0
  100. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/evaluation/evaluation_manager.py +0 -0
  101. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/evaluation/exception.py +0 -0
  102. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/evaluation/hallucination/constants.py +0 -0
  103. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/evaluation/hallucination/hallucination_evaluation.py +0 -0
  104. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/evaluation/hallucination/prompts/__init__.py +0 -0
  105. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/evaluation/hallucination/prompts/system_prompt.j2 +0 -0
  106. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/evaluation/hallucination/prompts/user_prompt.j2 +0 -0
  107. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/evaluation/hallucination/service.py +0 -0
  108. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/evaluation/hallucination/utils.py +0 -0
  109. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/evaluation/output_parser.py +0 -0
  110. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/evaluation/schemas.py +0 -0
  111. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/evaluation/tests/fixtures.py +0 -0
  112. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/evaluation/tests/test_config.py +0 -0
  113. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/evaluation/tests/test_context_relevancy_service.py +0 -0
  114. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/evaluation/tests/test_hallucination_constants.py +0 -0
  115. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/evaluation/tests/test_hallucination_utils.py +0 -0
  116. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/evaluation/tests/test_output_parser.py +0 -0
  117. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/evaluation/tests/test_prompt_loaders.py +0 -0
  118. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/evaluation/utils.py +0 -0
  119. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/feature_flags/__init__.py +0 -0
  120. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/feature_flags/feature_flags.py +0 -0
  121. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/history_manager/history_construction_with_contents.py +0 -0
  122. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/history_manager/history_manager.py +0 -0
  123. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/history_manager/loop_token_reducer.py +0 -0
  124. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/history_manager/utils.py +0 -0
  125. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/loop_runner/__init__.py +0 -0
  126. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/loop_runner/_iteration_handler_utils.py +0 -0
  127. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/loop_runner/_responses_iteration_handler_utils.py +0 -0
  128. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/loop_runner/_responses_stream_handler_utils.py +0 -0
  129. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/loop_runner/_stream_handler_utils.py +0 -0
  130. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/loop_runner/base.py +0 -0
  131. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/loop_runner/middleware/__init__.py +0 -0
  132. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/loop_runner/middleware/planning/__init__.py +0 -0
  133. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/loop_runner/middleware/planning/planning.py +0 -0
  134. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/loop_runner/middleware/planning/schema.py +0 -0
  135. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/loop_runner/runners/__init__.py +0 -0
  136. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/loop_runner/runners/basic.py +0 -0
  137. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/loop_runner/runners/qwen/__init__.py +0 -0
  138. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/loop_runner/runners/qwen/helpers.py +0 -0
  139. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/loop_runner/runners/qwen/qwen_runner.py +0 -0
  140. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/message_log_manager/__init__.py +0 -0
  141. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/message_log_manager/service.py +0 -0
  142. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/postprocessor/postprocessor_manager.py +0 -0
  143. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/reference_manager/reference_manager.py +0 -0
  144. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/responses_api/__init__.py +0 -0
  145. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/responses_api/postprocessors/code_display.py +0 -0
  146. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/responses_api/postprocessors/generated_files.py +0 -0
  147. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/responses_api/stream_handler.py +0 -0
  148. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/short_term_memory_manager/persistent_short_term_memory_manager.py +0 -0
  149. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/thinking_manager/thinking_manager.py +0 -0
  150. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/tools/__init__.py +0 -0
  151. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/tools/a2a/__init__.py +0 -0
  152. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/tools/a2a/config.py +0 -0
  153. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/tools/a2a/evaluation/__init__.py +0 -0
  154. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/tools/a2a/evaluation/_utils.py +0 -0
  155. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/tools/a2a/evaluation/config.py +0 -0
  156. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/tools/a2a/evaluation/evaluator.py +0 -0
  157. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/tools/a2a/evaluation/summarization_user_message.j2 +0 -0
  158. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/tools/a2a/manager.py +0 -0
  159. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/tools/a2a/postprocessing/__init__.py +0 -0
  160. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/tools/a2a/postprocessing/_display_utils.py +0 -0
  161. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/tools/a2a/postprocessing/_ref_utils.py +0 -0
  162. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/tools/a2a/postprocessing/config.py +0 -0
  163. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/tools/a2a/postprocessing/display.py +0 -0
  164. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/tools/a2a/postprocessing/references.py +0 -0
  165. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display.py +0 -0
  166. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display_utils.py +0 -0
  167. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_ref_utils.py +0 -0
  168. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/tools/a2a/prompts.py +0 -0
  169. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/tools/a2a/response_watcher/__init__.py +0 -0
  170. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/tools/a2a/response_watcher/service.py +0 -0
  171. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/tools/a2a/tool/__init__.py +0 -0
  172. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/tools/a2a/tool/_memory.py +0 -0
  173. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/tools/a2a/tool/_schema.py +0 -0
  174. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/tools/a2a/tool/service.py +0 -0
  175. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/tools/a2a/tool/test/test_service_utils.py +0 -0
  176. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/tools/agent_chunks_hanlder.py +0 -0
  177. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/tools/config.py +0 -0
  178. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/tools/factory.py +0 -0
  179. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/tools/mcp/__init__.py +0 -0
  180. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/tools/mcp/manager.py +0 -0
  181. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/tools/mcp/models.py +0 -0
  182. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/tools/mcp/tool_wrapper.py +0 -0
  183. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/tools/openai_builtin/__init__.py +0 -0
  184. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/tools/openai_builtin/base.py +0 -0
  185. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/__init__.py +0 -0
  186. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/__init__.py +0 -0
  187. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/code_display.py +0 -0
  188. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/service.py +0 -0
  189. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/tools/openai_builtin/manager.py +0 -0
  190. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/tools/schemas.py +0 -0
  191. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/tools/test/test_mcp_manager.py +0 -0
  192. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/tools/test/test_tool_progress_reporter.py +0 -0
  193. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/tools/tool.py +0 -0
  194. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/tools/tool_manager.py +0 -0
  195. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/tools/tool_progress_reporter.py +0 -0
  196. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/tools/utils/__init__.py +0 -0
  197. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/tools/utils/source_handling/__init__.py +0 -0
  198. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/tools/utils/source_handling/schema.py +0 -0
  199. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/tools/utils/source_handling/source_formatting.py +0 -0
  200. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic/tools/utils/source_handling/tests/test_source_formatting.py +0 -0
  201. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic_table/__init__.py +0 -0
  202. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic_table/schemas.py +0 -0
  203. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/agentic_table/service.py +0 -0
  204. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/app/__init__.py +0 -0
  205. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/app/dev_util.py +0 -0
  206. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/app/fast_api_factory.py +0 -0
  207. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/app/init_logging.py +0 -0
  208. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/app/init_sdk.py +0 -0
  209. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/app/performance/async_tasks.py +0 -0
  210. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/app/performance/async_wrapper.py +0 -0
  211. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/app/schemas.py +0 -0
  212. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/app/unique_settings.py +0 -0
  213. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/app/verification.py +0 -0
  214. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/app/webhook.py +0 -0
  215. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/chat/__init__.py +0 -0
  216. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/chat/cancellation.py +0 -0
  217. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/chat/constants.py +0 -0
  218. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/chat/deprecated/service.py +0 -0
  219. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/chat/functions.py +0 -0
  220. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/chat/rendering.py +0 -0
  221. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/chat/responses_api.py +0 -0
  222. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/chat/schemas.py +0 -0
  223. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/chat/service.py +0 -0
  224. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/chat/state.py +0 -0
  225. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/chat/utils.py +0 -0
  226. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/content/__init__.py +0 -0
  227. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/content/constants.py +0 -0
  228. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/content/functions.py +0 -0
  229. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/content/schemas.py +0 -0
  230. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/content/service.py +0 -0
  231. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/content/smart_rules.py +0 -0
  232. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/content/utils.py +0 -0
  233. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/data_extraction/README.md +0 -0
  234. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/data_extraction/__init__.py +0 -0
  235. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/data_extraction/augmented/__init__.py +0 -0
  236. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/data_extraction/augmented/service.py +0 -0
  237. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/data_extraction/base.py +0 -0
  238. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/data_extraction/basic/__init__.py +0 -0
  239. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/data_extraction/basic/config.py +0 -0
  240. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/data_extraction/basic/prompt.py +0 -0
  241. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/data_extraction/basic/service.py +0 -0
  242. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/elicitation/__init__.py +0 -0
  243. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/elicitation/constants.py +0 -0
  244. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/elicitation/exceptions.py +0 -0
  245. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/elicitation/functions.py +0 -0
  246. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/elicitation/schemas.py +0 -0
  247. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/elicitation/service.py +0 -0
  248. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/embedding/__init__.py +0 -0
  249. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/embedding/constants.py +0 -0
  250. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/embedding/functions.py +0 -0
  251. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/embedding/schemas.py +0 -0
  252. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/embedding/service.py +0 -0
  253. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/embedding/utils.py +0 -0
  254. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/framework_utilities/__init__.py +0 -0
  255. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/framework_utilities/langchain/__init__.py +0 -0
  256. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/framework_utilities/langchain/client.py +0 -0
  257. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/framework_utilities/langchain/history.py +0 -0
  258. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/framework_utilities/openai/__init__.py +0 -0
  259. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/framework_utilities/openai/client.py +0 -0
  260. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/framework_utilities/openai/message_builder.py +0 -0
  261. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/framework_utilities/utils.py +0 -0
  262. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/language_model/__init__.py +0 -0
  263. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/language_model/_responses_api_utils.py +0 -0
  264. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/language_model/builder.py +0 -0
  265. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/language_model/constants.py +0 -0
  266. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/language_model/default_language_model.py +0 -0
  267. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/language_model/functions.py +0 -0
  268. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/language_model/infos.py +0 -0
  269. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/language_model/prompt.py +0 -0
  270. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/language_model/reference.py +0 -0
  271. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/language_model/schemas.py +0 -0
  272. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/language_model/service.py +0 -0
  273. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/language_model/stream_transform.py +0 -0
  274. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/language_model/utils.py +0 -0
  275. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/protocols/support.py +0 -0
  276. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/services/__init__.py +0 -0
  277. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/services/chat_service.py +0 -0
  278. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/services/knowledge_base.py +0 -0
  279. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/short_term_memory/__init__.py +0 -0
  280. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/short_term_memory/constants.py +0 -0
  281. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/short_term_memory/functions.py +0 -0
  282. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/short_term_memory/schemas.py +0 -0
  283. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/short_term_memory/service.py +0 -0
  284. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/smart_rules/__init__.py +0 -0
  285. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/smart_rules/compile.py +0 -0
  286. {unique_toolkit-1.47.3 → unique_toolkit-1.47.5}/unique_toolkit/test_utilities/events.py +0 -0
@@ -5,6 +5,15 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [1.47.5] - 2026-02-25
9
+ - Code execution updates:
10
+ - Always upload to chat. Remove ability to upload to scope.
11
+ - Cleanup displayed config
12
+
13
+ ## [1.47.4] - 2026-02-24
14
+ - Extend RJSF tags: add `CustomWidget.custom()` with `CustomWidgetName`, `ObjectWidget.collapsible()`, `SpecialWidget.hidden()`
15
+ - Add RJSF meta tags to `SubAgentToolConfig` text fields (textarea with rows=5 for tool descriptions and format info)
16
+
8
17
  ## [1.47.3] - 2026-02-24
9
18
  - Add `mcp_server` name to debug info for analytics
10
19
 
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.3
2
2
  Name: unique_toolkit
3
- Version: 1.47.3
3
+ Version: 1.47.5
4
4
  Summary:
5
5
  License: Proprietary
6
6
  Author: Cedric Klinkert
@@ -9,6 +9,7 @@ Requires-Python: >=3.12,<4.0
9
9
  Classifier: License :: Other/Proprietary License
10
10
  Classifier: Programming Language :: Python :: 3
11
11
  Classifier: Programming Language :: Python :: 3.12
12
+ Classifier: Programming Language :: Python :: 3.13
12
13
  Requires-Dist: aiohttp (>=3.12.0,<4.0.0)
13
14
  Requires-Dist: click (>=8.1.0,<9.0.0)
14
15
  Requires-Dist: deepdiff (>=8.6.1,<9.0.0)
@@ -127,6 +128,15 @@ All notable changes to this project will be documented in this file.
127
128
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
128
129
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
129
130
 
131
+ ## [1.47.5] - 2026-02-25
132
+ - Code execution updates:
133
+ - Always upload to chat. Remove ability to upload to scope.
134
+ - Cleanup displayed config
135
+
136
+ ## [1.47.4] - 2026-02-24
137
+ - Extend RJSF tags: add `CustomWidget.custom()` with `CustomWidgetName`, `ObjectWidget.collapsible()`, `SpecialWidget.hidden()`
138
+ - Add RJSF meta tags to `SubAgentToolConfig` text fields (textarea with rows=5 for tool descriptions and format info)
139
+
130
140
  ## [1.47.3] - 2026-02-24
131
141
  - Add `mcp_server` name to debug info for analytics
132
142
 
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "unique_toolkit"
3
- version = "1.47.3"
3
+ version = "1.47.5"
4
4
  description = ""
5
5
  authors = [
6
6
  "Cedric Klinkert <cedric.klinkert@unique.ch>",
@@ -94,6 +94,16 @@ coverage = "pytest --cov=unique_toolkit --cov-report=term-missing"
94
94
  ci-typecheck = { shell = "bash $(git rev-parse --show-toplevel)/.github/scripts/dev.sh typecheck" }
95
95
  ci-coverage = { shell = "bash $(git rev-parse --show-toplevel)/.github/scripts/dev.sh coverage" }
96
96
 
97
+ [tool.pytest.ini_options]
98
+ addopts = "--strict-markers"
99
+ asyncio_mode = "auto"
100
+ markers = [
101
+ "ai: AI-generated tests",
102
+ "verified: AI-generated tests with human verification",
103
+ "wip: Work in progress tests"
104
+ ]
105
+ filterwarnings = ["ignore::DeprecationWarning"]
106
+
97
107
  [tool.deptry]
98
108
  known_first_party = ["unique_toolkit"]
99
109
  extend_exclude = ["docs", "tests", "unique_toolkit/.*/test", "unique_toolkit/.*/tests"]
@@ -13,12 +13,21 @@ Key components:
13
13
 
14
14
  from __future__ import annotations
15
15
 
16
+ from collections.abc import Callable
17
+ from enum import StrEnum
16
18
  from typing import Annotated, Any, Union, get_args, get_origin
17
19
 
18
20
  from pydantic import BaseModel
19
21
  from typing_extensions import get_type_hints
20
22
 
21
23
 
24
+ class CustomWidgetName(StrEnum):
25
+ """Mirrors TypeScript CustomWidgetName. Keep in sync when extending."""
26
+
27
+ ICON_PICKER = "iconPicker"
28
+ # Add new entries here when adding custom widgets in TypeScript
29
+
30
+
22
31
  # --------- Base Metadata carrier ----------
23
32
  class RJSFMetaTag:
24
33
  def __init__(self, attrs: dict[str, Any] | None = None):
@@ -401,7 +410,7 @@ class RJSFMetaTag:
401
410
 
402
411
  attrs = {
403
412
  "ui:widget": "range",
404
- "ui:disabled": str(disabled).lower() if disabled else None,
413
+ "ui:disabled": disabled,
405
414
  "ui:options": options if options else None,
406
415
  "ui:title": title,
407
416
  "ui:description": description,
@@ -573,6 +582,29 @@ class RJSFMetaTag:
573
582
  }
574
583
  return RJSFMetaTag({k: v for k, v in attrs.items() if v is not None})
575
584
 
585
+ class CustomWidget:
586
+ @classmethod
587
+ def custom(
588
+ cls,
589
+ name: CustomWidgetName,
590
+ *,
591
+ disabled: bool = False,
592
+ title: str | None = None,
593
+ description: str | None = None,
594
+ help: str | None = None,
595
+ **kwargs: Any,
596
+ ) -> RJSFMetaTag:
597
+ """Use any custom widget by name. Extend CustomWidgetName when adding new widgets."""
598
+ attrs = {
599
+ "ui:widget": name,
600
+ "ui:disabled": disabled,
601
+ "ui:title": title,
602
+ "ui:description": description,
603
+ "ui:help": help,
604
+ **kwargs,
605
+ }
606
+ return RJSFMetaTag({k: v for k, v in attrs.items() if v is not None})
607
+
576
608
  # --------- Composer Methods ----------
577
609
 
578
610
  @classmethod
@@ -663,7 +695,6 @@ class RJSFMetaTag:
663
695
  for widget in widgets:
664
696
  any_of_branches.append(widget.attrs)
665
697
 
666
- # Start with Union-level metadata
667
698
  union_attrs = {
668
699
  "ui:title": title,
669
700
  "ui:description": description,
@@ -673,11 +704,6 @@ class RJSFMetaTag:
673
704
  **kwargs,
674
705
  }
675
706
 
676
- # Add any additional kwargs
677
- for key, value in kwargs.items():
678
- if value is not None:
679
- union_attrs[f"ui:{key}" if not key.startswith("ui:") else key] = value
680
-
681
707
  union_attrs = {k: v for k, v in union_attrs.items() if v is not None}
682
708
  return RJSFMetaTag({**union_attrs, "anyOf": any_of_branches})
683
709
 
@@ -788,7 +814,12 @@ def _is_pyd_model(t: Any) -> bool:
788
814
 
789
815
 
790
816
  # --------- Build RJSF-style uiSchema dict from a model *type* ----------
791
- def ui_schema_for_model(model_cls: type[BaseModel]) -> dict[str, Any]:
817
+ def ui_schema_for_model(
818
+ model_cls: type[BaseModel],
819
+ *,
820
+ key_transform: Callable[[str], str] | None = None,
821
+ value_transform: Callable[[str], str] | None = None,
822
+ ) -> dict[str, Any]:
792
823
  """
793
824
  Generate a React JSON Schema Form (RJSF) uiSchema from a Pydantic model.
794
825
 
@@ -806,6 +837,15 @@ def ui_schema_for_model(model_cls: type[BaseModel]) -> dict[str, Any]:
806
837
 
807
838
  Args:
808
839
  model_cls: A Pydantic BaseModel subclass to analyze
840
+ key_transform: An optional ``str → str`` function (e.g.
841
+ ``humps.camelize``) applied to **dict keys** (field names).
842
+ RJSF metadata keys like ``ui:widget`` are never transformed.
843
+ When ``None`` (default), the schema is returned with the
844
+ original snake_case keys.
845
+ value_transform: An optional ``str → str`` function applied to
846
+ **string values inside ``ui:order`` lists**. Defaults to
847
+ *key_transform* when not provided, since ``ui:order`` values
848
+ must match the (transformed) property names.
809
849
 
810
850
  Returns:
811
851
  A dictionary representing the RJSF uiSchema with the structure:
@@ -834,11 +874,16 @@ def ui_schema_for_model(model_cls: type[BaseModel]) -> dict[str, Any]:
834
874
  hints = get_type_hints(model_cls, include_extras=True)
835
875
  ui: dict[str, Any] = {}
836
876
 
837
- for fname, ann in hints.items():
877
+ for fname in model_cls.model_fields:
878
+ ann = hints[fname]
838
879
  node: dict[str, Any] = {}
839
880
 
840
881
  base, meta = _walk_annotated_chain(ann)
841
882
  base = _unwrap_optional(base)
883
+ # For Annotated[T, meta] | None, _walk_annotated_chain sees Union (empty meta).
884
+ # Re-process the unwrapped type to extract metadata from the Annotated branch.
885
+ if not meta and get_origin(base) is Annotated:
886
+ base, meta = _walk_annotated_chain(base)
842
887
  # Start with field-level metadata (flat dict)
843
888
  if meta:
844
889
  node.update(meta)
@@ -901,9 +946,95 @@ def ui_schema_for_model(model_cls: type[BaseModel]) -> dict[str, Any]:
901
946
 
902
947
  ui[fname] = node
903
948
 
949
+ ui["ui:order"] = list(model_cls.model_fields.keys())
950
+
951
+ if key_transform is not None:
952
+ return transform_ui_schema(ui, key_transform, value_transform)
904
953
  return ui
905
954
 
906
955
 
956
+ # --------- Key / value transformation helpers ----------
957
+
958
+
959
+ _STRUCTURAL_KEYS = frozenset(
960
+ {
961
+ "anyOf",
962
+ "oneOf",
963
+ "allOf",
964
+ "items",
965
+ "additionalProperties",
966
+ "type",
967
+ }
968
+ )
969
+
970
+
971
+ def _is_metadata_key(key: str, field_names: frozenset[str] | None = None) -> bool:
972
+ """Return ``True`` for RJSF / JSON-Schema structural keys that must not
973
+ be treated as field names (and therefore must not be transformed).
974
+
975
+ When *field_names* is provided, a key that exists in both
976
+ ``_STRUCTURAL_KEYS`` and *field_names* is treated as a field name
977
+ (i.e. **not** metadata), so it will be transformed correctly.
978
+ """
979
+ if key.startswith(("ui:", "$")):
980
+ return True
981
+ if key in _STRUCTURAL_KEYS:
982
+ return field_names is None or key not in field_names
983
+ return False
984
+
985
+
986
+ def transform_ui_schema(
987
+ ui_schema: dict[str, Any],
988
+ key_transform: Callable[[str], str],
989
+ value_transform: Callable[[str], str] | None = None,
990
+ ) -> dict[str, Any]:
991
+ """Apply transforms to field-name keys and ``ui:order`` values.
992
+
993
+ RJSF metadata keys (``ui:widget``, ``ui:options``, …) and JSON-Schema
994
+ structural keys (``anyOf``, ``items``, …) are never transformed — only
995
+ regular field-name keys and the string values inside ``ui:order`` lists.
996
+
997
+ For the common camelCase use-case::
998
+
999
+ from humps import camelize
1000
+ transform_ui_schema(raw_ui, camelize)
1001
+
1002
+ Args:
1003
+ ui_schema: The raw UI schema to transform.
1004
+ key_transform: A ``str → str`` function for dict keys.
1005
+ value_transform: A ``str → str`` function for ``ui:order`` values.
1006
+ Defaults to *key_transform* when ``None``.
1007
+
1008
+ Returns:
1009
+ A new dictionary with transformed keys and ``ui:order`` values.
1010
+ """
1011
+ val_fn = value_transform if value_transform is not None else key_transform
1012
+ top_level_fields = frozenset(ui_schema.get("ui:order", []))
1013
+ return _transform_obj(ui_schema, key_transform, val_fn, top_level_fields)
1014
+
1015
+
1016
+ def _transform_obj(
1017
+ obj: Any,
1018
+ key_fn: Callable[[str], str],
1019
+ val_fn: Callable[[str], str],
1020
+ field_names: frozenset[str] | None = None,
1021
+ ) -> Any:
1022
+ if isinstance(obj, dict):
1023
+ result: dict[str, Any] = {}
1024
+ child_fields = frozenset(obj.get("ui:order", [])) if "ui:order" in obj else None
1025
+ names = field_names if child_fields is None else child_fields
1026
+ for k, v in obj.items():
1027
+ new_key = k if _is_metadata_key(k, names) else key_fn(k)
1028
+ if k == "ui:order" and isinstance(v, list):
1029
+ result[new_key] = [val_fn(s) if isinstance(s, str) else s for s in v]
1030
+ else:
1031
+ result[new_key] = _transform_obj(v, key_fn, val_fn)
1032
+ return result
1033
+ if isinstance(obj, list):
1034
+ return [_transform_obj(item, key_fn, val_fn) for item in obj]
1035
+ return obj
1036
+
1037
+
907
1038
  # --------- Example ---------
908
1039
  if __name__ == "__main__":
909
1040
 
@@ -5,6 +5,7 @@ from typing import Annotated, Generic, Literal, TypeVar
5
5
  from pydantic import Field
6
6
  from pydantic.main import BaseModel
7
7
 
8
+ from unique_toolkit._common.pydantic.rjsf_tags import RJSFMetaTag
8
9
  from unique_toolkit._common.pydantic_helpers import get_configuration_dict
9
10
  from unique_toolkit.agentic.tools.schemas import BaseToolConfig
10
11
 
@@ -118,27 +119,37 @@ class SubAgentToolConfig(BaseToolConfig):
118
119
  description="The list of tool names that will be forced to be called for this sub-agent.",
119
120
  )
120
121
 
121
- tool_description_for_system_prompt: str = Field(
122
+ tool_description_for_system_prompt: Annotated[
123
+ str, RJSFMetaTag.StringWidget.textarea(rows=5)
124
+ ] = Field(
122
125
  default="",
123
126
  description="Description of the tool that will be included in the system prompt.",
124
127
  )
125
- tool_description: str = Field(
128
+ tool_description: Annotated[str, RJSFMetaTag.StringWidget.textarea(rows=5)] = Field(
126
129
  default="",
127
130
  description="Description of the tool that will be included in the tools sent to the model.",
128
131
  )
129
- param_description_sub_agent_user_message: str = Field(
132
+ param_description_sub_agent_user_message: Annotated[
133
+ str, RJSFMetaTag.StringWidget.textarea(rows=5)
134
+ ] = Field(
130
135
  default=DEFAULT_PARAM_DESCRIPTION_SUB_AGENT_USER_MESSAGE,
131
136
  description="Description of the user message parameter that will be sent to the model.",
132
137
  )
133
- tool_format_information_for_system_prompt: str = Field(
138
+ tool_format_information_for_system_prompt: Annotated[
139
+ str, RJSFMetaTag.StringWidget.textarea(rows=5)
140
+ ] = Field(
134
141
  default="",
135
142
  description="Format information that will be included in the system prompt to guide response formatting.",
136
143
  )
137
- tool_description_for_user_prompt: str = Field(
144
+ tool_description_for_user_prompt: Annotated[
145
+ str, RJSFMetaTag.StringWidget.textarea(rows=5)
146
+ ] = Field(
138
147
  default="",
139
148
  description="Description of the tool that will be included in the user prompt.",
140
149
  )
141
- tool_format_information_for_user_prompt: str = Field(
150
+ tool_format_information_for_user_prompt: Annotated[
151
+ str, RJSFMetaTag.StringWidget.textarea(rows=5)
152
+ ] = Field(
142
153
  default="",
143
154
  description="Format information that will be included in the user prompt to guide response formatting.",
144
155
  )
@@ -156,7 +167,9 @@ class SubAgentToolConfig(BaseToolConfig):
156
167
  description="The condition that will be used to stop the polling for the sub-agent response.",
157
168
  )
158
169
 
159
- tool_input_json_schema: str | None = Field(
170
+ tool_input_json_schema: (
171
+ Annotated[str, RJSFMetaTag.StringWidget.textarea(rows=5)] | None
172
+ ) = Field(
160
173
  default=None,
161
174
  description="A custom JSON schema to send to the llm as the tool input schema.",
162
175
  )
@@ -1,9 +1,10 @@
1
1
  from typing import Annotated
2
2
 
3
- from pydantic import Field
3
+ from pydantic import Field, field_validator
4
4
  from pydantic.json_schema import SkipJsonSchema
5
5
 
6
6
  from unique_toolkit._common.config_checker import register_config
7
+ from unique_toolkit._common.pydantic.rjsf_tags import RJSFMetaTag
7
8
  from unique_toolkit.agentic.tools.factory import ToolFactory
8
9
  from unique_toolkit.agentic.tools.openai_builtin.base import (
9
10
  OpenAIBuiltInToolName,
@@ -66,11 +67,21 @@ class OpenAICodeInterpreterConfig(BaseToolConfig):
66
67
  default=True,
67
68
  description="If set, the files uploaded to the chat will be uploaded to the container where code is executed.",
68
69
  )
69
- tool_description: str = Field(
70
+ tool_description: Annotated[
71
+ str,
72
+ RJSFMetaTag.StringWidget.textarea(
73
+ rows=len(DEFAULT_TOOL_DESCRIPTION.split("\n"))
74
+ ),
75
+ ] = Field(
70
76
  default=DEFAULT_TOOL_DESCRIPTION,
71
77
  description="The description of the tool that will be included in the system prompt.",
72
78
  )
73
- tool_description_for_system_prompt: str = Field(
79
+ tool_description_for_system_prompt: Annotated[
80
+ str,
81
+ RJSFMetaTag.StringWidget.textarea(
82
+ rows=int(len(DEFAULT_TOOL_DESCRIPTION_FOR_SYSTEM_PROMPT.split("\n")) / 2)
83
+ ),
84
+ ] = Field(
74
85
  default=DEFAULT_TOOL_DESCRIPTION_FOR_SYSTEM_PROMPT,
75
86
  description="The description of the tool that will be included in the system prompt.",
76
87
  )
@@ -94,27 +105,24 @@ class OpenAICodeInterpreterConfig(BaseToolConfig):
94
105
  class CodeInterpreterExtendedConfig(BaseToolConfig):
95
106
  generated_files_config: DisplayCodeInterpreterFilesPostProcessorConfig = Field(
96
107
  default=DisplayCodeInterpreterFilesPostProcessorConfig(),
97
- title="Generated files config",
98
- description="Display config for generated files",
108
+ title="Generated files",
99
109
  )
100
110
 
101
- executed_code_display_config: (
102
- Annotated[
103
- ShowExecutedCodePostprocessorConfig,
104
- Field(title="Active"),
105
- ]
106
- | Annotated[
107
- None,
108
- Field(title="Deactivated", description="None"),
109
- ]
110
- ) = Field(
111
+ executed_code_display_config: ShowExecutedCodePostprocessorConfig = Field(
111
112
  default=ShowExecutedCodePostprocessorConfig(),
112
- description="If active, generated code will be prepended to the LLM answer",
113
+ title="Code display",
113
114
  )
114
115
 
116
+ @field_validator("executed_code_display_config", mode="before")
117
+ @classmethod
118
+ def _default_executed_code_display_config(cls, v):
119
+ if v is None:
120
+ return ShowExecutedCodePostprocessorConfig()
121
+ return v
122
+
115
123
  tool_config: OpenAICodeInterpreterConfig = Field(
116
124
  default=OpenAICodeInterpreterConfig(),
117
- title="Tool config",
125
+ title="Tool",
118
126
  )
119
127
 
120
128
 
@@ -7,6 +7,7 @@ from typing import NamedTuple, override
7
7
  from openai import AsyncOpenAI
8
8
  from openai.types.responses.response_output_text import AnnotationContainerFileCitation
9
9
  from pydantic import BaseModel, Field, RootModel
10
+ from pydantic.json_schema import SkipJsonSchema
10
11
 
11
12
  from unique_toolkit import ChatService
12
13
  from unique_toolkit._common.execution import failsafe_async
@@ -29,11 +30,11 @@ logger = logging.getLogger(__name__)
29
30
 
30
31
  class DisplayCodeInterpreterFilesPostProcessorConfig(BaseModel):
31
32
  model_config = get_configuration_dict()
32
- upload_to_chat: bool = Field(
33
+ upload_to_chat: SkipJsonSchema[bool] = Field(
33
34
  default=True,
34
35
  description="Whether to upload the generated files to the chat.",
35
36
  )
36
- upload_scope_id: str = Field(
37
+ upload_scope_id: SkipJsonSchema[str] = Field(
37
38
  default="<SCOPE_ID_PLACEHOLDER>",
38
39
  description="The scope ID where the generated files will be uploaded. Ignored if `uploadToChat` is set.",
39
40
  )
@@ -97,7 +98,7 @@ class DisplayCodeInterpreterFilesPostProcessor(
97
98
  self._config = config
98
99
  self._company_id = company_id
99
100
 
100
- if self._config.upload_to_chat and self._chat_service is None:
101
+ if self._chat_service is None:
101
102
  raise ValueError("ChatService is required if uploadToChat is True")
102
103
 
103
104
  self._short_term_memory_manager = None
@@ -231,23 +232,14 @@ class DisplayCodeInterpreterFilesPostProcessor(
231
232
  container_file.filename,
232
233
  )
233
234
 
234
- if self._config.upload_to_chat:
235
- assert self._chat_service is not None # Checked in __init__
236
- content = await self._chat_service.upload_to_chat_from_bytes_async(
237
- content=file_content.content,
238
- content_name=container_file.filename,
239
- mime_type=guess_type(container_file.filename)[0] or "text/plain",
240
- skip_ingestion=True,
241
- hide_in_chat=True,
242
- )
243
- else:
244
- content = await self._content_service.upload_content_from_bytes_async(
245
- content=file_content.content,
246
- content_name=container_file.filename,
247
- mime_type=guess_type(container_file.filename)[0] or "text/plain",
248
- scope_id=self._config.upload_scope_id,
249
- skip_ingestion=True,
250
- )
235
+ assert self._chat_service is not None # Checked in __init__
236
+ content = await self._chat_service.upload_to_chat_from_bytes_async(
237
+ content=file_content.content,
238
+ content_name=container_file.filename,
239
+ mime_type=guess_type(container_file.filename)[0] or "text/plain",
240
+ skip_ingestion=True,
241
+ hide_in_chat=True,
242
+ )
251
243
 
252
244
  return _ContentInfo(filename=container_file.filename, content_id=content.id)
253
245
 
File without changes