Skip to content

Commit 16c74e2

Browse files
authored
Merge pull request alexrudall#167 from kmcphillips/main
Remove the ::Ruby::OpenAI module and move everything under top level ::OpenAI module
2 parents d6ca4c5 + 3eb5ce2 commit 16c74e2

26 files changed

+131
-82
lines changed

README.md

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Ruby::OpenAI
1+
# Ruby OpenAI
22

33
[![Gem Version](https://badge.fury.io/rb/ruby-openai.svg)](https://badge.fury.io/rb/ruby-openai)
44
[![GitHub license](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/alexrudall/ruby-openai/blob/main/LICENSE.txt)
@@ -32,9 +32,16 @@ $ gem install ruby-openai
3232
and require with:
3333

3434
```ruby
35-
require "ruby/openai"
35+
require "openai"
3636
```
3737

38+
## Upgrading
39+
40+
The `::Ruby::OpenAI` module has been removed and all classes have been moved under the top level `::OpenAI` module.
41+
42+
However, a transitional `::Ruby::OpenAI` module has been added with aliases to the new location of the classes and constants. For now this compatibility layer is available when the gem is loaded with `require 'ruby/openai'` or by default with bundler, but are _not_ available when the gem is loaded with `require 'openai'` or `gem 'ruby-openai', require: 'openai'`. This will be removed in future versions.
43+
44+
3845
## Usage
3946

4047
- Get your API key from [https://beta.openai.com/account/api-keys](https://beta.openai.com/account/api-keys)
@@ -53,7 +60,7 @@ For a quick test you can pass your token directly to a new client:
5360
For a more robust setup, you can configure the gem with your API keys, for example in an `openai.rb` initializer file. Never hardcode secrets into your codebase - instead use something like [dotenv](https://github.com/motdotla/dotenv) to pass the keys safely into your environments.
5461

5562
```ruby
56-
Ruby::OpenAI.configure do |config|
63+
OpenAI.configure do |config|
5764
config.access_token = ENV.fetch('OPENAI_ACCESS_TOKEN')
5865
config.organization_id = ENV.fetch('OPENAI_ORGANIZATION_ID') # Optional.
5966
end
@@ -274,4 +281,4 @@ The gem is available as open source under the terms of the [MIT License](https:/
274281

275282
## Code of Conduct
276283

277-
Everyone interacting in the Ruby::OpenAI project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/alexrudall/ruby-openai/blob/main/CODE_OF_CONDUCT.md).
284+
Everyone interacting in the Ruby OpenAI project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/alexrudall/ruby-openai/blob/main/CODE_OF_CONDUCT.md).

bin/console

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#!/usr/bin/env ruby
22

33
require "bundler/setup"
4-
require "ruby/openai"
4+
require "openai"
55

66
# You can add fixtures and/or initialization code here to make experimenting
77
# with your gem easier. You can also use a different console, if you like.

lib/openai.rb

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
require "httparty"
2+
3+
require_relative "openai/client"
4+
require_relative "openai/files"
5+
require_relative "openai/finetunes"
6+
require_relative "openai/images"
7+
require_relative "openai/models"
8+
require_relative "openai/version"
9+
10+
module OpenAI
11+
class Error < StandardError; end
12+
class ConfigurationError < Error; end
13+
14+
class Configuration
15+
attr_writer :access_token
16+
attr_accessor :api_version, :organization_id
17+
18+
DEFAULT_API_VERSION = "v1".freeze
19+
20+
def initialize
21+
@access_token = nil
22+
@api_version = DEFAULT_API_VERSION
23+
@organization_id = nil
24+
end
25+
26+
def access_token
27+
return @access_token if @access_token
28+
29+
error_text = "OpenAI access token missing! See https://github.com/alexrudall/ruby-openai#usage"
30+
raise ConfigurationError, error_text
31+
end
32+
end
33+
34+
class << self
35+
attr_writer :configuration
36+
end
37+
38+
def self.configuration
39+
@configuration ||= OpenAI::Configuration.new
40+
end
41+
42+
def self.configure
43+
yield(configuration)
44+
end
45+
end

lib/ruby/openai/client.rb renamed to lib/openai/client.rb

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ class Client
33
URI_BASE = "https://api.openai.com/".freeze
44

55
def initialize(access_token: nil, organization_id: nil)
6-
Ruby::OpenAI.configuration.access_token = access_token if access_token
7-
Ruby::OpenAI.configuration.organization_id = organization_id if organization_id
6+
OpenAI.configuration.access_token = access_token if access_token
7+
OpenAI.configuration.organization_id = organization_id if organization_id
88
end
99

1010
def completions(parameters: {})
@@ -70,14 +70,14 @@ def self.delete(path:)
7070
end
7171

7272
private_class_method def self.uri(path:)
73-
URI_BASE + Ruby::OpenAI.configuration.api_version + path
73+
URI_BASE + OpenAI.configuration.api_version + path
7474
end
7575

7676
private_class_method def self.headers
7777
{
7878
"Content-Type" => "application/json",
79-
"Authorization" => "Bearer #{Ruby::OpenAI.configuration.access_token}",
80-
"OpenAI-Organization" => Ruby::OpenAI.configuration.organization_id
79+
"Authorization" => "Bearer #{OpenAI.configuration.access_token}",
80+
"OpenAI-Organization" => OpenAI.configuration.organization_id
8181
}
8282
end
8383
end

lib/openai/compatibility.rb

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
module Ruby
2+
module OpenAI
3+
VERSION = ::OpenAI::VERSION
4+
5+
Error = ::OpenAI::Error
6+
ConfigurationError = ::OpenAI::ConfigurationError
7+
Configuration = ::OpenAI::Configuration
8+
end
9+
end

lib/ruby/openai/files.rb renamed to lib/openai/files.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
module OpenAI
22
class Files
33
def initialize(access_token: nil, organization_id: nil)
4-
Ruby::OpenAI.configuration.access_token = access_token if access_token
5-
Ruby::OpenAI.configuration.organization_id = organization_id if organization_id
4+
OpenAI.configuration.access_token = access_token if access_token
5+
OpenAI.configuration.organization_id = organization_id if organization_id
66
end
77

88
def list

lib/ruby/openai/finetunes.rb renamed to lib/openai/finetunes.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
module OpenAI
22
class Finetunes
33
def initialize(access_token: nil, organization_id: nil)
4-
Ruby::OpenAI.configuration.access_token = access_token if access_token
5-
Ruby::OpenAI.configuration.organization_id = organization_id if organization_id
4+
OpenAI.configuration.access_token = access_token if access_token
5+
OpenAI.configuration.organization_id = organization_id if organization_id
66
end
77

88
def list

lib/ruby/openai/images.rb renamed to lib/openai/images.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
module OpenAI
22
class Images
33
def initialize(access_token: nil, organization_id: nil)
4-
Ruby::OpenAI.configuration.access_token = access_token if access_token
5-
Ruby::OpenAI.configuration.organization_id = organization_id if organization_id
4+
OpenAI.configuration.access_token = access_token if access_token
5+
OpenAI.configuration.organization_id = organization_id if organization_id
66
end
77

88
def generate(parameters: {})

lib/ruby/openai/models.rb renamed to lib/openai/models.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
module OpenAI
22
class Models
33
def initialize(access_token: nil, organization_id: nil)
4-
Ruby::OpenAI.configuration.access_token = access_token if access_token
5-
Ruby::OpenAI.configuration.organization_id = organization_id if organization_id
4+
OpenAI.configuration.access_token = access_token if access_token
5+
OpenAI.configuration.organization_id = organization_id if organization_id
66
end
77

88
def list

lib/openai/version.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
module OpenAI
2+
VERSION = "3.2.0".freeze
3+
end

lib/ruby/openai.rb

Lines changed: 2 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,2 @@
1-
require "httparty"
2-
require "ruby/openai/client"
3-
require "ruby/openai/files"
4-
require "ruby/openai/finetunes"
5-
require "ruby/openai/images"
6-
require "ruby/openai/models"
7-
require "ruby/openai/version"
8-
9-
module Ruby
10-
module OpenAI
11-
class Error < StandardError; end
12-
class ConfigurationError < Error; end
13-
14-
class Configuration
15-
attr_writer :access_token
16-
attr_accessor :api_version, :organization_id
17-
18-
DEFAULT_API_VERSION = "v1".freeze
19-
20-
def initialize
21-
@access_token = nil
22-
@api_version = DEFAULT_API_VERSION
23-
@organization_id = nil
24-
end
25-
26-
def access_token
27-
return @access_token if @access_token
28-
29-
error_text = "OpenAI access token missing! See https://github.com/alexrudall/ruby-openai#usage"
30-
raise ConfigurationError, error_text
31-
end
32-
end
33-
34-
class << self
35-
attr_writer :configuration
36-
end
37-
38-
def self.configuration
39-
@configuration ||= OpenAI::Configuration.new
40-
end
41-
42-
def self.configure
43-
yield(configuration)
44-
end
45-
end
46-
end
1+
require_relative "../openai"
2+
require_relative "../openai/compatibility"

lib/ruby/openai/version.rb

Lines changed: 0 additions & 5 deletions
This file was deleted.

ruby-openai.gemspec

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
require_relative "lib/ruby/openai/version"
1+
require_relative "lib/openai/version"
22

33
Gem::Specification.new do |spec|
44
spec.name = "ruby-openai"
5-
spec.version = Ruby::OpenAI::VERSION
5+
spec.version = OpenAI::VERSION
66
spec.authors = ["Alex"]
77
spec.email = ["[email protected]"]
88

spec/compatibility_spec.rb

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
RSpec.describe "compatibility" do
2+
context "for moved constants" do
3+
describe "::Ruby::OpenAI::VERSION" do
4+
it "is mapped to ::OpenAI::VERSION" do
5+
expect(::Ruby::OpenAI::VERSION).to eq(::OpenAI::VERSION)
6+
end
7+
end
8+
9+
describe "::Ruby::OpenAI::Error" do
10+
it "is mapped to ::OpenAI::Error" do
11+
expect(::Ruby::OpenAI::Error).to eq(::OpenAI::Error)
12+
expect(::Ruby::OpenAI::Error.new).to be_a(::OpenAI::Error)
13+
expect(::OpenAI::Error.new).to be_a(::Ruby::OpenAI::Error)
14+
end
15+
end
16+
17+
describe "::Ruby::OpenAI::ConfigurationError" do
18+
it "is mapped to ::OpenAI::ConfigurationError" do
19+
expect(::Ruby::OpenAI::ConfigurationError).to eq(::OpenAI::ConfigurationError)
20+
expect(::Ruby::OpenAI::ConfigurationError.new).to be_a(::OpenAI::ConfigurationError)
21+
expect(::OpenAI::ConfigurationError.new).to be_a(::Ruby::OpenAI::ConfigurationError)
22+
end
23+
end
24+
25+
describe "::Ruby::OpenAI::Configuration" do
26+
it "is mapped to ::OpenAI::Configuration" do
27+
expect(::Ruby::OpenAI::Configuration).to eq(::OpenAI::Configuration)
28+
expect(::Ruby::OpenAI::Configuration.new).to be_a(::OpenAI::Configuration)
29+
expect(::OpenAI::Configuration.new).to be_a(::Ruby::OpenAI::Configuration)
30+
end
31+
end
32+
end
33+
end

spec/ruby/openai_spec.rb renamed to spec/openai_spec.rb

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
RSpec.describe Ruby::OpenAI do
1+
RSpec.describe OpenAI do
22
it "has a version number" do
3-
expect(Ruby::OpenAI::VERSION).not_to be nil
3+
expect(OpenAI::VERSION).not_to be nil
44
end
55

66
describe "#configure" do
@@ -9,24 +9,24 @@
99
let(:organization_id) { "def456" }
1010

1111
before do
12-
Ruby::OpenAI.configure do |config|
12+
OpenAI.configure do |config|
1313
config.access_token = access_token
1414
config.api_version = api_version
1515
config.organization_id = organization_id
1616
end
1717
end
1818

1919
it "returns the config" do
20-
expect(Ruby::OpenAI.configuration.access_token).to eq(access_token)
21-
expect(Ruby::OpenAI.configuration.api_version).to eq(api_version)
22-
expect(Ruby::OpenAI.configuration.organization_id).to eq(organization_id)
20+
expect(OpenAI.configuration.access_token).to eq(access_token)
21+
expect(OpenAI.configuration.api_version).to eq(api_version)
22+
expect(OpenAI.configuration.organization_id).to eq(organization_id)
2323
end
2424

2525
context "without an access token" do
2626
let(:access_token) { nil }
2727

2828
it "raises an error" do
29-
expect { OpenAI::Client.new.completions }.to raise_error(Ruby::OpenAI::ConfigurationError)
29+
expect { OpenAI::Client.new.completions }.to raise_error(OpenAI::ConfigurationError)
3030
end
3131
end
3232
end

spec/spec_helper.rb

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
require "bundler/setup"
22
require "dotenv/load"
3-
require "ruby/openai"
3+
require "openai"
4+
require "openai/compatibility"
45
require "vcr"
56

67
Dir[File.expand_path("spec/support/**/*.rb")].sort.each { |f| require f }
@@ -10,8 +11,8 @@
1011
c.cassette_library_dir = "spec/fixtures/cassettes"
1112
c.default_cassette_options = { record: ENV["NO_VCR"] == "true" ? :all : :new_episodes,
1213
match_requests_on: [:method, :uri, VCRMultipartMatcher.new] }
13-
c.filter_sensitive_data("<OPENAI_ACCESS_TOKEN>") { Ruby::OpenAI.configuration.access_token }
14-
c.filter_sensitive_data("<OPENAI_ORGANIZATION_ID>") { Ruby::OpenAI.configuration.organization_id }
14+
c.filter_sensitive_data("<OPENAI_ACCESS_TOKEN>") { OpenAI.configuration.access_token }
15+
c.filter_sensitive_data("<OPENAI_ORGANIZATION_ID>") { OpenAI.configuration.organization_id }
1516
end
1617

1718
RSpec.configure do |c|
@@ -26,7 +27,7 @@
2627
end
2728

2829
c.before(:all) do
29-
Ruby::OpenAI.configure do |config|
30+
OpenAI.configure do |config|
3031
config.access_token = ENV.fetch("OPENAI_ACCESS_TOKEN")
3132
end
3233
end

0 commit comments

Comments
 (0)