ibm-watsonx-orchestrate 1.12.0b1__tar.gz → 1.12.2__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 (143) hide show
  1. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/PKG-INFO +2 -2
  2. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/pyproject.toml +1 -1
  3. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/__init__.py +2 -1
  4. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/agent_builder/tools/langflow_tool.py +61 -1
  5. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/cli/commands/environment/environment_command.py +5 -1
  6. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/cli/commands/environment/environment_controller.py +6 -3
  7. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/cli/commands/evaluations/evaluations_command.py +3 -2
  8. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/cli/commands/evaluations/evaluations_controller.py +1 -1
  9. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/cli/commands/partners/offering/partners_offering_controller.py +21 -4
  10. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/cli/commands/partners/offering/types.py +7 -15
  11. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/cli/commands/tools/tools_controller.py +37 -8
  12. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/cli/config.py +3 -1
  13. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/docker/default.env +9 -9
  14. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/flow_builder/flows/decorators.py +2 -0
  15. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/flow_builder/flows/flow.py +40 -2
  16. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/flow_builder/node.py +13 -1
  17. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/flow_builder/types.py +18 -0
  18. ibm_watsonx_orchestrate-1.12.2/src/ibm_watsonx_orchestrate/langflow/langflow_utils.py +195 -0
  19. ibm_watsonx_orchestrate-1.12.2/src/ibm_watsonx_orchestrate/langflow/lfx_deps.py +84 -0
  20. ibm_watsonx_orchestrate-1.12.2/src/ibm_watsonx_orchestrate/utils/logging/__init__.py +0 -0
  21. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/utils/utils.py +6 -2
  22. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/.gitignore +0 -0
  23. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/LICENSE +0 -0
  24. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/agent_builder/__init__.py +0 -0
  25. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/agent_builder/agents/__init__.py +0 -0
  26. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/agent_builder/agents/agent.py +0 -0
  27. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/agent_builder/agents/assistant_agent.py +0 -0
  28. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/agent_builder/agents/external_agent.py +0 -0
  29. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/agent_builder/agents/types.py +0 -0
  30. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/agent_builder/agents/webchat_customizations/__init__.py +0 -0
  31. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/agent_builder/agents/webchat_customizations/prompts.py +0 -0
  32. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/agent_builder/agents/webchat_customizations/welcome_content.py +0 -0
  33. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/agent_builder/connections/__init__.py +0 -0
  34. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/agent_builder/connections/connections.py +0 -0
  35. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/agent_builder/connections/types.py +0 -0
  36. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/agent_builder/knowledge_bases/knowledge_base.py +0 -0
  37. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/agent_builder/knowledge_bases/knowledge_base_requests.py +0 -0
  38. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/agent_builder/knowledge_bases/types.py +0 -0
  39. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/agent_builder/model_policies/__init__.py +0 -0
  40. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/agent_builder/model_policies/types.py +0 -0
  41. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/agent_builder/models/__init__.py +0 -0
  42. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/agent_builder/models/types.py +0 -0
  43. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/agent_builder/toolkits/base_toolkit.py +0 -0
  44. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/agent_builder/toolkits/types.py +0 -0
  45. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/agent_builder/tools/__init__.py +0 -0
  46. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/agent_builder/tools/base_tool.py +0 -0
  47. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/agent_builder/tools/flow_tool.py +0 -0
  48. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/agent_builder/tools/openapi_tool.py +0 -0
  49. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/agent_builder/tools/python_tool.py +0 -0
  50. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/agent_builder/tools/types.py +0 -0
  51. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/agent_builder/utils/__init__.py +0 -0
  52. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/agent_builder/voice_configurations/__init__.py +0 -0
  53. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/agent_builder/voice_configurations/types.py +0 -0
  54. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/cli/__init__.py +0 -0
  55. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/cli/commands/__init__.py +0 -0
  56. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/cli/commands/agents/agents_command.py +0 -0
  57. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/cli/commands/agents/agents_controller.py +0 -0
  58. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/cli/commands/channels/channels_command.py +0 -0
  59. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/cli/commands/channels/channels_controller.py +0 -0
  60. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/cli/commands/channels/types.py +0 -0
  61. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/cli/commands/channels/webchat/channels_webchat_command.py +0 -0
  62. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/cli/commands/channels/webchat/channels_webchat_controller.py +0 -0
  63. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/cli/commands/chat/chat_command.py +0 -0
  64. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/cli/commands/connections/connections_command.py +0 -0
  65. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/cli/commands/connections/connections_controller.py +0 -0
  66. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/cli/commands/copilot/copilot_command.py +0 -0
  67. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/cli/commands/copilot/copilot_controller.py +0 -0
  68. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/cli/commands/copilot/copilot_server_controller.py +0 -0
  69. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/cli/commands/environment/types.py +0 -0
  70. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/cli/commands/knowledge_bases/knowledge_bases_command.py +0 -0
  71. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/cli/commands/knowledge_bases/knowledge_bases_controller.py +0 -0
  72. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/cli/commands/login/login_command.py +0 -0
  73. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/cli/commands/models/model_provider_mapper.py +0 -0
  74. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/cli/commands/models/models_command.py +0 -0
  75. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/cli/commands/models/models_controller.py +0 -0
  76. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/cli/commands/partners/offering/partners_offering_command.py +0 -0
  77. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/cli/commands/partners/partners_command.py +0 -0
  78. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/cli/commands/partners/partners_controller.py +0 -0
  79. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/cli/commands/server/server_command.py +0 -0
  80. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/cli/commands/server/types.py +0 -0
  81. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/cli/commands/settings/__init__.py +0 -0
  82. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/cli/commands/settings/observability/__init__.py +0 -0
  83. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/cli/commands/settings/observability/langfuse/__init__.py +0 -0
  84. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/cli/commands/settings/observability/langfuse/langfuse_command.py +0 -0
  85. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/cli/commands/settings/observability/observability_command.py +0 -0
  86. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/cli/commands/settings/settings_command.py +0 -0
  87. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/cli/commands/toolkit/toolkit_command.py +0 -0
  88. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/cli/commands/toolkit/toolkit_controller.py +0 -0
  89. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/cli/commands/tools/tools_command.py +0 -0
  90. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/cli/commands/tools/types.py +0 -0
  91. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/cli/commands/voice_configurations/voice_configurations_command.py +0 -0
  92. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/cli/commands/voice_configurations/voice_configurations_controller.py +0 -0
  93. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/cli/init_helper.py +0 -0
  94. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/cli/main.py +0 -0
  95. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/client/__init__.py +0 -0
  96. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/client/agents/agent_client.py +0 -0
  97. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/client/agents/assistant_agent_client.py +0 -0
  98. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/client/agents/external_agent_client.py +0 -0
  99. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/client/analytics/__init__.py +0 -0
  100. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/client/analytics/llm/__init__.py +0 -0
  101. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/client/analytics/llm/analytics_llm_client.py +0 -0
  102. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/client/base_api_client.py +0 -0
  103. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/client/base_service_instance.py +0 -0
  104. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/client/client.py +0 -0
  105. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/client/client_errors.py +0 -0
  106. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/client/connections/__init__.py +0 -0
  107. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/client/connections/connections_client.py +0 -0
  108. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/client/connections/utils.py +0 -0
  109. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/client/copilot/cpe/copilot_cpe_client.py +0 -0
  110. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/client/credentials.py +0 -0
  111. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/client/knowledge_bases/knowledge_base_client.py +0 -0
  112. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/client/local_service_instance.py +0 -0
  113. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/client/model_policies/__init__.py +0 -0
  114. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/client/model_policies/model_policies_client.py +0 -0
  115. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/client/models/__init__.py +0 -0
  116. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/client/models/models_client.py +0 -0
  117. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/client/service_instance.py +0 -0
  118. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/client/toolkit/toolkit_client.py +0 -0
  119. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/client/tools/tempus_client.py +0 -0
  120. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/client/tools/tool_client.py +0 -0
  121. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/client/utils.py +0 -0
  122. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/client/voice_configurations/voice_configurations_client.py +0 -0
  123. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/docker/compose-lite.yml +0 -0
  124. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/docker/proxy-config-single.yaml +0 -0
  125. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/docker/sdk/ibm_watsonx_orchestrate-0.6.0-py3-none-any.whl +0 -0
  126. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/docker/sdk/ibm_watsonx_orchestrate-0.6.0.tar.gz +0 -0
  127. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/docker/start-up.sh +0 -0
  128. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/docker/tempus/common-config.yaml +0 -0
  129. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/flow_builder/__init__.py +0 -0
  130. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/flow_builder/data_map.py +0 -0
  131. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/flow_builder/flows/__init__.py +0 -0
  132. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/flow_builder/flows/constants.py +0 -0
  133. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/flow_builder/flows/events.py +0 -0
  134. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/flow_builder/utils.py +0 -0
  135. {ibm_watsonx_orchestrate-1.12.0b1/src/ibm_watsonx_orchestrate/run → ibm_watsonx_orchestrate-1.12.2/src/ibm_watsonx_orchestrate/langflow}/__init__.py +0 -0
  136. {ibm_watsonx_orchestrate-1.12.0b1/src/ibm_watsonx_orchestrate/utils → ibm_watsonx_orchestrate-1.12.2/src/ibm_watsonx_orchestrate/run}/__init__.py +0 -0
  137. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/run/connections.py +0 -0
  138. {ibm_watsonx_orchestrate-1.12.0b1/src/ibm_watsonx_orchestrate/utils/logging → ibm_watsonx_orchestrate-1.12.2/src/ibm_watsonx_orchestrate/utils}/__init__.py +0 -0
  139. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/utils/docker_utils.py +0 -0
  140. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/utils/environment.py +0 -0
  141. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/utils/exceptions.py +0 -0
  142. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/utils/logging/logger.py +0 -0
  143. {ibm_watsonx_orchestrate-1.12.0b1 → ibm_watsonx_orchestrate-1.12.2}/src/ibm_watsonx_orchestrate/utils/logging/logging.yaml +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ibm-watsonx-orchestrate
3
- Version: 1.12.0b1
3
+ Version: 1.12.2
4
4
  Summary: IBM watsonx.orchestrate SDK
5
5
  Author-email: IBM <support@ibm.com>
6
6
  License: MIT License
@@ -11,7 +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.24.2
14
- Requires-Dist: ibm-watsonx-orchestrate-evaluation-framework==1.1.2
14
+ Requires-Dist: ibm-watsonx-orchestrate-evaluation-framework==1.1.3
15
15
  Requires-Dist: jsonref==1.1.0
16
16
  Requires-Dist: langchain-core<=0.3.63
17
17
  Requires-Dist: langsmith<=0.3.45
@@ -35,7 +35,7 @@ dependencies = [
35
35
  "urllib3>=2.2.3",
36
36
  "pytz>=2025.2",
37
37
  "redis>=6.0.0",
38
- "ibm_watsonx_orchestrate_evaluation_framework==1.1.2"
38
+ "ibm_watsonx_orchestrate_evaluation_framework==1.1.3"
39
39
  ]
40
40
 
41
41
  [project.optional-dependencies]
@@ -5,7 +5,8 @@
5
5
 
6
6
  pkg_name = "ibm-watsonx-orchestrate"
7
7
 
8
- __version__ = "1.12.0b1"
8
+
9
+ __version__ = "1.12.2"
9
10
 
10
11
 
11
12
  from ibm_watsonx_orchestrate.utils.logging.logger import setup_logging
@@ -2,8 +2,10 @@ import json
2
2
  import re
3
3
 
4
4
  from pydantic import BaseModel
5
+ import rich
5
6
 
6
7
  from ibm_watsonx_orchestrate.agent_builder.connections.types import ConnectionSecurityScheme
8
+ from ibm_watsonx_orchestrate.langflow.langflow_utils import parse_langflow_model
7
9
  from .base_tool import BaseTool
8
10
  from .types import LangflowToolBinding, ToolBinding, ToolPermission, ToolRequestBody, ToolResponseBody, ToolSpec
9
11
  from ibm_watsonx_orchestrate.utils.exceptions import BadRequest
@@ -14,6 +16,9 @@ LANGFLOW_CHAT_OUTPUT_LABEL = "ChatOutput"
14
16
  VALID_NAME_PATTERN = re.compile("^[a-zA-Z](\\w|_)+$")
15
17
 
16
18
  class LangflowTool(BaseTool):
19
+ # additional python module requirements for langflow based tools
20
+ requirements: list[str] = []
21
+
17
22
  def __init__(self,spec: ToolSpec):
18
23
  BaseTool.__init__(self,spec=spec)
19
24
 
@@ -103,6 +108,59 @@ def create_langflow_tool(
103
108
  if not validate_langflow_version(langflow_version):
104
109
  raise ValueError(f"Langflow version is below minimum requirements, found '{langflow_version}', miniumum required version '{'.'.join(map(str,MIN_LANGFLOW_VERSION))}'")
105
110
 
111
+ # find all the component in Langflow and display its credential
112
+ langflow_spec = parse_langflow_model(tool_definition)
113
+ if langflow_spec:
114
+ rich.print(f"[bold white]Langflow version used: {langflow_version}[/bold white]")
115
+ rich.print("Please ensure this flow is compatible with the Langflow version bundled in ADK.")
116
+ rich.print("\nLangflow components:")
117
+
118
+ table = rich.table.Table(show_header=True, header_style="bold white", show_lines=True)
119
+ column_args = {
120
+ "ID": {},
121
+ "Name": {},
122
+ "Credentials": {},
123
+ "Requirements": {}
124
+ }
125
+ for column in column_args:
126
+ table.add_column(column,**column_args[column])
127
+
128
+ requirements = set()
129
+ api_key_not_set = False
130
+ for component in langflow_spec.components:
131
+ if component.credentials and len(component.credentials) > 0:
132
+ # create a command separated list with newline
133
+ component_creds = None
134
+ for k, v in component.credentials.items():
135
+ if v is None or v == "":
136
+ v = 'NOT SET'
137
+ api_key_not_set = True
138
+ if component_creds is None:
139
+ component_creds = f"{k} {v}"
140
+ else:
141
+ component_creds += "\n" + f"{k} {v}"
142
+ else:
143
+ component_creds = "N/A"
144
+
145
+ if component.requirements and len(component.requirements) > 0:
146
+ # create a command separated list with newline
147
+ component_req = "\n".join([f"{k}" for k in component.requirements])
148
+ for r in component.requirements:
149
+ requirements.add(r)
150
+ else:
151
+ component_req = "N/A"
152
+ table.add_row(component.id,component.name,component_creds,component_req)
153
+ rich.print(table)
154
+
155
+ rich.print("[bold yellow]Tip:[/bold yellow] Langflow tool might require additional python modules. Identified requirements will be added.")
156
+ rich.print("[bold yellow]Tip:[/bold yellow] Avoid hardcoding sensitive values. Use Orchestrate connections to manage secrets securely.")
157
+ if api_key_not_set:
158
+ rich.print("[bold yellow]Warning:[/bold yellow] Some required api key(s) were not set in the flow. Please adjust the flow to include them.")
159
+ rich.print("Ensure each credential follows the <app-id>_<variable> naming convention within the Langflow model.")
160
+
161
+ for connection in connections:
162
+ rich.print(f"* Connection: {connection} → Suggested naming: {connection}_<variable>")
163
+
106
164
  spec = ToolSpec(
107
165
  name=name,
108
166
  description=description,
@@ -121,4 +179,6 @@ def create_langflow_tool(
121
179
  )
122
180
  )
123
181
 
124
- return LangflowTool(spec)
182
+ tool = LangflowTool(spec=spec)
183
+ tool.requirements = requirements
184
+ return tool
@@ -43,9 +43,13 @@ def activate_env(
43
43
  test_package_version_override: Annotated[
44
44
  str,
45
45
  typer.Option("--test-package-version-override", help="Which prereleased package version to reference when using --registry testpypi", hidden=True),
46
+ ] = None,
47
+ skip_version_check: Annotated[
48
+ bool,
49
+ typer.Option('--skip-version-check/--enable-version-check', help='Use this flag to skip validating that adk version in use exists in pypi (for clients who mirror the ADK to a local registry and do not have local access to pypi).')
46
50
  ] = None
47
51
  ):
48
- environment_controller.activate(name=name, apikey=apikey,username=username, password=password, registry=registry, test_package_version_override=test_package_version_override)
52
+ environment_controller.activate(name=name, apikey=apikey, username=username, password=password, registry=registry, test_package_version_override=test_package_version_override, skip_version_check=skip_version_check)
49
53
 
50
54
 
51
55
  @environment_app.command(name="add")
@@ -18,8 +18,9 @@ from ibm_watsonx_orchestrate.cli.config import (
18
18
  ENV_IAM_URL_OPT,
19
19
  ENVIRONMENTS_SECTION_HEADER,
20
20
  PROTECTED_ENV_NAME,
21
- ENV_AUTH_TYPE, PYTHON_REGISTRY_HEADER, PYTHON_REGISTRY_TYPE_OPT, PYTHON_REGISTRY_TEST_PACKAGE_VERSION_OVERRIDE_OPT, BYPASS_SSL, VERIFY,
22
- DEFAULT_CONFIG_FILE_CONTENT
21
+ ENV_AUTH_TYPE, PYTHON_REGISTRY_HEADER, PYTHON_REGISTRY_TYPE_OPT, PYTHON_REGISTRY_TEST_PACKAGE_VERSION_OVERRIDE_OPT,
22
+ BYPASS_SSL, VERIFY,
23
+ DEFAULT_CONFIG_FILE_CONTENT, PYTHON_REGISTRY_SKIP_VERSION_CHECK_OPT
23
24
  )
24
25
  from ibm_watsonx_orchestrate.client.client import Client
25
26
  from ibm_watsonx_orchestrate.client.client_errors import ClientError
@@ -131,7 +132,7 @@ def _login(name: str, apikey: str = None, username: str = None, password: str =
131
132
  except ClientError as e:
132
133
  raise ClientError(e)
133
134
 
134
- def activate(name: str, apikey: str=None, username: str=None, password: str=None, registry: RegistryType=None, test_package_version_override=None) -> None:
135
+ def activate(name: str, apikey: str=None, username: str=None, password: str=None, registry: RegistryType=None, test_package_version_override=None, skip_version_check=None) -> None:
135
136
  cfg = Config()
136
137
  auth_cfg = Config(AUTH_CONFIG_FILE_FOLDER, AUTH_CONFIG_FILE)
137
138
  env_cfg = cfg.read(ENVIRONMENTS_SECTION_HEADER, name)
@@ -159,6 +160,8 @@ def activate(name: str, apikey: str=None, username: str=None, password: str=None
159
160
  elif cfg.read(PYTHON_REGISTRY_HEADER, PYTHON_REGISTRY_TYPE_OPT) is None:
160
161
  cfg.write(PYTHON_REGISTRY_HEADER, PYTHON_REGISTRY_TYPE_OPT, DEFAULT_CONFIG_FILE_CONTENT[PYTHON_REGISTRY_HEADER][PYTHON_REGISTRY_TYPE_OPT])
161
162
  cfg.write(PYTHON_REGISTRY_HEADER, PYTHON_REGISTRY_TEST_PACKAGE_VERSION_OVERRIDE_OPT, test_package_version_override)
163
+ if skip_version_check is not None:
164
+ cfg.write(PYTHON_REGISTRY_HEADER, PYTHON_REGISTRY_SKIP_VERSION_CHECK_OPT, skip_version_check)
162
165
 
163
166
  logger.info(f"Environment '{name}' is now active")
164
167
  is_cpd = is_cpd_env(url)
@@ -54,7 +54,8 @@ def read_env_file(env_path: Path|str) -> dict:
54
54
  def validate_watsonx_credentials(user_env_file: str) -> bool:
55
55
  required_sets = [
56
56
  ["WATSONX_SPACE_ID", "WATSONX_APIKEY"],
57
- ["WO_INSTANCE", "WO_API_KEY"]
57
+ ["WO_INSTANCE", "WO_API_KEY"],
58
+ ["WO_INSTANCE", "WO_PASSWORD", "WO_USERNAME"]
58
59
  ]
59
60
 
60
61
  def has_valid_keys(env: dict) -> bool:
@@ -75,7 +76,7 @@ def validate_watsonx_credentials(user_env_file: str) -> bool:
75
76
  user_env = read_env_file(user_env_file)
76
77
 
77
78
  if not has_valid_keys(user_env):
78
- logger.error("Error: The environment file does not contain the required keys: either WATSONX_SPACE_ID and WATSONX_APIKEY or WO_INSTANCE and WO_API_KEY.")
79
+ logger.error("Error: The environment file does not contain the required keys: either WATSONX_SPACE_ID and WATSONX_APIKEY or WO_INSTANCE and WO_API_KEY or WO_INSTANCE and WO_USERNAME and WO_PASSWORD.")
79
80
  sys.exit(1)
80
81
 
81
82
  # Update os.environ with whichever set is present
@@ -52,7 +52,7 @@ class EvaluationsController:
52
52
 
53
53
  if "WATSONX_SPACE_ID" in os.environ and "WATSONX_APIKEY" in os.environ:
54
54
  provider = "watsonx"
55
- elif "WO_INSTANCE" in os.environ and "WO_API_KEY" in os.environ:
55
+ elif "WO_INSTANCE" in os.environ and ("WO_API_KEY" in os.environ or "WO_PASSWORD" in os.environ):
56
56
  provider = "model_proxy"
57
57
  else:
58
58
  logger.error(
@@ -23,6 +23,7 @@ from ibm_watsonx_orchestrate.client.connections import get_connections_client
23
23
  from ibm_watsonx_orchestrate.agent_builder.connections.types import ConnectionEnvironment
24
24
  from ibm_watsonx_orchestrate.cli.commands.connections.connections_controller import export_connection
25
25
  from ibm_watsonx_orchestrate.cli.commands.tools.tools_controller import ToolsController
26
+ from ibm_watsonx_orchestrate.utils.utils import sanitize_catalog_label
26
27
  from .types import *
27
28
 
28
29
  APPLICATIONS_FILE_VERSION = '1.16.0'
@@ -54,7 +55,7 @@ def get_tool_bindings(tool_names: list[str]) -> dict[str, dict]:
54
55
 
55
56
  return results
56
57
 
57
- def _patch_agent_yamls(project_root: Path, publisher_name: str):
58
+ def _patch_agent_yamls(project_root: Path, publisher_name: str, parent_agent_name: str):
58
59
  agents_dir = project_root / "agents"
59
60
  if not agents_dir.exists():
60
61
  return
@@ -70,15 +71,18 @@ def _patch_agent_yamls(project_root: Path, publisher_name: str):
70
71
  if "language_support" not in agent_data:
71
72
  agent_data["language_support"] = ["English"]
72
73
  if "icon" not in agent_data:
73
- agent_data["icon"] = "inline-svg-of-icon"
74
+ agent_data["icon"] = AGENT_CATALOG_ONLY_PLACEHOLDERS['icon']
74
75
  if "category" not in agent_data:
75
76
  agent_data["category"] = "agent"
76
77
  if "supported_apps" not in agent_data:
77
78
  agent_data["supported_apps"] = []
79
+ if "agent_role" not in agent_data:
80
+ agent_data["agent_role"] = "manager" if agent_data.get("name") == parent_agent_name else "collaborator"
78
81
 
79
82
  with open(agent_yaml, "w") as f:
80
83
  yaml.safe_dump(agent_data, f, sort_keys=False)
81
84
 
85
+
82
86
  def _create_applications_entry(connection_config: dict) -> dict:
83
87
  return {
84
88
  'app_id': connection_config.get('app_id'),
@@ -116,6 +120,15 @@ class PartnersOfferingController:
116
120
  sys.exit(1)
117
121
 
118
122
  def create(self, offering: str, publisher_name: str, agent_type: str, agent_name: str):
123
+
124
+ # Sanitize offering name
125
+ original_offering = offering
126
+ offering = sanitize_catalog_label(offering)
127
+
128
+ if offering != original_offering:
129
+ logger.warning("Offering name must contain only alpahnumeric characters or underscore")
130
+ logger.info(f"Offering '{original_offering}' has been updated to '{offering}'")
131
+
119
132
  # Create parent project folder
120
133
  project_root = self.root / offering
121
134
 
@@ -179,7 +192,7 @@ class PartnersOfferingController:
179
192
  output_zip.unlink(missing_ok=True)
180
193
 
181
194
  # Patch the agent yamls with publisher, tags, icon, etc.
182
- _patch_agent_yamls(project_root, publisher_name)
195
+ _patch_agent_yamls(project_root=project_root, publisher_name=publisher_name, parent_agent_name=agent_name)
183
196
 
184
197
 
185
198
  # Create offering.yaml file -------------------------------------------------------
@@ -337,12 +350,16 @@ class PartnersOfferingController:
337
350
  **agent_data
338
351
  )
339
352
  agent = Agent.model_validate(agent_details)
340
- AgentsController().persist_record(agent=agent)
341
353
  case AgentKind.EXTERNAL:
342
354
  agent_details = parse_create_external_args(
343
355
  **agent_data
344
356
  )
345
357
  agent = ExternalAgent.model_validate(agent_details)
358
+
359
+ # Placeholder detection
360
+ for label,placeholder in AGENT_CATALOG_ONLY_PLACEHOLDERS.items():
361
+ if agent_data.get(label) == placeholder:
362
+ logger.warning(f"Placeholder '{label}' detected for agent '{agent_name}', please ensure '{label}' is correct before packaging.")
346
363
 
347
364
  agent_json_path = f"{top_level_folder}/agents/{agent_name}/config.json"
348
365
  zf.writestr(agent_json_path, json.dumps(agent_data, indent=2))
@@ -24,6 +24,10 @@ CATALOG_ONLY_FIELDS = [
24
24
  'supported_apps'
25
25
  ]
26
26
 
27
+ AGENT_CATALOG_ONLY_PLACEHOLDERS = {
28
+ 'icon': "inline-svg-of-icon",
29
+ }
30
+
27
31
  class AgentKind(str, Enum):
28
32
  NATIVE = "native"
29
33
  EXTERNAL = "external"
@@ -87,21 +91,9 @@ class Offering(BaseModel):
87
91
  return values
88
92
 
89
93
  def validate_ready_for_packaging(self):
90
- self.test_for_placeholder_values()
91
-
92
- def test_for_placeholder_values(self):
93
- placholders = False
94
- # part numbers
95
- if not self.part_number:
96
- raise ValueError(f"Offering '{self.name}' does not have valid part numbers")
97
-
98
- for (k,v) in self.part_number.model_dump().items():
99
- if v == CATALOG_PLACEHOLDERS['part_number']:
100
- logger.warning(f"Placeholder part number detected for platform '{k}', please ensure valid part numbers are entered before packaging.")
101
- placholders = True
102
-
103
- if placholders:
104
- raise ValueError(f"Offering '{self.name}' cannot be packaged with placeholder values")
94
+ # Leaving this fn here in case we want to reintroduce validation
95
+ pass
96
+
105
97
 
106
98
 
107
99
 
@@ -11,7 +11,7 @@ import zipfile
11
11
  from enum import Enum
12
12
  from os import path
13
13
  from pathlib import Path
14
- from typing import Iterable, List
14
+ from typing import Iterable, List, cast
15
15
  import rich
16
16
  import json
17
17
  from rich.json import JSON
@@ -25,7 +25,7 @@ from rich.panel import Panel
25
25
 
26
26
  from ibm_watsonx_orchestrate.agent_builder.tools import BaseTool, ToolSpec
27
27
  from ibm_watsonx_orchestrate.agent_builder.tools.flow_tool import create_flow_json_tool
28
- from ibm_watsonx_orchestrate.agent_builder.tools.langflow_tool import create_langflow_tool
28
+ from ibm_watsonx_orchestrate.agent_builder.tools.langflow_tool import LangflowTool, create_langflow_tool
29
29
  from ibm_watsonx_orchestrate.agent_builder.tools.openapi_tool import create_openapi_json_tools_from_uri,create_openapi_json_tools_from_content
30
30
  from ibm_watsonx_orchestrate.cli.commands.models.models_controller import ModelHighlighter
31
31
  from ibm_watsonx_orchestrate.cli.commands.tools.types import RegistryType
@@ -33,7 +33,7 @@ from ibm_watsonx_orchestrate.cli.commands.connections.connections_controller imp
33
33
  from ibm_watsonx_orchestrate.agent_builder.connections.types import ConnectionType, ConnectionEnvironment, ConnectionPreference
34
34
  from ibm_watsonx_orchestrate.cli.config import Config, CONTEXT_SECTION_HEADER, CONTEXT_ACTIVE_ENV_OPT, \
35
35
  PYTHON_REGISTRY_HEADER, PYTHON_REGISTRY_TYPE_OPT, PYTHON_REGISTRY_TEST_PACKAGE_VERSION_OVERRIDE_OPT, \
36
- DEFAULT_CONFIG_FILE_CONTENT
36
+ DEFAULT_CONFIG_FILE_CONTENT, PYTHON_REGISTRY_SKIP_VERSION_CHECK_OPT
37
37
  from ibm_watsonx_orchestrate.agent_builder.connections import ConnectionSecurityScheme, ExpectedCredentials
38
38
  from ibm_watsonx_orchestrate.flow_builder.flows.decorators import FlowWrapper
39
39
  from ibm_watsonx_orchestrate.client.tools.tool_client import ToolClient
@@ -56,6 +56,11 @@ DEFAULT_LANGFLOW_TOOL_REQUIREMENTS = [
56
56
  "lfx==0.1.8"
57
57
  ]
58
58
 
59
+ DEFAULT_LANGFLOW_RUNNER_MODULES = [
60
+ "lfx",
61
+ "lfx-nightly"
62
+ ]
63
+
59
64
  class ToolKind(str, Enum):
60
65
  openapi = "openapi"
61
66
  python = "python"
@@ -851,15 +856,18 @@ class ToolsController:
851
856
 
852
857
  cfg = Config()
853
858
  registry_type = cfg.read(PYTHON_REGISTRY_HEADER, PYTHON_REGISTRY_TYPE_OPT) or DEFAULT_CONFIG_FILE_CONTENT[PYTHON_REGISTRY_HEADER][PYTHON_REGISTRY_TYPE_OPT]
859
+ skip_version_check = cfg.read(PYTHON_REGISTRY_HEADER, PYTHON_REGISTRY_SKIP_VERSION_CHECK_OPT) or DEFAULT_CONFIG_FILE_CONTENT[PYTHON_REGISTRY_HEADER][PYTHON_REGISTRY_SKIP_VERSION_CHECK_OPT]
854
860
 
855
861
  version = __version__
856
862
  if registry_type == RegistryType.LOCAL:
863
+ logger.warning(f"Using a local registry which is for development purposes only")
857
864
  requirements.append(f"/packages/ibm_watsonx_orchestrate-0.6.0-py3-none-any.whl\n")
858
865
  elif registry_type == RegistryType.PYPI:
859
- wheel_file = get_whl_in_registry(registry_url='https://pypi.org/simple/ibm-watsonx-orchestrate', version=version)
860
- if not wheel_file:
861
- logger.error(f"Could not find ibm-watsonx-orchestrate@{version} on https://pypi.org/project/ibm-watsonx-orchestrate")
862
- exit(1)
866
+ if not skip_version_check:
867
+ wheel_file = get_whl_in_registry(registry_url='https://pypi.org/simple/ibm-watsonx-orchestrate', version=version)
868
+ if not wheel_file:
869
+ logger.error(f"Could not find ibm-watsonx-orchestrate@{version} on https://pypi.org/project/ibm-watsonx-orchestrate")
870
+ exit(1)
863
871
  requirements.append(f"ibm-watsonx-orchestrate=={version}\n")
864
872
  elif registry_type == RegistryType.TESTPYPI:
865
873
  override_version = cfg.get(PYTHON_REGISTRY_HEADER, PYTHON_REGISTRY_TEST_PACKAGE_VERSION_OVERRIDE_OPT) or version
@@ -890,13 +898,34 @@ class ToolsController:
890
898
  tool_path = Path(self.file)
891
899
  zip_tool_artifacts.write(tool_path, arcname=f"{tool_path.stem}.json")
892
900
 
893
- requirements = DEFAULT_LANGFLOW_TOOL_REQUIREMENTS
901
+ requirements = []
894
902
 
895
903
  if self.requirements_file:
896
904
  requirements_file_path = Path(self.requirements_file)
897
905
  requirements.extend(
898
906
  get_requirement_lines(requirements_file=requirements_file_path, remove_trailing_newlines=False)
899
907
  )
908
+
909
+ langflowTool = cast(LangflowTool, tool)
910
+ # if there are additional requriements from the langflow model, we should add it to the requirement set
911
+ if langflowTool.requirements and len(langflowTool.requirements) > 0:
912
+ requirements.extend(langflowTool.requirements)
913
+
914
+ # now check if the requirements contain modules listed in DEFAULT_LANGFLOW_RUNNER_MODULES
915
+ # if it is needed, we are assuming the user wants to override the default langflow module
916
+ # with a specific version
917
+ runner_overridden = False
918
+ for r in requirements:
919
+ # get the module name from the requirements
920
+ module_name = r.strip().split('==')[0].split('=')[0].split('>=')[0].split('<=')[0].split('~=')[0].lower()
921
+ if not module_name.startswith('#'):
922
+ if module_name in DEFAULT_LANGFLOW_RUNNER_MODULES:
923
+ runner_overridden = True
924
+
925
+ if not runner_overridden:
926
+ # add the default runner to the top of requirement list
927
+ requirements = DEFAULT_LANGFLOW_TOOL_REQUIREMENTS + list(requirements)
928
+
900
929
  requirements_content = '\n'.join(requirements) + '\n'
901
930
  zip_tool_artifacts.writestr("requirements.txt",requirements_content)
902
931
  zip_tool_artifacts.writestr("bundle-format", "2.0.0\n")
@@ -22,6 +22,7 @@ AUTH_MCSP_TOKEN_OPT = "wxo_mcsp_token"
22
22
  AUTH_MCSP_TOKEN_EXPIRY_OPT = "wxo_mcsp_token_expiry"
23
23
  CONTEXT_ACTIVE_ENV_OPT = "active_environment"
24
24
  PYTHON_REGISTRY_TYPE_OPT = "type"
25
+ PYTHON_REGISTRY_SKIP_VERSION_CHECK_OPT = "skip_version_check"
25
26
  PYTHON_REGISTRY_TEST_PACKAGE_VERSION_OVERRIDE_OPT = "test_package_version_override"
26
27
  ENV_WXO_URL_OPT = "wxo_url"
27
28
  ENV_IAM_URL_OPT = "iam_url"
@@ -40,7 +41,8 @@ DEFAULT_CONFIG_FILE_CONTENT = {
40
41
  CONTEXT_SECTION_HEADER: {CONTEXT_ACTIVE_ENV_OPT: None},
41
42
  PYTHON_REGISTRY_HEADER: {
42
43
  PYTHON_REGISTRY_TYPE_OPT: str(RegistryType.PYPI),
43
- PYTHON_REGISTRY_TEST_PACKAGE_VERSION_OVERRIDE_OPT: None
44
+ PYTHON_REGISTRY_TEST_PACKAGE_VERSION_OVERRIDE_OPT: None,
45
+ PYTHON_REGISTRY_SKIP_VERSION_CHECK_OPT: False
44
46
  },
45
47
  ENVIRONMENTS_SECTION_HEADER: {
46
48
  PROTECTED_ENV_NAME: {
@@ -58,16 +58,16 @@ REGISTRY_URL=
58
58
 
59
59
 
60
60
 
61
- SERVER_TAG=17-10-2025-8a9aff2
61
+ SERVER_TAG=24-09-2025-17d7c67
62
62
  SERVER_REGISTRY=
63
63
 
64
- WORKER_TAG=17-10-2025-8a9aff2
64
+ WORKER_TAG=24-09-2025-17d7c67
65
65
  WORKER_REGISTRY=
66
66
 
67
67
  AI_GATEWAY_TAG=20-08-2025-9ed6d40
68
68
  AI_GATEWAY_REGISTRY=
69
69
 
70
- AGENT_GATEWAY_TAG=16-09-2025-115ef29
70
+ AGENT_GATEWAY_TAG=19-10-2025-e48ad3a
71
71
  AGENT_GATEWAY_REGISTRY=
72
72
 
73
73
  DB_REGISTRY=
@@ -78,7 +78,7 @@ AMDDBTAG=17-09-2025-8a9aff2
78
78
  ARM64DBTAG=17-09-2025-8a9aff2
79
79
 
80
80
  UI_REGISTRY=
81
- UITAG=19-09-2025-188b5fe
81
+ UITAG=22-09-2025-e35f498
82
82
 
83
83
  CM_REGISTRY=
84
84
  CM_TAG=16-09-2025-e33b344
@@ -86,16 +86,16 @@ CM_TAG=16-09-2025-e33b344
86
86
  CONNECTIONS_UI_REGISTRY=
87
87
  CONNECTIONS_UI_TAG=15-09-2025-98aa9da
88
88
 
89
- TRM_TAG=15-09-2025-228f397
89
+ TRM_TAG=16-09-2025-cb6b9df
90
90
  TRM_REGISTRY=
91
91
 
92
- TR_TAG=15-09-2025-228f397
92
+ TR_TAG=24-09-2025-a515038
93
93
  TR_REGISTRY=
94
94
 
95
- BUILDER_TAG=19-09-2025-4ab5c88
95
+ BUILDER_TAG=24-09-2025-f9b68d8
96
96
  BUILDER_REGISTRY=
97
97
 
98
- FLOW_RUNTIME_TAG=15-09-2025-c208dc5
98
+ FLOW_RUNTIME_TAG=22-09-2025-0bd3f58
99
99
  FLOW_RUMTIME_REGISTRY=
100
100
 
101
101
 
@@ -114,7 +114,7 @@ CPE_REGISTRY=
114
114
  VOICE_CONTROLLER_TAG=12-09-2025-0e04772
115
115
  VOICE_CONTROLLER_REGISTRY=
116
116
 
117
- LANGFLOW_TAG=
117
+ LANGFLOW_TAG=1.5.0.post2
118
118
  LANGFLOW_IMAGE=
119
119
 
120
120
  # IBM Document Processing
@@ -35,6 +35,7 @@ def flow(*args,
35
35
  description: str|None=None,
36
36
  input_schema: type[BaseModel] | None = None,
37
37
  output_schema: type[BaseModel] | None = None,
38
+ private_schema: type[BaseModel] | None = None,
38
39
  initiators: Sequence[str] = (),
39
40
  schedulable: bool = False,
40
41
  llm_model: str|ListVirtualModel|None=None,
@@ -63,6 +64,7 @@ def flow(*args,
63
64
  description = node_spec.description,
64
65
  input_schema = input_schema,
65
66
  output_schema = output_schema,
67
+ private_schema = private_schema,
66
68
  initiators = initiators,
67
69
  schedulable = schedulable,
68
70
  llm_model = llm_model,
@@ -26,13 +26,13 @@ from ibm_watsonx_orchestrate.client.tools.tool_client import ToolClient
26
26
  from ibm_watsonx_orchestrate.client.tools.tempus_client import TempusClient
27
27
  from ibm_watsonx_orchestrate.client.utils import instantiate_client
28
28
  from ..types import (
29
- DocProcKVPSchema, Assignment, Conditions, EndNodeSpec, Expression, ForeachPolicy, ForeachSpec, LoopSpec, BranchNodeSpec, MatchPolicy, NodeIdCondition, PlainTextReadingOrder, PromptExample, PromptLLMParameters, PromptNodeSpec, TimerNodeSpec,
29
+ DocProcKVPSchema, Assignment, Conditions, EndNodeSpec, Expression, ForeachPolicy, ForeachSpec, LoopSpec, BranchNodeSpec, MatchPolicy, NodeIdCondition, PlainTextReadingOrder, PromptExample, PromptLLMParameters, PromptNodeSpec, ScriptNodeSpec, TimerNodeSpec,
30
30
  StartNodeSpec, ToolSpec, JsonSchemaObject, ToolRequestBody, ToolResponseBody, UserFieldKind, UserFieldOption, UserFlowSpec, UserNodeSpec, WaitPolicy,
31
31
  DocProcSpec, TextExtractionResponse, DocProcInput, DecisionsNodeSpec, DecisionsRule, DocExtSpec, File, DocumentClassificationResponse, DocClassifierSpec, DocumentProcessingCommonInput
32
32
  )
33
33
  from .constants import CURRENT_USER, START, END, ANY_USER
34
34
  from ..node import (
35
- EndNode, Node, PromptNode, StartNode, UserNode, AgentNode, DataMap, ToolNode, DocProcNode, DecisionsNode, DocExtNode, DocClassifierNode
35
+ EndNode, Node, PromptNode, ScriptNode, StartNode, UserNode, AgentNode, DataMap, ToolNode, DocProcNode, DecisionsNode, DocExtNode, DocClassifierNode
36
36
  )
37
37
  from ..types import (
38
38
  AgentNodeSpec, extract_node_spec, FlowContext, FlowEventType, FlowEvent, FlowSpec,
@@ -357,6 +357,41 @@ class Flow(Node):
357
357
 
358
358
  node = self._add_node(node)
359
359
  return cast(ToolNode, node)
360
+
361
+
362
+ def script(
363
+ self,
364
+ script: str | None = "",
365
+ name: str | None = None,
366
+ display_name: str | None = None,
367
+ description: str | None = None,
368
+ input_schema: type[BaseModel] | None = None,
369
+ output_schema: type[BaseModel] | None = None,
370
+ input_map: DataMap = None
371
+ ) -> ScriptNode:
372
+ '''create a script node in the flow'''
373
+ name = name if name is not None and name != "" else ""
374
+
375
+ input_schema_obj = _get_json_schema_obj("input", input_schema)
376
+ output_schema_obj = _get_json_schema_obj("output", output_schema)
377
+
378
+ script_node_spec = ScriptNodeSpec(
379
+ name = name,
380
+ display_name = display_name,
381
+ description = description,
382
+ input_schema= _get_tool_request_body(input_schema_obj),
383
+ output_schema= _get_tool_response_body(output_schema_obj),
384
+ output_schema_object = output_schema_obj,
385
+ fn = script)
386
+
387
+ node = ScriptNode(spec=script_node_spec)
388
+
389
+ # setup input and output map
390
+ if input_map:
391
+ node.input_map = self._get_data_map(input_map)
392
+
393
+ node = self._add_node(node)
394
+ return cast(ScriptNode, node)
360
395
 
361
396
 
362
397
  def _add_node(self, node: Node) -> Node:
@@ -1245,6 +1280,7 @@ class FlowFactory(BaseModel):
1245
1280
  initiators: Sequence[str]|None=None,
1246
1281
  input_schema: type[BaseModel]|None=None,
1247
1282
  output_schema: type[BaseModel]|None=None,
1283
+ private_schema: type[BaseModel]|None=None,
1248
1284
  schedulable: bool=False,
1249
1285
  llm_model: str|ListVirtualModel|None=None,
1250
1286
  agent_conversation_memory_turns_limit: int|None = None) -> Flow:
@@ -1257,6 +1293,7 @@ class FlowFactory(BaseModel):
1257
1293
  input_schema_obj = _get_json_schema_obj(parameter_name = "input", type_def = input_schema)
1258
1294
  # create input spec
1259
1295
  output_schema_obj = _get_json_schema_obj("output", output_schema)
1296
+ private_schema_obj = _get_json_schema_obj("private", private_schema)
1260
1297
  if initiators is None:
1261
1298
  initiators = []
1262
1299
 
@@ -1268,6 +1305,7 @@ class FlowFactory(BaseModel):
1268
1305
  initiators=initiators,
1269
1306
  input_schema=_get_tool_request_body(input_schema_obj),
1270
1307
  output_schema=_get_tool_response_body(output_schema_obj),
1308
+ private_schema = private_schema_obj,
1271
1309
  output_schema_object = output_schema_obj,
1272
1310
  schedulable=schedulable,
1273
1311
  )
@@ -6,7 +6,7 @@ import yaml
6
6
  from pydantic import BaseModel, Field, SerializeAsAny, create_model
7
7
  from enum import Enum
8
8
 
9
- from .types import Assignment, DocExtConfigField, EndNodeSpec, NodeSpec, AgentNodeSpec, PromptNodeSpec, TimerNodeSpec, StartNodeSpec, ToolNodeSpec, UserFieldKind, UserFieldOption, UserNodeSpec, DocProcSpec, \
9
+ from .types import Assignment, DocExtConfigField, EndNodeSpec, NodeSpec, AgentNodeSpec, PromptNodeSpec, ScriptNodeSpec, TimerNodeSpec, StartNodeSpec, ToolNodeSpec, UserFieldKind, UserFieldOption, UserNodeSpec, DocProcSpec, \
10
10
  DocExtSpec, DocExtConfig, DocClassifierSpec, DecisionsNodeSpec, DocClassifierConfig
11
11
 
12
12
  from .data_map import DataMap
@@ -132,6 +132,18 @@ class ToolNode(Node):
132
132
 
133
133
  def get_spec(self) -> ToolNodeSpec:
134
134
  return cast(ToolNodeSpec, self.spec)
135
+
136
+
137
+ class ScriptNode(Node):
138
+ def __repr__(self):
139
+ return f"ScriptNode(name='{self.spec.name}', description='{self.spec.description}')"
140
+
141
+ def get_spec(self) -> ScriptNodeSpec:
142
+ return cast(ScriptNodeSpec, self.spec)
143
+
144
+ def updateScript(self, script: str):
145
+ '''Update the script of a script node'''
146
+ self.spec.fn = script
135
147
 
136
148
  class UserNode(Node):
137
149
  def __repr__(self):
@@ -389,6 +389,19 @@ class ToolNodeSpec(NodeSpec):
389
389
  else:
390
390
  model_spec["tool"] = self.tool
391
391
  return model_spec
392
+
393
+ class ScriptNodeSpec(NodeSpec):
394
+ fn: str = Field(default = None, description="the script to execute")
395
+
396
+ def __init__(self, **data):
397
+ super().__init__(**data)
398
+ self.kind = "script"
399
+
400
+ def to_json(self) -> dict[str, Any]:
401
+ model_spec = super().to_json()
402
+ if self.fn:
403
+ model_spec["fn"] = self.fn
404
+ return model_spec
392
405
 
393
406
 
394
407
  class UserFieldValue(BaseModel):
@@ -871,6 +884,9 @@ class FlowSpec(NodeSpec):
871
884
  initiators: Sequence[str] = [ANY_USER]
872
885
  schedulable: bool = False
873
886
 
887
+ # flow can have private schema
888
+ private_schema: JsonSchemaObject | SchemaRef | None = None
889
+
874
890
  def __init__(self, **kwargs):
875
891
  super().__init__(**kwargs)
876
892
  self.kind = "flow"
@@ -879,6 +895,8 @@ class FlowSpec(NodeSpec):
879
895
  model_spec = super().to_json()
880
896
  if self.initiators:
881
897
  model_spec["initiators"] = self.initiators
898
+ if self.private_schema:
899
+ model_spec["private_schema"] = _to_json_from_json_schema(self.private_schema)
882
900
 
883
901
  model_spec["schedulable"] = self.schedulable
884
902