unique_toolkit 0.7.7__py3-none-any.whl → 1.23.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.

Potentially problematic release.


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

Files changed (166) hide show
  1. unique_toolkit/__init__.py +28 -1
  2. unique_toolkit/_common/api_calling/human_verification_manager.py +343 -0
  3. unique_toolkit/_common/base_model_type_attribute.py +303 -0
  4. unique_toolkit/_common/chunk_relevancy_sorter/config.py +49 -0
  5. unique_toolkit/_common/chunk_relevancy_sorter/exception.py +5 -0
  6. unique_toolkit/_common/chunk_relevancy_sorter/schemas.py +46 -0
  7. unique_toolkit/_common/chunk_relevancy_sorter/service.py +374 -0
  8. unique_toolkit/_common/chunk_relevancy_sorter/tests/test_service.py +275 -0
  9. unique_toolkit/_common/default_language_model.py +12 -0
  10. unique_toolkit/_common/docx_generator/__init__.py +7 -0
  11. unique_toolkit/_common/docx_generator/config.py +12 -0
  12. unique_toolkit/_common/docx_generator/schemas.py +80 -0
  13. unique_toolkit/_common/docx_generator/service.py +252 -0
  14. unique_toolkit/_common/docx_generator/template/Doc Template.docx +0 -0
  15. unique_toolkit/_common/endpoint_builder.py +305 -0
  16. unique_toolkit/_common/endpoint_requestor.py +430 -0
  17. unique_toolkit/_common/exception.py +24 -0
  18. unique_toolkit/_common/feature_flags/schema.py +9 -0
  19. unique_toolkit/_common/pydantic/rjsf_tags.py +936 -0
  20. unique_toolkit/_common/pydantic_helpers.py +154 -0
  21. unique_toolkit/_common/referencing.py +53 -0
  22. unique_toolkit/_common/string_utilities.py +140 -0
  23. unique_toolkit/_common/tests/test_referencing.py +521 -0
  24. unique_toolkit/_common/tests/test_string_utilities.py +506 -0
  25. unique_toolkit/_common/token/image_token_counting.py +67 -0
  26. unique_toolkit/_common/token/token_counting.py +204 -0
  27. unique_toolkit/_common/utils/__init__.py +1 -0
  28. unique_toolkit/_common/utils/files.py +43 -0
  29. unique_toolkit/_common/utils/structured_output/__init__.py +1 -0
  30. unique_toolkit/_common/utils/structured_output/schema.py +5 -0
  31. unique_toolkit/_common/utils/write_configuration.py +51 -0
  32. unique_toolkit/_common/validators.py +101 -4
  33. unique_toolkit/agentic/__init__.py +1 -0
  34. unique_toolkit/agentic/debug_info_manager/debug_info_manager.py +28 -0
  35. unique_toolkit/agentic/debug_info_manager/test/test_debug_info_manager.py +278 -0
  36. unique_toolkit/agentic/evaluation/config.py +36 -0
  37. unique_toolkit/{evaluators → agentic/evaluation}/context_relevancy/prompts.py +25 -0
  38. unique_toolkit/agentic/evaluation/context_relevancy/schema.py +80 -0
  39. unique_toolkit/agentic/evaluation/context_relevancy/service.py +273 -0
  40. unique_toolkit/agentic/evaluation/evaluation_manager.py +218 -0
  41. unique_toolkit/agentic/evaluation/hallucination/constants.py +61 -0
  42. unique_toolkit/agentic/evaluation/hallucination/hallucination_evaluation.py +111 -0
  43. unique_toolkit/{evaluators → agentic/evaluation}/hallucination/prompts.py +1 -1
  44. unique_toolkit/{evaluators → agentic/evaluation}/hallucination/service.py +16 -15
  45. unique_toolkit/{evaluators → agentic/evaluation}/hallucination/utils.py +30 -20
  46. unique_toolkit/{evaluators → agentic/evaluation}/output_parser.py +20 -2
  47. unique_toolkit/{evaluators → agentic/evaluation}/schemas.py +27 -7
  48. unique_toolkit/agentic/evaluation/tests/test_context_relevancy_service.py +253 -0
  49. unique_toolkit/agentic/evaluation/tests/test_output_parser.py +87 -0
  50. unique_toolkit/agentic/history_manager/history_construction_with_contents.py +297 -0
  51. unique_toolkit/agentic/history_manager/history_manager.py +242 -0
  52. unique_toolkit/agentic/history_manager/loop_token_reducer.py +484 -0
  53. unique_toolkit/agentic/history_manager/utils.py +96 -0
  54. unique_toolkit/agentic/postprocessor/postprocessor_manager.py +212 -0
  55. unique_toolkit/agentic/reference_manager/reference_manager.py +103 -0
  56. unique_toolkit/agentic/responses_api/__init__.py +19 -0
  57. unique_toolkit/agentic/responses_api/postprocessors/code_display.py +63 -0
  58. unique_toolkit/agentic/responses_api/postprocessors/generated_files.py +145 -0
  59. unique_toolkit/agentic/responses_api/stream_handler.py +15 -0
  60. unique_toolkit/agentic/short_term_memory_manager/persistent_short_term_memory_manager.py +141 -0
  61. unique_toolkit/agentic/thinking_manager/thinking_manager.py +103 -0
  62. unique_toolkit/agentic/tools/__init__.py +1 -0
  63. unique_toolkit/agentic/tools/a2a/__init__.py +36 -0
  64. unique_toolkit/agentic/tools/a2a/config.py +17 -0
  65. unique_toolkit/agentic/tools/a2a/evaluation/__init__.py +15 -0
  66. unique_toolkit/agentic/tools/a2a/evaluation/_utils.py +66 -0
  67. unique_toolkit/agentic/tools/a2a/evaluation/config.py +55 -0
  68. unique_toolkit/agentic/tools/a2a/evaluation/evaluator.py +260 -0
  69. unique_toolkit/agentic/tools/a2a/evaluation/summarization_user_message.j2 +9 -0
  70. unique_toolkit/agentic/tools/a2a/manager.py +55 -0
  71. unique_toolkit/agentic/tools/a2a/postprocessing/__init__.py +21 -0
  72. unique_toolkit/agentic/tools/a2a/postprocessing/_display_utils.py +185 -0
  73. unique_toolkit/agentic/tools/a2a/postprocessing/_ref_utils.py +73 -0
  74. unique_toolkit/agentic/tools/a2a/postprocessing/config.py +45 -0
  75. unique_toolkit/agentic/tools/a2a/postprocessing/display.py +180 -0
  76. unique_toolkit/agentic/tools/a2a/postprocessing/references.py +101 -0
  77. unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display_utils.py +1335 -0
  78. unique_toolkit/agentic/tools/a2a/postprocessing/test/test_ref_utils.py +603 -0
  79. unique_toolkit/agentic/tools/a2a/prompts.py +46 -0
  80. unique_toolkit/agentic/tools/a2a/response_watcher/__init__.py +6 -0
  81. unique_toolkit/agentic/tools/a2a/response_watcher/service.py +91 -0
  82. unique_toolkit/agentic/tools/a2a/tool/__init__.py +4 -0
  83. unique_toolkit/agentic/tools/a2a/tool/_memory.py +26 -0
  84. unique_toolkit/agentic/tools/a2a/tool/_schema.py +9 -0
  85. unique_toolkit/agentic/tools/a2a/tool/config.py +73 -0
  86. unique_toolkit/agentic/tools/a2a/tool/service.py +306 -0
  87. unique_toolkit/agentic/tools/agent_chunks_hanlder.py +65 -0
  88. unique_toolkit/agentic/tools/config.py +167 -0
  89. unique_toolkit/agentic/tools/factory.py +44 -0
  90. unique_toolkit/agentic/tools/mcp/__init__.py +4 -0
  91. unique_toolkit/agentic/tools/mcp/manager.py +71 -0
  92. unique_toolkit/agentic/tools/mcp/models.py +28 -0
  93. unique_toolkit/agentic/tools/mcp/tool_wrapper.py +234 -0
  94. unique_toolkit/agentic/tools/openai_builtin/__init__.py +11 -0
  95. unique_toolkit/agentic/tools/openai_builtin/base.py +30 -0
  96. unique_toolkit/agentic/tools/openai_builtin/code_interpreter/__init__.py +8 -0
  97. unique_toolkit/agentic/tools/openai_builtin/code_interpreter/config.py +57 -0
  98. unique_toolkit/agentic/tools/openai_builtin/code_interpreter/service.py +230 -0
  99. unique_toolkit/agentic/tools/openai_builtin/manager.py +62 -0
  100. unique_toolkit/agentic/tools/schemas.py +141 -0
  101. unique_toolkit/agentic/tools/test/test_mcp_manager.py +536 -0
  102. unique_toolkit/agentic/tools/test/test_tool_progress_reporter.py +445 -0
  103. unique_toolkit/agentic/tools/tool.py +183 -0
  104. unique_toolkit/agentic/tools/tool_manager.py +523 -0
  105. unique_toolkit/agentic/tools/tool_progress_reporter.py +285 -0
  106. unique_toolkit/agentic/tools/utils/__init__.py +19 -0
  107. unique_toolkit/agentic/tools/utils/execution/__init__.py +1 -0
  108. unique_toolkit/agentic/tools/utils/execution/execution.py +286 -0
  109. unique_toolkit/agentic/tools/utils/source_handling/__init__.py +0 -0
  110. unique_toolkit/agentic/tools/utils/source_handling/schema.py +21 -0
  111. unique_toolkit/agentic/tools/utils/source_handling/source_formatting.py +207 -0
  112. unique_toolkit/agentic/tools/utils/source_handling/tests/test_source_formatting.py +216 -0
  113. unique_toolkit/app/__init__.py +6 -0
  114. unique_toolkit/app/dev_util.py +180 -0
  115. unique_toolkit/app/init_sdk.py +32 -1
  116. unique_toolkit/app/schemas.py +198 -31
  117. unique_toolkit/app/unique_settings.py +367 -0
  118. unique_toolkit/chat/__init__.py +8 -1
  119. unique_toolkit/chat/deprecated/service.py +232 -0
  120. unique_toolkit/chat/functions.py +642 -77
  121. unique_toolkit/chat/rendering.py +34 -0
  122. unique_toolkit/chat/responses_api.py +461 -0
  123. unique_toolkit/chat/schemas.py +133 -2
  124. unique_toolkit/chat/service.py +115 -767
  125. unique_toolkit/content/functions.py +153 -4
  126. unique_toolkit/content/schemas.py +122 -15
  127. unique_toolkit/content/service.py +278 -44
  128. unique_toolkit/content/smart_rules.py +301 -0
  129. unique_toolkit/content/utils.py +8 -3
  130. unique_toolkit/embedding/service.py +102 -11
  131. unique_toolkit/framework_utilities/__init__.py +1 -0
  132. unique_toolkit/framework_utilities/langchain/client.py +71 -0
  133. unique_toolkit/framework_utilities/langchain/history.py +19 -0
  134. unique_toolkit/framework_utilities/openai/__init__.py +6 -0
  135. unique_toolkit/framework_utilities/openai/client.py +83 -0
  136. unique_toolkit/framework_utilities/openai/message_builder.py +229 -0
  137. unique_toolkit/framework_utilities/utils.py +23 -0
  138. unique_toolkit/language_model/__init__.py +3 -0
  139. unique_toolkit/language_model/builder.py +27 -11
  140. unique_toolkit/language_model/default_language_model.py +3 -0
  141. unique_toolkit/language_model/functions.py +327 -43
  142. unique_toolkit/language_model/infos.py +992 -50
  143. unique_toolkit/language_model/reference.py +242 -0
  144. unique_toolkit/language_model/schemas.py +475 -48
  145. unique_toolkit/language_model/service.py +228 -27
  146. unique_toolkit/protocols/support.py +145 -0
  147. unique_toolkit/services/__init__.py +7 -0
  148. unique_toolkit/services/chat_service.py +1630 -0
  149. unique_toolkit/services/knowledge_base.py +861 -0
  150. unique_toolkit/short_term_memory/service.py +178 -41
  151. unique_toolkit/smart_rules/__init__.py +0 -0
  152. unique_toolkit/smart_rules/compile.py +56 -0
  153. unique_toolkit/test_utilities/events.py +197 -0
  154. {unique_toolkit-0.7.7.dist-info → unique_toolkit-1.23.0.dist-info}/METADATA +606 -7
  155. unique_toolkit-1.23.0.dist-info/RECORD +182 -0
  156. unique_toolkit/evaluators/__init__.py +0 -1
  157. unique_toolkit/evaluators/config.py +0 -35
  158. unique_toolkit/evaluators/constants.py +0 -1
  159. unique_toolkit/evaluators/context_relevancy/constants.py +0 -32
  160. unique_toolkit/evaluators/context_relevancy/service.py +0 -53
  161. unique_toolkit/evaluators/context_relevancy/utils.py +0 -142
  162. unique_toolkit/evaluators/hallucination/constants.py +0 -41
  163. unique_toolkit-0.7.7.dist-info/RECORD +0 -64
  164. /unique_toolkit/{evaluators → agentic/evaluation}/exception.py +0 -0
  165. {unique_toolkit-0.7.7.dist-info → unique_toolkit-1.23.0.dist-info}/LICENSE +0 -0
  166. {unique_toolkit-0.7.7.dist-info → unique_toolkit-1.23.0.dist-info}/WHEEL +0 -0
@@ -1,27 +1,44 @@
1
- import logging
2
- from typing import Optional
1
+ """
2
+ DEPRECATED: This module is maintained for backward compatibility only.
3
3
 
4
- from typing_extensions import deprecated
4
+ Please import from `unique_toolkit.services.chat_service` instead:
5
+ from unique_toolkit.services.chat_service import ChatService
6
+
7
+ All imports from this module will continue to work but may be removed in a future version.
8
+ """
9
+
10
+ import warnings
5
11
 
6
- from unique_toolkit._common.validate_required_values import validate_required_values
7
- from unique_toolkit.app.schemas import ChatEvent, Event
8
12
  from unique_toolkit.chat.constants import (
9
13
  DEFAULT_MAX_MESSAGES,
10
14
  DEFAULT_PERCENT_OF_MAX_TOKENS,
11
15
  DOMAIN_NAME,
12
16
  )
17
+ from unique_toolkit.chat.deprecated.service import ChatServiceDeprecated
13
18
  from unique_toolkit.chat.functions import (
14
19
  create_message,
15
20
  create_message_assessment,
16
21
  create_message_assessment_async,
17
22
  create_message_async,
23
+ create_message_execution,
24
+ create_message_execution_async,
25
+ create_message_log,
26
+ create_message_log_async,
18
27
  get_full_history,
19
28
  get_full_history_async,
29
+ get_message_execution,
30
+ get_message_execution_async,
20
31
  get_selection_from_history,
21
32
  modify_message,
22
33
  modify_message_assessment,
23
34
  modify_message_assessment_async,
24
35
  modify_message_async,
36
+ stream_complete_with_references,
37
+ stream_complete_with_references_async,
38
+ update_message_execution,
39
+ update_message_execution_async,
40
+ update_message_log,
41
+ update_message_log_async,
25
42
  )
26
43
  from unique_toolkit.chat.schemas import (
27
44
  ChatMessage,
@@ -30,8 +47,24 @@ from unique_toolkit.chat.schemas import (
30
47
  ChatMessageAssessmentStatus,
31
48
  ChatMessageAssessmentType,
32
49
  ChatMessageRole,
50
+ MessageExecution,
51
+ MessageExecutionType,
52
+ MessageExecutionUpdateStatus,
53
+ MessageLog,
54
+ MessageLogDetails,
55
+ MessageLogStatus,
56
+ MessageLogUncitedReferences,
57
+ )
58
+ from unique_toolkit.content.functions import (
59
+ download_content_to_bytes,
60
+ search_contents,
61
+ upload_content_from_bytes,
62
+ )
63
+ from unique_toolkit.content.schemas import (
64
+ Content,
65
+ ContentChunk,
66
+ ContentReference,
33
67
  )
34
- from unique_toolkit.content.schemas import ContentChunk, ContentReference
35
68
  from unique_toolkit.language_model.constants import (
36
69
  DEFAULT_COMPLETE_TEMPERATURE,
37
70
  DEFAULT_COMPLETE_TIMEOUT,
@@ -41,769 +74,84 @@ from unique_toolkit.language_model.infos import (
41
74
  )
42
75
  from unique_toolkit.language_model.schemas import (
43
76
  LanguageModelMessages,
77
+ LanguageModelResponse,
44
78
  LanguageModelStreamResponse,
45
79
  LanguageModelTool,
80
+ LanguageModelToolDescription,
46
81
  )
47
-
48
- from .functions import (
49
- stream_complete_to_chat,
50
- stream_complete_to_chat_async,
82
+ from unique_toolkit.services.chat_service import ChatService
83
+
84
+ warnings.warn(
85
+ "Importing from 'unique_toolkit.chat.service' is deprecated. "
86
+ "Please import from 'unique_toolkit.services.chat_service' instead. "
87
+ "This module will be removed in a future version.",
88
+ DeprecationWarning,
89
+ stacklevel=1,
51
90
  )
52
91
 
53
- logger = logging.getLogger(f"toolkit.{DOMAIN_NAME}.{__name__}")
54
-
55
-
56
- class ChatService:
57
- """
58
- Provides all functionalities to manage the chat session.
59
-
60
- Attributes:
61
- company_id (str | None): The company ID.
62
- user_id (str | None): The user ID.
63
- assistant_message_id (str | None): The assistant message ID.
64
- user_message_id (str | None): The user message ID.
65
- chat_id (str | None): The chat ID.
66
- assistant_id (str | None): The assistant ID.
67
- user_message_text (str | None): The user message text.
68
- """
69
-
70
- def __init__(self, event: ChatEvent | Event):
71
- self._event = event
72
- self.company_id = event.company_id
73
- self.user_id = event.user_id
74
- self.assistant_message_id = event.payload.assistant_message.id
75
- self.user_message_id = event.payload.user_message.id
76
- self.chat_id = event.payload.chat_id
77
- self.assistant_id = event.payload.assistant_id
78
- self.user_message_text = event.payload.user_message.text
79
-
80
- @property
81
- @deprecated(
82
- "The event property is deprecated and will be removed in a future version."
83
- )
84
- def event(self) -> Event | ChatEvent | None:
85
- """
86
- Get the event object (deprecated).
87
-
88
- Returns:
89
- Event | BaseEvent | None: The event object.
90
- """
91
- return self._event
92
-
93
- async def update_debug_info_async(self, debug_info: dict):
94
- """
95
- Updates the debug information for the chat session.
96
-
97
- Args:
98
- debug_info (dict): The new debug information.
99
- """
100
-
101
- return await modify_message_async(
102
- user_id=self.user_id,
103
- company_id=self.company_id,
104
- assistant_message_id=self.assistant_message_id,
105
- chat_id=self.chat_id,
106
- user_message_id=self.user_message_id,
107
- user_message_text=self.user_message_text,
108
- assistant=False,
109
- debug_info=debug_info,
110
- )
111
-
112
- def update_debug_info(self, debug_info: dict):
113
- """
114
- Updates the debug information for the chat session.
115
-
116
- Args:
117
- debug_info (dict): The new debug information.
118
- """
119
-
120
- return modify_message(
121
- user_id=self.user_id,
122
- company_id=self.company_id,
123
- assistant_message_id=self.assistant_message_id,
124
- chat_id=self.chat_id,
125
- user_message_id=self.user_message_id,
126
- user_message_text=self.user_message_text,
127
- assistant=False,
128
- debug_info=debug_info,
129
- )
130
-
131
- def modify_user_message(
132
- self,
133
- content: str,
134
- references: list[ContentReference] = [],
135
- debug_info: dict = {},
136
- message_id: str | None = None,
137
- set_completed_at: bool | None = False,
138
- ) -> ChatMessage:
139
- """
140
- Modifies a user message in the chat session synchronously.
141
-
142
- Args:
143
- content (str): The new content for the message.
144
- references (list[ContentReference]): list of ContentReference objects. Defaults to [].
145
- debug_info (dict[str, Any]]]): Debug information. Defaults to {}.
146
- message_id (str, optional): The message ID. Defaults to None, then the ChatState user message id is used.
147
- set_completed_at (Optional[bool]): Whether to set the completedAt field with the current date time. Defaults to False.
148
-
149
- Returns:
150
- ChatMessage: The modified message.
151
-
152
- Raises:
153
- Exception: If the modification fails.
154
- """
155
- return modify_message(
156
- user_id=self.user_id,
157
- company_id=self.company_id,
158
- assistant_message_id=self.assistant_message_id,
159
- chat_id=self.chat_id,
160
- user_message_id=self.user_message_id,
161
- user_message_text=self.user_message_text,
162
- assistant=False,
163
- content=content,
164
- references=references,
165
- debug_info=debug_info,
166
- message_id=message_id,
167
- set_completed_at=set_completed_at or False,
168
- )
169
-
170
- async def modify_user_message_async(
171
- self,
172
- content: str,
173
- references: list[ContentReference] = [],
174
- debug_info: dict = {},
175
- message_id: str | None = None,
176
- set_completed_at: bool | None = False,
177
- ) -> ChatMessage:
178
- """
179
- Modifies a message in the chat session asynchronously.
180
-
181
- Args:
182
- content (str): The new content for the message.
183
- message_id (str, optional): The message ID. Defaults to None, then the ChatState user message id is used.
184
- references (list[ContentReference]): list of ContentReference objects. Defaults to None.
185
- debug_info (dict[str, Any]]]): Debug information. Defaults to {}.
186
- set_completed_at (bool, optional): Whether to set the completedAt field with the current date time. Defaults to False.
187
-
188
- Returns:
189
- ChatMessage: The modified message.
190
-
191
- Raises:
192
- Exception: If the modification fails.
193
- """
194
- return await modify_message_async(
195
- user_id=self.user_id,
196
- company_id=self.company_id,
197
- assistant_message_id=self.assistant_message_id,
198
- chat_id=self.chat_id,
199
- user_message_id=self.user_message_id,
200
- user_message_text=self.user_message_text,
201
- assistant=False,
202
- content=content,
203
- references=references,
204
- debug_info=debug_info,
205
- message_id=message_id,
206
- set_completed_at=set_completed_at or False,
207
- )
208
-
209
- def modify_assistant_message(
210
- self,
211
- content: str | None = None,
212
- original_content: str | None = None,
213
- references: list[ContentReference] = [],
214
- debug_info: dict = {},
215
- message_id: str | None = None,
216
- set_completed_at: bool | None = False,
217
- ) -> ChatMessage:
218
- """
219
- Modifies a message in the chat session synchronously.
220
-
221
- Args:
222
- content (str, optional): The new content for the message.
223
- original_content (str, optional): The original content for the message.
224
- references (list[ContentReference]): list of ContentReference objects. Defaults to [].
225
- debug_info (dict[str, Any]]]): Debug information. Defaults to {}.
226
- message_id (Optional[str]): The message ID. Defaults to None.
227
- set_completed_at (Optional[bool]): Whether to set the completedAt field with the current date time. Defaults to False.
228
-
229
- Returns:
230
- ChatMessage: The modified message.
231
-
232
- Raises:
233
- Exception: If the modification fails.
234
- """
235
- return modify_message(
236
- user_id=self.user_id,
237
- company_id=self.company_id,
238
- assistant_message_id=self.assistant_message_id,
239
- chat_id=self.chat_id,
240
- user_message_id=self.user_message_id,
241
- user_message_text=self.user_message_text,
242
- assistant=True,
243
- content=content,
244
- original_content=original_content,
245
- references=references,
246
- debug_info=debug_info,
247
- message_id=message_id,
248
- set_completed_at=set_completed_at or False,
249
- )
250
-
251
- async def modify_assistant_message_async(
252
- self,
253
- content: str | None = None,
254
- original_content: str | None = None,
255
- references: list[ContentReference] = [],
256
- debug_info: dict = {},
257
- message_id: str | None = None,
258
- set_completed_at: bool | None = False,
259
- ) -> ChatMessage:
260
- """
261
- Modifies a message in the chat session asynchronously.
262
-
263
- Args:
264
- content (str, optional): The new content for the message.
265
- original_content (str, optional): The original content for the message.
266
- message_id (str, optional): The message ID. Defaults to None, then the ChatState assistant message id is used.
267
- references (list[ContentReference]): list of ContentReference objects. Defaults to None.
268
- debug_info (dict[str, Any]], optional): Debug information. Defaults to None.
269
- set_completed_at (bool, optional): Whether to set the completedAt field with the current date time. Defaults to False.
270
-
271
- Returns:
272
- ChatMessage: The modified message.
273
-
274
- Raises:
275
- Exception: If the modification fails.
276
- """
277
-
278
- return await modify_message_async(
279
- user_id=self.user_id,
280
- company_id=self.company_id,
281
- assistant_message_id=self.assistant_message_id,
282
- chat_id=self.chat_id,
283
- user_message_id=self.user_message_id,
284
- user_message_text=self.user_message_text,
285
- assistant=True,
286
- content=content,
287
- original_content=original_content,
288
- references=references,
289
- debug_info=debug_info,
290
- message_id=message_id,
291
- set_completed_at=set_completed_at or False,
292
- )
293
-
294
- def get_full_history(self) -> list[ChatMessage]:
295
- """
296
- Loads the full chat history for the chat session synchronously.
297
-
298
- Returns:
299
- list[ChatMessage]: The full chat history.
300
-
301
- Raises:
302
- Exception: If the loading fails.
303
- """
304
- return get_full_history(
305
- event_user_id=self.user_id,
306
- event_company_id=self.company_id,
307
- event_payload_chat_id=self.chat_id,
308
- )
309
-
310
- async def get_full_history_async(self) -> list[ChatMessage]:
311
- """
312
- Loads the full chat history for the chat session asynchronously.
313
-
314
- Returns:
315
- list[ChatMessage]: The full chat history.
316
-
317
- Raises:
318
- Exception: If the loading fails.
319
- """
320
- return await get_full_history_async(
321
- event_user_id=self.user_id,
322
- event_company_id=self.company_id,
323
- event_payload_chat_id=self.chat_id,
324
- )
325
-
326
- def get_full_and_selected_history(
327
- self,
328
- token_limit: int,
329
- percent_of_max_tokens: float = DEFAULT_PERCENT_OF_MAX_TOKENS,
330
- max_messages: int = DEFAULT_MAX_MESSAGES,
331
- ) -> tuple[list[ChatMessage], list[ChatMessage]]:
332
- """
333
- Loads the chat history for the chat session synchronously.
334
-
335
- Args:
336
- token_limit (int): The maximum number of tokens to load.
337
- percent_of_max_tokens (float): The percentage of the maximum tokens to load. Defaults to 0.15.
338
- max_messages (int): The maximum number of messages to load. Defaults to 4.
339
-
340
- Returns:
341
- tuple[list[ChatMessage], list[ChatMessage]]: The selected and full chat history.
342
-
343
- Raises:
344
- Exception: If the loading fails.
345
- """
346
- full_history = get_full_history(
347
- event_user_id=self.user_id,
348
- event_company_id=self.company_id,
349
- event_payload_chat_id=self.chat_id,
350
- )
351
- selected_history = get_selection_from_history(
352
- full_history=full_history,
353
- max_tokens=int(round(token_limit * percent_of_max_tokens)),
354
- max_messages=max_messages,
355
- )
356
-
357
- return full_history, selected_history
358
-
359
- async def get_full_and_selected_history_async(
360
- self,
361
- token_limit: int,
362
- percent_of_max_tokens: float = DEFAULT_PERCENT_OF_MAX_TOKENS,
363
- max_messages: int = DEFAULT_MAX_MESSAGES,
364
- ) -> tuple[list[ChatMessage], list[ChatMessage]]:
365
- """
366
- Loads the chat history for the chat session asynchronously.
367
-
368
- Args:
369
- token_limit (int): The maximum number of tokens to load.
370
- percent_of_max_tokens (float): The percentage of the maximum tokens to load. Defaults to 0.15.
371
- max_messages (int): The maximum number of messages to load. Defaults to 4.
372
-
373
- Returns:
374
- tuple[list[ChatMessage], list[ChatMessage]]: The selected and full chat history.
375
-
376
- Raises:
377
- Exception: If the loading fails.
378
- """
379
- full_history = await get_full_history_async(
380
- event_user_id=self.user_id,
381
- event_company_id=self.company_id,
382
- event_payload_chat_id=self.chat_id,
383
- )
384
- selected_history = get_selection_from_history(
385
- full_history=full_history,
386
- max_tokens=int(round(token_limit * percent_of_max_tokens)),
387
- max_messages=max_messages,
388
- )
389
-
390
- return full_history, selected_history
391
-
392
- def create_assistant_message(
393
- self,
394
- content: str,
395
- original_content: str | None = None,
396
- references: list[ContentReference] = [],
397
- debug_info: dict = {},
398
- set_completed_at: bool | None = False,
399
- ) -> ChatMessage:
400
- """
401
- Creates a message in the chat session synchronously.
402
-
403
- Args:
404
- content (str): The content for the message.
405
- original_content (str, optional): The original content for the message.
406
- references (list[ContentReference]): list of ContentReference objects. Defaults to None.
407
- debug_info (dict[str, Any]]): Debug information. Defaults to None.
408
- set_completed_at (Optional[bool]): Whether to set the completedAt field with the current date time. Defaults to False.
409
-
410
- Returns:
411
- ChatMessage: The created message.
412
-
413
- Raises:
414
- Exception: If the creation fails.
415
- """
416
- chat_message = create_message(
417
- user_id=self.user_id,
418
- company_id=self.company_id,
419
- chat_id=self.chat_id,
420
- assistant_id=self.assistant_id,
421
- role=ChatMessageRole.ASSISTANT,
422
- content=content,
423
- original_content=original_content,
424
- references=references,
425
- debug_info=debug_info,
426
- set_completed_at=set_completed_at,
427
- )
428
- # Update the assistant message id
429
- self.assistant_message_id = chat_message.id
430
- return chat_message
431
-
432
- async def create_assistant_message_async(
433
- self,
434
- content: str,
435
- original_content: str | None = None,
436
- references: list[ContentReference] = [],
437
- debug_info: dict = {},
438
- set_completed_at: bool | None = False,
439
- ) -> ChatMessage:
440
- """
441
- Creates a message in the chat session asynchronously.
442
-
443
- Args:
444
- content (str): The content for the message.
445
- original_content (str, optional): The original content for the message.
446
- references (list[ContentReference]): list of references. Defaults to None.
447
- debug_info (dict[str, Any]]): Debug information. Defaults to None.
448
- set_completed_at (Optional[bool]): Whether to set the completedAt field with the current date time. Defaults to False.
449
-
450
- Returns:
451
- ChatMessage: The created message.
452
-
453
- Raises:
454
- Exception: If the creation fails.
455
- """
456
-
457
- chat_message = await create_message_async(
458
- user_id=self.user_id,
459
- company_id=self.company_id,
460
- chat_id=self.chat_id,
461
- assistant_id=self.assistant_id,
462
- role=ChatMessageRole.ASSISTANT,
463
- content=content,
464
- original_content=original_content,
465
- references=references,
466
- debug_info=debug_info,
467
- set_completed_at=set_completed_at,
468
- )
469
- # Update the assistant message id
470
- self.assistant_message_id = chat_message.id
471
- return chat_message
472
-
473
- def create_user_message(
474
- self,
475
- content: str,
476
- original_content: str | None = None,
477
- references: list[ContentReference] = [],
478
- debug_info: dict = {},
479
- set_completed_at: bool | None = False,
480
- ) -> ChatMessage:
481
- """
482
- Creates a user message in the chat session synchronously.
483
-
484
- Args:
485
- content (str): The content for the message.
486
- original_content (str, optional): The original content for the message.
487
- references (list[ContentReference]): list of ContentReference objects. Defaults to None.
488
- debug_info (dict[str, Any]]): Debug information. Defaults to None.
489
- set_completed_at (Optional[bool]): Whether to set the completedAt field with the current date time. Defaults to False.
490
-
491
- Returns:
492
- ChatMessage: The created message.
493
-
494
- Raises:
495
- Exception: If the creation fails.
496
- """
497
- chat_message = create_message(
498
- user_id=self.user_id,
499
- company_id=self.company_id,
500
- chat_id=self.chat_id,
501
- assistant_id=self.assistant_id,
502
- role=ChatMessageRole.USER,
503
- content=content,
504
- original_content=original_content,
505
- references=references,
506
- debug_info=debug_info,
507
- set_completed_at=set_completed_at,
508
- )
509
- # Update the user message id
510
- self.user_message_id = chat_message.id
511
- return chat_message
512
-
513
- async def create_user_message_async(
514
- self,
515
- content: str,
516
- original_content: str | None = None,
517
- references: list[ContentReference] = [],
518
- debug_info: dict = {},
519
- set_completed_at: bool | None = False,
520
- ) -> ChatMessage:
521
- """
522
- Creates a user message in the chat session asynchronously.
523
-
524
- Args:
525
- content (str): The content for the message.
526
- original_content (str, optional): The original content for the message.
527
- references (list[ContentReference]): list of references. Defaults to None.
528
- debug_info (dict[str, Any]]): Debug information. Defaults to None.
529
- set_completed_at (Optional[bool]): Whether to set the completedAt field with the current date time. Defaults to False.
530
-
531
- Returns:
532
- ChatMessage: The created message.
533
-
534
- Raises:
535
- Exception: If the creation fails.
536
- """
537
-
538
- chat_message = await create_message_async(
539
- user_id=self.user_id,
540
- company_id=self.company_id,
541
- chat_id=self.chat_id,
542
- assistant_id=self.assistant_id,
543
- role=ChatMessageRole.USER,
544
- content=content,
545
- original_content=original_content,
546
- references=references,
547
- debug_info=debug_info,
548
- set_completed_at=set_completed_at,
549
- )
550
- # Update the user message id
551
- self.user_message_id = chat_message.id
552
- return chat_message
553
-
554
- def create_message_assessment(
555
- self,
556
- assistant_message_id: str,
557
- status: ChatMessageAssessmentStatus,
558
- type: ChatMessageAssessmentType,
559
- title: str | None = None,
560
- explanation: str | None = None,
561
- label: ChatMessageAssessmentLabel | None = None,
562
- is_visible: bool = True,
563
- ) -> ChatMessageAssessment:
564
- """
565
- Creates a message assessment for an assistant message synchronously.
566
-
567
- Args:
568
- assistant_message_id (str): The ID of the assistant message to assess
569
- status (MessageAssessmentStatus): The status of the assessment (e.g. "DONE")
570
- type (MessageAssessmentType): The type of assessment (e.g. "HALLUCINATION")
571
- title (str | None): The title of the assessment
572
- explanation (str | None): Explanation of the assessment
573
- label (MessageAssessmentLabel | None): The assessment label (e.g. "RED")
574
- is_visible (bool): Whether the assessment is visible to users. Defaults to True.
575
-
576
- Returns:
577
- ChatMessageAssessment: The created message assessment
578
-
579
- Raises:
580
- Exception: If the creation fails
581
- """
582
- return create_message_assessment(
583
- user_id=self.user_id,
584
- company_id=self.company_id,
585
- assistant_message_id=assistant_message_id,
586
- status=status,
587
- type=type,
588
- title=title,
589
- explanation=explanation,
590
- label=label,
591
- is_visible=is_visible,
592
- )
593
-
594
- async def create_message_assessment_async(
595
- self,
596
- assistant_message_id: str,
597
- status: ChatMessageAssessmentStatus,
598
- type: ChatMessageAssessmentType,
599
- title: str | None = None,
600
- explanation: str | None = None,
601
- label: ChatMessageAssessmentLabel | None = None,
602
- is_visible: bool = True,
603
- ) -> ChatMessageAssessment:
604
- """
605
- Creates a message assessment for an assistant message asynchronously.
606
-
607
- Args:
608
- assistant_message_id (str): The ID of the assistant message to assess
609
- status (ChatMessageAssessmentStatus): The status of the assessment (e.g. "DONE")
610
- type (ChatMessageAssessmentType): The type of assessment (e.g. "HALLUCINATION")
611
- title (str | None): The title of the assessment
612
- explanation (str | None): Explanation of the assessment
613
- label (ChatMessageAssessmentLabel | None): The assessment label (e.g. "RED")
614
- is_visible (bool): Whether the assessment is visible to users. Defaults to True.
615
-
616
- Returns:
617
- ChatMessageAssessment: The created message assessment
618
-
619
- Raises:
620
- Exception: If the creation fails
621
- """
622
- return await create_message_assessment_async(
623
- user_id=self.user_id,
624
- company_id=self.company_id,
625
- assistant_message_id=assistant_message_id,
626
- status=status,
627
- type=type,
628
- title=title,
629
- explanation=explanation,
630
- label=label,
631
- is_visible=is_visible,
632
- )
633
-
634
- def modify_message_assessment(
635
- self,
636
- assistant_message_id: str,
637
- status: ChatMessageAssessmentStatus,
638
- type: ChatMessageAssessmentType,
639
- title: str | None = None,
640
- explanation: str | None = None,
641
- label: ChatMessageAssessmentLabel | None = None,
642
- ) -> ChatMessageAssessment:
643
- """
644
- Modifies a message assessment for an assistant message synchronously.
645
-
646
- Args:
647
- assistant_message_id (str): The ID of the assistant message to assess
648
- status (MessageAssessmentStatus): The status of the assessment (e.g. "DONE")
649
- title (str | None): The title of the assessment
650
- explanation (str | None): Explanation of the assessment
651
- label (ChatMessageAssessmentLabel | None): The assessment label (e.g. "RED")
652
- type (ChatMessageAssessmentType): The type of assessment (e.g. "HALLUCINATION")
653
-
654
- Returns:
655
- dict: The modified message assessment
656
-
657
- Raises:
658
- Exception: If the modification fails
659
- """
660
- return modify_message_assessment(
661
- user_id=self.user_id,
662
- company_id=self.company_id,
663
- assistant_message_id=assistant_message_id,
664
- status=status,
665
- type=type,
666
- title=title,
667
- explanation=explanation,
668
- label=label,
669
- )
670
-
671
- async def modify_message_assessment_async(
672
- self,
673
- assistant_message_id: str,
674
- type: ChatMessageAssessmentType,
675
- title: str | None = None,
676
- status: ChatMessageAssessmentStatus | None = None,
677
- explanation: str | None = None,
678
- label: ChatMessageAssessmentLabel | None = None,
679
- ) -> ChatMessageAssessment:
680
- """
681
- Modifies a message assessment for an assistant message asynchronously.
682
-
683
- Args:
684
- assistant_message_id (str): The ID of the assistant message to assess
685
- status (ChatMessageAssessmentStatus): The status of the assessment (e.g. "DONE")
686
- title (str | None): The title of the assessment
687
- explanation (str | None): Explanation of the assessment
688
- label (ChatMessageAssessmentLabel | None): The assessment label (e.g. "RED")
689
- type (ChatMessageAssessmentType): The type of assessment (e.g. "HALLUCINATION")
690
-
691
- Returns:
692
- ChatMessageAssessment: The modified message assessment
693
-
694
- Raises:
695
- Exception: If the modification fails
696
- """
697
- return await modify_message_assessment_async(
698
- user_id=self.user_id,
699
- company_id=self.company_id,
700
- assistant_message_id=assistant_message_id,
701
- status=status,
702
- type=type,
703
- title=title,
704
- explanation=explanation,
705
- label=label,
706
- )
707
-
708
- def stream_complete(
709
- self,
710
- messages: LanguageModelMessages,
711
- model_name: LanguageModelName | str,
712
- content_chunks: list[ContentChunk] = [],
713
- debug_info: dict = {},
714
- temperature: float = DEFAULT_COMPLETE_TEMPERATURE,
715
- timeout: int = DEFAULT_COMPLETE_TIMEOUT,
716
- tools: Optional[list[LanguageModelTool]] = None,
717
- start_text: Optional[str] = None,
718
- other_options: Optional[dict] = None,
719
- ) -> LanguageModelStreamResponse:
720
- """
721
- Streams a completion in the chat session synchronously.
722
- """
723
- [
724
- company_id,
725
- user_id,
726
- assistant_message_id,
727
- user_message_id,
728
- chat_id,
729
- assistant_id,
730
- ] = validate_required_values(
731
- [
732
- self.company_id,
733
- self.user_id,
734
- self.assistant_message_id,
735
- self.user_message_id,
736
- self.chat_id,
737
- self.assistant_id,
738
- ]
739
- )
740
-
741
- return stream_complete_to_chat(
742
- company_id=company_id,
743
- user_id=user_id,
744
- assistant_message_id=assistant_message_id,
745
- user_message_id=user_message_id,
746
- chat_id=chat_id,
747
- assistant_id=assistant_id,
748
- messages=messages,
749
- model_name=model_name,
750
- content_chunks=content_chunks,
751
- debug_info=debug_info,
752
- temperature=temperature,
753
- timeout=timeout,
754
- tools=tools,
755
- start_text=start_text,
756
- other_options=other_options,
757
- )
758
-
759
- async def stream_complete_async(
760
- self,
761
- messages: LanguageModelMessages,
762
- model_name: LanguageModelName | str,
763
- content_chunks: list[ContentChunk] = [],
764
- debug_info: dict = {},
765
- temperature: float = DEFAULT_COMPLETE_TEMPERATURE,
766
- timeout: int = DEFAULT_COMPLETE_TIMEOUT,
767
- tools: Optional[list[LanguageModelTool]] = None,
768
- start_text: Optional[str] = None,
769
- other_options: Optional[dict] = None,
770
- ) -> LanguageModelStreamResponse:
771
- """
772
- Streams a completion in the chat session asynchronously.
773
- """
774
-
775
- [
776
- company_id,
777
- user_id,
778
- assistant_message_id,
779
- user_message_id,
780
- chat_id,
781
- assistant_id,
782
- ] = validate_required_values(
783
- [
784
- self.company_id,
785
- self.user_id,
786
- self.assistant_message_id,
787
- self.user_message_id,
788
- self.chat_id,
789
- self.assistant_id,
790
- ]
791
- )
792
-
793
- return await stream_complete_to_chat_async(
794
- company_id=company_id,
795
- user_id=user_id,
796
- assistant_message_id=assistant_message_id,
797
- user_message_id=user_message_id,
798
- chat_id=chat_id,
799
- assistant_id=assistant_id,
800
- messages=messages,
801
- model_name=model_name,
802
- content_chunks=content_chunks,
803
- debug_info=debug_info,
804
- temperature=temperature,
805
- timeout=timeout,
806
- tools=tools,
807
- start_text=start_text,
808
- other_options=other_options,
809
- )
92
+ __all__ = [
93
+ # Main Service Class
94
+ "ChatService",
95
+ "ChatServiceDeprecated",
96
+ # Chat Functions
97
+ "create_message",
98
+ "create_message_assessment",
99
+ "create_message_assessment_async",
100
+ "create_message_async",
101
+ "create_message_execution",
102
+ "create_message_execution_async",
103
+ "create_message_log",
104
+ "create_message_log_async",
105
+ "get_full_history",
106
+ "get_full_history_async",
107
+ "get_message_execution",
108
+ "get_message_execution_async",
109
+ "get_selection_from_history",
110
+ "modify_message",
111
+ "modify_message_assessment",
112
+ "modify_message_assessment_async",
113
+ "modify_message_async",
114
+ "stream_complete_with_references",
115
+ "stream_complete_with_references_async",
116
+ "update_message_execution",
117
+ "update_message_execution_async",
118
+ "update_message_log",
119
+ "update_message_log_async",
120
+ # Chat Constants
121
+ "DEFAULT_MAX_MESSAGES",
122
+ "DEFAULT_PERCENT_OF_MAX_TOKENS",
123
+ "DOMAIN_NAME",
124
+ # Chat Schemas
125
+ "ChatMessage",
126
+ "ChatMessageAssessment",
127
+ "ChatMessageAssessmentLabel",
128
+ "ChatMessageAssessmentStatus",
129
+ "ChatMessageAssessmentType",
130
+ "ChatMessageRole",
131
+ "MessageExecution",
132
+ "MessageExecutionType",
133
+ "MessageExecutionUpdateStatus",
134
+ "MessageLog",
135
+ "MessageLogDetails",
136
+ "MessageLogStatus",
137
+ "MessageLogUncitedReferences",
138
+ # Content Functions
139
+ "download_content_to_bytes",
140
+ "search_contents",
141
+ "upload_content_from_bytes",
142
+ # Content Schemas
143
+ "Content",
144
+ "ContentChunk",
145
+ "ContentReference",
146
+ # Language Model Constants
147
+ "DEFAULT_COMPLETE_TEMPERATURE",
148
+ "DEFAULT_COMPLETE_TIMEOUT",
149
+ # Language Model Infos
150
+ "LanguageModelName",
151
+ # Language Model Schemas
152
+ "LanguageModelMessages",
153
+ "LanguageModelResponse",
154
+ "LanguageModelStreamResponse",
155
+ "LanguageModelTool",
156
+ "LanguageModelToolDescription",
157
+ ]