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.
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/PKG-INFO +1 -1
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/__init__.py +1 -1
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/agent_builder/connections/__init__.py +1 -1
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/agent_builder/connections/connections.py +1 -1
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/agent_builder/connections/types.py +16 -12
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/agent_builder/knowledge_bases/types.py +47 -3
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/agent_builder/toolkits/types.py +18 -15
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/agent_builder/tools/types.py +1 -1
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/commands/connections/connections_command.py +7 -7
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/commands/connections/connections_controller.py +36 -26
- {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
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/commands/server/server_command.py +95 -14
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/commands/toolkit/toolkit_command.py +43 -10
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/commands/toolkit/toolkit_controller.py +52 -25
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/client/connections/connections_client.py +4 -3
- {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
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/docker/compose-lite.yml +48 -13
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/docker/default.env +18 -13
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/flow_builder/flows/__init__.py +2 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/flow_builder/flows/flow.py +91 -12
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/flow_builder/node.py +39 -15
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/flow_builder/types.py +114 -25
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/run/connections.py +2 -2
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/.gitignore +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/LICENSE +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/pyproject.toml +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/agent_builder/__init__.py +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/agent_builder/agents/__init__.py +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/agent_builder/agents/agent.py +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/agent_builder/agents/assistant_agent.py +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/agent_builder/agents/external_agent.py +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/agent_builder/agents/types.py +0 -0
- {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
- {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
- {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
- {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
- {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
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/agent_builder/model_policies/__init__.py +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/agent_builder/model_policies/types.py +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/agent_builder/models/__init__.py +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/agent_builder/models/types.py +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/agent_builder/toolkits/base_toolkit.py +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/agent_builder/tools/__init__.py +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/agent_builder/tools/base_tool.py +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/agent_builder/tools/flow_tool.py +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/agent_builder/tools/openapi_tool.py +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/agent_builder/tools/python_tool.py +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/agent_builder/utils/__init__.py +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/agent_builder/voice_configurations/__init__.py +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/agent_builder/voice_configurations/types.py +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/__init__.py +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/commands/__init__.py +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/commands/agents/agents_command.py +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/commands/agents/agents_controller.py +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/commands/channels/channels_command.py +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/commands/channels/channels_controller.py +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/commands/channels/types.py +0 -0
- {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
- {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
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/commands/chat/chat_command.py +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/commands/copilot/copilot_command.py +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/commands/copilot/copilot_controller.py +0 -0
- {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
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/commands/environment/environment_command.py +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/commands/environment/environment_controller.py +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/commands/environment/types.py +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/commands/evaluations/evaluations_command.py +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/commands/evaluations/evaluations_controller.py +0 -0
- {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
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/commands/login/login_command.py +0 -0
- {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
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/commands/models/models_command.py +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/commands/models/models_controller.py +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/commands/server/types.py +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/commands/settings/__init__.py +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/commands/settings/observability/__init__.py +0 -0
- {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
- {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
- {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
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/commands/settings/settings_command.py +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/commands/tools/tools_command.py +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/commands/tools/tools_controller.py +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/commands/tools/types.py +0 -0
- {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
- {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
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/config.py +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/init_helper.py +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/cli/main.py +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/client/__init__.py +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/client/agents/agent_client.py +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/client/agents/assistant_agent_client.py +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/client/agents/external_agent_client.py +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/client/analytics/__init__.py +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/client/analytics/llm/__init__.py +0 -0
- {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
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/client/base_api_client.py +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/client/base_service_instance.py +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/client/client.py +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/client/client_errors.py +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/client/connections/__init__.py +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/client/connections/utils.py +0 -0
- {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
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/client/credentials.py +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/client/local_service_instance.py +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/client/model_policies/__init__.py +0 -0
- {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
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/client/models/__init__.py +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/client/models/models_client.py +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/client/service_instance.py +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/client/toolkit/toolkit_client.py +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/client/tools/tempus_client.py +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/client/tools/tool_client.py +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/client/utils.py +0 -0
- {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
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/docker/proxy-config-single.yaml +0 -0
- {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
- {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
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/docker/start-up.sh +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/docker/tempus/common-config.yaml +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/flow_builder/__init__.py +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/flow_builder/data_map.py +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/flow_builder/flows/constants.py +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/flow_builder/flows/decorators.py +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/flow_builder/flows/events.py +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/flow_builder/utils.py +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/run/__init__.py +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/utils/__init__.py +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/utils/exceptions.py +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/utils/logging/__init__.py +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/utils/logging/logger.py +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/utils/logging/logging.yaml +0 -0
- {ibm_watsonx_orchestrate-1.10.0b0 → ibm_watsonx_orchestrate-1.10.0b1}/src/ibm_watsonx_orchestrate/utils/utils.py +0 -0
@@ -18,7 +18,7 @@ from .types import (
|
|
18
18
|
OAuth2AuthCodeCredentials,
|
19
19
|
OAuth2ClientCredentials,
|
20
20
|
# OAuth2ImplicitCredentials,
|
21
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
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
|
19
|
-
source:
|
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
|
@@ -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
|
-
|
22
|
+
OAuth2AuthCodeCredentials,
|
23
23
|
OAuth2ClientCredentials,
|
24
24
|
# OAuth2ImplicitCredentials,
|
25
|
-
|
25
|
+
OAuth2PasswordCredentials,
|
26
26
|
OAuthOnBehalfOfCredentials,
|
27
27
|
KeyValueConnectionCredentials,
|
28
28
|
CREDENTIALS,
|
29
29
|
IdentityProviderCredentials,
|
30
|
-
OAUTH_CONNECTION_TYPES
|
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
|
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
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
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
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
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
|
-
|
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(
|
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 = [(
|
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
|
-
|
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
|
-
|
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
|
155
|
-
filename = get_file_name(
|
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 = [(
|
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
|
-
|
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
|
-
|
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
|
|