ibm-watsonx-orchestrate 1.5.0b1__tar.gz → 1.6.0b0__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.
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/PKG-INFO +2 -1
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/pyproject.toml +2 -1
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/__init__.py +1 -1
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/agent_builder/agents/__init__.py +1 -1
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/agent_builder/agents/types.py +53 -3
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/agent_builder/model_policies/types.py +1 -1
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/agent_builder/models/types.py +0 -1
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/agent_builder/tools/openapi_tool.py +41 -3
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/agent_builder/tools/python_tool.py +2 -1
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/agent_builder/tools/types.py +7 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/commands/agents/agents_command.py +18 -1
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/commands/agents/agents_controller.py +97 -3
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/commands/channels/webchat/channels_webchat_controller.py +0 -1
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/commands/connections/connections_controller.py +1 -1
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/commands/environment/environment_command.py +29 -4
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/commands/environment/environment_controller.py +74 -8
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/commands/environment/types.py +1 -0
- ibm_watsonx_orchestrate-1.6.0b0/src/ibm_watsonx_orchestrate/cli/commands/evaluations/evaluations_command.py +224 -0
- ibm_watsonx_orchestrate-1.6.0b0/src/ibm_watsonx_orchestrate/cli/commands/evaluations/evaluations_controller.py +158 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/commands/knowledge_bases/knowledge_bases_command.py +2 -2
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/commands/models/model_provider_mapper.py +31 -25
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/commands/models/models_command.py +6 -6
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/commands/models/models_controller.py +17 -8
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/commands/server/server_command.py +25 -17
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/commands/server/types.py +2 -1
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/commands/toolkit/toolkit_controller.py +0 -3
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/commands/tools/tools_controller.py +14 -12
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/config.py +2 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/main.py +6 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/client/agents/agent_client.py +14 -8
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/client/agents/assistant_agent_client.py +3 -3
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/client/agents/external_agent_client.py +2 -2
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/client/base_api_client.py +9 -9
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/client/connections/connections_client.py +32 -6
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/client/connections/utils.py +1 -1
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/client/credentials.py +4 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/client/model_policies/model_policies_client.py +2 -2
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/client/service_instance.py +42 -1
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/client/utils.py +27 -2
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/docker/compose-lite.yml +27 -17
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/docker/default.env +21 -15
- {ibm_watsonx_orchestrate-1.5.0b1/src/ibm_watsonx_orchestrate/experimental → ibm_watsonx_orchestrate-1.6.0b0/src/ibm_watsonx_orchestrate}/flow_builder/flows/__init__.py +3 -2
- ibm_watsonx_orchestrate-1.6.0b0/src/ibm_watsonx_orchestrate/flow_builder/flows/decorators.py +77 -0
- {ibm_watsonx_orchestrate-1.5.0b1/src/ibm_watsonx_orchestrate/experimental → ibm_watsonx_orchestrate-1.6.0b0/src/ibm_watsonx_orchestrate}/flow_builder/flows/events.py +6 -1
- {ibm_watsonx_orchestrate-1.5.0b1/src/ibm_watsonx_orchestrate/experimental → ibm_watsonx_orchestrate-1.6.0b0/src/ibm_watsonx_orchestrate}/flow_builder/flows/flow.py +70 -87
- {ibm_watsonx_orchestrate-1.5.0b1/src/ibm_watsonx_orchestrate/experimental → ibm_watsonx_orchestrate-1.6.0b0/src/ibm_watsonx_orchestrate}/flow_builder/types.py +15 -6
- ibm_watsonx_orchestrate-1.6.0b0/src/ibm_watsonx_orchestrate/flow_builder/utils.py +185 -0
- ibm_watsonx_orchestrate-1.5.0b1/src/ibm_watsonx_orchestrate/experimental/flow_builder/flows/decorators.py +0 -144
- ibm_watsonx_orchestrate-1.5.0b1/src/ibm_watsonx_orchestrate/experimental/flow_builder/utils.py +0 -115
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/.gitignore +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/LICENSE +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/agent_builder/__init__.py +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/agent_builder/agents/agent.py +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/agent_builder/agents/assistant_agent.py +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/agent_builder/agents/external_agent.py +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/agent_builder/connections/__init__.py +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/agent_builder/connections/connections.py +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/agent_builder/connections/types.py +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/agent_builder/knowledge_bases/knowledge_base.py +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/agent_builder/knowledge_bases/knowledge_base_requests.py +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/agent_builder/knowledge_bases/types.py +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/agent_builder/model_policies/__init__.py +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/agent_builder/models/__init__.py +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/agent_builder/toolkits/base_toolkit.py +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/agent_builder/toolkits/types.py +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/agent_builder/tools/__init__.py +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/agent_builder/tools/base_tool.py +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/agent_builder/utils/__init__.py +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/agent_builder/utils/pydantic_utils.py +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/__init__.py +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/commands/__init__.py +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/commands/channels/channels_command.py +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/commands/channels/channels_controller.py +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/commands/channels/types.py +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/commands/channels/webchat/channels_webchat_command.py +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/commands/chat/chat_command.py +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/commands/connections/connections_command.py +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/commands/knowledge_bases/knowledge_bases_controller.py +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/commands/login/login_command.py +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/commands/settings/__init__.py +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/commands/settings/observability/__init__.py +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/commands/settings/observability/langfuse/__init__.py +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/commands/settings/observability/langfuse/langfuse_command.py +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/commands/settings/observability/observability_command.py +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/commands/settings/settings_command.py +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/commands/toolkit/toolkit_command.py +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/commands/tools/tools_command.py +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/commands/tools/types.py +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/init_helper.py +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/client/__init__.py +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/client/analytics/__init__.py +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/client/analytics/llm/__init__.py +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/client/analytics/llm/analytics_llm_client.py +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/client/base_service_instance.py +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/client/client.py +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/client/client_errors.py +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/client/connections/__init__.py +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/client/knowledge_bases/knowledge_base_client.py +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/client/local_service_instance.py +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/client/model_policies/__init__.py +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/client/models/__init__.py +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/client/models/models_client.py +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/client/toolkit/toolkit_client.py +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/client/tools/tempus_client.py +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/client/tools/tool_client.py +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/docker/sdk/ibm_watsonx_orchestrate-0.6.0-py3-none-any.whl +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/docker/sdk/ibm_watsonx_orchestrate-0.6.0.tar.gz +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/docker/start-up.sh +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/docker/tempus/common-config.yaml +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1/src/ibm_watsonx_orchestrate/experimental → ibm_watsonx_orchestrate-1.6.0b0/src/ibm_watsonx_orchestrate}/flow_builder/__init__.py +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1/src/ibm_watsonx_orchestrate/experimental → ibm_watsonx_orchestrate-1.6.0b0/src/ibm_watsonx_orchestrate}/flow_builder/data_map.py +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1/src/ibm_watsonx_orchestrate/experimental → ibm_watsonx_orchestrate-1.6.0b0/src/ibm_watsonx_orchestrate}/flow_builder/flows/constants.py +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1/src/ibm_watsonx_orchestrate/experimental → ibm_watsonx_orchestrate-1.6.0b0/src/ibm_watsonx_orchestrate}/flow_builder/node.py +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1/src/ibm_watsonx_orchestrate/experimental → ibm_watsonx_orchestrate-1.6.0b0/src/ibm_watsonx_orchestrate}/flow_builder/resources/flow_status.openapi.yml +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/run/__init__.py +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/run/connections.py +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/utils/__init__.py +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/utils/logging/__init__.py +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/utils/logging/logger.py +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/utils/logging/logging.yaml +0 -0
- {ibm_watsonx_orchestrate-1.5.0b1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/utils/utils.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: ibm-watsonx-orchestrate
|
3
|
-
Version: 1.
|
3
|
+
Version: 1.6.0b0
|
4
4
|
Summary: IBM watsonx.orchestrate SDK
|
5
5
|
Author-email: IBM <support@ibm.com>
|
6
6
|
License: MIT License
|
@@ -11,6 +11,7 @@ Requires-Dist: click<8.2.0,>=8.0.0
|
|
11
11
|
Requires-Dist: docstring-parser<1.0,>=0.16
|
12
12
|
Requires-Dist: httpx<1.0.0,>=0.28.1
|
13
13
|
Requires-Dist: ibm-cloud-sdk-core>=3.22.0
|
14
|
+
Requires-Dist: ibm-watsonx-orchestrate-evaluation-framework==1.0.2
|
14
15
|
Requires-Dist: jsonref==1.1.0
|
15
16
|
Requires-Dist: jsonschema<5.0.0,>=4.23.0
|
16
17
|
Requires-Dist: langchain-community<1.0.0,>=0.3.12
|
@@ -2,4 +2,4 @@ from .agent import Agent, AgentSpec
|
|
2
2
|
from .external_agent import ExternalAgent, ExternalAgentSpec
|
3
3
|
from .assistant_agent import AssistantAgent, AssistantAgentSpec
|
4
4
|
# from .types import AgentKind, AgentStyle, ExternalAgentConfig, AssistantAgentConfig, SpecVersion
|
5
|
-
from .types import AgentKind, AgentStyle, SpecVersion, ExternalAgentAuthScheme, AgentProvider, AssistantAgentConfig
|
5
|
+
from .types import AgentKind, AgentStyle, SpecVersion, ExternalAgentAuthScheme, AgentProvider, AssistantAgentConfig, AgentGuideline
|
@@ -4,7 +4,7 @@ from enum import Enum
|
|
4
4
|
from typing import List, Optional, Dict
|
5
5
|
from pydantic import BaseModel, model_validator, ConfigDict
|
6
6
|
from ibm_watsonx_orchestrate.agent_builder.tools import BaseTool, PythonTool
|
7
|
-
from ibm_watsonx_orchestrate.agent_builder.knowledge_bases.types import KnowledgeBaseSpec
|
7
|
+
from ibm_watsonx_orchestrate.agent_builder.knowledge_bases.types import KnowledgeBaseSpec, KnowledgeBaseBuiltInVectorIndexConfig, HAPFiltering, HAPFilteringConfig, CitationsConfig, ConfidenceThresholds, QueryRewriteConfig, GenerationConfiguration
|
8
8
|
from ibm_watsonx_orchestrate.agent_builder.knowledge_bases.knowledge_base import KnowledgeBase
|
9
9
|
from pydantic import Field, AliasChoices
|
10
10
|
from typing import Annotated
|
@@ -50,6 +50,8 @@ class BaseAgentSpec(BaseModel):
|
|
50
50
|
name: Annotated[str, Field(json_schema_extra={"min_length_str":1})]
|
51
51
|
display_name: Annotated[Optional[str], Field(json_schema_extra={"min_length_str":1})] = None
|
52
52
|
description: Annotated[str, Field(json_schema_extra={"min_length_str":1})]
|
53
|
+
context_access_enabled: bool = True
|
54
|
+
context_variables: Optional[List[str]] = []
|
53
55
|
|
54
56
|
def dump_spec(self, file: str) -> None:
|
55
57
|
dumped = self.model_dump(mode='json', exclude_unset=True, exclude_none=True)
|
@@ -69,11 +71,34 @@ class BaseAgentSpec(BaseModel):
|
|
69
71
|
# NATIVE AGENT TYPES
|
70
72
|
# ===============================
|
71
73
|
|
74
|
+
class ChatWithDocsConfig(BaseModel):
|
75
|
+
enabled: Optional[bool] = None
|
76
|
+
vector_index: Optional[KnowledgeBaseBuiltInVectorIndexConfig] = None
|
77
|
+
generation: Optional[GenerationConfiguration] = None
|
78
|
+
query_rewrite: Optional[QueryRewriteConfig] = None
|
79
|
+
confidence_thresholds: Optional[ConfidenceThresholds] =None
|
80
|
+
citations: Optional[CitationsConfig] = None
|
81
|
+
hap_filtering: Optional[HAPFiltering] = None
|
82
|
+
|
72
83
|
class AgentStyle(str, Enum):
|
73
84
|
DEFAULT = "default"
|
74
85
|
REACT = "react"
|
75
86
|
PLANNER = "planner"
|
76
87
|
|
88
|
+
class AgentGuideline(BaseModel):
|
89
|
+
model_config = ConfigDict(arbitrary_types_allowed=True)
|
90
|
+
|
91
|
+
display_name: Optional[str] = None
|
92
|
+
condition: str
|
93
|
+
action: str
|
94
|
+
tool: Optional[BaseTool] | Optional[str] = None
|
95
|
+
|
96
|
+
def __init__(self, *args, **kwargs):
|
97
|
+
if "tool" in kwargs and kwargs["tool"]:
|
98
|
+
kwargs["tool"] = kwargs['tool'].__tool_spec__.name if isinstance(kwargs['tool'], BaseTool) else kwargs["tool"]
|
99
|
+
|
100
|
+
super().__init__(*args, **kwargs)
|
101
|
+
|
77
102
|
class AgentSpec(BaseAgentSpec):
|
78
103
|
model_config = ConfigDict(arbitrary_types_allowed=True)
|
79
104
|
|
@@ -83,10 +108,12 @@ class AgentSpec(BaseAgentSpec):
|
|
83
108
|
custom_join_tool: str | PythonTool | None = None
|
84
109
|
structured_output: Optional[JsonSchemaObject] = None
|
85
110
|
instructions: Annotated[Optional[str], Field(json_schema_extra={"min_length_str":1})] = None
|
111
|
+
guidelines: Optional[List[AgentGuideline]] = None
|
86
112
|
collaborators: Optional[List[str]] | Optional[List['BaseAgentSpec']] = []
|
87
113
|
tools: Optional[List[str]] | Optional[List['BaseTool']] = []
|
88
114
|
hidden: bool = False
|
89
115
|
knowledge_base: Optional[List[str]] | Optional[List['KnowledgeBaseSpec']] = []
|
116
|
+
chat_with_docs: Optional[ChatWithDocsConfig] = None
|
90
117
|
|
91
118
|
|
92
119
|
def __init__(self, *args, **kwargs):
|
@@ -122,11 +149,17 @@ def validate_agent_fields(values: dict) -> dict:
|
|
122
149
|
raise ValueError(f"Circular reference detected. The agent '{name}' cannot contain itself as a collaborator")
|
123
150
|
|
124
151
|
if values.get("style") == AgentStyle.PLANNER:
|
125
|
-
if not values.get("custom_join_tool") and not values.get("structured_output"):
|
126
|
-
raise ValueError("Either 'custom_join_tool' or 'structured_output' must be provided for planner style agents.")
|
127
152
|
if values.get("custom_join_tool") and values.get("structured_output"):
|
128
153
|
raise ValueError("Only one of 'custom_join_tool' or 'structured_output' can be provided for planner style agents.")
|
129
154
|
|
155
|
+
context_variables = values.get("context_variables")
|
156
|
+
if context_variables is not None:
|
157
|
+
if not isinstance(context_variables, list):
|
158
|
+
raise ValueError("context_variables must be a list")
|
159
|
+
for var in context_variables:
|
160
|
+
if not isinstance(var, str) or not var.strip():
|
161
|
+
raise ValueError("All context_variables must be non-empty strings")
|
162
|
+
|
130
163
|
return values
|
131
164
|
|
132
165
|
# ===============================
|
@@ -170,6 +203,14 @@ def validate_external_agent_fields(values: dict) -> dict:
|
|
170
203
|
if value and not str(value).strip():
|
171
204
|
raise ValueError(f"{field} cannot be empty or just whitespace")
|
172
205
|
|
206
|
+
context_variables = values.get("context_variables")
|
207
|
+
if context_variables is not None:
|
208
|
+
if not isinstance(context_variables, list):
|
209
|
+
raise ValueError("context_variables must be a list")
|
210
|
+
for var in context_variables:
|
211
|
+
if not isinstance(var, str) or not var.strip():
|
212
|
+
raise ValueError("All context_variables must be non-empty strings")
|
213
|
+
|
173
214
|
return values
|
174
215
|
|
175
216
|
# # ===============================
|
@@ -215,4 +256,13 @@ def validate_assistant_agent_fields(values: dict) -> dict:
|
|
215
256
|
if value and not str(value).strip():
|
216
257
|
raise ValueError(f"{field} cannot be empty or just whitespace")
|
217
258
|
|
259
|
+
# Validate context_variables if provided
|
260
|
+
context_variables = values.get("context_variables")
|
261
|
+
if context_variables is not None:
|
262
|
+
if not isinstance(context_variables, list):
|
263
|
+
raise ValueError("context_variables must be a list")
|
264
|
+
for var in context_variables:
|
265
|
+
if not isinstance(var, str) or not var.strip():
|
266
|
+
raise ValueError("All context_variables must be non-empty strings")
|
267
|
+
|
218
268
|
return values
|
@@ -146,7 +146,6 @@ class ProviderConfig(BaseModel):
|
|
146
146
|
|
147
147
|
# Azure Inference
|
148
148
|
azure_deployment_name: Optional[str] = Field(None, alias="azureDeploymentName")
|
149
|
-
azure_api_version: Optional[str] = Field(None, alias="azureApiVersion")
|
150
149
|
azure_extra_params: Optional[str] = Field(None, alias="azureExtraParams")
|
151
150
|
azure_foundry_url: Optional[str] = Field(None, alias="azureFoundryUrl")
|
152
151
|
|
@@ -14,7 +14,7 @@ from .types import ToolSpec
|
|
14
14
|
from .base_tool import BaseTool
|
15
15
|
from .types import HTTP_METHOD, ToolPermission, ToolRequestBody, ToolResponseBody, \
|
16
16
|
OpenApiToolBinding, \
|
17
|
-
JsonSchemaObject, ToolBinding, OpenApiSecurityScheme
|
17
|
+
JsonSchemaObject, ToolBinding, OpenApiSecurityScheme, CallbackBinding
|
18
18
|
|
19
19
|
import json
|
20
20
|
|
@@ -134,6 +134,7 @@ def create_openapi_json_tool(
|
|
134
134
|
description=spec_description,
|
135
135
|
permission=spec_permission
|
136
136
|
)
|
137
|
+
spec.is_async = 'callbacks' in route_spec
|
137
138
|
|
138
139
|
spec.input_schema = input_schema or ToolRequestBody(
|
139
140
|
type='object',
|
@@ -203,13 +204,50 @@ def create_openapi_json_tool(
|
|
203
204
|
|
204
205
|
security.append(security_schemes_map[name])
|
205
206
|
|
206
|
-
|
207
|
+
# If it's an async tool, add callback binding
|
208
|
+
if spec.is_async:
|
209
|
+
|
210
|
+
|
211
|
+
callbacks = route_spec.get('callbacks', {})
|
212
|
+
callback_name = next(iter(callbacks.keys()))
|
213
|
+
callback_spec = callbacks[callback_name]
|
214
|
+
callback_path = next(iter(callback_spec.keys()))
|
215
|
+
callback_method = next(iter(callback_spec[callback_path].keys()))
|
216
|
+
|
217
|
+
# Phase 1: Create a separate input schema for callback that excludes callbackUrl
|
218
|
+
# Note: Currently assuming the callback URL parameter will be named 'callbackUrl' in the OpenAPI spec
|
219
|
+
# Future phases will handle other naming conventions
|
220
|
+
callback_input_schema = ToolRequestBody(
|
221
|
+
type='object',
|
222
|
+
properties={k: v for k, v in spec.input_schema.properties.items() if not k.endswith('_callbackUrl')},
|
223
|
+
required=[r for r in spec.input_schema.required if not r.endswith('_callbackUrl')]
|
224
|
+
)
|
225
|
+
|
226
|
+
if callback_input_schema:
|
227
|
+
spec.input_schema = callback_input_schema
|
228
|
+
|
229
|
+
callback_binding = CallbackBinding(
|
230
|
+
callback_url=callback_path,
|
231
|
+
method=callback_method.upper(),
|
232
|
+
input_schema=callback_input_schema,
|
233
|
+
output_schema=spec.output_schema
|
234
|
+
)
|
235
|
+
|
236
|
+
else:
|
237
|
+
callback_binding = None
|
238
|
+
|
239
|
+
openapi_binding = OpenApiToolBinding(
|
207
240
|
http_path=http_path,
|
208
241
|
http_method=http_method,
|
209
242
|
security=security,
|
210
243
|
servers=servers,
|
211
244
|
connection_id=connection_id
|
212
|
-
)
|
245
|
+
)
|
246
|
+
|
247
|
+
if callback_binding is not None:
|
248
|
+
openapi_binding.callback = callback_binding
|
249
|
+
|
250
|
+
spec.binding = ToolBinding(openapi=openapi_binding)
|
213
251
|
|
214
252
|
return OpenAPITool(spec=spec)
|
215
253
|
|
@@ -95,7 +95,8 @@ def _fix_optional(schema):
|
|
95
95
|
def _validate_input_schema(input_schema: ToolRequestBody) -> None:
|
96
96
|
props = input_schema.properties
|
97
97
|
for prop in props:
|
98
|
-
|
98
|
+
property_schema = props.get(prop)
|
99
|
+
if not (property_schema.type or property_schema.anyOf):
|
99
100
|
logger.warning(f"Missing type hint for tool property '{prop}' defaulting to 'str'. To remove this warning add a type hint to the property in the tools signature. See Python docs for guidance: https://docs.python.org/3/library/typing.html")
|
100
101
|
|
101
102
|
def _validate_join_tool_func(fn: Callable, sig: inspect.Signature | None = None, name: str | None = None) -> None:
|
@@ -93,6 +93,11 @@ class OpenApiSecurityScheme(BaseModel):
|
|
93
93
|
|
94
94
|
HTTP_METHOD = Literal['GET', 'POST', 'PUT', 'PATCH', 'DELETE']
|
95
95
|
|
96
|
+
class CallbackBinding(BaseModel):
|
97
|
+
callback_url: str
|
98
|
+
method: HTTP_METHOD
|
99
|
+
input_schema: ToolRequestBody
|
100
|
+
output_schema: ToolResponseBody
|
96
101
|
|
97
102
|
class OpenApiToolBinding(BaseModel):
|
98
103
|
http_method: HTTP_METHOD
|
@@ -101,6 +106,7 @@ class OpenApiToolBinding(BaseModel):
|
|
101
106
|
security: Optional[List[OpenApiSecurityScheme]] = None
|
102
107
|
servers: Optional[List[str]] = None
|
103
108
|
connection_id: str | None = None
|
109
|
+
callback: CallbackBinding = None
|
104
110
|
|
105
111
|
@model_validator(mode='after')
|
106
112
|
def validate_openapi_tool_binding(self):
|
@@ -175,6 +181,7 @@ class ToolSpec(BaseModel):
|
|
175
181
|
output_schema: ToolResponseBody = None
|
176
182
|
binding: ToolBinding = None
|
177
183
|
toolkit_id: str | None = None
|
184
|
+
is_async: bool = False
|
178
185
|
|
179
186
|
def is_custom_join_tool(self) -> bool:
|
180
187
|
if self.binding.python is None:
|
@@ -137,7 +137,7 @@ def agent_create(
|
|
137
137
|
List[str],
|
138
138
|
typer.Option(
|
139
139
|
"--knowledge-bases",
|
140
|
-
help="A list of
|
140
|
+
help="A list of knowledge bases names you wish for the agent to be able to utilise. Format --knowledge-bases base1 --knowledge-bases base2 ...",
|
141
141
|
),
|
142
142
|
] = None,
|
143
143
|
output_file: Annotated[
|
@@ -148,6 +148,21 @@ def agent_create(
|
|
148
148
|
help="Write the agent definition out to a YAML (.yaml/.yml) file or a JSON (.json) file.",
|
149
149
|
),
|
150
150
|
] = None,
|
151
|
+
context_access_enabled: Annotated[
|
152
|
+
bool,
|
153
|
+
typer.Option(
|
154
|
+
"--context-access-enabled",
|
155
|
+
help="Whether the agent has access to context variables (default: True)",
|
156
|
+
),
|
157
|
+
] = True,
|
158
|
+
context_variables: Annotated[
|
159
|
+
List[str],
|
160
|
+
typer.Option(
|
161
|
+
"--context-variable",
|
162
|
+
"-v",
|
163
|
+
help="A list of context variable names the agent can access. Format: --context-variable var1 --context-variable var2 ... or -v var1 -v var2 ...",
|
164
|
+
),
|
165
|
+
] = None,
|
151
166
|
):
|
152
167
|
chat_params_dict = json.loads(chat_params) if chat_params else {}
|
153
168
|
config_dict = json.loads(config) if config else {}
|
@@ -177,6 +192,8 @@ def agent_create(
|
|
177
192
|
nickname=nickname,
|
178
193
|
app_id=app_id,
|
179
194
|
output_file=output_file,
|
195
|
+
context_access_enabled=context_access_enabled,
|
196
|
+
context_variables=context_variables,
|
180
197
|
)
|
181
198
|
agents_controller.publish_or_update_agents([agent])
|
182
199
|
|
@@ -25,7 +25,7 @@ from ibm_watsonx_orchestrate.agent_builder.agents import (
|
|
25
25
|
AgentKind,
|
26
26
|
SpecVersion
|
27
27
|
)
|
28
|
-
from ibm_watsonx_orchestrate.client.agents.agent_client import AgentClient
|
28
|
+
from ibm_watsonx_orchestrate.client.agents.agent_client import AgentClient, AgentUpsertResponse
|
29
29
|
from ibm_watsonx_orchestrate.client.agents.external_agent_client import ExternalAgentClient
|
30
30
|
from ibm_watsonx_orchestrate.client.agents.assistant_agent_client import AssistantAgentClient
|
31
31
|
from ibm_watsonx_orchestrate.client.tools.tool_client import ToolClient
|
@@ -99,6 +99,7 @@ def parse_create_native_args(name: str, kind: AgentKind, description: str | None
|
|
99
99
|
"style": args.get("style"),
|
100
100
|
"custom_join_tool": args.get("custom_join_tool"),
|
101
101
|
"structured_output": args.get("structured_output"),
|
102
|
+
"context_access_enabled": args.get("context_access_enabled", True),
|
102
103
|
}
|
103
104
|
|
104
105
|
collaborators = args.get("collaborators", [])
|
@@ -116,6 +117,11 @@ def parse_create_native_args(name: str, kind: AgentKind, description: str | None
|
|
116
117
|
knowledge_base = [x.strip() for x in knowledge_base if x.strip() != ""]
|
117
118
|
agent_details["knowledge_base"] = knowledge_base
|
118
119
|
|
120
|
+
context_variables = args.get("context_variables", [])
|
121
|
+
context_variables = context_variables if context_variables else []
|
122
|
+
context_variables = [x.strip() for x in context_variables if x.strip() != ""]
|
123
|
+
agent_details["context_variables"] = context_variables
|
124
|
+
|
119
125
|
return agent_details
|
120
126
|
|
121
127
|
def parse_create_external_args(name: str, kind: AgentKind, description: str | None, **args) -> dict:
|
@@ -133,8 +139,14 @@ def parse_create_external_args(name: str, kind: AgentKind, description: str | No
|
|
133
139
|
"config": args.get("config", {}),
|
134
140
|
"nickname": args.get("nickname"),
|
135
141
|
"app_id": args.get("app_id"),
|
142
|
+
"context_access_enabled": args.get("context_access_enabled", True),
|
136
143
|
}
|
137
144
|
|
145
|
+
context_variables = args.get("context_variables", [])
|
146
|
+
context_variables = context_variables if context_variables else []
|
147
|
+
context_variables = [x.strip() for x in context_variables if x.strip() != ""]
|
148
|
+
agent_details["context_variables"] = context_variables
|
149
|
+
|
138
150
|
return agent_details
|
139
151
|
|
140
152
|
def parse_create_assistant_args(name: str, kind: AgentKind, description: str | None, **args) -> dict:
|
@@ -146,8 +158,14 @@ def parse_create_assistant_args(name: str, kind: AgentKind, description: str | N
|
|
146
158
|
"tags": args.get("tags", []),
|
147
159
|
"config": args.get("config", {}),
|
148
160
|
"nickname": args.get("nickname"),
|
161
|
+
"context_access_enabled": args.get("context_access_enabled", True),
|
149
162
|
}
|
150
163
|
|
164
|
+
context_variables = args.get("context_variables", [])
|
165
|
+
context_variables = context_variables if context_variables else []
|
166
|
+
context_variables = [x.strip() for x in context_variables if x.strip() != ""]
|
167
|
+
agent_details["context_variables"] = context_variables
|
168
|
+
|
151
169
|
return agent_details
|
152
170
|
|
153
171
|
def get_conn_id_from_app_id(app_id: str) -> str:
|
@@ -177,6 +195,10 @@ def get_agent_details(name: str, client: AgentClient | ExternalAgentClient | Ass
|
|
177
195
|
|
178
196
|
return agent_specs[0]
|
179
197
|
|
198
|
+
def _raise_guidelines_warning(response: AgentUpsertResponse) -> None:
|
199
|
+
if response.warning:
|
200
|
+
logger.warning(f"Agent Configuration Issue: {response.warning}")
|
201
|
+
|
180
202
|
class AgentsController:
|
181
203
|
def __init__(self):
|
182
204
|
self.native_client = None
|
@@ -420,6 +442,72 @@ class AgentsController:
|
|
420
442
|
ref_agent.knowledge_base = ref_knowledge_bases
|
421
443
|
return ref_agent
|
422
444
|
|
445
|
+
def dereference_guidelines(self, agent: Agent) -> Agent:
|
446
|
+
tool_client = self.get_tool_client()
|
447
|
+
|
448
|
+
guideline_tool_names = set()
|
449
|
+
|
450
|
+
for guideline in agent.guidelines:
|
451
|
+
if guideline.tool:
|
452
|
+
guideline_tool_names.add(guideline.tool)
|
453
|
+
|
454
|
+
if len(guideline_tool_names) == 0:
|
455
|
+
return agent
|
456
|
+
|
457
|
+
deref_agent = deepcopy(agent)
|
458
|
+
|
459
|
+
matching_tools = tool_client.get_drafts_by_names(list(guideline_tool_names))
|
460
|
+
|
461
|
+
name_id_lookup = {}
|
462
|
+
for tool in matching_tools:
|
463
|
+
if tool.get("name") in name_id_lookup:
|
464
|
+
logger.error(f"Duplicate draft entries for tool '{tool.get('name')}'")
|
465
|
+
sys.exit(1)
|
466
|
+
name_id_lookup[tool.get("name")] = tool.get("id")
|
467
|
+
|
468
|
+
for guideline in deref_agent.guidelines:
|
469
|
+
if guideline.tool:
|
470
|
+
id = name_id_lookup.get(guideline.tool)
|
471
|
+
if not id:
|
472
|
+
logger.error(f"Failed to find guideline tool. No tools found with the name '{guideline.tool}'")
|
473
|
+
sys.exit(1)
|
474
|
+
guideline.tool = id
|
475
|
+
|
476
|
+
return deref_agent
|
477
|
+
|
478
|
+
def reference_guidelines(self, agent: Agent) -> Agent:
|
479
|
+
tool_client = self.get_tool_client()
|
480
|
+
|
481
|
+
guideline_tool_ids = set()
|
482
|
+
|
483
|
+
for guideline in agent.guidelines:
|
484
|
+
if guideline.tool:
|
485
|
+
guideline_tool_ids.add(guideline.tool)
|
486
|
+
|
487
|
+
if len(guideline_tool_ids) == 0:
|
488
|
+
return agent
|
489
|
+
|
490
|
+
ref_agent = deepcopy(agent)
|
491
|
+
|
492
|
+
matching_tools = tool_client.get_drafts_by_ids(list(guideline_tool_ids))
|
493
|
+
|
494
|
+
id_name_lookup = {}
|
495
|
+
for tool in matching_tools:
|
496
|
+
if tool.get("id") in id_name_lookup:
|
497
|
+
logger.error(f"Duplicate draft entries for tool '{tool.get('id')}'")
|
498
|
+
sys.exit(1)
|
499
|
+
id_name_lookup[tool.get("id")] = tool.get("name")
|
500
|
+
|
501
|
+
for guideline in ref_agent.guidelines:
|
502
|
+
if guideline.tool:
|
503
|
+
name = id_name_lookup.get(guideline.tool)
|
504
|
+
if not name:
|
505
|
+
logger.error(f"Failed to find guideline tool. No tools found with the id '{guideline.tool}'")
|
506
|
+
sys.exit(1)
|
507
|
+
guideline.tool = name
|
508
|
+
|
509
|
+
return ref_agent
|
510
|
+
|
423
511
|
@staticmethod
|
424
512
|
def dereference_app_id(agent: ExternalAgent | AssistantAgent) -> ExternalAgent | AssistantAgent:
|
425
513
|
if agent.kind == AgentKind.EXTERNAL:
|
@@ -448,6 +536,8 @@ class AgentsController:
|
|
448
536
|
agent = self.dereference_tools(agent)
|
449
537
|
if agent.knowledge_base and len(agent.knowledge_base):
|
450
538
|
agent = self.dereference_knowledge_bases(agent)
|
539
|
+
if agent.guidelines and len(agent.guidelines):
|
540
|
+
agent = self.dereference_guidelines(agent)
|
451
541
|
|
452
542
|
return agent
|
453
543
|
|
@@ -458,6 +548,8 @@ class AgentsController:
|
|
458
548
|
agent = self.reference_tools(agent)
|
459
549
|
if agent.knowledge_base and len(agent.knowledge_base):
|
460
550
|
agent = self.reference_knowledge_bases(agent)
|
551
|
+
if agent.guidelines and len(agent.guidelines):
|
552
|
+
agent = self.reference_guidelines(agent)
|
461
553
|
|
462
554
|
return agent
|
463
555
|
|
@@ -543,7 +635,8 @@ class AgentsController:
|
|
543
635
|
|
544
636
|
def publish_agent(self, agent: Agent, **kwargs) -> None:
|
545
637
|
if isinstance(agent, Agent):
|
546
|
-
self.get_native_client().create(agent.model_dump(exclude_none=True))
|
638
|
+
response = self.get_native_client().create(agent.model_dump(exclude_none=True))
|
639
|
+
_raise_guidelines_warning(response)
|
547
640
|
logger.info(f"Agent '{agent.name}' imported successfully")
|
548
641
|
if isinstance(agent, ExternalAgent):
|
549
642
|
self.get_external_client().create(agent.model_dump(exclude_none=True))
|
@@ -557,7 +650,8 @@ class AgentsController:
|
|
557
650
|
) -> None:
|
558
651
|
if isinstance(agent, Agent):
|
559
652
|
logger.info(f"Existing Agent '{agent.name}' found. Updating...")
|
560
|
-
self.get_native_client().update(agent_id, agent.model_dump(exclude_none=True))
|
653
|
+
response = self.get_native_client().update(agent_id, agent.model_dump(exclude_none=True))
|
654
|
+
_raise_guidelines_warning(response)
|
561
655
|
logger.info(f"Agent '{agent.name}' updated successfully")
|
562
656
|
if isinstance(agent, ExternalAgent):
|
563
657
|
logger.info(f"Existing External Agent '{agent.name}' found. Updating...")
|
@@ -80,7 +80,6 @@ def _create_connection_from_spec(content: dict) -> None:
|
|
80
80
|
config = environments.get(environment)
|
81
81
|
config["environment"] = environment
|
82
82
|
config["app_id"] = app_id
|
83
|
-
config["environment"] = environment
|
84
83
|
config = ConnectionConfiguration.model_validate(config)
|
85
84
|
add_configuration(config)
|
86
85
|
|
@@ -437,6 +436,7 @@ def configure_connection(**kwargs) -> None:
|
|
437
436
|
logger.error(f"Cannot create configuration for environment '{kwargs.get('environment')}'. Local development does not support any environments other than 'draft'.")
|
438
437
|
sys.exit(1)
|
439
438
|
|
439
|
+
|
440
440
|
idp_config_body = None
|
441
441
|
if kwargs.get("idp_token_type") or kwargs.get("idp_token_use"):
|
442
442
|
idp_config_body = IdpConfigDataBody(
|
@@ -5,6 +5,7 @@ from ibm_watsonx_orchestrate.cli.commands.environment import environment_control
|
|
5
5
|
from ibm_watsonx_orchestrate.cli.commands.environment.types import EnvironmentAuthType
|
6
6
|
from ibm_watsonx_orchestrate.cli.commands.tools.types import RegistryType
|
7
7
|
from ibm_watsonx_orchestrate.client.utils import is_local_dev
|
8
|
+
import sys
|
8
9
|
|
9
10
|
logger = logging.getLogger(__name__)
|
10
11
|
|
@@ -20,7 +21,19 @@ def activate_env(
|
|
20
21
|
apikey: Annotated[
|
21
22
|
str,
|
22
23
|
typer.Option(
|
23
|
-
"--
|
24
|
+
"--api-key", "-a", help="WXO or CPD API Key. Leave Blank if developing locally. For CPD, either a Passoword or Apikey is accepted for CPD, but not both."
|
25
|
+
),
|
26
|
+
] = None,
|
27
|
+
username: Annotated[
|
28
|
+
str,
|
29
|
+
typer.Option(
|
30
|
+
"--username", "-u", help="Username specifically for CPD Environments."
|
31
|
+
),
|
32
|
+
] = None,
|
33
|
+
password: Annotated[
|
34
|
+
str,
|
35
|
+
typer.Option(
|
36
|
+
"--password", "-p", help="Password specifically for CPD Environments. Either a Passoword or Apikey is accepted for CPD, but not both."
|
24
37
|
),
|
25
38
|
] = None,
|
26
39
|
registry: Annotated[
|
@@ -32,7 +45,7 @@ def activate_env(
|
|
32
45
|
typer.Option("--test-package-version-override", help="Which prereleased package version to reference when using --registry testpypi", hidden=True),
|
33
46
|
] = None
|
34
47
|
):
|
35
|
-
environment_controller.activate(name=name, apikey=apikey, registry=registry, test_package_version_override=test_package_version_override)
|
48
|
+
environment_controller.activate(name=name, apikey=apikey,username=username, password=password, registry=registry, test_package_version_override=test_package_version_override)
|
36
49
|
|
37
50
|
|
38
51
|
@environment_app.command(name="add")
|
@@ -58,9 +71,21 @@ def add_env(
|
|
58
71
|
type: Annotated[
|
59
72
|
EnvironmentAuthType,
|
60
73
|
typer.Option("--type", "-t", help="The type of auth you wish to use"),
|
61
|
-
] = None
|
74
|
+
] = None,
|
75
|
+
insecure: Annotated[
|
76
|
+
bool,
|
77
|
+
typer.Option("--insecure", help="Ignore SSL validation errors. Used for CPD Environments only"),
|
78
|
+
] = False,
|
79
|
+
verify: Annotated[
|
80
|
+
str,
|
81
|
+
typer.Option("--verify", help="Path to SSL Cert. Used for CPD Environments only"),
|
82
|
+
] = None,
|
62
83
|
):
|
63
|
-
|
84
|
+
if insecure and verify:
|
85
|
+
logger.error("Please choose either '--insecure' or '--verify' but not both.")
|
86
|
+
sys.exit(1)
|
87
|
+
|
88
|
+
environment_controller.add(name=name, url=url, should_activate=activate, iam_url=iam_url, type=type, insecure=insecure, verify=verify)
|
64
89
|
|
65
90
|
|
66
91
|
@environment_app.command(name="remove")
|