ruby-openai 2.1.0 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +7 -0
- data/Gemfile +1 -1
- data/Gemfile.lock +7 -7
- data/README.md +10 -5
- data/lib/ruby/openai/client.rb +11 -7
- data/lib/ruby/openai/engines.rb +6 -3
- data/lib/ruby/openai/files.rb +10 -5
- data/lib/ruby/openai/finetunes.rb +12 -6
- data/lib/ruby/openai/images.rb +4 -2
- data/lib/ruby/openai/models.rb +6 -3
- data/lib/ruby/openai/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6b9c4dc42598004908a840d7f014259502f876df499c2bcfc93170e4fc44f729
|
4
|
+
data.tar.gz: 4149a872b11219223412e9a1c8ce0e8f4c25706b75e30acb8c41ae80144cfd83
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b2dbfdb269b5cee46758307b32ad149ed198a994aa79274d1790e12c13c5505e6b7a126647725d8169204bea69b16b82f37e42a69903e20af9d3f5f5b07f5b51
|
7
|
+
data.tar.gz: 5c75f720b3f329f4ef4d37ed7b768c7edc46b97de843687543e382b49db98fc0df730c3dbab068f05862e765be59a75c7efadc405f9864554db84246efe61ece
|
data/CHANGELOG.md
CHANGED
@@ -5,6 +5,13 @@ All notable changes to this project will be documented in this file.
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
7
7
|
|
8
|
+
## [2.2.0] - 2022-12-15
|
9
|
+
|
10
|
+
### Added
|
11
|
+
|
12
|
+
- Add Organization ID to headers so users can charge credits to the correct organization.
|
13
|
+
- Thanks [@mridul911](https://github.com/mridul911) for raising this and [@maks112v](https://github.com/maks112v) for adding it!
|
14
|
+
|
8
15
|
## [2.1.0] - 2022-11-13
|
9
16
|
|
10
17
|
### Added
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
ruby-openai (2.
|
4
|
+
ruby-openai (2.2.0)
|
5
5
|
dotenv (>= 2.7.6, < 2.9.0)
|
6
6
|
httparty (>= 0.18.1, < 0.21.0)
|
7
7
|
|
@@ -20,18 +20,18 @@ GEM
|
|
20
20
|
httparty (0.20.0)
|
21
21
|
mime-types (~> 3.0)
|
22
22
|
multi_xml (>= 0.5.2)
|
23
|
-
json (2.6.
|
23
|
+
json (2.6.3)
|
24
24
|
mime-types (3.4.1)
|
25
25
|
mime-types-data (~> 3.2015)
|
26
26
|
mime-types-data (3.2022.0105)
|
27
27
|
multi_xml (0.6.0)
|
28
28
|
parallel (1.22.1)
|
29
|
-
parser (3.1.
|
29
|
+
parser (3.1.3.0)
|
30
30
|
ast (~> 2.4.1)
|
31
31
|
public_suffix (4.0.7)
|
32
32
|
rainbow (3.1.1)
|
33
33
|
rake (13.0.6)
|
34
|
-
regexp_parser (2.6.
|
34
|
+
regexp_parser (2.6.1)
|
35
35
|
rexml (3.2.5)
|
36
36
|
rspec (3.12.0)
|
37
37
|
rspec-core (~> 3.12.0)
|
@@ -46,7 +46,7 @@ GEM
|
|
46
46
|
diff-lcs (>= 1.2.0, < 2.0)
|
47
47
|
rspec-support (~> 3.12.0)
|
48
48
|
rspec-support (3.12.0)
|
49
|
-
rubocop (1.
|
49
|
+
rubocop (1.40.0)
|
50
50
|
json (~> 2.3)
|
51
51
|
parallel (~> 1.10)
|
52
52
|
parser (>= 3.1.2.1)
|
@@ -56,7 +56,7 @@ GEM
|
|
56
56
|
rubocop-ast (>= 1.23.0, < 2.0)
|
57
57
|
ruby-progressbar (~> 1.7)
|
58
58
|
unicode-display_width (>= 1.4.0, < 3.0)
|
59
|
-
rubocop-ast (1.
|
59
|
+
rubocop-ast (1.24.0)
|
60
60
|
parser (>= 3.1.1.0)
|
61
61
|
ruby-progressbar (1.11.0)
|
62
62
|
unicode-display_width (2.3.0)
|
@@ -73,7 +73,7 @@ DEPENDENCIES
|
|
73
73
|
byebug (~> 11.1.3)
|
74
74
|
rake (~> 13.0)
|
75
75
|
rspec (~> 3.12)
|
76
|
-
rubocop (~> 1.
|
76
|
+
rubocop (~> 1.40.0)
|
77
77
|
ruby-openai!
|
78
78
|
vcr (~> 6.1.0)
|
79
79
|
webmock (~> 3.18.1)
|
data/README.md
CHANGED
@@ -35,14 +35,16 @@ and require with:
|
|
35
35
|
|
36
36
|
## Usage
|
37
37
|
|
38
|
-
Get your API key from [https://beta.openai.com/account/api-keys](https://beta.openai.com/account/api-keys)
|
38
|
+
- Get your API key from [https://beta.openai.com/account/api-keys](https://beta.openai.com/account/api-keys)
|
39
|
+
- If you belong to multiple organizations, you can get your Organization ID from [https://beta.openai.com/account/org-settings](https://beta.openai.com/account/org-settings)
|
39
40
|
|
40
41
|
### With dotenv
|
41
42
|
|
42
|
-
If you're using [dotenv](https://github.com/motdotla/dotenv), you can add your secret
|
43
|
+
If you're using [dotenv](https://github.com/motdotla/dotenv), you can add your secret keys to your .env file:
|
43
44
|
|
44
45
|
```
|
45
46
|
OPENAI_ACCESS_TOKEN=access_token_goes_here
|
47
|
+
OPENAI_ORGANIZATION_ID=organization_id_goes_here # Optional.
|
46
48
|
```
|
47
49
|
|
48
50
|
And create a client:
|
@@ -56,7 +58,10 @@ And create a client:
|
|
56
58
|
Alternatively you can pass your key directly to a new client:
|
57
59
|
|
58
60
|
```ruby
|
59
|
-
client = OpenAI::Client.new(
|
61
|
+
client = OpenAI::Client.new(
|
62
|
+
access_token: "access_token_goes_here",
|
63
|
+
organization_id: "organization_id_goes_here"
|
64
|
+
)
|
60
65
|
```
|
61
66
|
|
62
67
|
### Models
|
@@ -200,7 +205,7 @@ Generate an image using DALL·E!
|
|
200
205
|
|
201
206
|
```ruby
|
202
207
|
response = client.images.generate(parameters: { prompt: "A baby sea otter cooking pasta wearing a hat of some sort" })
|
203
|
-
puts response.dig("data", 0, "url")
|
208
|
+
puts response.dig("data", 0, "url")
|
204
209
|
=> "https://oaidalleapiprodscus.blob.core.windows.net/private/org-Rf437IxKhh..."
|
205
210
|
```
|
206
211
|
|
@@ -276,7 +281,7 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
|
|
276
281
|
|
277
282
|
## Contributing
|
278
283
|
|
279
|
-
Bug reports and pull requests are welcome on GitHub at https://github.com/alexrudall/ruby-openai
|
284
|
+
Bug reports and pull requests are welcome on GitHub at <https://github.com/alexrudall/ruby-openai>. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/alexrudall/ruby-openai/blob/main/CODE_OF_CONDUCT.md).
|
280
285
|
|
281
286
|
## License
|
282
287
|
|
data/lib/ruby/openai/client.rb
CHANGED
@@ -3,8 +3,9 @@ module OpenAI
|
|
3
3
|
include HTTParty
|
4
4
|
base_uri "https://api.openai.com"
|
5
5
|
|
6
|
-
def initialize(access_token: nil)
|
6
|
+
def initialize(access_token: nil, organization_id: nil)
|
7
7
|
@access_token = access_token || ENV.fetch("OPENAI_ACCESS_TOKEN")
|
8
|
+
@organization_id = organization_id || ENV.fetch("OPENAI_ORGANIZATION_ID", nil)
|
8
9
|
end
|
9
10
|
|
10
11
|
def answers(version: default_version, parameters: {})
|
@@ -43,23 +44,25 @@ module OpenAI
|
|
43
44
|
warn "[DEPRECATION WARNING] [ruby-openai] `Client#engines` is deprecated and will
|
44
45
|
be removed from ruby-openai v3.0. Use `Client#models` instead."
|
45
46
|
|
46
|
-
@engines ||= OpenAI::Engines.new(access_token: @access_token
|
47
|
+
@engines ||= OpenAI::Engines.new(access_token: @access_token,
|
48
|
+
organization_id: @organization_id)
|
47
49
|
end
|
48
50
|
|
49
51
|
def files
|
50
|
-
@files ||= OpenAI::Files.new(access_token: @access_token)
|
52
|
+
@files ||= OpenAI::Files.new(access_token: @access_token, organization_id: @organization_id)
|
51
53
|
end
|
52
54
|
|
53
55
|
def finetunes
|
54
|
-
@finetunes ||= OpenAI::Finetunes.new(access_token: @access_token
|
56
|
+
@finetunes ||= OpenAI::Finetunes.new(access_token: @access_token,
|
57
|
+
organization_id: @organization_id)
|
55
58
|
end
|
56
59
|
|
57
60
|
def images
|
58
|
-
@images ||= OpenAI::Images.new(access_token: @access_token)
|
61
|
+
@images ||= OpenAI::Images.new(access_token: @access_token, organization_id: @organization_id)
|
59
62
|
end
|
60
63
|
|
61
64
|
def models
|
62
|
-
@models ||= OpenAI::Models.new(access_token: @access_token)
|
65
|
+
@models ||= OpenAI::Models.new(access_token: @access_token, organization_id: @organization_id)
|
63
66
|
end
|
64
67
|
|
65
68
|
def moderations(version: default_version, parameters: {})
|
@@ -101,7 +104,8 @@ module OpenAI
|
|
101
104
|
url,
|
102
105
|
headers: {
|
103
106
|
"Content-Type" => "application/json",
|
104
|
-
"Authorization" => "Bearer #{@access_token}"
|
107
|
+
"Authorization" => "Bearer #{@access_token}",
|
108
|
+
"OpenAI-Organization" => @organization_id
|
105
109
|
},
|
106
110
|
body: parameters.to_json
|
107
111
|
)
|
data/lib/ruby/openai/engines.rb
CHANGED
@@ -3,8 +3,9 @@ module OpenAI
|
|
3
3
|
include HTTParty
|
4
4
|
base_uri "https://api.openai.com"
|
5
5
|
|
6
|
-
def initialize(access_token: nil)
|
6
|
+
def initialize(access_token: nil, organization_id: nil)
|
7
7
|
@access_token = access_token || ENV.fetch("OPENAI_ACCESS_TOKEN")
|
8
|
+
@organization_id = organization_id || ENV.fetch("OPENAI_ORGANIZATION_ID", nil)
|
8
9
|
end
|
9
10
|
|
10
11
|
def list(version: default_version)
|
@@ -12,7 +13,8 @@ module OpenAI
|
|
12
13
|
"/#{version}/engines",
|
13
14
|
headers: {
|
14
15
|
"Content-Type" => "application/json",
|
15
|
-
"Authorization" => "Bearer #{@access_token}"
|
16
|
+
"Authorization" => "Bearer #{@access_token}",
|
17
|
+
"OpenAI-Organization" => @organization_id
|
16
18
|
}
|
17
19
|
)
|
18
20
|
end
|
@@ -22,7 +24,8 @@ module OpenAI
|
|
22
24
|
"/#{version}/engines/#{id}",
|
23
25
|
headers: {
|
24
26
|
"Content-Type" => "application/json",
|
25
|
-
"Authorization" => "Bearer #{@access_token}"
|
27
|
+
"Authorization" => "Bearer #{@access_token}",
|
28
|
+
"OpenAI-Organization" => @organization_id
|
26
29
|
}
|
27
30
|
)
|
28
31
|
end
|
data/lib/ruby/openai/files.rb
CHANGED
@@ -3,8 +3,9 @@ module OpenAI
|
|
3
3
|
include HTTParty
|
4
4
|
base_uri "https://api.openai.com"
|
5
5
|
|
6
|
-
def initialize(access_token: nil)
|
6
|
+
def initialize(access_token: nil, organization_id: nil)
|
7
7
|
@access_token = access_token || ENV.fetch("OPENAI_ACCESS_TOKEN")
|
8
|
+
@organization_id = organization_id || ENV.fetch("OPENAI_ORGANIZATION_ID", nil)
|
8
9
|
end
|
9
10
|
|
10
11
|
def list(version: default_version)
|
@@ -12,7 +13,8 @@ module OpenAI
|
|
12
13
|
"/#{version}/files",
|
13
14
|
headers: {
|
14
15
|
"Content-Type" => "application/json",
|
15
|
-
"Authorization" => "Bearer #{@access_token}"
|
16
|
+
"Authorization" => "Bearer #{@access_token}",
|
17
|
+
"OpenAI-Organization" => @organization_id
|
16
18
|
}
|
17
19
|
)
|
18
20
|
end
|
@@ -24,7 +26,8 @@ module OpenAI
|
|
24
26
|
"/#{version}/files",
|
25
27
|
headers: {
|
26
28
|
"Content-Type" => "application/json",
|
27
|
-
"Authorization" => "Bearer #{@access_token}"
|
29
|
+
"Authorization" => "Bearer #{@access_token}",
|
30
|
+
"OpenAI-Organization" => @organization_id
|
28
31
|
},
|
29
32
|
body: parameters.merge(file: File.open(parameters[:file]))
|
30
33
|
)
|
@@ -35,7 +38,8 @@ module OpenAI
|
|
35
38
|
"/#{version}/files/#{id}",
|
36
39
|
headers: {
|
37
40
|
"Content-Type" => "application/json",
|
38
|
-
"Authorization" => "Bearer #{@access_token}"
|
41
|
+
"Authorization" => "Bearer #{@access_token}",
|
42
|
+
"OpenAI-Organization" => @organization_id
|
39
43
|
}
|
40
44
|
)
|
41
45
|
end
|
@@ -45,7 +49,8 @@ module OpenAI
|
|
45
49
|
"/#{version}/files/#{id}",
|
46
50
|
headers: {
|
47
51
|
"Content-Type" => "application/json",
|
48
|
-
"Authorization" => "Bearer #{@access_token}"
|
52
|
+
"Authorization" => "Bearer #{@access_token}",
|
53
|
+
"OpenAI-Organization" => @organization_id
|
49
54
|
}
|
50
55
|
)
|
51
56
|
end
|
@@ -3,8 +3,9 @@ module OpenAI
|
|
3
3
|
include HTTParty
|
4
4
|
base_uri "https://api.openai.com"
|
5
5
|
|
6
|
-
def initialize(access_token: nil)
|
6
|
+
def initialize(access_token: nil, organization_id: nil)
|
7
7
|
@access_token = access_token || ENV.fetch("OPENAI_ACCESS_TOKEN")
|
8
|
+
@organization_id = organization_id || ENV.fetch("OPENAI_ORGANIZATION_ID", nil)
|
8
9
|
end
|
9
10
|
|
10
11
|
def list(version: default_version)
|
@@ -12,7 +13,8 @@ module OpenAI
|
|
12
13
|
"/#{version}/fine-tunes",
|
13
14
|
headers: {
|
14
15
|
"Content-Type" => "application/json",
|
15
|
-
"Authorization" => "Bearer #{@access_token}"
|
16
|
+
"Authorization" => "Bearer #{@access_token}",
|
17
|
+
"OpenAI-Organization" => @organization_id
|
16
18
|
}
|
17
19
|
)
|
18
20
|
end
|
@@ -22,7 +24,8 @@ module OpenAI
|
|
22
24
|
"/#{version}/fine-tunes",
|
23
25
|
headers: {
|
24
26
|
"Content-Type" => "application/json",
|
25
|
-
"Authorization" => "Bearer #{@access_token}"
|
27
|
+
"Authorization" => "Bearer #{@access_token}",
|
28
|
+
"OpenAI-Organization" => @organization_id
|
26
29
|
},
|
27
30
|
body: parameters.to_json
|
28
31
|
)
|
@@ -33,7 +36,8 @@ module OpenAI
|
|
33
36
|
"/#{version}/fine-tunes/#{id}",
|
34
37
|
headers: {
|
35
38
|
"Content-Type" => "application/json",
|
36
|
-
"Authorization" => "Bearer #{@access_token}"
|
39
|
+
"Authorization" => "Bearer #{@access_token}",
|
40
|
+
"OpenAI-Organization" => @organization_id
|
37
41
|
}
|
38
42
|
)
|
39
43
|
end
|
@@ -43,7 +47,8 @@ module OpenAI
|
|
43
47
|
"/#{version}/fine-tunes/#{id}/cancel",
|
44
48
|
headers: {
|
45
49
|
"Content-Type" => "application/json",
|
46
|
-
"Authorization" => "Bearer #{@access_token}"
|
50
|
+
"Authorization" => "Bearer #{@access_token}",
|
51
|
+
"OpenAI-Organization" => @organization_id
|
47
52
|
}
|
48
53
|
)
|
49
54
|
end
|
@@ -53,7 +58,8 @@ module OpenAI
|
|
53
58
|
"/#{version}/fine-tunes/#{id}/events",
|
54
59
|
headers: {
|
55
60
|
"Content-Type" => "application/json",
|
56
|
-
"Authorization" => "Bearer #{@access_token}"
|
61
|
+
"Authorization" => "Bearer #{@access_token}",
|
62
|
+
"OpenAI-Organization" => @organization_id
|
57
63
|
}
|
58
64
|
)
|
59
65
|
end
|
data/lib/ruby/openai/images.rb
CHANGED
@@ -3,8 +3,9 @@ module OpenAI
|
|
3
3
|
include HTTParty
|
4
4
|
base_uri "https://api.openai.com"
|
5
5
|
|
6
|
-
def initialize(access_token: nil)
|
6
|
+
def initialize(access_token: nil, organization_id: nil)
|
7
7
|
@access_token = access_token || ENV.fetch("OPENAI_ACCESS_TOKEN")
|
8
|
+
@organization_id = organization_id || ENV.fetch("OPENAI_ORGANIZATION_ID", nil)
|
8
9
|
end
|
9
10
|
|
10
11
|
def generate(version: default_version, parameters: {})
|
@@ -12,7 +13,8 @@ module OpenAI
|
|
12
13
|
"/#{version}/images/generations",
|
13
14
|
headers: {
|
14
15
|
"Content-Type" => "application/json",
|
15
|
-
"Authorization" => "Bearer #{@access_token}"
|
16
|
+
"Authorization" => "Bearer #{@access_token}",
|
17
|
+
"OpenAI-Organization" => @organization_id
|
16
18
|
},
|
17
19
|
body: parameters.to_json
|
18
20
|
)
|
data/lib/ruby/openai/models.rb
CHANGED
@@ -3,8 +3,9 @@ module OpenAI
|
|
3
3
|
include HTTParty
|
4
4
|
base_uri "https://api.openai.com"
|
5
5
|
|
6
|
-
def initialize(access_token: nil)
|
6
|
+
def initialize(access_token: nil, organization_id: nil)
|
7
7
|
@access_token = access_token || ENV.fetch("OPENAI_ACCESS_TOKEN")
|
8
|
+
@organization_id = organization_id || ENV.fetch("OPENAI_ORGANIZATION_ID", nil)
|
8
9
|
end
|
9
10
|
|
10
11
|
def list(version: default_version)
|
@@ -12,7 +13,8 @@ module OpenAI
|
|
12
13
|
"/#{version}/models",
|
13
14
|
headers: {
|
14
15
|
"Content-Type" => "application/json",
|
15
|
-
"Authorization" => "Bearer #{@access_token}"
|
16
|
+
"Authorization" => "Bearer #{@access_token}",
|
17
|
+
"OpenAI-Organization" => @organization_id
|
16
18
|
}
|
17
19
|
)
|
18
20
|
end
|
@@ -22,7 +24,8 @@ module OpenAI
|
|
22
24
|
"/#{version}/models/#{id}",
|
23
25
|
headers: {
|
24
26
|
"Content-Type" => "application/json",
|
25
|
-
"Authorization" => "Bearer #{@access_token}"
|
27
|
+
"Authorization" => "Bearer #{@access_token}",
|
28
|
+
"OpenAI-Organization" => @organization_id
|
26
29
|
}
|
27
30
|
)
|
28
31
|
end
|
data/lib/ruby/openai/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-openai
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alex
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-12-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dotenv
|