unique_orchestrator 1.4.3__tar.gz → 1.5.1__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,15 @@ 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.5.1] - 2025-10-17
9
+ - revert behavior of unique ai upload and chat to
10
+ 1. Add upload and chat tool to forced tools if there are tool choices
11
+ 2. Simply force it if there are no tool choices.
12
+ 3. Tool not available when no uploaded documents
13
+
14
+ ## [1.5.0] - 2025-10-16
15
+ - Make code interpreter configurable through spaces 2.0.
16
+
8
17
  ## [1.4.3] - 2025-10-16
9
18
  - Fix issue with openai base url
10
19
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: unique_orchestrator
3
- Version: 1.4.3
3
+ Version: 1.5.1
4
4
  Summary:
5
5
  License: Proprietary
6
6
  Author: Andreas Hauri
@@ -33,6 +33,15 @@ 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.5.1] - 2025-10-17
37
+ - revert behavior of unique ai upload and chat to
38
+ 1. Add upload and chat tool to forced tools if there are tool choices
39
+ 2. Simply force it if there are no tool choices.
40
+ 3. Tool not available when no uploaded documents
41
+
42
+ ## [1.5.0] - 2025-10-16
43
+ - Make code interpreter configurable through spaces 2.0.
44
+
36
45
  ## [1.4.3] - 2025-10-16
37
46
  - Fix issue with openai base url
38
47
 
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "unique_orchestrator"
3
- version = "1.4.3"
3
+ version = "1.5.1"
4
4
  description = ""
5
5
  authors = ["Andreas Hauri <andreas.hauri@unique.ai>"]
6
6
  readme = ["README.md", "CHANGELOG.md"]
@@ -29,6 +29,9 @@ from unique_toolkit.agentic.tools.a2a import (
29
29
  )
30
30
  from unique_toolkit.agentic.tools.a2a.evaluation import SubAgentEvaluationServiceConfig
31
31
  from unique_toolkit.agentic.tools.config import get_configuration_dict
32
+ from unique_toolkit.agentic.tools.openai_builtin.manager import (
33
+ OpenAICodeInterpreterConfig,
34
+ )
32
35
  from unique_toolkit.agentic.tools.tool import ToolBuildConfig
33
36
  from unique_toolkit.language_model.default_language_model import DEFAULT_GPT_4o
34
37
  from unique_web_search.config import WebSearchConfig
@@ -255,6 +258,9 @@ class ResponsesApiConfig(BaseModel):
255
258
  default="OPENAI_API_KEY",
256
259
  description="[TEMPORARY] The environment variable that contains the API key for the direct Azure client.",
257
260
  )
261
+ code_interpreter: (
262
+ Annotated[OpenAICodeInterpreterConfig, Field(title="Active")] | DeactivatedNone
263
+ ) = Field(default=None, description="Config for openai code interpreter")
258
264
 
259
265
  generated_files_scope_id: str = Field(
260
266
  default="<SCOPE_ID_PLACEHOLDER>",
@@ -52,6 +52,7 @@ from unique_toolkit.agentic.tools.a2a import (
52
52
  )
53
53
  from unique_toolkit.agentic.tools.config import ToolBuildConfig
54
54
  from unique_toolkit.agentic.tools.mcp.manager import MCPManager
55
+ from unique_toolkit.agentic.tools.openai_builtin.base import OpenAIBuiltInToolName
55
56
  from unique_toolkit.agentic.tools.tool_manager import (
56
57
  OpenAIBuiltInToolManager,
57
58
  ResponsesApiToolManager,
@@ -257,6 +258,25 @@ async def _build_responses(
257
258
  debug_info_manager: DebugInfoManager,
258
259
  ) -> UniqueAIResponsesApi:
259
260
  client = _get_openai_client_from_env(config, use_v1=True)
261
+ code_interpreter_config = (
262
+ config.agent.experimental.responses_api_config.code_interpreter
263
+ )
264
+
265
+ tool_names = [tool.name for tool in config.space.tools]
266
+ if (
267
+ code_interpreter_config is not None
268
+ and OpenAIBuiltInToolName.CODE_INTERPRETER not in tool_names
269
+ ):
270
+ logger.info("Automatically adding code interpreter to the tools")
271
+ config = config.model_copy(deep=True)
272
+ config.space.tools.append(
273
+ ToolBuildConfig(
274
+ name=OpenAIBuiltInToolName.CODE_INTERPRETER,
275
+ configuration=code_interpreter_config,
276
+ )
277
+ )
278
+ common_components.tool_manager_config.tools = config.space.tools
279
+
260
280
  builtin_tool_manager = OpenAIBuiltInToolManager(
261
281
  uploaded_files=common_components.uploaded_documents,
262
282
  chat_id=event.payload.chat_id,
@@ -355,17 +375,24 @@ def _build_completions(
355
375
  common_components: _CommonComponents,
356
376
  debug_info_manager: DebugInfoManager,
357
377
  ) -> UniqueAI:
358
- if len(common_components.uploaded_documents) > 0:
378
+ # Uploaded content behavior is always to force uploaded search tool:
379
+ # 1. Add it to forced tools if there are tool choices.
380
+ # 2. Simply force it if there are no tool choices.
381
+ # 3. Not available if not uploaded documents.
382
+ UPLOADED_DOCUMENTS = len(common_components.uploaded_documents) > 0
383
+ TOOL_CHOICES = len(event.payload.tool_choices) > 0
384
+ if UPLOADED_DOCUMENTS:
359
385
  logger.info(
360
386
  f"Adding UploadedSearchTool with {len(common_components.uploaded_documents)} documents"
361
387
  )
362
- config.space.tools.append(
388
+ common_components.tool_manager_config.tools.append(
363
389
  ToolBuildConfig(
364
390
  name=UploadedSearchTool.name,
365
391
  display_name=UploadedSearchTool.name,
366
392
  configuration=UploadedSearchConfig(),
367
- ),
393
+ )
368
394
  )
395
+ if TOOL_CHOICES and UPLOADED_DOCUMENTS:
369
396
  event.payload.tool_choices.append(str(UploadedSearchTool.name))
370
397
 
371
398
  tool_manager = ToolManager(
@@ -376,6 +403,8 @@ def _build_completions(
376
403
  mcp_manager=common_components.mcp_manager,
377
404
  a2a_manager=common_components.a2a_manager,
378
405
  )
406
+ if not TOOL_CHOICES and UPLOADED_DOCUMENTS:
407
+ tool_manager.add_forced_tool(UploadedSearchTool.name)
379
408
 
380
409
  postprocessor_manager = PostprocessorManager(
381
410
  logger=logger,