diff --git a/enterprise/app/controllers/api/v1/accounts/captain/assistants_controller.rb b/enterprise/app/controllers/api/v1/accounts/captain/assistants_controller.rb index ebeaaf67f..154844a03 100644 --- a/enterprise/app/controllers/api/v1/accounts/captain/assistants_controller.rb +++ b/enterprise/app/controllers/api/v1/accounts/captain/assistants_controller.rb @@ -51,6 +51,7 @@ class Api::V1::Accounts::Captain::AssistantsController < Api::V1::Accounts::Base permitted = params.require(:assistant).permit(:name, :description, config: [ :product_name, :feature_faq, :feature_memory, :feature_citation, + :feature_document_faq_generation, :welcome_message, :handoff_message, :resolution_message, :instructions, :temperature ]) diff --git a/enterprise/app/models/captain/assistant.rb b/enterprise/app/models/captain/assistant.rb index 6e1d8108d..7ac0db100 100644 --- a/enterprise/app/models/captain/assistant.rb +++ b/enterprise/app/models/captain/assistant.rb @@ -37,7 +37,7 @@ class Captain::Assistant < ApplicationRecord has_many :copilot_threads, dependent: :destroy_async has_many :scenarios, class_name: 'Captain::Scenario', dependent: :destroy_async - store_accessor :config, :temperature, :feature_faq, :feature_memory, :product_name + store_accessor :config, :temperature, :feature_faq, :feature_memory, :feature_document_faq_generation, :product_name validates :name, presence: true validates :description, presence: true diff --git a/enterprise/app/models/captain/document.rb b/enterprise/app/models/captain/document.rb index f9fc62d79..ead5cb236 100644 --- a/enterprise/app/models/captain/document.rb +++ b/enterprise/app/models/captain/document.rb @@ -126,6 +126,7 @@ class Captain::Document < ApplicationRecord def should_enqueue_response_builder? return false if destroyed? return false unless available? + return false unless document_faq_generation_enabled? return saved_change_to_status? if pdf_document? @@ -146,6 +147,11 @@ class Captain::Document < ApplicationRecord ActiveModel::Type::Boolean.new.cast(value) end + def document_faq_generation_enabled? + value = assistant&.config&.fetch('feature_document_faq_generation', true) + ActiveModel::Type::Boolean.new.cast(value) + end + def update_document_usage account.update_document_usage end diff --git a/spec/enterprise/controllers/api/v1/accounts/captain/assistants_controller_spec.rb b/spec/enterprise/controllers/api/v1/accounts/captain/assistants_controller_spec.rb index 24deb98dd..6ecce3fed 100644 --- a/spec/enterprise/controllers/api/v1/accounts/captain/assistants_controller_spec.rb +++ b/spec/enterprise/controllers/api/v1/accounts/captain/assistants_controller_spec.rb @@ -69,7 +69,8 @@ RSpec.describe 'Api::V1::Accounts::Captain::Assistants', type: :request do product_name: 'Chatwoot', feature_faq: true, feature_memory: false, - feature_citation: true + feature_citation: true, + feature_document_faq_generation: false } } } @@ -111,6 +112,18 @@ RSpec.describe 'Api::V1::Accounts::Captain::Assistants', type: :request do expect(response).to have_http_status(:success) end + it 'creates an assistant with feature_document_faq_generation disabled' do + expect do + post "/api/v1/accounts/#{account.id}/captain/assistants", + params: valid_attributes, + headers: admin.create_new_auth_token, + as: :json + end.to change(Captain::Assistant, :count).by(1) + + expect(response).to have_http_status(:success) + expect(json_response[:config][:feature_document_faq_generation]).to be(false) + end + it 'creates an assistant with feature_citation disabled' do attributes_with_disabled_citation = valid_attributes.deep_dup attributes_with_disabled_citation[:assistant][:config][:feature_citation] = false @@ -216,6 +229,18 @@ RSpec.describe 'Api::V1::Accounts::Captain::Assistants', type: :request do expect(response).to have_http_status(:success) expect(json_response[:config][:feature_citation]).to be(false) end + + it 'updates feature_document_faq_generation config' do + assistant.update!(config: { 'feature_document_faq_generation' => true }) + + patch "/api/v1/accounts/#{account.id}/captain/assistants/#{assistant.id}", + params: { assistant: { config: { feature_document_faq_generation: false } } }, + headers: admin.create_new_auth_token, + as: :json + + expect(response).to have_http_status(:success) + expect(json_response[:config][:feature_document_faq_generation]).to be(false) + end end end diff --git a/spec/enterprise/models/captain/document_spec.rb b/spec/enterprise/models/captain/document_spec.rb index a27ad8c1d..ba5e5af0d 100644 --- a/spec/enterprise/models/captain/document_spec.rb +++ b/spec/enterprise/models/captain/document_spec.rb @@ -193,6 +193,14 @@ RSpec.describe Captain::Document, type: :model do document.update!(metadata: { 'title' => 'Updated' }) end.not_to have_enqueued_job(Captain::Documents::ResponseBuilderJob) end + + it 'does not enqueue when document FAQ generation is disabled for the assistant' do + assistant.update!(config: (assistant.config || {}).merge('feature_document_faq_generation' => false)) + + expect do + create(:captain_document, assistant: assistant, account: account, status: :available, content: 'Doc content') + end.not_to have_enqueued_job(Captain::Documents::ResponseBuilderJob) + end end describe 'PDF documents' do