unique_orchestrator 2026.24.0.dev1__tar.gz → 2026.24.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.
Files changed (32) hide show
  1. {unique_orchestrator-2026.24.0.dev1 → unique_orchestrator-2026.24.0.dev2}/PKG-INFO +5 -5
  2. {unique_orchestrator-2026.24.0.dev1 → unique_orchestrator-2026.24.0.dev2}/pyproject.toml +5 -5
  3. {unique_orchestrator-2026.24.0.dev1 → unique_orchestrator-2026.24.0.dev2}/unique_orchestrator/config.py +9 -2
  4. unique_orchestrator-2026.24.0.dev2/unique_orchestrator/tests/test_agent_config_rjsf_ui_schema.py +53 -0
  5. {unique_orchestrator-2026.24.0.dev1 → unique_orchestrator-2026.24.0.dev2}/README.md +0 -0
  6. {unique_orchestrator-2026.24.0.dev1 → unique_orchestrator-2026.24.0.dev2}/unique_orchestrator/__init__.py +0 -0
  7. {unique_orchestrator-2026.24.0.dev1 → unique_orchestrator-2026.24.0.dev2}/unique_orchestrator/_builders/__init__.py +0 -0
  8. {unique_orchestrator-2026.24.0.dev1 → unique_orchestrator-2026.24.0.dev2}/unique_orchestrator/_builders/inject_tool_reminders.py +0 -0
  9. {unique_orchestrator-2026.24.0.dev1 → unique_orchestrator-2026.24.0.dev2}/unique_orchestrator/_builders/loop_iteration_runner.py +0 -0
  10. {unique_orchestrator-2026.24.0.dev1 → unique_orchestrator-2026.24.0.dev2}/unique_orchestrator/_builders/open_file_setup.py +0 -0
  11. {unique_orchestrator-2026.24.0.dev1 → unique_orchestrator-2026.24.0.dev2}/unique_orchestrator/_builders/skill_setup.py +0 -0
  12. {unique_orchestrator-2026.24.0.dev1 → unique_orchestrator-2026.24.0.dev2}/unique_orchestrator/prompts/generic_reference_prompt.jinja2 +0 -0
  13. {unique_orchestrator-2026.24.0.dev1 → unique_orchestrator-2026.24.0.dev2}/unique_orchestrator/prompts/system_prompt.jinja2 +0 -0
  14. {unique_orchestrator-2026.24.0.dev1 → unique_orchestrator-2026.24.0.dev2}/unique_orchestrator/prompts/user_message_prompt.jinja2 +0 -0
  15. {unique_orchestrator-2026.24.0.dev1 → unique_orchestrator-2026.24.0.dev2}/unique_orchestrator/settings.py +0 -0
  16. {unique_orchestrator-2026.24.0.dev1 → unique_orchestrator-2026.24.0.dev2}/unique_orchestrator/tests/test_build_loop_iteration_runner.py +0 -0
  17. {unique_orchestrator-2026.24.0.dev1 → unique_orchestrator-2026.24.0.dev2}/unique_orchestrator/tests/test_config_services_validators.py +0 -0
  18. {unique_orchestrator-2026.24.0.dev1 → unique_orchestrator-2026.24.0.dev2}/unique_orchestrator/tests/test_qwen_max_loop_iterations.py +0 -0
  19. {unique_orchestrator-2026.24.0.dev1 → unique_orchestrator-2026.24.0.dev2}/unique_orchestrator/tests/test_register_code_interpreter_postprocessors.py +0 -0
  20. {unique_orchestrator-2026.24.0.dev1 → unique_orchestrator-2026.24.0.dev2}/unique_orchestrator/tests/test_unique_ai_async_modify.py +0 -0
  21. {unique_orchestrator-2026.24.0.dev1 → unique_orchestrator-2026.24.0.dev2}/unique_orchestrator/tests/test_unique_ai_execution_timing.py +0 -0
  22. {unique_orchestrator-2026.24.0.dev1 → unique_orchestrator-2026.24.0.dev2}/unique_orchestrator/tests/test_unique_ai_get_filtered_user_metadata.py +0 -0
  23. {unique_orchestrator-2026.24.0.dev1 → unique_orchestrator-2026.24.0.dev2}/unique_orchestrator/tests/test_unique_ai_log_tool_calls.py +0 -0
  24. {unique_orchestrator-2026.24.0.dev1 → unique_orchestrator-2026.24.0.dev2}/unique_orchestrator/tests/test_unique_ai_loop_debug_params.py +0 -0
  25. {unique_orchestrator-2026.24.0.dev1 → unique_orchestrator-2026.24.0.dev2}/unique_orchestrator/tests/test_unique_ai_persist_tool_calls.py +0 -0
  26. {unique_orchestrator-2026.24.0.dev1 → unique_orchestrator-2026.24.0.dev2}/unique_orchestrator/tests/test_unique_ai_plan_or_execute_include.py +0 -0
  27. {unique_orchestrator-2026.24.0.dev1 → unique_orchestrator-2026.24.0.dev2}/unique_orchestrator/tests/test_unique_ai_reference_order.py +0 -0
  28. {unique_orchestrator-2026.24.0.dev1 → unique_orchestrator-2026.24.0.dev2}/unique_orchestrator/tests/test_unique_ai_render_system_prompt_user_instructions.py +0 -0
  29. {unique_orchestrator-2026.24.0.dev1 → unique_orchestrator-2026.24.0.dev2}/unique_orchestrator/tests/test_utils_resolve_other_options.py +0 -0
  30. {unique_orchestrator-2026.24.0.dev1 → unique_orchestrator-2026.24.0.dev2}/unique_orchestrator/unique_ai.py +0 -0
  31. {unique_orchestrator-2026.24.0.dev1 → unique_orchestrator-2026.24.0.dev2}/unique_orchestrator/unique_ai_builder.py +0 -0
  32. {unique_orchestrator-2026.24.0.dev1 → unique_orchestrator-2026.24.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.24.0.dev1
3
+ Version: 2026.24.0.dev2
4
4
  Summary:
5
5
  Author: Andreas Hauri
6
6
  Author-email: Andreas Hauri <andreas.hauri@unique.ai>
@@ -9,13 +9,13 @@ 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.24.0.dev6,<2026.24.0rc0
12
+ Requires-Dist: unique-toolkit>=2026.24.0.dev11,<2026.24.0rc0
13
13
  Requires-Dist: unique-stock-ticker>=2026.24.0.dev1,<2026.24.0rc0
14
- Requires-Dist: unique-follow-up-questions>=2026.24.0.dev1,<2026.24.0rc0
14
+ Requires-Dist: unique-follow-up-questions>=2026.24.0.dev2,<2026.24.0rc0
15
15
  Requires-Dist: unique-internal-search>=2026.24.0.dev1,<2026.24.0rc0
16
16
  Requires-Dist: unique-deep-research>=2026.24.0.dev0,<2026.24.0rc0
17
- Requires-Dist: unique-web-search>=2026.24.0.dev0,<2026.24.0rc0
18
- Requires-Dist: unique-swot>=2026.24.0.dev1,<2026.24.0rc0
17
+ Requires-Dist: unique-web-search>=2026.24.0.dev3,<2026.24.0rc0
18
+ Requires-Dist: unique-swot>=2026.24.0.dev2,<2026.24.0rc0
19
19
  Requires-Dist: unique-skill-tool>=2026.24.0.dev0,<2026.24.0rc0
20
20
  Requires-Dist: openai>=1.109.1,<3
21
21
  Requires-Python: >=3.12, <4
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "unique_orchestrator"
3
- version = "2026.24.0.dev1"
3
+ version = "2026.24.0.dev2"
4
4
  description = ""
5
5
  readme = "README.md"
6
6
  license = { text = "Proprietary" }
@@ -13,13 +13,13 @@ 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.24.0.dev6,<2026.24.0rc0",
16
+ "unique-toolkit>=2026.24.0.dev11,<2026.24.0rc0",
17
17
  "unique-stock-ticker>=2026.24.0.dev1,<2026.24.0rc0",
18
- "unique-follow-up-questions>=2026.24.0.dev1,<2026.24.0rc0",
18
+ "unique-follow-up-questions>=2026.24.0.dev2,<2026.24.0rc0",
19
19
  "unique-internal-search>=2026.24.0.dev1,<2026.24.0rc0",
20
20
  "unique-deep-research>=2026.24.0.dev0,<2026.24.0rc0",
21
- "unique-web-search>=2026.24.0.dev0,<2026.24.0rc0",
22
- "unique-swot>=2026.24.0.dev1,<2026.24.0rc0",
21
+ "unique-web-search>=2026.24.0.dev3,<2026.24.0rc0",
22
+ "unique-swot>=2026.24.0.dev2,<2026.24.0rc0",
23
23
  "unique-skill-tool>=2026.24.0.dev0,<2026.24.0rc0",
24
24
  "openai>=1.109.1,<3",
25
25
  ]
@@ -14,6 +14,7 @@ from unique_internal_search.uploaded_search.config import (
14
14
  )
15
15
  from unique_stock_ticker.config import StockTickerConfig
16
16
  from unique_swot import SwotAnalysisTool, SwotAnalysisToolConfig
17
+ from unique_toolkit._common.pydantic.rjsf_tags import RJSFMetaTag
17
18
  from unique_toolkit._common.validators import (
18
19
  LMI,
19
20
  ClipInt,
@@ -236,14 +237,20 @@ class EvaluationConfig(BaseToolConfig):
236
237
 
237
238
 
238
239
  class UniqueAIPromptConfig(BaseToolConfig):
239
- system_prompt_template: str = Field(
240
+ system_prompt_template: Annotated[
241
+ str,
242
+ RJSFMetaTag.StringWidget.textarea(rows=25),
243
+ ] = Field(
240
244
  default_factory=lambda: (
241
245
  Path(__file__).parent / "prompts" / "system_prompt.jinja2"
242
246
  ).read_text(),
243
247
  description="The system prompt template as a Jinja2 template string.",
244
248
  )
245
249
 
246
- user_message_prompt_template: str = Field(
250
+ user_message_prompt_template: Annotated[
251
+ str,
252
+ RJSFMetaTag.StringWidget.textarea(rows=4),
253
+ ] = Field(
247
254
  default_factory=lambda: (
248
255
  Path(__file__).parent / "prompts" / "user_message_prompt.jinja2"
249
256
  ).read_text(),
@@ -0,0 +1,53 @@
1
+ from humps import camelize
2
+ from unique_toolkit._common.pydantic.rjsf_tags import ui_schema_for_model
3
+
4
+ from unique_orchestrator.config import UniqueAIAgentConfig
5
+
6
+
7
+ def _nested_get(data: dict, path: str) -> object:
8
+ current: object = data
9
+ for part in path.split("."):
10
+ assert isinstance(current, dict)
11
+ current = current[part]
12
+ return current
13
+
14
+
15
+ def test_unique_ai_agent_config__prompt_fields__textarea_widgets() -> None:
16
+ ui_schema = ui_schema_for_model(UniqueAIAgentConfig, key_transform=camelize)
17
+ assert _nested_get(ui_schema, "promptConfig.systemPromptTemplate") == {
18
+ "ui:widget": "textarea",
19
+ "ui:disabled": False,
20
+ "ui:readonly": False,
21
+ "ui:options": {"rows": 25},
22
+ "ui:emptyValue": "",
23
+ }
24
+ assert _nested_get(ui_schema, "promptConfig.userMessagePromptTemplate") == {
25
+ "ui:widget": "textarea",
26
+ "ui:disabled": False,
27
+ "ui:readonly": False,
28
+ "ui:options": {"rows": 4},
29
+ "ui:emptyValue": "",
30
+ }
31
+ assert _nested_get(ui_schema, "services.followUpQuestionsConfig.userPrompt") == {
32
+ "ui:widget": "textarea",
33
+ "ui:disabled": False,
34
+ "ui:readonly": False,
35
+ "ui:options": {"rows": 10},
36
+ "ui:emptyValue": "",
37
+ }
38
+ assert _nested_get(ui_schema, "services.followUpQuestionsConfig.systemPrompt") == {
39
+ "ui:widget": "textarea",
40
+ "ui:disabled": False,
41
+ "ui:readonly": False,
42
+ "ui:options": {"rows": 15},
43
+ "ui:emptyValue": "",
44
+ }
45
+ assert _nested_get(
46
+ ui_schema, "services.followUpQuestionsConfig.suggestionsFormat"
47
+ ) == {
48
+ "ui:widget": "textarea",
49
+ "ui:disabled": False,
50
+ "ui:readonly": False,
51
+ "ui:options": {"rows": 8},
52
+ "ui:emptyValue": "",
53
+ }