57 lines
1.6 KiB
Ruby
57 lines
1.6 KiB
Ruby
class Api::V1::Accounts::Captain::ToolsController < Api::V1::Accounts::BaseController
|
|
before_action :current_account
|
|
before_action :set_assistant
|
|
|
|
def index
|
|
# List all available tools and their config for this assistant
|
|
# We first get the static definitions, then merge with DB configs
|
|
|
|
available_definitions = Captain::Tools::Definitions::ALL
|
|
|
|
db_configs = Captain::ToolConfig.where(captain_assistant_id: @assistant.id).index_by(&:tool_key)
|
|
|
|
@tools = available_definitions.map do |key, defn|
|
|
config = db_configs[key]
|
|
{
|
|
key: key,
|
|
name: defn[:name],
|
|
description: defn[:description],
|
|
enabled: config&.is_enabled || false,
|
|
webhook_url: config&.webhook_url,
|
|
plug_play_id: config&.plug_play_id,
|
|
plug_play_token: config&.plug_play_token,
|
|
fallback_message: config&.fallback_message
|
|
}
|
|
end
|
|
|
|
render json: @tools
|
|
end
|
|
|
|
def update
|
|
tool_key = params[:id]
|
|
config = Captain::ToolConfig.find_or_initialize_by(
|
|
account_id: current_account.id,
|
|
captain_assistant_id: @assistant.id,
|
|
tool_key: tool_key
|
|
)
|
|
|
|
config.is_enabled = params[:enabled]
|
|
config.webhook_url = params[:webhook_url]
|
|
config.plug_play_id = params[:plug_play_id]
|
|
config.plug_play_token = params[:plug_play_token]
|
|
config.fallback_message = params[:fallback_message]
|
|
|
|
if config.save
|
|
render json: config
|
|
else
|
|
render_error_response(config.errors.full_messages.join(','), :unprocessable_entity)
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def set_assistant
|
|
@assistant = Captain::Assistant.find(params[:assistant_id])
|
|
end
|
|
end
|