unique_orchestrator 2026.32.0.dev1__tar.gz → 2026.32.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 (34) hide show
  1. {unique_orchestrator-2026.32.0.dev1 → unique_orchestrator-2026.32.0.dev2}/PKG-INFO +3 -3
  2. {unique_orchestrator-2026.32.0.dev1 → unique_orchestrator-2026.32.0.dev2}/pyproject.toml +3 -3
  3. {unique_orchestrator-2026.32.0.dev1 → unique_orchestrator-2026.32.0.dev2}/unique_orchestrator/tests/test_unique_ai_token_usage.py +22 -2
  4. {unique_orchestrator-2026.32.0.dev1 → unique_orchestrator-2026.32.0.dev2}/README.md +0 -0
  5. {unique_orchestrator-2026.32.0.dev1 → unique_orchestrator-2026.32.0.dev2}/unique_orchestrator/__init__.py +0 -0
  6. {unique_orchestrator-2026.32.0.dev1 → unique_orchestrator-2026.32.0.dev2}/unique_orchestrator/_builders/__init__.py +0 -0
  7. {unique_orchestrator-2026.32.0.dev1 → unique_orchestrator-2026.32.0.dev2}/unique_orchestrator/_builders/history_manager.py +0 -0
  8. {unique_orchestrator-2026.32.0.dev1 → unique_orchestrator-2026.32.0.dev2}/unique_orchestrator/_builders/inject_tool_reminders.py +0 -0
  9. {unique_orchestrator-2026.32.0.dev1 → unique_orchestrator-2026.32.0.dev2}/unique_orchestrator/_builders/loop_iteration_runner.py +0 -0
  10. {unique_orchestrator-2026.32.0.dev1 → unique_orchestrator-2026.32.0.dev2}/unique_orchestrator/_builders/open_file_setup.py +0 -0
  11. {unique_orchestrator-2026.32.0.dev1 → unique_orchestrator-2026.32.0.dev2}/unique_orchestrator/_builders/skill_setup.py +0 -0
  12. {unique_orchestrator-2026.32.0.dev1 → unique_orchestrator-2026.32.0.dev2}/unique_orchestrator/config.py +0 -0
  13. {unique_orchestrator-2026.32.0.dev1 → unique_orchestrator-2026.32.0.dev2}/unique_orchestrator/prompts/generic_reference_prompt.jinja2 +0 -0
  14. {unique_orchestrator-2026.32.0.dev1 → unique_orchestrator-2026.32.0.dev2}/unique_orchestrator/prompts/system_prompt.jinja2 +0 -0
  15. {unique_orchestrator-2026.32.0.dev1 → unique_orchestrator-2026.32.0.dev2}/unique_orchestrator/prompts/user_message_prompt.jinja2 +0 -0
  16. {unique_orchestrator-2026.32.0.dev1 → unique_orchestrator-2026.32.0.dev2}/unique_orchestrator/settings.py +0 -0
  17. {unique_orchestrator-2026.32.0.dev1 → unique_orchestrator-2026.32.0.dev2}/unique_orchestrator/tests/test_agent_config_rjsf_ui_schema.py +0 -0
  18. {unique_orchestrator-2026.32.0.dev1 → unique_orchestrator-2026.32.0.dev2}/unique_orchestrator/tests/test_build_loop_iteration_runner.py +0 -0
  19. {unique_orchestrator-2026.32.0.dev1 → unique_orchestrator-2026.32.0.dev2}/unique_orchestrator/tests/test_config_services_validators.py +0 -0
  20. {unique_orchestrator-2026.32.0.dev1 → unique_orchestrator-2026.32.0.dev2}/unique_orchestrator/tests/test_qwen_max_loop_iterations.py +0 -0
  21. {unique_orchestrator-2026.32.0.dev1 → unique_orchestrator-2026.32.0.dev2}/unique_orchestrator/tests/test_register_code_interpreter_postprocessors.py +0 -0
  22. {unique_orchestrator-2026.32.0.dev1 → unique_orchestrator-2026.32.0.dev2}/unique_orchestrator/tests/test_unique_ai_async_modify.py +0 -0
  23. {unique_orchestrator-2026.32.0.dev1 → unique_orchestrator-2026.32.0.dev2}/unique_orchestrator/tests/test_unique_ai_execution_timing.py +0 -0
  24. {unique_orchestrator-2026.32.0.dev1 → unique_orchestrator-2026.32.0.dev2}/unique_orchestrator/tests/test_unique_ai_get_filtered_user_metadata.py +0 -0
  25. {unique_orchestrator-2026.32.0.dev1 → unique_orchestrator-2026.32.0.dev2}/unique_orchestrator/tests/test_unique_ai_log_tool_calls.py +0 -0
  26. {unique_orchestrator-2026.32.0.dev1 → unique_orchestrator-2026.32.0.dev2}/unique_orchestrator/tests/test_unique_ai_loop_debug_params.py +0 -0
  27. {unique_orchestrator-2026.32.0.dev1 → unique_orchestrator-2026.32.0.dev2}/unique_orchestrator/tests/test_unique_ai_persist_tool_calls.py +0 -0
  28. {unique_orchestrator-2026.32.0.dev1 → unique_orchestrator-2026.32.0.dev2}/unique_orchestrator/tests/test_unique_ai_plan_or_execute_include.py +0 -0
  29. {unique_orchestrator-2026.32.0.dev1 → unique_orchestrator-2026.32.0.dev2}/unique_orchestrator/tests/test_unique_ai_reference_order.py +0 -0
  30. {unique_orchestrator-2026.32.0.dev1 → unique_orchestrator-2026.32.0.dev2}/unique_orchestrator/tests/test_unique_ai_render_system_prompt_user_instructions.py +0 -0
  31. {unique_orchestrator-2026.32.0.dev1 → unique_orchestrator-2026.32.0.dev2}/unique_orchestrator/tests/test_utils_resolve_other_options.py +0 -0
  32. {unique_orchestrator-2026.32.0.dev1 → unique_orchestrator-2026.32.0.dev2}/unique_orchestrator/unique_ai.py +0 -0
  33. {unique_orchestrator-2026.32.0.dev1 → unique_orchestrator-2026.32.0.dev2}/unique_orchestrator/unique_ai_builder.py +0 -0
  34. {unique_orchestrator-2026.32.0.dev1 → unique_orchestrator-2026.32.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.32.0.dev1
3
+ Version: 2026.32.0.dev2
4
4
  Summary:
5
5
  Author: Andreas Hauri
6
6
  Author-email: Andreas Hauri <andreas.hauri@unique.ai>
@@ -9,12 +9,12 @@ 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.32.0.dev4,<2026.32.0rc0
12
+ Requires-Dist: unique-toolkit>=2026.32.0.dev6,<2026.32.0rc0
13
13
  Requires-Dist: unique-stock-ticker>=2026.32.0.dev1,<2026.32.0rc0
14
14
  Requires-Dist: unique-follow-up-questions>=2026.32.0.dev0,<2026.32.0rc0
15
15
  Requires-Dist: unique-internal-search>=2026.32.0.dev1,<2026.32.0rc0
16
16
  Requires-Dist: unique-deep-research>=2026.32.0.dev1,<2026.32.0rc0
17
- Requires-Dist: unique-web-search>=2026.32.0.dev1,<2026.32.0rc0
17
+ Requires-Dist: unique-web-search>=2026.32.0.dev2,<2026.32.0rc0
18
18
  Requires-Dist: unique-swot>=2026.32.0.dev0,<2026.32.0rc0
19
19
  Requires-Dist: unique-skill-tool>=2026.32.0.dev0,<2026.32.0rc0
20
20
  Requires-Dist: unique-user-memory>=2026.32.0.dev2,<2026.32.0rc0
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "unique_orchestrator"
3
- version = "2026.32.0.dev1"
3
+ version = "2026.32.0.dev2"
4
4
  description = ""
5
5
  readme = "README.md"
6
6
  license = { text = "Proprietary" }
@@ -13,12 +13,12 @@ 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.32.0.dev4,<2026.32.0rc0",
16
+ "unique-toolkit>=2026.32.0.dev6,<2026.32.0rc0",
17
17
  "unique-stock-ticker>=2026.32.0.dev1,<2026.32.0rc0",
18
18
  "unique-follow-up-questions>=2026.32.0.dev0,<2026.32.0rc0",
19
19
  "unique-internal-search>=2026.32.0.dev1,<2026.32.0rc0",
20
20
  "unique-deep-research>=2026.32.0.dev1,<2026.32.0rc0",
21
- "unique-web-search>=2026.32.0.dev1,<2026.32.0rc0",
21
+ "unique-web-search>=2026.32.0.dev2,<2026.32.0rc0",
22
22
  "unique-swot>=2026.32.0.dev0,<2026.32.0rc0",
23
23
  "unique-skill-tool>=2026.32.0.dev0,<2026.32.0rc0",
24
24
  "unique-user-memory>=2026.32.0.dev2,<2026.32.0rc0",
@@ -1,3 +1,4 @@
1
+ from pathlib import Path
1
2
  from unittest.mock import AsyncMock, MagicMock
2
3
 
3
4
  import pytest
@@ -7,6 +8,7 @@ from unique_toolkit.agentic.debug_info_manager.debug_info_manager import (
7
8
  from unique_toolkit.agentic.loop_runner import SupportsInvocationStats
8
9
  from unique_toolkit.agentic.tools.schemas import ToolCallResponse
9
10
  from unique_toolkit.language_model.invocation_stats import LanguageModelInvocationStats
11
+ from unique_toolkit.language_model.model_costs import MODEL_COSTS_FILE_ENV
10
12
  from unique_toolkit.language_model.schemas import LanguageModelTokenUsage
11
13
 
12
14
  from unique_orchestrator.unique_ai import UniqueAI
@@ -211,9 +213,25 @@ class TestAccumulateUsage:
211
213
  class TestRunTokenUsageIntegration:
212
214
  @pytest.mark.ai
213
215
  @pytest.mark.asyncio
214
- async def test_run__debug_info_manager__receives_llm_invocations_key(self):
216
+ async def test_run__debug_info_manager__receives_llm_invocations_key(
217
+ self,
218
+ tmp_path: Path,
219
+ monkeypatch: pytest.MonkeyPatch,
220
+ ):
215
221
  """A single-iteration run with real usage on the loop response must
216
222
  surface it under debug_info's 'llm_invocations' key."""
223
+ cost_file = tmp_path / "costs.yaml"
224
+ cost_file.write_text(
225
+ f"""
226
+ costSchemaVersion: 1
227
+ models:
228
+ {MODEL_NAME}:
229
+ input: 2
230
+ completion: 8
231
+ """,
232
+ encoding="utf-8",
233
+ )
234
+ monkeypatch.setenv(MODEL_COSTS_FILE_ENV, str(cost_file))
217
235
  loop_response = _make_loop_response(
218
236
  LanguageModelTokenUsage(
219
237
  completion_tokens=12, prompt_tokens=34, total_tokens=46
@@ -231,6 +249,7 @@ class TestRunTokenUsageIntegration:
231
249
  assert len(payload) == 1
232
250
  assert payload[0]["modelName"] == MODEL_NAME
233
251
  assert payload[0]["source"] == "main_loop[1]"
252
+ assert payload[0]["costUsd"] == pytest.approx(0.000164)
234
253
  assert payload[0]["tokenUsage"] == {
235
254
  "completionTokens": 12,
236
255
  "promptTokens": 34,
@@ -712,7 +731,8 @@ class TestRunTokenUsageIntegration:
712
731
  assert [
713
732
  invocation["source"] for invocation in debug_info["llm_invocations"]
714
733
  ] == ["deep_research.clarification", "main_loop[1]"]
715
- assert debug_info["analytics"]["tokens"][0]["total_tokens"] == 35
734
+ assert debug_info["analytics"]["consumption_by_llm"][0]["total_tokens"] == 35
735
+ assert debug_info["analytics"]["consumption"]["total_tokens"] == 35
716
736
  assert debug_info["llm_invocations_complete"] is True
717
737
 
718
738
  @pytest.mark.ai