unique_toolkit 0.8.48__tar.gz → 0.8.50__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 (125) hide show
  1. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/CHANGELOG.md +8 -0
  2. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/PKG-INFO +9 -1
  3. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/pyproject.toml +1 -1
  4. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/history_manager/loop_token_reducer.py +31 -15
  5. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/LICENSE +0 -0
  6. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/README.md +0 -0
  7. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/__init__.py +0 -0
  8. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/_common/_base_service.py +0 -0
  9. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/_common/_time_utils.py +0 -0
  10. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/_common/base_model_type_attribute.py +0 -0
  11. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/_common/chunk_relevancy_sorter/config.py +0 -0
  12. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/_common/chunk_relevancy_sorter/exception.py +0 -0
  13. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/_common/chunk_relevancy_sorter/schemas.py +0 -0
  14. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/_common/chunk_relevancy_sorter/service.py +0 -0
  15. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/_common/chunk_relevancy_sorter/tests/test_service.py +0 -0
  16. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/_common/default_language_model.py +0 -0
  17. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/_common/endpoint_builder.py +0 -0
  18. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/_common/endpoint_requestor.py +0 -0
  19. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/_common/exception.py +0 -0
  20. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/_common/feature_flags/schema.py +0 -0
  21. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/_common/pydantic_helpers.py +0 -0
  22. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/_common/token/image_token_counting.py +0 -0
  23. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/_common/token/token_counting.py +0 -0
  24. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/_common/utils/structured_output/schema.py +0 -0
  25. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/_common/validate_required_values.py +0 -0
  26. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/_common/validators.py +0 -0
  27. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/app/__init__.py +0 -0
  28. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/app/dev_util.py +0 -0
  29. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/app/init_logging.py +0 -0
  30. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/app/init_sdk.py +0 -0
  31. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/app/performance/async_tasks.py +0 -0
  32. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/app/performance/async_wrapper.py +0 -0
  33. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/app/schemas.py +0 -0
  34. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/app/unique_settings.py +0 -0
  35. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/app/verification.py +0 -0
  36. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/chat/__init__.py +0 -0
  37. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/chat/constants.py +0 -0
  38. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/chat/functions.py +0 -0
  39. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/chat/schemas.py +0 -0
  40. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/chat/service.py +0 -0
  41. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/chat/state.py +0 -0
  42. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/chat/utils.py +0 -0
  43. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/content/__init__.py +0 -0
  44. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/content/constants.py +0 -0
  45. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/content/functions.py +0 -0
  46. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/content/schemas.py +0 -0
  47. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/content/service.py +0 -0
  48. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/content/utils.py +0 -0
  49. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/debug_info_manager/debug_info_manager.py +0 -0
  50. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/embedding/__init__.py +0 -0
  51. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/embedding/constants.py +0 -0
  52. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/embedding/functions.py +0 -0
  53. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/embedding/schemas.py +0 -0
  54. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/embedding/service.py +0 -0
  55. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/embedding/utils.py +0 -0
  56. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/evals/config.py +0 -0
  57. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/evals/context_relevancy/prompts.py +0 -0
  58. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/evals/context_relevancy/schema.py +0 -0
  59. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/evals/context_relevancy/service.py +0 -0
  60. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/evals/evaluation_manager.py +0 -0
  61. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/evals/exception.py +0 -0
  62. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/evals/hallucination/constants.py +0 -0
  63. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/evals/hallucination/hallucination_evaluation.py +0 -0
  64. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/evals/hallucination/prompts.py +0 -0
  65. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/evals/hallucination/service.py +0 -0
  66. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/evals/hallucination/utils.py +0 -0
  67. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/evals/output_parser.py +0 -0
  68. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/evals/schemas.py +0 -0
  69. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/evals/tests/test_context_relevancy_service.py +0 -0
  70. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/evals/tests/test_output_parser.py +0 -0
  71. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/framework_utilities/__init__.py +0 -0
  72. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/framework_utilities/langchain/client.py +0 -0
  73. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/framework_utilities/langchain/history.py +0 -0
  74. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/framework_utilities/openai/__init__.py +0 -0
  75. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/framework_utilities/openai/client.py +0 -0
  76. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/framework_utilities/openai/message_builder.py +0 -0
  77. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/framework_utilities/utils.py +0 -0
  78. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/history_manager/history_construction_with_contents.py +0 -0
  79. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/history_manager/history_manager.py +0 -0
  80. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/history_manager/utils.py +0 -0
  81. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/language_model/__init__.py +0 -0
  82. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/language_model/builder.py +0 -0
  83. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/language_model/constants.py +0 -0
  84. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/language_model/functions.py +0 -0
  85. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/language_model/infos.py +0 -0
  86. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/language_model/prompt.py +0 -0
  87. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/language_model/reference.py +0 -0
  88. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/language_model/schemas.py +0 -0
  89. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/language_model/service.py +0 -0
  90. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/language_model/utils.py +0 -0
  91. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/postprocessor/postprocessor_manager.py +0 -0
  92. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/protocols/support.py +0 -0
  93. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/reference_manager/reference_manager.py +0 -0
  94. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/short_term_memory/__init__.py +0 -0
  95. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/short_term_memory/constants.py +0 -0
  96. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/short_term_memory/functions.py +0 -0
  97. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/short_term_memory/persistent_short_term_memory_manager.py +0 -0
  98. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/short_term_memory/schemas.py +0 -0
  99. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/short_term_memory/service.py +0 -0
  100. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/smart_rules/__init__.py +0 -0
  101. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/smart_rules/compile.py +0 -0
  102. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/thinking_manager/thinking_manager.py +0 -0
  103. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/tools/a2a/__init__.py +0 -0
  104. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/tools/a2a/config.py +0 -0
  105. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/tools/a2a/manager.py +0 -0
  106. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/tools/a2a/memory.py +0 -0
  107. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/tools/a2a/schema.py +0 -0
  108. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/tools/a2a/service.py +0 -0
  109. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/tools/agent_chunks_hanlder.py +0 -0
  110. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/tools/config.py +0 -0
  111. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/tools/factory.py +0 -0
  112. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/tools/mcp/__init__.py +0 -0
  113. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/tools/mcp/manager.py +0 -0
  114. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/tools/mcp/models.py +0 -0
  115. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/tools/mcp/tool_wrapper.py +0 -0
  116. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/tools/schemas.py +0 -0
  117. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/tools/test/test_mcp_manager.py +0 -0
  118. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/tools/test/test_tool_progress_reporter.py +0 -0
  119. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/tools/tool.py +0 -0
  120. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/tools/tool_manager.py +0 -0
  121. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/tools/tool_progress_reporter.py +0 -0
  122. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/tools/utils/execution/execution.py +0 -0
  123. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/tools/utils/source_handling/schema.py +0 -0
  124. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/tools/utils/source_handling/source_formatting.py +0 -0
  125. {unique_toolkit-0.8.48 → unique_toolkit-0.8.50}/unique_toolkit/tools/utils/source_handling/tests/test_source_formatting.py +0 -0
@@ -5,6 +5,14 @@ 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.50] - 2025-09-08
10
+ - Minor fix in documentation
11
+ - Updated examples
12
+
13
+ ## [0.8.49] - 2025-09-05
14
+ - Fixed token reducer now has a safety margin of 10% less did not work.
15
+
8
16
  ## [0.8.48] - 2025-09-05
9
17
  - Add documentation on language models to markdown
10
18
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: unique_toolkit
3
- Version: 0.8.48
3
+ Version: 0.8.50
4
4
  Summary:
5
5
  License: Proprietary
6
6
  Author: Cedric Klinkert
@@ -117,6 +117,14 @@ All notable changes to this project will be documented in this file.
117
117
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
118
118
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
119
119
 
120
+
121
+ ## [0.8.50] - 2025-09-08
122
+ - Minor fix in documentation
123
+ - Updated examples
124
+
125
+ ## [0.8.49] - 2025-09-05
126
+ - Fixed token reducer now has a safety margin of 10% less did not work.
127
+
120
128
  ## [0.8.48] - 2025-09-05
121
129
  - Add documentation on language models to markdown
122
130
 
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "unique_toolkit"
3
- version = "0.8.48"
3
+ version = "0.8.50"
4
4
  description = ""
5
5
  authors = [
6
6
  "Cedric Klinkert <cedric.klinkert@unique.ch>",
@@ -28,6 +28,10 @@ from unique_toolkit.language_model.schemas import (
28
28
  )
29
29
  from unique_toolkit.reference_manager.reference_manager import ReferenceManager
30
30
 
31
+ MAX_INPUT_TOKENS_SAFETY_PERCENTAGE = (
32
+ 0.1 # 10% safety margin for input tokens we need 10% less does not work.
33
+ )
34
+
31
35
 
32
36
  class SourceReductionResult(BaseModel):
33
37
  message: LanguageModelToolMessage
@@ -74,26 +78,27 @@ class LoopTokenReducer:
74
78
  ) -> LanguageModelMessages:
75
79
  """Compose the system and user messages for the plan execution step, which is evaluating if any further tool calls are required."""
76
80
 
77
- messages = await self._construct_history(
81
+ history_from_db = await self._prep_db_history(
78
82
  original_user_message,
79
83
  rendered_user_message_string,
80
84
  rendered_system_message_string,
81
- loop_history,
82
85
  remove_from_text,
83
86
  )
84
87
 
88
+ messages = self._construct_history(
89
+ history_from_db,
90
+ loop_history,
91
+ )
92
+
85
93
  token_count = self._count_message_tokens(messages)
86
94
  self._log_token_usage(token_count)
87
95
 
88
96
  while self._exceeds_token_limit(token_count):
89
97
  token_count_before_reduction = token_count
90
98
  loop_history = self._handle_token_limit_exceeded(loop_history)
91
- messages = await self._construct_history(
92
- original_user_message,
93
- rendered_user_message_string,
94
- rendered_system_message_string,
99
+ messages = self._construct_history(
100
+ history_from_db,
95
101
  loop_history,
96
- remove_from_text,
97
102
  )
98
103
  token_count = self._count_message_tokens(messages)
99
104
  self._log_token_usage(token_count)
@@ -101,6 +106,11 @@ class LoopTokenReducer:
101
106
  if token_count_after_reduction >= token_count_before_reduction:
102
107
  break
103
108
 
109
+ token_count = self._count_message_tokens(messages)
110
+ self._logger.info(
111
+ f"Final token count after reduction: {token_count} of model_capacity {self._language_model.token_limits.token_limit_input}"
112
+ )
113
+
104
114
  return messages
105
115
 
106
116
  def _exceeds_token_limit(self, token_count: int) -> bool:
@@ -110,13 +120,14 @@ class LoopTokenReducer:
110
120
  len(chunks) > 1
111
121
  for chunks in self._reference_manager.get_chunks_of_all_tools()
112
122
  )
113
-
123
+ max_tokens = int(
124
+ self._language_model.token_limits.token_limit_input
125
+ * (1 - MAX_INPUT_TOKENS_SAFETY_PERCENTAGE)
126
+ )
114
127
  # TODO: This is not fully correct at the moment as the token_count
115
128
  # include system_prompt and user question already
116
129
  # TODO: There is a problem if we exceed but only have one chunk per tool call
117
- exceeds_limit = (
118
- token_count > self._language_model.token_limits.token_limit_input
119
- )
130
+ exceeds_limit = token_count > max_tokens
120
131
 
121
132
  return has_multiple_chunks_for_a_tool_call and exceeds_limit
122
133
 
@@ -132,14 +143,13 @@ class LoopTokenReducer:
132
143
  self._logger.info(f"Token messages: {token_count}")
133
144
  # self.agent_debug_info.add("token_messages", token_count)
134
145
 
135
- async def _construct_history(
146
+ async def _prep_db_history(
136
147
  self,
137
148
  original_user_message: str,
138
149
  rendered_user_message_string: str,
139
150
  rendered_system_message_string: str,
140
- loop_history: list[LanguageModelMessage],
141
151
  remove_from_text: Callable[[str], Awaitable[str]],
142
- ) -> LanguageModelMessages:
152
+ ) -> list[LanguageModelMessage]:
143
153
  history_from_db = await self._get_history_from_db(remove_from_text)
144
154
  history_from_db = self._replace_user_message(
145
155
  history_from_db, original_user_message, rendered_user_message_string
@@ -147,9 +157,15 @@ class LoopTokenReducer:
147
157
  system_message = LanguageModelSystemMessage(
148
158
  content=rendered_system_message_string
149
159
  )
160
+ return [system_message] + history_from_db
150
161
 
162
+ def _construct_history(
163
+ self,
164
+ history_from_db: list[LanguageModelMessage],
165
+ loop_history: list[LanguageModelMessage],
166
+ ) -> LanguageModelMessages:
151
167
  constructed_history = LanguageModelMessages(
152
- [system_message] + history_from_db + loop_history,
168
+ history_from_db + loop_history,
153
169
  )
154
170
 
155
171
  return constructed_history
File without changes