- 
      
- 
        Save peterc/e38f5399e7f756f47f70bb6b846c763d to your computer and use it in GitHub Desktop. 
| require "openai" | |
| client = OpenAI::Client.new # assumes valid key in OPENAI_API_KEY | |
| begin | |
| resp = client.chat.completions.create( | |
| model: :"gpt-5-nano", | |
| reasoning_effort: :high, | |
| verbosity: :low, | |
| messages: [{ role: "user", content: "Tell me a joke" }] | |
| ) | |
| puts resp.choices[0].message.content | |
| puts "#{resp.usage.completion_tokens} (of which #{resp.usage.completion_tokens_details.reasoning_tokens} were reasoning tokens)" | |
| rescue => e | |
| puts e.body[:error][:message] | |
| end | |
| # reasoning_effort can be :minimal, :low, :medium, :high | |
| # verbosity can be :low, :medium, :high | 
Besides, RubyLLM doesn't easily support gpt-5 just yet. This code will work:
require 'ruby_llm'
RubyLLM.configure do |config|
  config.openai_api_key = ENV.fetch("OPENAI_API_KEY")
end
chat = RubyLLM.chat(provider: :openai,
                    model: "gpt-5-nano",
                    assume_model_exists: true)
              .with_temperature(1.0)
              .with_params(reasoning_effort: :high, verbosity: :high)
              
response = chat.ask("Tell me a joke")
puts response.contentBut the chat call is a bit verbose as it doesn't have built-in support yet (which, when added, will set the temperature appropriately and not need all the provider: and :assume_model_exists stuff) and so also raises a warning.
IMPORTANT UPDATE! RubyLLM does support GPT-5, I'm just an idiot who didn't read all the documentation. RubyLLM has a registry of models that stands distinct from the specific version you have installed and you can update it! More info at https://rubyllm.com/models/#refreshing-the-registry https://x.com/paolino/status/1953591077480665217
Thanks to @crmne for bringing this to my attention. My little "hack" above will force the issue, however, if for some reason you don't/can't/won't update the registry.
There are better options, such as RubyLLM, but I like using the bare OpenAI library for many things, and the documentation for it is so weird that it doesn't even include the
choices[0].message.contentstuff which I always forget. So this code is mostly here for me to copy and paste into experiments.