unique_toolkit 0.8.30__tar.gz → 0.8.31__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 (128) hide show
  1. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/CHANGELOG.md +12 -0
  2. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/PKG-INFO +13 -1
  3. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/pyproject.toml +1 -1
  4. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/language_model/infos.py +156 -0
  5. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/tools/a2a/config.py +1 -3
  6. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/tools/a2a/manager.py +1 -2
  7. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/tools/a2a/memory.py +0 -1
  8. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/tools/a2a/service.py +6 -8
  9. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/tools/mcp/models.py +1 -0
  10. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/tools/test/test_mcp_manager.py +10 -19
  11. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/tools/tool_manager.py +1 -3
  12. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/LICENSE +0 -0
  13. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/README.md +0 -0
  14. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/__init__.py +0 -0
  15. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/_common/_base_service.py +0 -0
  16. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/_common/_time_utils.py +0 -0
  17. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/_common/default_language_model.py +0 -0
  18. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/_common/endpoint_builder.py +0 -0
  19. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/_common/exception.py +0 -0
  20. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/_common/token/image_token_counting.py +0 -0
  21. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/_common/token/token_counting.py +0 -0
  22. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/_common/validate_required_values.py +0 -0
  23. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/_common/validators.py +0 -0
  24. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/app/__init__.py +0 -0
  25. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/app/dev_util.py +0 -0
  26. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/app/init_logging.py +0 -0
  27. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/app/init_sdk.py +0 -0
  28. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/app/performance/async_tasks.py +0 -0
  29. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/app/performance/async_wrapper.py +0 -0
  30. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/app/schemas.py +0 -0
  31. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/app/unique_settings.py +0 -0
  32. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/app/verification.py +0 -0
  33. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/chat/__init__.py +0 -0
  34. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/chat/constants.py +0 -0
  35. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/chat/functions.py +0 -0
  36. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/chat/schemas.py +0 -0
  37. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/chat/service.py +0 -0
  38. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/chat/state.py +0 -0
  39. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/chat/utils.py +0 -0
  40. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/content/__init__.py +0 -0
  41. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/content/constants.py +0 -0
  42. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/content/functions.py +0 -0
  43. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/content/schemas.py +0 -0
  44. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/content/service.py +0 -0
  45. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/content/utils.py +0 -0
  46. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/debug_info_manager/debug_info_manager.py +0 -0
  47. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/embedding/__init__.py +0 -0
  48. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/embedding/constants.py +0 -0
  49. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/embedding/functions.py +0 -0
  50. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/embedding/schemas.py +0 -0
  51. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/embedding/service.py +0 -0
  52. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/embedding/utils.py +0 -0
  53. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/evals/config.py +0 -0
  54. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/evals/context_relevancy/prompts.py +0 -0
  55. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/evals/context_relevancy/schema.py +0 -0
  56. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/evals/context_relevancy/service.py +0 -0
  57. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/evals/evaluation_manager.py +0 -0
  58. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/evals/exception.py +0 -0
  59. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/evals/hallucination/constants.py +0 -0
  60. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/evals/hallucination/hallucination_evaluation.py +0 -0
  61. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/evals/hallucination/prompts.py +0 -0
  62. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/evals/hallucination/service.py +0 -0
  63. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/evals/hallucination/utils.py +0 -0
  64. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/evals/output_parser.py +0 -0
  65. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/evals/schemas.py +0 -0
  66. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/evals/tests/test_context_relevancy_service.py +0 -0
  67. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/evals/tests/test_output_parser.py +0 -0
  68. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/evaluators/__init__.py +0 -0
  69. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/evaluators/config.py +0 -0
  70. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/evaluators/constants.py +0 -0
  71. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/evaluators/context_relevancy/constants.py +0 -0
  72. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/evaluators/context_relevancy/prompts.py +0 -0
  73. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/evaluators/context_relevancy/service.py +0 -0
  74. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/evaluators/context_relevancy/utils.py +0 -0
  75. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/evaluators/exception.py +0 -0
  76. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/evaluators/hallucination/constants.py +0 -0
  77. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/evaluators/hallucination/prompts.py +0 -0
  78. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/evaluators/hallucination/service.py +0 -0
  79. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/evaluators/hallucination/utils.py +0 -0
  80. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/evaluators/output_parser.py +0 -0
  81. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/evaluators/schemas.py +0 -0
  82. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/framework_utilities/__init__.py +0 -0
  83. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/framework_utilities/langchain/client.py +0 -0
  84. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/framework_utilities/langchain/history.py +0 -0
  85. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/framework_utilities/openai/__init__.py +0 -0
  86. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/framework_utilities/openai/client.py +0 -0
  87. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/framework_utilities/openai/message_builder.py +0 -0
  88. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/framework_utilities/utils.py +0 -0
  89. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/history_manager/history_construction_with_contents.py +0 -0
  90. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/history_manager/history_manager.py +0 -0
  91. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/history_manager/loop_token_reducer.py +0 -0
  92. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/history_manager/utils.py +0 -0
  93. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/language_model/__init__.py +0 -0
  94. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/language_model/builder.py +0 -0
  95. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/language_model/constants.py +0 -0
  96. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/language_model/functions.py +0 -0
  97. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/language_model/prompt.py +0 -0
  98. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/language_model/reference.py +0 -0
  99. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/language_model/schemas.py +0 -0
  100. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/language_model/service.py +0 -0
  101. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/language_model/utils.py +0 -0
  102. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/postprocessor/postprocessor_manager.py +0 -0
  103. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/protocols/support.py +0 -0
  104. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/reference_manager/reference_manager.py +0 -0
  105. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/short_term_memory/__init__.py +0 -0
  106. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/short_term_memory/constants.py +0 -0
  107. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/short_term_memory/functions.py +0 -0
  108. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/short_term_memory/persistent_short_term_memory_manager.py +0 -0
  109. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/short_term_memory/schemas.py +0 -0
  110. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/short_term_memory/service.py +0 -0
  111. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/smart_rules/__init__.py +0 -0
  112. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/smart_rules/compile.py +0 -0
  113. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/thinking_manager/thinking_manager.py +0 -0
  114. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/tools/a2a/__init__.py +0 -0
  115. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/tools/a2a/schema.py +0 -0
  116. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/tools/config.py +0 -0
  117. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/tools/factory.py +0 -0
  118. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/tools/mcp/__init__.py +0 -0
  119. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/tools/mcp/manager.py +0 -0
  120. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/tools/mcp/tool_wrapper.py +0 -0
  121. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/tools/schemas.py +0 -0
  122. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/tools/test/test_tool_progress_reporter.py +0 -0
  123. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/tools/tool.py +0 -0
  124. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/tools/tool_progress_reporter.py +0 -0
  125. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/tools/utils/execution/execution.py +0 -0
  126. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/tools/utils/source_handling/schema.py +0 -0
  127. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/tools/utils/source_handling/source_formatting.py +0 -0
  128. {unique_toolkit-0.8.30 → unique_toolkit-0.8.31}/unique_toolkit/tools/utils/source_handling/tests/test_source_formatting.py +0 -0
@@ -5,6 +5,18 @@ 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
+
9
+ ## [0.8.31] - 2025-08-29
10
+ - Add various openai models to supported model list
11
+ - o1
12
+ - o3
13
+ - o3-deep-research
14
+ - o3-pro
15
+ - o4-mini
16
+ - o4-mini-deep-research
17
+ - gpt-4-1-mini
18
+ - gpt-4-1-nano
19
+
8
20
  ## [0.8.30] - 2025-08-28
9
21
  - Added A2A manager
10
22
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: unique_toolkit
3
- Version: 0.8.30
3
+ Version: 0.8.31
4
4
  Summary:
5
5
  License: Proprietary
6
6
  Author: Martin Fadler
@@ -115,6 +115,18 @@ All notable changes to this project will be documented in this file.
115
115
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
116
116
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
117
117
 
118
+
119
+ ## [0.8.31] - 2025-08-29
120
+ - Add various openai models to supported model list
121
+ - o1
122
+ - o3
123
+ - o3-deep-research
124
+ - o3-pro
125
+ - o4-mini
126
+ - o4-mini-deep-research
127
+ - gpt-4-1-mini
128
+ - gpt-4-1-nano
129
+
118
130
  ## [0.8.30] - 2025-08-28
119
131
  - Added A2A manager
120
132
 
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "unique_toolkit"
3
- version = "0.8.30"
3
+ version = "0.8.31"
4
4
  description = ""
5
5
  authors = [
6
6
  "Martin Fadler <martin.fadler@unique.ch>",
@@ -48,6 +48,14 @@ class LanguageModelName(StrEnum):
48
48
  LITELLM_OPENAI_GPT_5_MINI = "litellm:openai-gpt-5-mini"
49
49
  LITELLM_OPENAI_GPT_5_NANO = "litellm:openai-gpt-5-nano"
50
50
  LITELLM_OPENAI_GPT_5_CHAT = "litellm:openai-gpt-5-chat"
51
+ LITELLM_OPENAI_O1 = "litellm:openai-o1"
52
+ LITELLM_OPENAI_O3 = "litellm:openai-o3"
53
+ LITELLM_OPENAI_O3_DEEP_RESEARCH = "litellm:openai-o3-deep-research"
54
+ LITELLM_OPENAI_O3_PRO = "litellm:openai-o3-pro"
55
+ LITELLM_OPENAI_O4_MINI = "litellm:openai-o4-mini"
56
+ LITELLM_OPENAI_O4_MINI_DEEP_RESEARCH = "litellm:openai-o4-mini-deep-research"
57
+ LITELLM_OPENAI_GPT_4_1_MINI = "litellm:openai-gpt-4-1-mini"
58
+ LITELLM_OPENAI_GPT_4_1_NANO = "litellm:openai-gpt-4-1-nano"
51
59
  LITELLM_DEEPSEEK_R1 = "litellm:deepseek-r1"
52
60
  LITELLM_DEEPSEEK_V3 = "litellm:deepseek-v3-1"
53
61
  LITELLM_QWEN_3 = "litellm:qwen-3-235B-A22B"
@@ -83,6 +91,14 @@ def get_encoder_name(model_name: LanguageModelName) -> EncoderName:
83
91
  | LMN.LITELLM_OPENAI_GPT_5_MINI
84
92
  | LMN.LITELLM_OPENAI_GPT_5_NANO
85
93
  | LMN.LITELLM_OPENAI_GPT_5_CHAT
94
+ | LMN.LITELLM_OPENAI_O1
95
+ | LMN.LITELLM_OPENAI_O3
96
+ | LMN.LITELLM_OPENAI_O3_DEEP_RESEARCH
97
+ | LMN.LITELLM_OPENAI_O4_MINI
98
+ | LMN.LITELLM_OPENAI_O4_MINI_DEEP_RESEARCH
99
+ | LMN.LITELLM_OPENAI_GPT_4_1_MINI
100
+ | LMN.LITELLM_OPENAI_GPT_4_1_NANO
101
+ | LMN.LITELLM_OPENAI_O3_PRO
86
102
  ):
87
103
  return EncoderName.O200K_BASE
88
104
  case _:
@@ -879,6 +895,146 @@ class LanguageModelInfo(BaseModel):
879
895
  deprecated_at=date(2026, 8, 7),
880
896
  retirement_at=date(2026, 8, 7),
881
897
  )
898
+ case LanguageModelName.LITELLM_OPENAI_O1:
899
+ return cls(
900
+ name=model_name,
901
+ provider=LanguageModelProvider.LITELLM,
902
+ version="2024-12-17",
903
+ encoder_name=EncoderName.O200K_BASE,
904
+ capabilities=[
905
+ ModelCapabilities.STRUCTURED_OUTPUT,
906
+ ModelCapabilities.FUNCTION_CALLING,
907
+ ModelCapabilities.STREAMING,
908
+ ModelCapabilities.VISION,
909
+ ModelCapabilities.REASONING,
910
+ ],
911
+ token_limits=LanguageModelTokenLimits(
912
+ token_limit_input=200_000, token_limit_output=100_000
913
+ ),
914
+ info_cutoff_at=date(2023, 10, 1),
915
+ published_at=date(2024, 12, 17),
916
+ temperature_bounds=TemperatureBounds(
917
+ min_temperature=1.0, max_temperature=1.0
918
+ ),
919
+ )
920
+ case LanguageModelName.LITELLM_OPENAI_O3:
921
+ return cls(
922
+ name=model_name,
923
+ provider=LanguageModelProvider.LITELLM,
924
+ version="2025-04-16",
925
+ encoder_name=EncoderName.O200K_BASE,
926
+ capabilities=[
927
+ ModelCapabilities.FUNCTION_CALLING,
928
+ ModelCapabilities.STRUCTURED_OUTPUT,
929
+ ModelCapabilities.STREAMING,
930
+ ModelCapabilities.REASONING,
931
+ ],
932
+ token_limits=LanguageModelTokenLimits(
933
+ token_limit_input=200_000, token_limit_output=100_000
934
+ ),
935
+ temperature_bounds=TemperatureBounds(
936
+ min_temperature=1.0, max_temperature=1.0
937
+ ),
938
+ published_at=date(2025, 4, 16),
939
+ info_cutoff_at=date(2024, 6, 1),
940
+ )
941
+ case LanguageModelName.LITELLM_OPENAI_O3_DEEP_RESEARCH:
942
+ return cls(
943
+ name=model_name,
944
+ provider=LanguageModelProvider.LITELLM,
945
+ version="2025-06-26",
946
+ encoder_name=EncoderName.O200K_BASE,
947
+ token_limits=LanguageModelTokenLimits(
948
+ token_limit_input=200_000, token_limit_output=100_000
949
+ ),
950
+ published_at=date(2025, 4, 16),
951
+ capabilities=[ModelCapabilities.STREAMING],
952
+ info_cutoff_at=date(2024, 6, 1),
953
+ )
954
+ case LanguageModelName.LITELLM_OPENAI_O3_PRO:
955
+ return cls(
956
+ name=model_name,
957
+ provider=LanguageModelProvider.LITELLM,
958
+ version="2025-06-10",
959
+ encoder_name=EncoderName.O200K_BASE,
960
+ capabilities=[
961
+ ModelCapabilities.FUNCTION_CALLING,
962
+ ModelCapabilities.REASONING,
963
+ ModelCapabilities.STRUCTURED_OUTPUT,
964
+ ],
965
+ token_limits=LanguageModelTokenLimits(
966
+ token_limit_input=200_000, token_limit_output=100_000
967
+ ),
968
+ published_at=date(2025, 6, 10),
969
+ info_cutoff_at=date(2024, 6, 1),
970
+ )
971
+ case LanguageModelName.LITELLM_OPENAI_O4_MINI:
972
+ return cls(
973
+ name=model_name,
974
+ provider=LanguageModelProvider.LITELLM,
975
+ version="2025-04-16",
976
+ encoder_name=EncoderName.O200K_BASE,
977
+ capabilities=[
978
+ ModelCapabilities.FUNCTION_CALLING,
979
+ ModelCapabilities.STREAMING,
980
+ ModelCapabilities.STRUCTURED_OUTPUT,
981
+ ],
982
+ token_limits=LanguageModelTokenLimits(
983
+ token_limit_input=200_000, token_limit_output=100_000
984
+ ),
985
+ published_at=date(2025, 4, 16),
986
+ info_cutoff_at=date(2024, 6, 1),
987
+ temperature_bounds=TemperatureBounds(
988
+ min_temperature=1.0, max_temperature=1.0
989
+ ),
990
+ )
991
+ case LanguageModelName.LITELLM_OPENAI_O4_MINI_DEEP_RESEARCH:
992
+ return cls(
993
+ name=model_name,
994
+ provider=LanguageModelProvider.LITELLM,
995
+ version="2025-06-26",
996
+ encoder_name=EncoderName.O200K_BASE,
997
+ token_limits=LanguageModelTokenLimits(
998
+ token_limit_input=200_000, token_limit_output=100_000
999
+ ),
1000
+ published_at=date(2025, 4, 16),
1001
+ capabilities=[ModelCapabilities.STREAMING],
1002
+ info_cutoff_at=date(2024, 6, 1),
1003
+ )
1004
+ case LanguageModelName.LITELLM_OPENAI_GPT_4_1_MINI:
1005
+ return cls(
1006
+ name=model_name,
1007
+ provider=LanguageModelProvider.LITELLM,
1008
+ version="2025-04-14",
1009
+ encoder_name=EncoderName.O200K_BASE,
1010
+ published_at=date(2025, 4, 14),
1011
+ info_cutoff_at=date(2024, 6, 1),
1012
+ token_limits=LanguageModelTokenLimits(
1013
+ token_limit_input=1_047_576, token_limit_output=32_768
1014
+ ),
1015
+ capabilities=[
1016
+ ModelCapabilities.STREAMING,
1017
+ ModelCapabilities.FUNCTION_CALLING,
1018
+ ModelCapabilities.STRUCTURED_OUTPUT,
1019
+ ],
1020
+ )
1021
+ case LanguageModelName.LITELLM_OPENAI_GPT_4_1_NANO:
1022
+ return cls(
1023
+ name=model_name,
1024
+ provider=LanguageModelProvider.LITELLM,
1025
+ version="2025-04-14",
1026
+ encoder_name=EncoderName.O200K_BASE,
1027
+ published_at=date(2025, 4, 14),
1028
+ info_cutoff_at=date(2024, 6, 1),
1029
+ token_limits=LanguageModelTokenLimits(
1030
+ token_limit_input=1_047_576, token_limit_output=32_768
1031
+ ),
1032
+ capabilities=[
1033
+ ModelCapabilities.STREAMING,
1034
+ ModelCapabilities.FUNCTION_CALLING,
1035
+ ModelCapabilities.STRUCTURED_OUTPUT,
1036
+ ],
1037
+ )
882
1038
  case LanguageModelName.LITELLM_DEEPSEEK_R1:
883
1039
  return cls(
884
1040
  name=model_name,
@@ -1,7 +1,5 @@
1
- from unique_toolkit.tools.schemas import BaseToolConfig
2
-
3
1
  from unique_toolkit.tools.config import get_configuration_dict
4
-
2
+ from unique_toolkit.tools.schemas import BaseToolConfig
5
3
 
6
4
  DEFAULT_PARAM_DESCRIPTION_SUB_AGENT_USER_MESSAGE = """
7
5
  This is the message that will be sent to the sub-agent.
@@ -1,9 +1,8 @@
1
1
  from logging import Logger
2
2
 
3
3
  from unique_toolkit.app.schemas import ChatEvent
4
- from unique_toolkit.tools.a2a.service import SubAgentTool, ToolProgressReporter
5
-
6
4
  from unique_toolkit.tools.a2a.config import SubAgentToolConfig
5
+ from unique_toolkit.tools.a2a.service import SubAgentTool, ToolProgressReporter
7
6
  from unique_toolkit.tools.config import ToolBuildConfig
8
7
  from unique_toolkit.tools.schemas import BaseToolConfig
9
8
  from unique_toolkit.tools.tool import Tool
@@ -1,5 +1,4 @@
1
1
  from unique_toolkit import ShortTermMemoryService
2
-
3
2
  from unique_toolkit.short_term_memory.persistent_short_term_memory_manager import (
4
3
  PersistentShortMemoryManager,
5
4
  )
@@ -1,25 +1,23 @@
1
1
  from pydantic import Field, create_model
2
2
  from unique_sdk.utils.chat_in_space import send_message_and_wait_for_completion
3
+
3
4
  from unique_toolkit.app import ChatEvent
5
+ from unique_toolkit.evaluators.schemas import EvaluationMetricName
4
6
  from unique_toolkit.language_model import (
5
7
  LanguageModelFunction,
6
8
  LanguageModelMessage,
7
9
  LanguageModelToolDescription,
8
10
  )
9
-
10
- from unique_toolkit.evaluators.schemas import EvaluationMetricName
11
- from unique_toolkit.tools.schemas import ToolCallResponse
12
11
  from unique_toolkit.tools.a2a.config import SubAgentToolConfig
13
12
  from unique_toolkit.tools.a2a.memory import (
14
13
  get_sub_agent_short_term_memory_manager,
15
14
  )
16
15
  from unique_toolkit.tools.a2a.schema import (
17
16
  SubAgentShortTermMemorySchema,
18
- SubAgentToolCallResponse,
19
17
  SubAgentToolInput,
20
18
  )
19
+ from unique_toolkit.tools.schemas import ToolCallResponse
21
20
  from unique_toolkit.tools.tool import Tool
22
-
23
21
  from unique_toolkit.tools.tool_progress_reporter import (
24
22
  ProgressState,
25
23
  ToolProgressReporter,
@@ -148,7 +146,7 @@ class SubAgentTool(Tool[SubAgentToolConfig]):
148
146
  tool_response: ToolCallResponse,
149
147
  ) -> LanguageModelMessage:
150
148
  return ToolCallResponse(
151
- id=tool_call.id, # type: ignore
152
- name=tool_call.name,
153
- content=response["text"],
149
+ id=tool_response.id,
150
+ name=tool_response.name,
151
+ content=tool_response["content"],
154
152
  )
@@ -1,4 +1,5 @@
1
1
  from typing import Any, Dict, Optional
2
+
2
3
  from unique_toolkit.tools.schemas import BaseToolConfig
3
4
 
4
5
 
@@ -7,6 +7,7 @@ from pydantic import BaseModel
7
7
  from tests.test_obj_factory import get_event_obj
8
8
  from unique_toolkit.app.schemas import McpServer, McpTool
9
9
  from unique_toolkit.chat.service import ChatService
10
+ from unique_toolkit.tools.a2a.manager import A2AManager
10
11
  from unique_toolkit.tools.config import ToolBuildConfig, ToolIcon, ToolSelectionPolicy
11
12
  from unique_toolkit.tools.factory import ToolFactory
12
13
  from unique_toolkit.tools.mcp.manager import MCPManager
@@ -15,8 +16,6 @@ from unique_toolkit.tools.tool import Tool
15
16
  from unique_toolkit.tools.tool_manager import ToolManager, ToolManagerConfig
16
17
  from unique_toolkit.tools.tool_progress_reporter import ToolProgressReporter
17
18
 
18
- from unique_toolkit.tools.a2a.manager import A2AManager
19
-
20
19
 
21
20
  class MockParameters(BaseModel):
22
21
  pass
@@ -163,9 +162,9 @@ class TestMCPManager:
163
162
  event=self.event,
164
163
  tool_progress_reporter=tool_progress_reporter,
165
164
  )
166
-
165
+
167
166
  @pytest.fixture
168
- def a2a_manager(self,tool_progress_reporter):
167
+ def a2a_manager(self, tool_progress_reporter):
169
168
  """Create MCP manager fixture"""
170
169
  return A2AManager(
171
170
  logger=self.logger,
@@ -178,17 +177,18 @@ class TestMCPManager:
178
177
  return ToolManagerConfig(tools=internal_tools, max_tool_calls=10)
179
178
 
180
179
  @pytest.fixture
181
- def tool_manager(self, tool_manager_config, mcp_manager, a2a_manager,tool_progress_reporter):
180
+ def tool_manager(
181
+ self, tool_manager_config, mcp_manager, a2a_manager, tool_progress_reporter
182
+ ):
182
183
  """Create tool manager fixture"""
183
184
 
184
-
185
185
  return ToolManager(
186
186
  logger=self.logger,
187
187
  config=tool_manager_config,
188
188
  event=self.event,
189
189
  tool_progress_reporter=tool_progress_reporter,
190
190
  mcp_manager=mcp_manager,
191
- a2a_manager=a2a_manager
191
+ a2a_manager=a2a_manager,
192
192
  )
193
193
 
194
194
  def test_tool_manager_initialization(self, tool_manager):
@@ -270,7 +270,6 @@ class TestMCPManager:
270
270
 
271
271
  # Test 1: Normal initialization with both tool types
272
272
 
273
-
274
273
  a2a_manager = A2AManager(
275
274
  logger=self.logger,
276
275
  tool_progress_reporter=tool_progress_reporter,
@@ -282,7 +281,7 @@ class TestMCPManager:
282
281
  event=self.event,
283
282
  tool_progress_reporter=tool_progress_reporter,
284
283
  mcp_manager=mcp_manager,
285
- a2a_manager=a2a_manager
284
+ a2a_manager=a2a_manager,
286
285
  )
287
286
 
288
287
  # Verify both tools are loaded
@@ -307,8 +306,6 @@ class TestMCPManager:
307
306
  event_with_disabled.payload.tool_choices = ["internal_search", "mcp_test_tool"]
308
307
  event_with_disabled.payload.disabled_tools = ["internal_search"]
309
308
 
310
-
311
-
312
309
  a2a_manager = A2AManager(
313
310
  logger=self.logger,
314
311
  tool_progress_reporter=tool_progress_reporter,
@@ -345,8 +342,6 @@ class TestMCPManager:
345
342
  event_with_limited_choices.payload.tool_choices = ["internal_search"]
346
343
  event_with_limited_choices.payload.disabled_tools = []
347
344
 
348
-
349
-
350
345
  a2a_manager = A2AManager(
351
346
  logger=self.logger,
352
347
  tool_progress_reporter=tool_progress_reporter,
@@ -386,8 +381,6 @@ class TestMCPManager:
386
381
  tools=[exclusive_tool_config], max_tool_calls=10
387
382
  )
388
383
 
389
-
390
-
391
384
  a2a_manager = A2AManager(
392
385
  logger=self.logger,
393
386
  tool_progress_reporter=tool_progress_reporter,
@@ -399,7 +392,7 @@ class TestMCPManager:
399
392
  event=self.event,
400
393
  tool_progress_reporter=tool_progress_reporter,
401
394
  mcp_manager=mcp_manager,
402
- a2a_manager=a2a_manager
395
+ a2a_manager=a2a_manager,
403
396
  )
404
397
 
405
398
  # Should only have the exclusive tool, MCP tools should be ignored
@@ -429,8 +422,6 @@ class TestMCPManager:
429
422
  tools=[disabled_tool_config], max_tool_calls=10
430
423
  )
431
424
 
432
-
433
-
434
425
  a2a_manager = A2AManager(
435
426
  logger=self.logger,
436
427
  tool_progress_reporter=tool_progress_reporter,
@@ -442,7 +433,7 @@ class TestMCPManager:
442
433
  event=self.event,
443
434
  tool_progress_reporter=tool_progress_reporter,
444
435
  mcp_manager=mcp_manager,
445
- a2a_manager=a2a_manager
436
+ a2a_manager=a2a_manager,
446
437
  )
447
438
 
448
439
  # Should only have MCP tool, disabled internal tool should be filtered out
@@ -2,10 +2,7 @@ import asyncio
2
2
  from logging import Logger, getLogger
3
3
  from typing import Any
4
4
 
5
-
6
5
  from pydantic import BaseModel, Field
7
- from unique_toolkit.tools.a2a.manager import A2AManager
8
-
9
6
 
10
7
  from unique_toolkit.app.schemas import ChatEvent
11
8
  from unique_toolkit.evals.schemas import EvaluationMetricName
@@ -14,6 +11,7 @@ from unique_toolkit.language_model.schemas import (
14
11
  LanguageModelTool,
15
12
  LanguageModelToolDescription,
16
13
  )
14
+ from unique_toolkit.tools.a2a.manager import A2AManager
17
15
  from unique_toolkit.tools.config import ToolBuildConfig, _rebuild_config_model
18
16
  from unique_toolkit.tools.factory import ToolFactory
19
17
  from unique_toolkit.tools.mcp.manager import MCPManager
File without changes