unique_toolkit 1.19.1__py3-none-any.whl → 1.19.3__py3-none-any.whl

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.

Potentially problematic release.


This version of unique_toolkit might be problematic. Click here for more details.

@@ -1,4 +1,4 @@
1
- from pydantic import BaseModel, Field
1
+ from pydantic import BaseModel
2
2
 
3
3
  from unique_toolkit.agentic.tools.config import get_configuration_dict
4
4
 
@@ -7,7 +7,3 @@ class FeatureExtendedSourceSerialization(BaseModel):
7
7
  """Mixin for experimental feature in Source serialization"""
8
8
 
9
9
  model_config = get_configuration_dict()
10
- full_sources_serialize_dump: bool = Field(
11
- default=False,
12
- description="Whether to include the full source object in the tool response. If True, includes the full Source object. If False, uses the old format with only source_number and content.",
13
- )
@@ -3,6 +3,9 @@ from typing import Annotated, Awaitable, Callable
3
3
 
4
4
  from pydantic import BaseModel, Field
5
5
 
6
+ from unique_toolkit._common.feature_flags.schema import (
7
+ FeatureExtendedSourceSerialization,
8
+ )
6
9
  from unique_toolkit._common.validators import LMI
7
10
  from unique_toolkit.agentic.history_manager.loop_token_reducer import LoopTokenReducer
8
11
  from unique_toolkit.agentic.history_manager.utils import transform_chunks_to_string
@@ -42,11 +45,7 @@ class UploadedContentConfig(BaseModel):
42
45
  )
43
46
 
44
47
 
45
- class ExperimentalFeatures(BaseModel):
46
- full_sources_serialize_dump: bool = Field(
47
- default=False,
48
- description="If True, the sources will be serialized in full, otherwise only the content will be serialized.",
49
- )
48
+ class ExperimentalFeatures(FeatureExtendedSourceSerialization): ...
50
49
 
51
50
 
52
51
  class HistoryManagerConfig(BaseModel):
@@ -172,8 +171,6 @@ class HistoryManager:
172
171
  stringified_sources, sources = transform_chunks_to_string(
173
172
  content_chunks,
174
173
  self._source_enumerator,
175
- None, # Use None for SourceFormatConfig
176
- self._config.experimental_features.full_sources_serialize_dump,
177
174
  )
178
175
 
179
176
  self._source_enumerator += len(
@@ -1,12 +1,10 @@
1
1
  import json
2
2
  import logging
3
3
  from copy import deepcopy
4
+ from typing import Any
4
5
 
5
6
  from unique_toolkit.agentic.tools.schemas import Source
6
- from unique_toolkit.agentic.tools.utils.source_handling.schema import (
7
- SourceFormatConfig,
8
- )
9
- from unique_toolkit.content.schemas import ContentChunk, ContentMetadata
7
+ from unique_toolkit.content.schemas import ContentChunk
10
8
  from unique_toolkit.language_model.schemas import (
11
9
  LanguageModelAssistantMessage,
12
10
  LanguageModelMessage,
@@ -62,58 +60,25 @@ def _convert_tool_call_response_to_content(
62
60
  def transform_chunks_to_string(
63
61
  content_chunks: list[ContentChunk],
64
62
  max_source_number: int,
65
- cfg: SourceFormatConfig | None,
66
- full_sources_serialize_dump: bool = False,
67
- ) -> tuple[str, list[Source]]:
63
+ ) -> tuple[str, list[dict[str, Any]]]:
68
64
  """Transform content chunks into a string of sources.
69
65
 
70
66
  Args:
71
67
  content_chunks (list[ContentChunk]): The content chunks to transform
72
68
  max_source_number (int): The maximum source number to use
73
- feature_full_sources (bool, optional): Whether to include the full source object. Defaults to False which is the old format.
74
69
 
75
70
  Returns:
76
71
  str: String for the tool call response
77
72
  """
78
73
  if not content_chunks:
79
74
  return "No relevant sources found.", []
80
- if full_sources_serialize_dump:
81
- sources = [
82
- Source(
83
- source_number=max_source_number + i,
84
- key=chunk.key,
85
- id=chunk.id,
86
- order=chunk.order,
87
- content=chunk.text,
88
- chunk_id=chunk.chunk_id,
89
- metadata=(
90
- _format_metadata(chunk.metadata, cfg) or None
91
- if chunk.metadata
92
- else None
93
- ),
94
- url=chunk.url,
95
- ).model_dump(
96
- exclude_none=True,
97
- exclude_defaults=True,
98
- by_alias=True,
99
- )
100
- for i, chunk in enumerate(content_chunks)
101
- ]
102
- else:
103
- sources = [
104
- {
105
- "source_number": max_source_number + i,
106
- "content": chunk.text,
107
- **(
108
- {"metadata": meta}
109
- if (
110
- meta := _format_metadata(chunk.metadata, cfg)
111
- ) # only add when not empty
112
- else {}
113
- ),
114
- }
115
- for i, chunk in enumerate(content_chunks)
116
- ]
75
+ sources: list[dict[str, Any]] = [
76
+ {
77
+ "source_number": max_source_number + i,
78
+ "content": chunk.text,
79
+ }
80
+ for i, chunk in enumerate(content_chunks)
81
+ ]
117
82
  return json.dumps(sources), sources
118
83
 
119
84
 
@@ -129,45 +94,3 @@ def load_sources_from_string(
129
94
  except (json.JSONDecodeError, ValueError):
130
95
  logger.warning("Failed to parse source string")
131
96
  return None
132
-
133
-
134
- def _format_metadata(
135
- metadata: ContentMetadata | None,
136
- cfg: SourceFormatConfig | None,
137
- ) -> str:
138
- """
139
- Build the concatenated tag string from the chunk's metadata
140
- and the templates found in cfg.sections.
141
- Example result:
142
- "<|topic|>GenAI<|/topic|>\n<|date|>This document is from: 2025-04-29<|/date|>\n"
143
- """
144
- if metadata is None:
145
- return ""
146
-
147
- if cfg is None or not cfg.sections:
148
- # If no configuration is provided, return empty string
149
- return ""
150
-
151
- meta_dict = metadata.model_dump(exclude_none=True, by_alias=True)
152
- sections = cfg.sections
153
-
154
- parts: list[str] = []
155
- for key, template in sections.items():
156
- if key in meta_dict:
157
- parts.append(template.format(meta_dict[key]))
158
-
159
- return "".join(parts)
160
-
161
-
162
- ### In case we do not want any formatting of metadata we could use this function
163
- # def _filtered_metadata(
164
- # meta: ContentMetadata | None,
165
- # cfg: SourceFormatConfig,
166
- # ) -> dict[str, str] | None:
167
- # if meta is None:
168
- # return None
169
-
170
- # allowed = set(cfg.sections)
171
- # raw = meta.model_dump(exclude_none=True, by_alias=True)
172
- # pruned = {k: v for k, v in raw.items() if k in allowed}
173
- # return pruned or None
@@ -18,7 +18,6 @@ from unique_toolkit.agentic.tools.a2a.tool._schema import (
18
18
  from unique_toolkit.agentic.tools.a2a.tool.config import (
19
19
  SubAgentToolConfig,
20
20
  )
21
- from unique_toolkit.agentic.tools.agent_chunks_hanlder import AgentChunksHandler
22
21
  from unique_toolkit.agentic.tools.factory import ToolFactory
23
22
  from unique_toolkit.agentic.tools.schemas import ToolCallResponse
24
23
  from unique_toolkit.agentic.tools.tool import Tool
@@ -31,7 +30,6 @@ from unique_toolkit.language_model import (
31
30
  LanguageModelFunction,
32
31
  LanguageModelToolDescription,
33
32
  )
34
- from unique_toolkit.language_model.schemas import LanguageModelMessage
35
33
 
36
34
 
37
35
  class SubAgentResponseSubscriber(Protocol):
@@ -199,13 +197,6 @@ class SubAgentTool(Tool[SubAgentToolConfig]):
199
197
  content=response_text_with_references,
200
198
  )
201
199
 
202
- @override
203
- def get_tool_call_result_for_loop_history(
204
- self,
205
- tool_response: ToolCallResponse,
206
- agent_chunks_handler: AgentChunksHandler,
207
- ) -> LanguageModelMessage: ... # Empty as method is deprecated
208
-
209
200
  async def _get_chat_id(self) -> str | None:
210
201
  if not self.config.reuse_chat:
211
202
  return None
@@ -13,7 +13,6 @@ from unique_toolkit.agentic.tools.tool_progress_reporter import (
13
13
  ToolProgressReporter,
14
14
  )
15
15
  from unique_toolkit.app.schemas import ChatEvent, McpServer, McpTool
16
- from unique_toolkit.language_model import LanguageModelMessage
17
16
  from unique_toolkit.language_model.schemas import (
18
17
  LanguageModelFunction,
19
18
  LanguageModelToolDescription,
@@ -99,12 +98,6 @@ class MCPToolWrapper(Tool[MCPToolConfig]):
99
98
  """Return evaluation checks based on tool response"""
100
99
  return []
101
100
 
102
- def get_tool_call_result_for_loop_history(
103
- self,
104
- tool_response: ToolCallResponse,
105
- ) -> LanguageModelMessage:
106
- raise NotImplementedError("function is not supported")
107
-
108
101
  async def run(self, tool_call: LanguageModelFunction) -> ToolCallResponse:
109
102
  """Execute the MCP tool using SDK to call public API"""
110
103
  self.logger.info(f"Running MCP tool: {self.name}")
@@ -50,11 +50,6 @@ class MockInternalSearchTool(Tool[BaseToolConfig]):
50
50
  def tool_format_information_for_system_prompt(self) -> str:
51
51
  return "Use this tool to search for content"
52
52
 
53
- def get_tool_call_result_for_loop_history(self, tool_response):
54
- from unique_toolkit.language_model.schemas import LanguageModelMessage
55
-
56
- return LanguageModelMessage(role="tool", content="Mock search result")
57
-
58
53
  def evaluation_check_list(self):
59
54
  return []
60
55
 
@@ -5,7 +5,6 @@ from typing import Any, Generic, TypeVar, cast
5
5
  from typing_extensions import deprecated
6
6
 
7
7
  from unique_toolkit.agentic.evaluation.schemas import EvaluationMetricName
8
- from unique_toolkit.agentic.tools.agent_chunks_hanlder import AgentChunksHandler
9
8
  from unique_toolkit.agentic.tools.config import ToolBuildConfig, ToolSelectionPolicy
10
9
  from unique_toolkit.agentic.tools.schemas import (
11
10
  BaseToolConfig,
@@ -20,7 +19,6 @@ from unique_toolkit.chat.service import (
20
19
  from unique_toolkit.language_model import LanguageModelToolDescription
21
20
  from unique_toolkit.language_model.schemas import (
22
21
  LanguageModelFunction,
23
- LanguageModelMessage,
24
22
  )
25
23
  from unique_toolkit.language_model.service import LanguageModelService
26
24
 
@@ -100,15 +98,6 @@ class Tool(ABC, Generic[ConfigType]):
100
98
  """
101
99
  return ""
102
100
 
103
- @deprecated("Do not use as is bound to loop agent only")
104
- @abstractmethod
105
- def get_tool_call_result_for_loop_history(
106
- self,
107
- tool_response: ToolCallResponse,
108
- agent_chunks_handler: AgentChunksHandler,
109
- ) -> LanguageModelMessage:
110
- raise NotImplementedError
111
-
112
101
  @deprecated(
113
102
  "Do not use. The tool should not determine how"
114
103
  "it is checked. This should be defined by the user"
@@ -0,0 +1,34 @@
1
+ from urllib.parse import quote
2
+
3
+
4
+ def create_prompt_button_string(
5
+ *,
6
+ button_text: str,
7
+ next_user_message: str,
8
+ ) -> str:
9
+ """
10
+ Create a prompt button string.
11
+
12
+ Args:
13
+ button_text: The text of the button.
14
+ next_user_message: The message to send when the button is clicked.
15
+
16
+ Returns:
17
+ A string that can be used to create a prompt button.
18
+ A prompt button includes the `next_user_message` to the user prompt windown.
19
+ """
20
+ next_user_message = quote(next_user_message)
21
+ return f"[{button_text}](https://prompt={next_user_message})"
22
+
23
+
24
+ def create_latex_formula_string(latex_expression: str) -> str:
25
+ """
26
+ Create a LaTeX string.
27
+
28
+ Args:
29
+ latex_expression: The LaTeX expression to create.
30
+
31
+ Returns:
32
+ A string that can be used to create a LaTeX string.
33
+ """
34
+ return f"\\[{latex_expression}\\]"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: unique_toolkit
3
- Version: 1.19.1
3
+ Version: 1.19.3
4
4
  Summary:
5
5
  License: Proprietary
6
6
  Author: Cedric Klinkert
@@ -118,11 +118,19 @@ All notable changes to this project will be documented in this file.
118
118
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
119
119
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
120
120
 
121
+
122
+
123
+ ## [1.19.3] - 2025-10-29
124
+ - More documentation on advanced rendering
125
+
126
+ ## [1.19.2] - 2025-10-29
127
+ - Removing unused tool specific `get_tool_call_result_for_loop_history` function
128
+ - Removing unused experimental config `full_sources_serialize_dump` in `history_manager`
129
+
121
130
  ## [1.19.1] - 2025-10-29
122
131
  - Make api operations more flexible
123
132
  - Make verification button text adaptable
124
133
 
125
-
126
134
  ## [1.19.0] - 2025-10-28
127
135
  - Enable additional headers on openai and langchain client
128
136
 
@@ -12,7 +12,7 @@ unique_toolkit/_common/default_language_model.py,sha256=XCZu6n270QkxEeTpj5NZJda6
12
12
  unique_toolkit/_common/endpoint_builder.py,sha256=Ge83hyipUbh4fhxzA5XVeg3cj6T4JU4dL8Ue9MWElcw,9100
13
13
  unique_toolkit/_common/endpoint_requestor.py,sha256=pY2SlRaHmHftNpPybmzxRsn4OBZCj_7niCMehL8I5O0,13744
14
14
  unique_toolkit/_common/exception.py,sha256=ho0uBcPeZXU2w15IrSBhO5w7KUgxp1HcKAQrf2uin-w,1243
15
- unique_toolkit/_common/feature_flags/schema.py,sha256=F1NdVJFNU8PKlS7bYzrIPeDu2LxRqHSM9pyw622a1Kk,547
15
+ unique_toolkit/_common/feature_flags/schema.py,sha256=X32VqH4VMK7bhEfSd8Wbddl8FVs7Gh7ucuIEbmqc4Kw,268
16
16
  unique_toolkit/_common/pydantic/rjsf_tags.py,sha256=T3AZIF8wny3fFov66s258nEl1GqfKevFouTtG6k9PqU,31219
17
17
  unique_toolkit/_common/pydantic_helpers.py,sha256=1zzg6PlzSkHqPTdX-KoBaDHmBeeG7S5PprBsyMSCEuU,4806
18
18
  unique_toolkit/_common/string_utilities.py,sha256=pbsjpnz1mwGeugebHzubzmmDtlm18B8e7xJdSvLnor0,2496
@@ -44,9 +44,9 @@ unique_toolkit/agentic/evaluation/schemas.py,sha256=m9JMCUmeqP8KhsJOVEzsz6dRXUe1
44
44
  unique_toolkit/agentic/evaluation/tests/test_context_relevancy_service.py,sha256=4tDxHTApbaTMxN1sNS8WCqj2BweRk6YqZ5_zHP45jto,7977
45
45
  unique_toolkit/agentic/evaluation/tests/test_output_parser.py,sha256=RN_HcBbU6qy_e_PoYyUFcjWnp3ymJ6-gLj6TgEOupAI,3107
46
46
  unique_toolkit/agentic/history_manager/history_construction_with_contents.py,sha256=c8Zy3erSbHGT8AdICRRlSK91T_FN6tNpTznvUzpLbWk,9023
47
- unique_toolkit/agentic/history_manager/history_manager.py,sha256=xWA8w5CWrzueGW05ekIhc_Y_-_380hFfIB4rB5wlito,9470
47
+ unique_toolkit/agentic/history_manager/history_manager.py,sha256=6V4D5-YJFCsl_WthGVGw0Eq4WobXFgkFiX2YUtdjOZw,9275
48
48
  unique_toolkit/agentic/history_manager/loop_token_reducer.py,sha256=4XUX2-yVBnaYthV8p0zj2scVBUdK_3IhxBgoNlrytyQ,18498
49
- unique_toolkit/agentic/history_manager/utils.py,sha256=NDSSz0Jp3oVJU3iKlVScmM1AOe-6hTiVjLr16DUPsV0,5656
49
+ unique_toolkit/agentic/history_manager/utils.py,sha256=VIn_UmcR3jHtpux0qp5lQQzczgAm8XYSeQiPo87jC3A,3143
50
50
  unique_toolkit/agentic/postprocessor/postprocessor_manager.py,sha256=Z6rMQjhD0x6uC4p1cdxbUVv3jO-31hZTyNE1SiGYIu8,5680
51
51
  unique_toolkit/agentic/reference_manager/reference_manager.py,sha256=x51CT0D8HHu2LzgXdHGy0leOYpjnsxVbPZ2nc28G9mA,4005
52
52
  unique_toolkit/agentic/responses_api/__init__.py,sha256=9WTO-ef7fGE9Y1QtZJFm8Q_jkwK8Srtl-HWvpAD2Wxs,668
@@ -77,14 +77,14 @@ unique_toolkit/agentic/tools/a2a/tool/__init__.py,sha256=JIJKZBTLTA39OWhxoUd6uai
77
77
  unique_toolkit/agentic/tools/a2a/tool/_memory.py,sha256=w8bxjokrqHQZgApd55b5rHXF-DpgJwaKTg4CvLBLamc,1034
78
78
  unique_toolkit/agentic/tools/a2a/tool/_schema.py,sha256=wMwyunViTnxaURvenkATEvyfXn5LvLaP0HxbYqdZGls,158
79
79
  unique_toolkit/agentic/tools/a2a/tool/config.py,sha256=NcrS0hzIeYvjv1oMobAAPlZrbTPPWhcPhi0jUHLFBTI,2903
80
- unique_toolkit/agentic/tools/a2a/tool/service.py,sha256=Rutos0nmY4PhvO_ETlHr5mRdQFa2UuzSJWC2rmiAJng,10593
80
+ unique_toolkit/agentic/tools/a2a/tool/service.py,sha256=D1f3icUZ2D2nZKrnAnhi5YJUIaI68v2dXCH0iUIBlPg,10206
81
81
  unique_toolkit/agentic/tools/agent_chunks_hanlder.py,sha256=x32Dp1Z8cVW5i-XzXbaMwX2KHPcNGmqEU-FB4AV9ZGo,1909
82
82
  unique_toolkit/agentic/tools/config.py,sha256=QD83iy2xAJFyoPggYyLWq-MaSGSq00yS9iI31My1NBc,5387
83
83
  unique_toolkit/agentic/tools/factory.py,sha256=A1Aliwx037UAk9ADiDsg0zjCWWnvzV_PxwJNoPTvW6c,1434
84
84
  unique_toolkit/agentic/tools/mcp/__init__.py,sha256=RLF_p-LDRC7GhiB3fdCi4u3bh6V9PY_w26fg61BLyco,122
85
85
  unique_toolkit/agentic/tools/mcp/manager.py,sha256=DPYwwDe6RSZyuPaxn-je49fP_qOOs0ZV46EM6GZcV4c,2748
86
86
  unique_toolkit/agentic/tools/mcp/models.py,sha256=OyCCb7Vwv1ftzC_OCpFkf3TX9Aeb74ZZagG-qK5peIU,722
87
- unique_toolkit/agentic/tools/mcp/tool_wrapper.py,sha256=37nkalHNUfti9rKdCH_rLEObbYdH7kDfkbLulf_sXmQ,9027
87
+ unique_toolkit/agentic/tools/mcp/tool_wrapper.py,sha256=MyR72E-N_vmGmlvAuSQtAQGbHo4AUUVdve-F0hcHgMU,8767
88
88
  unique_toolkit/agentic/tools/openai_builtin/__init__.py,sha256=NdVjkTa3LbW-JHhzPRjinTmgOCtEv090Zr9jGZXmgqs,345
89
89
  unique_toolkit/agentic/tools/openai_builtin/base.py,sha256=2Lw47XworwwkIQBQW5S1T6HS2mWqx13lx50moAMekRk,808
90
90
  unique_toolkit/agentic/tools/openai_builtin/code_interpreter/__init__.py,sha256=w2vONpnC6hKRPoJGwzDuRtNBsQd_o-gMUqArgIl_5KY,305
@@ -92,9 +92,9 @@ unique_toolkit/agentic/tools/openai_builtin/code_interpreter/config.py,sha256=r-
92
92
  unique_toolkit/agentic/tools/openai_builtin/code_interpreter/service.py,sha256=RKVExS1l3rJDVcu3mxKYA7SNV_Hphx2przhhiC-5PSo,7467
93
93
  unique_toolkit/agentic/tools/openai_builtin/manager.py,sha256=kU4wGit9AnDbkijB7LJEHcGXG8UeTBhiZh4a7lxTGA8,2246
94
94
  unique_toolkit/agentic/tools/schemas.py,sha256=0ZR8xCdGj1sEdPE0lfTIG2uSR5zqWoprUa3Seqez4C8,4837
95
- unique_toolkit/agentic/tools/test/test_mcp_manager.py,sha256=9q9TpzrQlxzQOwcyEGc6J7L4K55cclgvJme5jFQmc4M,19044
95
+ unique_toolkit/agentic/tools/test/test_mcp_manager.py,sha256=8j5fNQf3qELOcQ0m5fd8OkIFgunL5ILgdWzYD_Ccg1I,18816
96
96
  unique_toolkit/agentic/tools/test/test_tool_progress_reporter.py,sha256=dod5QPqgGUInVAGXAbsAKNTEypIi6pUEWhDbJr9YfUU,6307
97
- unique_toolkit/agentic/tools/tool.py,sha256=m56VLxiHuKU2_J5foZp00xhm5lTxWEW7zRLGbIE9ssU,6744
97
+ unique_toolkit/agentic/tools/tool.py,sha256=mFuxc3h4sghClDO8OVL2-6kifiHQ-U7JMYGUyXqTYLE,6338
98
98
  unique_toolkit/agentic/tools/tool_manager.py,sha256=DtxJobe_7QKFe6CjnMhCP-mnKO6MjnZeDXsO3jBoC9w,16283
99
99
  unique_toolkit/agentic/tools/tool_progress_reporter.py,sha256=ixud9VoHey1vlU1t86cW0-WTvyTwMxNSWBon8I11SUk,7955
100
100
  unique_toolkit/agentic/tools/utils/__init__.py,sha256=s75sjY5nrJchjLGs3MwSIqhDW08fFXIaX7eRQjFIA4s,346
@@ -117,6 +117,7 @@ unique_toolkit/chat/__init__.py,sha256=uP7P6YPeOjEOvpX3bhcU6ND_m0QLr4wMklcrnAKK0
117
117
  unique_toolkit/chat/constants.py,sha256=05kq6zjqUVB2d6_P7s-90nbljpB3ryxwCI-CAz0r2O4,83
118
118
  unique_toolkit/chat/deprecated/service.py,sha256=CYwzXi7OB0RjHd73CO2jq8SlpdBmDYLatzPFkb5sA0k,6529
119
119
  unique_toolkit/chat/functions.py,sha256=1KQmqS5g3OgX8MJJmeL-_Cv4M6uJ3e0BCqkLDHl26dA,45580
120
+ unique_toolkit/chat/rendering.py,sha256=c8YiV9oADRrJQ5A_QBJ4_UFc0NZ-2vVaa7tupoMusso,880
120
121
  unique_toolkit/chat/responses_api.py,sha256=MCI1MR_4wlo9xY1ifH2daNz4JvjX18uPdryQlemaeLw,14488
121
122
  unique_toolkit/chat/schemas.py,sha256=u3WPdMkOlmwPGHUueQC-nk8k-QkM7ZSUcU0f-32g6Uc,6718
122
123
  unique_toolkit/chat/service.py,sha256=6D00OL4QrGafbOhTaC5zNXaNgg7gS5W_2ePVa4LhqpE,4439
@@ -165,7 +166,7 @@ unique_toolkit/short_term_memory/service.py,sha256=5PeVBu1ZCAfyDb2HLVvlmqSbyzBBu
165
166
  unique_toolkit/smart_rules/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
166
167
  unique_toolkit/smart_rules/compile.py,sha256=Ozhh70qCn2yOzRWr9d8WmJeTo7AQurwd3tStgBMPFLA,1246
167
168
  unique_toolkit/test_utilities/events.py,sha256=_mwV2bs5iLjxS1ynDCjaIq-gjjKhXYCK-iy3dRfvO3g,6410
168
- unique_toolkit-1.19.1.dist-info/LICENSE,sha256=GlN8wHNdh53xwOPg44URnwag6TEolCjoq3YD_KrWgss,193
169
- unique_toolkit-1.19.1.dist-info/METADATA,sha256=Dh7RpQJ3P5uPe9kN7mfhkBY5I0lgSC7aK4uLJVJBsEI,38876
170
- unique_toolkit-1.19.1.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
171
- unique_toolkit-1.19.1.dist-info/RECORD,,
169
+ unique_toolkit-1.19.3.dist-info/LICENSE,sha256=GlN8wHNdh53xwOPg44URnwag6TEolCjoq3YD_KrWgss,193
170
+ unique_toolkit-1.19.3.dist-info/METADATA,sha256=kcF3i4FpSU1Dnp8OTmkjqWtIw6uyIwMZukexyeyvjcU,39142
171
+ unique_toolkit-1.19.3.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
172
+ unique_toolkit-1.19.3.dist-info/RECORD,,