class OpenAI::Client

def assistants

def assistants
  @assistants ||= OpenAI::Assistants.new(client: self)
end

def audio

def audio
  @audio ||= OpenAI::Audio.new(client: self)
end

def azure?

def azure?
  @api_type&.to_sym == :azure
end

def batches

def batches
  @batches ||= OpenAI::Batches.new(client: self)
end

def beta(apis)

def beta(apis)
  dup.tap do |client|
    client.add_headers("OpenAI-Beta": apis.map { |k, v| "#{k}=#{v}" }.join(";"))
  end
end

def chat(parameters: {})

def chat(parameters: {})
  json_post(path: "/chat/completions", parameters: parameters)
end

def completions(parameters: {})

def completions(parameters: {})
  json_post(path: "/completions", parameters: parameters)
end

def embeddings(parameters: {})

def embeddings(parameters: {})
  json_post(path: "/embeddings", parameters: parameters)
end

def files

def files
  @files ||= OpenAI::Files.new(client: self)
end

def finetunes

def finetunes
  @finetunes ||= OpenAI::Finetunes.new(client: self)
end

def images

def images
  @images ||= OpenAI::Images.new(client: self)
end

def initialize(config = {}, &faraday_middleware)

def initialize(config = {}, &faraday_middleware)
  CONFIG_KEYS.each do |key|
    # Set instance variables like api_type & access_token. Fall back to global config
    # if not present.
    instance_variable_set(
      "@#{key}",
      config[key].nil? ? OpenAI.configuration.send(key) : config[key]
    )
  end
  @faraday_middleware = faraday_middleware
end

def inspect

def inspect
  vars = instance_variables.map do |var|
    value = instance_variable_get(var)
    SENSITIVE_ATTRIBUTES.include?(var) ? "#{var}=[REDACTED]" : "#{var}=#{value.inspect}"
  end
  "#<#{self.class}:#{object_id} #{vars.join(', ')}>"
end

def messages

def messages
  @messages ||= OpenAI::Messages.new(client: self)
end

def models

def models
  @models ||= OpenAI::Models.new(client: self)
end

def moderations(parameters: {})

def moderations(parameters: {})
  json_post(path: "/moderations", parameters: parameters)
end

def run_steps

def run_steps
  @run_steps ||= OpenAI::RunSteps.new(client: self)
end

def runs

def runs
  @runs ||= OpenAI::Runs.new(client: self)
end

def threads

def threads
  @threads ||= OpenAI::Threads.new(client: self)
end

def vector_store_file_batches

def vector_store_file_batches
  @vector_store_file_batches ||= OpenAI::VectorStoreFileBatches.new(client: self)
end

def vector_store_files

def vector_store_files
  @vector_store_files ||= OpenAI::VectorStoreFiles.new(client: self)
end

def vector_stores

def vector_stores
  @vector_stores ||= OpenAI::VectorStores.new(client: self)
end