unique_toolkit 1.36.0__tar.gz → 1.43.10__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 (256) hide show
  1. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/CHANGELOG.md +102 -9
  2. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/PKG-INFO +129 -32
  3. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/README.md +22 -20
  4. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/pyproject.toml +32 -20
  5. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/_common/docx_generator/schemas.py +4 -11
  6. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/_common/docx_generator/service.py +0 -9
  7. unique_toolkit-1.43.10/unique_toolkit/_common/experimental/write_up_agent/README.md +848 -0
  8. unique_toolkit-1.43.10/unique_toolkit/_common/experimental/write_up_agent/__init__.py +22 -0
  9. unique_toolkit-1.43.10/unique_toolkit/_common/experimental/write_up_agent/agent.py +170 -0
  10. unique_toolkit-1.43.10/unique_toolkit/_common/experimental/write_up_agent/config.py +42 -0
  11. unique_toolkit-1.43.10/unique_toolkit/_common/experimental/write_up_agent/examples/data.csv +13 -0
  12. unique_toolkit-1.43.10/unique_toolkit/_common/experimental/write_up_agent/examples/example_usage.py +78 -0
  13. unique_toolkit-1.43.10/unique_toolkit/_common/experimental/write_up_agent/schemas.py +36 -0
  14. unique_toolkit-1.43.10/unique_toolkit/_common/experimental/write_up_agent/services/__init__.py +13 -0
  15. unique_toolkit-1.43.10/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/__init__.py +19 -0
  16. unique_toolkit-1.43.10/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/exceptions.py +29 -0
  17. unique_toolkit-1.43.10/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/service.py +150 -0
  18. unique_toolkit-1.43.10/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/utils.py +130 -0
  19. unique_toolkit-1.43.10/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/__init__.py +27 -0
  20. unique_toolkit-1.43.10/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/config.py +56 -0
  21. unique_toolkit-1.43.10/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/exceptions.py +79 -0
  22. unique_toolkit-1.43.10/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/config.py +34 -0
  23. unique_toolkit-1.43.10/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/system_prompt.j2 +15 -0
  24. unique_toolkit-1.43.10/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/user_prompt.j2 +21 -0
  25. unique_toolkit-1.43.10/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/service.py +369 -0
  26. unique_toolkit-1.43.10/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/__init__.py +29 -0
  27. unique_toolkit-1.43.10/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/default_template.j2 +37 -0
  28. unique_toolkit-1.43.10/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/exceptions.py +39 -0
  29. unique_toolkit-1.43.10/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/service.py +191 -0
  30. unique_toolkit-1.43.10/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/utils.py +182 -0
  31. unique_toolkit-1.43.10/unique_toolkit/_common/experimental/write_up_agent/utils.py +24 -0
  32. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/_common/validators.py +1 -10
  33. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/evaluation/config.py +6 -14
  34. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/evaluation/evaluation_manager.py +4 -4
  35. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/evaluation/hallucination/constants.py +3 -2
  36. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/evaluation/hallucination/utils.py +54 -7
  37. unique_toolkit-1.43.10/unique_toolkit/agentic/feature_flags/__init__.py +6 -0
  38. unique_toolkit-1.43.10/unique_toolkit/agentic/feature_flags/feature_flags.py +32 -0
  39. unique_toolkit-1.43.10/unique_toolkit/agentic/loop_runner/__init__.py +37 -0
  40. unique_toolkit-1.43.10/unique_toolkit/agentic/loop_runner/_iteration_handler_utils.py +95 -0
  41. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/loop_runner/middleware/__init__.py +5 -1
  42. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/loop_runner/middleware/planning/planning.py +1 -1
  43. unique_toolkit-1.43.10/unique_toolkit/agentic/loop_runner/runners/__init__.py +21 -0
  44. unique_toolkit-1.43.10/unique_toolkit/agentic/loop_runner/runners/basic.py +46 -0
  45. unique_toolkit-1.43.10/unique_toolkit/agentic/loop_runner/runners/qwen/__init__.py +17 -0
  46. unique_toolkit-1.43.10/unique_toolkit/agentic/loop_runner/runners/qwen/helpers.py +48 -0
  47. unique_toolkit-1.43.10/unique_toolkit/agentic/loop_runner/runners/qwen/qwen_runner.py +121 -0
  48. unique_toolkit-1.43.10/unique_toolkit/agentic/message_log_manager/service.py +169 -0
  49. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/postprocessor/postprocessor_manager.py +1 -1
  50. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/responses_api/postprocessors/generated_files.py +3 -2
  51. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/short_term_memory_manager/persistent_short_term_memory_manager.py +1 -1
  52. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/tools/a2a/evaluation/config.py +1 -1
  53. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/tools/a2a/evaluation/evaluator.py +1 -1
  54. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/tools/mcp/tool_wrapper.py +2 -0
  55. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/service.py +1 -1
  56. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/tools/tool_manager.py +4 -4
  57. unique_toolkit-1.43.10/unique_toolkit/agentic_table/__init__.py +56 -0
  58. unique_toolkit-1.43.10/unique_toolkit/agentic_table/schemas.py +316 -0
  59. unique_toolkit-1.43.10/unique_toolkit/agentic_table/service.py +452 -0
  60. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/app/fast_api_factory.py +15 -7
  61. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/app/schemas.py +15 -7
  62. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/app/unique_settings.py +9 -1
  63. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/chat/functions.py +24 -0
  64. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/chat/responses_api.py +1 -1
  65. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/chat/schemas.py +4 -0
  66. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/content/functions.py +12 -0
  67. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/content/utils.py +9 -6
  68. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/language_model/infos.py +227 -9
  69. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/language_model/schemas.py +1 -1
  70. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/services/chat_service.py +455 -1
  71. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/short_term_memory/functions.py +126 -4
  72. unique_toolkit-1.43.10/unique_toolkit/short_term_memory/schemas.py +54 -0
  73. unique_toolkit-1.43.10/unique_toolkit/smart_rules/__init__.py +0 -0
  74. unique_toolkit-1.36.0/unique_toolkit/agentic/loop_runner/__init__.py +0 -19
  75. unique_toolkit-1.36.0/unique_toolkit/agentic/loop_runner/runners/__init__.py +0 -6
  76. unique_toolkit-1.36.0/unique_toolkit/agentic/loop_runner/runners/basic.py +0 -94
  77. unique_toolkit-1.36.0/unique_toolkit/agentic/message_log_manager/service.py +0 -93
  78. unique_toolkit-1.36.0/unique_toolkit/agentic/tools/utils/__init__.py +0 -19
  79. unique_toolkit-1.36.0/unique_toolkit/agentic/tools/utils/execution/__init__.py +0 -1
  80. unique_toolkit-1.36.0/unique_toolkit/short_term_memory/schemas.py +0 -49
  81. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/LICENSE +0 -0
  82. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/__init__.py +0 -0
  83. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/_common/_base_service.py +0 -0
  84. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/_common/_time_utils.py +0 -0
  85. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/_common/api_calling/human_verification_manager.py +0 -0
  86. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/_common/base_model_type_attribute.py +0 -0
  87. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/_common/chunk_relevancy_sorter/config.py +0 -0
  88. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/_common/chunk_relevancy_sorter/exception.py +0 -0
  89. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/_common/chunk_relevancy_sorter/schemas.py +0 -0
  90. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/_common/chunk_relevancy_sorter/service.py +0 -0
  91. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/_common/chunk_relevancy_sorter/tests/test_service.py +0 -0
  92. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/_common/default_language_model.py +0 -0
  93. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/_common/docx_generator/__init__.py +0 -0
  94. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/_common/docx_generator/config.py +0 -0
  95. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/_common/docx_generator/template/Doc Template.docx +0 -0
  96. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/_common/endpoint_builder.py +0 -0
  97. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/_common/endpoint_requestor.py +0 -0
  98. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/_common/exception.py +0 -0
  99. {unique_toolkit-1.36.0/unique_toolkit/agentic/tools/utils/execution → unique_toolkit-1.43.10/unique_toolkit/_common}/execution.py +0 -0
  100. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/_common/experimental/endpoint_builder.py +0 -0
  101. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/_common/experimental/endpoint_requestor.py +0 -0
  102. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/_common/feature_flags/schema.py +0 -0
  103. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/_common/pydantic/rjsf_tags.py +0 -0
  104. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/_common/pydantic_helpers.py +0 -0
  105. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/_common/referencing.py +0 -0
  106. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/_common/string_utilities.py +0 -0
  107. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/_common/tests/test_referencing.py +0 -0
  108. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/_common/tests/test_string_utilities.py +0 -0
  109. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/_common/token/image_token_counting.py +0 -0
  110. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/_common/token/token_counting.py +0 -0
  111. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/_common/utils/__init__.py +0 -0
  112. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/_common/utils/files.py +0 -0
  113. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/_common/utils/image/encode.py +0 -0
  114. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/_common/utils/jinja/helpers.py +0 -0
  115. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/_common/utils/jinja/render.py +0 -0
  116. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/_common/utils/jinja/schema.py +0 -0
  117. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/_common/utils/jinja/utils.py +0 -0
  118. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/_common/utils/structured_output/__init__.py +0 -0
  119. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/_common/utils/structured_output/schema.py +0 -0
  120. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/_common/utils/write_configuration.py +0 -0
  121. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/_common/validate_required_values.py +0 -0
  122. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/__init__.py +0 -0
  123. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/debug_info_manager/debug_info_manager.py +0 -0
  124. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/debug_info_manager/test/test_debug_info_manager.py +0 -0
  125. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/evaluation/context_relevancy/prompts.py +0 -0
  126. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/evaluation/context_relevancy/schema.py +0 -0
  127. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/evaluation/context_relevancy/service.py +0 -0
  128. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/evaluation/exception.py +0 -0
  129. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/evaluation/hallucination/hallucination_evaluation.py +0 -0
  130. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/evaluation/hallucination/prompts.py +0 -0
  131. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/evaluation/hallucination/service.py +0 -0
  132. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/evaluation/output_parser.py +0 -0
  133. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/evaluation/schemas.py +0 -0
  134. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/evaluation/tests/test_context_relevancy_service.py +0 -0
  135. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/evaluation/tests/test_output_parser.py +0 -0
  136. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/history_manager/history_construction_with_contents.py +0 -0
  137. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/history_manager/history_manager.py +0 -0
  138. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/history_manager/loop_token_reducer.py +0 -0
  139. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/history_manager/utils.py +0 -0
  140. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/loop_runner/_stream_handler_utils.py +0 -0
  141. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/loop_runner/base.py +0 -0
  142. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/loop_runner/middleware/planning/__init__.py +0 -0
  143. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/loop_runner/middleware/planning/schema.py +0 -0
  144. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/message_log_manager/__init__.py +0 -0
  145. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/reference_manager/reference_manager.py +0 -0
  146. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/responses_api/__init__.py +0 -0
  147. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/responses_api/postprocessors/code_display.py +0 -0
  148. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/responses_api/stream_handler.py +0 -0
  149. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/thinking_manager/thinking_manager.py +0 -0
  150. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/tools/__init__.py +0 -0
  151. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/tools/a2a/__init__.py +0 -0
  152. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/tools/a2a/config.py +0 -0
  153. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/tools/a2a/evaluation/__init__.py +0 -0
  154. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/tools/a2a/evaluation/_utils.py +0 -0
  155. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/tools/a2a/evaluation/summarization_user_message.j2 +0 -0
  156. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/tools/a2a/manager.py +0 -0
  157. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/tools/a2a/postprocessing/__init__.py +0 -0
  158. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/tools/a2a/postprocessing/_display_utils.py +0 -0
  159. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/tools/a2a/postprocessing/_ref_utils.py +0 -0
  160. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/tools/a2a/postprocessing/config.py +0 -0
  161. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/tools/a2a/postprocessing/display.py +0 -0
  162. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/tools/a2a/postprocessing/references.py +0 -0
  163. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display.py +0 -0
  164. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display_utils.py +0 -0
  165. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_ref_utils.py +0 -0
  166. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/tools/a2a/prompts.py +0 -0
  167. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/tools/a2a/response_watcher/__init__.py +0 -0
  168. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/tools/a2a/response_watcher/service.py +0 -0
  169. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/tools/a2a/tool/__init__.py +0 -0
  170. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/tools/a2a/tool/_memory.py +0 -0
  171. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/tools/a2a/tool/_schema.py +0 -0
  172. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/tools/a2a/tool/config.py +0 -0
  173. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/tools/a2a/tool/service.py +0 -0
  174. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/tools/a2a/tool/test/test_service_utils.py +0 -0
  175. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/tools/agent_chunks_hanlder.py +0 -0
  176. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/tools/config.py +0 -0
  177. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/tools/factory.py +0 -0
  178. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/tools/mcp/__init__.py +0 -0
  179. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/tools/mcp/manager.py +0 -0
  180. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/tools/mcp/models.py +0 -0
  181. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/tools/openai_builtin/__init__.py +0 -0
  182. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/tools/openai_builtin/base.py +0 -0
  183. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/__init__.py +0 -0
  184. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/config.py +0 -0
  185. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/tools/openai_builtin/manager.py +0 -0
  186. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/tools/schemas.py +0 -0
  187. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/tools/test/test_mcp_manager.py +0 -0
  188. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/tools/test/test_tool_progress_reporter.py +0 -0
  189. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/tools/tool.py +0 -0
  190. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/tools/tool_progress_reporter.py +0 -0
  191. {unique_toolkit-1.36.0/unique_toolkit/agentic/tools/utils/source_handling → unique_toolkit-1.43.10/unique_toolkit/agentic/tools/utils}/__init__.py +0 -0
  192. {unique_toolkit-1.36.0/unique_toolkit/smart_rules → unique_toolkit-1.43.10/unique_toolkit/agentic/tools/utils/source_handling}/__init__.py +0 -0
  193. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/tools/utils/source_handling/schema.py +0 -0
  194. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/tools/utils/source_handling/source_formatting.py +0 -0
  195. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/agentic/tools/utils/source_handling/tests/test_source_formatting.py +0 -0
  196. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/app/__init__.py +0 -0
  197. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/app/dev_util.py +0 -0
  198. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/app/init_logging.py +0 -0
  199. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/app/init_sdk.py +0 -0
  200. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/app/performance/async_tasks.py +0 -0
  201. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/app/performance/async_wrapper.py +0 -0
  202. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/app/verification.py +0 -0
  203. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/app/webhook.py +0 -0
  204. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/chat/__init__.py +0 -0
  205. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/chat/constants.py +0 -0
  206. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/chat/deprecated/service.py +0 -0
  207. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/chat/rendering.py +0 -0
  208. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/chat/service.py +0 -0
  209. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/chat/state.py +0 -0
  210. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/chat/utils.py +0 -0
  211. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/content/__init__.py +0 -0
  212. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/content/constants.py +0 -0
  213. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/content/schemas.py +0 -0
  214. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/content/service.py +0 -0
  215. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/content/smart_rules.py +0 -0
  216. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/data_extraction/README.md +0 -0
  217. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/data_extraction/__init__.py +0 -0
  218. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/data_extraction/augmented/__init__.py +0 -0
  219. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/data_extraction/augmented/service.py +0 -0
  220. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/data_extraction/base.py +0 -0
  221. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/data_extraction/basic/__init__.py +0 -0
  222. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/data_extraction/basic/config.py +0 -0
  223. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/data_extraction/basic/prompt.py +0 -0
  224. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/data_extraction/basic/service.py +0 -0
  225. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/embedding/__init__.py +0 -0
  226. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/embedding/constants.py +0 -0
  227. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/embedding/functions.py +0 -0
  228. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/embedding/schemas.py +0 -0
  229. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/embedding/service.py +0 -0
  230. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/embedding/utils.py +0 -0
  231. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/framework_utilities/__init__.py +0 -0
  232. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/framework_utilities/langchain/__init__.py +0 -0
  233. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/framework_utilities/langchain/client.py +0 -0
  234. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/framework_utilities/langchain/history.py +0 -0
  235. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/framework_utilities/openai/__init__.py +0 -0
  236. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/framework_utilities/openai/client.py +0 -0
  237. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/framework_utilities/openai/message_builder.py +0 -0
  238. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/framework_utilities/utils.py +0 -0
  239. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/language_model/__init__.py +0 -0
  240. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/language_model/_responses_api_utils.py +0 -0
  241. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/language_model/builder.py +0 -0
  242. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/language_model/constants.py +0 -0
  243. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/language_model/default_language_model.py +0 -0
  244. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/language_model/functions.py +0 -0
  245. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/language_model/prompt.py +0 -0
  246. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/language_model/reference.py +0 -0
  247. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/language_model/service.py +0 -0
  248. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/language_model/utils.py +0 -0
  249. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/protocols/support.py +0 -0
  250. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/services/__init__.py +0 -0
  251. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/services/knowledge_base.py +0 -0
  252. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/short_term_memory/__init__.py +0 -0
  253. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/short_term_memory/constants.py +0 -0
  254. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/short_term_memory/service.py +0 -0
  255. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/smart_rules/compile.py +0 -0
  256. {unique_toolkit-1.36.0 → unique_toolkit-1.43.10}/unique_toolkit/test_utilities/events.py +0 -0
@@ -5,6 +5,108 @@ 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.43.10] - 2026-01-21
9
+ - Lowering the max iterations of the main agents and hard blocking Qwen3 from using too many agent rounds
10
+
11
+ ## [1.43.9] - 2026-01-20
12
+ - Fix system message role conversion in responses API mode (was incorrectly set to "user", now correctly set to "system")
13
+
14
+ ## [1.43.8] - 2026-01-16
15
+ - Add local CI testing commands via poethepoet (poe lint, poe test, poe ci-typecheck, etc.)
16
+
17
+ ## [1.43.7] - 2026-01-15
18
+ - Cleanup hallucination config that is displayed in space config
19
+
20
+ ## [1.43.6] - 2026-01-13
21
+ - Update message execution pipeline functions and service
22
+
23
+ ## [1.43.5] - 2026-01-13
24
+ - Add deptry to dev dependencies for CI dependency checks
25
+ - Fix missing base_settings fixture parameter in FastAPI test
26
+
27
+ ## [1.43.4] - 2026-01-14
28
+ - chore(deps-dev): bump aiohttp from 3.13.2 to 3.13.3
29
+
30
+ ## [1.43.3] - 2026-01-13
31
+ - Changing default `assessment_type` in `SubAgentEvaluationServiceConfig` to `HALLUCINATION`
32
+
33
+ ## [1.43.2] - 2026-01-12
34
+ - `DocxGeneratorService`: Alignment need to be specified by the template rather than in code
35
+
36
+ ## [1.43.1] - 2026-01-12
37
+ - Remove accidental example report.md from repo
38
+
39
+ ## [1.43.0] - 2026-01-11
40
+ - Add `WriteUpAgent` as an experimental service
41
+
42
+ ## [1.42.9] - 2026-01-11
43
+ - Include feature flag to have message logs compatible with new ChatUI
44
+
45
+ ## [1.42.8] - 2026-01-08
46
+ - Add validator to `BaseMetadata` in case `additional_sheet_information` is empty
47
+ - Add more code snippets to create references and pull file metadata
48
+
49
+ ## [1.42.7] - 2026-01-08
50
+ - Add aliases for endpoint secret env var.
51
+
52
+ ## [1.42.6] - 2026-01-07
53
+ - Remove double redundant condition
54
+
55
+ ## [1.42.5] - 2026-01-07
56
+ - Add Mapping of metadata to the `search_content` calls
57
+ - Remove additional indentation by the markdown to docx converter
58
+
59
+ ## [1.42.4] - 2026-01-07
60
+ - Added `additionalSheetInformation` to magic table event.
61
+
62
+ ## [1.42.3] - 2026-01-05
63
+ - Added example code for agentic table
64
+
65
+ ## [1.42.2] - 2026-01-05
66
+ - Fix naming of code interpreter tool in its `ToolPrompts`.
67
+
68
+ ## [1.42.1] - 2025-01-05
69
+ - Version bump of SDK
70
+
71
+ ## [1.42.0] - 2025-01-05
72
+ - Add new params for elicitation to `call_tool` api
73
+
74
+ ## [1.41.0] - 2025-12-29
75
+ - Add `AgenticTable` service to unique_toolkit
76
+
77
+ ## [1.40.0] - 2025-12-22
78
+ - Add option to use retrieve referenced chunks from their order
79
+ - Add `hide_in_chat` parameter to `upload_to_chat_from_bytes` and `upload_to_chat_from_bytes_async`
80
+ - Hide code interpreter files in chat
81
+ - Code Interpreter files are now uploaded to chat by default
82
+
83
+ ## [1.39.2] - 2025-12-18
84
+ - Add `litellm:gemini-3-flash-preview`, `litellm:openai-gpt-5-2` and `litellm:openai-gpt-5-2-thinking` to `language_model/info.py`
85
+
86
+ ## [1.39.1] - 2025-12-17
87
+ - Add GPT-5.2, GPT-5.2_CHAT to supported models list
88
+
89
+ ## [1.39.0] - 2025-12-17
90
+ - Adding simpler shortterm message abilities to chat service
91
+
92
+ ## [1.38.4] - 2025-12-17
93
+ - Improving handling of tool calls with Qwen models
94
+
95
+ ## [1.38.3] - 2025-12-17
96
+ - Move the failsafe exception to root folder of unique_toolkit from agentic tools
97
+
98
+ ## [1.38.2] - 2025-12-17
99
+ - Fixing bug that language model infos were not loaded correctly
100
+
101
+ ## [1.38.1] - 2025-12-16
102
+ - chore(deps): Bump urllib3 from 2.5.0 to 2.6.2 and unique_sdk from 0.10.48 to 0.10.58 to ensure urllib3 transitively
103
+
104
+ ## [1.38.0] - 2025-12-15
105
+ - Including capability to load LanguageModelInfos in env variable
106
+
107
+ ## [1.37.0] - 2025-12-15
108
+ - Adding a prompt appendix to enforce forced tool calls when using Qwen models
109
+
8
110
  ## [1.36.0] - 2025-12-11
9
111
  - Add support for a sub agent tool system reminder when no references are present in the sub agent response.
10
112
 
@@ -103,8 +205,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
103
205
 
104
206
  ## [1.28.1] - 2025-11-19
105
207
  - Remove `chat_service` from DocXGeneratorService
106
-
107
- ## [1.28.1] - 2025-11-19
108
208
  - Set review standards in pyright for toolkit
109
209
  - Refactor type check pipeline
110
210
 
@@ -541,9 +641,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
541
641
  ## [0.8.26] - 2025-08-27
542
642
  - Optimized MCP manager
543
643
 
544
- ## [0.8.26] - 2025-08-27
545
- - Optimized MCP manager
546
-
547
644
  ## [0.8.25] - 2025-08-27
548
645
  - Load environment variables automatically from plattform dirs or environment
549
646
  - General Endpoint definition utility
@@ -565,8 +662,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
565
662
 
566
663
  ## [0.8.20] - 2025-08-24
567
664
  - Fixed forced-tool-calls
568
-
569
- ## [0.8.20] - 2025-08-05
570
665
  - Bump SDK version to support the latest features.
571
666
 
572
667
  ## [0.8.19] - 2025-08-24
@@ -801,8 +896,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
801
896
 
802
897
  ## [0.6.3] - 2025-02-27
803
898
  - Simplified imports for services. `from unique_toolkit.language_model import LanguageModelService` -> `from unique_toolkit import LanguageModelService` to reduce number of import lines.
804
-
805
- ## [0.6.3] - 2025-02-26
806
899
  - Add `builder` method to `LanguageModelMessages` class
807
900
 
808
901
  ## [0.6.2] - 2025-02-25
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: unique_toolkit
3
- Version: 1.36.0
3
+ Version: 1.43.10
4
4
  Summary:
5
5
  License: Proprietary
6
6
  Author: Cedric Klinkert
@@ -9,25 +9,27 @@ 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
+ Requires-Dist: aiohttp (>=3.12.0,<4.0.0)
12
13
  Requires-Dist: docxtpl (>=0.20.1,<0.21.0)
14
+ Requires-Dist: httpx (>=0.28.0,<0.29.0)
13
15
  Requires-Dist: jambo (>=0.1.2,<0.2.0)
14
16
  Requires-Dist: jinja2 (>=3.1.6,<4.0.0)
15
17
  Requires-Dist: markdown-it-py (>=4.0.0,<5.0.0)
16
- Requires-Dist: mkdocs-mermaid2-plugin (>=1.2.2,<2.0.0)
17
- Requires-Dist: mkdocs-multirepo-plugin (>=0.8.3,<0.9.0)
18
18
  Requires-Dist: numpy (>=2.1.0,<3.0.0)
19
19
  Requires-Dist: openai (>=1.99.9,<2.0.0)
20
+ Requires-Dist: pandas (>=2.3.0,<3.0.0)
20
21
  Requires-Dist: pillow (>=10.4.0,<11.0.0)
21
22
  Requires-Dist: platformdirs (>=4.0.0,<5.0.0)
22
23
  Requires-Dist: pydantic (>=2.8.2,<3.0.0)
23
24
  Requires-Dist: pydantic-settings (>=2.10.1,<3.0.0)
24
25
  Requires-Dist: pyhumps (>=3.8.0,<4.0.0)
25
- Requires-Dist: python-dotenv (>=1.0.1,<2.0.0)
26
+ Requires-Dist: python-docx (>=1.1.0,<2.0.0)
26
27
  Requires-Dist: regex (>=2024.5.15,<2025.0.0)
28
+ Requires-Dist: requests (>=2.32.0,<3.0.0)
27
29
  Requires-Dist: sseclient (>=0.0.27,<0.0.28)
28
30
  Requires-Dist: tiktoken (>=0.12.0,<0.13.0)
29
31
  Requires-Dist: typing-extensions (>=4.9.0,<5.0.0)
30
- Requires-Dist: unique-sdk (>=0.10.48,<0.11.0)
32
+ Requires-Dist: unique-sdk (>=0.10.67,<0.11.0)
31
33
  Description-Content-Type: text/markdown
32
34
 
33
35
  # Unique Toolkit
@@ -41,9 +43,25 @@ The Toolkit is structured along the following domains:
41
43
  - `unique_toolkit.language_model`
42
44
  - `unique_toolkit.short_term_memory`
43
45
 
44
- Each domain comprises a set of functions (in `functions.py`) and a service class (in `service.py`) which encapsulates the basic functionalities to interact with the domain entities, the schemas (in `schemas.py`) used in the service and required for interacting with the service functions, utility functions (in `utils.py`) which give additional functionality to interact with the domain entities (all domains except embedding) and other domain specific functionalities which are explained in the respective domain documentation.
46
+ Each domain comprises a set of schemas (in `schemas.py`) are used in functions (in `functions.py`) which encapsulates the basic functionalities to interact with the plattform.
47
+ The above domains represent the internal structure of the Unique platform.
45
48
 
46
- In addition, the `unique_toolkit.app` module provides functions to initialize apps that interact with the Unique platform. It also includes some utility functions to run async tasks in parallel (async webserver and app implementation required).
49
+ For the `developers` we expose interfaces via `services` classes that correspond directly to an frontend or an entity the `user` interacts with.
50
+
51
+ The following services are currently available:
52
+
53
+ | Service | Responsability |
54
+ |--|--|
55
+ | ChatService | All interactions with the chat interface |
56
+ | KnowledgeBaseService | All interaction with the knowledgebase |
57
+
58
+ The services can be directly import as
59
+
60
+ ```
61
+ from unique_toolkit import ChatService, KnowledgeBaseService
62
+
63
+
64
+ In addition, the `unique_toolkit.app` module provides functions to initialize apps and dev utilities to interact with the Unique platform.
47
65
 
48
66
  ## Changelog
49
67
 
@@ -65,7 +83,6 @@ The `unique_toolkit.app` module encompasses functions for initializing and secur
65
83
  The `unique_toolkit.chat` module encompasses all chat related functionality.
66
84
 
67
85
  - `functions.py` comprises the functions to manage and load the chat history and interact with the chat ui, e.g., creating a new assistant message.
68
- - `service.py` comprises the ChatService and provides an interface to manage and load the chat history and interact with the chat ui, e.g., creating a new assistant message and stream complete.
69
86
  - `schemas.py` comprises all relevant schemas, e.g., ChatMessage, used in the ChatService.
70
87
  - `utils.py` comprises utility functions to use and convert ChatMessage objects in assistants, e.g., convert_chat_history_to_injectable_string converts the chat history to a string that can be injected into a prompt.
71
88
 
@@ -74,11 +91,10 @@ The `unique_toolkit.chat` module encompasses all chat related functionality.
74
91
  The `unique_toolkit.content` module encompasses all content related functionality. Content can be any type of textual data that is stored in the Knowledgebase on the Unique platform. During the ingestion of the content, the content is parsed, split in chunks, indexed, and stored in the database.
75
92
 
76
93
  - `functions.py` comprises the functions to manage and load the chat history and interact with the chat ui, e.g., creating a new assistant message.
77
- - `service.py` comprises the ContentService and provides an interface to interact with the content, e.g., search content, search content chunks, upload and download content.
78
94
  - `schemas.py` comprises all relevant schemas, e.g., Content and ContentChunk, used in the ContentService.
79
95
  - `utils.py` comprise utility functions to manipulate Content and ContentChunk objects, e.g., sort_content_chunks and merge_content_chunks.
80
96
 
81
- ## Embedding
97
+ ## Embedding (To be Deprecated)
82
98
 
83
99
  The `unique_toolkit.embedding` module encompasses all embedding related functionality. Embeddings are used to represent textual data in a high-dimensional space. The embeddings can be used to calculate the similarity between two texts, for instance.
84
100
 
@@ -86,40 +102,130 @@ The `unique_toolkit.embedding` module encompasses all embedding related function
86
102
  - `service.py` encompasses the EmbeddingService and provides an interface to interact with the embeddings, e.g., embed text and calculate the similarity between two texts.
87
103
  - `schemas.py` comprises all relevant schemas, e.g., Embeddings, used in the EmbeddingService.
88
104
 
89
- ## Language Model
105
+ ## Language Model
90
106
 
91
107
  The `unique_toolkit.language_model` module encompasses all language model related functionality and information on the different language models deployed through the
92
108
  Unique platform.
93
109
 
94
110
  - `infos.py` comprises the information on all language models deployed through the Unique platform. We recommend to use the LanguageModel class, initialized with the LanguageModelName, e.g., LanguageModel(LanguageModelName.AZURE_GPT_4o_2024_1120) to get the information on the specific language model like the name, version, token limits or retirement date.
95
111
  - `functions.py` comprises the functions to complete and stream complete to chat.
96
- - `service.py` comprises the LanguageModelService and provides an interface to interact with the language models, e.g., complete.
97
112
  - `schemas.py` comprises all relevant schemas, e.g., LanguageModelResponse, used in the LanguageModelService.
98
113
  - `utils.py` comprises utility functions to parse the output of the language model, e.g., convert_string_to_json finds and parses the last json object in a string.
99
114
 
100
- ## Short Term Memory
115
+ ## Short Term Memory
101
116
 
102
117
  The `unique_toolkit.short_term_memory` module encompasses all short term memory related functionality.
103
118
 
104
119
  - `functions.py` comprises the functions to manage and load the chat history and interact with the chat ui, e.g., creating a new assistant message.
105
- - `service.py` comprises the ShortTermMemoryService and provides an interface to interact with the short term memory, e.g., create memory.
106
120
  - `schemas.py` comprises all relevant schemas, e.g., ShortTermMemory, used in the ShortTermMemoryService.
121
+ # Changelog
107
122
 
108
- # Development instructions
123
+ All notable changes to this project will be documented in this file.
109
124
 
110
- 1. Install poetry on your system (through `brew` or `pipx`).
125
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
126
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
111
127
 
112
- 2. Install `pyenv` and install python 3.11. `pyenv` is recommended as otherwise poetry uses the python version used to install itself and not the user preferred python version.
128
+ ## [1.43.10] - 2026-01-21
129
+ - Lowering the max iterations of the main agents and hard blocking Qwen3 from using too many agent rounds
113
130
 
114
- 3. If you then run `python --version` in your terminal, you should be able to see python version as specified in `.python-version`.
131
+ ## [1.43.9] - 2026-01-20
132
+ - Fix system message role conversion in responses API mode (was incorrectly set to "user", now correctly set to "system")
115
133
 
116
- 4. Then finally run `poetry install` to install the package and all dependencies.
117
- # Changelog
134
+ ## [1.43.8] - 2026-01-16
135
+ - Add local CI testing commands via poethepoet (poe lint, poe test, poe ci-typecheck, etc.)
118
136
 
119
- All notable changes to this project will be documented in this file.
137
+ ## [1.43.7] - 2026-01-15
138
+ - Cleanup hallucination config that is displayed in space config
120
139
 
121
- The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
122
- and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
140
+ ## [1.43.6] - 2026-01-13
141
+ - Update message execution pipeline functions and service
142
+
143
+ ## [1.43.5] - 2026-01-13
144
+ - Add deptry to dev dependencies for CI dependency checks
145
+ - Fix missing base_settings fixture parameter in FastAPI test
146
+
147
+ ## [1.43.4] - 2026-01-14
148
+ - chore(deps-dev): bump aiohttp from 3.13.2 to 3.13.3
149
+
150
+ ## [1.43.3] - 2026-01-13
151
+ - Changing default `assessment_type` in `SubAgentEvaluationServiceConfig` to `HALLUCINATION`
152
+
153
+ ## [1.43.2] - 2026-01-12
154
+ - `DocxGeneratorService`: Alignment need to be specified by the template rather than in code
155
+
156
+ ## [1.43.1] - 2026-01-12
157
+ - Remove accidental example report.md from repo
158
+
159
+ ## [1.43.0] - 2026-01-11
160
+ - Add `WriteUpAgent` as an experimental service
161
+
162
+ ## [1.42.9] - 2026-01-11
163
+ - Include feature flag to have message logs compatible with new ChatUI
164
+
165
+ ## [1.42.8] - 2026-01-08
166
+ - Add validator to `BaseMetadata` in case `additional_sheet_information` is empty
167
+ - Add more code snippets to create references and pull file metadata
168
+
169
+ ## [1.42.7] - 2026-01-08
170
+ - Add aliases for endpoint secret env var.
171
+
172
+ ## [1.42.6] - 2026-01-07
173
+ - Remove double redundant condition
174
+
175
+ ## [1.42.5] - 2026-01-07
176
+ - Add Mapping of metadata to the `search_content` calls
177
+ - Remove additional indentation by the markdown to docx converter
178
+
179
+ ## [1.42.4] - 2026-01-07
180
+ - Added `additionalSheetInformation` to magic table event.
181
+
182
+ ## [1.42.3] - 2026-01-05
183
+ - Added example code for agentic table
184
+
185
+ ## [1.42.2] - 2026-01-05
186
+ - Fix naming of code interpreter tool in its `ToolPrompts`.
187
+
188
+ ## [1.42.1] - 2025-01-05
189
+ - Version bump of SDK
190
+
191
+ ## [1.42.0] - 2025-01-05
192
+ - Add new params for elicitation to `call_tool` api
193
+
194
+ ## [1.41.0] - 2025-12-29
195
+ - Add `AgenticTable` service to unique_toolkit
196
+
197
+ ## [1.40.0] - 2025-12-22
198
+ - Add option to use retrieve referenced chunks from their order
199
+ - Add `hide_in_chat` parameter to `upload_to_chat_from_bytes` and `upload_to_chat_from_bytes_async`
200
+ - Hide code interpreter files in chat
201
+ - Code Interpreter files are now uploaded to chat by default
202
+
203
+ ## [1.39.2] - 2025-12-18
204
+ - Add `litellm:gemini-3-flash-preview`, `litellm:openai-gpt-5-2` and `litellm:openai-gpt-5-2-thinking` to `language_model/info.py`
205
+
206
+ ## [1.39.1] - 2025-12-17
207
+ - Add GPT-5.2, GPT-5.2_CHAT to supported models list
208
+
209
+ ## [1.39.0] - 2025-12-17
210
+ - Adding simpler shortterm message abilities to chat service
211
+
212
+ ## [1.38.4] - 2025-12-17
213
+ - Improving handling of tool calls with Qwen models
214
+
215
+ ## [1.38.3] - 2025-12-17
216
+ - Move the failsafe exception to root folder of unique_toolkit from agentic tools
217
+
218
+ ## [1.38.2] - 2025-12-17
219
+ - Fixing bug that language model infos were not loaded correctly
220
+
221
+ ## [1.38.1] - 2025-12-16
222
+ - chore(deps): Bump urllib3 from 2.5.0 to 2.6.2 and unique_sdk from 0.10.48 to 0.10.58 to ensure urllib3 transitively
223
+
224
+ ## [1.38.0] - 2025-12-15
225
+ - Including capability to load LanguageModelInfos in env variable
226
+
227
+ ## [1.37.0] - 2025-12-15
228
+ - Adding a prompt appendix to enforce forced tool calls when using Qwen models
123
229
 
124
230
  ## [1.36.0] - 2025-12-11
125
231
  - Add support for a sub agent tool system reminder when no references are present in the sub agent response.
@@ -219,8 +325,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
219
325
 
220
326
  ## [1.28.1] - 2025-11-19
221
327
  - Remove `chat_service` from DocXGeneratorService
222
-
223
- ## [1.28.1] - 2025-11-19
224
328
  - Set review standards in pyright for toolkit
225
329
  - Refactor type check pipeline
226
330
 
@@ -657,9 +761,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
657
761
  ## [0.8.26] - 2025-08-27
658
762
  - Optimized MCP manager
659
763
 
660
- ## [0.8.26] - 2025-08-27
661
- - Optimized MCP manager
662
-
663
764
  ## [0.8.25] - 2025-08-27
664
765
  - Load environment variables automatically from plattform dirs or environment
665
766
  - General Endpoint definition utility
@@ -681,8 +782,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
681
782
 
682
783
  ## [0.8.20] - 2025-08-24
683
784
  - Fixed forced-tool-calls
684
-
685
- ## [0.8.20] - 2025-08-05
686
785
  - Bump SDK version to support the latest features.
687
786
 
688
787
  ## [0.8.19] - 2025-08-24
@@ -917,8 +1016,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
917
1016
 
918
1017
  ## [0.6.3] - 2025-02-27
919
1018
  - Simplified imports for services. `from unique_toolkit.language_model import LanguageModelService` -> `from unique_toolkit import LanguageModelService` to reduce number of import lines.
920
-
921
- ## [0.6.3] - 2025-02-26
922
1019
  - Add `builder` method to `LanguageModelMessages` class
923
1020
 
924
1021
  ## [0.6.2] - 2025-02-25
@@ -9,9 +9,25 @@ The Toolkit is structured along the following domains:
9
9
  - `unique_toolkit.language_model`
10
10
  - `unique_toolkit.short_term_memory`
11
11
 
12
- Each domain comprises a set of functions (in `functions.py`) and a service class (in `service.py`) which encapsulates the basic functionalities to interact with the domain entities, the schemas (in `schemas.py`) used in the service and required for interacting with the service functions, utility functions (in `utils.py`) which give additional functionality to interact with the domain entities (all domains except embedding) and other domain specific functionalities which are explained in the respective domain documentation.
12
+ Each domain comprises a set of schemas (in `schemas.py`) are used in functions (in `functions.py`) which encapsulates the basic functionalities to interact with the plattform.
13
+ The above domains represent the internal structure of the Unique platform.
13
14
 
14
- In addition, the `unique_toolkit.app` module provides functions to initialize apps that interact with the Unique platform. It also includes some utility functions to run async tasks in parallel (async webserver and app implementation required).
15
+ For the `developers` we expose interfaces via `services` classes that correspond directly to an frontend or an entity the `user` interacts with.
16
+
17
+ The following services are currently available:
18
+
19
+ | Service | Responsability |
20
+ |--|--|
21
+ | ChatService | All interactions with the chat interface |
22
+ | KnowledgeBaseService | All interaction with the knowledgebase |
23
+
24
+ The services can be directly import as
25
+
26
+ ```
27
+ from unique_toolkit import ChatService, KnowledgeBaseService
28
+
29
+
30
+ In addition, the `unique_toolkit.app` module provides functions to initialize apps and dev utilities to interact with the Unique platform.
15
31
 
16
32
  ## Changelog
17
33
 
@@ -33,7 +49,6 @@ The `unique_toolkit.app` module encompasses functions for initializing and secur
33
49
  The `unique_toolkit.chat` module encompasses all chat related functionality.
34
50
 
35
51
  - `functions.py` comprises the functions to manage and load the chat history and interact with the chat ui, e.g., creating a new assistant message.
36
- - `service.py` comprises the ChatService and provides an interface to manage and load the chat history and interact with the chat ui, e.g., creating a new assistant message and stream complete.
37
52
  - `schemas.py` comprises all relevant schemas, e.g., ChatMessage, used in the ChatService.
38
53
  - `utils.py` comprises utility functions to use and convert ChatMessage objects in assistants, e.g., convert_chat_history_to_injectable_string converts the chat history to a string that can be injected into a prompt.
39
54
 
@@ -42,11 +57,10 @@ The `unique_toolkit.chat` module encompasses all chat related functionality.
42
57
  The `unique_toolkit.content` module encompasses all content related functionality. Content can be any type of textual data that is stored in the Knowledgebase on the Unique platform. During the ingestion of the content, the content is parsed, split in chunks, indexed, and stored in the database.
43
58
 
44
59
  - `functions.py` comprises the functions to manage and load the chat history and interact with the chat ui, e.g., creating a new assistant message.
45
- - `service.py` comprises the ContentService and provides an interface to interact with the content, e.g., search content, search content chunks, upload and download content.
46
60
  - `schemas.py` comprises all relevant schemas, e.g., Content and ContentChunk, used in the ContentService.
47
61
  - `utils.py` comprise utility functions to manipulate Content and ContentChunk objects, e.g., sort_content_chunks and merge_content_chunks.
48
62
 
49
- ## Embedding
63
+ ## Embedding (To be Deprecated)
50
64
 
51
65
  The `unique_toolkit.embedding` module encompasses all embedding related functionality. Embeddings are used to represent textual data in a high-dimensional space. The embeddings can be used to calculate the similarity between two texts, for instance.
52
66
 
@@ -54,31 +68,19 @@ The `unique_toolkit.embedding` module encompasses all embedding related function
54
68
  - `service.py` encompasses the EmbeddingService and provides an interface to interact with the embeddings, e.g., embed text and calculate the similarity between two texts.
55
69
  - `schemas.py` comprises all relevant schemas, e.g., Embeddings, used in the EmbeddingService.
56
70
 
57
- ## Language Model
71
+ ## Language Model
58
72
 
59
73
  The `unique_toolkit.language_model` module encompasses all language model related functionality and information on the different language models deployed through the
60
74
  Unique platform.
61
75
 
62
76
  - `infos.py` comprises the information on all language models deployed through the Unique platform. We recommend to use the LanguageModel class, initialized with the LanguageModelName, e.g., LanguageModel(LanguageModelName.AZURE_GPT_4o_2024_1120) to get the information on the specific language model like the name, version, token limits or retirement date.
63
77
  - `functions.py` comprises the functions to complete and stream complete to chat.
64
- - `service.py` comprises the LanguageModelService and provides an interface to interact with the language models, e.g., complete.
65
78
  - `schemas.py` comprises all relevant schemas, e.g., LanguageModelResponse, used in the LanguageModelService.
66
79
  - `utils.py` comprises utility functions to parse the output of the language model, e.g., convert_string_to_json finds and parses the last json object in a string.
67
80
 
68
- ## Short Term Memory
81
+ ## Short Term Memory
69
82
 
70
83
  The `unique_toolkit.short_term_memory` module encompasses all short term memory related functionality.
71
84
 
72
85
  - `functions.py` comprises the functions to manage and load the chat history and interact with the chat ui, e.g., creating a new assistant message.
73
- - `service.py` comprises the ShortTermMemoryService and provides an interface to interact with the short term memory, e.g., create memory.
74
- - `schemas.py` comprises all relevant schemas, e.g., ShortTermMemory, used in the ShortTermMemoryService.
75
-
76
- # Development instructions
77
-
78
- 1. Install poetry on your system (through `brew` or `pipx`).
79
-
80
- 2. Install `pyenv` and install python 3.11. `pyenv` is recommended as otherwise poetry uses the python version used to install itself and not the user preferred python version.
81
-
82
- 3. If you then run `python --version` in your terminal, you should be able to see python version as specified in `.python-version`.
83
-
84
- 4. Then finally run `poetry install` to install the package and all dependencies.
86
+ - `schemas.py` comprises all relevant schemas, e.g., ShortTermMemory, used in the ShortTermMemoryService.
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "unique_toolkit"
3
- version = "1.36.0"
3
+ version = "1.43.10"
4
4
  description = ""
5
5
  authors = [
6
6
  "Cedric Klinkert <cedric.klinkert@unique.ch>",
@@ -21,7 +21,6 @@ typing-extensions = "^4.9.0"
21
21
  pydantic = "^2.8.2"
22
22
  pyhumps = "^3.8.0"
23
23
  numpy = "^2.1.0"
24
- python-dotenv = "^1.0.1"
25
24
  regex = "^2024.5.15"
26
25
  tiktoken = "^0.12.0"
27
26
  pydantic-settings = "^2.10.1"
@@ -29,13 +28,16 @@ sseclient = "^0.0.27"
29
28
  openai = "^1.99.9"
30
29
  platformdirs = "^4.0.0"
31
30
  pillow = "^10.4.0"
32
- unique-sdk = "^0.10.48"
31
+ unique-sdk = "^0.10.67"
33
32
  jambo = "^0.1.2"
34
33
  jinja2 = "^3.1.6"
35
- mkdocs-multirepo-plugin = "^0.8.3"
36
- mkdocs-mermaid2-plugin = "^1.2.2"
37
34
  docxtpl = "^0.20.1"
38
35
  markdown-it-py = "^4.0.0"
36
+ python-docx = "^1.1.0"
37
+ requests = "^2.32.0"
38
+ httpx = "^0.28.0"
39
+ aiohttp = "^3.12.0"
40
+ pandas = "^2.3.0"
39
41
 
40
42
  [tool.poetry.group.langchain]
41
43
  optional = true
@@ -44,6 +46,7 @@ optional = true
44
46
  openai = "^1.97.0"
45
47
  langchain = "^0.3.27"
46
48
  langchain-openai = "^0.3.28"
49
+ langchain-core = "^0.3.0"
47
50
 
48
51
  [tool.poetry.group.fastapi]
49
52
  optional = true
@@ -62,10 +65,9 @@ pytest-cov = "^4.1.0"
62
65
  pre-commit = "^3.7.1"
63
66
  pytest-asyncio = "^0.23.8"
64
67
  pytest-mock = "^3.14.0"
65
- platformdirs = "^4.0.0"
66
- pillow = "^10.4.0"
67
68
  ipykernel = "^6.29.5"
68
- jinja2 = "^3.1.6"
69
+ deptry = "^0.24.0"
70
+ poethepoet = "^0.32.0"
69
71
  # unique-sdk = { path = "../unique_sdk" }
70
72
  mkdocs = "^1.6.1"
71
73
  mkdocs-material = "^9.6.11"
@@ -76,12 +78,31 @@ entangled-cli = "^2.1.13"
76
78
  mkdocs-entangled-plugin = "^0.4.0"
77
79
  isort = "^6.0.1"
78
80
  mkdocs-codeinclude-plugin = "^0.2.1"
79
- aiohttp = "^3.12.15"
81
+ aiohttp = "^3.13.3"
82
+ pandas = "^2.3.3"
80
83
 
81
84
  [build-system]
82
85
  requires = ["poetry-core"]
83
86
  build-backend = "poetry.core.masonry.api"
84
87
 
88
+ [tool.poe.tasks]
89
+ lint = "ruff check ."
90
+ lint-fix = "ruff check . --fix"
91
+ format = "ruff format ."
92
+ test = "pytest"
93
+ typecheck = "basedpyright"
94
+ depcheck = "deptry ."
95
+ coverage = "pytest --cov=unique_toolkit --cov-report=term-missing"
96
+ ci-typecheck = { shell = "bash $(git rev-parse --show-toplevel)/.github/scripts/dev.sh typecheck" }
97
+ ci-coverage = { shell = "bash $(git rev-parse --show-toplevel)/.github/scripts/dev.sh coverage" }
98
+
99
+ [tool.deptry]
100
+ known_first_party = ["unique_toolkit"]
101
+ extend_exclude = ["docs", "tests", "unique_toolkit/.*/test", "unique_toolkit/.*/tests"]
102
+
103
+ [tool.deptry.per_rule_ignores]
104
+ DEP004 = ["langchain_openai", "langchain_core"]
105
+
85
106
  [tool.ruff]
86
107
  target-version = "py311"
87
108
  exclude = [".venv", "docs"]
@@ -91,15 +112,6 @@ exclude = [".venv", "docs"]
91
112
  extend-select = ["I"]
92
113
 
93
114
  [tool.basedpyright]
94
- # Type checking mode: "off", "basic", "standard", "strict", "recommended", or "all"
95
115
  typeCheckingMode = "standard"
96
- # Exclude test files, virtual environments, and site-packages from type checking
97
- excludePaths = [
98
- "**/test_*.py",
99
- "**/tests/**",
100
- "**/.venv/**",
101
- "**/venv/**",
102
- "**/site-packages/**",
103
- "**/__pycache__/**",
104
- "**/.pytest_cache/**",
105
- ]
116
+ include = ["unique_toolkit"]
117
+ exclude = ["**/tests/**", "**/test_*.py"]
@@ -1,5 +1,4 @@
1
1
  from docx.document import Document as DocumentObject
2
- from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
3
2
  from docxtpl import DocxTemplate
4
3
  from pydantic import BaseModel
5
4
 
@@ -7,45 +6,39 @@ from pydantic import BaseModel
7
6
  class HeadingField(BaseModel):
8
7
  text: str
9
8
  level: int = 4
10
- alignment: WD_PARAGRAPH_ALIGNMENT = WD_PARAGRAPH_ALIGNMENT.LEFT
11
9
 
12
10
  def add(self, doc: DocumentObject):
13
11
  p = doc.add_heading(self.text, level=self.level)
14
- p.alignment = self.alignment
15
12
  return p
16
13
 
17
14
  def __str__(self):
18
- return f"HeadingField(text={self.text}, level={self.level}, alignment={self.alignment})"
15
+ return f"HeadingField(text={self.text}, level={self.level})"
19
16
 
20
17
 
21
18
  class ParagraphField(BaseModel):
22
19
  text: str
23
20
  style: str | None = None
24
- alignment: WD_PARAGRAPH_ALIGNMENT = WD_PARAGRAPH_ALIGNMENT.LEFT
25
21
 
26
22
  def add(self, doc: DocumentObject):
27
23
  p = doc.add_paragraph(self.text, style=self.style)
28
- p.alignment = self.alignment
29
24
  return p
30
25
 
31
26
  def __str__(self):
32
- return f"ParagraphField(text={self.text}, style={self.style}, alignment={self.alignment})"
27
+ return f"ParagraphField(text={self.text}, style={self.style})"
33
28
 
34
29
 
35
30
  class RunField(BaseModel):
36
31
  text: str
37
32
  italic: bool | None = False
38
33
  bold: bool | None = False
39
- alignment: WD_PARAGRAPH_ALIGNMENT = WD_PARAGRAPH_ALIGNMENT.LEFT
40
34
 
41
35
  def __str__(self):
42
- return f"RunField(text={self.text}, italic={self.italic}, alignment={self.alignment})"
36
+ return f"RunField(text={self.text}, italic={self.italic}, bold={self.bold})"
43
37
 
44
38
 
45
39
  class RunsField(BaseModel):
46
40
  runs: list[RunField]
47
41
  style: str | None = None
48
- alignment: WD_PARAGRAPH_ALIGNMENT = WD_PARAGRAPH_ALIGNMENT.LEFT
49
42
 
50
43
  def add(self, doc: DocumentObject):
51
44
  if not self.runs:
@@ -60,7 +53,7 @@ class RunsField(BaseModel):
60
53
  return p
61
54
 
62
55
  def __str__(self):
63
- return f"RunsField(runs={self.runs}, style={self.style}, alignment={self.alignment})"
56
+ return f"RunsField(runs={self.runs}, style={self.style})"
64
57
 
65
58
 
66
59
  class ContentField(BaseModel):