class L::OpenAI

def chat(user_message, system_message = nil)

Generate a response with support for structured output
def chat(user_message, system_message = nil)
  schema = schema(settings)
  response = client.chat(
    parameters: {
      model: settings[:model], response_format: schema, messages: [
        system_message ? { role: :system, content: system_message } : nil,
        { role: :user, content: user_message }
      ].compact
    }.compact
  ).dig('choices', 0, 'message', 'content')
  content = schema ? ::Hashie::Mash.new(JSON.parse(response)) : response
  array?(schema) ? content.items : content
end