mirror of
https://github.com/lingble/chatwoot.git
synced 2025-11-02 12:08:01 +00:00
To test this out, use the following PR: https://github.com/chatwoot/chatwoot/pull/12585 --------- Co-authored-by: Pranav <pranavrajs@gmail.com>
74 lines
2.2 KiB
Ruby
74 lines
2.2 KiB
Ruby
class Api::V1::Accounts::Captain::AssistantsController < Api::V1::Accounts::BaseController
|
|
before_action :current_account
|
|
before_action -> { check_authorization(Captain::Assistant) }
|
|
|
|
before_action :set_assistant, only: [:show, :update, :destroy, :playground]
|
|
|
|
def index
|
|
@assistants = account_assistants.ordered
|
|
end
|
|
|
|
def show; end
|
|
|
|
def create
|
|
@assistant = account_assistants.create!(assistant_params)
|
|
end
|
|
|
|
def update
|
|
@assistant.update!(assistant_params)
|
|
end
|
|
|
|
def destroy
|
|
@assistant.destroy
|
|
head :no_content
|
|
end
|
|
|
|
def playground
|
|
response = Captain::Llm::AssistantChatService.new(assistant: @assistant).generate_response(
|
|
additional_message: params[:message_content],
|
|
message_history: message_history
|
|
)
|
|
|
|
render json: response
|
|
end
|
|
|
|
def tools
|
|
assistant = Captain::Assistant.new(account: Current.account)
|
|
@tools = assistant.available_agent_tools
|
|
end
|
|
|
|
private
|
|
|
|
def set_assistant
|
|
@assistant = account_assistants.find(params[:id])
|
|
end
|
|
|
|
def account_assistants
|
|
@account_assistants ||= Captain::Assistant.for_account(Current.account.id)
|
|
end
|
|
|
|
def assistant_params
|
|
permitted = params.require(:assistant).permit(:name, :description,
|
|
config: [
|
|
:product_name, :feature_faq, :feature_memory, :feature_citation,
|
|
:welcome_message, :handoff_message, :resolution_message,
|
|
:instructions, :temperature
|
|
])
|
|
|
|
# Handle array parameters separately to allow partial updates
|
|
permitted[:response_guidelines] = params[:assistant][:response_guidelines] if params[:assistant].key?(:response_guidelines)
|
|
|
|
permitted[:guardrails] = params[:assistant][:guardrails] if params[:assistant].key?(:guardrails)
|
|
|
|
permitted
|
|
end
|
|
|
|
def playground_params
|
|
params.require(:assistant).permit(:message_content, message_history: [:role, :content])
|
|
end
|
|
|
|
def message_history
|
|
(playground_params[:message_history] || []).map { |message| { role: message[:role], content: message[:content] } }
|
|
end
|
|
end
|