Commit 65fd985

mo khan <mo@mokhan.ca>
2025-10-08 18:55:43
refactor: return code and body on not OK response
1 parent e68ef4c
Changed files (2)
lib
net
spec
lib/net/llm/openai.rb
@@ -39,8 +39,11 @@ module Net
       end
 
       def handle_response(response)
-        raise "HTTP #{response.code}: #{response.body}" unless response.is_a?(Net::HTTPSuccess)
-        JSON.parse(response.body)
+        if response.is_a?(Net::HTTPSuccess)
+          JSON.parse(response.body)
+        else
+          { "code" => response.code, "body" => response.body }
+        end
       end
     end
   end
spec/net/llm/openai_spec.rb
@@ -53,7 +53,9 @@ RSpec.describe Net::Llm::OpenAI do
       stub_request(:post, "https://api.openai.com/v1/chat/completions")
         .to_return(status: 401, body: "Unauthorized")
 
-      expect { client.chat(messages, tools) }.to raise_error(/HTTP 401/)
+      result = client.chat(messages, tools)
+      expect(result["code"]).to eq("401")
+      expect(result["body"]).to eq("Unauthorized")
     end
   end
 
@@ -74,7 +76,9 @@ RSpec.describe Net::Llm::OpenAI do
       stub_request(:get, "https://api.openai.com/v1/models")
         .to_return(status: 500, body: "Server error")
 
-      expect { client.models }.to raise_error(/HTTP 500/)
+      result = client.models
+      expect(result["code"]).to eq("500")
+      expect(result["body"]).to eq("Server error")
     end
   end
 
@@ -112,7 +116,9 @@ RSpec.describe Net::Llm::OpenAI do
       stub_request(:post, "https://api.openai.com/v1/embeddings")
         .to_return(status: 400, body: "Bad request")
 
-      expect { client.embeddings(input) }.to raise_error(/HTTP 400/)
+      result = client.embeddings(input)
+      expect(result["code"]).to eq("400")
+      expect(result["body"]).to eq("Bad request")
     end
   end
 end