feat(captain): add assistant-level document faq toggle

This commit is contained in:
aakashb95
2026-02-19 15:44:16 +05:30
parent 0c03c2bb4d
commit 1f352b8143
5 changed files with 42 additions and 2 deletions
@@ -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
])
+1 -1
View File
@@ -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
@@ -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
@@ -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
@@ -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