unique_orchestrator 1.6.1__tar.gz → 1.7.0__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.

Potentially problematic release.


This version of unique_orchestrator might be problematic. Click here for more details.

@@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [1.7.0] - 2025-10-30
9
+ - Add option to customize the display of tool progress statuses.
10
+ - Make follow-questions postprocessor run last to make sure the follow up questions are displayed last.
11
+
8
12
  ## [1.6.1] - 2025-10-28
9
13
  - Removing unused experimental config `full_sources_serialize_dump` in `history_manager`
10
14
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: unique_orchestrator
3
- Version: 1.6.1
3
+ Version: 1.7.0
4
4
  Summary:
5
5
  License: Proprietary
6
6
  Author: Andreas Hauri
@@ -33,6 +33,10 @@ All notable changes to this project will be documented in this file.
33
33
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
34
34
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
35
35
 
36
+ ## [1.7.0] - 2025-10-30
37
+ - Add option to customize the display of tool progress statuses.
38
+ - Make follow-questions postprocessor run last to make sure the follow up questions are displayed last.
39
+
36
40
  ## [1.6.1] - 2025-10-28
37
41
  - Removing unused experimental config `full_sources_serialize_dump` in `history_manager`
38
42
 
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "unique_orchestrator"
3
- version = "1.6.1"
3
+ version = "1.7.0"
4
4
  description = ""
5
5
  authors = ["Andreas Hauri <andreas.hauri@unique.ai>"]
6
6
  readme = ["README.md", "CHANGELOG.md"]
@@ -33,6 +33,9 @@ from unique_toolkit.agentic.tools.openai_builtin.manager import (
33
33
  OpenAICodeInterpreterConfig,
34
34
  )
35
35
  from unique_toolkit.agentic.tools.tool import ToolBuildConfig
36
+ from unique_toolkit.agentic.tools.tool_progress_reporter import (
37
+ ToolProgressReporterConfig,
38
+ )
36
39
  from unique_toolkit.language_model.default_language_model import DEFAULT_GPT_4o
37
40
  from unique_web_search.config import WebSearchConfig
38
41
  from unique_web_search.service import WebSearchTool
@@ -191,6 +194,10 @@ class UniqueAIServices(BaseModel):
191
194
 
192
195
  uploaded_content_config: UploadedContentConfig = UploadedContentConfig()
193
196
 
197
+ tool_progress_reporter_config: ToolProgressReporterConfig = (
198
+ ToolProgressReporterConfig()
199
+ )
200
+
194
201
 
195
202
  class InputTokenDistributionConfig(BaseModel):
196
203
  model_config = get_configuration_dict(frozen=True)
@@ -31,7 +31,6 @@ from unique_toolkit.agentic.history_manager.history_manager import (
31
31
  HistoryManagerConfig,
32
32
  )
33
33
  from unique_toolkit.agentic.postprocessor.postprocessor_manager import (
34
- Postprocessor,
35
34
  PostprocessorManager,
36
35
  )
37
36
  from unique_toolkit.agentic.reference_manager.reference_manager import ReferenceManager
@@ -107,13 +106,13 @@ class _CommonComponents(NamedTuple):
107
106
  reference_manager: ReferenceManager
108
107
  history_manager: HistoryManager
109
108
  evaluation_manager: EvaluationManager
109
+ postprocessor_manager: PostprocessorManager
110
110
  # Tool Manager Components
111
111
  tool_progress_reporter: ToolProgressReporter
112
112
  tool_manager_config: ToolManagerConfig
113
113
  mcp_manager: MCPManager
114
114
  a2a_manager: A2AManager
115
115
  mcp_servers: list[McpServer]
116
- postprocessors: list[Postprocessor]
117
116
 
118
117
 
119
118
  def _build_common(
@@ -127,7 +126,10 @@ def _build_common(
127
126
 
128
127
  uploaded_documents = content_service.get_documents_uploaded_to_chat()
129
128
 
130
- tool_progress_reporter = ToolProgressReporter(chat_service=chat_service)
129
+ tool_progress_reporter = ToolProgressReporter(
130
+ chat_service=chat_service,
131
+ config=config.agent.services.tool_progress_reporter_config,
132
+ )
131
133
  thinking_manager_config = ThinkingManagerConfig(
132
134
  thinking_steps_display=config.agent.experimental.thinking_steps_display
133
135
  )
@@ -178,10 +180,13 @@ def _build_common(
178
180
  max_tool_calls=config.agent.experimental.loop_configuration.max_tool_calls_per_iteration,
179
181
  )
180
182
 
181
- postprocessors = []
183
+ postprocessor_manager = PostprocessorManager(
184
+ logger=logger,
185
+ chat_service=chat_service,
186
+ )
182
187
 
183
- if config.agent.services.stock_ticker_config:
184
- postprocessors.append(
188
+ if config.agent.services.stock_ticker_config is not None:
189
+ postprocessor_manager.add_postprocessor(
185
190
  StockTickerPostprocessor(
186
191
  config=config.agent.services.stock_ticker_config,
187
192
  event=event,
@@ -192,7 +197,8 @@ def _build_common(
192
197
  config.agent.services.follow_up_questions_config
193
198
  and config.agent.services.follow_up_questions_config.number_of_questions > 0
194
199
  ):
195
- postprocessors.append(
200
+ # Should run last to make sure the follow up questions are displayed last.
201
+ postprocessor_manager.set_last_postprocessor(
196
202
  FollowUpPostprocessor(
197
203
  logger=logger,
198
204
  config=config.agent.services.follow_up_questions_config,
@@ -215,7 +221,7 @@ def _build_common(
215
221
  a2a_manager=a2a_manager,
216
222
  tool_manager_config=tool_manager_config,
217
223
  mcp_servers=event.payload.mcp_servers,
218
- postprocessors=postprocessors,
224
+ postprocessor_manager=postprocessor_manager,
219
225
  )
220
226
 
221
227
 
@@ -297,12 +303,7 @@ async def _build_responses(
297
303
  builtin_tool_manager=builtin_tool_manager,
298
304
  )
299
305
 
300
- postprocessor_manager = PostprocessorManager(
301
- logger=logger,
302
- chat_service=common_components.chat_service,
303
- )
304
- for postprocessor in common_components.postprocessors:
305
- postprocessor_manager.add_postprocessor(postprocessor)
306
+ postprocessor_manager = common_components.postprocessor_manager
306
307
 
307
308
  if (
308
309
  config.agent.experimental.responses_api_config.code_interpreter_display_config
@@ -408,12 +409,7 @@ def _build_completions(
408
409
  if not TOOL_CHOICES and UPLOADED_DOCUMENTS:
409
410
  tool_manager.add_forced_tool(UploadedSearchTool.name)
410
411
 
411
- postprocessor_manager = PostprocessorManager(
412
- logger=logger,
413
- chat_service=common_components.chat_service,
414
- )
415
- for postprocessor in common_components.postprocessors:
416
- postprocessor_manager.add_postprocessor(postprocessor)
412
+ postprocessor_manager = common_components.postprocessor_manager
417
413
 
418
414
  _add_sub_agents_postprocessor(
419
415
  postprocessor_manager=postprocessor_manager,