unique_toolkit 1.43.10__py3-none-any.whl → 1.44.0__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.
@@ -3,7 +3,10 @@ from unique_toolkit.agentic.loop_runner._iteration_handler_utils import (
3
3
  handle_last_iteration,
4
4
  handle_normal_iteration,
5
5
  )
6
- from unique_toolkit.agentic.loop_runner.base import LoopIterationRunner
6
+ from unique_toolkit.agentic.loop_runner.base import (
7
+ LoopIterationRunner,
8
+ ResponsesLoopIterationRunner,
9
+ )
7
10
  from unique_toolkit.agentic.loop_runner.middleware import (
8
11
  PlanningConfig,
9
12
  PlanningMiddleware,
@@ -16,6 +19,7 @@ from unique_toolkit.agentic.loop_runner.runners import (
16
19
  BasicLoopIterationRunner,
17
20
  BasicLoopIterationRunnerConfig,
18
21
  QwenLoopIterationRunner,
22
+ ResponsesBasicLoopIterationRunner,
19
23
  is_qwen_model,
20
24
  )
21
25
 
@@ -34,4 +38,6 @@ __all__ = [
34
38
  "QWEN_FORCED_TOOL_CALL_INSTRUCTION",
35
39
  "QWEN_LAST_ITERATION_INSTRUCTION",
36
40
  "QWEN_MAX_LOOP_ITERATIONS",
41
+ "ResponsesLoopIterationRunner",
42
+ "ResponsesBasicLoopIterationRunner",
37
43
  ]
@@ -0,0 +1,63 @@
1
+ import logging
2
+ from typing import Unpack
3
+
4
+ from unique_toolkit.agentic.loop_runner._responses_stream_handler_utils import (
5
+ responses_stream_response,
6
+ )
7
+ from unique_toolkit.agentic.loop_runner.base import (
8
+ _ResponsesLoopIterationRunnerKwargs,
9
+ )
10
+ from unique_toolkit.language_model.schemas import ResponsesLanguageModelStreamResponse
11
+
12
+ _LOGGER = logging.getLogger(__name__)
13
+
14
+
15
+ async def handle_responses_last_iteration(
16
+ **kwargs: Unpack[_ResponsesLoopIterationRunnerKwargs],
17
+ ) -> ResponsesLanguageModelStreamResponse:
18
+ _LOGGER.info("Reached last iteration, removing tools and producing final response")
19
+
20
+ return await responses_stream_response(
21
+ loop_runner_kwargs=kwargs,
22
+ tools=None,
23
+ )
24
+
25
+
26
+ async def handle_responses_normal_iteration(
27
+ **kwargs: Unpack[_ResponsesLoopIterationRunnerKwargs],
28
+ ) -> ResponsesLanguageModelStreamResponse:
29
+ _LOGGER.info("Running loop iteration %d", kwargs["iteration_index"])
30
+
31
+ return await responses_stream_response(loop_runner_kwargs=kwargs)
32
+
33
+
34
+ async def handle_responses_forced_tools_iteration(
35
+ **kwargs: Unpack[_ResponsesLoopIterationRunnerKwargs],
36
+ ) -> ResponsesLanguageModelStreamResponse:
37
+ assert "tool_choices" in kwargs
38
+
39
+ tool_choices = kwargs["tool_choices"]
40
+ assert len(tool_choices) > 0
41
+
42
+ _LOGGER.info("Forcing tools calls: %s", tool_choices)
43
+
44
+ responses: list[ResponsesLanguageModelStreamResponse] = []
45
+
46
+ for opt in tool_choices:
47
+ responses.append(
48
+ await responses_stream_response(loop_runner_kwargs=kwargs, tool_choice=opt)
49
+ )
50
+
51
+ # Merge responses and refs:
52
+ tool_calls = []
53
+ references = []
54
+ for r in responses:
55
+ if r.tool_calls:
56
+ tool_calls.extend(r.tool_calls)
57
+ references.extend(r.message.references)
58
+
59
+ response = responses[0]
60
+ response.tool_calls = tool_calls if len(tool_calls) > 0 else None
61
+ response.message.references = references
62
+
63
+ return response
@@ -0,0 +1,90 @@
1
+ from typing import Any, Required, Sequence
2
+
3
+ from openai.types.responses import (
4
+ ResponseIncludable,
5
+ ResponseInputItemParam,
6
+ ResponseOutputItem,
7
+ ResponseTextConfigParam,
8
+ ToolParam,
9
+ response_create_params,
10
+ )
11
+ from openai.types.shared_params import Metadata, Reasoning
12
+ from typing_extensions import TypedDict
13
+
14
+ from unique_toolkit import LanguageModelToolDescription
15
+ from unique_toolkit.agentic.loop_runner.base import _ResponsesLoopIterationRunnerKwargs
16
+ from unique_toolkit.chat.service import LanguageModelMessages
17
+ from unique_toolkit.content import ContentChunk
18
+ from unique_toolkit.language_model.schemas import (
19
+ LanguageModelMessageOptions,
20
+ ResponsesLanguageModelStreamResponse,
21
+ )
22
+
23
+
24
+ class _ResponsesStreamingHandlerKwargs(TypedDict, total=False):
25
+ messages: Required[
26
+ str
27
+ | LanguageModelMessages
28
+ | Sequence[
29
+ ResponseInputItemParam | LanguageModelMessageOptions | ResponseOutputItem
30
+ ]
31
+ ]
32
+ model_name: Required[str]
33
+ tools: Sequence[LanguageModelToolDescription | ToolParam]
34
+ content_chunks: list[ContentChunk]
35
+ start_text: str
36
+ debug_info: dict[str, Any]
37
+ temperature: float
38
+ include: list[ResponseIncludable]
39
+ instructions: str
40
+ max_output_tokens: int
41
+ metadata: Metadata
42
+ parallel_tool_calls: bool
43
+ text: ResponseTextConfigParam
44
+ tool_choice: response_create_params.ToolChoice
45
+ top_p: float
46
+ reasoning: Reasoning
47
+ other_options: dict[str, Any]
48
+
49
+
50
+ def _extract_responses_streaming_kwargs(
51
+ kwargs: _ResponsesLoopIterationRunnerKwargs,
52
+ ) -> _ResponsesStreamingHandlerKwargs:
53
+ res = _ResponsesStreamingHandlerKwargs(
54
+ messages=kwargs["messages"],
55
+ model_name=kwargs["model"].name,
56
+ )
57
+
58
+ for k in [
59
+ "tools",
60
+ "content_chunks",
61
+ "start_text",
62
+ "debug_info",
63
+ "temperature",
64
+ "include",
65
+ "instructions",
66
+ "max_output_tokens",
67
+ "metadata",
68
+ "parallel_tool_calls",
69
+ "text",
70
+ "top_p",
71
+ "reasoning",
72
+ "other_options",
73
+ ]:
74
+ if k in kwargs:
75
+ res[k] = kwargs[k]
76
+
77
+ return res
78
+
79
+
80
+ async def responses_stream_response(
81
+ loop_runner_kwargs: _ResponsesLoopIterationRunnerKwargs,
82
+ **kwargs,
83
+ ) -> ResponsesLanguageModelStreamResponse:
84
+ streaming_handler = loop_runner_kwargs["streaming_handler"]
85
+ streaming_handler_kwargs = _extract_responses_streaming_kwargs(loop_runner_kwargs)
86
+ streaming_handler_kwargs.update(**kwargs)
87
+
88
+ return await streaming_handler.complete_with_references_async(
89
+ **streaming_handler_kwargs
90
+ )
@@ -1,6 +1,15 @@
1
- from typing import Any, Protocol, Required, Unpack
1
+ from typing import Any, Protocol, Required, Sequence, Unpack
2
2
 
3
3
  from openai.types.chat import ChatCompletionNamedToolChoiceParam
4
+ from openai.types.responses import (
5
+ ResponseIncludable,
6
+ ResponseInputItemParam,
7
+ ResponseOutputItem,
8
+ ResponseTextConfigParam,
9
+ ToolParam,
10
+ response_create_params,
11
+ )
12
+ from openai.types.shared_params import Metadata, Reasoning
4
13
  from typing_extensions import TypedDict
5
14
 
6
15
  from unique_toolkit import LanguageModelToolDescription
@@ -8,7 +17,12 @@ from unique_toolkit.chat.functions import LanguageModelStreamResponse
8
17
  from unique_toolkit.chat.service import LanguageModelMessages
9
18
  from unique_toolkit.content import ContentChunk
10
19
  from unique_toolkit.language_model.infos import LanguageModelInfo
20
+ from unique_toolkit.language_model.schemas import (
21
+ LanguageModelMessageOptions,
22
+ ResponsesLanguageModelStreamResponse,
23
+ )
11
24
  from unique_toolkit.protocols.support import (
25
+ ResponsesSupportCompleteWithReferences,
12
26
  SupportCompleteWithReferences,
13
27
  )
14
28
 
@@ -36,3 +50,38 @@ class LoopIterationRunner(Protocol):
36
50
  self,
37
51
  **kwargs: Unpack[_LoopIterationRunnerKwargs],
38
52
  ) -> LanguageModelStreamResponse: ...
53
+
54
+
55
+ class _ResponsesLoopIterationRunnerKwargs(TypedDict, total=False):
56
+ iteration_index: Required[int]
57
+ streaming_handler: Required[ResponsesSupportCompleteWithReferences]
58
+ messages: Required[
59
+ str
60
+ | LanguageModelMessages
61
+ | Sequence[
62
+ ResponseInputItemParam | LanguageModelMessageOptions | ResponseOutputItem
63
+ ]
64
+ ]
65
+ model: Required[LanguageModelInfo]
66
+ tools: list[LanguageModelToolDescription | ToolParam]
67
+ content_chunks: list[ContentChunk]
68
+ start_text: str
69
+ debug_info: dict[str, Any]
70
+ temperature: float
71
+ include: list[ResponseIncludable]
72
+ instructions: str
73
+ max_output_tokens: int
74
+ metadata: Metadata
75
+ parallel_tool_calls: bool
76
+ text: ResponseTextConfigParam
77
+ tool_choices: list[response_create_params.ToolChoice]
78
+ top_p: float
79
+ reasoning: Reasoning
80
+ other_options: dict[str, Any]
81
+
82
+
83
+ class ResponsesLoopIterationRunner(Protocol):
84
+ async def __call__(
85
+ self,
86
+ **kwargs: Unpack[_ResponsesLoopIterationRunnerKwargs],
87
+ ) -> ResponsesLanguageModelStreamResponse: ...
@@ -1,6 +1,7 @@
1
1
  from unique_toolkit.agentic.loop_runner.runners.basic import (
2
2
  BasicLoopIterationRunner,
3
3
  BasicLoopIterationRunnerConfig,
4
+ ResponsesBasicLoopIterationRunner,
4
5
  )
5
6
  from unique_toolkit.agentic.loop_runner.runners.qwen import (
6
7
  QWEN_FORCED_TOOL_CALL_INSTRUCTION,
@@ -13,6 +14,7 @@ from unique_toolkit.agentic.loop_runner.runners.qwen import (
13
14
  __all__ = [
14
15
  "BasicLoopIterationRunnerConfig",
15
16
  "BasicLoopIterationRunner",
17
+ "ResponsesBasicLoopIterationRunner",
16
18
  "QwenLoopIterationRunner",
17
19
  "QWEN_FORCED_TOOL_CALL_INSTRUCTION",
18
20
  "QWEN_LAST_ITERATION_INSTRUCTION",
@@ -9,14 +9,19 @@ from unique_toolkit.agentic.loop_runner._iteration_handler_utils import (
9
9
  handle_last_iteration,
10
10
  handle_normal_iteration,
11
11
  )
12
+ from unique_toolkit.agentic.loop_runner._responses_iteration_handler_utils import (
13
+ handle_responses_forced_tools_iteration,
14
+ handle_responses_last_iteration,
15
+ handle_responses_normal_iteration,
16
+ )
12
17
  from unique_toolkit.agentic.loop_runner.base import (
13
18
  LoopIterationRunner,
19
+ ResponsesLoopIterationRunner,
14
20
  _LoopIterationRunnerKwargs,
21
+ _ResponsesLoopIterationRunnerKwargs,
15
22
  )
16
23
  from unique_toolkit.chat.functions import LanguageModelStreamResponse
17
- from unique_toolkit.protocols.support import (
18
- ResponsesLanguageModelStreamResponse,
19
- )
24
+ from unique_toolkit.language_model.schemas import ResponsesLanguageModelStreamResponse
20
25
 
21
26
  _LOGGER = logging.getLogger(__name__)
22
27
 
@@ -34,7 +39,7 @@ class BasicLoopIterationRunner(LoopIterationRunner):
34
39
  async def __call__(
35
40
  self,
36
41
  **kwargs: Unpack[_LoopIterationRunnerKwargs],
37
- ) -> LanguageModelStreamResponse | ResponsesLanguageModelStreamResponse:
42
+ ) -> LanguageModelStreamResponse:
38
43
  tool_choices = kwargs.get("tool_choices", [])
39
44
  iteration_index = kwargs["iteration_index"]
40
45
 
@@ -44,3 +49,23 @@ class BasicLoopIterationRunner(LoopIterationRunner):
44
49
  return await handle_last_iteration(**kwargs)
45
50
  else:
46
51
  return await handle_normal_iteration(**kwargs)
52
+
53
+
54
+ class ResponsesBasicLoopIterationRunner(ResponsesLoopIterationRunner):
55
+ def __init__(self, config: BasicLoopIterationRunnerConfig) -> None:
56
+ self._config = config
57
+
58
+ @override
59
+ async def __call__(
60
+ self,
61
+ **kwargs: Unpack[_ResponsesLoopIterationRunnerKwargs],
62
+ ) -> ResponsesLanguageModelStreamResponse:
63
+ tool_choices = kwargs.get("tool_choices", [])
64
+ iteration_index = kwargs["iteration_index"]
65
+
66
+ if len(tool_choices) > 0 and iteration_index == 0:
67
+ return await handle_responses_forced_tools_iteration(**kwargs)
68
+ elif iteration_index == self._config.max_loop_iterations - 1:
69
+ return await handle_responses_last_iteration(**kwargs)
70
+ else:
71
+ return await handle_responses_normal_iteration(**kwargs)
@@ -701,6 +701,7 @@ class LanguageModelInfo(BaseModel):
701
701
  ModelCapabilities.CHAT_COMPLETIONS_API,
702
702
  ModelCapabilities.FUNCTION_CALLING,
703
703
  ModelCapabilities.PARALLEL_FUNCTION_CALLING,
704
+ ModelCapabilities.RESPONSES_API,
704
705
  ModelCapabilities.STREAMING,
705
706
  ModelCapabilities.VISION,
706
707
  ],
@@ -718,10 +719,11 @@ class LanguageModelInfo(BaseModel):
718
719
  encoder_name=EncoderName.O200K_BASE,
719
720
  capabilities=[
720
721
  ModelCapabilities.CHAT_COMPLETIONS_API,
721
- ModelCapabilities.STRUCTURED_OUTPUT,
722
722
  ModelCapabilities.FUNCTION_CALLING,
723
723
  ModelCapabilities.PARALLEL_FUNCTION_CALLING,
724
+ ModelCapabilities.RESPONSES_API,
724
725
  ModelCapabilities.STREAMING,
726
+ ModelCapabilities.STRUCTURED_OUTPUT,
725
727
  ModelCapabilities.VISION,
726
728
  ],
727
729
  provider=LanguageModelProvider.AZURE,
@@ -738,10 +740,11 @@ class LanguageModelInfo(BaseModel):
738
740
  encoder_name=EncoderName.O200K_BASE,
739
741
  capabilities=[
740
742
  ModelCapabilities.CHAT_COMPLETIONS_API,
741
- ModelCapabilities.STRUCTURED_OUTPUT,
742
743
  ModelCapabilities.FUNCTION_CALLING,
743
744
  ModelCapabilities.PARALLEL_FUNCTION_CALLING,
745
+ ModelCapabilities.RESPONSES_API,
744
746
  ModelCapabilities.STREAMING,
747
+ ModelCapabilities.STRUCTURED_OUTPUT,
745
748
  ModelCapabilities.VISION,
746
749
  ],
747
750
  provider=LanguageModelProvider.AZURE,
@@ -759,6 +762,7 @@ class LanguageModelInfo(BaseModel):
759
762
  ModelCapabilities.CHAT_COMPLETIONS_API,
760
763
  ModelCapabilities.FUNCTION_CALLING,
761
764
  ModelCapabilities.PARALLEL_FUNCTION_CALLING,
765
+ ModelCapabilities.RESPONSES_API,
762
766
  ModelCapabilities.STREAMING,
763
767
  ModelCapabilities.VISION,
764
768
  ],
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: unique_toolkit
3
- Version: 1.43.10
3
+ Version: 1.44.0
4
4
  Summary:
5
5
  License: Proprietary
6
6
  Author: Cedric Klinkert
@@ -125,6 +125,12 @@ All notable changes to this project will be documented in this file.
125
125
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
126
126
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
127
127
 
128
+ ## [1.44.0] - 2026-01-23
129
+ - Add LoopIterationRunner abstraction for the responses api
130
+
131
+ ## [1.43.11] - 2026-01-23
132
+ - Add `RESPONSES_API` Capablity to some models that were missing it
133
+
128
134
  ## [1.43.10] - 2026-01-21
129
135
  - Lowering the max iterations of the main agents and hard blocking Qwen3 from using too many agent rounds
130
136
 
@@ -90,16 +90,18 @@ unique_toolkit/agentic/history_manager/history_construction_with_contents.py,sha
90
90
  unique_toolkit/agentic/history_manager/history_manager.py,sha256=7V7_173XkAjc8otBACF0G3dbqRs34FSlURbBPrE95Wk,9537
91
91
  unique_toolkit/agentic/history_manager/loop_token_reducer.py,sha256=3c-uonDovtanEJUpAO4zlA4-n9MS_Ws_V0Yb6G7hPM0,20172
92
92
  unique_toolkit/agentic/history_manager/utils.py,sha256=VIn_UmcR3jHtpux0qp5lQQzczgAm8XYSeQiPo87jC3A,3143
93
- unique_toolkit/agentic/loop_runner/__init__.py,sha256=26SAJn737LLmc3RoT6PPoPIeI80nlNWobHK6-Vz8HeI,1099
93
+ unique_toolkit/agentic/loop_runner/__init__.py,sha256=FUjG2vvcAPHfKyRn-EbNYw7n35z33maZWGP8C5_wevg,1258
94
94
  unique_toolkit/agentic/loop_runner/_iteration_handler_utils.py,sha256=czwTbMMmikppRjAA2wpx-UZGub8KrpSoWfojklr-5sE,3261
95
+ unique_toolkit/agentic/loop_runner/_responses_iteration_handler_utils.py,sha256=F_j81IPkGWBWMsti3fppSWlG1OAZWP5DlPsXsCefVzA,1936
96
+ unique_toolkit/agentic/loop_runner/_responses_stream_handler_utils.py,sha256=f9XM5EkAGl0XgKoAd6QnVo0OihL3IG5TawkBr4-IpeI,2604
95
97
  unique_toolkit/agentic/loop_runner/_stream_handler_utils.py,sha256=FTGc5y8wkDnwnRVSYEdandgKz-FiySOsrTFFMadwP6E,1706
96
- unique_toolkit/agentic/loop_runner/base.py,sha256=3g4PalzV00o8kcRwHds2c2rtxW4idD7_7vS2Z7GkMvQ,1370
98
+ unique_toolkit/agentic/loop_runner/base.py,sha256=bTTJwPpBHBHNCOu1Me62Iwtw2Kk4HBJzIZ5QnVVh7Cs,2883
97
99
  unique_toolkit/agentic/loop_runner/middleware/__init__.py,sha256=5yhFZ14_C1qAt-Mb3u3nZ1h6gxuSZ5Ts90-rbk2jjUM,232
98
100
  unique_toolkit/agentic/loop_runner/middleware/planning/__init__.py,sha256=Y9MlihNA8suNREixW98RF45bj0EMtD_tQuDrO2MEML4,304
99
101
  unique_toolkit/agentic/loop_runner/middleware/planning/planning.py,sha256=s6SAP3BCCExgwnyRj_bZTaWgTOiNVju5qcJA0WFUUoE,3216
100
102
  unique_toolkit/agentic/loop_runner/middleware/planning/schema.py,sha256=76C36CWCLfDAYYqtaQlhXsmkWM1fCqf8j-l5afQREKA,2869
101
- unique_toolkit/agentic/loop_runner/runners/__init__.py,sha256=JLBzWjOvTScIVHafeoqG1ZS3syLrYPBDzIfBuJFOw8s,598
102
- unique_toolkit/agentic/loop_runner/runners/basic.py,sha256=PKg7AXp5_2OJpJX8b7_5u0jBKffX5mg8X6DFk98sSwA,1535
103
+ unique_toolkit/agentic/loop_runner/runners/__init__.py,sha256=gQQIBBownqG9C6XNMUhowfKS4FNpEB3WhLThb4YcJSY,678
104
+ unique_toolkit/agentic/loop_runner/runners/basic.py,sha256=O-rIbO-sflvd3GwUq8sIKFEWivtw-wmV-iC82ZeMSiI,2573
103
105
  unique_toolkit/agentic/loop_runner/runners/qwen/__init__.py,sha256=RRT2Q_eeEjtAMsPJC7sYHSlY8clGYXRtQPQhA3HkHF0,481
104
106
  unique_toolkit/agentic/loop_runner/runners/qwen/helpers.py,sha256=JBnxeYKu8HiUq3VHjnb8XdHCe1c3cJ3OwagckF4UvnU,1763
105
107
  unique_toolkit/agentic/loop_runner/runners/qwen/qwen_runner.py,sha256=Qz_kwUUjLDUPBGM0hRVZSwVLYJ1fX5V646oU8AObIUw,4954
@@ -224,7 +226,7 @@ unique_toolkit/language_model/builder.py,sha256=4OKfwJfj3TrgO1ezc_ewIue6W7BCQ2ZY
224
226
  unique_toolkit/language_model/constants.py,sha256=B-topqW0r83dkC_25DeQfnPk3n53qzIHUCBS7YJ0-1U,119
225
227
  unique_toolkit/language_model/default_language_model.py,sha256=-_DBsJhLCsFdaU4ynAkyW0jYIl2lhrPybZm1K-GgVJs,125
226
228
  unique_toolkit/language_model/functions.py,sha256=PTBm2BBkuqISVHoyUqMIGHGXT-RMSAfz0F_Ylo2esQ8,18246
227
- unique_toolkit/language_model/infos.py,sha256=73guq14ggNplXJ5mx-s71rnyA66pNYnXaiVYSKSGMtw,89733
229
+ unique_toolkit/language_model/infos.py,sha256=x9VBgdyqHuZCe0qxCiJTBQx7xynvgWMTAFfBiqS-K4c,89961
228
230
  unique_toolkit/language_model/prompt.py,sha256=JSawaLjQg3VR-E2fK8engFyJnNdk21zaO8pPIodzN4Q,3991
229
231
  unique_toolkit/language_model/reference.py,sha256=nkX2VFz-IrUz8yqyc3G5jUMNwrNpxITBrMEKkbqqYoI,8583
230
232
  unique_toolkit/language_model/schemas.py,sha256=WCHB_9GGkJwB3OCSwUJznz6FPo3gEL2MXUOEtYKxAFg,23996
@@ -242,7 +244,7 @@ unique_toolkit/short_term_memory/service.py,sha256=5PeVBu1ZCAfyDb2HLVvlmqSbyzBBu
242
244
  unique_toolkit/smart_rules/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
243
245
  unique_toolkit/smart_rules/compile.py,sha256=Ozhh70qCn2yOzRWr9d8WmJeTo7AQurwd3tStgBMPFLA,1246
244
246
  unique_toolkit/test_utilities/events.py,sha256=_mwV2bs5iLjxS1ynDCjaIq-gjjKhXYCK-iy3dRfvO3g,6410
245
- unique_toolkit-1.43.10.dist-info/LICENSE,sha256=GlN8wHNdh53xwOPg44URnwag6TEolCjoq3YD_KrWgss,193
246
- unique_toolkit-1.43.10.dist-info/METADATA,sha256=5ce6HRrSJHrufcs3V-HR5-6AKH10CHiLZM6D9WtSj-0,48493
247
- unique_toolkit-1.43.10.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
248
- unique_toolkit-1.43.10.dist-info/RECORD,,
247
+ unique_toolkit-1.44.0.dist-info/LICENSE,sha256=GlN8wHNdh53xwOPg44URnwag6TEolCjoq3YD_KrWgss,193
248
+ unique_toolkit-1.44.0.dist-info/METADATA,sha256=Fk433fZFvwde68I03RGFFqGWieqXJd_MTQ0dOKfowx0,48674
249
+ unique_toolkit-1.44.0.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
250
+ unique_toolkit-1.44.0.dist-info/RECORD,,