diff --git a/lib/openai.rb b/lib/openai.rb index d5880c90..14cf2777 100644 --- a/lib/openai.rb +++ b/lib/openai.rb @@ -35,7 +35,10 @@ def call(env) raise e unless e.response.is_a?(Hash) OpenAI.log_message("OpenAI HTTP Error", e.response[:body], :error) - raise e + + body = e.response[:body] + api_message = body.is_a?(Hash) ? body.dig("error", "message") : nil + raise e, api_message ? "#{e.message} - #{api_message}" : e.message end end diff --git a/spec/openai/client/http_spec.rb b/spec/openai/client/http_spec.rb index 471289f4..37a5c605 100644 --- a/spec/openai/client/http_spec.rb +++ b/spec/openai/client/http_spec.rb @@ -258,12 +258,18 @@ VCR.use_cassette(cassette, record: :none) do expect { OpenAI::Client.new(log_errors: log_errors).models.retrieve(id: "text-ada-001") } .to raise_error Faraday::Error - $stdout.rewind captured_stdout = $stdout.string expect(captured_stdout).to include("OpenAI HTTP Error") end end + + it "includes the API error message in the exception" do + VCR.use_cassette(cassette, record: :none) do + expect { OpenAI::Client.new(log_errors: log_errors).models.retrieve(id: "text-ada-001") } + .to raise_error(Faraday::Error, /Test error/) + end + end end describe "when log_errors is set to false" do @@ -273,7 +279,6 @@ VCR.use_cassette(cassette, record: :none) do expect { OpenAI::Client.new(log_errors: log_errors).models.retrieve(id: "text-ada-001") } .to raise_error Faraday::Error - $stdout.rewind captured_stdout = $stdout.string expect(captured_stdout).not_to include("OpenAI HTTP Error")