ibm-watsonx-orchestrate 1.10.0b0__tar.gz → 1.10.0b1__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 (132) hide show
  1. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/PKG-INFO +1 -1
  2. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/__init__.py +1 -1
  3. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/agent_builder/connections/__init__.py +1 -1
  4. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/agent_builder/connections/connections.py +1 -1
  5. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/agent_builder/connections/types.py +16 -12
  6. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/agent_builder/knowledge_bases/types.py +47 -3
  7. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/agent_builder/toolkits/types.py +18 -15
  8. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/agent_builder/tools/types.py +1 -1
  9. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/commands/connections/connections_command.py +7 -7
  10. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/commands/connections/connections_controller.py +36 -26
  11. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/commands/knowledge_bases/knowledge_bases_controller.py +32 -10
  12. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/commands/server/server_command.py +95 -14
  13. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/commands/toolkit/toolkit_command.py +43 -10
  14. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/commands/toolkit/toolkit_controller.py +52 -25
  15. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/client/connections/connections_client.py +4 -3
  16. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/client/knowledge_bases/knowledge_base_client.py +4 -4
  17. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/docker/compose-lite.yml +48 -13
  18. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/docker/default.env +18 -13
  19. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/flow_builder/flows/__init__.py +2 -0
  20. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/flow_builder/flows/flow.py +91 -12
  21. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/flow_builder/node.py +39 -15
  22. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/flow_builder/types.py +114 -25
  23. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/run/connections.py +2 -2
  24. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/.gitignore +0 -0
  25. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/LICENSE +0 -0
  26. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/pyproject.toml +0 -0
  27. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/agent_builder/__init__.py +0 -0
  28. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/agent_builder/agents/__init__.py +0 -0
  29. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/agent_builder/agents/agent.py +0 -0
  30. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/agent_builder/agents/assistant_agent.py +0 -0
  31. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/agent_builder/agents/external_agent.py +0 -0
  32. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/agent_builder/agents/types.py +0 -0
  33. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/agent_builder/agents/webchat_customizations/__init__.py +0 -0
  34. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/agent_builder/agents/webchat_customizations/prompts.py +0 -0
  35. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/agent_builder/agents/webchat_customizations/welcome_content.py +0 -0
  36. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/agent_builder/knowledge_bases/knowledge_base.py +0 -0
  37. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/agent_builder/knowledge_bases/knowledge_base_requests.py +0 -0
  38. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/agent_builder/model_policies/__init__.py +0 -0
  39. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/agent_builder/model_policies/types.py +0 -0
  40. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/agent_builder/models/__init__.py +0 -0
  41. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/agent_builder/models/types.py +0 -0
  42. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/agent_builder/toolkits/base_toolkit.py +0 -0
  43. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/agent_builder/tools/__init__.py +0 -0
  44. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/agent_builder/tools/base_tool.py +0 -0
  45. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/agent_builder/tools/flow_tool.py +0 -0
  46. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/agent_builder/tools/openapi_tool.py +0 -0
  47. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/agent_builder/tools/python_tool.py +0 -0
  48. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/agent_builder/utils/__init__.py +0 -0
  49. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/agent_builder/voice_configurations/__init__.py +0 -0
  50. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/agent_builder/voice_configurations/types.py +0 -0
  51. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/__init__.py +0 -0
  52. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/commands/__init__.py +0 -0
  53. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/commands/agents/agents_command.py +0 -0
  54. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/commands/agents/agents_controller.py +0 -0
  55. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/commands/channels/channels_command.py +0 -0
  56. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/commands/channels/channels_controller.py +0 -0
  57. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/commands/channels/types.py +0 -0
  58. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/commands/channels/webchat/channels_webchat_command.py +0 -0
  59. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/commands/channels/webchat/channels_webchat_controller.py +0 -0
  60. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/commands/chat/chat_command.py +0 -0
  61. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/commands/copilot/copilot_command.py +0 -0
  62. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/commands/copilot/copilot_controller.py +0 -0
  63. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/commands/copilot/copilot_server_controller.py +0 -0
  64. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/commands/environment/environment_command.py +0 -0
  65. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/commands/environment/environment_controller.py +0 -0
  66. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/commands/environment/types.py +0 -0
  67. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/commands/evaluations/evaluations_command.py +0 -0
  68. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/commands/evaluations/evaluations_controller.py +0 -0
  69. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/commands/knowledge_bases/knowledge_bases_command.py +0 -0
  70. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/commands/login/login_command.py +0 -0
  71. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/commands/models/model_provider_mapper.py +0 -0
  72. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/commands/models/models_command.py +0 -0
  73. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/commands/models/models_controller.py +0 -0
  74. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/commands/server/types.py +0 -0
  75. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/commands/settings/__init__.py +0 -0
  76. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/commands/settings/observability/__init__.py +0 -0
  77. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/commands/settings/observability/langfuse/__init__.py +0 -0
  78. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/commands/settings/observability/langfuse/langfuse_command.py +0 -0
  79. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/commands/settings/observability/observability_command.py +0 -0
  80. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/commands/settings/settings_command.py +0 -0
  81. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/commands/tools/tools_command.py +0 -0
  82. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/commands/tools/tools_controller.py +0 -0
  83. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/commands/tools/types.py +0 -0
  84. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/commands/voice_configurations/voice_configurations_command.py +0 -0
  85. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/commands/voice_configurations/voice_configurations_controller.py +0 -0
  86. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/config.py +0 -0
  87. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/init_helper.py +0 -0
  88. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/main.py +0 -0
  89. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/client/__init__.py +0 -0
  90. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/client/agents/agent_client.py +0 -0
  91. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/client/agents/assistant_agent_client.py +0 -0
  92. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/client/agents/external_agent_client.py +0 -0
  93. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/client/analytics/__init__.py +0 -0
  94. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/client/analytics/llm/__init__.py +0 -0
  95. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/client/analytics/llm/analytics_llm_client.py +0 -0
  96. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/client/base_api_client.py +0 -0
  97. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/client/base_service_instance.py +0 -0
  98. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/client/client.py +0 -0
  99. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/client/client_errors.py +0 -0
  100. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/client/connections/__init__.py +0 -0
  101. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/client/connections/utils.py +0 -0
  102. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/client/copilot/cpe/copilot_cpe_client.py +0 -0
  103. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/client/credentials.py +0 -0
  104. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/client/local_service_instance.py +0 -0
  105. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/client/model_policies/__init__.py +0 -0
  106. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/client/model_policies/model_policies_client.py +0 -0
  107. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/client/models/__init__.py +0 -0
  108. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/client/models/models_client.py +0 -0
  109. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/client/service_instance.py +0 -0
  110. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/client/toolkit/toolkit_client.py +0 -0
  111. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/client/tools/tempus_client.py +0 -0
  112. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/client/tools/tool_client.py +0 -0
  113. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/client/utils.py +0 -0
  114. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/client/voice_configurations/voice_configurations_client.py +0 -0
  115. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/docker/proxy-config-single.yaml +0 -0
  116. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/docker/sdk/ibm_watsonx_orchestrate-0.6.0-py3-none-any.whl +0 -0
  117. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/docker/sdk/ibm_watsonx_orchestrate-0.6.0.tar.gz +0 -0
  118. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/docker/start-up.sh +0 -0
  119. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/docker/tempus/common-config.yaml +0 -0
  120. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/flow_builder/__init__.py +0 -0
  121. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/flow_builder/data_map.py +0 -0
  122. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/flow_builder/flows/constants.py +0 -0
  123. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/flow_builder/flows/decorators.py +0 -0
  124. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/flow_builder/flows/events.py +0 -0
  125. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/flow_builder/utils.py +0 -0
  126. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/run/__init__.py +0 -0
  127. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/utils/__init__.py +0 -0
  128. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/utils/exceptions.py +0 -0
  129. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/utils/logging/__init__.py +0 -0
  130. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/utils/logging/logger.py +0 -0
  131. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/utils/logging/logging.yaml +0 -0
  132. {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/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.10.0b0
3
+ Version: 1.10.0b1
4
4
  Summary: IBM watsonx.orchestrate SDK
5
5
  Author-email: IBM <support@ibm.com>
6
6
  License: MIT License
@@ -5,7 +5,7 @@
5
5
 
6
6
  pkg_name = "ibm-watsonx-orchestrate"
7
7
 
8
- __version__ = "1.10.0b0"
8
+ __version__ = "1.10.0b1"
9
9
 
10
10
 
11
11
 
@@ -18,7 +18,7 @@ from .types import (
18
18
  OAuth2AuthCodeCredentials,
19
19
  OAuth2ClientCredentials,
20
20
  # OAuth2ImplicitCredentials,
21
- # OAuth2PasswordCredentials,
21
+ OAuth2PasswordCredentials,
22
22
  OAuthOnBehalfOfCredentials,
23
23
  KeyValueConnectionCredentials,
24
24
  CONNECTION_KIND_SCHEME_MAPPING,
@@ -37,7 +37,7 @@ connection_type_security_schema_map = {
37
37
  ConnectionType.OAUTH2_CLIENT_CREDS: ConnectionSecurityScheme.OAUTH2,
38
38
  ConnectionType.OAUTH_ON_BEHALF_OF_FLOW: ConnectionSecurityScheme.OAUTH2,
39
39
  # ConnectionType.OAUTH2_IMPLICIT: ConnectionSecurityScheme.OAUTH2,
40
- # ConnectionType.OAUTH2_PASSWORD: ConnectionSecurityScheme.OAUTH2
40
+ ConnectionType.OAUTH2_PASSWORD: ConnectionSecurityScheme.OAUTH2
41
41
  }
42
42
 
43
43
  def _clean_env_vars(vars: dict[str:str], requirements: List[str], app_id: str) -> dict[str,str]:
@@ -8,7 +8,7 @@ class ConnectionKind(str, Enum):
8
8
  api_key = 'api_key'
9
9
  oauth_auth_code_flow = 'oauth_auth_code_flow'
10
10
  # oauth_auth_implicit_flow = 'oauth_auth_implicit_flow'
11
- # oauth_auth_password_flow = 'oauth_auth_password_flow'
11
+ oauth_auth_password_flow = 'oauth_auth_password_flow'
12
12
  oauth_auth_client_credentials_flow = 'oauth_auth_client_credentials_flow'
13
13
  oauth_auth_on_behalf_of_flow = 'oauth_auth_on_behalf_of_flow'
14
14
  key_value = 'key_value'
@@ -34,7 +34,7 @@ class ConnectionPreference(str, Enum):
34
34
  class ConnectionAuthType(str, Enum):
35
35
  OAUTH2_AUTH_CODE = 'oauth2_auth_code'
36
36
  # OAUTH2_IMPLICIT = 'oauth2_implicit'
37
- # OAUTH2_PASSWORD = 'oauth2_password'
37
+ OAUTH2_PASSWORD = 'oauth2_password'
38
38
  OAUTH2_CLIENT_CREDS = 'oauth2_client_creds'
39
39
  OAUTH_ON_BEHALF_OF_FLOW = 'oauth_on_behalf_of_flow'
40
40
 
@@ -65,7 +65,7 @@ class ConnectionType(str, Enum):
65
65
  API_KEY_AUTH = ConnectionSecurityScheme.API_KEY_AUTH.value
66
66
  OAUTH2_AUTH_CODE = ConnectionAuthType.OAUTH2_AUTH_CODE.value
67
67
  # OAUTH2_IMPLICIT = ConnectionAuthType.OAUTH2_IMPLICIT.value
68
- # OAUTH2_PASSWORD = ConnectionAuthType.OAUTH2_PASSWORD.value
68
+ OAUTH2_PASSWORD = ConnectionAuthType.OAUTH2_PASSWORD.value
69
69
  OAUTH2_CLIENT_CREDS = ConnectionAuthType.OAUTH2_CLIENT_CREDS.value
70
70
  OAUTH_ON_BEHALF_OF_FLOW = ConnectionAuthType.OAUTH_ON_BEHALF_OF_FLOW.value
71
71
  KEY_VALUE = ConnectionSecurityScheme.KEY_VALUE.value
@@ -90,7 +90,7 @@ OAUTH_CONNECTION_TYPES = {
90
90
  ConnectionType.OAUTH2_AUTH_CODE,
91
91
  ConnectionType.OAUTH2_CLIENT_CREDS,
92
92
  # ConnectionType.OAUTH2_IMPLICIT,
93
- # ConnectionType.OAUTH2_PASSWORD,
93
+ ConnectionType.OAUTH2_PASSWORD,
94
94
  ConnectionType.OAUTH_ON_BEHALF_OF_FLOW,
95
95
  }
96
96
 
@@ -193,11 +193,15 @@ class OAuth2AuthCodeCredentials(BaseModel):
193
193
  # client_id: str
194
194
  # authorization_url: str
195
195
 
196
- # class OAuth2PasswordCredentials(BaseModel):
197
- # client_id: str
198
- # client_secret: str
199
- # token_url: str
200
- # authorization_url: str
196
+ class OAuth2PasswordCredentials(BaseModel):
197
+ username: str
198
+ password: str
199
+ client_id: str
200
+ client_secret: str
201
+ token_url: str
202
+ scope: Optional[str] = None
203
+ grant_type: str = "password"
204
+
201
205
 
202
206
  class OAuth2ClientCredentials(BaseModel):
203
207
  client_id: str
@@ -226,7 +230,7 @@ CREDENTIALS_SET = Union[
226
230
  APIKeyAuthCredentials,
227
231
  OAuth2AuthCodeCredentials,
228
232
  # OAuth2ImplicitCredentials,
229
- # OAuth2PasswordCredentials,
233
+ OAuth2PasswordCredentials,
230
234
  OAuth2ClientCredentials,
231
235
  OAuthOnBehalfOfCredentials,
232
236
  KeyValueConnectionCredentials
@@ -240,7 +244,7 @@ CONNECTION_KIND_SCHEME_MAPPING = {
240
244
  ConnectionKind.api_key: ConnectionSecurityScheme.API_KEY_AUTH,
241
245
  ConnectionKind.oauth_auth_code_flow: ConnectionSecurityScheme.OAUTH2,
242
246
  # ConnectionKind.oauth_auth_implicit_flow: ConnectionSecurityScheme.OAUTH2,
243
- # ConnectionKind.oauth_auth_password_flow: ConnectionSecurityScheme.OAUTH2,
247
+ ConnectionKind.oauth_auth_password_flow: ConnectionSecurityScheme.OAUTH2,
244
248
  ConnectionKind.oauth_auth_client_credentials_flow: ConnectionSecurityScheme.OAUTH2,
245
249
  ConnectionKind.oauth_auth_on_behalf_of_flow: ConnectionSecurityScheme.OAUTH2,
246
250
  ConnectionKind.key_value: ConnectionSecurityScheme.KEY_VALUE,
@@ -250,7 +254,7 @@ CONNECTION_KIND_SCHEME_MAPPING = {
250
254
  CONNECTION_KIND_OAUTH_TYPE_MAPPING = {
251
255
  ConnectionKind.oauth_auth_code_flow: ConnectionAuthType.OAUTH2_AUTH_CODE,
252
256
  # ConnectionKind.oauth_auth_implicit_flow: ConnectionAuthType.OAUTH2_IMPLICIT,
253
- # ConnectionKind.oauth_auth_password_flow: ConnectionAuthType.OAUTH2_PASSWORD,
257
+ ConnectionKind.oauth_auth_password_flow: ConnectionAuthType.OAUTH2_PASSWORD,
254
258
  ConnectionKind.oauth_auth_client_credentials_flow: ConnectionAuthType.OAUTH2_CLIENT_CREDS,
255
259
  ConnectionKind.oauth_auth_on_behalf_of_flow: ConnectionAuthType.OAUTH_ON_BEHALF_OF_FLOW,
256
260
  }
@@ -11,6 +11,7 @@ class SpecVersion(str, Enum):
11
11
  class KnowledgeBaseKind(str, Enum):
12
12
  KNOWLEDGE_BASE = "knowledge_base"
13
13
  class RetrievalConfidenceThreshold(str, Enum):
14
+ Off = "Off"
14
15
  Lowest = "Lowest"
15
16
  Low = "Low"
16
17
  High = "High"
@@ -24,6 +25,7 @@ class GeneratedResponseLength(str, Enum):
24
25
 
25
26
 
26
27
  class ResponseConfidenceThreshold(str, Enum):
28
+ Off = "Off"
27
29
  Lowest = "Lowest"
28
30
  Low = "Low"
29
31
  High = "High"
@@ -86,6 +88,8 @@ class GenerationConfiguration(BaseModel):
86
88
  {
87
89
  "model_id": "meta-llama/llama-3-1-70b-instruct",
88
90
  "prompt_instruction": "When the documents are in different languages, you should respond in english.",
91
+ "max_docs_passed_to_llm": 10,
92
+ "retrieval_confidence_threshold": "Lowest",
89
93
  "generated_response_length": "Moderate",
90
94
  "display_text_no_results_found": "no docs found",
91
95
  "display_text_connectivity_issue": "conn failed",
@@ -95,6 +99,7 @@ class GenerationConfiguration(BaseModel):
95
99
 
96
100
  model_id: Optional[str] = None
97
101
  prompt_instruction: Optional[str] = None
102
+ max_docs_passed_to_llm: Optional[int] = None
98
103
  generated_response_length: Optional[GeneratedResponseLength] = None
99
104
  display_text_no_results_found: Optional[str] = None
100
105
  display_text_connectivity_issue: Optional[str] = None
@@ -134,12 +139,13 @@ class MilvusConnection(BaseModel):
134
139
  }
135
140
  """
136
141
  grpc_host: Optional[str] = None
142
+ grpc_port: Optional[str] = None
143
+ server_cert: Optional[str] = None
137
144
  database: Optional[str] = None
138
145
  collection: Optional[str] = None
139
146
  index: Optional[str] = None
140
147
  embedding_model_id: Optional[str] = None
141
148
  limit : Optional[int] = None
142
- grpc_port: Optional[str] = None
143
149
  filter: Optional[str] = None
144
150
  field_mapping: Optional[FieldMapping] = None
145
151
 
@@ -197,12 +203,46 @@ class CustomSearchConnection(BaseModel):
197
203
  filter: Optional[str] = None
198
204
  metadata: Optional[dict] = None
199
205
 
206
+ class AstraDBConnection(BaseModel):
207
+ """
208
+ example:
209
+ {
210
+ "api_endpoint": "https://xxx-us-east-2.apps.astra.datastax.com",
211
+ "key_space": "default_keyspace",
212
+ "collection": "search_wa_docs",
213
+ "embedding_model_id": "sentence-transformers/all-minilm-l12-v2",
214
+ "port": "443",
215
+ "filter": "productType: \"boots\"",
216
+ "limit": 5,
217
+ "field_mapping": {
218
+ "title": "title",
219
+ "body": "text",
220
+ "url": "some-url"
221
+ }
222
+ }
223
+ """
224
+ api_endpoint: str
225
+ port: Optional[str] = None
226
+ server_cert: Optional[str] = None
227
+ keyspace: Optional[str]
228
+ data_type: str
229
+ collection: Optional[str]
230
+ table: Optional[str]
231
+ index_column: Optional[str]
232
+ embedding_mode: str
233
+ embedding_model_id: Optional[str]
234
+ credentials: dict
235
+ search_mode: str
236
+ limit: Optional[int] = 5
237
+ filter: Optional[str] = None
238
+ field_mapping: Optional[FieldMapping] = None
239
+
200
240
  class IndexConnection(BaseModel):
201
241
  connection_id: Optional[str] = None
202
242
  milvus: Optional[MilvusConnection] = None
203
243
  elastic_search: Optional[ElasticSearchConnection] = None
204
244
  custom_search: Optional[CustomSearchConnection] = None
205
-
245
+ astradb: Optional[AstraDBConnection] = None
206
246
 
207
247
  class ConversationalSearchConfig(BaseModel):
208
248
  language: Optional[str] = None
@@ -218,6 +258,10 @@ class KnowledgeBaseBuiltInVectorIndexConfig(BaseModel):
218
258
  chunk_size: Optional[int] = None
219
259
  chunk_overlap: Optional[int] = None
220
260
  limit: Optional[int] = None
261
+
262
+ class FileUpload(BaseModel):
263
+ path: str
264
+ url: Optional[str] = None
221
265
 
222
266
  class KnowledgeBaseSpec(BaseModel):
223
267
  """Schema for a complete knowledge-base."""
@@ -236,4 +280,4 @@ class KnowledgeBaseSpec(BaseModel):
236
280
  created_on: Optional[datetime] = None
237
281
  updated_at: Optional[datetime] = None
238
282
  # For import/update
239
- documents: list[str] = None
283
+ documents: list[str] | list[FileUpload] = None
@@ -1,27 +1,36 @@
1
- from typing import List, Dict, Optional
1
+ from typing import List, Dict, Optional, Union
2
2
  from enum import Enum
3
- from pydantic import BaseModel, model_validator
3
+ from pydantic import BaseModel
4
4
 
5
5
  class ToolkitKind(str, Enum):
6
6
  MCP = "mcp"
7
7
 
8
- class Language(str, Enum):
9
- NODE = "node"
10
- PYTHON ="python"
11
-
12
8
  class ToolkitSource(str, Enum):
13
9
  FILES = "files"
14
10
  PUBLIC_REGISTRY = "public-registry"
15
11
 
12
+ class ToolkitTransportKind(str, Enum):
13
+ STREAMABLE_HTTP = "streamable_http"
14
+ SSE = "sse"
16
15
 
16
+ class Language(str, Enum):
17
+ NODE = "node"
18
+ PYTHON ="python"
17
19
 
18
- class McpModel(BaseModel):
19
- source: str
20
+ class LocalMcpModel(BaseModel):
21
+ source: ToolkitSource
20
22
  command: str
21
23
  args: List[str]
22
24
  tools: List[str]
23
25
  connections: Dict[str, str]
24
26
 
27
+ class RemoteMcpModel(BaseModel):
28
+ server_url: str
29
+ transport: ToolkitTransportKind
30
+ tools: List[str]
31
+ connections: Dict[str, str]
32
+
33
+ McpModel = Union[LocalMcpModel, RemoteMcpModel]
25
34
 
26
35
  class ToolkitSpec(BaseModel):
27
36
  id: str
@@ -33,10 +42,4 @@ class ToolkitSpec(BaseModel):
33
42
  created_by: str
34
43
  created_by_username: str
35
44
  tools: List[str] | None
36
- mcp: McpModel
37
-
38
- @model_validator(mode='after')
39
- def validate_tools_and_mcp(self) -> 'ToolkitSpec':
40
- if self.mcp.source not in {"files", "public-registry"}:
41
- raise ValueError("MCP source must be either 'files' or 'public-registry'.")
42
- return self
45
+ mcp: McpModel
@@ -152,7 +152,7 @@ class ClientSideToolBinding(BaseModel):
152
152
 
153
153
  class McpToolBinding(BaseModel):
154
154
  server_url: Optional[str] = None
155
- source: str
155
+ source: str | None
156
156
  connections: Dict[str, str] | None
157
157
 
158
158
  class FlowToolBinding(BaseModel):
@@ -160,7 +160,7 @@ def set_credentials_connection_command(
160
160
  typer.Option(
161
161
  '--username',
162
162
  '-u',
163
- help='For basic auth, the username to login with'
163
+ help='For basic auth and oauth_auth_password_flow, the username to login with'
164
164
  )
165
165
  ] = None,
166
166
  password: Annotated[
@@ -168,7 +168,7 @@ def set_credentials_connection_command(
168
168
  typer.Option(
169
169
  '--password',
170
170
  '-p',
171
- help='For basic auth, the password to login with'
171
+ help='For basic auth and oauth_auth_password_flow, the password to login with'
172
172
  )
173
173
  ] = None,
174
174
  token: Annotated[
@@ -191,14 +191,14 @@ def set_credentials_connection_command(
191
191
  typer.Option(
192
192
  '--client-id',
193
193
  # help='For oauth_auth_on_behalf_of_flow, oauth_auth_code_flow, oauth_auth_implicit_flow, oauth_auth_password_flow and oauth_auth_client_credentials_flow, the client_id to authenticate against the application token server'
194
- help='For oauth_auth_on_behalf_of_flow and oauth_auth_client_credentials_flow, the client_id to authenticate against the application token server'
194
+ help='For oauth_auth_on_behalf_of_flow, oauth_auth_password_flow and oauth_auth_client_credentials_flow, the client_id to authenticate against the application token server'
195
195
  )
196
196
  ] = None,
197
197
  client_secret: Annotated[
198
198
  str,
199
199
  typer.Option(
200
200
  '--client-secret',
201
- help='For oauth_auth_client_credentials_flow, the client_secret to authenticate with'
201
+ help='For oauth_auth_client_credentials_flow and oauth_auth_password_flow, the client_secret to authenticate with'
202
202
  )
203
203
  ] = None,
204
204
  send_via: Annotated[
@@ -213,7 +213,7 @@ def set_credentials_connection_command(
213
213
  typer.Option(
214
214
  '--token-url',
215
215
  # help='For oauth_auth_on_behalf_of_flow, oauth_auth_code_flow, oauth_auth_password_flow and oauth_auth_client_credentials_flow, the url of the application token server'
216
- help='For oauth_auth_on_behalf_of_flow and oauth_auth_client_credentials_flow, the url of the application token server'
216
+ help='For oauth_auth_on_behalf_of_flow, oauth_auth_password_flow and oauth_auth_client_credentials_flow, the url of the application token server'
217
217
  )
218
218
  ] = None,
219
219
  auth_url: Annotated[
@@ -227,14 +227,14 @@ def set_credentials_connection_command(
227
227
  str,
228
228
  typer.Option(
229
229
  '--grant-type',
230
- help='For oauth_auth_on_behalf_of_flow and oauth_auth_client_credentials_flow, the grant type used by the application token server'
230
+ help='For oauth_auth_on_behalf_of_flow, oauth_auth_password_flow and oauth_auth_client_credentials_flow, the grant type used by the application token server'
231
231
  )
232
232
  ] = None,
233
233
  scope: Annotated[
234
234
  str,
235
235
  typer.Option(
236
236
  '--scope',
237
- help='For oauth_auth_code_flow and oauth_auth_client_credentials_flow, the optional scopes used by the application token server. Should be in the form of a space seperated string.'
237
+ help='For oauth_auth_code_flow, oauth_auth_password_flow and oauth_auth_client_credentials_flow, the optional scopes used by the application token server. Should be in the form of a space seperated string.'
238
238
  )
239
239
  ] = None,
240
240
  entries: Annotated[
@@ -19,15 +19,15 @@ from ibm_watsonx_orchestrate.agent_builder.connections.types import (
19
19
  BasicAuthCredentials,
20
20
  BearerTokenAuthCredentials,
21
21
  APIKeyAuthCredentials,
22
- # OAuth2AuthCodeCredentials,
22
+ OAuth2AuthCodeCredentials,
23
23
  OAuth2ClientCredentials,
24
24
  # OAuth2ImplicitCredentials,
25
- # OAuth2PasswordCredentials,
25
+ OAuth2PasswordCredentials,
26
26
  OAuthOnBehalfOfCredentials,
27
27
  KeyValueConnectionCredentials,
28
28
  CREDENTIALS,
29
29
  IdentityProviderCredentials,
30
- OAUTH_CONNECTION_TYPES, OAuth2AuthCodeCredentials
30
+ OAUTH_CONNECTION_TYPES
31
31
 
32
32
  )
33
33
 
@@ -115,7 +115,7 @@ def _format_token_headers(header_list: List) -> dict:
115
115
 
116
116
  def _validate_connection_params(type: ConnectionType, **args) -> None:
117
117
 
118
- if type == ConnectionType.BASIC_AUTH and (
118
+ if type in {ConnectionType.BASIC_AUTH, ConnectionType.OAUTH2_PASSWORD} and (
119
119
  args.get('username') is None or args.get('password') is None
120
120
  ):
121
121
  raise typer.BadParameter(
@@ -136,7 +136,7 @@ def _validate_connection_params(type: ConnectionType, **args) -> None:
136
136
  f"Missing flags --api-key is required for type {type}"
137
137
  )
138
138
 
139
- if type in {ConnectionType.OAUTH2_CLIENT_CREDS, ConnectionType.OAUTH2_AUTH_CODE} and args.get('client_secret') is None:
139
+ if type in {ConnectionType.OAUTH2_CLIENT_CREDS, ConnectionType.OAUTH2_AUTH_CODE, ConnectionType.OAUTH2_PASSWORD} and args.get('client_secret') is None:
140
140
  raise typer.BadParameter(
141
141
  f"Missing flags --client-secret is required for type {type}"
142
142
  )
@@ -146,14 +146,14 @@ def _validate_connection_params(type: ConnectionType, **args) -> None:
146
146
  f"Missing flags --auth-url is required for type {type}"
147
147
  )
148
148
 
149
- if type in {ConnectionType.OAUTH_ON_BEHALF_OF_FLOW, ConnectionType.OAUTH2_CLIENT_CREDS, ConnectionType.OAUTH2_AUTH_CODE} and (
149
+ if type in {ConnectionType.OAUTH_ON_BEHALF_OF_FLOW, ConnectionType.OAUTH2_CLIENT_CREDS, ConnectionType.OAUTH2_AUTH_CODE, ConnectionType.OAUTH2_PASSWORD} and (
150
150
  args.get('client_id') is None
151
151
  ):
152
152
  raise typer.BadParameter(
153
153
  f"Missing flags --client-id is required for type {type}"
154
154
  )
155
155
 
156
- if type in {ConnectionType.OAUTH_ON_BEHALF_OF_FLOW, ConnectionType.OAUTH2_CLIENT_CREDS, ConnectionType.OAUTH2_AUTH_CODE} and (
156
+ if type in {ConnectionType.OAUTH_ON_BEHALF_OF_FLOW, ConnectionType.OAUTH2_CLIENT_CREDS, ConnectionType.OAUTH2_AUTH_CODE, ConnectionType.OAUTH2_PASSWORD} and (
157
157
  args.get('token_url') is None
158
158
  ):
159
159
  raise typer.BadParameter(
@@ -209,13 +209,11 @@ def _get_credentials(type: ConnectionType, **kwargs):
209
209
  # authorization_url=kwargs.get("auth_url"),
210
210
  # client_id=kwargs.get("client_id"),
211
211
  # )
212
- # case ConnectionType.OAUTH2_PASSWORD:
213
- # return OAuth2PasswordCredentials(
214
- # authorization_url=kwargs.get("auth_url"),
215
- # client_id=kwargs.get("client_id"),
216
- # client_secret=kwargs.get("client_secret"),
217
- # token_url=kwargs.get("token_url")
218
- # )
212
+ case ConnectionType.OAUTH2_PASSWORD:
213
+ keys = ["username", "password", "client_id","client_secret","token_url","grant_type", "scope"]
214
+ filtered_args = { key_name: kwargs[key_name] for key_name in keys if kwargs.get(key_name) }
215
+ return OAuth2PasswordCredentials(**filtered_args)
216
+
219
217
  case ConnectionType.OAUTH_ON_BEHALF_OF_FLOW:
220
218
  return OAuthOnBehalfOfCredentials(
221
219
  client_id=kwargs.get("client_id"),
@@ -283,25 +281,24 @@ def add_configuration(config: ConnectionConfiguration) -> None:
283
281
  logger.error(response_text)
284
282
  exit(1)
285
283
 
286
- def add_credentials(app_id: str, environment: ConnectionEnvironment, use_app_credentials: bool, credentials: CREDENTIALS) -> None:
284
+ def add_credentials(app_id: str, environment: ConnectionEnvironment, use_app_credentials: bool, credentials: CREDENTIALS, payload: dict = None) -> None:
287
285
  client = get_connections_client()
288
286
  try:
289
287
  existing_credentials = client.get_credentials(app_id=app_id, env=environment, use_app_credentials=use_app_credentials)
290
- if use_app_credentials:
291
- payload = {
292
- "app_credentials": credentials.model_dump(exclude_none=True)
293
- }
294
- else:
295
- payload = {
296
- "runtime_credentials": credentials.model_dump(exclude_none=True)
297
- }
288
+ if not payload:
289
+ if use_app_credentials:
290
+ payload = {
291
+ "app_credentials": credentials.model_dump(exclude_none=True)
292
+ }
293
+ else:
294
+ payload = {
295
+ "runtime_credentials": credentials.model_dump(exclude_none=True)
296
+ }
298
297
 
299
- logger.info(f"Setting credentials for environment '{environment}' on connection '{app_id}'")
300
298
  if existing_credentials:
301
299
  client.update_credentials(app_id=app_id, env=environment, use_app_credentials=use_app_credentials, payload=payload)
302
300
  else:
303
301
  client.create_credentials(app_id=app_id,env=environment, use_app_credentials=use_app_credentials, payload=payload)
304
- logger.info(f"Credentials successfully set for '{environment}' environment of connection '{app_id}'")
305
302
  except requests.HTTPError as e:
306
303
  response = e.response
307
304
  response_text = response.text
@@ -489,7 +486,20 @@ def set_credentials_connection(
489
486
  _validate_connection_params(type=conn_type, **kwargs)
490
487
  credentials = _get_credentials(type=conn_type, **kwargs)
491
488
 
492
- add_credentials(app_id=app_id, environment=environment, use_app_credentials=use_app_credentials, credentials=credentials)
489
+ # Special handling for oauth2 password flow as it sends both app_creds and runtime_creds
490
+ logger.info(f"Setting credentials for environment '{environment}' on connection '{app_id}'")
491
+ if conn_type == ConnectionType.OAUTH2_PASSWORD:
492
+ credentials_model = credentials.model_dump(exclude_none=True)
493
+ runtime_cred_keys = {"username", "password"}
494
+ app_creds = {"app_credentials": {k: credentials_model[k] for k in credentials_model if k not in runtime_cred_keys}}
495
+ runtime_creds = {"runtime_credentials": {k: credentials_model[k] for k in credentials_model if k in runtime_cred_keys}}
496
+
497
+ add_credentials(app_id=app_id, environment=environment, use_app_credentials=True, credentials=credentials, payload=app_creds)
498
+ add_credentials(app_id=app_id, environment=environment, use_app_credentials=False, credentials=credentials, payload=runtime_creds)
499
+ else:
500
+ add_credentials(app_id=app_id, environment=environment, use_app_credentials=use_app_credentials, credentials=credentials)
501
+
502
+ logger.info(f"Credentials successfully set for '{environment}' environment of connection '{app_id}'")
493
503
 
494
504
  def set_identity_provider_connection(
495
505
  app_id: str,
@@ -13,6 +13,7 @@ from ibm_watsonx_orchestrate.client.knowledge_bases.knowledge_base_client import
13
13
  from ibm_watsonx_orchestrate.client.base_api_client import ClientAPIException
14
14
  from ibm_watsonx_orchestrate.client.connections import get_connections_client
15
15
  from ibm_watsonx_orchestrate.client.utils import instantiate_client
16
+ from ibm_watsonx_orchestrate.agent_builder.knowledge_bases.types import FileUpload
16
17
 
17
18
  logger = logging.getLogger(__name__)
18
19
 
@@ -43,7 +44,8 @@ def parse_file(file: str) -> List[KnowledgeBase]:
43
44
  def to_column_name(col: str):
44
45
  return " ".join([word.capitalize() if not word[0].isupper() else word for word in col.split("_")])
45
46
 
46
- def get_file_name(path: str):
47
+ def get_file_name(file: str | FileUpload):
48
+ path = file.path if isinstance(file, FileUpload) else file
47
49
  # This name prettifying currently screws up file type detection on ingestion
48
50
  # return to_column_name(path.split("/")[-1].split(".")[0])
49
51
  return path.split("/")[-1]
@@ -55,7 +57,11 @@ def get_relative_file_path(path, dir):
55
57
  return f"{dir}{path.removeprefix('.')}"
56
58
  else:
57
59
  return f"{dir}/{path}"
58
-
60
+
61
+ def build_file_object(file_dir: str, file: str | FileUpload):
62
+ if isinstance(file, FileUpload):
63
+ return ('files', (get_file_name(file.path), open(get_relative_file_path(file.path, file_dir), 'rb')))
64
+ return ('files', (get_file_name(file), open(get_relative_file_path(file, file_dir), 'rb')))
59
65
 
60
66
  class KnowledgeBaseController:
61
67
  def __init__(self):
@@ -101,13 +107,19 @@ class KnowledgeBaseController:
101
107
 
102
108
  kb.validate_documents_or_index_exists()
103
109
  if kb.documents:
104
- files = [('files', (get_file_name(file_path), open(get_relative_file_path(file_path, file_dir), 'rb'))) for file_path in kb.documents]
110
+ files = [build_file_object(file_dir, file) for file in kb.documents]
111
+ file_urls = { get_file_name(file): file.url for file in kb.documents if isinstance(file, FileUpload) and file.url }
105
112
 
106
113
  kb.prioritize_built_in_index = True
107
114
  payload = kb.model_dump(exclude_none=True);
108
115
  payload.pop('documents');
109
116
 
110
- client.create_built_in(payload=payload, files=files)
117
+ data = {
118
+ 'knowledge_base': json.dumps(payload),
119
+ 'file_urls': json.dumps(file_urls)
120
+ }
121
+
122
+ client.create_built_in(payload=data, files=files)
111
123
  else:
112
124
  if len(kb.conversational_search_tool.index_config) != 1:
113
125
  raise ValueError(f"Must provide exactly one conversational_search_tool.index_config. Provided {len(kb.conversational_search_tool.index_config)}.")
@@ -118,7 +130,9 @@ class KnowledgeBaseController:
118
130
  raise ValueError(f"Must provide credentials (via --app-id) when using milvus or elastic_search.")
119
131
 
120
132
  kb.prioritize_built_in_index = False
121
- client.create(payload=kb.model_dump(exclude_none=True))
133
+ data = { 'knowledge_base': json.dumps(kb.model_dump(exclude_none=True)) }
134
+
135
+ client.create(payload=data)
122
136
 
123
137
  logger.info(f"Successfully imported knowledge base '{kb.name}'")
124
138
  except ClientAPIException as e:
@@ -151,8 +165,8 @@ class KnowledgeBaseController:
151
165
  existing_docs = [doc.get("metadata", {}).get("original_file_name", "") for doc in status.get("documents", [])]
152
166
 
153
167
  removed_docs = existing_docs[:]
154
- for filepath in kb.documents:
155
- filename = get_file_name(filepath)
168
+ for file in kb.documents:
169
+ filename = get_file_name(file)
156
170
 
157
171
  if filename in existing_docs:
158
172
  logger.warning(f'Document \"{filename}\" already exists in knowledge base. Updating...')
@@ -162,17 +176,25 @@ class KnowledgeBaseController:
162
176
  logger.warning(f'Document \"{filename}\" removed from knowledge base.')
163
177
 
164
178
 
165
- files = [('files', (get_file_name(file_path), open(get_relative_file_path(file_path, file_dir), 'rb'))) for file_path in kb.documents]
179
+ files = [build_file_object(file_dir, file) for file in kb.documents]
180
+ file_urls = { get_file_name(file): file.url for file in kb.documents if isinstance(file, FileUpload) and file.url }
166
181
 
167
182
  kb.prioritize_built_in_index = True
168
183
  payload = kb.model_dump(exclude_none=True);
169
184
  payload.pop('documents');
170
185
 
171
- self.get_client().update_with_documents(knowledge_base_id, payload=payload, files=files)
186
+ data = {
187
+ 'knowledge_base': json.dumps(payload),
188
+ 'file_urls': json.dumps(file_urls)
189
+ }
190
+
191
+ self.get_client().update_with_documents(knowledge_base_id, payload=data, files=files)
172
192
  else:
173
193
  if kb.conversational_search_tool and kb.conversational_search_tool.index_config:
174
194
  kb.prioritize_built_in_index = False
175
- self.get_client().update(knowledge_base_id, kb.model_dump(exclude_none=True))
195
+
196
+ data = { 'knowledge_base': json.dumps(kb.model_dump(exclude_none=True)) }
197
+ self.get_client().update(knowledge_base_id, payload=data)
176
198
 
177
199
  logger.info(f"Knowledge base '{kb.name}' updated successfully")
178
200