module OpenAI

def configuration

def configuration
  @configuration ||= OpenAI::Configuration.new
end

def configure

def configure
  yield(configuration)
end

def log_message(prefix, message, level = :warn)

Parameters:
  • level (Symbol) -- The log level (:error, :warn, etc.)
  • message (String) -- The message to log
  • prefix (String) -- Prefix to add to the message
def log_message(prefix, message, level = :warn)
  color = level == :error ? "\033[31m" : "\033[33m"
  logger = Logger.new($stdout)
  logger.formatter = proc do |_severity, _datetime, _progname, msg|
    "#{color}#{prefix} (spotted in ruby-openai #{VERSION}): #{msg}\n\033[0m"
  end
  logger.send(level, message)
end

def rough_token_count(content = "")

https://help.openai.com/en/articles/4936856-what-are-tokens-and-how-to-count-them
Estimate the number of tokens in a string, using the rules of thumb from OpenAI:
def rough_token_count(content = "")
  raise ArgumentError, "rough_token_count requires a string" unless content.is_a? String
  return 0 if content.empty?
  count_by_chars = content.size / 4.0
  count_by_words = content.split.size * 4.0 / 3
  estimate = ((count_by_chars + count_by_words) / 2.0).round
  [1, estimate].max
end