diff --git a/enterprise/app/jobs/captain/conversation/response_builder_job.rb b/enterprise/app/jobs/captain/conversation/response_builder_job.rb index 53f134b15..eb62a9a38 100644 --- a/enterprise/app/jobs/captain/conversation/response_builder_job.rb +++ b/enterprise/app/jobs/captain/conversation/response_builder_job.rb @@ -1,5 +1,6 @@ class Captain::Conversation::ResponseBuilderJob < ApplicationJob MAX_MESSAGE_LENGTH = 10_000 + retry_on ActiveStorage::FileNotFoundError, attempts: 3 def perform(conversation, assistant) @conversation = conversation @@ -12,6 +13,8 @@ class Captain::Conversation::ResponseBuilderJob < ApplicationJob generate_and_process_response end rescue StandardError => e + raise e if e.is_a?(ActiveJob::FileNotFoundError) + handle_error(e) ensure Current.executed_by = nil diff --git a/enterprise/app/jobs/messages/audio_transcription_job.rb b/enterprise/app/jobs/messages/audio_transcription_job.rb index a598cfafb..ce35405c8 100644 --- a/enterprise/app/jobs/messages/audio_transcription_job.rb +++ b/enterprise/app/jobs/messages/audio_transcription_job.rb @@ -1,13 +1,12 @@ class Messages::AudioTranscriptionJob < ApplicationJob queue_as :low + retry_on ActiveStorage::FileNotFoundError, wait: 2.seconds, attempts: 3 + def perform(attachment_id) attachment = Attachment.find_by(id: attachment_id) return if attachment.blank? Messages::AudioTranscriptionService.new(attachment).perform - rescue StandardError => e - Rails.logger.error "Error in AudioTranscriptionJob: #{e.message}" - ChatwootExceptionTracker.new(e).capture_exception end end diff --git a/enterprise/app/services/messages/audio_transcription_service.rb b/enterprise/app/services/messages/audio_transcription_service.rb index 49f1bd8c9..8b598cf28 100644 --- a/enterprise/app/services/messages/audio_transcription_service.rb +++ b/enterprise/app/services/messages/audio_transcription_service.rb @@ -12,15 +12,9 @@ class Messages::AudioTranscriptionService < Llm::BaseOpenAiService return { error: 'Transcription limit exceeded' } unless can_transcribe? return { error: 'Message not found' } if message.blank? - begin - transcriptions = transcribe_audio - Rails.logger.info "Audio transcription successful: #{transcriptions}" - { success: true, transcriptions: transcriptions } - rescue StandardError => e - ChatwootExceptionTracker.new(e).capture_exception - Rails.logger.error "Audio transcription failed: #{e.message}" - { error: "Transcription failed: #{e.message}" } - end + transcriptions = transcribe_audio + Rails.logger.info "Audio transcription successful: #{transcriptions}" + { success: true, transcriptions: transcriptions } end private diff --git a/spec/enterprise/services/messages/audio_transcription_service_spec.rb b/spec/enterprise/services/messages/audio_transcription_service_spec.rb index 2e9e22728..78879e1a1 100644 --- a/spec/enterprise/services/messages/audio_transcription_service_spec.rb +++ b/spec/enterprise/services/messages/audio_transcription_service_spec.rb @@ -53,18 +53,5 @@ RSpec.describe Messages::AudioTranscriptionService, type: :service do expect(result).to eq({ success: true, transcriptions: 'Existing transcription' }) end end - - context 'when transcription fails' do - before do - allow(service).to receive(:can_transcribe?).and_return(true) - allow(service).to receive(:transcribe_audio).and_raise(StandardError.new('API error')) - allow(ChatwootExceptionTracker).to receive(:new).and_return(instance_double(ChatwootExceptionTracker, capture_exception: nil)) - end - - it 'returns error response' do - result = service.perform - expect(result).to eq({ error: 'Transcription failed: API error' }) - end - end end end