Skip to content

sbezugliy/openai-mapper

Repository files navigation

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_TOKEN OpenAI 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
end

Edit 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
end

Image 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
end

Development

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.

About

OpenaAI JSON API client and object mapper

Resources

Code of conduct

Stars

Watchers

Forks

Packages

 
 
 

Contributors