From 89b05138af9569a768165258ca39004a90673cca Mon Sep 17 00:00:00 2001 From: aakashb95 Date: Mon, 4 May 2026 12:13:18 +0530 Subject: [PATCH] fix(captain): log specific error handoff reason --- .../app/jobs/captain/conversation/response_builder_job.rb | 8 +++++++- .../captain/conversation/response_builder_job_spec.rb | 2 ++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/enterprise/app/jobs/captain/conversation/response_builder_job.rb b/enterprise/app/jobs/captain/conversation/response_builder_job.rb index 136b2c14f..7e5203077 100644 --- a/enterprise/app/jobs/captain/conversation/response_builder_job.rb +++ b/enterprise/app/jobs/captain/conversation/response_builder_job.rb @@ -179,7 +179,9 @@ class Captain::Conversation::ResponseBuilderJob < ApplicationJob def handle_error(error) log_error(error) - @response ||= { 'action_source' => 'error', 'action_reason' => 'response_builder_error' } + @response ||= {} + @response['action_source'] ||= 'error' + @response['action_reason'] ||= error_action_reason(error) process_v1_handoff if conversation_pending? true end @@ -188,6 +190,10 @@ class Captain::Conversation::ResponseBuilderJob < ApplicationJob ChatwootExceptionTracker.new(error, account: account).capture_exception end + def error_action_reason(error) + error.class.name.underscore.tr('/', '_') + end + def captain_v2_enabled? account.feature_enabled?('captain_integration_v2') end diff --git a/spec/enterprise/jobs/captain/conversation/response_builder_job_spec.rb b/spec/enterprise/jobs/captain/conversation/response_builder_job_spec.rb index 23dcaccdf..5760aeaa0 100644 --- a/spec/enterprise/jobs/captain/conversation/response_builder_job_spec.rb +++ b/spec/enterprise/jobs/captain/conversation/response_builder_job_spec.rb @@ -398,9 +398,11 @@ RSpec.describe Captain::Conversation::ResponseBuilderJob, type: :job do it 'handles API errors and triggers handoff' do allow(mock_llm_chat_service).to receive(:generate_response) .and_raise(Faraday::BadRequestError, 'Bad request to image service') + allow(Rails.logger).to receive(:info).and_call_original described_class.perform_now(conversation, assistant) expect(conversation.reload.status).to eq('open') + expect(Rails.logger).to have_received(:info).with(include('source=error reason=faraday_bad_request_error')) end it 'succeeds when no error occurs' do