unique_orchestrator 2026.42.0.dev0__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.dev0 → unique_orchestrator-2026.42.0.dev2}/PKG-INFO +3 -3
- {unique_orchestrator-2026.42.0.dev0 → unique_orchestrator-2026.42.0.dev2}/pyproject.toml +3 -3
- {unique_orchestrator-2026.42.0.dev0 → unique_orchestrator-2026.42.0.dev2}/unique_orchestrator/_builders/history_manager.py +41 -7
- {unique_orchestrator-2026.42.0.dev0 → unique_orchestrator-2026.42.0.dev2}/unique_orchestrator/config.py +2 -0
- {unique_orchestrator-2026.42.0.dev0 → unique_orchestrator-2026.42.0.dev2}/unique_orchestrator/tests/test_config_services_validators.py +6 -0
- {unique_orchestrator-2026.42.0.dev0 → unique_orchestrator-2026.42.0.dev2}/README.md +0 -0
- {unique_orchestrator-2026.42.0.dev0 → unique_orchestrator-2026.42.0.dev2}/unique_orchestrator/__init__.py +0 -0
- {unique_orchestrator-2026.42.0.dev0 → unique_orchestrator-2026.42.0.dev2}/unique_orchestrator/_builders/__init__.py +0 -0
- {unique_orchestrator-2026.42.0.dev0 → unique_orchestrator-2026.42.0.dev2}/unique_orchestrator/_builders/inject_tool_reminders.py +0 -0
- {unique_orchestrator-2026.42.0.dev0 → unique_orchestrator-2026.42.0.dev2}/unique_orchestrator/_builders/loop_iteration_runner.py +0 -0
- {unique_orchestrator-2026.42.0.dev0 → unique_orchestrator-2026.42.0.dev2}/unique_orchestrator/_builders/open_file_setup.py +0 -0
- {unique_orchestrator-2026.42.0.dev0 → unique_orchestrator-2026.42.0.dev2}/unique_orchestrator/_builders/skill_setup.py +0 -0
- {unique_orchestrator-2026.42.0.dev0 → unique_orchestrator-2026.42.0.dev2}/unique_orchestrator/prompts/generic_reference_prompt.jinja2 +0 -0
- {unique_orchestrator-2026.42.0.dev0 → unique_orchestrator-2026.42.0.dev2}/unique_orchestrator/prompts/system_prompt.jinja2 +0 -0
- {unique_orchestrator-2026.42.0.dev0 → unique_orchestrator-2026.42.0.dev2}/unique_orchestrator/prompts/user_message_prompt.jinja2 +0 -0
- {unique_orchestrator-2026.42.0.dev0 → unique_orchestrator-2026.42.0.dev2}/unique_orchestrator/settings.py +0 -0
- {unique_orchestrator-2026.42.0.dev0 → unique_orchestrator-2026.42.0.dev2}/unique_orchestrator/tests/test_agent_config_rjsf_ui_schema.py +0 -0
- {unique_orchestrator-2026.42.0.dev0 → unique_orchestrator-2026.42.0.dev2}/unique_orchestrator/tests/test_build_loop_iteration_runner.py +0 -0
- {unique_orchestrator-2026.42.0.dev0 → unique_orchestrator-2026.42.0.dev2}/unique_orchestrator/tests/test_qwen_max_loop_iterations.py +0 -0
- {unique_orchestrator-2026.42.0.dev0 → unique_orchestrator-2026.42.0.dev2}/unique_orchestrator/tests/test_register_code_interpreter_postprocessors.py +0 -0
- {unique_orchestrator-2026.42.0.dev0 → unique_orchestrator-2026.42.0.dev2}/unique_orchestrator/tests/test_unique_ai_async_modify.py +0 -0
- {unique_orchestrator-2026.42.0.dev0 → unique_orchestrator-2026.42.0.dev2}/unique_orchestrator/tests/test_unique_ai_execution_timing.py +0 -0
- {unique_orchestrator-2026.42.0.dev0 → unique_orchestrator-2026.42.0.dev2}/unique_orchestrator/tests/test_unique_ai_get_filtered_user_metadata.py +0 -0
- {unique_orchestrator-2026.42.0.dev0 → unique_orchestrator-2026.42.0.dev2}/unique_orchestrator/tests/test_unique_ai_log_tool_calls.py +0 -0
- {unique_orchestrator-2026.42.0.dev0 → unique_orchestrator-2026.42.0.dev2}/unique_orchestrator/tests/test_unique_ai_loop_debug_params.py +0 -0
- {unique_orchestrator-2026.42.0.dev0 → unique_orchestrator-2026.42.0.dev2}/unique_orchestrator/tests/test_unique_ai_persist_tool_calls.py +0 -0
- {unique_orchestrator-2026.42.0.dev0 → unique_orchestrator-2026.42.0.dev2}/unique_orchestrator/tests/test_unique_ai_plan_or_execute_include.py +0 -0
- {unique_orchestrator-2026.42.0.dev0 → unique_orchestrator-2026.42.0.dev2}/unique_orchestrator/tests/test_unique_ai_reference_order.py +0 -0
- {unique_orchestrator-2026.42.0.dev0 → 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.dev0 → unique_orchestrator-2026.42.0.dev2}/unique_orchestrator/tests/test_unique_ai_token_usage.py +0 -0
- {unique_orchestrator-2026.42.0.dev0 → unique_orchestrator-2026.42.0.dev2}/unique_orchestrator/tests/test_utils_resolve_other_options.py +0 -0
- {unique_orchestrator-2026.42.0.dev0 → unique_orchestrator-2026.42.0.dev2}/unique_orchestrator/unique_ai.py +0 -0
- {unique_orchestrator-2026.42.0.dev0 → unique_orchestrator-2026.42.0.dev2}/unique_orchestrator/unique_ai_builder.py +0 -0
- {unique_orchestrator-2026.42.0.dev0 → 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)
|
|
@@ -530,6 +530,7 @@ GPT_FRONTIER_MODELS: frozenset[LanguageModelName] = frozenset(
|
|
|
530
530
|
LanguageModelName.AZURE_GPT_6_ASTRA_2026_0903,
|
|
531
531
|
LanguageModelName.AZURE_GPT_6_LUNA_2026_0922,
|
|
532
532
|
LanguageModelName.AZURE_GPT_6_SOL_2026_0922,
|
|
533
|
+
LanguageModelName.AZURE_GPT_61_SOL_2026_0929,
|
|
533
534
|
LanguageModelName.LITELLM_OPENAI_GPT_55,
|
|
534
535
|
LanguageModelName.LITELLM_OPENAI_GPT_55_PRO,
|
|
535
536
|
LanguageModelName.LITELLM_OPENAI_GPT_56_SOL,
|
|
@@ -538,6 +539,7 @@ GPT_FRONTIER_MODELS: frozenset[LanguageModelName] = frozenset(
|
|
|
538
539
|
LanguageModelName.LITELLM_OPENAI_GPT_6_ASTRA,
|
|
539
540
|
LanguageModelName.LITELLM_OPENAI_GPT_6_LUNA,
|
|
540
541
|
LanguageModelName.LITELLM_OPENAI_GPT_6_SOL,
|
|
542
|
+
LanguageModelName.LITELLM_OPENAI_GPT_61_SOL,
|
|
541
543
|
}
|
|
542
544
|
)
|
|
543
545
|
|
|
@@ -313,6 +313,7 @@ class TestUniqueAIConfigGptFrontierModelsResponsesApiValidator:
|
|
|
313
313
|
LanguageModelName.AZURE_GPT_6_ASTRA_2026_0903,
|
|
314
314
|
LanguageModelName.AZURE_GPT_6_LUNA_2026_0922,
|
|
315
315
|
LanguageModelName.AZURE_GPT_6_SOL_2026_0922,
|
|
316
|
+
LanguageModelName.AZURE_GPT_61_SOL_2026_0929,
|
|
316
317
|
LanguageModelName.LITELLM_OPENAI_GPT_55,
|
|
317
318
|
LanguageModelName.LITELLM_OPENAI_GPT_55_PRO,
|
|
318
319
|
LanguageModelName.LITELLM_OPENAI_GPT_56_SOL,
|
|
@@ -321,6 +322,7 @@ class TestUniqueAIConfigGptFrontierModelsResponsesApiValidator:
|
|
|
321
322
|
LanguageModelName.LITELLM_OPENAI_GPT_6_ASTRA,
|
|
322
323
|
LanguageModelName.LITELLM_OPENAI_GPT_6_LUNA,
|
|
323
324
|
LanguageModelName.LITELLM_OPENAI_GPT_6_SOL,
|
|
325
|
+
LanguageModelName.LITELLM_OPENAI_GPT_61_SOL,
|
|
324
326
|
],
|
|
325
327
|
)
|
|
326
328
|
def test_enables_responses_api_for_affected_models(
|
|
@@ -346,6 +348,7 @@ class TestUniqueAIConfigGptFrontierModelsResponsesApiValidator:
|
|
|
346
348
|
LanguageModelName.AZURE_GPT_6_ASTRA_2026_0903,
|
|
347
349
|
LanguageModelName.AZURE_GPT_6_LUNA_2026_0922,
|
|
348
350
|
LanguageModelName.AZURE_GPT_6_SOL_2026_0922,
|
|
351
|
+
LanguageModelName.AZURE_GPT_61_SOL_2026_0929,
|
|
349
352
|
LanguageModelName.LITELLM_OPENAI_GPT_55,
|
|
350
353
|
LanguageModelName.LITELLM_OPENAI_GPT_55_PRO,
|
|
351
354
|
LanguageModelName.LITELLM_OPENAI_GPT_56_SOL,
|
|
@@ -354,6 +357,7 @@ class TestUniqueAIConfigGptFrontierModelsResponsesApiValidator:
|
|
|
354
357
|
LanguageModelName.LITELLM_OPENAI_GPT_6_ASTRA,
|
|
355
358
|
LanguageModelName.LITELLM_OPENAI_GPT_6_LUNA,
|
|
356
359
|
LanguageModelName.LITELLM_OPENAI_GPT_6_SOL,
|
|
360
|
+
LanguageModelName.LITELLM_OPENAI_GPT_61_SOL,
|
|
357
361
|
],
|
|
358
362
|
)
|
|
359
363
|
def test_enables_responses_api_for_affected_models_with_tools(
|
|
@@ -388,6 +392,7 @@ class TestUniqueAIConfigGptFrontierModelsResponsesApiValidator:
|
|
|
388
392
|
LanguageModelName.AZURE_GPT_6_ASTRA_2026_0903,
|
|
389
393
|
LanguageModelName.AZURE_GPT_6_LUNA_2026_0922,
|
|
390
394
|
LanguageModelName.AZURE_GPT_6_SOL_2026_0922,
|
|
395
|
+
LanguageModelName.AZURE_GPT_61_SOL_2026_0929,
|
|
391
396
|
LanguageModelName.LITELLM_OPENAI_GPT_55,
|
|
392
397
|
LanguageModelName.LITELLM_OPENAI_GPT_55_PRO,
|
|
393
398
|
LanguageModelName.LITELLM_OPENAI_GPT_56_SOL,
|
|
@@ -396,6 +401,7 @@ class TestUniqueAIConfigGptFrontierModelsResponsesApiValidator:
|
|
|
396
401
|
LanguageModelName.LITELLM_OPENAI_GPT_6_ASTRA,
|
|
397
402
|
LanguageModelName.LITELLM_OPENAI_GPT_6_LUNA,
|
|
398
403
|
LanguageModelName.LITELLM_OPENAI_GPT_6_SOL,
|
|
404
|
+
LanguageModelName.LITELLM_OPENAI_GPT_61_SOL,
|
|
399
405
|
],
|
|
400
406
|
)
|
|
401
407
|
def test_keeps_responses_api_enabled_when_already_enabled(
|
|
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
|