Commit f225b52
Changed files (1)
lib
net
lib/net/llm.rb
@@ -5,6 +5,34 @@ require_relative "llm/version"
module Net
module Llm
class Error < StandardError; end
- # Your code goes here...
+ DEFAULT_TIMEOUT = 60 * 2
+
+ class OpenAI
+ attr_reader :api_key, :base_url, :model
+
+ def initialize(api_key:, base_url: "https://api.openai.com/v1", model: "gpt-4o-mini")
+ @api_key = api_key
+ @base_url = base_url
+ @model = model
+ end
+
+ def chat(messages, tools, timeout: DEFAULT_TIMEOUT)
+ uri = URI("#{base_url}/chat/completions")
+ request = Net::HTTP::Post.new(uri)
+ request["Authorization"] = "Bearer #{api_key}"
+ request["Content-Type"] = "application/json"
+ request.body = { model: model, messages: messages, tools: tools, tool_choice: "auto" }.to_json
+
+ http = Net::HTTP.new(uri.hostname, uri.port)
+ http.use_ssl = true
+ http.open_timeout = timeout
+ http.read_timeout = timeout
+ http.write_timeout = timeout if http.respond_to?(:write_timeout=)
+
+ response = http.start { |h| h.request(request) }
+ raise "HTTP #{response.code}: #{response.body}" unless response.is_a?(Net::HTTPSuccess)
+ JSON.parse(response.body)
+ end
+ end
end
end