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.
- unique_toolkit/__init__.py +28 -1
- unique_toolkit/_common/api_calling/human_verification_manager.py +343 -0
- unique_toolkit/_common/base_model_type_attribute.py +303 -0
- unique_toolkit/_common/chunk_relevancy_sorter/config.py +49 -0
- unique_toolkit/_common/chunk_relevancy_sorter/exception.py +5 -0
- unique_toolkit/_common/chunk_relevancy_sorter/schemas.py +46 -0
- unique_toolkit/_common/chunk_relevancy_sorter/service.py +374 -0
- unique_toolkit/_common/chunk_relevancy_sorter/tests/test_service.py +275 -0
- unique_toolkit/_common/default_language_model.py +12 -0
- unique_toolkit/_common/docx_generator/__init__.py +7 -0
- unique_toolkit/_common/docx_generator/config.py +12 -0
- unique_toolkit/_common/docx_generator/schemas.py +80 -0
- unique_toolkit/_common/docx_generator/service.py +252 -0
- unique_toolkit/_common/docx_generator/template/Doc Template.docx +0 -0
- unique_toolkit/_common/endpoint_builder.py +305 -0
- unique_toolkit/_common/endpoint_requestor.py +430 -0
- unique_toolkit/_common/exception.py +24 -0
- unique_toolkit/_common/feature_flags/schema.py +9 -0
- unique_toolkit/_common/pydantic/rjsf_tags.py +936 -0
- unique_toolkit/_common/pydantic_helpers.py +154 -0
- unique_toolkit/_common/referencing.py +53 -0
- unique_toolkit/_common/string_utilities.py +140 -0
- unique_toolkit/_common/tests/test_referencing.py +521 -0
- unique_toolkit/_common/tests/test_string_utilities.py +506 -0
- unique_toolkit/_common/token/image_token_counting.py +67 -0
- unique_toolkit/_common/token/token_counting.py +204 -0
- unique_toolkit/_common/utils/__init__.py +1 -0
- unique_toolkit/_common/utils/files.py +43 -0
- unique_toolkit/_common/utils/structured_output/__init__.py +1 -0
- unique_toolkit/_common/utils/structured_output/schema.py +5 -0
- unique_toolkit/_common/utils/write_configuration.py +51 -0
- unique_toolkit/_common/validators.py +101 -4
- unique_toolkit/agentic/__init__.py +1 -0
- unique_toolkit/agentic/debug_info_manager/debug_info_manager.py +28 -0
- unique_toolkit/agentic/debug_info_manager/test/test_debug_info_manager.py +278 -0
- unique_toolkit/agentic/evaluation/config.py +36 -0
- unique_toolkit/{evaluators → agentic/evaluation}/context_relevancy/prompts.py +25 -0
- unique_toolkit/agentic/evaluation/context_relevancy/schema.py +80 -0
- unique_toolkit/agentic/evaluation/context_relevancy/service.py +273 -0
- unique_toolkit/agentic/evaluation/evaluation_manager.py +218 -0
- unique_toolkit/agentic/evaluation/hallucination/constants.py +61 -0
- unique_toolkit/agentic/evaluation/hallucination/hallucination_evaluation.py +111 -0
- unique_toolkit/{evaluators → agentic/evaluation}/hallucination/prompts.py +1 -1
- unique_toolkit/{evaluators → agentic/evaluation}/hallucination/service.py +16 -15
- unique_toolkit/{evaluators → agentic/evaluation}/hallucination/utils.py +30 -20
- unique_toolkit/{evaluators → agentic/evaluation}/output_parser.py +20 -2
- unique_toolkit/{evaluators → agentic/evaluation}/schemas.py +27 -7
- unique_toolkit/agentic/evaluation/tests/test_context_relevancy_service.py +253 -0
- unique_toolkit/agentic/evaluation/tests/test_output_parser.py +87 -0
- unique_toolkit/agentic/history_manager/history_construction_with_contents.py +297 -0
- unique_toolkit/agentic/history_manager/history_manager.py +242 -0
- unique_toolkit/agentic/history_manager/loop_token_reducer.py +484 -0
- unique_toolkit/agentic/history_manager/utils.py +96 -0
- unique_toolkit/agentic/postprocessor/postprocessor_manager.py +212 -0
- unique_toolkit/agentic/reference_manager/reference_manager.py +103 -0
- unique_toolkit/agentic/responses_api/__init__.py +19 -0
- unique_toolkit/agentic/responses_api/postprocessors/code_display.py +63 -0
- unique_toolkit/agentic/responses_api/postprocessors/generated_files.py +145 -0
- unique_toolkit/agentic/responses_api/stream_handler.py +15 -0
- unique_toolkit/agentic/short_term_memory_manager/persistent_short_term_memory_manager.py +141 -0
- unique_toolkit/agentic/thinking_manager/thinking_manager.py +103 -0
- unique_toolkit/agentic/tools/__init__.py +1 -0
- unique_toolkit/agentic/tools/a2a/__init__.py +36 -0
- unique_toolkit/agentic/tools/a2a/config.py +17 -0
- unique_toolkit/agentic/tools/a2a/evaluation/__init__.py +15 -0
- unique_toolkit/agentic/tools/a2a/evaluation/_utils.py +66 -0
- unique_toolkit/agentic/tools/a2a/evaluation/config.py +55 -0
- unique_toolkit/agentic/tools/a2a/evaluation/evaluator.py +260 -0
- unique_toolkit/agentic/tools/a2a/evaluation/summarization_user_message.j2 +9 -0
- unique_toolkit/agentic/tools/a2a/manager.py +55 -0
- unique_toolkit/agentic/tools/a2a/postprocessing/__init__.py +21 -0
- unique_toolkit/agentic/tools/a2a/postprocessing/_display_utils.py +185 -0
- unique_toolkit/agentic/tools/a2a/postprocessing/_ref_utils.py +73 -0
- unique_toolkit/agentic/tools/a2a/postprocessing/config.py +45 -0
- unique_toolkit/agentic/tools/a2a/postprocessing/display.py +180 -0
- unique_toolkit/agentic/tools/a2a/postprocessing/references.py +101 -0
- unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display_utils.py +1335 -0
- unique_toolkit/agentic/tools/a2a/postprocessing/test/test_ref_utils.py +603 -0
- unique_toolkit/agentic/tools/a2a/prompts.py +46 -0
- unique_toolkit/agentic/tools/a2a/response_watcher/__init__.py +6 -0
- unique_toolkit/agentic/tools/a2a/response_watcher/service.py +91 -0
- unique_toolkit/agentic/tools/a2a/tool/__init__.py +4 -0
- unique_toolkit/agentic/tools/a2a/tool/_memory.py +26 -0
- unique_toolkit/agentic/tools/a2a/tool/_schema.py +9 -0
- unique_toolkit/agentic/tools/a2a/tool/config.py +73 -0
- unique_toolkit/agentic/tools/a2a/tool/service.py +306 -0
- unique_toolkit/agentic/tools/agent_chunks_hanlder.py +65 -0
- unique_toolkit/agentic/tools/config.py +167 -0
- unique_toolkit/agentic/tools/factory.py +44 -0
- unique_toolkit/agentic/tools/mcp/__init__.py +4 -0
- unique_toolkit/agentic/tools/mcp/manager.py +71 -0
- unique_toolkit/agentic/tools/mcp/models.py +28 -0
- unique_toolkit/agentic/tools/mcp/tool_wrapper.py +234 -0
- unique_toolkit/agentic/tools/openai_builtin/__init__.py +11 -0
- unique_toolkit/agentic/tools/openai_builtin/base.py +30 -0
- unique_toolkit/agentic/tools/openai_builtin/code_interpreter/__init__.py +8 -0
- unique_toolkit/agentic/tools/openai_builtin/code_interpreter/config.py +57 -0
- unique_toolkit/agentic/tools/openai_builtin/code_interpreter/service.py +230 -0
- unique_toolkit/agentic/tools/openai_builtin/manager.py +62 -0
- unique_toolkit/agentic/tools/schemas.py +141 -0
- unique_toolkit/agentic/tools/test/test_mcp_manager.py +536 -0
- unique_toolkit/agentic/tools/test/test_tool_progress_reporter.py +445 -0
- unique_toolkit/agentic/tools/tool.py +183 -0
- unique_toolkit/agentic/tools/tool_manager.py +523 -0
- unique_toolkit/agentic/tools/tool_progress_reporter.py +285 -0
- unique_toolkit/agentic/tools/utils/__init__.py +19 -0
- unique_toolkit/agentic/tools/utils/execution/__init__.py +1 -0
- unique_toolkit/agentic/tools/utils/execution/execution.py +286 -0
- unique_toolkit/agentic/tools/utils/source_handling/__init__.py +0 -0
- unique_toolkit/agentic/tools/utils/source_handling/schema.py +21 -0
- unique_toolkit/agentic/tools/utils/source_handling/source_formatting.py +207 -0
- unique_toolkit/agentic/tools/utils/source_handling/tests/test_source_formatting.py +216 -0
- unique_toolkit/app/__init__.py +6 -0
- unique_toolkit/app/dev_util.py +180 -0
- unique_toolkit/app/init_sdk.py +32 -1
- unique_toolkit/app/schemas.py +198 -31
- unique_toolkit/app/unique_settings.py +367 -0
- unique_toolkit/chat/__init__.py +8 -1
- unique_toolkit/chat/deprecated/service.py +232 -0
- unique_toolkit/chat/functions.py +642 -77
- unique_toolkit/chat/rendering.py +34 -0
- unique_toolkit/chat/responses_api.py +461 -0
- unique_toolkit/chat/schemas.py +133 -2
- unique_toolkit/chat/service.py +115 -767
- unique_toolkit/content/functions.py +153 -4
- unique_toolkit/content/schemas.py +122 -15
- unique_toolkit/content/service.py +278 -44
- unique_toolkit/content/smart_rules.py +301 -0
- unique_toolkit/content/utils.py +8 -3
- unique_toolkit/embedding/service.py +102 -11
- unique_toolkit/framework_utilities/__init__.py +1 -0
- unique_toolkit/framework_utilities/langchain/client.py +71 -0
- unique_toolkit/framework_utilities/langchain/history.py +19 -0
- unique_toolkit/framework_utilities/openai/__init__.py +6 -0
- unique_toolkit/framework_utilities/openai/client.py +83 -0
- unique_toolkit/framework_utilities/openai/message_builder.py +229 -0
- unique_toolkit/framework_utilities/utils.py +23 -0
- unique_toolkit/language_model/__init__.py +3 -0
- unique_toolkit/language_model/builder.py +27 -11
- unique_toolkit/language_model/default_language_model.py +3 -0
- unique_toolkit/language_model/functions.py +327 -43
- unique_toolkit/language_model/infos.py +992 -50
- unique_toolkit/language_model/reference.py +242 -0
- unique_toolkit/language_model/schemas.py +475 -48
- unique_toolkit/language_model/service.py +228 -27
- unique_toolkit/protocols/support.py +145 -0
- unique_toolkit/services/__init__.py +7 -0
- unique_toolkit/services/chat_service.py +1630 -0
- unique_toolkit/services/knowledge_base.py +861 -0
- unique_toolkit/short_term_memory/service.py +178 -41
- unique_toolkit/smart_rules/__init__.py +0 -0
- unique_toolkit/smart_rules/compile.py +56 -0
- unique_toolkit/test_utilities/events.py +197 -0
- {unique_toolkit-0.7.7.dist-info → unique_toolkit-1.23.0.dist-info}/METADATA +606 -7
- unique_toolkit-1.23.0.dist-info/RECORD +182 -0
- unique_toolkit/evaluators/__init__.py +0 -1
- unique_toolkit/evaluators/config.py +0 -35
- unique_toolkit/evaluators/constants.py +0 -1
- unique_toolkit/evaluators/context_relevancy/constants.py +0 -32
- unique_toolkit/evaluators/context_relevancy/service.py +0 -53
- unique_toolkit/evaluators/context_relevancy/utils.py +0 -142
- unique_toolkit/evaluators/hallucination/constants.py +0 -41
- unique_toolkit-0.7.7.dist-info/RECORD +0 -64
- /unique_toolkit/{evaluators → agentic/evaluation}/exception.py +0 -0
- {unique_toolkit-0.7.7.dist-info → unique_toolkit-1.23.0.dist-info}/LICENSE +0 -0
- {unique_toolkit-0.7.7.dist-info → unique_toolkit-1.23.0.dist-info}/WHEEL +0 -0
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import logging
|
|
2
|
-
from typing import Optional, Type
|
|
2
|
+
from typing import Any, Optional, Type, overload
|
|
3
3
|
|
|
4
4
|
from pydantic import BaseModel
|
|
5
5
|
from typing_extensions import deprecated
|
|
6
6
|
|
|
7
7
|
from unique_toolkit._common.validate_required_values import validate_required_values
|
|
8
8
|
from unique_toolkit.app.schemas import BaseEvent, ChatEvent, Event
|
|
9
|
+
from unique_toolkit.app.unique_settings import UniqueSettings
|
|
10
|
+
from unique_toolkit.content.schemas import ContentChunk
|
|
9
11
|
from unique_toolkit.language_model.constants import (
|
|
10
12
|
DEFAULT_COMPLETE_TEMPERATURE,
|
|
11
13
|
DEFAULT_COMPLETE_TIMEOUT,
|
|
@@ -14,12 +16,16 @@ from unique_toolkit.language_model.constants import (
|
|
|
14
16
|
from unique_toolkit.language_model.functions import (
|
|
15
17
|
complete,
|
|
16
18
|
complete_async,
|
|
19
|
+
complete_with_references,
|
|
20
|
+
complete_with_references_async,
|
|
17
21
|
)
|
|
18
22
|
from unique_toolkit.language_model.infos import LanguageModelName
|
|
19
23
|
from unique_toolkit.language_model.schemas import (
|
|
20
24
|
LanguageModelMessages,
|
|
21
25
|
LanguageModelResponse,
|
|
26
|
+
LanguageModelStreamResponse,
|
|
22
27
|
LanguageModelTool,
|
|
28
|
+
LanguageModelToolDescription,
|
|
23
29
|
)
|
|
24
30
|
|
|
25
31
|
logger = logging.getLogger(f"toolkit.{DOMAIN_NAME}.{__name__}")
|
|
@@ -28,34 +34,76 @@ logger = logging.getLogger(f"toolkit.{DOMAIN_NAME}.{__name__}")
|
|
|
28
34
|
class LanguageModelService:
|
|
29
35
|
"""
|
|
30
36
|
Provides methods to interact with the Language Model by generating responses.
|
|
37
|
+
"""
|
|
38
|
+
|
|
39
|
+
@deprecated(
|
|
40
|
+
"Use __init__ with company_id and user_id instead or use the classmethod `from_event`"
|
|
41
|
+
)
|
|
42
|
+
@overload
|
|
43
|
+
def __init__(self, event: Event | ChatEvent | BaseEvent): ...
|
|
31
44
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
45
|
+
"""
|
|
46
|
+
Initialize the LanguageModelService with an event (deprecated)
|
|
47
|
+
"""
|
|
48
|
+
|
|
49
|
+
@overload
|
|
50
|
+
def __init__(self, *, company_id: str, user_id: str): ...
|
|
51
|
+
|
|
52
|
+
"""
|
|
53
|
+
Initialize the LanguageModelService with a company_id and user_id.
|
|
37
54
|
"""
|
|
38
55
|
|
|
39
56
|
def __init__(
|
|
40
57
|
self,
|
|
41
|
-
event: Event | BaseEvent | None = None,
|
|
58
|
+
event: Event | ChatEvent | BaseEvent | None = None,
|
|
42
59
|
company_id: str | None = None,
|
|
43
60
|
user_id: str | None = None,
|
|
44
|
-
|
|
45
|
-
assistant_id: str | None = None,
|
|
61
|
+
**kwargs: dict[str, Any], # only here for backward compatibility
|
|
46
62
|
):
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
if event:
|
|
54
|
-
self.company_id = event.company_id
|
|
55
|
-
self.user_id = event.user_id
|
|
63
|
+
if isinstance(event, (ChatEvent, Event)):
|
|
64
|
+
self._event = event
|
|
65
|
+
self._chat_id: str | None = event.payload.chat_id
|
|
66
|
+
self._assistant_id: str | None = event.payload.assistant_id
|
|
67
|
+
self._company_id = event.company_id
|
|
68
|
+
self._user_id = event.user_id
|
|
56
69
|
if isinstance(event, (ChatEvent, Event)):
|
|
57
|
-
self.
|
|
58
|
-
self.
|
|
70
|
+
self._chat_id = event.payload.chat_id
|
|
71
|
+
self._assistant_id = event.payload.assistant_id
|
|
72
|
+
elif isinstance(event, BaseEvent):
|
|
73
|
+
self._event = event
|
|
74
|
+
self._company_id = event.company_id
|
|
75
|
+
self._user_id = event.user_id
|
|
76
|
+
self._chat_id: str | None = None
|
|
77
|
+
self._assistant_id: str | None = None
|
|
78
|
+
else:
|
|
79
|
+
[company_id, user_id] = validate_required_values([company_id, user_id])
|
|
80
|
+
self._event = None
|
|
81
|
+
self._company_id: str = company_id
|
|
82
|
+
self._user_id: str = user_id
|
|
83
|
+
self._chat_id: str | None = None
|
|
84
|
+
self._assistant_id: str | None = None
|
|
85
|
+
|
|
86
|
+
@classmethod
|
|
87
|
+
def from_event(cls, event: BaseEvent):
|
|
88
|
+
"""
|
|
89
|
+
Initialize the LanguageModelService with an event.
|
|
90
|
+
"""
|
|
91
|
+
return cls(company_id=event.company_id, user_id=event.user_id)
|
|
92
|
+
|
|
93
|
+
@classmethod
|
|
94
|
+
def from_settings(cls, settings: UniqueSettings | str | None = None):
|
|
95
|
+
"""
|
|
96
|
+
Initialize the LanguageModelService with a settings object.
|
|
97
|
+
"""
|
|
98
|
+
if settings is None:
|
|
99
|
+
settings = UniqueSettings.from_env_auto_with_sdk_init()
|
|
100
|
+
elif isinstance(settings, str):
|
|
101
|
+
settings = UniqueSettings.from_env_auto_with_sdk_init(filename=settings)
|
|
102
|
+
|
|
103
|
+
return cls(
|
|
104
|
+
company_id=settings.auth.company_id.get_secret_value(),
|
|
105
|
+
user_id=settings.auth.user_id.get_secret_value(),
|
|
106
|
+
)
|
|
59
107
|
|
|
60
108
|
@property
|
|
61
109
|
@deprecated(
|
|
@@ -70,13 +118,117 @@ class LanguageModelService:
|
|
|
70
118
|
"""
|
|
71
119
|
return self._event
|
|
72
120
|
|
|
121
|
+
@property
|
|
122
|
+
@deprecated(
|
|
123
|
+
"The company_id property is deprecated and will be removed in a future version."
|
|
124
|
+
)
|
|
125
|
+
def company_id(self) -> str | None:
|
|
126
|
+
"""
|
|
127
|
+
Get the company identifier (deprecated).
|
|
128
|
+
|
|
129
|
+
Returns:
|
|
130
|
+
str | None: The company identifier.
|
|
131
|
+
"""
|
|
132
|
+
return self._company_id
|
|
133
|
+
|
|
134
|
+
@company_id.setter
|
|
135
|
+
@deprecated(
|
|
136
|
+
"The company_id setter is deprecated and will be removed in a future version."
|
|
137
|
+
)
|
|
138
|
+
def company_id(self, value: str) -> None:
|
|
139
|
+
"""
|
|
140
|
+
Set the company identifier (deprecated).
|
|
141
|
+
|
|
142
|
+
Args:
|
|
143
|
+
value (str | None): The company identifier.
|
|
144
|
+
"""
|
|
145
|
+
self._company_id = value
|
|
146
|
+
|
|
147
|
+
@property
|
|
148
|
+
@deprecated(
|
|
149
|
+
"The user_id property is deprecated and will be removed in a future version."
|
|
150
|
+
)
|
|
151
|
+
def user_id(self) -> str | None:
|
|
152
|
+
"""
|
|
153
|
+
Get the user identifier (deprecated).
|
|
154
|
+
|
|
155
|
+
Returns:
|
|
156
|
+
str | None: The user identifier.
|
|
157
|
+
"""
|
|
158
|
+
return self._user_id
|
|
159
|
+
|
|
160
|
+
@user_id.setter
|
|
161
|
+
@deprecated(
|
|
162
|
+
"The user_id setter is deprecated and will be removed in a future version."
|
|
163
|
+
)
|
|
164
|
+
def user_id(self, value: str) -> None:
|
|
165
|
+
"""
|
|
166
|
+
Set the user identifier (deprecated).
|
|
167
|
+
|
|
168
|
+
Args:
|
|
169
|
+
value (str | None): The user identifier.
|
|
170
|
+
"""
|
|
171
|
+
self._user_id = value
|
|
172
|
+
|
|
173
|
+
@property
|
|
174
|
+
@deprecated(
|
|
175
|
+
"The chat_id property is deprecated and will be removed in a future version."
|
|
176
|
+
)
|
|
177
|
+
def chat_id(self) -> str | None:
|
|
178
|
+
"""
|
|
179
|
+
Get the chat identifier (deprecated).
|
|
180
|
+
|
|
181
|
+
Returns:
|
|
182
|
+
str | None: The chat identifier.
|
|
183
|
+
"""
|
|
184
|
+
return self._chat_id
|
|
185
|
+
|
|
186
|
+
@chat_id.setter
|
|
187
|
+
@deprecated(
|
|
188
|
+
"The chat_id setter is deprecated and will be removed in a future version."
|
|
189
|
+
)
|
|
190
|
+
def chat_id(self, value: str | None) -> None:
|
|
191
|
+
"""
|
|
192
|
+
Set the chat identifier (deprecated).
|
|
193
|
+
|
|
194
|
+
Args:
|
|
195
|
+
value (str | None): The chat identifier.
|
|
196
|
+
"""
|
|
197
|
+
self._chat_id = value
|
|
198
|
+
|
|
199
|
+
@property
|
|
200
|
+
@deprecated(
|
|
201
|
+
"The assistant_id property is deprecated and will be removed in a future version."
|
|
202
|
+
)
|
|
203
|
+
def assistant_id(self) -> str | None:
|
|
204
|
+
"""
|
|
205
|
+
Get the assistant identifier (deprecated).
|
|
206
|
+
|
|
207
|
+
Returns:
|
|
208
|
+
str | None: The assistant identifier.
|
|
209
|
+
"""
|
|
210
|
+
return self._assistant_id
|
|
211
|
+
|
|
212
|
+
@assistant_id.setter
|
|
213
|
+
@deprecated(
|
|
214
|
+
"The assistant_id setter is deprecated and will be removed in a future version."
|
|
215
|
+
)
|
|
216
|
+
def assistant_id(self, value: str | None) -> None:
|
|
217
|
+
"""
|
|
218
|
+
Set the assistant identifier (deprecated).
|
|
219
|
+
|
|
220
|
+
Args:
|
|
221
|
+
value (str | None): The assistant identifier.
|
|
222
|
+
"""
|
|
223
|
+
self._assistant_id = value
|
|
224
|
+
|
|
73
225
|
def complete(
|
|
74
226
|
self,
|
|
75
227
|
messages: LanguageModelMessages,
|
|
76
228
|
model_name: LanguageModelName | str,
|
|
77
229
|
temperature: float = DEFAULT_COMPLETE_TEMPERATURE,
|
|
78
230
|
timeout: int = DEFAULT_COMPLETE_TIMEOUT,
|
|
79
|
-
tools: Optional[list[LanguageModelTool]] = None,
|
|
231
|
+
tools: Optional[list[LanguageModelTool | LanguageModelToolDescription]] = None,
|
|
80
232
|
structured_output_model: Optional[Type[BaseModel]] = None,
|
|
81
233
|
structured_output_enforce_schema: bool = False,
|
|
82
234
|
other_options: Optional[dict] = None,
|
|
@@ -84,10 +236,9 @@ class LanguageModelService:
|
|
|
84
236
|
"""
|
|
85
237
|
Calls the completion endpoint synchronously without streaming the response.
|
|
86
238
|
"""
|
|
87
|
-
[company_id] = validate_required_values([self.company_id])
|
|
88
239
|
|
|
89
240
|
return complete(
|
|
90
|
-
company_id=
|
|
241
|
+
company_id=self._company_id,
|
|
91
242
|
messages=messages,
|
|
92
243
|
model_name=model_name,
|
|
93
244
|
temperature=temperature,
|
|
@@ -104,7 +255,7 @@ class LanguageModelService:
|
|
|
104
255
|
model_name: LanguageModelName | str,
|
|
105
256
|
temperature: float = DEFAULT_COMPLETE_TEMPERATURE,
|
|
106
257
|
timeout: int = DEFAULT_COMPLETE_TIMEOUT,
|
|
107
|
-
tools: Optional[list[LanguageModelTool]] = None,
|
|
258
|
+
tools: Optional[list[LanguageModelTool | LanguageModelToolDescription]] = None,
|
|
108
259
|
structured_output_model: Optional[Type[BaseModel]] = None,
|
|
109
260
|
structured_output_enforce_schema: bool = False,
|
|
110
261
|
other_options: Optional[dict] = None,
|
|
@@ -112,10 +263,10 @@ class LanguageModelService:
|
|
|
112
263
|
"""
|
|
113
264
|
Calls the completion endpoint asynchronously without streaming the response.
|
|
114
265
|
"""
|
|
115
|
-
[company_id] = validate_required_values([self.company_id])
|
|
116
266
|
|
|
117
267
|
return await complete_async(
|
|
118
|
-
company_id=
|
|
268
|
+
company_id=self._company_id,
|
|
269
|
+
user_id=self._user_id,
|
|
119
270
|
messages=messages,
|
|
120
271
|
model_name=model_name,
|
|
121
272
|
temperature=temperature,
|
|
@@ -133,9 +284,10 @@ class LanguageModelService:
|
|
|
133
284
|
company_id: str,
|
|
134
285
|
messages: LanguageModelMessages,
|
|
135
286
|
model_name: LanguageModelName | str,
|
|
287
|
+
user_id: str | None = None,
|
|
136
288
|
temperature: float = DEFAULT_COMPLETE_TEMPERATURE,
|
|
137
289
|
timeout: int = DEFAULT_COMPLETE_TIMEOUT,
|
|
138
|
-
tools: Optional[list[LanguageModelTool]] = None,
|
|
290
|
+
tools: Optional[list[LanguageModelTool | LanguageModelToolDescription]] = None,
|
|
139
291
|
structured_output_model: Optional[Type[BaseModel]] = None,
|
|
140
292
|
structured_output_enforce_schema: bool = False,
|
|
141
293
|
other_options: Optional[dict] = None,
|
|
@@ -146,6 +298,7 @@ class LanguageModelService:
|
|
|
146
298
|
|
|
147
299
|
return await complete_async(
|
|
148
300
|
company_id=company_id,
|
|
301
|
+
user_id=user_id,
|
|
149
302
|
messages=messages,
|
|
150
303
|
model_name=model_name,
|
|
151
304
|
temperature=temperature,
|
|
@@ -155,3 +308,51 @@ class LanguageModelService:
|
|
|
155
308
|
structured_output_model=structured_output_model,
|
|
156
309
|
structured_output_enforce_schema=structured_output_enforce_schema,
|
|
157
310
|
)
|
|
311
|
+
|
|
312
|
+
def complete_with_references(
|
|
313
|
+
self,
|
|
314
|
+
messages: LanguageModelMessages,
|
|
315
|
+
model_name: LanguageModelName | str,
|
|
316
|
+
content_chunks: list[ContentChunk] | None = None,
|
|
317
|
+
debug_info: dict = {},
|
|
318
|
+
temperature: float = DEFAULT_COMPLETE_TEMPERATURE,
|
|
319
|
+
timeout: int = DEFAULT_COMPLETE_TIMEOUT,
|
|
320
|
+
tools: list[LanguageModelTool | LanguageModelToolDescription] | None = None,
|
|
321
|
+
start_text: str | None = None,
|
|
322
|
+
other_options: dict[str, Any] | None = None,
|
|
323
|
+
) -> LanguageModelStreamResponse:
|
|
324
|
+
return complete_with_references(
|
|
325
|
+
company_id=self._company_id,
|
|
326
|
+
messages=messages,
|
|
327
|
+
model_name=model_name,
|
|
328
|
+
content_chunks=content_chunks,
|
|
329
|
+
temperature=temperature,
|
|
330
|
+
timeout=timeout,
|
|
331
|
+
other_options=other_options,
|
|
332
|
+
tools=tools,
|
|
333
|
+
start_text=start_text,
|
|
334
|
+
)
|
|
335
|
+
|
|
336
|
+
async def complete_with_references_async(
|
|
337
|
+
self,
|
|
338
|
+
messages: LanguageModelMessages,
|
|
339
|
+
model_name: LanguageModelName | str,
|
|
340
|
+
content_chunks: list[ContentChunk] | None = None,
|
|
341
|
+
debug_info: dict = {},
|
|
342
|
+
temperature: float = DEFAULT_COMPLETE_TEMPERATURE,
|
|
343
|
+
timeout: int = DEFAULT_COMPLETE_TIMEOUT,
|
|
344
|
+
tools: list[LanguageModelTool | LanguageModelToolDescription] | None = None,
|
|
345
|
+
start_text: str | None = None,
|
|
346
|
+
other_options: dict[str, Any] | None = None,
|
|
347
|
+
) -> LanguageModelStreamResponse:
|
|
348
|
+
return await complete_with_references_async(
|
|
349
|
+
company_id=self._company_id,
|
|
350
|
+
messages=messages,
|
|
351
|
+
model_name=model_name,
|
|
352
|
+
content_chunks=content_chunks,
|
|
353
|
+
temperature=temperature,
|
|
354
|
+
timeout=timeout,
|
|
355
|
+
other_options=other_options,
|
|
356
|
+
tools=tools,
|
|
357
|
+
start_text=start_text,
|
|
358
|
+
)
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
from typing import Awaitable, Protocol, Sequence
|
|
2
|
+
|
|
3
|
+
from openai.types.chat import (
|
|
4
|
+
ChatCompletionMessageParam,
|
|
5
|
+
ChatCompletionToolChoiceOptionParam,
|
|
6
|
+
)
|
|
7
|
+
from openai.types.responses import (
|
|
8
|
+
ResponseIncludable,
|
|
9
|
+
ResponseInputItemParam,
|
|
10
|
+
ResponseOutputItem,
|
|
11
|
+
ResponseTextConfigParam,
|
|
12
|
+
ToolParam,
|
|
13
|
+
response_create_params,
|
|
14
|
+
)
|
|
15
|
+
from openai.types.shared_params import Metadata, Reasoning
|
|
16
|
+
|
|
17
|
+
from unique_toolkit.content import ContentChunk
|
|
18
|
+
from unique_toolkit.language_model import (
|
|
19
|
+
LanguageModelMessages,
|
|
20
|
+
LanguageModelName,
|
|
21
|
+
LanguageModelResponse,
|
|
22
|
+
LanguageModelStreamResponse,
|
|
23
|
+
LanguageModelTool,
|
|
24
|
+
LanguageModelToolDescription,
|
|
25
|
+
)
|
|
26
|
+
from unique_toolkit.language_model.constants import (
|
|
27
|
+
DEFAULT_COMPLETE_TEMPERATURE,
|
|
28
|
+
DEFAULT_COMPLETE_TIMEOUT,
|
|
29
|
+
)
|
|
30
|
+
from unique_toolkit.language_model.schemas import (
|
|
31
|
+
LanguageModelMessageOptions,
|
|
32
|
+
ResponsesLanguageModelStreamResponse,
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
# As soon as we have multiple, remember
|
|
36
|
+
# https://pypi.org/project/typing-protocol-intersection/
|
|
37
|
+
# to generate combinations of protocols without inheritance
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
class SupportsComplete(Protocol):
|
|
41
|
+
def complete(
|
|
42
|
+
self,
|
|
43
|
+
messages: LanguageModelMessages,
|
|
44
|
+
model_name: LanguageModelName | str,
|
|
45
|
+
temperature: float = DEFAULT_COMPLETE_TEMPERATURE,
|
|
46
|
+
timeout: int = DEFAULT_COMPLETE_TIMEOUT,
|
|
47
|
+
tools: list[LanguageModelTool | LanguageModelToolDescription] | None = None,
|
|
48
|
+
) -> LanguageModelResponse: ...
|
|
49
|
+
|
|
50
|
+
async def complete_async(
|
|
51
|
+
self,
|
|
52
|
+
messages: LanguageModelMessages,
|
|
53
|
+
model_name: LanguageModelName | str,
|
|
54
|
+
temperature: float = DEFAULT_COMPLETE_TEMPERATURE,
|
|
55
|
+
timeout: int = DEFAULT_COMPLETE_TIMEOUT,
|
|
56
|
+
tools: Sequence[LanguageModelTool | LanguageModelToolDescription] | None = None,
|
|
57
|
+
) -> Awaitable[LanguageModelResponse]: ...
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
class SupportCompleteWithReferences(Protocol):
|
|
61
|
+
def complete_with_references(
|
|
62
|
+
self,
|
|
63
|
+
messages: LanguageModelMessages,
|
|
64
|
+
model_name: LanguageModelName | str,
|
|
65
|
+
content_chunks: list[ContentChunk] | None = None,
|
|
66
|
+
debug_info: dict | None = None,
|
|
67
|
+
temperature: float = DEFAULT_COMPLETE_TEMPERATURE,
|
|
68
|
+
timeout: int = DEFAULT_COMPLETE_TIMEOUT,
|
|
69
|
+
tools: Sequence[LanguageModelTool | LanguageModelToolDescription] | None = None,
|
|
70
|
+
start_text: str | None = None,
|
|
71
|
+
tool_choice: ChatCompletionToolChoiceOptionParam | None = None,
|
|
72
|
+
other_options: dict | None = None,
|
|
73
|
+
) -> LanguageModelStreamResponse: ...
|
|
74
|
+
|
|
75
|
+
async def complete_with_references_async(
|
|
76
|
+
self,
|
|
77
|
+
messages: LanguageModelMessages | list[ChatCompletionMessageParam],
|
|
78
|
+
model_name: LanguageModelName | str,
|
|
79
|
+
content_chunks: list[ContentChunk] | None = None,
|
|
80
|
+
debug_info: dict | None = None,
|
|
81
|
+
temperature: float = DEFAULT_COMPLETE_TEMPERATURE,
|
|
82
|
+
timeout: int = DEFAULT_COMPLETE_TIMEOUT,
|
|
83
|
+
tools: Sequence[LanguageModelTool | LanguageModelToolDescription] | None = None,
|
|
84
|
+
tool_choice: ChatCompletionToolChoiceOptionParam | None = None,
|
|
85
|
+
start_text: str | None = None,
|
|
86
|
+
other_options: dict | None = None,
|
|
87
|
+
) -> LanguageModelStreamResponse: ...
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
class ResponsesSupportCompleteWithReferences(Protocol):
|
|
91
|
+
def complete_with_references(
|
|
92
|
+
self,
|
|
93
|
+
*,
|
|
94
|
+
model_name: LanguageModelName | str,
|
|
95
|
+
messages: str
|
|
96
|
+
| LanguageModelMessages
|
|
97
|
+
| Sequence[
|
|
98
|
+
ResponseInputItemParam
|
|
99
|
+
| LanguageModelMessageOptions
|
|
100
|
+
| ResponseOutputItem # History is automatically convertible
|
|
101
|
+
],
|
|
102
|
+
content_chunks: list[ContentChunk] | None = None,
|
|
103
|
+
tools: Sequence[LanguageModelToolDescription | ToolParam] | None = None,
|
|
104
|
+
temperature: float = DEFAULT_COMPLETE_TEMPERATURE,
|
|
105
|
+
debug_info: dict | None = None,
|
|
106
|
+
start_text: str | None = None,
|
|
107
|
+
include: list[ResponseIncludable] | None = None,
|
|
108
|
+
instructions: str | None = None,
|
|
109
|
+
max_output_tokens: int | None = None,
|
|
110
|
+
metadata: Metadata | None = None,
|
|
111
|
+
parallel_tool_calls: bool | None = None,
|
|
112
|
+
text: ResponseTextConfigParam | None = None,
|
|
113
|
+
tool_choice: response_create_params.ToolChoice | None = None,
|
|
114
|
+
top_p: float | None = None,
|
|
115
|
+
reasoning: Reasoning | None = None,
|
|
116
|
+
other_options: dict | None = None,
|
|
117
|
+
) -> ResponsesLanguageModelStreamResponse: ...
|
|
118
|
+
|
|
119
|
+
async def complete_with_references_async(
|
|
120
|
+
self,
|
|
121
|
+
*,
|
|
122
|
+
model_name: LanguageModelName | str,
|
|
123
|
+
messages: str
|
|
124
|
+
| LanguageModelMessages
|
|
125
|
+
| Sequence[
|
|
126
|
+
ResponseInputItemParam
|
|
127
|
+
| LanguageModelMessageOptions
|
|
128
|
+
| ResponseOutputItem # History is automatically convertible
|
|
129
|
+
],
|
|
130
|
+
content_chunks: list[ContentChunk] | None = None,
|
|
131
|
+
tools: Sequence[LanguageModelToolDescription | ToolParam] | None = None,
|
|
132
|
+
temperature: float = DEFAULT_COMPLETE_TEMPERATURE,
|
|
133
|
+
debug_info: dict | None = None,
|
|
134
|
+
start_text: str | None = None,
|
|
135
|
+
include: list[ResponseIncludable] | None = None,
|
|
136
|
+
instructions: str | None = None,
|
|
137
|
+
max_output_tokens: int | None = None,
|
|
138
|
+
metadata: Metadata | None = None,
|
|
139
|
+
parallel_tool_calls: bool | None = None,
|
|
140
|
+
text: ResponseTextConfigParam | None = None,
|
|
141
|
+
tool_choice: response_create_params.ToolChoice | None = None,
|
|
142
|
+
top_p: float | None = None,
|
|
143
|
+
reasoning: Reasoning | None = None,
|
|
144
|
+
other_options: dict | None = None,
|
|
145
|
+
) -> ResponsesLanguageModelStreamResponse: ...
|