ibm-watsonx-orchestrate 1.5.1__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.
Files changed (121) hide show
  1. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/PKG-INFO +2 -1
  2. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/pyproject.toml +2 -1
  3. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/__init__.py +1 -1
  4. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/agent_builder/agents/__init__.py +1 -1
  5. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/agent_builder/agents/types.py +53 -3
  6. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/agent_builder/model_policies/types.py +1 -1
  7. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/agent_builder/models/types.py +0 -1
  8. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/agent_builder/tools/openapi_tool.py +41 -3
  9. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/agent_builder/tools/python_tool.py +2 -1
  10. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/agent_builder/tools/types.py +7 -0
  11. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/commands/agents/agents_command.py +18 -1
  12. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/commands/agents/agents_controller.py +97 -3
  13. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/commands/channels/webchat/channels_webchat_controller.py +0 -1
  14. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/commands/connections/connections_controller.py +1 -1
  15. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/commands/environment/environment_command.py +29 -4
  16. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/commands/environment/environment_controller.py +74 -8
  17. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/commands/environment/types.py +1 -0
  18. ibm_watsonx_orchestrate-1.6.0b0/src/ibm_watsonx_orchestrate/cli/commands/evaluations/evaluations_command.py +224 -0
  19. ibm_watsonx_orchestrate-1.6.0b0/src/ibm_watsonx_orchestrate/cli/commands/evaluations/evaluations_controller.py +158 -0
  20. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/commands/knowledge_bases/knowledge_bases_command.py +2 -2
  21. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/commands/models/model_provider_mapper.py +31 -25
  22. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/commands/models/models_command.py +6 -6
  23. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/commands/models/models_controller.py +17 -8
  24. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/commands/server/server_command.py +25 -17
  25. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/commands/server/types.py +2 -1
  26. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/commands/toolkit/toolkit_controller.py +0 -3
  27. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/commands/tools/tools_controller.py +14 -12
  28. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/config.py +2 -0
  29. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/main.py +6 -0
  30. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/client/agents/agent_client.py +14 -8
  31. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/client/agents/assistant_agent_client.py +3 -3
  32. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/client/agents/external_agent_client.py +2 -2
  33. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/client/base_api_client.py +9 -9
  34. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/client/connections/connections_client.py +32 -6
  35. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/client/connections/utils.py +1 -1
  36. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/client/credentials.py +4 -0
  37. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/client/model_policies/model_policies_client.py +2 -2
  38. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/client/service_instance.py +42 -1
  39. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/client/utils.py +27 -2
  40. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/docker/compose-lite.yml +27 -17
  41. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/docker/default.env +21 -15
  42. {ibm_watsonx_orchestrate-1.5.1/src/ibm_watsonx_orchestrate/experimental → ibm_watsonx_orchestrate-1.6.0b0/src/ibm_watsonx_orchestrate}/flow_builder/flows/__init__.py +3 -2
  43. ibm_watsonx_orchestrate-1.6.0b0/src/ibm_watsonx_orchestrate/flow_builder/flows/decorators.py +77 -0
  44. {ibm_watsonx_orchestrate-1.5.1/src/ibm_watsonx_orchestrate/experimental → ibm_watsonx_orchestrate-1.6.0b0/src/ibm_watsonx_orchestrate}/flow_builder/flows/events.py +6 -1
  45. {ibm_watsonx_orchestrate-1.5.1/src/ibm_watsonx_orchestrate/experimental → ibm_watsonx_orchestrate-1.6.0b0/src/ibm_watsonx_orchestrate}/flow_builder/flows/flow.py +70 -87
  46. {ibm_watsonx_orchestrate-1.5.1/src/ibm_watsonx_orchestrate/experimental → ibm_watsonx_orchestrate-1.6.0b0/src/ibm_watsonx_orchestrate}/flow_builder/types.py +15 -6
  47. ibm_watsonx_orchestrate-1.6.0b0/src/ibm_watsonx_orchestrate/flow_builder/utils.py +185 -0
  48. ibm_watsonx_orchestrate-1.5.1/src/ibm_watsonx_orchestrate/experimental/flow_builder/flows/decorators.py +0 -144
  49. ibm_watsonx_orchestrate-1.5.1/src/ibm_watsonx_orchestrate/experimental/flow_builder/utils.py +0 -115
  50. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/.gitignore +0 -0
  51. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/LICENSE +0 -0
  52. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/agent_builder/__init__.py +0 -0
  53. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/agent_builder/agents/agent.py +0 -0
  54. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/agent_builder/agents/assistant_agent.py +0 -0
  55. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/agent_builder/agents/external_agent.py +0 -0
  56. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/agent_builder/connections/__init__.py +0 -0
  57. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/agent_builder/connections/connections.py +0 -0
  58. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/agent_builder/connections/types.py +0 -0
  59. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/agent_builder/knowledge_bases/knowledge_base.py +0 -0
  60. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/agent_builder/knowledge_bases/knowledge_base_requests.py +0 -0
  61. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/agent_builder/knowledge_bases/types.py +0 -0
  62. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/agent_builder/model_policies/__init__.py +0 -0
  63. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/agent_builder/models/__init__.py +0 -0
  64. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/agent_builder/toolkits/base_toolkit.py +0 -0
  65. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/agent_builder/toolkits/types.py +0 -0
  66. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/agent_builder/tools/__init__.py +0 -0
  67. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/agent_builder/tools/base_tool.py +0 -0
  68. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/agent_builder/utils/__init__.py +0 -0
  69. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/agent_builder/utils/pydantic_utils.py +0 -0
  70. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/__init__.py +0 -0
  71. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/commands/__init__.py +0 -0
  72. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/commands/channels/channels_command.py +0 -0
  73. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/commands/channels/channels_controller.py +0 -0
  74. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/commands/channels/types.py +0 -0
  75. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/commands/channels/webchat/channels_webchat_command.py +0 -0
  76. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/commands/chat/chat_command.py +0 -0
  77. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/commands/connections/connections_command.py +0 -0
  78. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/commands/knowledge_bases/knowledge_bases_controller.py +0 -0
  79. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/commands/login/login_command.py +0 -0
  80. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/commands/settings/__init__.py +0 -0
  81. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/commands/settings/observability/__init__.py +0 -0
  82. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/commands/settings/observability/langfuse/__init__.py +0 -0
  83. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/commands/settings/observability/langfuse/langfuse_command.py +0 -0
  84. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/commands/settings/observability/observability_command.py +0 -0
  85. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/commands/settings/settings_command.py +0 -0
  86. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/commands/toolkit/toolkit_command.py +0 -0
  87. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/commands/tools/tools_command.py +0 -0
  88. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/commands/tools/types.py +0 -0
  89. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/cli/init_helper.py +0 -0
  90. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/client/__init__.py +0 -0
  91. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/client/analytics/__init__.py +0 -0
  92. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/client/analytics/llm/__init__.py +0 -0
  93. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/client/analytics/llm/analytics_llm_client.py +0 -0
  94. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/client/base_service_instance.py +0 -0
  95. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/client/client.py +0 -0
  96. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/client/client_errors.py +0 -0
  97. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/client/connections/__init__.py +0 -0
  98. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/client/knowledge_bases/knowledge_base_client.py +0 -0
  99. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/client/local_service_instance.py +0 -0
  100. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/client/model_policies/__init__.py +0 -0
  101. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/client/models/__init__.py +0 -0
  102. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/client/models/models_client.py +0 -0
  103. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/client/toolkit/toolkit_client.py +0 -0
  104. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/client/tools/tempus_client.py +0 -0
  105. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/client/tools/tool_client.py +0 -0
  106. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/docker/sdk/ibm_watsonx_orchestrate-0.6.0-py3-none-any.whl +0 -0
  107. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/docker/sdk/ibm_watsonx_orchestrate-0.6.0.tar.gz +0 -0
  108. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/docker/start-up.sh +0 -0
  109. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/docker/tempus/common-config.yaml +0 -0
  110. {ibm_watsonx_orchestrate-1.5.1/src/ibm_watsonx_orchestrate/experimental → ibm_watsonx_orchestrate-1.6.0b0/src/ibm_watsonx_orchestrate}/flow_builder/__init__.py +0 -0
  111. {ibm_watsonx_orchestrate-1.5.1/src/ibm_watsonx_orchestrate/experimental → ibm_watsonx_orchestrate-1.6.0b0/src/ibm_watsonx_orchestrate}/flow_builder/data_map.py +0 -0
  112. {ibm_watsonx_orchestrate-1.5.1/src/ibm_watsonx_orchestrate/experimental → ibm_watsonx_orchestrate-1.6.0b0/src/ibm_watsonx_orchestrate}/flow_builder/flows/constants.py +0 -0
  113. {ibm_watsonx_orchestrate-1.5.1/src/ibm_watsonx_orchestrate/experimental → ibm_watsonx_orchestrate-1.6.0b0/src/ibm_watsonx_orchestrate}/flow_builder/node.py +0 -0
  114. {ibm_watsonx_orchestrate-1.5.1/src/ibm_watsonx_orchestrate/experimental → ibm_watsonx_orchestrate-1.6.0b0/src/ibm_watsonx_orchestrate}/flow_builder/resources/flow_status.openapi.yml +0 -0
  115. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/run/__init__.py +0 -0
  116. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/run/connections.py +0 -0
  117. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/utils/__init__.py +0 -0
  118. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/utils/logging/__init__.py +0 -0
  119. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/utils/logging/logger.py +0 -0
  120. {ibm_watsonx_orchestrate-1.5.1 → ibm_watsonx_orchestrate-1.6.0b0}/src/ibm_watsonx_orchestrate/utils/logging/logging.yaml +0 -0
  121. {ibm_watsonx_orchestrate-1.5.1 → 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.5.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
@@ -36,7 +36,8 @@ dependencies = [
36
36
  "urllib3>=2.2.3",
37
37
  "munch>=4.0.0",
38
38
  "pytz>=2025.2",
39
- "redis>=6.0.0"
39
+ "redis>=6.0.0",
40
+ "ibm_watsonx_orchestrate_evaluation_framework==1.0.2"
40
41
  ]
41
42
 
42
43
  [project.optional-dependencies]
@@ -5,7 +5,7 @@
5
5
 
6
6
  pkg_name = "ibm-watsonx-orchestrate"
7
7
 
8
- __version__ = "1.5.1"
8
+ __version__ = "1.6.0b0"
9
9
 
10
10
 
11
11
 
@@ -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
@@ -17,7 +17,7 @@ class ModelPolicyRetry(BaseModel):
17
17
  on_status_codes: List[int] = None
18
18
 
19
19
  class ModelPolicyTarget(BaseModel):
20
- weight: float = None
20
+ weight: float | None = None
21
21
  model_name: str = None
22
22
 
23
23
  class ModelPolicyInner(BaseModel):
@@ -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
- spec.binding = ToolBinding(openapi=OpenApiToolBinding(
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
- if not props.get(prop).type:
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 knowlege bases names you wish for the agent to be able to utilise. Format --knowledge-bases base1 --knowledge-bases base2 ...",
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
- "--apikey", "-a", help="WXO API Key. Leave Blank if developing locally"
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
- environment_controller.add(name=name, url=url, should_activate=activate, iam_url=iam_url, type=type)
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")