unique_toolkit 0.8.50__tar.gz → 0.8.51__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.50 → unique_toolkit-0.8.51}/CHANGELOG.md +2 -0
  2. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/PKG-INFO +3 -1
  3. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/pyproject.toml +1 -1
  4. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/_common/token/token_counting.py +29 -9
  5. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/LICENSE +0 -0
  6. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/README.md +0 -0
  7. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/__init__.py +0 -0
  8. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/_common/_base_service.py +0 -0
  9. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/_common/_time_utils.py +0 -0
  10. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/_common/base_model_type_attribute.py +0 -0
  11. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/_common/chunk_relevancy_sorter/config.py +0 -0
  12. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/_common/chunk_relevancy_sorter/exception.py +0 -0
  13. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/_common/chunk_relevancy_sorter/schemas.py +0 -0
  14. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/_common/chunk_relevancy_sorter/service.py +0 -0
  15. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/_common/chunk_relevancy_sorter/tests/test_service.py +0 -0
  16. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/_common/default_language_model.py +0 -0
  17. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/_common/endpoint_builder.py +0 -0
  18. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/_common/endpoint_requestor.py +0 -0
  19. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/_common/exception.py +0 -0
  20. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/_common/feature_flags/schema.py +0 -0
  21. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/_common/pydantic_helpers.py +0 -0
  22. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/_common/token/image_token_counting.py +0 -0
  23. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/_common/utils/structured_output/schema.py +0 -0
  24. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/_common/validate_required_values.py +0 -0
  25. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/_common/validators.py +0 -0
  26. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/app/__init__.py +0 -0
  27. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/app/dev_util.py +0 -0
  28. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/app/init_logging.py +0 -0
  29. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/app/init_sdk.py +0 -0
  30. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/app/performance/async_tasks.py +0 -0
  31. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/app/performance/async_wrapper.py +0 -0
  32. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/app/schemas.py +0 -0
  33. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/app/unique_settings.py +0 -0
  34. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/app/verification.py +0 -0
  35. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/chat/__init__.py +0 -0
  36. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/chat/constants.py +0 -0
  37. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/chat/functions.py +0 -0
  38. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/chat/schemas.py +0 -0
  39. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/chat/service.py +0 -0
  40. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/chat/state.py +0 -0
  41. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/chat/utils.py +0 -0
  42. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/content/__init__.py +0 -0
  43. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/content/constants.py +0 -0
  44. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/content/functions.py +0 -0
  45. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/content/schemas.py +0 -0
  46. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/content/service.py +0 -0
  47. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/content/utils.py +0 -0
  48. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/debug_info_manager/debug_info_manager.py +0 -0
  49. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/embedding/__init__.py +0 -0
  50. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/embedding/constants.py +0 -0
  51. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/embedding/functions.py +0 -0
  52. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/embedding/schemas.py +0 -0
  53. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/embedding/service.py +0 -0
  54. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/embedding/utils.py +0 -0
  55. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/evals/config.py +0 -0
  56. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/evals/context_relevancy/prompts.py +0 -0
  57. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/evals/context_relevancy/schema.py +0 -0
  58. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/evals/context_relevancy/service.py +0 -0
  59. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/evals/evaluation_manager.py +0 -0
  60. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/evals/exception.py +0 -0
  61. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/evals/hallucination/constants.py +0 -0
  62. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/evals/hallucination/hallucination_evaluation.py +0 -0
  63. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/evals/hallucination/prompts.py +0 -0
  64. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/evals/hallucination/service.py +0 -0
  65. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/evals/hallucination/utils.py +0 -0
  66. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/evals/output_parser.py +0 -0
  67. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/evals/schemas.py +0 -0
  68. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/evals/tests/test_context_relevancy_service.py +0 -0
  69. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/evals/tests/test_output_parser.py +0 -0
  70. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/framework_utilities/__init__.py +0 -0
  71. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/framework_utilities/langchain/client.py +0 -0
  72. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/framework_utilities/langchain/history.py +0 -0
  73. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/framework_utilities/openai/__init__.py +0 -0
  74. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/framework_utilities/openai/client.py +0 -0
  75. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/framework_utilities/openai/message_builder.py +0 -0
  76. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/framework_utilities/utils.py +0 -0
  77. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/history_manager/history_construction_with_contents.py +0 -0
  78. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/history_manager/history_manager.py +0 -0
  79. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/history_manager/loop_token_reducer.py +0 -0
  80. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/history_manager/utils.py +0 -0
  81. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/language_model/__init__.py +0 -0
  82. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/language_model/builder.py +0 -0
  83. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/language_model/constants.py +0 -0
  84. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/language_model/functions.py +0 -0
  85. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/language_model/infos.py +0 -0
  86. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/language_model/prompt.py +0 -0
  87. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/language_model/reference.py +0 -0
  88. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/language_model/schemas.py +0 -0
  89. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/language_model/service.py +0 -0
  90. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/language_model/utils.py +0 -0
  91. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/postprocessor/postprocessor_manager.py +0 -0
  92. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/protocols/support.py +0 -0
  93. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/reference_manager/reference_manager.py +0 -0
  94. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/short_term_memory/__init__.py +0 -0
  95. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/short_term_memory/constants.py +0 -0
  96. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/short_term_memory/functions.py +0 -0
  97. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/short_term_memory/persistent_short_term_memory_manager.py +0 -0
  98. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/short_term_memory/schemas.py +0 -0
  99. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/short_term_memory/service.py +0 -0
  100. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/smart_rules/__init__.py +0 -0
  101. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/smart_rules/compile.py +0 -0
  102. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/thinking_manager/thinking_manager.py +0 -0
  103. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/tools/a2a/__init__.py +0 -0
  104. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/tools/a2a/config.py +0 -0
  105. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/tools/a2a/manager.py +0 -0
  106. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/tools/a2a/memory.py +0 -0
  107. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/tools/a2a/schema.py +0 -0
  108. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/tools/a2a/service.py +0 -0
  109. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/tools/agent_chunks_hanlder.py +0 -0
  110. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/tools/config.py +0 -0
  111. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/tools/factory.py +0 -0
  112. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/tools/mcp/__init__.py +0 -0
  113. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/tools/mcp/manager.py +0 -0
  114. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/tools/mcp/models.py +0 -0
  115. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/tools/mcp/tool_wrapper.py +0 -0
  116. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/tools/schemas.py +0 -0
  117. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/tools/test/test_mcp_manager.py +0 -0
  118. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/tools/test/test_tool_progress_reporter.py +0 -0
  119. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/tools/tool.py +0 -0
  120. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/tools/tool_manager.py +0 -0
  121. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/tools/tool_progress_reporter.py +0 -0
  122. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/tools/utils/execution/execution.py +0 -0
  123. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/tools/utils/source_handling/schema.py +0 -0
  124. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/tools/utils/source_handling/source_formatting.py +0 -0
  125. {unique_toolkit-0.8.50 → unique_toolkit-0.8.51}/unique_toolkit/tools/utils/source_handling/tests/test_source_formatting.py +0 -0
@@ -5,6 +5,8 @@ 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
+ ## [0.8.51] - 2025-09-06
9
+ - Update token counter to latest version of monorepo.
8
10
 
9
11
  ## [0.8.50] - 2025-09-08
10
12
  - Minor fix in documentation
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: unique_toolkit
3
- Version: 0.8.50
3
+ Version: 0.8.51
4
4
  Summary:
5
5
  License: Proprietary
6
6
  Author: Cedric Klinkert
@@ -117,6 +117,8 @@ 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
+ ## [0.8.51] - 2025-09-06
121
+ - Update token counter to latest version of monorepo.
120
122
 
121
123
  ## [0.8.50] - 2025-09-08
122
124
  - Minor fix in documentation
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "unique_toolkit"
3
- version = "0.8.50"
3
+ version = "0.8.51"
4
4
  description = ""
5
5
  authors = [
6
6
  "Cedric Klinkert <cedric.klinkert@unique.ch>",
@@ -4,11 +4,11 @@
4
4
  import json
5
5
  from typing import Any, Callable
6
6
 
7
- from pydantic import BaseModel
8
-
9
- from unique_toolkit._common.token.image_token_counting import (
7
+ from _common.utils.token.image_token_counting import (
10
8
  calculate_image_tokens_from_base64,
11
9
  )
10
+ from pydantic import BaseModel
11
+
12
12
  from unique_toolkit.language_model import (
13
13
  LanguageModelMessage,
14
14
  LanguageModelMessages,
@@ -71,11 +71,25 @@ def num_tokens_per_messages(
71
71
  for message in messages:
72
72
  num_tokens = 3 # extra_tokens_per_message
73
73
  for key, value in message.items():
74
- if isinstance(value, str):
74
+ if key == "content":
75
+ if message.get("role") == "tool":
76
+ """
77
+ We have observed a general difference in the way tool response messages are handled.
78
+ Specifically, if we take a list of tool responses and artificially transform them into user messages (content field stays the same)
79
+ the token consumption goes does drastically, this seems to scale with the number of tokens in the tool responses.
80
+
81
+ the json.dumps() method was found by trial and error. It will give a conservative estimate, but seems to be close to the token count
82
+ returned from the openai call.
83
+ """
84
+ num_tokens += len(encode(json.dumps(value)))
85
+ elif isinstance(value, list):
86
+ # NOTE: The result returned by the function below is not 100% accurate.
87
+ num_tokens += handle_message_with_images(value, encode)
88
+ else:
89
+ num_tokens += len(encode(value))
90
+ elif isinstance(value, str):
75
91
  num_tokens += len(encode(value))
76
- elif isinstance(value, list):
77
- # NOTE: The result returned by the function below is not 100% accurate.
78
- num_tokens += handle_message_with_images(value, encode)
92
+
79
93
  if key == "name":
80
94
  num_tokens += 1 # extra_tokens_per_name
81
95
 
@@ -163,8 +177,14 @@ def messages_to_openai_messages(
163
177
  messages = LanguageModelMessages(messages)
164
178
 
165
179
  return [
166
- {k: v for k, v in m.items() if (k in ["content", "role"] and v is not None)}
167
- for m in json.loads(messages.model_dump_json())
180
+ {
181
+ k: v
182
+ for k, v in m.items()
183
+ if (
184
+ k in ["content", "role", "name"] and v is not None
185
+ ) # Ignore tool_calls for now
186
+ }
187
+ for m in messages.model_dump(mode="json")
168
188
  ]
169
189
 
170
190
 
File without changes