unique_orchestrator 2026.30.0.dev8__tar.gz → 2026.30.0.dev10__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.30.0.dev8 → unique_orchestrator-2026.30.0.dev10}/PKG-INFO +4 -4
  2. {unique_orchestrator-2026.30.0.dev8 → unique_orchestrator-2026.30.0.dev10}/pyproject.toml +4 -4
  3. {unique_orchestrator-2026.30.0.dev8 → unique_orchestrator-2026.30.0.dev10}/unique_orchestrator/config.py +2 -2
  4. {unique_orchestrator-2026.30.0.dev8 → unique_orchestrator-2026.30.0.dev10}/unique_orchestrator/unique_ai.py +12 -0
  5. {unique_orchestrator-2026.30.0.dev8 → unique_orchestrator-2026.30.0.dev10}/unique_orchestrator/unique_ai_builder.py +1 -0
  6. {unique_orchestrator-2026.30.0.dev8 → unique_orchestrator-2026.30.0.dev10}/README.md +0 -0
  7. {unique_orchestrator-2026.30.0.dev8 → unique_orchestrator-2026.30.0.dev10}/unique_orchestrator/__init__.py +0 -0
  8. {unique_orchestrator-2026.30.0.dev8 → unique_orchestrator-2026.30.0.dev10}/unique_orchestrator/_builders/__init__.py +0 -0
  9. {unique_orchestrator-2026.30.0.dev8 → unique_orchestrator-2026.30.0.dev10}/unique_orchestrator/_builders/history_manager.py +0 -0
  10. {unique_orchestrator-2026.30.0.dev8 → unique_orchestrator-2026.30.0.dev10}/unique_orchestrator/_builders/inject_tool_reminders.py +0 -0
  11. {unique_orchestrator-2026.30.0.dev8 → unique_orchestrator-2026.30.0.dev10}/unique_orchestrator/_builders/loop_iteration_runner.py +0 -0
  12. {unique_orchestrator-2026.30.0.dev8 → unique_orchestrator-2026.30.0.dev10}/unique_orchestrator/_builders/open_file_setup.py +0 -0
  13. {unique_orchestrator-2026.30.0.dev8 → unique_orchestrator-2026.30.0.dev10}/unique_orchestrator/_builders/skill_setup.py +0 -0
  14. {unique_orchestrator-2026.30.0.dev8 → unique_orchestrator-2026.30.0.dev10}/unique_orchestrator/prompts/generic_reference_prompt.jinja2 +0 -0
  15. {unique_orchestrator-2026.30.0.dev8 → unique_orchestrator-2026.30.0.dev10}/unique_orchestrator/prompts/system_prompt.jinja2 +0 -0
  16. {unique_orchestrator-2026.30.0.dev8 → unique_orchestrator-2026.30.0.dev10}/unique_orchestrator/prompts/user_message_prompt.jinja2 +0 -0
  17. {unique_orchestrator-2026.30.0.dev8 → unique_orchestrator-2026.30.0.dev10}/unique_orchestrator/settings.py +0 -0
  18. {unique_orchestrator-2026.30.0.dev8 → unique_orchestrator-2026.30.0.dev10}/unique_orchestrator/tests/test_agent_config_rjsf_ui_schema.py +0 -0
  19. {unique_orchestrator-2026.30.0.dev8 → unique_orchestrator-2026.30.0.dev10}/unique_orchestrator/tests/test_build_loop_iteration_runner.py +0 -0
  20. {unique_orchestrator-2026.30.0.dev8 → unique_orchestrator-2026.30.0.dev10}/unique_orchestrator/tests/test_config_services_validators.py +0 -0
  21. {unique_orchestrator-2026.30.0.dev8 → unique_orchestrator-2026.30.0.dev10}/unique_orchestrator/tests/test_qwen_max_loop_iterations.py +0 -0
  22. {unique_orchestrator-2026.30.0.dev8 → unique_orchestrator-2026.30.0.dev10}/unique_orchestrator/tests/test_register_code_interpreter_postprocessors.py +0 -0
  23. {unique_orchestrator-2026.30.0.dev8 → unique_orchestrator-2026.30.0.dev10}/unique_orchestrator/tests/test_unique_ai_async_modify.py +0 -0
  24. {unique_orchestrator-2026.30.0.dev8 → unique_orchestrator-2026.30.0.dev10}/unique_orchestrator/tests/test_unique_ai_execution_timing.py +0 -0
  25. {unique_orchestrator-2026.30.0.dev8 → unique_orchestrator-2026.30.0.dev10}/unique_orchestrator/tests/test_unique_ai_get_filtered_user_metadata.py +0 -0
  26. {unique_orchestrator-2026.30.0.dev8 → unique_orchestrator-2026.30.0.dev10}/unique_orchestrator/tests/test_unique_ai_log_tool_calls.py +0 -0
  27. {unique_orchestrator-2026.30.0.dev8 → unique_orchestrator-2026.30.0.dev10}/unique_orchestrator/tests/test_unique_ai_loop_debug_params.py +0 -0
  28. {unique_orchestrator-2026.30.0.dev8 → unique_orchestrator-2026.30.0.dev10}/unique_orchestrator/tests/test_unique_ai_persist_tool_calls.py +0 -0
  29. {unique_orchestrator-2026.30.0.dev8 → unique_orchestrator-2026.30.0.dev10}/unique_orchestrator/tests/test_unique_ai_plan_or_execute_include.py +0 -0
  30. {unique_orchestrator-2026.30.0.dev8 → unique_orchestrator-2026.30.0.dev10}/unique_orchestrator/tests/test_unique_ai_reference_order.py +0 -0
  31. {unique_orchestrator-2026.30.0.dev8 → unique_orchestrator-2026.30.0.dev10}/unique_orchestrator/tests/test_unique_ai_render_system_prompt_user_instructions.py +0 -0
  32. {unique_orchestrator-2026.30.0.dev8 → unique_orchestrator-2026.30.0.dev10}/unique_orchestrator/tests/test_unique_ai_token_usage.py +0 -0
  33. {unique_orchestrator-2026.30.0.dev8 → unique_orchestrator-2026.30.0.dev10}/unique_orchestrator/tests/test_utils_resolve_other_options.py +0 -0
  34. {unique_orchestrator-2026.30.0.dev8 → unique_orchestrator-2026.30.0.dev10}/unique_orchestrator/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: unique-orchestrator
3
- Version: 2026.30.0.dev8
3
+ Version: 2026.30.0.dev10
4
4
  Summary:
5
5
  Author: Andreas Hauri
6
6
  Author-email: Andreas Hauri <andreas.hauri@unique.ai>
@@ -9,15 +9,15 @@ 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.30.0.dev20,<2026.30.0rc0
12
+ Requires-Dist: unique-toolkit>=2026.30.0.dev22,<2026.30.0rc0
13
13
  Requires-Dist: unique-stock-ticker>=2026.30.0.dev0,<2026.30.0rc0
14
14
  Requires-Dist: unique-follow-up-questions>=2026.30.0.dev1,<2026.30.0rc0
15
15
  Requires-Dist: unique-internal-search>=2026.30.0.dev0,<2026.30.0rc0
16
16
  Requires-Dist: unique-deep-research>=2026.30.0.dev0,<2026.30.0rc0
17
- Requires-Dist: unique-web-search>=2026.30.0.dev3,<2026.30.0rc0
17
+ Requires-Dist: unique-web-search>=2026.30.0.dev4,<2026.30.0rc0
18
18
  Requires-Dist: unique-swot>=2026.30.0.dev0,<2026.30.0rc0
19
19
  Requires-Dist: unique-skill-tool>=2026.30.0.dev0,<2026.30.0rc0
20
- Requires-Dist: unique-user-memory>=2026.30.0.dev0,<2026.30.0rc0
20
+ Requires-Dist: unique-user-memory>=2026.30.0.dev2,<2026.30.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.30.0.dev8"
3
+ version = "2026.30.0.dev10"
4
4
  description = ""
5
5
  readme = "README.md"
6
6
  license = { text = "Proprietary" }
@@ -13,15 +13,15 @@ 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.30.0.dev20,<2026.30.0rc0",
16
+ "unique-toolkit>=2026.30.0.dev22,<2026.30.0rc0",
17
17
  "unique-stock-ticker>=2026.30.0.dev0,<2026.30.0rc0",
18
18
  "unique-follow-up-questions>=2026.30.0.dev1,<2026.30.0rc0",
19
19
  "unique-internal-search>=2026.30.0.dev0,<2026.30.0rc0",
20
20
  "unique-deep-research>=2026.30.0.dev0,<2026.30.0rc0",
21
- "unique-web-search>=2026.30.0.dev3,<2026.30.0rc0",
21
+ "unique-web-search>=2026.30.0.dev4,<2026.30.0rc0",
22
22
  "unique-swot>=2026.30.0.dev0,<2026.30.0rc0",
23
23
  "unique-skill-tool>=2026.30.0.dev0,<2026.30.0rc0",
24
- "unique-user-memory>=2026.30.0.dev0,<2026.30.0rc0",
24
+ "unique-user-memory>=2026.30.0.dev2,<2026.30.0rc0",
25
25
  "openai>=1.109.1,<3",
26
26
  ]
27
27
 
@@ -301,8 +301,8 @@ class UniqueAIServices(BaseToolConfig):
301
301
  )
302
302
 
303
303
  user_memory_config: UserMemoryConfig = Field(
304
- title="User Memory (Experimental)",
305
- description="Configuration for persistent user memory. Experimental feature - requires activation via feature flag.",
304
+ title="Context Memory",
305
+ description="Configuration for persistent context memory.",
306
306
  default_factory=UserMemoryConfig,
307
307
  )
308
308
 
@@ -62,6 +62,7 @@ from unique_toolkit.protocols.support import (
62
62
  ResponsesSupportCompleteWithReferences,
63
63
  SupportCompleteWithReferences,
64
64
  )
65
+ from unique_user_memory.user_memory_postprocessor import UserMemoryPostprocessor
65
66
 
66
67
  from unique_orchestrator._builders.inject_tool_reminders import (
67
68
  inject_tool_reminders_into_user_message,
@@ -208,6 +209,9 @@ class UniqueAI:
208
209
  self._current_loop_timing: dict[str, Any] = {}
209
210
  self._loop_debug_params: list[dict[str, Any]] = []
210
211
  self._generated_files_info: ArtifactsDebugInfo | None = None
212
+ # None when the user-memory postprocessor is not activated for this turn;
213
+ # True/False when it ran and did/didn't update the stored memory profile.
214
+ self._context_memory_updated: bool | None = None
211
215
  self._invocation_stats: list[LanguageModelInvocationStats] = []
212
216
 
213
217
  async def _on_cancellation(self, _event: CancellationEvent) -> None:
@@ -238,6 +242,7 @@ class UniqueAI:
238
242
  # reaching _handle_no_tool_calls (tool takes control / empty response /
239
243
  # cancellation) must not report the previous run's artifacts.
240
244
  self._generated_files_info = None
245
+ self._context_memory_updated = None
241
246
  self._invocation_stats = []
242
247
  run_start = time.perf_counter()
243
248
 
@@ -409,6 +414,7 @@ class UniqueAI:
409
414
  loop_iteration_count=len(self._execution_times),
410
415
  total_time_to_answer_ms=total_time_to_answer_ms,
411
416
  artifacts=self._generated_files_info,
417
+ context_memory_updated=self._context_memory_updated,
412
418
  )
413
419
 
414
420
  # Get current debug info from chat service and add debug info from run. Do not update if DeepResearch is in the tool names.
@@ -755,6 +761,12 @@ class UniqueAI:
755
761
  DisplayCodeInterpreterFilesPostProcessor.__name__
756
762
  ),
757
763
  )
764
+ # Absent key => postprocessor not activated this turn (stays None);
765
+ # present => bool telling whether the memory profile was updated.
766
+ self._context_memory_updated = cast(
767
+ "bool | None",
768
+ postprocessor_outputs.get(UserMemoryPostprocessor.__name__),
769
+ )
758
770
  self._current_loop_timing["post_processing"].update(
759
771
  self._postprocessor_manager.get_execution_times()
760
772
  )
@@ -385,6 +385,7 @@ async def _build_common(
385
385
  event=event,
386
386
  state=user_memory_state,
387
387
  logger=logger,
388
+ chat_service=chat_service,
388
389
  )
389
390
  )
390
391