unique_orchestrator 1.4.2__tar.gz → 1.5.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,12 @@ 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.0] - 2025-10-16
9
+ - Make code interpreter configurable through spaces 2.0.
10
+
11
+ ## [1.4.3] - 2025-10-16
12
+ - Fix issue with openai base url
13
+
8
14
  ## [1.4.2] - 2025-10-16
9
15
  - Update debug info for better tool call tracking
10
16
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: unique_orchestrator
3
- Version: 1.4.2
3
+ Version: 1.5.0
4
4
  Summary:
5
5
  License: Proprietary
6
6
  Author: Andreas Hauri
@@ -33,6 +33,12 @@ 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.0] - 2025-10-16
37
+ - Make code interpreter configurable through spaces 2.0.
38
+
39
+ ## [1.4.3] - 2025-10-16
40
+ - Fix issue with openai base url
41
+
36
42
  ## [1.4.2] - 2025-10-16
37
43
  - Update debug info for better tool call tracking
38
44
 
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "unique_orchestrator"
3
- version = "1.4.2"
3
+ version = "1.5.0"
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,
@@ -217,7 +218,18 @@ def _build_common(
217
218
  )
218
219
 
219
220
 
220
- def _get_openai_client_from_env(config: UniqueAIConfig) -> AsyncOpenAI:
221
+ def _prepare_base_url(url: str, use_v1: bool) -> str:
222
+ url = url.rstrip("/") + "/openai"
223
+
224
+ if use_v1:
225
+ url += "/v1"
226
+
227
+ return url
228
+
229
+
230
+ def _get_openai_client_from_env(
231
+ config: UniqueAIConfig, use_v1: bool = False
232
+ ) -> AsyncOpenAI:
221
233
  use_direct_azure_client = (
222
234
  config.agent.experimental.responses_api_config.use_direct_azure_client
223
235
  )
@@ -228,7 +240,7 @@ def _get_openai_client_from_env(config: UniqueAIConfig) -> AsyncOpenAI:
228
240
  # TODO: (for testing only), remove when v1 endpoint is working
229
241
  return AsyncOpenAI(
230
242
  api_key=os.environ[api_key_env_var],
231
- base_url=os.environ[api_base_env_var],
243
+ base_url=_prepare_base_url(os.environ[api_base_env_var], use_v1=use_v1),
232
244
  )
233
245
  else:
234
246
  return get_async_openai_client().copy(
@@ -245,7 +257,26 @@ async def _build_responses(
245
257
  common_components: _CommonComponents,
246
258
  debug_info_manager: DebugInfoManager,
247
259
  ) -> UniqueAIResponsesApi:
248
- client = _get_openai_client_from_env(config)
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
+
249
280
  builtin_tool_manager = OpenAIBuiltInToolManager(
250
281
  uploaded_files=common_components.uploaded_documents,
251
282
  chat_id=event.payload.chat_id,