ruby-openai 3.2.0 → 3.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9e8ff1d30efd244fc448e8f473834796b8b02b627a5a4fc4edfdb79062119cfd
4
- data.tar.gz: dfd511d71c4a8d351e298cb6759bc876467840c70d073b0835259d18a4e4aa6e
3
+ metadata.gz: f3d2b8f98be44b7f33fce40f271bccc3dc1c72237df7ad64baed43f4ea79fb51
4
+ data.tar.gz: f19cc5e7155b47e6f7ccb7c5642679e5d8f7a6600e6d4f9e592ebc16313b74f0
5
5
  SHA512:
6
- metadata.gz: 6df6919af3e66c044d7309f6f7272078a12a2532702ced4175365b9ca618b7f6cac88e8aa7d84ed9884fea053d032505b9b1a3be8f7a39cb47c056e2e7a87849
7
- data.tar.gz: 529f048e9a35a7169f688cc49bb78a68b5787919c716dcb8c4017357db3124ed637314c931578b05aeedc76c72045c8f3144682c32f2a3879188270cbe7eae8d
6
+ metadata.gz: 8f2c05fae48718593ea7990c480f6108844a698a943c8db2e3e01f3e31e95ede1ca2a5bd0dec5364a9b1730698c3802e24eecec585d20e59b03e1a421c8a3c4e
7
+ data.tar.gz: 303d6df6cea50a4f9ac50f8cab7329e585e201aeb2532709b161b830896cc1e733e0c48dfa6ebff22d13d930c3a0ff76425b8e0294c7e175a1bc4e07b84710a2
data/.rubocop.yml CHANGED
@@ -9,6 +9,8 @@ Style/Documentation:
9
9
 
10
10
  Layout/LineLength:
11
11
  Max: 100
12
+ Exclude:
13
+ - "**/*.gemspec"
12
14
 
13
15
  Metrics/BlockLength:
14
16
  Exclude:
data/CHANGELOG.md CHANGED
@@ -5,6 +5,19 @@ 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
+ ## [3.4.0] - 2023-03-01
9
+
10
+ ### Added
11
+
12
+ - Add Client#chat endpoint - ChatGPT over the wire!
13
+
14
+ ## [3.3.0] - 2023-02-15
15
+
16
+ ### Changed
17
+
18
+ - Replace ::Ruby::OpenAI namespace with ::OpenAI - thanks [@kmcphillips](https://github.com/kmcphillips) for this work!
19
+ - To upgrade, change `require 'ruby/openai'` to `require 'openai'` and change all references to `Ruby::OpenAI` to `OpenAI`.
20
+
8
21
  ## [3.2.0] - 2023-02-13
9
22
 
10
23
  ### Added
data/Gemfile CHANGED
@@ -7,6 +7,6 @@ gem "byebug", "~> 11.1.3"
7
7
  gem "dotenv", "~> 2.8.1"
8
8
  gem "rake", "~> 13.0"
9
9
  gem "rspec", "~> 3.12"
10
- gem "rubocop", "~> 1.45.1"
10
+ gem "rubocop", "~> 1.46.0"
11
11
  gem "vcr", "~> 6.1.0"
12
12
  gem "webmock", "~> 3.18.1"
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ruby-openai (3.2.0)
4
+ ruby-openai (3.4.0)
5
5
  httparty (>= 0.18.1)
6
6
 
7
7
  GEM
@@ -23,7 +23,7 @@ GEM
23
23
  mini_mime (1.1.2)
24
24
  multi_xml (0.6.0)
25
25
  parallel (1.22.1)
26
- parser (3.2.0.0)
26
+ parser (3.2.1.0)
27
27
  ast (~> 2.4.1)
28
28
  public_suffix (5.0.1)
29
29
  rainbow (3.1.1)
@@ -43,18 +43,18 @@ GEM
43
43
  diff-lcs (>= 1.2.0, < 2.0)
44
44
  rspec-support (~> 3.12.0)
45
45
  rspec-support (3.12.0)
46
- rubocop (1.45.1)
46
+ rubocop (1.46.0)
47
47
  json (~> 2.3)
48
48
  parallel (~> 1.10)
49
49
  parser (>= 3.2.0.0)
50
50
  rainbow (>= 2.2.2, < 4.0)
51
51
  regexp_parser (>= 1.8, < 3.0)
52
52
  rexml (>= 3.2.5, < 4.0)
53
- rubocop-ast (>= 1.24.1, < 2.0)
53
+ rubocop-ast (>= 1.26.0, < 2.0)
54
54
  ruby-progressbar (~> 1.7)
55
55
  unicode-display_width (>= 2.4.0, < 3.0)
56
- rubocop-ast (1.24.1)
57
- parser (>= 3.1.1.0)
56
+ rubocop-ast (1.26.0)
57
+ parser (>= 3.2.1.0)
58
58
  ruby-progressbar (1.11.0)
59
59
  unicode-display_width (2.4.2)
60
60
  vcr (6.1.0)
@@ -71,7 +71,7 @@ DEPENDENCIES
71
71
  dotenv (~> 2.8.1)
72
72
  rake (~> 13.0)
73
73
  rspec (~> 3.12)
74
- rubocop (~> 1.45.1)
74
+ rubocop (~> 1.46.0)
75
75
  ruby-openai!
76
76
  vcr (~> 6.1.0)
77
77
  webmock (~> 3.18.1)
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Ruby::OpenAI
1
+ # Ruby OpenAI
2
2
 
3
3
  [![Gem Version](https://badge.fury.io/rb/ruby-openai.svg)](https://badge.fury.io/rb/ruby-openai)
4
4
  [![GitHub license](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/alexrudall/ruby-openai/blob/main/LICENSE.txt)
@@ -7,7 +7,7 @@
7
7
 
8
8
  Use the [OpenAI API](https://openai.com/blog/openai-api/) with Ruby! 🤖❤️
9
9
 
10
- Generate text with GPT-3, create images with DALL·E, or write code with Codex...
10
+ Generate text with ChatGPT, create images with DALL·E, or write code with Codex...
11
11
 
12
12
  ## Installation
13
13
 
@@ -32,9 +32,13 @@ $ gem install ruby-openai
32
32
  and require with:
33
33
 
34
34
  ```ruby
35
- require "ruby/openai"
35
+ require "openai"
36
36
  ```
37
37
 
38
+ ## Upgrading
39
+
40
+ The `::Ruby::OpenAI` module has been removed and all classes have been moved under the top level `::OpenAI` module. To upgrade, change `require 'ruby/openai'` to `require 'openai'` and change all references to `Ruby::OpenAI` to `OpenAI`.
41
+
38
42
  ## Usage
39
43
 
40
44
  - Get your API key from [https://beta.openai.com/account/api-keys](https://beta.openai.com/account/api-keys)
@@ -53,7 +57,7 @@ For a quick test you can pass your token directly to a new client:
53
57
  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.
54
58
 
55
59
  ```ruby
56
- Ruby::OpenAI.configure do |config|
60
+ OpenAI.configure do |config|
57
61
  config.access_token = ENV.fetch('OPENAI_ACCESS_TOKEN')
58
62
  config.organization_id = ENV.fetch('OPENAI_ORGANIZATION_ID') # Optional.
59
63
  end
@@ -85,9 +89,24 @@ There are different models that can be used to generate text. For a full list an
85
89
  - code-davinci-002
86
90
  - code-cushman-001
87
91
 
92
+ ### ChatGPT
93
+
94
+ ChatGPT is a model that can be used to generate text in a conversational style. You can use it to generate a response to a sequence of [messages](https://platform.openai.com/docs/guides/chat/introduction):
95
+
96
+ ```ruby
97
+ response = client.chat(
98
+ parameters: {
99
+ model: "gpt-3.5-turbo",
100
+ messages: [{ role: "user", content: "Hello!"}],
101
+ })
102
+ puts response.dig("choices", 0, "message", "content")
103
+ => "Hello! How may I assist you today?"
104
+
105
+ ```
106
+
88
107
  ### Completions
89
108
 
90
- Hit the OpenAI API for a completion:
109
+ Hit the OpenAI API for a completion using other GPT-3 models:
91
110
 
92
111
  ```ruby
93
112
  response = client.completions(
@@ -274,4 +293,4 @@ The gem is available as open source under the terms of the [MIT License](https:/
274
293
 
275
294
  ## Code of Conduct
276
295
 
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).
296
+ 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).
data/bin/console CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require "bundler/setup"
4
- require "ruby/openai"
4
+ require "openai"
5
5
 
6
6
  # You can add fixtures and/or initialization code here to make experimenting
7
7
  # with your gem easier. You can also use a different console, if you like.
@@ -3,8 +3,12 @@ module OpenAI
3
3
  URI_BASE = "https://api.openai.com/".freeze
4
4
 
5
5
  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
8
+ end
9
+
10
+ def chat(parameters: {})
11
+ OpenAI::Client.json_post(path: "/chat/completions", parameters: parameters)
8
12
  end
9
13
 
10
14
  def completions(parameters: {})
@@ -70,14 +74,14 @@ module OpenAI
70
74
  end
71
75
 
72
76
  private_class_method def self.uri(path:)
73
- URI_BASE + Ruby::OpenAI.configuration.api_version + path
77
+ URI_BASE + OpenAI.configuration.api_version + path
74
78
  end
75
79
 
76
80
  private_class_method def self.headers
77
81
  {
78
82
  "Content-Type" => "application/json",
79
- "Authorization" => "Bearer #{Ruby::OpenAI.configuration.access_token}",
80
- "OpenAI-Organization" => Ruby::OpenAI.configuration.organization_id
83
+ "Authorization" => "Bearer #{OpenAI.configuration.access_token}",
84
+ "OpenAI-Organization" => OpenAI.configuration.organization_id
81
85
  }
82
86
  end
83
87
  end
@@ -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
@@ -1,8 +1,8 @@
1
1
  module OpenAI
2
2
  class Files
3
3
  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
6
6
  end
7
7
 
8
8
  def list
@@ -1,8 +1,8 @@
1
1
  module OpenAI
2
2
  class Finetunes
3
3
  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
6
6
  end
7
7
 
8
8
  def list
@@ -1,8 +1,8 @@
1
1
  module OpenAI
2
2
  class Images
3
3
  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
6
6
  end
7
7
 
8
8
  def generate(parameters: {})
@@ -1,8 +1,8 @@
1
1
  module OpenAI
2
2
  class Models
3
3
  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
6
6
  end
7
7
 
8
8
  def list
@@ -0,0 +1,3 @@
1
+ module OpenAI
2
+ VERSION = "3.4.0".freeze
3
+ end
data/lib/openai.rb ADDED
@@ -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
data/lib/ruby/openai.rb CHANGED
@@ -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"
data/ruby-openai.gemspec CHANGED
@@ -1,8 +1,8 @@
1
- require_relative "lib/ruby/openai/version"
1
+ require_relative "lib/openai/version"
2
2
 
3
3
  Gem::Specification.new do |spec|
4
4
  spec.name = "ruby-openai"
5
- spec.version = Ruby::OpenAI::VERSION
5
+ spec.version = OpenAI::VERSION
6
6
  spec.authors = ["Alex"]
7
7
  spec.email = ["alexrudall@users.noreply.github.com"]
8
8
 
@@ -26,4 +26,6 @@ Gem::Specification.new do |spec|
26
26
  spec.require_paths = ["lib"]
27
27
 
28
28
  spec.add_dependency "httparty", ">= 0.18.1"
29
+
30
+ spec.post_install_message = "Note if upgrading: The `::Ruby::OpenAI` module has been removed and all classes have been moved under the top level `::OpenAI` module. To upgrade, change `require 'ruby/openai'` to `require 'openai'` and change all references to `Ruby::OpenAI` to `OpenAI`."
29
31
  end
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: 3.2.0
4
+ version: 3.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-02-13 00:00:00.000000000 Z
11
+ date: 2023-03-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty
@@ -24,7 +24,7 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: 0.18.1
27
- description:
27
+ description:
28
28
  email:
29
29
  - alexrudall@users.noreply.github.com
30
30
  executables: []
@@ -48,13 +48,15 @@ files:
48
48
  - Rakefile
49
49
  - bin/console
50
50
  - bin/setup
51
+ - lib/openai.rb
52
+ - lib/openai/client.rb
53
+ - lib/openai/compatibility.rb
54
+ - lib/openai/files.rb
55
+ - lib/openai/finetunes.rb
56
+ - lib/openai/images.rb
57
+ - lib/openai/models.rb
58
+ - lib/openai/version.rb
51
59
  - lib/ruby/openai.rb
52
- - lib/ruby/openai/client.rb
53
- - lib/ruby/openai/files.rb
54
- - lib/ruby/openai/finetunes.rb
55
- - lib/ruby/openai/images.rb
56
- - lib/ruby/openai/models.rb
57
- - lib/ruby/openai/version.rb
58
60
  - pull_request_template.md
59
61
  - ruby-openai.gemspec
60
62
  homepage: https://github.com/alexrudall/ruby-openai
@@ -65,7 +67,10 @@ metadata:
65
67
  source_code_uri: https://github.com/alexrudall/ruby-openai
66
68
  changelog_uri: https://github.com/alexrudall/ruby-openai/blob/main/CHANGELOG.md
67
69
  rubygems_mfa_required: 'true'
68
- post_install_message:
70
+ post_install_message: 'Note if upgrading: The `::Ruby::OpenAI` module has been removed
71
+ and all classes have been moved under the top level `::OpenAI` module. To upgrade,
72
+ change `require ''ruby/openai''` to `require ''openai''` and change all references
73
+ to `Ruby::OpenAI` to `OpenAI`.'
69
74
  rdoc_options: []
70
75
  require_paths:
71
76
  - lib
@@ -80,8 +85,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
80
85
  - !ruby/object:Gem::Version
81
86
  version: '0'
82
87
  requirements: []
83
- rubygems_version: 3.4.5
84
- signing_key:
88
+ rubygems_version: 3.4.6
89
+ signing_key:
85
90
  specification_version: 4
86
91
  summary: A Ruby gem for the OpenAI GPT-3 API
87
92
  test_files: []
@@ -1,5 +0,0 @@
1
- module Ruby
2
- module OpenAI
3
- VERSION = "3.2.0".freeze
4
- end
5
- end