fix: Handle OpenAI API errors (#9560)

This commit is contained in:
Muhsin Keloth
2024-08-22 10:24:13 +05:30
committed by GitHub
parent 6571baf211
commit 429d281501
8 changed files with 30 additions and 18 deletions

View File

@@ -11,7 +11,12 @@ class Api::V1::Accounts::Integrations::HooksController < Api::V1::Accounts::Base
end
def process_event
render json: { message: @hook.process_event(params[:event]) }
response = @hook.process_event(params[:event])
if response[:error]
render json: { error: response[:error] }, status: :unprocessable_entity
else
render json: { message: response[:message] }
end
end
def destroy

View File

@@ -100,7 +100,11 @@ export default {
} = result;
return generatedMessage;
} catch (error) {
useAlert(this.$t('INTEGRATION_SETTINGS.OPEN_AI.GENERATE_ERROR'));
const errorData = error.response.data.error;
const errorMessage =
errorData?.error?.message ||
this.$t('INTEGRATION_SETTINGS.OPEN_AI.GENERATE_ERROR');
useAlert(errorMessage);
return '';
}
},

View File

@@ -56,7 +56,7 @@ class Integrations::Hook < ApplicationRecord
when 'openai'
Integrations::Openai::ProcessorService.new(hook: self, event: event).perform if app_id == 'openai'
else
'No processor found'
{ error: 'No processor found' }
end
end

View File

@@ -31,7 +31,7 @@ module Enterprise::Integrations::OpenaiProcessorService
# To what you ask? Sometimes, the response includes
# "Labels:" in it's response in some format. This is a hacky way to remove it
# TODO: Fix with with a better prompt
response.present? ? response.gsub(/^(label|labels):/i, '') : ''
response[:message] ? response[:message].gsub(/^(label|labels):/i, '') : ''
end
private

View File

@@ -77,8 +77,12 @@ class Integrations::OpenaiBaseService
response = HTTParty.post(API_URL, headers: headers, body: body)
Rails.logger.info("OpenAI API response: #{response.body}")
return { error: response.parsed_response, error_code: response.code } unless response.success?
choices = JSON.parse(response.body)['choices']
choices.present? ? choices.first['message']['content'] : nil
return { message: choices.first['message']['content'] } if choices.present?
{ message: nil }
end
end

View File

@@ -97,9 +97,8 @@ RSpec.describe 'Integration Hooks API', type: :request do
params: params,
headers: agent.create_new_auth_token,
as: :json
expect(response).to have_http_status(:success)
expect(response.parsed_body['message']).to eq('No processor found')
expect(response).to have_http_status(:unprocessable_entity)
expect(response.parsed_body['error']).to eq 'No processor found'
end
end
end

View File

@@ -52,7 +52,7 @@ RSpec.describe Integrations::Openai::ProcessorService do
.to_return(status: 200, body: openai_response, headers: {})
result = subject.perform
expect(result).to eq('This is a reply from openai.')
expect(result).to eq({ :message => 'This is a reply from openai.' })
end
end
@@ -76,7 +76,7 @@ RSpec.describe Integrations::Openai::ProcessorService do
.to_return(status: 200, body: openai_response, headers: {})
result = subject.perform
expect(result).to eq('This is a reply from openai.')
expect(result).to eq({ :message => 'This is a reply from openai.' })
end
end
@@ -101,7 +101,7 @@ RSpec.describe Integrations::Openai::ProcessorService do
.to_return(status: 200, body: openai_response, headers: {})
result = subject.perform
expect(result).to eq('This is a reply from openai.')
expect(result).to eq({ :message => 'This is a reply from openai.' })
end
end
@@ -140,7 +140,7 @@ RSpec.describe Integrations::Openai::ProcessorService do
.to_return(status: 200, body: openai_response, headers: {})
result = subject.perform
expect(result).to eq('This is a reply from openai.')
expect(result).to eq({ :message => 'This is a reply from openai.' })
end
end
@@ -162,7 +162,7 @@ RSpec.describe Integrations::Openai::ProcessorService do
.to_return(status: 200, body: openai_response, headers: {})
result = subject.perform
expect(result).to eq('This is a reply from openai.')
expect(result).to eq({ :message => 'This is a reply from openai.' })
end
end
@@ -184,7 +184,7 @@ RSpec.describe Integrations::Openai::ProcessorService do
.to_return(status: 200, body: openai_response, headers: {})
result = subject.perform
expect(result).to eq('This is a reply from openai.')
expect(result).to eq({ :message => 'This is a reply from openai.' })
end
end
@@ -206,7 +206,7 @@ RSpec.describe Integrations::Openai::ProcessorService do
.to_return(status: 200, body: openai_response, headers: {})
result = subject.perform
expect(result).to eq('This is a reply from openai.')
expect(result).to eq({ :message => 'This is a reply from openai.' })
end
end
@@ -228,7 +228,7 @@ RSpec.describe Integrations::Openai::ProcessorService do
.to_return(status: 200, body: openai_response, headers: {})
result = subject.perform
expect(result).to eq('This is a reply from openai.')
expect(result).to eq({ :message => 'This is a reply from openai.' })
end
end
@@ -250,7 +250,7 @@ RSpec.describe Integrations::Openai::ProcessorService do
.to_return(status: 200, body: openai_response, headers: {})
result = subject.perform
expect(result).to eq('This is a reply from openai.')
expect(result).to eq({ :message => 'This is a reply from openai.' })
end
end
end

View File

@@ -37,7 +37,7 @@ RSpec.describe Integrations::Hook do
it 'returns no processor found for hooks with out processor defined' do
hook = create(:integrations_hook, account: account)
expect(hook.process_event(params)).to eq('No processor found')
expect(hook.process_event(params)).to eq({ :error => 'No processor found' })
end
it 'returns results from procesor for openai hook' do