unique_orchestrator 2026.42.0.dev1__tar.gz → 2026.42.0.dev2__tar.gz
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_orchestrator-2026.42.0.dev1 → unique_orchestrator-2026.42.0.dev2}/PKG-INFO +3 -3
- {unique_orchestrator-2026.42.0.dev1 → unique_orchestrator-2026.42.0.dev2}/pyproject.toml +3 -3
- {unique_orchestrator-2026.42.0.dev1 → unique_orchestrator-2026.42.0.dev2}/unique_orchestrator/_builders/history_manager.py +41 -7
- {unique_orchestrator-2026.42.0.dev1 → unique_orchestrator-2026.42.0.dev2}/README.md +0 -0
- {unique_orchestrator-2026.42.0.dev1 → unique_orchestrator-2026.42.0.dev2}/unique_orchestrator/__init__.py +0 -0
- {unique_orchestrator-2026.42.0.dev1 → unique_orchestrator-2026.42.0.dev2}/unique_orchestrator/_builders/__init__.py +0 -0
- {unique_orchestrator-2026.42.0.dev1 → unique_orchestrator-2026.42.0.dev2}/unique_orchestrator/_builders/inject_tool_reminders.py +0 -0
- {unique_orchestrator-2026.42.0.dev1 → unique_orchestrator-2026.42.0.dev2}/unique_orchestrator/_builders/loop_iteration_runner.py +0 -0
- {unique_orchestrator-2026.42.0.dev1 → unique_orchestrator-2026.42.0.dev2}/unique_orchestrator/_builders/open_file_setup.py +0 -0
- {unique_orchestrator-2026.42.0.dev1 → unique_orchestrator-2026.42.0.dev2}/unique_orchestrator/_builders/skill_setup.py +0 -0
- {unique_orchestrator-2026.42.0.dev1 → unique_orchestrator-2026.42.0.dev2}/unique_orchestrator/config.py +0 -0
- {unique_orchestrator-2026.42.0.dev1 → unique_orchestrator-2026.42.0.dev2}/unique_orchestrator/prompts/generic_reference_prompt.jinja2 +0 -0
- {unique_orchestrator-2026.42.0.dev1 → unique_orchestrator-2026.42.0.dev2}/unique_orchestrator/prompts/system_prompt.jinja2 +0 -0
- {unique_orchestrator-2026.42.0.dev1 → unique_orchestrator-2026.42.0.dev2}/unique_orchestrator/prompts/user_message_prompt.jinja2 +0 -0
- {unique_orchestrator-2026.42.0.dev1 → unique_orchestrator-2026.42.0.dev2}/unique_orchestrator/settings.py +0 -0
- {unique_orchestrator-2026.42.0.dev1 → unique_orchestrator-2026.42.0.dev2}/unique_orchestrator/tests/test_agent_config_rjsf_ui_schema.py +0 -0
- {unique_orchestrator-2026.42.0.dev1 → unique_orchestrator-2026.42.0.dev2}/unique_orchestrator/tests/test_build_loop_iteration_runner.py +0 -0
- {unique_orchestrator-2026.42.0.dev1 → unique_orchestrator-2026.42.0.dev2}/unique_orchestrator/tests/test_config_services_validators.py +0 -0
- {unique_orchestrator-2026.42.0.dev1 → unique_orchestrator-2026.42.0.dev2}/unique_orchestrator/tests/test_qwen_max_loop_iterations.py +0 -0
- {unique_orchestrator-2026.42.0.dev1 → unique_orchestrator-2026.42.0.dev2}/unique_orchestrator/tests/test_register_code_interpreter_postprocessors.py +0 -0
- {unique_orchestrator-2026.42.0.dev1 → unique_orchestrator-2026.42.0.dev2}/unique_orchestrator/tests/test_unique_ai_async_modify.py +0 -0
- {unique_orchestrator-2026.42.0.dev1 → unique_orchestrator-2026.42.0.dev2}/unique_orchestrator/tests/test_unique_ai_execution_timing.py +0 -0
- {unique_orchestrator-2026.42.0.dev1 → unique_orchestrator-2026.42.0.dev2}/unique_orchestrator/tests/test_unique_ai_get_filtered_user_metadata.py +0 -0
- {unique_orchestrator-2026.42.0.dev1 → unique_orchestrator-2026.42.0.dev2}/unique_orchestrator/tests/test_unique_ai_log_tool_calls.py +0 -0
- {unique_orchestrator-2026.42.0.dev1 → unique_orchestrator-2026.42.0.dev2}/unique_orchestrator/tests/test_unique_ai_loop_debug_params.py +0 -0
- {unique_orchestrator-2026.42.0.dev1 → unique_orchestrator-2026.42.0.dev2}/unique_orchestrator/tests/test_unique_ai_persist_tool_calls.py +0 -0
- {unique_orchestrator-2026.42.0.dev1 → unique_orchestrator-2026.42.0.dev2}/unique_orchestrator/tests/test_unique_ai_plan_or_execute_include.py +0 -0
- {unique_orchestrator-2026.42.0.dev1 → unique_orchestrator-2026.42.0.dev2}/unique_orchestrator/tests/test_unique_ai_reference_order.py +0 -0
- {unique_orchestrator-2026.42.0.dev1 → unique_orchestrator-2026.42.0.dev2}/unique_orchestrator/tests/test_unique_ai_render_system_prompt_user_instructions.py +0 -0
- {unique_orchestrator-2026.42.0.dev1 → unique_orchestrator-2026.42.0.dev2}/unique_orchestrator/tests/test_unique_ai_token_usage.py +0 -0
- {unique_orchestrator-2026.42.0.dev1 → unique_orchestrator-2026.42.0.dev2}/unique_orchestrator/tests/test_utils_resolve_other_options.py +0 -0
- {unique_orchestrator-2026.42.0.dev1 → unique_orchestrator-2026.42.0.dev2}/unique_orchestrator/unique_ai.py +0 -0
- {unique_orchestrator-2026.42.0.dev1 → unique_orchestrator-2026.42.0.dev2}/unique_orchestrator/unique_ai_builder.py +0 -0
- {unique_orchestrator-2026.42.0.dev1 → unique_orchestrator-2026.42.0.dev2}/unique_orchestrator/utils.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: unique-orchestrator
|
|
3
|
-
Version: 2026.42.0.
|
|
3
|
+
Version: 2026.42.0.dev2
|
|
4
4
|
Summary:
|
|
5
5
|
Author: Andreas Hauri
|
|
6
6
|
Author-email: Andreas Hauri <andreas.hauri@unique.ai>
|
|
@@ -9,12 +9,12 @@ Requires-Dist: pydantic>=2.8.2,<3
|
|
|
9
9
|
Requires-Dist: pydantic-settings>=2.10.1,<3
|
|
10
10
|
Requires-Dist: typing-extensions>=4.9.0,<5
|
|
11
11
|
Requires-Dist: jinja2>=3.1.0,<4
|
|
12
|
-
Requires-Dist: unique-toolkit>=2026.42.0.
|
|
12
|
+
Requires-Dist: unique-toolkit>=2026.42.0.dev12,<2026.42.0rc0
|
|
13
13
|
Requires-Dist: unique-stock-ticker>=2026.42.0.dev0,<2026.42.0rc0
|
|
14
14
|
Requires-Dist: unique-follow-up-questions>=2026.42.0.dev0,<2026.42.0rc0
|
|
15
15
|
Requires-Dist: unique-internal-search>=2026.42.0.dev0,<2026.42.0rc0
|
|
16
16
|
Requires-Dist: unique-deep-research>=2026.42.0.dev0,<2026.42.0rc0
|
|
17
|
-
Requires-Dist: unique-web-search>=2026.42.0.
|
|
17
|
+
Requires-Dist: unique-web-search>=2026.42.0.dev1,<2026.42.0rc0
|
|
18
18
|
Requires-Dist: unique-swot>=2026.42.0.dev0,<2026.42.0rc0
|
|
19
19
|
Requires-Dist: unique-skill-tool>=2026.42.0.dev0,<2026.42.0rc0
|
|
20
20
|
Requires-Dist: unique-user-memory>=2026.42.0.dev0,<2026.42.0rc0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "unique_orchestrator"
|
|
3
|
-
version = "2026.42.0.
|
|
3
|
+
version = "2026.42.0.dev2"
|
|
4
4
|
description = ""
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
license = { text = "Proprietary" }
|
|
@@ -13,12 +13,12 @@ dependencies = [
|
|
|
13
13
|
"pydantic-settings>=2.10.1,<3",
|
|
14
14
|
"typing-extensions>=4.9.0,<5",
|
|
15
15
|
"jinja2>=3.1.0,<4",
|
|
16
|
-
"unique-toolkit>=2026.42.0.
|
|
16
|
+
"unique-toolkit>=2026.42.0.dev12,<2026.42.0rc0",
|
|
17
17
|
"unique-stock-ticker>=2026.42.0.dev0,<2026.42.0rc0",
|
|
18
18
|
"unique-follow-up-questions>=2026.42.0.dev0,<2026.42.0rc0",
|
|
19
19
|
"unique-internal-search>=2026.42.0.dev0,<2026.42.0rc0",
|
|
20
20
|
"unique-deep-research>=2026.42.0.dev0,<2026.42.0rc0",
|
|
21
|
-
"unique-web-search>=2026.42.0.
|
|
21
|
+
"unique-web-search>=2026.42.0.dev1,<2026.42.0rc0",
|
|
22
22
|
"unique-swot>=2026.42.0.dev0,<2026.42.0rc0",
|
|
23
23
|
"unique-skill-tool>=2026.42.0.dev0,<2026.42.0rc0",
|
|
24
24
|
"unique-user-memory>=2026.42.0.dev0,<2026.42.0rc0",
|
|
@@ -2,6 +2,7 @@ from functools import partial
|
|
|
2
2
|
from logging import Logger
|
|
3
3
|
|
|
4
4
|
from unique_internal_search.uploaded_search.service import UploadedSearchTool
|
|
5
|
+
from unique_toolkit._common.utils.files import is_image_content
|
|
5
6
|
from unique_toolkit.agentic.history_manager import (
|
|
6
7
|
history_manager as history_manager_module,
|
|
7
8
|
)
|
|
@@ -36,17 +37,50 @@ def serialize_uploaded_file_for_history(
|
|
|
36
37
|
uploaded_search_available: bool,
|
|
37
38
|
code_interpreter_available: bool,
|
|
38
39
|
) -> str | None:
|
|
39
|
-
"""Serialize user-uploaded file metadata for model history.
|
|
40
|
+
"""Serialize user-uploaded file metadata for model history.
|
|
41
|
+
|
|
42
|
+
Every upload is listed, including images and files that were not (or not
|
|
43
|
+
yet, or unsuccessfully) ingested. "Not ingested" only means the file cannot
|
|
44
|
+
be searched with UploadedSearchTool; the raw file is still available to the
|
|
45
|
+
code execution container when that tool is active. Failed uploads are
|
|
46
|
+
neither attached nor copied into the code execution container.
|
|
47
|
+
"""
|
|
40
48
|
if load_code_execution_metadata(content) is not None:
|
|
41
49
|
return None
|
|
42
50
|
|
|
43
|
-
|
|
44
|
-
if
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
51
|
+
is_image = is_image_content(content.key)
|
|
52
|
+
kind = "image" if is_image else "file"
|
|
53
|
+
lines = [f"User uploaded {kind}: {content.key} ({content.id})"]
|
|
54
|
+
|
|
55
|
+
if content.is_expired():
|
|
56
|
+
lines.append(
|
|
57
|
+
"- Expired due to company retention policy; content can no longer be accessed"
|
|
58
|
+
)
|
|
59
|
+
return "\n".join(lines)
|
|
60
|
+
|
|
61
|
+
not_searchable = (
|
|
62
|
+
"; not searchable using UploadedSearchTool" if uploaded_search_available else ""
|
|
63
|
+
)
|
|
64
|
+
if content.has_ingestion_failed():
|
|
65
|
+
lines.append(f"- Ingestion failed ({content.ingestion_state}){not_searchable}")
|
|
66
|
+
return "\n".join(lines)
|
|
67
|
+
|
|
68
|
+
if is_image:
|
|
69
|
+
lines.append("- Attached to this message as an image")
|
|
70
|
+
elif content.is_ingestion_in_progress():
|
|
71
|
+
not_yet_searchable = (
|
|
72
|
+
"; not yet searchable using UploadedSearchTool"
|
|
73
|
+
if uploaded_search_available
|
|
74
|
+
else ""
|
|
75
|
+
)
|
|
76
|
+
lines.append(f"- Ingestion still in progress{not_yet_searchable}")
|
|
77
|
+
elif not content.is_ingested(default_if_unknown=True):
|
|
78
|
+
lines.append(f"- Not ingested{not_searchable}")
|
|
79
|
+
elif uploaded_search_available:
|
|
49
80
|
lines.append("- Searchable using UploadedSearchTool")
|
|
81
|
+
|
|
82
|
+
# The container path is only known after upload (it may carry a prefix),
|
|
83
|
+
# so it is not guessed here; the code execution tool prompt lists it.
|
|
50
84
|
if code_interpreter_available:
|
|
51
85
|
lines.append("- Available for processing in the code execution container")
|
|
52
86
|
return "\n".join(lines)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|