unique_orchestrator 2026.40.0.dev0__tar.gz → 2026.40.0.dev1__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.40.0.dev0 → unique_orchestrator-2026.40.0.dev1}/PKG-INFO +2 -2
- {unique_orchestrator-2026.40.0.dev0 → unique_orchestrator-2026.40.0.dev1}/pyproject.toml +2 -2
- {unique_orchestrator-2026.40.0.dev0 → unique_orchestrator-2026.40.0.dev1}/unique_orchestrator/tests/test_register_code_interpreter_postprocessors.py +25 -6
- {unique_orchestrator-2026.40.0.dev0 → unique_orchestrator-2026.40.0.dev1}/unique_orchestrator/unique_ai_builder.py +3 -1
- {unique_orchestrator-2026.40.0.dev0 → unique_orchestrator-2026.40.0.dev1}/README.md +0 -0
- {unique_orchestrator-2026.40.0.dev0 → unique_orchestrator-2026.40.0.dev1}/unique_orchestrator/__init__.py +0 -0
- {unique_orchestrator-2026.40.0.dev0 → unique_orchestrator-2026.40.0.dev1}/unique_orchestrator/_builders/__init__.py +0 -0
- {unique_orchestrator-2026.40.0.dev0 → unique_orchestrator-2026.40.0.dev1}/unique_orchestrator/_builders/history_manager.py +0 -0
- {unique_orchestrator-2026.40.0.dev0 → unique_orchestrator-2026.40.0.dev1}/unique_orchestrator/_builders/inject_tool_reminders.py +0 -0
- {unique_orchestrator-2026.40.0.dev0 → unique_orchestrator-2026.40.0.dev1}/unique_orchestrator/_builders/loop_iteration_runner.py +0 -0
- {unique_orchestrator-2026.40.0.dev0 → unique_orchestrator-2026.40.0.dev1}/unique_orchestrator/_builders/open_file_setup.py +0 -0
- {unique_orchestrator-2026.40.0.dev0 → unique_orchestrator-2026.40.0.dev1}/unique_orchestrator/_builders/skill_setup.py +0 -0
- {unique_orchestrator-2026.40.0.dev0 → unique_orchestrator-2026.40.0.dev1}/unique_orchestrator/config.py +0 -0
- {unique_orchestrator-2026.40.0.dev0 → unique_orchestrator-2026.40.0.dev1}/unique_orchestrator/prompts/generic_reference_prompt.jinja2 +0 -0
- {unique_orchestrator-2026.40.0.dev0 → unique_orchestrator-2026.40.0.dev1}/unique_orchestrator/prompts/system_prompt.jinja2 +0 -0
- {unique_orchestrator-2026.40.0.dev0 → unique_orchestrator-2026.40.0.dev1}/unique_orchestrator/prompts/user_message_prompt.jinja2 +0 -0
- {unique_orchestrator-2026.40.0.dev0 → unique_orchestrator-2026.40.0.dev1}/unique_orchestrator/settings.py +0 -0
- {unique_orchestrator-2026.40.0.dev0 → unique_orchestrator-2026.40.0.dev1}/unique_orchestrator/tests/test_agent_config_rjsf_ui_schema.py +0 -0
- {unique_orchestrator-2026.40.0.dev0 → unique_orchestrator-2026.40.0.dev1}/unique_orchestrator/tests/test_build_loop_iteration_runner.py +0 -0
- {unique_orchestrator-2026.40.0.dev0 → unique_orchestrator-2026.40.0.dev1}/unique_orchestrator/tests/test_config_services_validators.py +0 -0
- {unique_orchestrator-2026.40.0.dev0 → unique_orchestrator-2026.40.0.dev1}/unique_orchestrator/tests/test_qwen_max_loop_iterations.py +0 -0
- {unique_orchestrator-2026.40.0.dev0 → unique_orchestrator-2026.40.0.dev1}/unique_orchestrator/tests/test_unique_ai_async_modify.py +0 -0
- {unique_orchestrator-2026.40.0.dev0 → unique_orchestrator-2026.40.0.dev1}/unique_orchestrator/tests/test_unique_ai_execution_timing.py +0 -0
- {unique_orchestrator-2026.40.0.dev0 → unique_orchestrator-2026.40.0.dev1}/unique_orchestrator/tests/test_unique_ai_get_filtered_user_metadata.py +0 -0
- {unique_orchestrator-2026.40.0.dev0 → unique_orchestrator-2026.40.0.dev1}/unique_orchestrator/tests/test_unique_ai_log_tool_calls.py +0 -0
- {unique_orchestrator-2026.40.0.dev0 → unique_orchestrator-2026.40.0.dev1}/unique_orchestrator/tests/test_unique_ai_loop_debug_params.py +0 -0
- {unique_orchestrator-2026.40.0.dev0 → unique_orchestrator-2026.40.0.dev1}/unique_orchestrator/tests/test_unique_ai_persist_tool_calls.py +0 -0
- {unique_orchestrator-2026.40.0.dev0 → unique_orchestrator-2026.40.0.dev1}/unique_orchestrator/tests/test_unique_ai_plan_or_execute_include.py +0 -0
- {unique_orchestrator-2026.40.0.dev0 → unique_orchestrator-2026.40.0.dev1}/unique_orchestrator/tests/test_unique_ai_reference_order.py +0 -0
- {unique_orchestrator-2026.40.0.dev0 → unique_orchestrator-2026.40.0.dev1}/unique_orchestrator/tests/test_unique_ai_render_system_prompt_user_instructions.py +0 -0
- {unique_orchestrator-2026.40.0.dev0 → unique_orchestrator-2026.40.0.dev1}/unique_orchestrator/tests/test_unique_ai_token_usage.py +0 -0
- {unique_orchestrator-2026.40.0.dev0 → unique_orchestrator-2026.40.0.dev1}/unique_orchestrator/tests/test_utils_resolve_other_options.py +0 -0
- {unique_orchestrator-2026.40.0.dev0 → unique_orchestrator-2026.40.0.dev1}/unique_orchestrator/unique_ai.py +0 -0
- {unique_orchestrator-2026.40.0.dev0 → unique_orchestrator-2026.40.0.dev1}/unique_orchestrator/utils.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: unique-orchestrator
|
|
3
|
-
Version: 2026.40.0.
|
|
3
|
+
Version: 2026.40.0.dev1
|
|
4
4
|
Summary:
|
|
5
5
|
Author: Andreas Hauri
|
|
6
6
|
Author-email: Andreas Hauri <andreas.hauri@unique.ai>
|
|
@@ -9,7 +9,7 @@ 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.40.0.
|
|
12
|
+
Requires-Dist: unique-toolkit>=2026.40.0.dev4,<2026.40.0rc0
|
|
13
13
|
Requires-Dist: unique-stock-ticker>=2026.40.0.dev0,<2026.40.0rc0
|
|
14
14
|
Requires-Dist: unique-follow-up-questions>=2026.40.0.dev0,<2026.40.0rc0
|
|
15
15
|
Requires-Dist: unique-internal-search>=2026.40.0.dev0,<2026.40.0rc0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "unique_orchestrator"
|
|
3
|
-
version = "2026.40.0.
|
|
3
|
+
version = "2026.40.0.dev1"
|
|
4
4
|
description = ""
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
license = { text = "Proprietary" }
|
|
@@ -13,7 +13,7 @@ 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.40.0.
|
|
16
|
+
"unique-toolkit>=2026.40.0.dev4,<2026.40.0rc0",
|
|
17
17
|
"unique-stock-ticker>=2026.40.0.dev0,<2026.40.0rc0",
|
|
18
18
|
"unique-follow-up-questions>=2026.40.0.dev0,<2026.40.0rc0",
|
|
19
19
|
"unique-internal-search>=2026.40.0.dev0,<2026.40.0rc0",
|
|
@@ -218,25 +218,44 @@ class TestConfigPassthrough:
|
|
|
218
218
|
assert postprocessor._config is custom_code_display_config
|
|
219
219
|
|
|
220
220
|
@pytest.mark.ai
|
|
221
|
-
def
|
|
222
|
-
"""
|
|
221
|
+
def test_show_executed_code_postprocessor_receives_fence_config(self):
|
|
222
|
+
"""The enable_code_execution_fence config value must be threaded through.
|
|
223
|
+
|
|
224
|
+
The field lives on the code-display config. When fences are disabled
|
|
225
|
+
there, the legacy executed-code display must become active (given the
|
|
226
|
+
enable=True default), and the files postprocessor must keep fences off.
|
|
227
|
+
"""
|
|
228
|
+
from unique_toolkit.agentic.tools.openai_builtin.code_interpreter.postprocessors.code_display import (
|
|
229
|
+
ShowExecutedCodePostprocessorConfig,
|
|
230
|
+
)
|
|
231
|
+
|
|
232
|
+
ci_config = CodeInterpreterExtendedConfig(
|
|
233
|
+
executed_code_display_config=ShowExecutedCodePostprocessorConfig(
|
|
234
|
+
enable_code_execution_fence=False
|
|
235
|
+
)
|
|
236
|
+
)
|
|
223
237
|
mgr = _make_postprocessor_manager()
|
|
224
238
|
|
|
225
239
|
_register_code_interpreter_postprocessors(
|
|
226
|
-
tools=[_make_code_interpreter_tool()],
|
|
240
|
+
tools=[_make_code_interpreter_tool(config=ci_config)],
|
|
227
241
|
postprocessor_manager=mgr,
|
|
228
242
|
client=MagicMock(),
|
|
229
243
|
content_service=MagicMock(),
|
|
230
244
|
user_id="u1",
|
|
231
|
-
company_id="
|
|
245
|
+
company_id="c1",
|
|
232
246
|
chat_id="ch1",
|
|
233
247
|
chat_service=MagicMock(),
|
|
234
248
|
)
|
|
235
249
|
|
|
236
|
-
|
|
250
|
+
show_code_pp: ShowExecutedCodePostprocessor = (
|
|
237
251
|
mgr.add_postprocessor.call_args_list[0][0][0]
|
|
238
252
|
)
|
|
239
|
-
|
|
253
|
+
display_files_pp: DisplayCodeInterpreterFilesPostProcessor = (
|
|
254
|
+
mgr.add_postprocessor.call_args_list[1][0][0]
|
|
255
|
+
)
|
|
256
|
+
# Fence off → legacy code display is active; files postprocessor keeps fences off.
|
|
257
|
+
assert show_code_pp._is_enabled is True
|
|
258
|
+
assert display_files_pp._fence_enabled is False
|
|
240
259
|
|
|
241
260
|
@pytest.mark.ai
|
|
242
261
|
def test_display_files_postprocessor_receives_client_and_company_id(self):
|
|
@@ -507,7 +507,6 @@ def _register_code_interpreter_postprocessors(
|
|
|
507
507
|
postprocessor_manager.add_postprocessor(
|
|
508
508
|
ShowExecutedCodePostprocessor(
|
|
509
509
|
config=code_interpreter_config.executed_code_display_config,
|
|
510
|
-
company_id=company_id,
|
|
511
510
|
)
|
|
512
511
|
)
|
|
513
512
|
postprocessor_manager.add_postprocessor(
|
|
@@ -519,6 +518,9 @@ def _register_code_interpreter_postprocessors(
|
|
|
519
518
|
company_id=company_id,
|
|
520
519
|
chat_id=chat_id,
|
|
521
520
|
chat_service=chat_service,
|
|
521
|
+
code_execution_fence_enabled=(
|
|
522
|
+
code_interpreter_config.executed_code_display_config.enable_code_execution_fence
|
|
523
|
+
),
|
|
522
524
|
)
|
|
523
525
|
)
|
|
524
526
|
|
|
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
|