unique-orchestrator 2026.40.0.dev1__tar.gz → 2026.40.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.40.0.dev1 → unique_orchestrator-2026.40.0.dev2}/PKG-INFO +2 -2
- {unique_orchestrator-2026.40.0.dev1 → unique_orchestrator-2026.40.0.dev2}/pyproject.toml +2 -2
- {unique_orchestrator-2026.40.0.dev1 → unique_orchestrator-2026.40.0.dev2}/unique_orchestrator/tests/test_register_code_interpreter_postprocessors.py +37 -1
- {unique_orchestrator-2026.40.0.dev1 → unique_orchestrator-2026.40.0.dev2}/unique_orchestrator/unique_ai_builder.py +3 -0
- {unique_orchestrator-2026.40.0.dev1 → unique_orchestrator-2026.40.0.dev2}/README.md +0 -0
- {unique_orchestrator-2026.40.0.dev1 → unique_orchestrator-2026.40.0.dev2}/unique_orchestrator/__init__.py +0 -0
- {unique_orchestrator-2026.40.0.dev1 → unique_orchestrator-2026.40.0.dev2}/unique_orchestrator/_builders/__init__.py +0 -0
- {unique_orchestrator-2026.40.0.dev1 → unique_orchestrator-2026.40.0.dev2}/unique_orchestrator/_builders/history_manager.py +0 -0
- {unique_orchestrator-2026.40.0.dev1 → unique_orchestrator-2026.40.0.dev2}/unique_orchestrator/_builders/inject_tool_reminders.py +0 -0
- {unique_orchestrator-2026.40.0.dev1 → unique_orchestrator-2026.40.0.dev2}/unique_orchestrator/_builders/loop_iteration_runner.py +0 -0
- {unique_orchestrator-2026.40.0.dev1 → unique_orchestrator-2026.40.0.dev2}/unique_orchestrator/_builders/open_file_setup.py +0 -0
- {unique_orchestrator-2026.40.0.dev1 → unique_orchestrator-2026.40.0.dev2}/unique_orchestrator/_builders/skill_setup.py +0 -0
- {unique_orchestrator-2026.40.0.dev1 → unique_orchestrator-2026.40.0.dev2}/unique_orchestrator/config.py +0 -0
- {unique_orchestrator-2026.40.0.dev1 → unique_orchestrator-2026.40.0.dev2}/unique_orchestrator/prompts/generic_reference_prompt.jinja2 +0 -0
- {unique_orchestrator-2026.40.0.dev1 → unique_orchestrator-2026.40.0.dev2}/unique_orchestrator/prompts/system_prompt.jinja2 +0 -0
- {unique_orchestrator-2026.40.0.dev1 → unique_orchestrator-2026.40.0.dev2}/unique_orchestrator/prompts/user_message_prompt.jinja2 +0 -0
- {unique_orchestrator-2026.40.0.dev1 → unique_orchestrator-2026.40.0.dev2}/unique_orchestrator/settings.py +0 -0
- {unique_orchestrator-2026.40.0.dev1 → unique_orchestrator-2026.40.0.dev2}/unique_orchestrator/tests/test_agent_config_rjsf_ui_schema.py +0 -0
- {unique_orchestrator-2026.40.0.dev1 → unique_orchestrator-2026.40.0.dev2}/unique_orchestrator/tests/test_build_loop_iteration_runner.py +0 -0
- {unique_orchestrator-2026.40.0.dev1 → unique_orchestrator-2026.40.0.dev2}/unique_orchestrator/tests/test_config_services_validators.py +0 -0
- {unique_orchestrator-2026.40.0.dev1 → unique_orchestrator-2026.40.0.dev2}/unique_orchestrator/tests/test_qwen_max_loop_iterations.py +0 -0
- {unique_orchestrator-2026.40.0.dev1 → unique_orchestrator-2026.40.0.dev2}/unique_orchestrator/tests/test_unique_ai_async_modify.py +0 -0
- {unique_orchestrator-2026.40.0.dev1 → unique_orchestrator-2026.40.0.dev2}/unique_orchestrator/tests/test_unique_ai_execution_timing.py +0 -0
- {unique_orchestrator-2026.40.0.dev1 → unique_orchestrator-2026.40.0.dev2}/unique_orchestrator/tests/test_unique_ai_get_filtered_user_metadata.py +0 -0
- {unique_orchestrator-2026.40.0.dev1 → unique_orchestrator-2026.40.0.dev2}/unique_orchestrator/tests/test_unique_ai_log_tool_calls.py +0 -0
- {unique_orchestrator-2026.40.0.dev1 → unique_orchestrator-2026.40.0.dev2}/unique_orchestrator/tests/test_unique_ai_loop_debug_params.py +0 -0
- {unique_orchestrator-2026.40.0.dev1 → unique_orchestrator-2026.40.0.dev2}/unique_orchestrator/tests/test_unique_ai_persist_tool_calls.py +0 -0
- {unique_orchestrator-2026.40.0.dev1 → unique_orchestrator-2026.40.0.dev2}/unique_orchestrator/tests/test_unique_ai_plan_or_execute_include.py +0 -0
- {unique_orchestrator-2026.40.0.dev1 → unique_orchestrator-2026.40.0.dev2}/unique_orchestrator/tests/test_unique_ai_reference_order.py +0 -0
- {unique_orchestrator-2026.40.0.dev1 → unique_orchestrator-2026.40.0.dev2}/unique_orchestrator/tests/test_unique_ai_render_system_prompt_user_instructions.py +0 -0
- {unique_orchestrator-2026.40.0.dev1 → unique_orchestrator-2026.40.0.dev2}/unique_orchestrator/tests/test_unique_ai_token_usage.py +0 -0
- {unique_orchestrator-2026.40.0.dev1 → unique_orchestrator-2026.40.0.dev2}/unique_orchestrator/tests/test_utils_resolve_other_options.py +0 -0
- {unique_orchestrator-2026.40.0.dev1 → unique_orchestrator-2026.40.0.dev2}/unique_orchestrator/unique_ai.py +0 -0
- {unique_orchestrator-2026.40.0.dev1 → unique_orchestrator-2026.40.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.40.0.
|
|
3
|
+
Version: 2026.40.0.dev2
|
|
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.dev5,<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.dev2"
|
|
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.dev5,<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",
|
|
@@ -257,6 +257,40 @@ class TestConfigPassthrough:
|
|
|
257
257
|
assert show_code_pp._is_enabled is True
|
|
258
258
|
assert display_files_pp._fence_enabled is False
|
|
259
259
|
|
|
260
|
+
@pytest.mark.ai
|
|
261
|
+
def test_display_files_postprocessor_receives_html_fence_config(self):
|
|
262
|
+
"""The enable_html_with_fence config value must be threaded through.
|
|
263
|
+
|
|
264
|
+
The field lives on the code-display config, but only the files
|
|
265
|
+
postprocessor reads it (UN-17927).
|
|
266
|
+
"""
|
|
267
|
+
from unique_toolkit.agentic.tools.openai_builtin.code_interpreter.postprocessors.code_display import (
|
|
268
|
+
ShowExecutedCodePostprocessorConfig,
|
|
269
|
+
)
|
|
270
|
+
|
|
271
|
+
ci_config = CodeInterpreterExtendedConfig(
|
|
272
|
+
executed_code_display_config=ShowExecutedCodePostprocessorConfig(
|
|
273
|
+
enable_html_with_fence=False
|
|
274
|
+
)
|
|
275
|
+
)
|
|
276
|
+
mgr = _make_postprocessor_manager()
|
|
277
|
+
|
|
278
|
+
_register_code_interpreter_postprocessors(
|
|
279
|
+
tools=[_make_code_interpreter_tool(config=ci_config)],
|
|
280
|
+
postprocessor_manager=mgr,
|
|
281
|
+
client=MagicMock(),
|
|
282
|
+
content_service=MagicMock(),
|
|
283
|
+
user_id="u1",
|
|
284
|
+
company_id="c1",
|
|
285
|
+
chat_id="ch1",
|
|
286
|
+
chat_service=MagicMock(),
|
|
287
|
+
)
|
|
288
|
+
|
|
289
|
+
display_files_pp: DisplayCodeInterpreterFilesPostProcessor = (
|
|
290
|
+
mgr.add_postprocessor.call_args_list[1][0][0]
|
|
291
|
+
)
|
|
292
|
+
assert display_files_pp._html_fence_enabled is False
|
|
293
|
+
|
|
260
294
|
@pytest.mark.ai
|
|
261
295
|
def test_display_files_postprocessor_receives_client_and_company_id(self):
|
|
262
296
|
"""DisplayCodeInterpreterFilesPostProcessor must receive the client and company_id."""
|
|
@@ -280,9 +314,11 @@ class TestConfigPassthrough:
|
|
|
280
314
|
mgr.add_postprocessor.call_args_list[1][0][0]
|
|
281
315
|
)
|
|
282
316
|
assert pp._client is client
|
|
283
|
-
assert pp._company_id == "company-99"
|
|
284
317
|
# All three IDs were passed, so short-term memory manager is initialised
|
|
285
318
|
assert pp._short_term_memory_manager is not None
|
|
319
|
+
# The postprocessor does not keep the company_id; it only scopes the memory.
|
|
320
|
+
memory_service = pp._short_term_memory_manager._short_term_memory_service
|
|
321
|
+
assert memory_service.company_id == "company-99"
|
|
286
322
|
|
|
287
323
|
|
|
288
324
|
# ---------------------------------------------------------------------------
|
|
@@ -521,6 +521,9 @@ def _register_code_interpreter_postprocessors(
|
|
|
521
521
|
code_execution_fence_enabled=(
|
|
522
522
|
code_interpreter_config.executed_code_display_config.enable_code_execution_fence
|
|
523
523
|
),
|
|
524
|
+
html_with_fence_enabled=(
|
|
525
|
+
code_interpreter_config.executed_code_display_config.enable_html_with_fence
|
|
526
|
+
),
|
|
524
527
|
)
|
|
525
528
|
)
|
|
526
529
|
|
|
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
|