diff --git a/enterprise/app/services/captain/assistant/agent_runner_service.rb b/enterprise/app/services/captain/assistant/agent_runner_service.rb index e1d587331..f8b5e98d4 100644 --- a/enterprise/app/services/captain/assistant/agent_runner_service.rb +++ b/enterprise/app/services/captain/assistant/agent_runner_service.rb @@ -98,7 +98,12 @@ class Captain::Assistant::AgentRunnerService return nil unless output.is_a?(String) JSON.parse(output) - rescue JSON::ParserError + rescue JSON::ParserError => e + ChatwootExceptionTracker.new(e).capture_exception({ + output: output, + assistant_id: @assistant.id, + error_message: e.message + }) nil end diff --git a/lib/chatwoot_exception_tracker.rb b/lib/chatwoot_exception_tracker.rb index 9d321e514..64055603c 100644 --- a/lib/chatwoot_exception_tracker.rb +++ b/lib/chatwoot_exception_tracker.rb @@ -5,15 +5,15 @@ class ChatwootExceptionTracker @account = account end - def capture_exception - write_exception_to_file if Rails.env.development? + def capture_exception(additional_info = {}) + write_exception_to_file(additional_info) if Rails.env.development? capture_exception_with_sentry if ENV['SENTRY_DSN'].present? Rails.logger.error @exception end private - def write_exception_to_file + def write_exception_to_file(additional_info = {}) error_dir = Rails.root.join('errors') FileUtils.mkdir_p(error_dir) timestamp = Time.now.strftime('%Y%m%d-%H%M%S') @@ -25,6 +25,7 @@ class ChatwootExceptionTracker file.puts "User: #{@user&.id} (#{@user&.email})" if @user file.puts "Account: #{@account&.id} (#{@account&.name})" if @account file.puts "Backtrace:\n#{@exception.backtrace&.join("\n")}" + file.puts "Additional Info: #{JSON.pretty_generate(additional_info)}" if additional_info.present? end end