unique_toolkit 0.7.9__py3-none-any.whl → 1.33.3__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.
- unique_toolkit/__init__.py +36 -3
- unique_toolkit/_common/api_calling/human_verification_manager.py +357 -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 +225 -0
- unique_toolkit/_common/docx_generator/template/Doc Template.docx +0 -0
- unique_toolkit/_common/endpoint_builder.py +368 -0
- unique_toolkit/_common/endpoint_requestor.py +480 -0
- unique_toolkit/_common/exception.py +24 -0
- unique_toolkit/_common/experimental/endpoint_builder.py +368 -0
- unique_toolkit/_common/experimental/endpoint_requestor.py +488 -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 +174 -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/image/encode.py +25 -0
- unique_toolkit/_common/utils/jinja/helpers.py +10 -0
- unique_toolkit/_common/utils/jinja/render.py +18 -0
- unique_toolkit/_common/utils/jinja/schema.py +65 -0
- unique_toolkit/_common/utils/jinja/utils.py +80 -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 +112 -0
- unique_toolkit/{evaluators → agentic/evaluation}/hallucination/prompts.py +1 -1
- unique_toolkit/{evaluators → agentic/evaluation}/hallucination/service.py +20 -16
- unique_toolkit/{evaluators → agentic/evaluation}/hallucination/utils.py +32 -21
- 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 +298 -0
- unique_toolkit/agentic/history_manager/history_manager.py +241 -0
- unique_toolkit/agentic/history_manager/loop_token_reducer.py +484 -0
- unique_toolkit/agentic/history_manager/utils.py +96 -0
- unique_toolkit/agentic/message_log_manager/__init__.py +5 -0
- unique_toolkit/agentic/message_log_manager/service.py +93 -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 +71 -0
- unique_toolkit/agentic/responses_api/postprocessors/generated_files.py +297 -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 +240 -0
- unique_toolkit/agentic/tools/a2a/postprocessing/_ref_utils.py +84 -0
- unique_toolkit/agentic/tools/a2a/postprocessing/config.py +78 -0
- unique_toolkit/agentic/tools/a2a/postprocessing/display.py +264 -0
- unique_toolkit/agentic/tools/a2a/postprocessing/references.py +101 -0
- unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display.py +421 -0
- unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display_utils.py +2103 -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 +158 -0
- unique_toolkit/agentic/tools/a2a/tool/service.py +393 -0
- unique_toolkit/agentic/tools/agent_chunks_hanlder.py +65 -0
- unique_toolkit/agentic/tools/config.py +128 -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 +46 -0
- unique_toolkit/agentic/tools/openai_builtin/code_interpreter/__init__.py +8 -0
- unique_toolkit/agentic/tools/openai_builtin/code_interpreter/config.py +88 -0
- unique_toolkit/agentic/tools/openai_builtin/code_interpreter/service.py +250 -0
- unique_toolkit/agentic/tools/openai_builtin/manager.py +79 -0
- unique_toolkit/agentic/tools/schemas.py +145 -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 +187 -0
- unique_toolkit/agentic/tools/tool_manager.py +492 -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 +9 -0
- unique_toolkit/app/dev_util.py +180 -0
- unique_toolkit/app/fast_api_factory.py +131 -0
- unique_toolkit/app/init_sdk.py +32 -1
- unique_toolkit/app/schemas.py +206 -31
- unique_toolkit/app/unique_settings.py +367 -0
- unique_toolkit/app/webhook.py +77 -0
- unique_toolkit/chat/__init__.py +8 -1
- unique_toolkit/chat/deprecated/service.py +232 -0
- unique_toolkit/chat/functions.py +648 -78
- unique_toolkit/chat/rendering.py +34 -0
- unique_toolkit/chat/responses_api.py +461 -0
- unique_toolkit/chat/schemas.py +134 -2
- unique_toolkit/chat/service.py +115 -767
- unique_toolkit/content/functions.py +353 -8
- unique_toolkit/content/schemas.py +128 -15
- unique_toolkit/content/service.py +321 -45
- unique_toolkit/content/smart_rules.py +301 -0
- unique_toolkit/content/utils.py +10 -3
- unique_toolkit/data_extraction/README.md +96 -0
- unique_toolkit/data_extraction/__init__.py +11 -0
- unique_toolkit/data_extraction/augmented/__init__.py +5 -0
- unique_toolkit/data_extraction/augmented/service.py +93 -0
- unique_toolkit/data_extraction/base.py +25 -0
- unique_toolkit/data_extraction/basic/__init__.py +11 -0
- unique_toolkit/data_extraction/basic/config.py +18 -0
- unique_toolkit/data_extraction/basic/prompt.py +13 -0
- unique_toolkit/data_extraction/basic/service.py +55 -0
- unique_toolkit/embedding/service.py +103 -12
- unique_toolkit/framework_utilities/__init__.py +1 -0
- unique_toolkit/framework_utilities/langchain/__init__.py +10 -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 +84 -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/_responses_api_utils.py +93 -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 +345 -43
- unique_toolkit/language_model/infos.py +1288 -46
- unique_toolkit/language_model/reference.py +242 -0
- unique_toolkit/language_model/schemas.py +481 -49
- unique_toolkit/language_model/service.py +229 -28
- unique_toolkit/protocols/support.py +145 -0
- unique_toolkit/services/__init__.py +7 -0
- unique_toolkit/services/chat_service.py +1631 -0
- unique_toolkit/services/knowledge_base.py +1094 -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-1.33.3.dist-info/METADATA +1145 -0
- unique_toolkit-1.33.3.dist-info/RECORD +205 -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.9.dist-info/METADATA +0 -413
- unique_toolkit-0.7.9.dist-info/RECORD +0 -64
- /unique_toolkit/{evaluators → agentic/evaluation}/exception.py +0 -0
- {unique_toolkit-0.7.9.dist-info → unique_toolkit-1.33.3.dist-info}/LICENSE +0 -0
- {unique_toolkit-0.7.9.dist-info → unique_toolkit-1.33.3.dist-info}/WHEEL +0 -0
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
from typing import Any
|
|
2
|
+
|
|
3
|
+
from openai.types.chat import (
|
|
4
|
+
ChatCompletionContentPartImageParam,
|
|
5
|
+
ChatCompletionContentPartInputAudioParam,
|
|
6
|
+
ChatCompletionContentPartParam,
|
|
7
|
+
ChatCompletionContentPartTextParam,
|
|
8
|
+
)
|
|
9
|
+
from openai.types.chat.chat_completion_content_part_param import (
|
|
10
|
+
File as ChatCompletionContentPartFileParam,
|
|
11
|
+
)
|
|
12
|
+
from openai.types.responses import (
|
|
13
|
+
ResponseInputAudioParam,
|
|
14
|
+
ResponseInputFileParam,
|
|
15
|
+
ResponseInputImageParam,
|
|
16
|
+
ResponseInputMessageContentListParam,
|
|
17
|
+
ResponseInputTextParam,
|
|
18
|
+
)
|
|
19
|
+
from pydantic import (
|
|
20
|
+
TypeAdapter,
|
|
21
|
+
)
|
|
22
|
+
from pydantic.alias_generators import to_camel
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def _convert_text_part_to_responses_api(
|
|
26
|
+
part: ChatCompletionContentPartTextParam,
|
|
27
|
+
) -> ResponseInputTextParam:
|
|
28
|
+
return ResponseInputTextParam(type="input_text", text=part["text"])
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def _convert_image_part_to_responses_api(
|
|
32
|
+
part: ChatCompletionContentPartImageParam,
|
|
33
|
+
) -> ResponseInputImageParam:
|
|
34
|
+
detail = "auto" # Responses API requires detail to be sent
|
|
35
|
+
if "detail" in part["image_url"]:
|
|
36
|
+
detail = part["image_url"]["detail"]
|
|
37
|
+
|
|
38
|
+
return ResponseInputImageParam(
|
|
39
|
+
type="input_image",
|
|
40
|
+
image_url=part["image_url"]["url"],
|
|
41
|
+
detail=detail,
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def _convert_file_part_to_responses_api(
|
|
46
|
+
part: ChatCompletionContentPartFileParam,
|
|
47
|
+
) -> ResponseInputFileParam:
|
|
48
|
+
param = ResponseInputFileParam(type="input_file")
|
|
49
|
+
|
|
50
|
+
if "file_id" in part["file"]:
|
|
51
|
+
param["file_id"] = part["file"]["file_id"]
|
|
52
|
+
|
|
53
|
+
if "file_data" in part["file"]:
|
|
54
|
+
param["file_data"] = part["file"]["file_data"]
|
|
55
|
+
|
|
56
|
+
if "filename" in part["file"]:
|
|
57
|
+
param["filename"] = part["file"]["filename"]
|
|
58
|
+
|
|
59
|
+
return param
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
def _convert_audio_part_to_responses_api(
|
|
63
|
+
part: ChatCompletionContentPartInputAudioParam,
|
|
64
|
+
) -> ResponseInputAudioParam:
|
|
65
|
+
return ResponseInputAudioParam(type="input_audio", input_audio=part["input_audio"])
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
def convert_user_message_content_to_responses_api(
|
|
69
|
+
content: str | list[dict[str, Any]],
|
|
70
|
+
) -> str | ResponseInputMessageContentListParam:
|
|
71
|
+
"""Convert user message content from Chat Completions format to Responses API format."""
|
|
72
|
+
|
|
73
|
+
if isinstance(content, str):
|
|
74
|
+
return content
|
|
75
|
+
|
|
76
|
+
# Parse the content of the dicts in order to allow for camelCase arguments
|
|
77
|
+
content_parsed = TypeAdapter(
|
|
78
|
+
list[ChatCompletionContentPartParam], config={"alias_generator": to_camel}
|
|
79
|
+
).validate_python(content, by_alias=True, by_name=True)
|
|
80
|
+
|
|
81
|
+
responses_content: ResponseInputMessageContentListParam = []
|
|
82
|
+
|
|
83
|
+
for part in content_parsed:
|
|
84
|
+
match part["type"]:
|
|
85
|
+
case "text":
|
|
86
|
+
responses_content.append(_convert_text_part_to_responses_api(part))
|
|
87
|
+
case "image_url":
|
|
88
|
+
responses_content.append(_convert_image_part_to_responses_api(part))
|
|
89
|
+
case "file":
|
|
90
|
+
responses_content.append(_convert_file_part_to_responses_api(part))
|
|
91
|
+
case "input_audio":
|
|
92
|
+
responses_content.append(_convert_audio_part_to_responses_api(part))
|
|
93
|
+
return responses_content
|
|
@@ -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
|