unique_orchestrator 2026.28.0.dev6__tar.gz → 2026.28.0.dev8__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.28.0.dev6 → unique_orchestrator-2026.28.0.dev8}/PKG-INFO +3 -3
  2. {unique_orchestrator-2026.28.0.dev6 → unique_orchestrator-2026.28.0.dev8}/pyproject.toml +3 -3
  3. {unique_orchestrator-2026.28.0.dev6 → unique_orchestrator-2026.28.0.dev8}/unique_orchestrator/config.py +2 -0
  4. {unique_orchestrator-2026.28.0.dev6 → unique_orchestrator-2026.28.0.dev8}/unique_orchestrator/prompts/system_prompt.jinja2 +1 -1
  5. {unique_orchestrator-2026.28.0.dev6 → unique_orchestrator-2026.28.0.dev8}/unique_orchestrator/unique_ai_builder.py +14 -2
  6. {unique_orchestrator-2026.28.0.dev6 → unique_orchestrator-2026.28.0.dev8}/README.md +0 -0
  7. {unique_orchestrator-2026.28.0.dev6 → unique_orchestrator-2026.28.0.dev8}/unique_orchestrator/__init__.py +0 -0
  8. {unique_orchestrator-2026.28.0.dev6 → unique_orchestrator-2026.28.0.dev8}/unique_orchestrator/_builders/__init__.py +0 -0
  9. {unique_orchestrator-2026.28.0.dev6 → unique_orchestrator-2026.28.0.dev8}/unique_orchestrator/_builders/inject_tool_reminders.py +0 -0
  10. {unique_orchestrator-2026.28.0.dev6 → unique_orchestrator-2026.28.0.dev8}/unique_orchestrator/_builders/loop_iteration_runner.py +0 -0
  11. {unique_orchestrator-2026.28.0.dev6 → unique_orchestrator-2026.28.0.dev8}/unique_orchestrator/_builders/open_file_setup.py +0 -0
  12. {unique_orchestrator-2026.28.0.dev6 → unique_orchestrator-2026.28.0.dev8}/unique_orchestrator/_builders/skill_setup.py +0 -0
  13. {unique_orchestrator-2026.28.0.dev6 → unique_orchestrator-2026.28.0.dev8}/unique_orchestrator/prompts/generic_reference_prompt.jinja2 +0 -0
  14. {unique_orchestrator-2026.28.0.dev6 → unique_orchestrator-2026.28.0.dev8}/unique_orchestrator/prompts/user_message_prompt.jinja2 +0 -0
  15. {unique_orchestrator-2026.28.0.dev6 → unique_orchestrator-2026.28.0.dev8}/unique_orchestrator/settings.py +0 -0
  16. {unique_orchestrator-2026.28.0.dev6 → unique_orchestrator-2026.28.0.dev8}/unique_orchestrator/tests/test_agent_config_rjsf_ui_schema.py +0 -0
  17. {unique_orchestrator-2026.28.0.dev6 → unique_orchestrator-2026.28.0.dev8}/unique_orchestrator/tests/test_build_loop_iteration_runner.py +0 -0
  18. {unique_orchestrator-2026.28.0.dev6 → unique_orchestrator-2026.28.0.dev8}/unique_orchestrator/tests/test_config_services_validators.py +0 -0
  19. {unique_orchestrator-2026.28.0.dev6 → unique_orchestrator-2026.28.0.dev8}/unique_orchestrator/tests/test_qwen_max_loop_iterations.py +0 -0
  20. {unique_orchestrator-2026.28.0.dev6 → unique_orchestrator-2026.28.0.dev8}/unique_orchestrator/tests/test_register_code_interpreter_postprocessors.py +0 -0
  21. {unique_orchestrator-2026.28.0.dev6 → unique_orchestrator-2026.28.0.dev8}/unique_orchestrator/tests/test_unique_ai_async_modify.py +0 -0
  22. {unique_orchestrator-2026.28.0.dev6 → unique_orchestrator-2026.28.0.dev8}/unique_orchestrator/tests/test_unique_ai_execution_timing.py +0 -0
  23. {unique_orchestrator-2026.28.0.dev6 → unique_orchestrator-2026.28.0.dev8}/unique_orchestrator/tests/test_unique_ai_get_filtered_user_metadata.py +0 -0
  24. {unique_orchestrator-2026.28.0.dev6 → unique_orchestrator-2026.28.0.dev8}/unique_orchestrator/tests/test_unique_ai_log_tool_calls.py +0 -0
  25. {unique_orchestrator-2026.28.0.dev6 → unique_orchestrator-2026.28.0.dev8}/unique_orchestrator/tests/test_unique_ai_loop_debug_params.py +0 -0
  26. {unique_orchestrator-2026.28.0.dev6 → unique_orchestrator-2026.28.0.dev8}/unique_orchestrator/tests/test_unique_ai_persist_tool_calls.py +0 -0
  27. {unique_orchestrator-2026.28.0.dev6 → unique_orchestrator-2026.28.0.dev8}/unique_orchestrator/tests/test_unique_ai_plan_or_execute_include.py +0 -0
  28. {unique_orchestrator-2026.28.0.dev6 → unique_orchestrator-2026.28.0.dev8}/unique_orchestrator/tests/test_unique_ai_reference_order.py +0 -0
  29. {unique_orchestrator-2026.28.0.dev6 → unique_orchestrator-2026.28.0.dev8}/unique_orchestrator/tests/test_unique_ai_render_system_prompt_user_instructions.py +0 -0
  30. {unique_orchestrator-2026.28.0.dev6 → unique_orchestrator-2026.28.0.dev8}/unique_orchestrator/tests/test_utils_resolve_other_options.py +0 -0
  31. {unique_orchestrator-2026.28.0.dev6 → unique_orchestrator-2026.28.0.dev8}/unique_orchestrator/unique_ai.py +0 -0
  32. {unique_orchestrator-2026.28.0.dev6 → unique_orchestrator-2026.28.0.dev8}/unique_orchestrator/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: unique-orchestrator
3
- Version: 2026.28.0.dev6
3
+ Version: 2026.28.0.dev8
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.28.0.dev13,<2026.28.0rc0
12
+ Requires-Dist: unique-toolkit>=2026.28.0.dev14,<2026.28.0rc0
13
13
  Requires-Dist: unique-stock-ticker>=2026.28.0.dev3,<2026.28.0rc0
14
14
  Requires-Dist: unique-follow-up-questions>=2026.28.0.dev3,<2026.28.0rc0
15
15
  Requires-Dist: unique-internal-search>=2026.28.0.dev4,<2026.28.0rc0
@@ -17,7 +17,7 @@ Requires-Dist: unique-deep-research>=2026.28.0.dev4,<2026.28.0rc0
17
17
  Requires-Dist: unique-web-search>=2026.28.0.dev5,<2026.28.0rc0
18
18
  Requires-Dist: unique-swot>=2026.28.0.dev3,<2026.28.0rc0
19
19
  Requires-Dist: unique-skill-tool>=2026.28.0.dev4,<2026.28.0rc0
20
- Requires-Dist: unique-user-memory>=2026.28.0.dev5,<2026.28.0rc0
20
+ Requires-Dist: unique-user-memory>=2026.28.0.dev6,<2026.28.0rc0
21
21
  Requires-Dist: openai>=1.109.1,<3
22
22
  Requires-Python: >=3.12, <4
23
23
  Description-Content-Type: text/markdown
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "unique_orchestrator"
3
- version = "2026.28.0.dev6"
3
+ version = "2026.28.0.dev8"
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.28.0.dev13,<2026.28.0rc0",
16
+ "unique-toolkit>=2026.28.0.dev14,<2026.28.0rc0",
17
17
  "unique-stock-ticker>=2026.28.0.dev3,<2026.28.0rc0",
18
18
  "unique-follow-up-questions>=2026.28.0.dev3,<2026.28.0rc0",
19
19
  "unique-internal-search>=2026.28.0.dev4,<2026.28.0rc0",
@@ -21,7 +21,7 @@ dependencies = [
21
21
  "unique-web-search>=2026.28.0.dev5,<2026.28.0rc0",
22
22
  "unique-swot>=2026.28.0.dev3,<2026.28.0rc0",
23
23
  "unique-skill-tool>=2026.28.0.dev4,<2026.28.0rc0",
24
- "unique-user-memory>=2026.28.0.dev5,<2026.28.0rc0",
24
+ "unique-user-memory>=2026.28.0.dev6,<2026.28.0rc0",
25
25
  "openai>=1.109.1,<3",
26
26
  ]
27
27
 
@@ -166,6 +166,8 @@ class SpaceConfigBase(BaseToolConfig, Generic[T]):
166
166
  cls, tools: list[ToolBuildConfig], info: ValidationInfo
167
167
  ) -> list[ToolBuildConfig]:
168
168
  for tool in tools:
169
+ if not tool.is_enabled:
170
+ continue
169
171
  if tool.name in (
170
172
  InternalSearchTool.name,
171
173
  WebSearchTool.name,
@@ -28,7 +28,7 @@ Here is some metadata about the user, which may help you write better queries, a
28
28
  {#- User Memory Section #}
29
29
  {% if user_memory and user_memory|length > 0 %}
30
30
  # What I know about you
31
- The following profile was distilled from past conversations with this user. Treat it as durable user context: adapt your tone, examples, and depth to it, but do not recite or quote it back verbatim, and do not treat it as authoritative for facts about the world.
31
+ The following profile was distilled from past conversations with this user. Treat it as durable user context: adapt your tone, examples, and depth to it. If the user asks what you know or remember about them, you may share this memory back to them, including verbatim if they request it. Do not treat it as authoritative for facts about the world.
32
32
 
33
33
  You can read this memory while answering. Memory updates happen only in a postprocessing step after your final answer, so do not claim that you can directly edit the memory during the main response.
34
34
 
@@ -361,16 +361,28 @@ async def _build_common(
361
361
 
362
362
  user_memory_text = ""
363
363
  if config.space.allow_user_memory:
364
+ user_memory_config = config.agent.services.user_memory_config
365
+ # The postprocessor consolidates memory with the orchestrator model or the
366
+ # configured one depending on this flag. Token capping at load time must use
367
+ # the same model so the loaded baseline matches what consolidation expects;
368
+ # otherwise a mismatched tokenizer can truncate memory.md differently.
369
+ memory_language_model = (
370
+ config.space.language_model
371
+ if user_memory_config.use_orchestrator_language_model
372
+ else user_memory_config.language_model
373
+ )
364
374
  user_memory_state = await load_user_memory(
365
375
  event=event,
366
- config=config.agent.services.user_memory_config,
376
+ config=user_memory_config,
377
+ language_model=memory_language_model,
367
378
  logger=logger,
368
379
  )
369
380
  if user_memory_state is not None:
370
381
  user_memory_text = user_memory_state.text
371
382
  postprocessor_manager.add_postprocessor(
372
383
  UserMemoryPostprocessor(
373
- config=config.agent.services.user_memory_config,
384
+ config=user_memory_config,
385
+ language_model=memory_language_model,
374
386
  event=event,
375
387
  state=user_memory_state,
376
388
  logger=logger,