unique_toolkit 1.29.0__tar.gz → 1.29.2__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 (194) hide show
  1. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/CHANGELOG.md +6 -0
  2. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/PKG-INFO +8 -1
  3. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/pyproject.toml +3 -1
  4. unique_toolkit-1.29.2/unique_toolkit/_common/utils/jinja/helpers.py +10 -0
  5. unique_toolkit-1.29.2/unique_toolkit/_common/utils/jinja/render.py +11 -0
  6. unique_toolkit-1.29.2/unique_toolkit/_common/utils/jinja/schema.py +65 -0
  7. unique_toolkit-1.29.2/unique_toolkit/_common/utils/jinja/utils.py +80 -0
  8. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/message_log_manager/service.py +9 -0
  9. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/LICENSE +0 -0
  10. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/README.md +0 -0
  11. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/__init__.py +0 -0
  12. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/_common/_base_service.py +0 -0
  13. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/_common/_time_utils.py +0 -0
  14. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/_common/api_calling/human_verification_manager.py +0 -0
  15. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/_common/base_model_type_attribute.py +0 -0
  16. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/_common/chunk_relevancy_sorter/config.py +0 -0
  17. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/_common/chunk_relevancy_sorter/exception.py +0 -0
  18. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/_common/chunk_relevancy_sorter/schemas.py +0 -0
  19. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/_common/chunk_relevancy_sorter/service.py +0 -0
  20. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/_common/chunk_relevancy_sorter/tests/test_service.py +0 -0
  21. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/_common/default_language_model.py +0 -0
  22. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/_common/docx_generator/__init__.py +0 -0
  23. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/_common/docx_generator/config.py +0 -0
  24. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/_common/docx_generator/schemas.py +0 -0
  25. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/_common/docx_generator/service.py +0 -0
  26. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/_common/docx_generator/template/Doc Template.docx +0 -0
  27. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/_common/endpoint_builder.py +0 -0
  28. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/_common/endpoint_requestor.py +0 -0
  29. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/_common/exception.py +0 -0
  30. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/_common/experimental/endpoint_builder.py +0 -0
  31. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/_common/experimental/endpoint_requestor.py +0 -0
  32. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/_common/feature_flags/schema.py +0 -0
  33. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/_common/pydantic/rjsf_tags.py +0 -0
  34. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/_common/pydantic_helpers.py +0 -0
  35. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/_common/referencing.py +0 -0
  36. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/_common/string_utilities.py +0 -0
  37. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/_common/tests/test_referencing.py +0 -0
  38. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/_common/tests/test_string_utilities.py +0 -0
  39. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/_common/token/image_token_counting.py +0 -0
  40. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/_common/token/token_counting.py +0 -0
  41. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/_common/utils/__init__.py +0 -0
  42. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/_common/utils/files.py +0 -0
  43. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/_common/utils/image/encode.py +0 -0
  44. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/_common/utils/structured_output/__init__.py +0 -0
  45. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/_common/utils/structured_output/schema.py +0 -0
  46. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/_common/utils/write_configuration.py +0 -0
  47. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/_common/validate_required_values.py +0 -0
  48. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/_common/validators.py +0 -0
  49. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/__init__.py +0 -0
  50. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/debug_info_manager/debug_info_manager.py +0 -0
  51. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/debug_info_manager/test/test_debug_info_manager.py +0 -0
  52. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/evaluation/config.py +0 -0
  53. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/evaluation/context_relevancy/prompts.py +0 -0
  54. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/evaluation/context_relevancy/schema.py +0 -0
  55. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/evaluation/context_relevancy/service.py +0 -0
  56. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/evaluation/evaluation_manager.py +0 -0
  57. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/evaluation/exception.py +0 -0
  58. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/evaluation/hallucination/constants.py +0 -0
  59. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/evaluation/hallucination/hallucination_evaluation.py +0 -0
  60. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/evaluation/hallucination/prompts.py +0 -0
  61. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/evaluation/hallucination/service.py +0 -0
  62. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/evaluation/hallucination/utils.py +0 -0
  63. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/evaluation/output_parser.py +0 -0
  64. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/evaluation/schemas.py +0 -0
  65. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/evaluation/tests/test_context_relevancy_service.py +0 -0
  66. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/evaluation/tests/test_output_parser.py +0 -0
  67. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/history_manager/history_construction_with_contents.py +0 -0
  68. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/history_manager/history_manager.py +0 -0
  69. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/history_manager/loop_token_reducer.py +0 -0
  70. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/history_manager/utils.py +0 -0
  71. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/message_log_manager/__init__.py +0 -0
  72. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/postprocessor/postprocessor_manager.py +0 -0
  73. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/reference_manager/reference_manager.py +0 -0
  74. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/responses_api/__init__.py +0 -0
  75. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/responses_api/postprocessors/code_display.py +0 -0
  76. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/responses_api/postprocessors/generated_files.py +0 -0
  77. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/responses_api/stream_handler.py +0 -0
  78. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/short_term_memory_manager/persistent_short_term_memory_manager.py +0 -0
  79. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/thinking_manager/thinking_manager.py +0 -0
  80. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/tools/__init__.py +0 -0
  81. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/tools/a2a/__init__.py +0 -0
  82. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/tools/a2a/config.py +0 -0
  83. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/tools/a2a/evaluation/__init__.py +0 -0
  84. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/tools/a2a/evaluation/_utils.py +0 -0
  85. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/tools/a2a/evaluation/config.py +0 -0
  86. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/tools/a2a/evaluation/evaluator.py +0 -0
  87. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/tools/a2a/evaluation/summarization_user_message.j2 +0 -0
  88. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/tools/a2a/manager.py +0 -0
  89. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/tools/a2a/postprocessing/__init__.py +0 -0
  90. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/tools/a2a/postprocessing/_display_utils.py +0 -0
  91. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/tools/a2a/postprocessing/_ref_utils.py +0 -0
  92. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/tools/a2a/postprocessing/config.py +0 -0
  93. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/tools/a2a/postprocessing/display.py +0 -0
  94. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/tools/a2a/postprocessing/references.py +0 -0
  95. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display_utils.py +0 -0
  96. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_ref_utils.py +0 -0
  97. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/tools/a2a/prompts.py +0 -0
  98. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/tools/a2a/response_watcher/__init__.py +0 -0
  99. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/tools/a2a/response_watcher/service.py +0 -0
  100. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/tools/a2a/tool/__init__.py +0 -0
  101. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/tools/a2a/tool/_memory.py +0 -0
  102. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/tools/a2a/tool/_schema.py +0 -0
  103. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/tools/a2a/tool/config.py +0 -0
  104. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/tools/a2a/tool/service.py +0 -0
  105. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/tools/agent_chunks_hanlder.py +0 -0
  106. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/tools/config.py +0 -0
  107. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/tools/factory.py +0 -0
  108. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/tools/mcp/__init__.py +0 -0
  109. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/tools/mcp/manager.py +0 -0
  110. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/tools/mcp/models.py +0 -0
  111. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/tools/mcp/tool_wrapper.py +0 -0
  112. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/tools/openai_builtin/__init__.py +0 -0
  113. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/tools/openai_builtin/base.py +0 -0
  114. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/__init__.py +0 -0
  115. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/config.py +0 -0
  116. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/service.py +0 -0
  117. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/tools/openai_builtin/manager.py +0 -0
  118. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/tools/schemas.py +0 -0
  119. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/tools/test/test_mcp_manager.py +0 -0
  120. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/tools/test/test_tool_manager.py +0 -0
  121. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/tools/test/test_tool_progress_reporter.py +0 -0
  122. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/tools/tool.py +0 -0
  123. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/tools/tool_manager.py +0 -0
  124. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/tools/tool_progress_reporter.py +0 -0
  125. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/tools/utils/__init__.py +0 -0
  126. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/tools/utils/execution/__init__.py +0 -0
  127. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/tools/utils/execution/execution.py +0 -0
  128. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/tools/utils/source_handling/__init__.py +0 -0
  129. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/tools/utils/source_handling/schema.py +0 -0
  130. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/tools/utils/source_handling/source_formatting.py +0 -0
  131. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/agentic/tools/utils/source_handling/tests/test_source_formatting.py +0 -0
  132. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/app/__init__.py +0 -0
  133. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/app/dev_util.py +0 -0
  134. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/app/init_logging.py +0 -0
  135. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/app/init_sdk.py +0 -0
  136. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/app/performance/async_tasks.py +0 -0
  137. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/app/performance/async_wrapper.py +0 -0
  138. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/app/schemas.py +0 -0
  139. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/app/unique_settings.py +0 -0
  140. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/app/verification.py +0 -0
  141. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/chat/__init__.py +0 -0
  142. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/chat/constants.py +0 -0
  143. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/chat/deprecated/service.py +0 -0
  144. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/chat/functions.py +0 -0
  145. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/chat/rendering.py +0 -0
  146. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/chat/responses_api.py +0 -0
  147. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/chat/schemas.py +0 -0
  148. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/chat/service.py +0 -0
  149. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/chat/state.py +0 -0
  150. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/chat/utils.py +0 -0
  151. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/content/__init__.py +0 -0
  152. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/content/constants.py +0 -0
  153. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/content/functions.py +0 -0
  154. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/content/schemas.py +0 -0
  155. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/content/service.py +0 -0
  156. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/content/smart_rules.py +0 -0
  157. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/content/utils.py +0 -0
  158. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/embedding/__init__.py +0 -0
  159. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/embedding/constants.py +0 -0
  160. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/embedding/functions.py +0 -0
  161. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/embedding/schemas.py +0 -0
  162. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/embedding/service.py +0 -0
  163. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/embedding/utils.py +0 -0
  164. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/framework_utilities/__init__.py +0 -0
  165. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/framework_utilities/langchain/client.py +0 -0
  166. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/framework_utilities/langchain/history.py +0 -0
  167. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/framework_utilities/openai/__init__.py +0 -0
  168. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/framework_utilities/openai/client.py +0 -0
  169. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/framework_utilities/openai/message_builder.py +0 -0
  170. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/framework_utilities/utils.py +0 -0
  171. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/language_model/__init__.py +0 -0
  172. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/language_model/_responses_api_utils.py +0 -0
  173. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/language_model/builder.py +0 -0
  174. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/language_model/constants.py +0 -0
  175. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/language_model/default_language_model.py +0 -0
  176. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/language_model/functions.py +0 -0
  177. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/language_model/infos.py +0 -0
  178. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/language_model/prompt.py +0 -0
  179. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/language_model/reference.py +0 -0
  180. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/language_model/schemas.py +0 -0
  181. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/language_model/service.py +0 -0
  182. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/language_model/utils.py +0 -0
  183. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/protocols/support.py +0 -0
  184. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/services/__init__.py +0 -0
  185. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/services/chat_service.py +0 -0
  186. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/services/knowledge_base.py +0 -0
  187. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/short_term_memory/__init__.py +0 -0
  188. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/short_term_memory/constants.py +0 -0
  189. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/short_term_memory/functions.py +0 -0
  190. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/short_term_memory/schemas.py +0 -0
  191. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/short_term_memory/service.py +0 -0
  192. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/smart_rules/__init__.py +0 -0
  193. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/smart_rules/compile.py +0 -0
  194. {unique_toolkit-1.29.0 → unique_toolkit-1.29.2}/unique_toolkit/test_utilities/events.py +0 -0
@@ -5,6 +5,12 @@ 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.29.2] - 2025-11-21
9
+ - Add `jinja` utility helpers to `_common`
10
+
11
+ ## [1.29.1] - 2025-11-21
12
+ - Add early return in `create_message_log_entry` if chat_service doesn't have assistant_message_id (relevant for agentic table)
13
+
8
14
  ## [1.29.0] - 2025-11-21
9
15
  - Add option to force include references in sub agent responses even if unused by main agent response.
10
16
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: unique_toolkit
3
- Version: 1.29.0
3
+ Version: 1.29.2
4
4
  Summary:
5
5
  License: Proprietary
6
6
  Author: Cedric Klinkert
@@ -11,6 +11,7 @@ Classifier: Programming Language :: Python :: 3
11
11
  Classifier: Programming Language :: Python :: 3.12
12
12
  Requires-Dist: docxtpl (>=0.20.1,<0.21.0)
13
13
  Requires-Dist: jambo (>=0.1.2,<0.2.0)
14
+ Requires-Dist: jinja2 (>=3.1.6,<4.0.0)
14
15
  Requires-Dist: markdown-it-py (>=4.0.0,<5.0.0)
15
16
  Requires-Dist: mkdocs-mermaid2-plugin (>=1.2.2,<2.0.0)
16
17
  Requires-Dist: mkdocs-multirepo-plugin (>=0.8.3,<0.9.0)
@@ -120,6 +121,12 @@ All notable changes to this project will be documented in this file.
120
121
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
121
122
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
122
123
 
124
+ ## [1.29.2] - 2025-11-21
125
+ - Add `jinja` utility helpers to `_common`
126
+
127
+ ## [1.29.1] - 2025-11-21
128
+ - Add early return in `create_message_log_entry` if chat_service doesn't have assistant_message_id (relevant for agentic table)
129
+
123
130
  ## [1.29.0] - 2025-11-21
124
131
  - Add option to force include references in sub agent responses even if unused by main agent response.
125
132
 
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "unique_toolkit"
3
- version = "1.29.0"
3
+ version = "1.29.2"
4
4
  description = ""
5
5
  authors = [
6
6
  "Cedric Klinkert <cedric.klinkert@unique.ch>",
@@ -31,6 +31,7 @@ platformdirs = "^4.0.0"
31
31
  pillow = "^10.4.0"
32
32
  unique-sdk = "^0.10.48"
33
33
  jambo = "^0.1.2"
34
+ jinja2 = "^3.1.6"
34
35
  mkdocs-multirepo-plugin = "^0.8.3"
35
36
  mkdocs-mermaid2-plugin = "^1.2.2"
36
37
  docxtpl = "^0.20.1"
@@ -57,6 +58,7 @@ pytest-mock = "^3.14.0"
57
58
  platformdirs = "^4.0.0"
58
59
  pillow = "^10.4.0"
59
60
  ipykernel = "^6.29.5"
61
+ jinja2 = "^3.1.6"
60
62
  # unique-sdk = { path = "../unique_sdk" }
61
63
  mkdocs = "^1.6.1"
62
64
  mkdocs-material = "^9.6.11"
@@ -0,0 +1,10 @@
1
+ from pathlib import Path
2
+
3
+
4
+ def get_parent_dir(file_path: str) -> Path:
5
+ return Path(file_path).parent
6
+
7
+
8
+ def load_template(parent_dir: Path, template_name: str) -> str:
9
+ with open(parent_dir / template_name, "r") as file:
10
+ return file.read().strip()
@@ -0,0 +1,11 @@
1
+ from typing import Any
2
+
3
+ from _common.utils.jinja.schema import Jinja2PromptParams
4
+ from jinja2 import Template
5
+
6
+
7
+ def render_template(template: str, params: Jinja2PromptParams | dict[str, Any]) -> str:
8
+ if isinstance(params, Jinja2PromptParams):
9
+ params = params.model_dump(exclude_none=True, mode="json")
10
+
11
+ return Template(template, lstrip_blocks=True).render(**params)
@@ -0,0 +1,65 @@
1
+ from datetime import date, datetime
2
+ from typing import Annotated, Any
3
+
4
+ from jinja2 import Template
5
+ from pydantic import (
6
+ BaseModel,
7
+ ConfigDict,
8
+ Field,
9
+ SerializerFunctionWrapHandler,
10
+ WrapSerializer,
11
+ )
12
+
13
+ from unique_toolkit.agentic.tools.tool import Tool
14
+
15
+
16
+ class Jinja2PromptParams(BaseModel):
17
+ model_config = ConfigDict(str_strip_whitespace=True)
18
+
19
+ def render_template(self, template: str) -> str:
20
+ params = self.model_dump(exclude_none=True, mode="json")
21
+
22
+ return Template(template, lstrip_blocks=True).render(**params)
23
+
24
+
25
+ class ToolPromptParams(Jinja2PromptParams):
26
+ name: str
27
+ tool_description_for_system_prompt: str = ""
28
+ tool_format_information_for_system_prompt: str = ""
29
+ tool_format_reminder_for_user_prompt: str = ""
30
+
31
+ @classmethod
32
+ def from_tool(cls, tool: Tool) -> "ToolPromptParams":
33
+ return cls(
34
+ name=tool.name,
35
+ tool_description_for_system_prompt=tool.tool_description_for_system_prompt(),
36
+ tool_format_information_for_system_prompt=tool.tool_format_information_for_system_prompt(),
37
+ tool_format_reminder_for_user_prompt=tool.tool_format_reminder_for_user_prompt(),
38
+ )
39
+
40
+
41
+ def serialize_iso8601_date(v: Any, handler: SerializerFunctionWrapHandler) -> str:
42
+ if isinstance(v, date):
43
+ return v.isoformat()
44
+ return handler(v)
45
+
46
+
47
+ ISO8601Date = Annotated[
48
+ date,
49
+ WrapSerializer(serialize_iso8601_date, return_type=str),
50
+ ]
51
+
52
+
53
+ class AgentSystemPromptParams(Jinja2PromptParams):
54
+ info_cutoff_at: ISO8601Date | None
55
+ current_date: ISO8601Date = Field(default_factory=lambda: datetime.now().date())
56
+ tools: list[ToolPromptParams]
57
+ used_tools: list[ToolPromptParams]
58
+ add_citation_appendix: bool = True
59
+ max_tools_per_iteration: int
60
+ max_loop_iterations: int
61
+ current_iteration: int
62
+
63
+
64
+ class AgentUserPromptParams(Jinja2PromptParams):
65
+ user_prompt: str
@@ -0,0 +1,80 @@
1
+ from jinja2 import Environment
2
+ from jinja2.nodes import Const, Getattr, Getitem, Name
3
+ from pydantic import BaseModel
4
+
5
+
6
+ class TemplateValidationResult(BaseModel):
7
+ is_valid: bool
8
+ missing_placeholders: list[str]
9
+ optional_placeholders: list[str]
10
+ unexpected_placeholders: list[str]
11
+
12
+
13
+ def _get_nested_variables(node):
14
+ """Recursively extract all variable references from a Jinja2 AST node."""
15
+ variables = set()
16
+
17
+ if isinstance(node, Name):
18
+ variables.add(node.name)
19
+ elif isinstance(node, (Getattr, Getitem)):
20
+ # For nested attributes like example.category
21
+ if isinstance(node.node, Name):
22
+ if isinstance(node, Getattr):
23
+ variables.add(f"{node.node.name}.{node.attr}")
24
+ else: # Getitem
25
+ if isinstance(node.arg, Const):
26
+ variables.add(f"{node.node.name}.{node.arg.value}")
27
+ else:
28
+ # For dynamic indices, just use the base variable
29
+ variables.add(node.node.name)
30
+ # Recursively process nested nodes
31
+ variables.update(_get_nested_variables(node.node))
32
+
33
+ # Process child nodes
34
+ for child in node.iter_child_nodes():
35
+ variables.update(_get_nested_variables(child))
36
+
37
+ return variables
38
+
39
+
40
+ def validate_template_placeholders(
41
+ template_content: str,
42
+ required_placeholders: set[str],
43
+ optional_placeholders: set[str],
44
+ ) -> TemplateValidationResult:
45
+ """
46
+ Validates that all required placeholders in the template are present.
47
+ Handles both top-level and nested variables (e.g. example.category).
48
+
49
+ Args:
50
+ template_content (str): The content of the Jinja template
51
+ required_placeholders (set[str]): Set of required placeholder names
52
+ optional_placeholders (set[str]): Set of optional placeholder names
53
+
54
+ Returns:
55
+ TemplateValidationResult: A result object containing validation information
56
+ """
57
+ # Create a Jinja environment
58
+ env = Environment()
59
+
60
+ # Parse the template and get all variables including nested ones
61
+ ast = env.parse(template_content)
62
+ template_vars = _get_nested_variables(ast)
63
+
64
+ # Check for missing required placeholders
65
+ missing_placeholders = required_placeholders - template_vars
66
+
67
+ # Check for optional placeholders present
68
+ present_optional = optional_placeholders & template_vars
69
+
70
+ # Check for any unexpected placeholders
71
+ unexpected_placeholders = template_vars - (
72
+ required_placeholders | optional_placeholders
73
+ )
74
+
75
+ return TemplateValidationResult(
76
+ is_valid=len(missing_placeholders) == 0,
77
+ missing_placeholders=sorted(list(missing_placeholders)),
78
+ optional_placeholders=sorted(list(present_optional)),
79
+ unexpected_placeholders=sorted(list(unexpected_placeholders)),
80
+ )
@@ -5,6 +5,7 @@ Target of the method is to extend the step tracking on all levels of the tool.
5
5
  """
6
6
 
7
7
  from collections import defaultdict
8
+ from logging import getLogger
8
9
 
9
10
  from unique_toolkit.chat.schemas import (
10
11
  MessageLogDetails,
@@ -14,6 +15,8 @@ from unique_toolkit.chat.schemas import (
14
15
  from unique_toolkit.chat.service import ChatService
15
16
  from unique_toolkit.content.schemas import ContentReference
16
17
 
18
+ _LOGGER = getLogger(__name__)
19
+
17
20
  # Per-request counters for message log ordering - keyed by message_id
18
21
  # This is a mandatory global variable since we have in the system a bug which makes it impossible to use it as a proper class variable.
19
22
  _request_counters = defaultdict(int)
@@ -71,6 +74,12 @@ class MessageStepLogger:
71
74
  """
72
75
 
73
76
  # Creating a new message log entry with the found hits.
77
+ if not self._chat_service._assistant_message_id:
78
+ _LOGGER.warning(
79
+ "Assistant message id is not set. Skipping message log entry creation."
80
+ )
81
+ return
82
+
74
83
  _ = self._chat_service.create_message_log(
75
84
  message_id=self._chat_service._assistant_message_id,
76
85
  text=text,
File without changes