Openai::Mapper
OpenAI client and question/answer mapper.
Most of API requests are covered, others in progress...
Installation
Add to the Gemfile
gem "openai-mapper"
Usage
Set environment variables:
- 
OPENAI_TOKENOpenAI secret token - 
OPENAI_ORGANIZATION(Optional) OpenAI organization token 
Simple chat-completion
question = {
  model: "gpt-3.5-turbo",
  messages: [
    ::Openai::Mapper::Message.new(
      role: "system",
      content: "Hello from openai-mapper: https://github.com/sbezugliy/openai-mapper"
    ),
    ::Openai::Mapper::Message.new(
      role: "user",
      content: "Hello!"
    )
  ]
}
chat_completion = Openai::Chat::Completions.new
answer = chat_completion.request(question)It returns Openai::Mapper::Chat::Completions object.
JSON answer object example:
{
  "id": "chatcmpl-8EwrQEw3dxpnPxalQhjoqljGS46NW",
  "object": "chat.completion",
  "created": 1698573544,
  "model": "gpt-3.5-turbo-0613",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "Hello there! How can"
      },
      "finish_reason": "length"
    }
  ],
  "usage": {
    "prompt_tokens": 33,
    "completion_tokens": 5,
    "total_tokens": 38
  }
}Image generation
Image by text question
Image may be generated as an base64 binary and image file.
question = "technopunk"
dalle = Openai::Images::Create.new
dalle.request(
  prompt: question,
  n: 10,
  size: "1024x1024",
  user: "s.bezugliy@codenv.top",
  response_format: "b64_json"
)
dalle.data.data.each.with_index do |image, index|
  f = File.new(File.join(__dir__, "../output/#{dalle.data.created}-#{index}.png"), "w")
  f.write(Base64.decode64(image.b64_json))
  f.close
endEdit Image with text instructions
question = "Replace heads with a teapot"
dalle = Openai::Images::Edit.new
dalle.request(
  image: "origin1.png",
  prompt: question,
  n: 10,
  size: "1024x1024",
  response_format: "b64_json",
  user: "s.bezugliy@codenv.top"
)
dalle.data.data.each.with_index do |image, index|
  f = File.new(File.join(__dir__, "../output/edits/#{dalle.data.created}-#{index}.png"), "w")
  f.write(Base64.decode64(image.b64_json))
  f.close
endImage variations by origin image
Pass original image
dalle = Openai::Images::Variations.new
dalle.request(
  image: "origin1.png",
  n: 10,
  size: "1024x1024",
  response_format: "b64_json",
  user: "s.bezugliy@codenv.top"
)
dalle.data.data.each.with_index do |image, index|
  f = File.new(File.join(__dir__, "../output/variations/#{dalle.data.created}-#{index}.png"), "w")
  f.write(Base64.decode64(image.b64_json))
  f.close
endDevelopment
After checking out the repo, run bin/setup to install dependencies. Then, run bundle exec rspec to run the tests. You can also run bin/console for an interactive prompt that will allow you to experiment.
Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/sbezugliy/openai-mapper. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the code of conduct.
Code of Conduct
Everyone interacting in the Openai::Mapper project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the code of conduct.