unique_toolkit 1.32.0__py3-none-any.whl → 1.33.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.
@@ -5,8 +5,14 @@ from jinja2 import Template
5
5
  from unique_toolkit._common.utils.jinja.schema import Jinja2PromptParams
6
6
 
7
7
 
8
- def render_template(template: str, params: Jinja2PromptParams | dict[str, Any]) -> str:
8
+ def render_template(
9
+ template: str, params: Jinja2PromptParams | dict[str, Any] | None = None, **kwargs
10
+ ) -> str:
11
+ params = params or {}
12
+
9
13
  if isinstance(params, Jinja2PromptParams):
10
14
  params = params.model_dump(exclude_none=True, mode="json")
11
15
 
16
+ params.update(kwargs)
17
+
12
18
  return Template(template, lstrip_blocks=True).render(**params)
@@ -1,10 +1,74 @@
1
- from typing import Literal
1
+ import re
2
+ from enum import StrEnum
3
+ from typing import Annotated, Generic, Literal, TypeVar
2
4
 
3
5
  from pydantic import Field
6
+ from pydantic.main import BaseModel
4
7
 
5
8
  from unique_toolkit._common.pydantic_helpers import get_configuration_dict
6
9
  from unique_toolkit.agentic.tools.schemas import BaseToolConfig
7
10
 
11
+
12
+ class SubAgentSystemReminderType(StrEnum):
13
+ FIXED = "fixed"
14
+ REGEXP = "regexp"
15
+ REFERENCE = "reference"
16
+
17
+
18
+ T = TypeVar("T", bound=SubAgentSystemReminderType)
19
+
20
+
21
+ class SystemReminderConfig(BaseModel, Generic[T]):
22
+ model_config = get_configuration_dict()
23
+
24
+ type: T
25
+
26
+
27
+ _SYSTEM_REMINDER_FIELD_DESCRIPTION = """
28
+ The reminder to add to the tool response. The reminder can be a Jinja template and can contain the following placeholders:
29
+ - {{ display_name }}: The display name of the sub agent.
30
+ - {{ tool_name }}: The tool name.
31
+ """.strip()
32
+
33
+
34
+ class ReferenceSystemReminderConfig(SystemReminderConfig):
35
+ type: Literal[SubAgentSystemReminderType.REFERENCE] = (
36
+ SubAgentSystemReminderType.REFERENCE
37
+ )
38
+ reminder: str = Field(
39
+ default="Rememeber to properly reference EACH fact from sub agent {{ display_name }}'s response with the correct format INLINE.",
40
+ description=_SYSTEM_REMINDER_FIELD_DESCRIPTION,
41
+ )
42
+
43
+
44
+ class FixedSystemReminderConfig(SystemReminderConfig):
45
+ type: Literal[SubAgentSystemReminderType.FIXED] = SubAgentSystemReminderType.FIXED
46
+ reminder: str = Field(
47
+ description=_SYSTEM_REMINDER_FIELD_DESCRIPTION,
48
+ )
49
+
50
+
51
+ _REGEXP_DETECTED_REMINDER_FIELD_DESCRIPTION = """
52
+ The reminder to add to the tool response. The reminder can be a Jinja template and can contain the following placeholders:
53
+ - {{ display_name }}: The display name of the sub agent.
54
+ - {{ tool_name }}: The tool name.
55
+ - {{ text_matches }}: Will be replaced with the portions of the text that triggered the reminder.
56
+ """.strip()
57
+
58
+
59
+ class RegExpDetectedSystemReminderConfig(SystemReminderConfig):
60
+ """A system reminder that is only added if the sub agent response matches a regular expression."""
61
+
62
+ type: Literal[SubAgentSystemReminderType.REGEXP] = SubAgentSystemReminderType.REGEXP
63
+
64
+ regexp: re.Pattern[str] = Field(
65
+ description="The regular expression to use to detect whether the system reminder should be added.",
66
+ )
67
+ reminder: str = Field(
68
+ description=_REGEXP_DETECTED_REMINDER_FIELD_DESCRIPTION,
69
+ )
70
+
71
+
8
72
  DEFAULT_PARAM_DESCRIPTION_SUB_AGENT_USER_MESSAGE = """
9
73
  This is the message that will be sent to the sub-agent.
10
74
  """.strip()
@@ -80,3 +144,15 @@ class SubAgentToolConfig(BaseToolConfig):
80
144
  default=False,
81
145
  description="If set, the sub-agent response will be interpreted as a list of content chunks.",
82
146
  )
147
+
148
+ system_reminders_config: list[
149
+ Annotated[
150
+ FixedSystemReminderConfig
151
+ | RegExpDetectedSystemReminderConfig
152
+ | ReferenceSystemReminderConfig,
153
+ Field(discriminator="type"),
154
+ ]
155
+ ] = Field(
156
+ default=[],
157
+ description="Configuration for the system reminders to add to the tool response.",
158
+ )
@@ -4,7 +4,7 @@ import json
4
4
  import logging
5
5
  import re
6
6
  from datetime import datetime
7
- from typing import override
7
+ from typing import cast, override
8
8
 
9
9
  import unique_sdk
10
10
  from pydantic import Field, TypeAdapter, create_model
@@ -15,6 +15,7 @@ from unique_toolkit._common.referencing import (
15
15
  remove_all_refs,
16
16
  replace_ref_number,
17
17
  )
18
+ from unique_toolkit._common.utils.jinja.render import render_template
18
19
  from unique_toolkit.agentic.evaluation.schemas import EvaluationMetricName
19
20
  from unique_toolkit.agentic.tools.a2a.response_watcher import SubAgentResponseWatcher
20
21
  from unique_toolkit.agentic.tools.a2a.tool._memory import (
@@ -25,6 +26,8 @@ from unique_toolkit.agentic.tools.a2a.tool._schema import (
25
26
  SubAgentToolInput,
26
27
  )
27
28
  from unique_toolkit.agentic.tools.a2a.tool.config import (
29
+ RegExpDetectedSystemReminderConfig,
30
+ SubAgentSystemReminderType,
28
31
  SubAgentToolConfig,
29
32
  )
30
33
  from unique_toolkit.agentic.tools.factory import ToolFactory
@@ -215,12 +218,63 @@ class SubAgentTool(Tool[SubAgentToolConfig]):
215
218
  )
216
219
 
217
220
  return ToolCallResponse(
218
- id=tool_call.id, # type: ignore
221
+ id=tool_call.id,
219
222
  name=tool_call.name,
220
- content=content,
223
+ content=_format_response(
224
+ tool_name=self.name,
225
+ text=content,
226
+ system_reminders=self._get_system_reminders(response),
227
+ ),
221
228
  content_chunks=content_chunks,
222
229
  )
223
230
 
231
+ def _get_system_reminders(self, message: unique_sdk.Space.Message) -> list[str]:
232
+ reminders = []
233
+ for reminder_config in self.config.system_reminders_config:
234
+ if reminder_config.type == SubAgentSystemReminderType.FIXED:
235
+ reminders.append(
236
+ render_template(
237
+ reminder_config.reminder,
238
+ display_name=self.display_name(),
239
+ tool_name=self.name,
240
+ )
241
+ )
242
+ elif (
243
+ reminder_config.type == SubAgentSystemReminderType.REFERENCE
244
+ and self.config.use_sub_agent_references
245
+ and message["references"] is not None
246
+ and len(message["references"]) > 0
247
+ ):
248
+ reminders.append(
249
+ render_template(
250
+ reminder_config.reminder,
251
+ display_name=self.display_name(),
252
+ tool_name=self.name,
253
+ )
254
+ )
255
+ elif (
256
+ reminder_config.type == SubAgentSystemReminderType.REGEXP
257
+ and message["text"] is not None
258
+ ):
259
+ reminder_config = cast(
260
+ RegExpDetectedSystemReminderConfig, reminder_config
261
+ )
262
+ text_matches = [
263
+ match.group(0)
264
+ for match in reminder_config.regexp.finditer(message["text"])
265
+ ]
266
+ if len(text_matches) > 0:
267
+ reminders.append(
268
+ render_template(
269
+ reminder_config.reminder,
270
+ display_name=self.display_name(),
271
+ tool_name=self.name,
272
+ text_matches=text_matches,
273
+ )
274
+ )
275
+
276
+ return reminders
277
+
224
278
  async def _get_chat_id(self) -> str | None:
225
279
  if not self.config.reuse_chat:
226
280
  return None
@@ -326,4 +380,14 @@ class SubAgentTool(Tool[SubAgentToolConfig]):
326
380
  ) from e
327
381
 
328
382
 
383
+ def _format_response(tool_name: str, text: str, system_reminders: list[str]) -> str:
384
+ if len(system_reminders) == 0:
385
+ return text
386
+
387
+ reponse_key = f"{tool_name} response"
388
+ response = {reponse_key: text, "SYSTEM_REMINDERS": system_reminders}
389
+
390
+ return json.dumps(response, indent=2)
391
+
392
+
329
393
  ToolFactory.register_tool(SubAgentTool, SubAgentToolConfig)
@@ -263,7 +263,7 @@ def create_message(
263
263
  references: list[ContentReference] | None = None,
264
264
  debug_info: dict | None = None,
265
265
  set_completed_at: bool | None = False,
266
- ):
266
+ ) -> ChatMessage:
267
267
  """Creates a message in the chat session synchronously.
268
268
 
269
269
  Args:
@@ -144,7 +144,7 @@ def search_contents(
144
144
  chat_id: str,
145
145
  where: dict,
146
146
  include_failed_content: bool = False,
147
- ):
147
+ ) -> list[Content]:
148
148
  """
149
149
  Performs an asynchronous search for content files in the knowledge base by filter.
150
150
 
@@ -297,7 +297,7 @@ def upload_content_from_bytes(
297
297
  skip_ingestion: bool = False,
298
298
  ingestion_config: unique_sdk.Content.IngestionConfig | None = None,
299
299
  metadata: dict[str, Any] | None = None,
300
- ):
300
+ ) -> Content:
301
301
  """
302
302
  Uploads content to the knowledge base.
303
303
 
@@ -347,7 +347,7 @@ def upload_content(
347
347
  skip_excel_ingestion: bool = False,
348
348
  ingestion_config: unique_sdk.Content.IngestionConfig | None = None,
349
349
  metadata: dict[str, Any] | None = None,
350
- ):
350
+ ) -> Content:
351
351
  """
352
352
  Uploads content to the knowledge base.
353
353
 
@@ -399,7 +399,7 @@ def _trigger_upload_content(
399
399
  skip_excel_ingestion: bool = False,
400
400
  ingestion_config: unique_sdk.Content.IngestionConfig | None = None,
401
401
  metadata: dict[str, Any] | None = None,
402
- ):
402
+ ) -> Content:
403
403
  """
404
404
  Uploads content to the knowledge base.
405
405
 
@@ -528,7 +528,7 @@ class ContentService:
528
528
  skip_excel_ingestion: bool = False,
529
529
  ingestion_config: unique_sdk.Content.IngestionConfig | None = None,
530
530
  metadata: dict[str, Any] | None = None,
531
- ):
531
+ ) -> Content:
532
532
  """
533
533
  Uploads content to the knowledge base.
534
534
 
@@ -145,7 +145,7 @@ class EmbeddingService(BaseService):
145
145
  Embed text.
146
146
 
147
147
  Args:
148
- text (str): The text to embed.
148
+ texts (list[str]): The texts to embed.
149
149
  timeout (int): The timeout in milliseconds. Defaults to 600000.
150
150
 
151
151
  Returns:
@@ -0,0 +1,10 @@
1
+ """Langchain framework utilities."""
2
+
3
+ try:
4
+ from .client import LangchainNotInstalledError, get_langchain_client
5
+
6
+ __all__ = ["get_langchain_client", "LangchainNotInstalledError"]
7
+ except (ImportError, Exception):
8
+ # If langchain is not installed, don't export anything
9
+ # This handles both ImportError and LangchainNotInstalledError
10
+ __all__ = []
@@ -30,7 +30,8 @@ def get_openai_client(
30
30
  """Get an OpenAI client instance.
31
31
 
32
32
  Args:
33
- env_file: Optional path to environment file
33
+ unique_settings (UniqueSettings | None): Optional UniqueSettings instance
34
+ additional_headers (dict[str, str] | None): Optional additional headers to add to the request
34
35
 
35
36
  Returns:
36
37
  OpenAI client instance
@@ -377,7 +377,6 @@ class KnowledgeBaseService:
377
377
  mime_type (str): The MIME type of the content.
378
378
  scope_id (str | None): The scope ID. Defaults to None.
379
379
  skip_ingestion (bool): Whether to skip ingestion. Defaults to False.
380
- skip_excel_ingestion (bool): Whether to skip excel ingestion. Defaults to False.
381
380
  ingestion_config (unique_sdk.Content.IngestionConfig | None): The ingestion configuration. Defaults to None.
382
381
  metadata (dict | None): The metadata to associate with the content. Defaults to None.
383
382
 
@@ -449,7 +448,7 @@ class KnowledgeBaseService:
449
448
  skip_excel_ingestion: bool = False,
450
449
  ingestion_config: unique_sdk.Content.IngestionConfig | None = None,
451
450
  metadata: dict[str, Any] | None = None,
452
- ):
451
+ ) -> Content:
453
452
  """
454
453
  Uploads content to the knowledge base.
455
454
 
@@ -487,14 +486,14 @@ class KnowledgeBaseService:
487
486
  content_id: str,
488
487
  output_dir_path: Path | None = None,
489
488
  output_filename: str | None = None,
490
- ):
489
+ ) -> Path:
491
490
  """
492
491
  Downloads content from a chat and saves it to a file.
493
492
 
494
493
  Args:
495
494
  content_id (str): The ID of the content to download.
496
- filename (str | None): The name of the file to save the content as. If not provided, the original filename will be used. Defaults to None.
497
- tmp_dir_path (str | Path | None): The path to the temporary directory where the content will be saved. Defaults to "/tmp".
495
+ output_filename (str | None): The name of the file to save the content as. If not provided, the original filename will be used. Defaults to None.
496
+ output_dir_path (str | Path | None): The path to the temporary directory where the content will be saved. Defaults to "/tmp".
498
497
 
499
498
  Returns:
500
499
  Path: The path to the downloaded file.
@@ -522,7 +521,6 @@ class KnowledgeBaseService:
522
521
 
523
522
  Args:
524
523
  content_id (str): The id of the uploaded content.
525
- chat_id (Optional[str]): The chat_id, defaults to None.
526
524
 
527
525
  Returns:
528
526
  bytes: The downloaded content.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: unique_toolkit
3
- Version: 1.32.0
3
+ Version: 1.33.0
4
4
  Summary:
5
5
  License: Proprietary
6
6
  Author: Cedric Klinkert
@@ -121,6 +121,12 @@ All notable changes to this project will be documented in this file.
121
121
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
122
122
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
123
123
 
124
+ ## [1.33.0] - 2025-11-28
125
+ - Add support for system reminders in sub agent responses.
126
+
127
+ ## [1.32.1] - 2025-12-01
128
+ - Added documentation for the toolkit,some missing type hints and doc string fixes.
129
+
124
130
  ## [1.32.0] - 2025-11-28
125
131
  - Add option to filter duplicate sub agent answers.
126
132
 
@@ -32,7 +32,7 @@ unique_toolkit/_common/utils/__init__.py,sha256=qHrEy-3zkbFPdGFriRscPbGKuQfOuPi3
32
32
  unique_toolkit/_common/utils/files.py,sha256=97PkhXDUMXFEhje5HzWMMlLvZj49A6jOifqFRIrzu5M,1102
33
33
  unique_toolkit/_common/utils/image/encode.py,sha256=IJhtTcIT_azhiDsPp15oYs2LPze2l-sGlZrJASHrDVI,658
34
34
  unique_toolkit/_common/utils/jinja/helpers.py,sha256=UQWj0hFMtnuUFYDJ8NKbEblvYE8DrWX1o7fKQU3H9IQ,262
35
- unique_toolkit/_common/utils/jinja/render.py,sha256=n8wtslMZYU7DX9H_0HMmKjdcCvvvYk7C3qztktH5rO8,398
35
+ unique_toolkit/_common/utils/jinja/render.py,sha256=J5UBIWoljl-Us7SjZIap9wewcLTzpXjQpOgas_YTf3Y,482
36
36
  unique_toolkit/_common/utils/jinja/schema.py,sha256=qCme5vI8TS8lZZVtyMleAgJtjBl9V7EfBIapcYXpJ-c,1912
37
37
  unique_toolkit/_common/utils/jinja/utils.py,sha256=0SrwN6qfLlRJrl38HG7qsMr5-DwpABNnM9LpqpMgwUA,2814
38
38
  unique_toolkit/_common/utils/structured_output/__init__.py,sha256=nm_orZrlCXL0FPLUg0Jv6Ty1flXPkCgZ9caAWaS8rz8,38
@@ -96,8 +96,8 @@ unique_toolkit/agentic/tools/a2a/response_watcher/service.py,sha256=Tlzd7Tvk0X8a
96
96
  unique_toolkit/agentic/tools/a2a/tool/__init__.py,sha256=JIJKZBTLTA39OWhxoUd6uairxmqINur1Ex6iXDk9ef8,197
97
97
  unique_toolkit/agentic/tools/a2a/tool/_memory.py,sha256=w8bxjokrqHQZgApd55b5rHXF-DpgJwaKTg4CvLBLamc,1034
98
98
  unique_toolkit/agentic/tools/a2a/tool/_schema.py,sha256=wMwyunViTnxaURvenkATEvyfXn5LvLaP0HxbYqdZGls,158
99
- unique_toolkit/agentic/tools/a2a/tool/config.py,sha256=vGKOn8TTrKWqbxrlGr0n_-1Cy-S8cZ3qaMAMMy7_Drw,3243
100
- unique_toolkit/agentic/tools/a2a/tool/service.py,sha256=XZRi5VLaXG-io_q8TatiT1uMjfSoxb4p6VaMvzRnC5w,11334
99
+ unique_toolkit/agentic/tools/a2a/tool/config.py,sha256=zK9onAMYlYrPc0MCz0gBocd22jm0H5ar1ihNJ7CyjJU,5780
100
+ unique_toolkit/agentic/tools/a2a/tool/service.py,sha256=OJx1zc1roPgt4aa1fDw4XTF9VOCCF72dhEJaNMEMOSU,13865
101
101
  unique_toolkit/agentic/tools/agent_chunks_hanlder.py,sha256=x32Dp1Z8cVW5i-XzXbaMwX2KHPcNGmqEU-FB4AV9ZGo,1909
102
102
  unique_toolkit/agentic/tools/config.py,sha256=N7IVtMecCCf8hxGUf-1GEk6ldIoEZfXi4fo5GMpHKus,5418
103
103
  unique_toolkit/agentic/tools/factory.py,sha256=A1Aliwx037UAk9ADiDsg0zjCWWnvzV_PxwJNoPTvW6c,1434
@@ -138,7 +138,7 @@ unique_toolkit/app/webhook.py,sha256=k7DP1UTR3p7D4qzuKPKVmGMAkDVHfALrnMIzTZqj_OI
138
138
  unique_toolkit/chat/__init__.py,sha256=uP7P6YPeOjEOvpX3bhcU6ND_m0QLr4wMklcrnAKK0q4,804
139
139
  unique_toolkit/chat/constants.py,sha256=05kq6zjqUVB2d6_P7s-90nbljpB3ryxwCI-CAz0r2O4,83
140
140
  unique_toolkit/chat/deprecated/service.py,sha256=CYwzXi7OB0RjHd73CO2jq8SlpdBmDYLatzPFkb5sA0k,6529
141
- unique_toolkit/chat/functions.py,sha256=C7Iioow2RtiKNfU9isar83DYlwYxKtdp2hp7lajXUvw,46063
141
+ unique_toolkit/chat/functions.py,sha256=VdehD26NnsEhBsV5tD0tgUFD4LuEqIYgz8wWSsxYFgA,46078
142
142
  unique_toolkit/chat/rendering.py,sha256=c8YiV9oADRrJQ5A_QBJ4_UFc0NZ-2vVaa7tupoMusso,880
143
143
  unique_toolkit/chat/responses_api.py,sha256=MCI1MR_4wlo9xY1ifH2daNz4JvjX18uPdryQlemaeLw,14488
144
144
  unique_toolkit/chat/schemas.py,sha256=Zh903Xt9PhugvwzoC_k5KXQWAqllWHvj9DmqDVom2yk,6890
@@ -147,22 +147,23 @@ unique_toolkit/chat/state.py,sha256=Cjgwv_2vhDFbV69xxsn7SefhaoIAEqLx3ferdVFCnOg,
147
147
  unique_toolkit/chat/utils.py,sha256=ihm-wQykBWhB4liR3LnwPVPt_qGW6ETq21Mw4HY0THE,854
148
148
  unique_toolkit/content/__init__.py,sha256=EdJg_A_7loEtCQf4cah3QARQreJx6pdz89Rm96YbMVg,940
149
149
  unique_toolkit/content/constants.py,sha256=1iy4Y67xobl5VTnJB6SxSyuoBWbdLl9244xfVMUZi5o,60
150
- unique_toolkit/content/functions.py,sha256=uD9XHkKOD28N-4OLFjcbs6NOdKNSGFBUob79UnGrE0k,28780
150
+ unique_toolkit/content/functions.py,sha256=6QIgPTShF7VF9N55Np5vIlNibbDgPDfJr4-IBaRu6n8,28830
151
151
  unique_toolkit/content/schemas.py,sha256=uuS1UsuWK6eC7cP4dTC1q3DJ39xl6zenN2zL4ghFmzk,6424
152
- unique_toolkit/content/service.py,sha256=hyD-CdlQLvddbcZMC7fbitdcSVauoyxec21q1auXW24,24908
152
+ unique_toolkit/content/service.py,sha256=hwycIbxtLn1p0IgNQMVIxN2NUhy_4AVsTfatytGi-gY,24919
153
153
  unique_toolkit/content/smart_rules.py,sha256=z2gHToPrdyj3HqO8Uu-JE5G2ClvJPuhR2XERmmkgoug,9668
154
154
  unique_toolkit/content/utils.py,sha256=ITCJHDIXPyFkxR5M-6k-PhHOLbnkVq_RGrGA7i5s1WM,8001
155
155
  unique_toolkit/embedding/__init__.py,sha256=uUyzjonPvuDCYsvXCIt7ErQXopLggpzX-MEQd3_e2kE,250
156
156
  unique_toolkit/embedding/constants.py,sha256=Lj8-Lcy1FvuC31PM9Exq7vaFuxQV4pEI1huUMFX-J2M,52
157
157
  unique_toolkit/embedding/functions.py,sha256=3qp-BfuMAbnp8YB04rh3xH8vsJuCBPizoy-JeaBFtoQ,1944
158
158
  unique_toolkit/embedding/schemas.py,sha256=1GvKCaSk4jixzVQ2PKq8yDqwGEVY_hWclYtoAr6CC2g,96
159
- unique_toolkit/embedding/service.py,sha256=XViQCbjG9yznIFhWjgBkla_4s7zM2lO12Cqob1FU63k,5283
159
+ unique_toolkit/embedding/service.py,sha256=Ujx4oy7yUsQot8ATyl-3x88LulgruPThEteSArwzuvA,5291
160
160
  unique_toolkit/embedding/utils.py,sha256=v86lo__bCJbxZBQ3OcLu5SuwT6NbFfWlcq8iyk6BuzQ,279
161
161
  unique_toolkit/framework_utilities/__init__.py,sha256=fvAn9y4MRL1JgoO14ufQtLVRPRHn4jP07XRqt-TItCA,68
162
+ unique_toolkit/framework_utilities/langchain/__init__.py,sha256=CjihxDQqCeSiRpTy1fSRRMYXXKrvhNuChR8nbUlIm84,362
162
163
  unique_toolkit/framework_utilities/langchain/client.py,sha256=NxOLnzVMJds2JFMm5ZqTVTz1WMntrmWsLPU4-kwlzqE,2065
163
164
  unique_toolkit/framework_utilities/langchain/history.py,sha256=R9RuCeSFNaUO3OZ0G_LmIC4gmOCIANcl91MfyWLnZ1c,650
164
165
  unique_toolkit/framework_utilities/openai/__init__.py,sha256=CrHYoC7lv2pBscitLerAFweqy5jh1R671LA_jZQ4lWo,232
165
- unique_toolkit/framework_utilities/openai/client.py,sha256=XtueQu_4tiar7lvu0yOOgU5QSE_cIXGiiHStesW4iXs,2317
166
+ unique_toolkit/framework_utilities/openai/client.py,sha256=Ft-oLiS6BTaMiuCdObdaMLkiEPE3RYjtc9VPnqQk3W8,2449
166
167
  unique_toolkit/framework_utilities/openai/message_builder.py,sha256=RT1pZjxH42TFZlAxQ5zlqdKPvHKVTjc5t3JDUy58I7Q,6887
167
168
  unique_toolkit/framework_utilities/utils.py,sha256=JK7g2yMfEx3eMprug26769xqNpS5WJcizf8n2zWMBng,789
168
169
  unique_toolkit/language_model/__init__.py,sha256=lRQyLlbwHbNFf4-0foBU13UGb09lwEeodbVsfsSgaCk,1971
@@ -180,7 +181,7 @@ unique_toolkit/language_model/utils.py,sha256=bPQ4l6_YO71w-zaIPanUUmtbXC1_hCvLK0
180
181
  unique_toolkit/protocols/support.py,sha256=ZEnbQL5w2-T_1AeM8OHycZJ3qbdfVI1nXe0nL9esQEw,5544
181
182
  unique_toolkit/services/__init__.py,sha256=90-IT5FjMcnlqxjp5kme9Fqgp_on46rggctIqHMdqsw,195
182
183
  unique_toolkit/services/chat_service.py,sha256=vA97DO4iiXMeTNuwS-bYeskX0DnqO_8vL4yzJAfsGtw,60111
183
- unique_toolkit/services/knowledge_base.py,sha256=PhXqDkHvePY-dW_XRirONy--0naOEnZG6gVyBR6KFBY,36342
184
+ unique_toolkit/services/knowledge_base.py,sha256=uc89GL_NZXeFkJKkdHSSh2y1Wx0tmgasWk6uyGi4G_M,36210
184
185
  unique_toolkit/short_term_memory/__init__.py,sha256=2mI3AUrffgH7Yt-xS57EGqnHf7jnn6xquoKEhJqk3Wg,185
185
186
  unique_toolkit/short_term_memory/constants.py,sha256=698CL6-wjup2MvU19RxSmQk3gX7aqW_OOpZB7sbz_Xg,34
186
187
  unique_toolkit/short_term_memory/functions.py,sha256=3WiK-xatY5nh4Dr5zlDUye1k3E6kr41RiscwtTplw5k,4484
@@ -189,7 +190,7 @@ unique_toolkit/short_term_memory/service.py,sha256=5PeVBu1ZCAfyDb2HLVvlmqSbyzBBu
189
190
  unique_toolkit/smart_rules/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
190
191
  unique_toolkit/smart_rules/compile.py,sha256=Ozhh70qCn2yOzRWr9d8WmJeTo7AQurwd3tStgBMPFLA,1246
191
192
  unique_toolkit/test_utilities/events.py,sha256=_mwV2bs5iLjxS1ynDCjaIq-gjjKhXYCK-iy3dRfvO3g,6410
192
- unique_toolkit-1.32.0.dist-info/LICENSE,sha256=GlN8wHNdh53xwOPg44URnwag6TEolCjoq3YD_KrWgss,193
193
- unique_toolkit-1.32.0.dist-info/METADATA,sha256=w-7NUQhIQPdLlOXStTABVEF5PrLskDfNucF5zLc7yeM,44978
194
- unique_toolkit-1.32.0.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
195
- unique_toolkit-1.32.0.dist-info/RECORD,,
193
+ unique_toolkit-1.33.0.dist-info/LICENSE,sha256=GlN8wHNdh53xwOPg44URnwag6TEolCjoq3YD_KrWgss,193
194
+ unique_toolkit-1.33.0.dist-info/METADATA,sha256=PzwX-9ifVcTLgyMTPBoroaYBOKR4UUFiZnLutim8gxQ,45173
195
+ unique_toolkit-1.33.0.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
196
+ unique_toolkit-1.33.0.dist-info/RECORD,,