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
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
import base64
|
|
2
|
+
import mimetypes
|
|
3
|
+
from collections.abc import Iterable
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
from typing import Self, overload
|
|
6
|
+
|
|
7
|
+
from openai.types.chat.chat_completion_assistant_message_param import (
|
|
8
|
+
Audio,
|
|
9
|
+
ChatCompletionAssistantMessageParam,
|
|
10
|
+
ContentArrayOfContentPart,
|
|
11
|
+
FunctionCall,
|
|
12
|
+
)
|
|
13
|
+
from openai.types.chat.chat_completion_content_part_image_param import (
|
|
14
|
+
ChatCompletionContentPartImageParam,
|
|
15
|
+
ImageURL,
|
|
16
|
+
)
|
|
17
|
+
from openai.types.chat.chat_completion_content_part_param import (
|
|
18
|
+
ChatCompletionContentPartParam,
|
|
19
|
+
)
|
|
20
|
+
from openai.types.chat.chat_completion_content_part_text_param import (
|
|
21
|
+
ChatCompletionContentPartTextParam,
|
|
22
|
+
)
|
|
23
|
+
from openai.types.chat.chat_completion_developer_message_param import (
|
|
24
|
+
ChatCompletionDeveloperMessageParam,
|
|
25
|
+
)
|
|
26
|
+
from openai.types.chat.chat_completion_function_message_param import (
|
|
27
|
+
ChatCompletionFunctionMessageParam,
|
|
28
|
+
)
|
|
29
|
+
from openai.types.chat.chat_completion_message_param import ChatCompletionMessageParam
|
|
30
|
+
from openai.types.chat.chat_completion_message_tool_call_param import (
|
|
31
|
+
ChatCompletionMessageToolCallParam,
|
|
32
|
+
)
|
|
33
|
+
from openai.types.chat.chat_completion_system_message_param import (
|
|
34
|
+
ChatCompletionSystemMessageParam,
|
|
35
|
+
)
|
|
36
|
+
from openai.types.chat.chat_completion_tool_message_param import (
|
|
37
|
+
ChatCompletionToolMessageParam,
|
|
38
|
+
)
|
|
39
|
+
from openai.types.chat.chat_completion_user_message_param import (
|
|
40
|
+
ChatCompletionUserMessageParam,
|
|
41
|
+
)
|
|
42
|
+
from typing_extensions import Literal
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
class OpenAIUserMessageBuilder:
|
|
46
|
+
def __init__(
|
|
47
|
+
self,
|
|
48
|
+
) -> None:
|
|
49
|
+
self._messages: list[ChatCompletionContentPartParam] = []
|
|
50
|
+
|
|
51
|
+
def append_text(self, content: str) -> Self:
|
|
52
|
+
part = ChatCompletionContentPartTextParam(
|
|
53
|
+
type="text",
|
|
54
|
+
text=content,
|
|
55
|
+
)
|
|
56
|
+
self._messages.append(part)
|
|
57
|
+
return self
|
|
58
|
+
|
|
59
|
+
@overload
|
|
60
|
+
def append_image(
|
|
61
|
+
self, *, url: str, detail: Literal["auto", "low", "high"] = "auto"
|
|
62
|
+
) -> Self: ...
|
|
63
|
+
|
|
64
|
+
@overload
|
|
65
|
+
def append_image(
|
|
66
|
+
self, *, path: Path, detail: Literal["auto", "low", "high"] = "auto"
|
|
67
|
+
) -> Self: ...
|
|
68
|
+
|
|
69
|
+
@overload
|
|
70
|
+
def append_image(
|
|
71
|
+
self,
|
|
72
|
+
*,
|
|
73
|
+
content: bytes,
|
|
74
|
+
mime_type: str,
|
|
75
|
+
detail: Literal["auto", "low", "high"] = "auto",
|
|
76
|
+
) -> Self: ...
|
|
77
|
+
|
|
78
|
+
def append_image(
|
|
79
|
+
self,
|
|
80
|
+
*,
|
|
81
|
+
url: str | None = None,
|
|
82
|
+
path: Path | None = None,
|
|
83
|
+
content: bytes | None = None,
|
|
84
|
+
mime_type: str | None = None,
|
|
85
|
+
detail: Literal["auto", "low", "high"] = "auto",
|
|
86
|
+
) -> Self:
|
|
87
|
+
if url is None and path is None and (content is None or mime_type is None):
|
|
88
|
+
raise ValueError("Either url or path must be provided")
|
|
89
|
+
|
|
90
|
+
if path is not None:
|
|
91
|
+
# Read image file and encode as base64 data URI
|
|
92
|
+
image_data = path.read_bytes()
|
|
93
|
+
base64_image = base64.b64encode(image_data).decode("utf-8")
|
|
94
|
+
mime_type = mimetypes.guess_type(str(path))[0] or "image/jpeg"
|
|
95
|
+
url = f"data:{mime_type};base64,{base64_image}"
|
|
96
|
+
|
|
97
|
+
if content is not None and mime_type is not None:
|
|
98
|
+
base64_image = base64.b64encode(content).decode("utf-8")
|
|
99
|
+
url = f"data:{mime_type};base64,{base64_image}"
|
|
100
|
+
|
|
101
|
+
image_url = ImageURL(url=url or "", detail=detail)
|
|
102
|
+
part = ChatCompletionContentPartImageParam(
|
|
103
|
+
type="image_url",
|
|
104
|
+
image_url=image_url,
|
|
105
|
+
)
|
|
106
|
+
self._messages.append(part)
|
|
107
|
+
return self
|
|
108
|
+
|
|
109
|
+
@property
|
|
110
|
+
def user_message(self) -> ChatCompletionUserMessageParam:
|
|
111
|
+
return ChatCompletionUserMessageParam(
|
|
112
|
+
content=self._messages,
|
|
113
|
+
role="user",
|
|
114
|
+
)
|
|
115
|
+
|
|
116
|
+
@property
|
|
117
|
+
def iterable_content(self) -> Iterable[ChatCompletionContentPartParam]:
|
|
118
|
+
return self._messages
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
class OpenAIMessageBuilder:
|
|
122
|
+
def __init__(
|
|
123
|
+
self,
|
|
124
|
+
messages: list[ChatCompletionMessageParam] | None = None,
|
|
125
|
+
) -> None:
|
|
126
|
+
self._messages: list[ChatCompletionMessageParam] = []
|
|
127
|
+
if messages:
|
|
128
|
+
self._messages = messages
|
|
129
|
+
|
|
130
|
+
@classmethod
|
|
131
|
+
def from_messages(cls, messages: list[ChatCompletionMessageParam]) -> Self:
|
|
132
|
+
builder = cls()
|
|
133
|
+
builder._messages = messages.copy()
|
|
134
|
+
return builder
|
|
135
|
+
|
|
136
|
+
def append(self, message: ChatCompletionMessageParam):
|
|
137
|
+
self._messages.append(message)
|
|
138
|
+
|
|
139
|
+
def system_message_append(
|
|
140
|
+
self,
|
|
141
|
+
content: str | Iterable[ChatCompletionContentPartTextParam],
|
|
142
|
+
name: str = "system",
|
|
143
|
+
) -> Self:
|
|
144
|
+
self._messages.append(
|
|
145
|
+
ChatCompletionSystemMessageParam(
|
|
146
|
+
content=content,
|
|
147
|
+
role="system",
|
|
148
|
+
),
|
|
149
|
+
)
|
|
150
|
+
return self
|
|
151
|
+
|
|
152
|
+
def user_message_append(
|
|
153
|
+
self,
|
|
154
|
+
content: str | Iterable[ChatCompletionContentPartParam],
|
|
155
|
+
name: str = "user",
|
|
156
|
+
) -> Self:
|
|
157
|
+
self._messages.append(
|
|
158
|
+
ChatCompletionUserMessageParam(
|
|
159
|
+
content=content,
|
|
160
|
+
role="user",
|
|
161
|
+
),
|
|
162
|
+
)
|
|
163
|
+
return self
|
|
164
|
+
|
|
165
|
+
def assistant_message_append(
|
|
166
|
+
self,
|
|
167
|
+
content: str | Iterable[ContentArrayOfContentPart] | None = None,
|
|
168
|
+
name: str = "assistant",
|
|
169
|
+
audio: Audio | None = None,
|
|
170
|
+
function_call: FunctionCall | None = None,
|
|
171
|
+
refusal: str | None = None,
|
|
172
|
+
tool_calls: Iterable[ChatCompletionMessageToolCallParam] | None = None,
|
|
173
|
+
) -> Self:
|
|
174
|
+
self._messages.append(
|
|
175
|
+
ChatCompletionAssistantMessageParam(
|
|
176
|
+
content=content,
|
|
177
|
+
role="assistant",
|
|
178
|
+
audio=audio,
|
|
179
|
+
function_call=function_call,
|
|
180
|
+
refusal=refusal,
|
|
181
|
+
tool_calls=tool_calls or [],
|
|
182
|
+
),
|
|
183
|
+
)
|
|
184
|
+
return self
|
|
185
|
+
|
|
186
|
+
def developper_message_append(
|
|
187
|
+
self,
|
|
188
|
+
content: str | Iterable[ChatCompletionContentPartTextParam],
|
|
189
|
+
name: str = "developer",
|
|
190
|
+
) -> Self:
|
|
191
|
+
self._messages.append(
|
|
192
|
+
ChatCompletionDeveloperMessageParam(
|
|
193
|
+
content=content,
|
|
194
|
+
role="developer",
|
|
195
|
+
),
|
|
196
|
+
)
|
|
197
|
+
return self
|
|
198
|
+
|
|
199
|
+
def function_message_append(
|
|
200
|
+
self,
|
|
201
|
+
content: str | None,
|
|
202
|
+
name: str = "function",
|
|
203
|
+
) -> Self:
|
|
204
|
+
self._messages.append(
|
|
205
|
+
ChatCompletionFunctionMessageParam(
|
|
206
|
+
content=content,
|
|
207
|
+
role="function",
|
|
208
|
+
name=name,
|
|
209
|
+
),
|
|
210
|
+
)
|
|
211
|
+
return self
|
|
212
|
+
|
|
213
|
+
def tool_message_append(
|
|
214
|
+
self,
|
|
215
|
+
content: str | Iterable[ChatCompletionContentPartTextParam],
|
|
216
|
+
tool_call_id: str,
|
|
217
|
+
) -> Self:
|
|
218
|
+
self._messages.append(
|
|
219
|
+
ChatCompletionToolMessageParam(
|
|
220
|
+
content=content,
|
|
221
|
+
role="tool",
|
|
222
|
+
tool_call_id=tool_call_id,
|
|
223
|
+
),
|
|
224
|
+
)
|
|
225
|
+
return self
|
|
226
|
+
|
|
227
|
+
@property
|
|
228
|
+
def messages(self) -> list[ChatCompletionMessageParam]:
|
|
229
|
+
return self._messages
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
from unique_toolkit.app.unique_settings import UniqueApp, UniqueAuth
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
def auth_headers(auth_settings: UniqueAuth) -> dict[str, str]:
|
|
5
|
+
return {
|
|
6
|
+
"x-user-id": auth_settings.user_id.get_secret_value(),
|
|
7
|
+
"x-company-id": auth_settings.company_id.get_secret_value(),
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def app_headers(app_settings: UniqueApp) -> dict[str, str]:
|
|
12
|
+
return {
|
|
13
|
+
"x-app-id": app_settings.id.get_secret_value(),
|
|
14
|
+
"Authorization": f"Bearer {app_settings.key.get_secret_value()}",
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def get_default_headers(app_settings: UniqueApp, auth_settings: UniqueAuth):
|
|
19
|
+
default_headers = {}
|
|
20
|
+
default_headers.update(app_headers(app_settings))
|
|
21
|
+
default_headers.update(auth_headers(auth_settings))
|
|
22
|
+
default_headers["x-api-version"] = "2023-12-06"
|
|
23
|
+
return default_headers
|
|
@@ -43,6 +43,9 @@ from .schemas import (
|
|
|
43
43
|
from .schemas import (
|
|
44
44
|
LanguageModelTool as LanguageModelTool,
|
|
45
45
|
)
|
|
46
|
+
from .schemas import (
|
|
47
|
+
LanguageModelToolDescription as LanguageModelToolDescription,
|
|
48
|
+
)
|
|
46
49
|
from .schemas import (
|
|
47
50
|
LanguageModelToolMessage as LanguageModelToolMessage,
|
|
48
51
|
)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from
|
|
1
|
+
from typing import Any, Self
|
|
2
2
|
|
|
3
3
|
from unique_toolkit.language_model import (
|
|
4
4
|
LanguageModelAssistantMessage,
|
|
@@ -17,6 +17,10 @@ class MessagesBuilder:
|
|
|
17
17
|
def __init__(self):
|
|
18
18
|
self.messages: list[LanguageModelMessage] = []
|
|
19
19
|
|
|
20
|
+
def append(self, message: LanguageModelMessage) -> Self:
|
|
21
|
+
self.messages.append(message)
|
|
22
|
+
return self
|
|
23
|
+
|
|
20
24
|
def message_append(self, role: LanguageModelMessageRole, content: str):
|
|
21
25
|
message = LanguageModelMessage(role=role, content=content)
|
|
22
26
|
self.messages.append(message)
|
|
@@ -35,23 +39,33 @@ class MessagesBuilder:
|
|
|
35
39
|
return self # Return self to allow method chaining
|
|
36
40
|
|
|
37
41
|
def image_message_append(
|
|
38
|
-
self,
|
|
42
|
+
self,
|
|
43
|
+
content: str,
|
|
44
|
+
images: list[str],
|
|
45
|
+
role: LanguageModelMessageRole = LanguageModelMessageRole.USER,
|
|
39
46
|
) -> Self:
|
|
47
|
+
final_content: list[dict[str, Any]] = [{"type": "text", "text": content}]
|
|
48
|
+
final_content.extend(
|
|
49
|
+
[
|
|
50
|
+
{
|
|
51
|
+
"type": "image_url",
|
|
52
|
+
"imageUrl": {"url": image},
|
|
53
|
+
}
|
|
54
|
+
for image in images
|
|
55
|
+
],
|
|
56
|
+
)
|
|
57
|
+
|
|
40
58
|
message = LanguageModelMessage(
|
|
41
59
|
role=role,
|
|
42
|
-
content=
|
|
43
|
-
{"type": "text", "text": content},
|
|
44
|
-
*[
|
|
45
|
-
{"type": "image_url", "imageUrl": {"url": image}}
|
|
46
|
-
for image in images
|
|
47
|
-
],
|
|
48
|
-
],
|
|
60
|
+
content=final_content,
|
|
49
61
|
)
|
|
50
62
|
self.messages.append(message)
|
|
51
63
|
return self
|
|
52
64
|
|
|
53
65
|
def assistant_message_append(
|
|
54
|
-
self,
|
|
66
|
+
self,
|
|
67
|
+
content: str,
|
|
68
|
+
tool_calls: list[LanguageModelFunction] | None = None,
|
|
55
69
|
) -> Self:
|
|
56
70
|
"""Appends an assistant message to the messages list."""
|
|
57
71
|
message = LanguageModelAssistantMessage(content=content)
|
|
@@ -70,7 +84,9 @@ class MessagesBuilder:
|
|
|
70
84
|
def tool_message_append(self, name: str, tool_call_id: str, content: str) -> Self:
|
|
71
85
|
"""Appends a tool message to the messages list."""
|
|
72
86
|
message = LanguageModelToolMessage(
|
|
73
|
-
name=name,
|
|
87
|
+
name=name,
|
|
88
|
+
tool_call_id=tool_call_id,
|
|
89
|
+
content=content,
|
|
74
90
|
)
|
|
75
91
|
self.messages.append(message)
|
|
76
92
|
return self
|