unique_toolkit 1.55.0__tar.gz → 1.56.0__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 (288) hide show
  1. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/PKG-INFO +1 -1
  2. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/pyproject.toml +1 -1
  3. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/evaluation/evaluation_manager.py +11 -1
  4. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/postprocessor/postprocessor_manager.py +11 -0
  5. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/tools/tool_manager.py +8 -1
  6. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/language_model/infos.py +130 -11
  7. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/services/chat_service.py +44 -0
  8. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/README.md +0 -0
  9. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/__init__.py +0 -0
  10. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/__init__.py +0 -0
  11. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/_base_service.py +0 -0
  12. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/_time_utils.py +0 -0
  13. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/api_calling/human_verification_manager.py +0 -0
  14. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/base_model_type_attribute.py +0 -0
  15. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/chunk_relevancy_sorter/config.py +0 -0
  16. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/chunk_relevancy_sorter/exception.py +0 -0
  17. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/chunk_relevancy_sorter/schemas.py +0 -0
  18. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/chunk_relevancy_sorter/service.py +0 -0
  19. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/chunk_relevancy_sorter/tests/test_service.py +0 -0
  20. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/config_checker/README.md +0 -0
  21. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/config_checker/__init__.py +0 -0
  22. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/config_checker/__main__.py +0 -0
  23. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/config_checker/cli.py +0 -0
  24. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/config_checker/differ.py +0 -0
  25. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/config_checker/exporter.py +0 -0
  26. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/config_checker/models.py +0 -0
  27. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/config_checker/registry.py +0 -0
  28. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/config_checker/validator.py +0 -0
  29. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/default_language_model.py +0 -0
  30. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/docx_generator/__init__.py +0 -0
  31. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/docx_generator/config.py +0 -0
  32. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/docx_generator/pandoc_converter.py +0 -0
  33. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/docx_generator/schemas.py +0 -0
  34. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/docx_generator/service.py +0 -0
  35. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/docx_generator/template/Doc Template.docx +0 -0
  36. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/endpoint_builder.py +0 -0
  37. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/endpoint_requestor.py +0 -0
  38. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/event_bus.py +0 -0
  39. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/exception.py +0 -0
  40. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/execution.py +0 -0
  41. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/experimental/endpoint_builder.py +0 -0
  42. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/experimental/endpoint_requestor.py +0 -0
  43. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/experimental/write_up_agent/README.md +0 -0
  44. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/experimental/write_up_agent/__init__.py +0 -0
  45. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/experimental/write_up_agent/agent.py +0 -0
  46. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/experimental/write_up_agent/config.py +0 -0
  47. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/experimental/write_up_agent/examples/data.csv +0 -0
  48. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/experimental/write_up_agent/examples/example_usage.py +0 -0
  49. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/experimental/write_up_agent/schemas.py +0 -0
  50. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/experimental/write_up_agent/services/__init__.py +0 -0
  51. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/__init__.py +0 -0
  52. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/exceptions.py +0 -0
  53. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/service.py +0 -0
  54. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/utils.py +0 -0
  55. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/__init__.py +0 -0
  56. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/config.py +0 -0
  57. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/exceptions.py +0 -0
  58. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/config.py +0 -0
  59. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/system_prompt.j2 +0 -0
  60. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/user_prompt.j2 +0 -0
  61. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/service.py +0 -0
  62. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/__init__.py +0 -0
  63. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/default_template.j2 +0 -0
  64. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/exceptions.py +0 -0
  65. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/service.py +0 -0
  66. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/utils.py +0 -0
  67. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/experimental/write_up_agent/utils.py +0 -0
  68. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/feature_flags/schema.py +0 -0
  69. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/pydantic/rjsf_tags.py +0 -0
  70. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/pydantic_helpers.py +0 -0
  71. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/referencing.py +0 -0
  72. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/string_utilities.py +0 -0
  73. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/tests/test_referencing.py +0 -0
  74. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/tests/test_string_utilities.py +0 -0
  75. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/token/__init__.py +0 -0
  76. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/token/image_token_counting.py +0 -0
  77. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/token/token_counting.py +0 -0
  78. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/token/tokenizers/deepseek/tokenizer.json +0 -0
  79. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/token/tokenizers/qwen/tokenizer.json +0 -0
  80. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/utils/__init__.py +0 -0
  81. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/utils/files.py +0 -0
  82. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/utils/image/encode.py +0 -0
  83. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/utils/jinja/helpers.py +0 -0
  84. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/utils/jinja/render.py +0 -0
  85. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/utils/jinja/schema.py +0 -0
  86. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/utils/jinja/utils.py +0 -0
  87. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/utils/structured_output/__init__.py +0 -0
  88. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/utils/structured_output/schema.py +0 -0
  89. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/utils/write_configuration.py +0 -0
  90. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/validate_required_values.py +0 -0
  91. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/_common/validators.py +0 -0
  92. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/__init__.py +0 -0
  93. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/debug_info_manager/debug_info_manager.py +0 -0
  94. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/debug_info_manager/test/test_debug_info_manager.py +0 -0
  95. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/evaluation/config.py +0 -0
  96. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/__init__.py +0 -0
  97. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/system_prompt.j2 +0 -0
  98. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/user_prompt.j2 +0 -0
  99. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/evaluation/context_relevancy/schema.py +0 -0
  100. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/evaluation/context_relevancy/service.py +0 -0
  101. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/evaluation/exception.py +0 -0
  102. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/evaluation/hallucination/constants.py +0 -0
  103. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/evaluation/hallucination/hallucination_evaluation.py +0 -0
  104. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/evaluation/hallucination/prompts/__init__.py +0 -0
  105. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/evaluation/hallucination/prompts/system_prompt.j2 +0 -0
  106. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/evaluation/hallucination/prompts/user_prompt.j2 +0 -0
  107. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/evaluation/hallucination/service.py +0 -0
  108. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/evaluation/hallucination/utils.py +0 -0
  109. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/evaluation/output_parser.py +0 -0
  110. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/evaluation/schemas.py +0 -0
  111. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/evaluation/tests/fixtures.py +0 -0
  112. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/evaluation/tests/test_config.py +0 -0
  113. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/evaluation/tests/test_context_relevancy_service.py +0 -0
  114. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/evaluation/tests/test_hallucination_constants.py +0 -0
  115. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/evaluation/tests/test_hallucination_utils.py +0 -0
  116. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/evaluation/tests/test_output_parser.py +0 -0
  117. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/evaluation/tests/test_prompt_loaders.py +0 -0
  118. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/evaluation/utils.py +0 -0
  119. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/feature_flags/__init__.py +0 -0
  120. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/feature_flags/feature_flags.py +0 -0
  121. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/history_manager/history_construction_with_contents.py +0 -0
  122. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/history_manager/history_manager.py +0 -0
  123. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/history_manager/loop_token_reducer.py +0 -0
  124. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/history_manager/utils.py +0 -0
  125. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/loop_runner/__init__.py +0 -0
  126. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/loop_runner/_iteration_handler_utils.py +0 -0
  127. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/loop_runner/_responses_iteration_handler_utils.py +0 -0
  128. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/loop_runner/_responses_stream_handler_utils.py +0 -0
  129. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/loop_runner/_stream_handler_utils.py +0 -0
  130. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/loop_runner/base.py +0 -0
  131. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/loop_runner/middleware/__init__.py +0 -0
  132. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/loop_runner/middleware/planning/__init__.py +0 -0
  133. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/loop_runner/middleware/planning/planning.py +0 -0
  134. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/loop_runner/middleware/planning/schema.py +0 -0
  135. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/loop_runner/runners/__init__.py +0 -0
  136. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/loop_runner/runners/basic.py +0 -0
  137. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/loop_runner/runners/mistral/__init__.py +0 -0
  138. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/loop_runner/runners/mistral/mistral_runner.py +0 -0
  139. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/loop_runner/runners/qwen/__init__.py +0 -0
  140. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/loop_runner/runners/qwen/helpers.py +0 -0
  141. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/loop_runner/runners/qwen/qwen_runner.py +0 -0
  142. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/message_log_manager/__init__.py +0 -0
  143. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/message_log_manager/service.py +0 -0
  144. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/reference_manager/reference_manager.py +0 -0
  145. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/responses_api/__init__.py +0 -0
  146. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/responses_api/postprocessors/code_display.py +0 -0
  147. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/responses_api/postprocessors/generated_files.py +0 -0
  148. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/responses_api/stream_handler.py +0 -0
  149. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/short_term_memory_manager/persistent_short_term_memory_manager.py +0 -0
  150. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/thinking_manager/thinking_manager.py +0 -0
  151. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/tools/__init__.py +0 -0
  152. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/tools/a2a/__init__.py +0 -0
  153. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/tools/a2a/config.py +0 -0
  154. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/tools/a2a/evaluation/__init__.py +0 -0
  155. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/tools/a2a/evaluation/_utils.py +0 -0
  156. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/tools/a2a/evaluation/config.py +0 -0
  157. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/tools/a2a/evaluation/evaluator.py +0 -0
  158. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/tools/a2a/evaluation/summarization_user_message.j2 +0 -0
  159. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/tools/a2a/manager.py +0 -0
  160. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/tools/a2a/postprocessing/__init__.py +0 -0
  161. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/tools/a2a/postprocessing/_display_utils.py +0 -0
  162. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/tools/a2a/postprocessing/_ref_utils.py +0 -0
  163. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/tools/a2a/postprocessing/config.py +0 -0
  164. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/tools/a2a/postprocessing/display.py +0 -0
  165. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/tools/a2a/postprocessing/references.py +0 -0
  166. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display.py +0 -0
  167. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display_utils.py +0 -0
  168. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_ref_utils.py +0 -0
  169. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/tools/a2a/prompts.py +0 -0
  170. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/tools/a2a/response_watcher/__init__.py +0 -0
  171. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/tools/a2a/response_watcher/service.py +0 -0
  172. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/tools/a2a/tool/__init__.py +0 -0
  173. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/tools/a2a/tool/_memory.py +0 -0
  174. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/tools/a2a/tool/_schema.py +0 -0
  175. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/tools/a2a/tool/config.py +0 -0
  176. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/tools/a2a/tool/service.py +0 -0
  177. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/tools/a2a/tool/test/test_service_utils.py +0 -0
  178. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/tools/agent_chunks_hanlder.py +0 -0
  179. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/tools/config.py +0 -0
  180. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/tools/factory.py +0 -0
  181. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/tools/mcp/__init__.py +0 -0
  182. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/tools/mcp/manager.py +0 -0
  183. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/tools/mcp/models.py +0 -0
  184. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/tools/mcp/tool_wrapper.py +0 -0
  185. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/tools/openai_builtin/__init__.py +0 -0
  186. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/tools/openai_builtin/base.py +0 -0
  187. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/__init__.py +0 -0
  188. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/config.py +0 -0
  189. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/__init__.py +0 -0
  190. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/code_display.py +0 -0
  191. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/generated_files.py +0 -0
  192. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/schemas.py +0 -0
  193. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/service.py +0 -0
  194. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/tools/openai_builtin/manager.py +0 -0
  195. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/tools/schemas.py +0 -0
  196. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/tools/test/test_mcp_manager.py +0 -0
  197. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/tools/test/test_tool_progress_reporter.py +0 -0
  198. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/tools/tool.py +0 -0
  199. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/tools/tool_progress_reporter.py +0 -0
  200. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/tools/utils/__init__.py +0 -0
  201. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/tools/utils/source_handling/__init__.py +0 -0
  202. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/tools/utils/source_handling/schema.py +0 -0
  203. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/tools/utils/source_handling/source_formatting.py +0 -0
  204. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic/tools/utils/source_handling/tests/test_source_formatting.py +0 -0
  205. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic_table/__init__.py +0 -0
  206. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic_table/schemas.py +0 -0
  207. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/agentic_table/service.py +0 -0
  208. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/app/__init__.py +0 -0
  209. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/app/dev_util.py +0 -0
  210. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/app/fast_api_factory.py +0 -0
  211. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/app/init_logging.py +0 -0
  212. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/app/init_sdk.py +0 -0
  213. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/app/performance/async_tasks.py +0 -0
  214. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/app/performance/async_wrapper.py +0 -0
  215. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/app/schemas.py +0 -0
  216. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/app/unique_settings.py +0 -0
  217. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/app/verification.py +0 -0
  218. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/app/webhook.py +0 -0
  219. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/chat/__init__.py +0 -0
  220. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/chat/cancellation.py +0 -0
  221. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/chat/constants.py +0 -0
  222. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/chat/deprecated/service.py +0 -0
  223. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/chat/functions.py +0 -0
  224. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/chat/rendering.py +0 -0
  225. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/chat/responses_api.py +0 -0
  226. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/chat/schemas.py +0 -0
  227. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/chat/service.py +0 -0
  228. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/chat/state.py +0 -0
  229. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/chat/utils.py +0 -0
  230. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/content/__init__.py +0 -0
  231. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/content/constants.py +0 -0
  232. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/content/functions.py +0 -0
  233. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/content/schemas.py +0 -0
  234. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/content/service.py +0 -0
  235. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/content/smart_rules.py +0 -0
  236. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/content/utils.py +0 -0
  237. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/data_extraction/README.md +0 -0
  238. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/data_extraction/__init__.py +0 -0
  239. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/data_extraction/augmented/__init__.py +0 -0
  240. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/data_extraction/augmented/service.py +0 -0
  241. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/data_extraction/base.py +0 -0
  242. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/data_extraction/basic/__init__.py +0 -0
  243. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/data_extraction/basic/config.py +0 -0
  244. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/data_extraction/basic/prompt.py +0 -0
  245. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/data_extraction/basic/service.py +0 -0
  246. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/elicitation/__init__.py +0 -0
  247. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/elicitation/constants.py +0 -0
  248. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/elicitation/exceptions.py +0 -0
  249. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/elicitation/functions.py +0 -0
  250. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/elicitation/schemas.py +0 -0
  251. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/elicitation/service.py +0 -0
  252. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/embedding/__init__.py +0 -0
  253. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/embedding/constants.py +0 -0
  254. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/embedding/functions.py +0 -0
  255. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/embedding/schemas.py +0 -0
  256. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/embedding/service.py +0 -0
  257. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/embedding/utils.py +0 -0
  258. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/framework_utilities/__init__.py +0 -0
  259. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/framework_utilities/langchain/__init__.py +0 -0
  260. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/framework_utilities/langchain/client.py +0 -0
  261. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/framework_utilities/langchain/history.py +0 -0
  262. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/framework_utilities/openai/__init__.py +0 -0
  263. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/framework_utilities/openai/client.py +0 -0
  264. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/framework_utilities/openai/message_builder.py +0 -0
  265. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/framework_utilities/utils.py +0 -0
  266. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/language_model/__init__.py +0 -0
  267. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/language_model/_responses_api_utils.py +0 -0
  268. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/language_model/builder.py +0 -0
  269. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/language_model/constants.py +0 -0
  270. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/language_model/default_language_model.py +0 -0
  271. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/language_model/functions.py +0 -0
  272. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/language_model/prompt.py +0 -0
  273. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/language_model/reference.py +0 -0
  274. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/language_model/schemas.py +0 -0
  275. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/language_model/service.py +0 -0
  276. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/language_model/stream_transform.py +0 -0
  277. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/language_model/utils.py +0 -0
  278. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/protocols/support.py +0 -0
  279. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/services/__init__.py +0 -0
  280. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/services/knowledge_base.py +0 -0
  281. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/short_term_memory/__init__.py +0 -0
  282. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/short_term_memory/constants.py +0 -0
  283. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/short_term_memory/functions.py +0 -0
  284. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/short_term_memory/schemas.py +0 -0
  285. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/short_term_memory/service.py +0 -0
  286. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/smart_rules/__init__.py +0 -0
  287. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/smart_rules/compile.py +0 -0
  288. {unique_toolkit-1.55.0 → unique_toolkit-1.56.0}/unique_toolkit/test_utilities/events.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: unique-toolkit
3
- Version: 1.55.0
3
+ Version: 1.56.0
4
4
  Summary:
5
5
  Author: Cedric Klinkert, Martin Fadler, Sadique Sheik, Fabian Schläpfer, Pascal Hauri, Ejiroghene Oki-Peter, Rami Azouz, Ricardo Visini, Sanzio Monti
6
6
  Author-email: Cedric Klinkert <cedric.klinkert@unique.ch>, Martin Fadler <martin.fadler@unique.ch>, Sadique Sheik <sadique@unique.ch>, Fabian Schläpfer <fabian@unique.ch>, Pascal Hauri <pascal@unique.ch>, Ejiroghene Oki-Peter <oki-peter.ejiroghene@unique.ai>, Rami Azouz <rami.ext@unique.ch>, Ricardo Visini <ricardo.visini@unique.ch>, Sanzio Monti <sanzio.monti@unique.ai>
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "unique_toolkit"
3
- version = "1.55.0"
3
+ version = "1.56.0"
4
4
  description = ""
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -1,4 +1,5 @@
1
1
  import asyncio
2
+ import time
2
3
  from abc import ABC
3
4
  from logging import Logger
4
5
 
@@ -86,6 +87,7 @@ class EvaluationManager:
86
87
  self._chat_service = chat_service
87
88
  self._evaluations: dict[EvaluationMetricName, Evaluation] = {}
88
89
  self._evaluation_passed: bool = True
90
+ self._execution_times: dict[str, float] = {}
89
91
 
90
92
  def add_evaluation(self, evaluation: Evaluation):
91
93
  self._evaluations[evaluation.get_name()] = evaluation
@@ -99,6 +101,8 @@ class EvaluationManager:
99
101
  loop_response: LanguageModelStreamResponse,
100
102
  assistant_message_id: str,
101
103
  ) -> list[EvaluationMetricResult]:
104
+ self._execution_times = {}
105
+
102
106
  task_executor = SafeTaskExecutor(
103
107
  logger=self._logger,
104
108
  )
@@ -134,6 +138,9 @@ class EvaluationManager:
134
138
 
135
139
  return evaluation_results_unpacked
136
140
 
141
+ def get_execution_times(self) -> dict[str, float]:
142
+ return self._execution_times.copy()
143
+
137
144
  async def execute_evaluation_call(
138
145
  self,
139
146
  evaluation_name: EvaluationMetricName,
@@ -145,13 +152,16 @@ class EvaluationManager:
145
152
  evaluation_instance = self.get_evaluation_by_name(evaluation_name)
146
153
 
147
154
  if evaluation_instance:
148
- # Execute the evaluation
155
+ start = time.perf_counter()
149
156
  await self._create_assistant_message(
150
157
  evaluation_instance, assistant_message_id
151
158
  )
152
159
  evaluation_metric_result: EvaluationMetricResult = (
153
160
  await evaluation_instance.run(loop_response)
154
161
  )
162
+ self._execution_times[str(evaluation_name)] = round(
163
+ time.perf_counter() - start, 3
164
+ )
155
165
  return evaluation_metric_result
156
166
 
157
167
  return EvaluationMetricResult(
@@ -1,4 +1,5 @@
1
1
  import asyncio
2
+ import time
2
3
  from abc import ABC
3
4
  from logging import Logger
4
5
 
@@ -84,6 +85,7 @@ class PostprocessorManager:
84
85
  self._logger = logger
85
86
  self._chat_service = chat_service
86
87
  self._postprocessors: list[Postprocessor | ResponsesApiPostprocessor] = []
88
+ self._execution_times: dict[str, float] = {}
87
89
 
88
90
  # Allow to add postprocessors that should be run before or after the others.
89
91
  self._first_postprocessor: Postprocessor | ResponsesApiPostprocessor | None = (
@@ -123,6 +125,8 @@ class PostprocessorManager:
123
125
  self,
124
126
  loop_response: LanguageModelStreamResponse,
125
127
  ) -> None:
128
+ self._execution_times = {}
129
+
126
130
  task_executor = SafeTaskExecutor(
127
131
  logger=self._logger,
128
132
  )
@@ -158,12 +162,19 @@ class PostprocessorManager:
158
162
  references=loop_response.message.references,
159
163
  )
160
164
 
165
+ def get_execution_times(self) -> dict[str, float]:
166
+ return self._execution_times.copy()
167
+
161
168
  async def execute_postprocessors(
162
169
  self,
163
170
  loop_response: LanguageModelStreamResponse,
164
171
  postprocessor_instance: Postprocessor | ResponsesApiPostprocessor,
165
172
  ) -> None:
173
+ start = time.perf_counter()
166
174
  await postprocessor_instance.run(loop_response) # type: ignore
175
+ self._execution_times[postprocessor_instance.name] = round(
176
+ time.perf_counter() - start, 3
177
+ )
167
178
 
168
179
  async def remove_from_text(
169
180
  self,
@@ -1,4 +1,5 @@
1
1
  import asyncio
2
+ import time
2
3
  from logging import Logger, getLogger
3
4
  from typing import Generic, Literal, TypeVar, overload
4
5
 
@@ -288,10 +289,16 @@ class _ToolManager(Generic[_ApiMode]):
288
289
  raise ValueError(f"Tool {tool_call.name} cannot be run")
289
290
 
290
291
  if tool_instance:
291
- # Execute the tool
292
+ tool_start = time.perf_counter()
292
293
  tool_response: ToolCallResponse = await tool_instance.run(
293
294
  tool_call=tool_call
294
295
  )
296
+ tool_execution_time = round(time.perf_counter() - tool_start, 3)
297
+
298
+ if tool_response.debug_info is None:
299
+ tool_response.debug_info = {}
300
+ tool_response.debug_info["execution_time_s"] = tool_execution_time
301
+
295
302
  evaluation_checks = tool_instance.evaluation_check_list()
296
303
  self._tool_evaluation_check_list.update(evaluation_checks)
297
304
 
@@ -52,6 +52,8 @@ class LanguageModelName(StrEnum):
52
52
  AZURE_GPT_51_CODEX_MINI_2025_1113 = "AZURE_GPT_51_CODEX_MINI_2025_1113"
53
53
  AZURE_GPT_52_2025_1211 = "AZURE_GPT_52_2025_1211"
54
54
  AZURE_GPT_52_CHAT_2025_1211 = "AZURE_GPT_52_CHAT_2025_1211"
55
+ AZURE_GPT_54_2026_0305 = "AZURE_GPT_54_2026_0305"
56
+ AZURE_GPT_54_PRO_2026_0305 = "AZURE_GPT_54_PRO_2026_0305"
55
57
  AZURE_GPT_4o_2024_0513 = "AZURE_GPT_4o_2024_0513"
56
58
  AZURE_GPT_4o_2024_0806 = "AZURE_GPT_4o_2024_0806"
57
59
  AZURE_GPT_4o_2024_1120 = "AZURE_GPT_4o_2024_1120"
@@ -100,6 +102,8 @@ class LanguageModelName(StrEnum):
100
102
  LITELLM_OPENAI_GPT_51_THINKING = "litellm:openai-gpt-5-1-thinking"
101
103
  LITELLM_OPENAI_GPT_52 = "litellm:openai-gpt-5-2"
102
104
  LITELLM_OPENAI_GPT_52_THINKING = "litellm:openai-gpt-5-2-thinking"
105
+ LITELLM_OPENAI_GPT_54 = "litellm:openai-gpt-5-4"
106
+ LITELLM_OPENAI_GPT_54_THINKING = "litellm:openai-gpt-5-4-thinking"
103
107
  LITELLM_OPENAI_O1 = "litellm:openai-o1"
104
108
  LITELLM_OPENAI_O3 = "litellm:openai-o3"
105
109
  LITELLM_OPENAI_O3_DEEP_RESEARCH = "litellm:openai-o3-deep-research"
@@ -170,6 +174,8 @@ def get_encoder_name(model_name: LanguageModelName) -> EncoderName:
170
174
  | LMN.AZURE_GPT_51_CODEX_MINI_2025_1113
171
175
  | LMN.AZURE_GPT_52_2025_1211
172
176
  | LMN.AZURE_GPT_52_CHAT_2025_1211
177
+ | LMN.AZURE_GPT_54_2026_0305
178
+ | LMN.AZURE_GPT_54_PRO_2026_0305
173
179
  | LMN.AZURE_MODEL_ROUTER_2025_1118
174
180
  | LMN.LITELLM_OPENAI_GPT_5
175
181
  | LMN.LITELLM_OPENAI_GPT_5_MINI
@@ -180,6 +186,8 @@ def get_encoder_name(model_name: LanguageModelName) -> EncoderName:
180
186
  | LMN.LITELLM_OPENAI_GPT_51_THINKING
181
187
  | LMN.LITELLM_OPENAI_GPT_52
182
188
  | LMN.LITELLM_OPENAI_GPT_52_THINKING
189
+ | LMN.LITELLM_OPENAI_GPT_54
190
+ | LMN.LITELLM_OPENAI_GPT_54_THINKING
183
191
  | LMN.LITELLM_OPENAI_O1
184
192
  | LMN.LITELLM_OPENAI_O3
185
193
  | LMN.LITELLM_OPENAI_O3_DEEP_RESEARCH
@@ -591,10 +599,10 @@ class LanguageModelInfo(BaseModel):
591
599
  info_cutoff_at=date(2024, 9, 30),
592
600
  published_at=date(2025, 11, 13),
593
601
  temperature_bounds=TemperatureBounds(
594
- min_temperature=1.0, max_temperature=1.0
602
+ min_temperature=0.0, max_temperature=1.0
595
603
  ),
596
604
  default_options={
597
- "reasoning_effort": None,
605
+ "reasoning_effort": "none",
598
606
  },
599
607
  )
600
608
  case LanguageModelName.AZURE_GPT_51_THINKING_2025_1113:
@@ -724,15 +732,15 @@ class LanguageModelInfo(BaseModel):
724
732
  ModelCapabilities.VISION,
725
733
  ],
726
734
  token_limits=LanguageModelTokenLimits(
727
- token_limit_input=400_000, token_limit_output=128_000
735
+ token_limit_input=272_000, token_limit_output=128_000
728
736
  ),
729
737
  info_cutoff_at=date(2024, 9, 30),
730
738
  published_at=date(2025, 12, 11),
731
739
  temperature_bounds=TemperatureBounds(
732
- min_temperature=1.0, max_temperature=1.0
740
+ min_temperature=0.0, max_temperature=1.0
733
741
  ),
734
742
  default_options={
735
- "reasoning_effort": None,
743
+ "reasoning_effort": "none",
736
744
  },
737
745
  )
738
746
  case LanguageModelName.AZURE_GPT_52_CHAT_2025_1211:
@@ -761,6 +769,61 @@ class LanguageModelInfo(BaseModel):
761
769
  "reasoning_effort": "medium",
762
770
  },
763
771
  )
772
+ case LanguageModelName.AZURE_GPT_54_2026_0305:
773
+ return cls(
774
+ name=model_name,
775
+ provider=LanguageModelProvider.AZURE,
776
+ version="2026-03-05",
777
+ encoder_name=EncoderName.O200K_BASE,
778
+ capabilities=[
779
+ ModelCapabilities.CHAT_COMPLETIONS_API,
780
+ ModelCapabilities.FUNCTION_CALLING,
781
+ ModelCapabilities.PARALLEL_FUNCTION_CALLING,
782
+ ModelCapabilities.REASONING,
783
+ ModelCapabilities.RESPONSES_API,
784
+ ModelCapabilities.STREAMING,
785
+ ModelCapabilities.STRUCTURED_OUTPUT,
786
+ ModelCapabilities.VISION,
787
+ ],
788
+ token_limits=LanguageModelTokenLimits(
789
+ token_limit_input=922_000, token_limit_output=128_000
790
+ ),
791
+ info_cutoff_at=date(2024, 9, 30),
792
+ published_at=date(2026, 3, 5),
793
+ temperature_bounds=TemperatureBounds(
794
+ min_temperature=0.0, max_temperature=1.0
795
+ ),
796
+ default_options={
797
+ "reasoning_effort": "none",
798
+ },
799
+ )
800
+ case LanguageModelName.AZURE_GPT_54_PRO_2026_0305:
801
+ return cls(
802
+ name=model_name,
803
+ provider=LanguageModelProvider.AZURE,
804
+ version="2026-03-05",
805
+ encoder_name=EncoderName.O200K_BASE,
806
+ capabilities=[
807
+ ModelCapabilities.FUNCTION_CALLING,
808
+ ModelCapabilities.PARALLEL_FUNCTION_CALLING,
809
+ ModelCapabilities.REASONING,
810
+ ModelCapabilities.RESPONSES_API,
811
+ ModelCapabilities.STREAMING,
812
+ ModelCapabilities.STRUCTURED_OUTPUT,
813
+ ModelCapabilities.VISION,
814
+ ],
815
+ token_limits=LanguageModelTokenLimits(
816
+ token_limit_input=922_000, token_limit_output=128_000
817
+ ),
818
+ info_cutoff_at=date(2024, 9, 30),
819
+ published_at=date(2026, 3, 5),
820
+ temperature_bounds=TemperatureBounds(
821
+ min_temperature=1.0, max_temperature=1.0
822
+ ),
823
+ default_options={
824
+ "reasoning_effort": "medium",
825
+ },
826
+ )
764
827
  case LanguageModelName.AZURE_GPT_4_TURBO_2024_0409:
765
828
  return cls(
766
829
  name=model_name,
@@ -1681,10 +1744,10 @@ class LanguageModelInfo(BaseModel):
1681
1744
  info_cutoff_at=date(2024, 9, 30),
1682
1745
  published_at=date(2025, 11, 13),
1683
1746
  temperature_bounds=TemperatureBounds(
1684
- min_temperature=1.0, max_temperature=1.0
1747
+ min_temperature=0.0, max_temperature=1.0
1685
1748
  ),
1686
1749
  default_options={
1687
- "reasoning_effort": None,
1750
+ "reasoning_effort": "none",
1688
1751
  },
1689
1752
  )
1690
1753
  case LanguageModelName.LITELLM_OPENAI_GPT_51_THINKING:
@@ -1732,15 +1795,15 @@ class LanguageModelInfo(BaseModel):
1732
1795
  ModelCapabilities.VISION,
1733
1796
  ],
1734
1797
  token_limits=LanguageModelTokenLimits(
1735
- token_limit_input=400_000, token_limit_output=128_000
1798
+ token_limit_input=272_000, token_limit_output=128_000
1736
1799
  ),
1737
1800
  info_cutoff_at=date(2024, 9, 30),
1738
1801
  published_at=date(2025, 12, 11),
1739
1802
  temperature_bounds=TemperatureBounds(
1740
- min_temperature=1.0, max_temperature=1.0
1803
+ min_temperature=0.0, max_temperature=1.0
1741
1804
  ),
1742
1805
  default_options={
1743
- "reasoning_effort": None,
1806
+ "reasoning_effort": "none",
1744
1807
  },
1745
1808
  )
1746
1809
  case LanguageModelName.LITELLM_OPENAI_GPT_52_THINKING:
@@ -1760,7 +1823,7 @@ class LanguageModelInfo(BaseModel):
1760
1823
  ModelCapabilities.VISION,
1761
1824
  ],
1762
1825
  token_limits=LanguageModelTokenLimits(
1763
- token_limit_input=400_000, token_limit_output=128_000
1826
+ token_limit_input=272_000, token_limit_output=128_000
1764
1827
  ),
1765
1828
  info_cutoff_at=date(2024, 9, 30),
1766
1829
  published_at=date(2025, 12, 11),
@@ -1771,6 +1834,62 @@ class LanguageModelInfo(BaseModel):
1771
1834
  "reasoning_effort": "medium",
1772
1835
  },
1773
1836
  )
1837
+ case LanguageModelName.LITELLM_OPENAI_GPT_54:
1838
+ return cls(
1839
+ name=model_name,
1840
+ provider=LanguageModelProvider.LITELLM,
1841
+ version="2026-03-05",
1842
+ encoder_name=EncoderName.O200K_BASE,
1843
+ capabilities=[
1844
+ ModelCapabilities.CHAT_COMPLETIONS_API,
1845
+ ModelCapabilities.FUNCTION_CALLING,
1846
+ ModelCapabilities.PARALLEL_FUNCTION_CALLING,
1847
+ ModelCapabilities.REASONING,
1848
+ ModelCapabilities.RESPONSES_API,
1849
+ ModelCapabilities.STREAMING,
1850
+ ModelCapabilities.STRUCTURED_OUTPUT,
1851
+ ModelCapabilities.VISION,
1852
+ ],
1853
+ token_limits=LanguageModelTokenLimits(
1854
+ token_limit_input=922_000, token_limit_output=128_000
1855
+ ),
1856
+ info_cutoff_at=date(2024, 9, 30),
1857
+ published_at=date(2026, 3, 5),
1858
+ temperature_bounds=TemperatureBounds(
1859
+ min_temperature=0.0, max_temperature=1.0
1860
+ ),
1861
+ default_options={
1862
+ "reasoning_effort": "none",
1863
+ },
1864
+ )
1865
+ case LanguageModelName.LITELLM_OPENAI_GPT_54_THINKING:
1866
+ return cls(
1867
+ name=model_name,
1868
+ provider=LanguageModelProvider.LITELLM,
1869
+ version="2026-03-05",
1870
+ encoder_name=EncoderName.O200K_BASE,
1871
+ capabilities=[
1872
+ ModelCapabilities.CHAT_COMPLETIONS_API,
1873
+ ModelCapabilities.FUNCTION_CALLING,
1874
+ ModelCapabilities.PARALLEL_FUNCTION_CALLING,
1875
+ ModelCapabilities.REASONING,
1876
+ ModelCapabilities.RESPONSES_API,
1877
+ ModelCapabilities.STREAMING,
1878
+ ModelCapabilities.STRUCTURED_OUTPUT,
1879
+ ModelCapabilities.VISION,
1880
+ ],
1881
+ token_limits=LanguageModelTokenLimits(
1882
+ token_limit_input=922_000, token_limit_output=128_000
1883
+ ),
1884
+ info_cutoff_at=date(2024, 9, 30),
1885
+ published_at=date(2026, 3, 5),
1886
+ temperature_bounds=TemperatureBounds(
1887
+ min_temperature=1.0, max_temperature=1.0
1888
+ ),
1889
+ default_options={
1890
+ "reasoning_effort": "medium",
1891
+ },
1892
+ )
1774
1893
  case LanguageModelName.LITELLM_OPENAI_O1:
1775
1894
  return cls(
1776
1895
  name=model_name,
@@ -140,6 +140,50 @@ class ChatService(ChatServiceDeprecated):
140
140
 
141
141
  return self._elicitation_service
142
142
 
143
+ def get_debug_info(self) -> dict[str, Any]:
144
+ """Retrieves the debug information from the current user message.
145
+
146
+ Returns:
147
+ dict[str, Any]: The debug information stored on the user message,
148
+ or an empty dict if retrieval fails or no debug info exists.
149
+
150
+ """
151
+ try:
152
+ raw_msg = unique_sdk.Message.retrieve(
153
+ user_id=self._user_id,
154
+ company_id=self._company_id,
155
+ id=self._user_message_id,
156
+ chatId=self._chat_id,
157
+ )
158
+ return getattr(raw_msg, "debugInfo", {}) or {}
159
+ except Exception:
160
+ logging.getLogger(__name__).warning(
161
+ "Failed to retrieve debug info from user message", exc_info=True
162
+ )
163
+ return {}
164
+
165
+ async def get_debug_info_async(self) -> dict[str, Any]:
166
+ """Retrieves the debug information from the current user message asynchronously.
167
+
168
+ Returns:
169
+ dict[str, Any]: The debug information stored on the user message,
170
+ or an empty dict if retrieval fails or no debug info exists.
171
+
172
+ """
173
+ try:
174
+ raw_msg = await unique_sdk.Message.retrieve_async(
175
+ user_id=self._user_id,
176
+ company_id=self._company_id,
177
+ id=self._user_message_id,
178
+ chatId=self._chat_id,
179
+ )
180
+ return getattr(raw_msg, "debugInfo", {}) or {}
181
+ except Exception:
182
+ logging.getLogger(__name__).warning(
183
+ "Failed to retrieve debug info from user message", exc_info=True
184
+ )
185
+ return {}
186
+
143
187
  async def update_debug_info_async(self, debug_info: dict):
144
188
  """Updates the debug information for the chat session.
145
189