unique_orchestrator 2026.34.0.dev5__tar.gz → 2026.34.0.dev6__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.
Files changed (34) hide show
  1. {unique_orchestrator-2026.34.0.dev5 → unique_orchestrator-2026.34.0.dev6}/PKG-INFO +2 -2
  2. {unique_orchestrator-2026.34.0.dev5 → unique_orchestrator-2026.34.0.dev6}/pyproject.toml +2 -2
  3. {unique_orchestrator-2026.34.0.dev5 → unique_orchestrator-2026.34.0.dev6}/unique_orchestrator/config.py +23 -1
  4. {unique_orchestrator-2026.34.0.dev5 → unique_orchestrator-2026.34.0.dev6}/unique_orchestrator/unique_ai_builder.py +9 -0
  5. {unique_orchestrator-2026.34.0.dev5 → unique_orchestrator-2026.34.0.dev6}/README.md +0 -0
  6. {unique_orchestrator-2026.34.0.dev5 → unique_orchestrator-2026.34.0.dev6}/unique_orchestrator/__init__.py +0 -0
  7. {unique_orchestrator-2026.34.0.dev5 → unique_orchestrator-2026.34.0.dev6}/unique_orchestrator/_builders/__init__.py +0 -0
  8. {unique_orchestrator-2026.34.0.dev5 → unique_orchestrator-2026.34.0.dev6}/unique_orchestrator/_builders/history_manager.py +0 -0
  9. {unique_orchestrator-2026.34.0.dev5 → unique_orchestrator-2026.34.0.dev6}/unique_orchestrator/_builders/inject_tool_reminders.py +0 -0
  10. {unique_orchestrator-2026.34.0.dev5 → unique_orchestrator-2026.34.0.dev6}/unique_orchestrator/_builders/loop_iteration_runner.py +0 -0
  11. {unique_orchestrator-2026.34.0.dev5 → unique_orchestrator-2026.34.0.dev6}/unique_orchestrator/_builders/open_file_setup.py +0 -0
  12. {unique_orchestrator-2026.34.0.dev5 → unique_orchestrator-2026.34.0.dev6}/unique_orchestrator/_builders/skill_setup.py +0 -0
  13. {unique_orchestrator-2026.34.0.dev5 → unique_orchestrator-2026.34.0.dev6}/unique_orchestrator/prompts/generic_reference_prompt.jinja2 +0 -0
  14. {unique_orchestrator-2026.34.0.dev5 → unique_orchestrator-2026.34.0.dev6}/unique_orchestrator/prompts/system_prompt.jinja2 +0 -0
  15. {unique_orchestrator-2026.34.0.dev5 → unique_orchestrator-2026.34.0.dev6}/unique_orchestrator/prompts/user_message_prompt.jinja2 +0 -0
  16. {unique_orchestrator-2026.34.0.dev5 → unique_orchestrator-2026.34.0.dev6}/unique_orchestrator/settings.py +0 -0
  17. {unique_orchestrator-2026.34.0.dev5 → unique_orchestrator-2026.34.0.dev6}/unique_orchestrator/tests/test_agent_config_rjsf_ui_schema.py +0 -0
  18. {unique_orchestrator-2026.34.0.dev5 → unique_orchestrator-2026.34.0.dev6}/unique_orchestrator/tests/test_build_loop_iteration_runner.py +0 -0
  19. {unique_orchestrator-2026.34.0.dev5 → unique_orchestrator-2026.34.0.dev6}/unique_orchestrator/tests/test_config_services_validators.py +0 -0
  20. {unique_orchestrator-2026.34.0.dev5 → unique_orchestrator-2026.34.0.dev6}/unique_orchestrator/tests/test_qwen_max_loop_iterations.py +0 -0
  21. {unique_orchestrator-2026.34.0.dev5 → unique_orchestrator-2026.34.0.dev6}/unique_orchestrator/tests/test_register_code_interpreter_postprocessors.py +0 -0
  22. {unique_orchestrator-2026.34.0.dev5 → unique_orchestrator-2026.34.0.dev6}/unique_orchestrator/tests/test_unique_ai_async_modify.py +0 -0
  23. {unique_orchestrator-2026.34.0.dev5 → unique_orchestrator-2026.34.0.dev6}/unique_orchestrator/tests/test_unique_ai_execution_timing.py +0 -0
  24. {unique_orchestrator-2026.34.0.dev5 → unique_orchestrator-2026.34.0.dev6}/unique_orchestrator/tests/test_unique_ai_get_filtered_user_metadata.py +0 -0
  25. {unique_orchestrator-2026.34.0.dev5 → unique_orchestrator-2026.34.0.dev6}/unique_orchestrator/tests/test_unique_ai_log_tool_calls.py +0 -0
  26. {unique_orchestrator-2026.34.0.dev5 → unique_orchestrator-2026.34.0.dev6}/unique_orchestrator/tests/test_unique_ai_loop_debug_params.py +0 -0
  27. {unique_orchestrator-2026.34.0.dev5 → unique_orchestrator-2026.34.0.dev6}/unique_orchestrator/tests/test_unique_ai_persist_tool_calls.py +0 -0
  28. {unique_orchestrator-2026.34.0.dev5 → unique_orchestrator-2026.34.0.dev6}/unique_orchestrator/tests/test_unique_ai_plan_or_execute_include.py +0 -0
  29. {unique_orchestrator-2026.34.0.dev5 → unique_orchestrator-2026.34.0.dev6}/unique_orchestrator/tests/test_unique_ai_reference_order.py +0 -0
  30. {unique_orchestrator-2026.34.0.dev5 → unique_orchestrator-2026.34.0.dev6}/unique_orchestrator/tests/test_unique_ai_render_system_prompt_user_instructions.py +0 -0
  31. {unique_orchestrator-2026.34.0.dev5 → unique_orchestrator-2026.34.0.dev6}/unique_orchestrator/tests/test_unique_ai_token_usage.py +0 -0
  32. {unique_orchestrator-2026.34.0.dev5 → unique_orchestrator-2026.34.0.dev6}/unique_orchestrator/tests/test_utils_resolve_other_options.py +0 -0
  33. {unique_orchestrator-2026.34.0.dev5 → unique_orchestrator-2026.34.0.dev6}/unique_orchestrator/unique_ai.py +0 -0
  34. {unique_orchestrator-2026.34.0.dev5 → unique_orchestrator-2026.34.0.dev6}/unique_orchestrator/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: unique-orchestrator
3
- Version: 2026.34.0.dev5
3
+ Version: 2026.34.0.dev6
4
4
  Summary:
5
5
  Author: Andreas Hauri
6
6
  Author-email: Andreas Hauri <andreas.hauri@unique.ai>
@@ -14,7 +14,7 @@ Requires-Dist: unique-stock-ticker>=2026.34.0.dev4,<2026.34.0rc0
14
14
  Requires-Dist: unique-follow-up-questions>=2026.34.0.dev4,<2026.34.0rc0
15
15
  Requires-Dist: unique-internal-search>=2026.34.0.dev4,<2026.34.0rc0
16
16
  Requires-Dist: unique-deep-research>=2026.34.0.dev4,<2026.34.0rc0
17
- Requires-Dist: unique-web-search>=2026.34.0.dev7,<2026.34.0rc0
17
+ Requires-Dist: unique-web-search>=2026.34.0.dev8,<2026.34.0rc0
18
18
  Requires-Dist: unique-swot>=2026.34.0.dev4,<2026.34.0rc0
19
19
  Requires-Dist: unique-skill-tool>=2026.34.0.dev4,<2026.34.0rc0
20
20
  Requires-Dist: unique-user-memory>=2026.34.0.dev7,<2026.34.0rc0
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "unique_orchestrator"
3
- version = "2026.34.0.dev5"
3
+ version = "2026.34.0.dev6"
4
4
  description = ""
5
5
  readme = "README.md"
6
6
  license = { text = "Proprietary" }
@@ -18,7 +18,7 @@ dependencies = [
18
18
  "unique-follow-up-questions>=2026.34.0.dev4,<2026.34.0rc0",
19
19
  "unique-internal-search>=2026.34.0.dev4,<2026.34.0rc0",
20
20
  "unique-deep-research>=2026.34.0.dev4,<2026.34.0rc0",
21
- "unique-web-search>=2026.34.0.dev7,<2026.34.0rc0",
21
+ "unique-web-search>=2026.34.0.dev8,<2026.34.0rc0",
22
22
  "unique-swot>=2026.34.0.dev4,<2026.34.0rc0",
23
23
  "unique-skill-tool>=2026.34.0.dev4,<2026.34.0rc0",
24
24
  "unique-user-memory>=2026.34.0.dev7,<2026.34.0rc0",
@@ -2,7 +2,13 @@ from enum import StrEnum
2
2
  from pathlib import Path
3
3
  from typing import Annotated, Any, Generic, Literal, TypeVar
4
4
 
5
- from pydantic import Field, ValidationInfo, field_validator, model_validator
5
+ from pydantic import (
6
+ AliasChoices,
7
+ Field,
8
+ ValidationInfo,
9
+ field_validator,
10
+ model_validator,
11
+ )
6
12
  from pydantic.json_schema import SkipJsonSchema
7
13
  from unique_deep_research.config import DeepResearchToolConfig
8
14
  from unique_deep_research.service import DeepResearchTool
@@ -106,6 +112,22 @@ class SwitchableLanguageModelConfig(BaseToolConfig):
106
112
  "the value validates when copied on model choice."
107
113
  ),
108
114
  )
115
+ additional_llm_options: dict[str, Any] | None = Field(
116
+ default=None,
117
+ # The node backend forwards this key as `additionalLLMOptions` (LLM
118
+ # uppercase), which the `to_camel` alias generator would not match.
119
+ validation_alias=AliasChoices(
120
+ "additional_llm_options",
121
+ "additionalLlmOptions",
122
+ "additionalLLMOptions",
123
+ ),
124
+ description=(
125
+ "Optional per-model provider-specific request options (e.g. "
126
+ "`reasoning_effort`) shallow-merged into "
127
+ "agent.experimental.additional_llm_options when chat users select "
128
+ "this model. Per-model keys win over the space-level options."
129
+ ),
130
+ )
109
131
 
110
132
 
111
133
  class SpaceConfigBase(BaseToolConfig, Generic[T]):
@@ -250,6 +250,15 @@ def _apply_model_choice_override(
250
250
  switchable_entry.temperature
251
251
  )
252
252
 
253
+ if switchable_entry is not None and switchable_entry.additional_llm_options:
254
+ config_data.setdefault("agent", {})
255
+ config_data["agent"].setdefault("experimental", {})
256
+ experimental = config_data["agent"]["experimental"]
257
+ experimental["additional_llm_options"] = {
258
+ **experimental.get("additional_llm_options", {}),
259
+ **switchable_entry.additional_llm_options,
260
+ }
261
+
253
262
  validated_config = UniqueAIConfig.model_validate(config_data)
254
263
 
255
264
  logger.info(