chatgpt-ruby 0.6.0 → 1.0.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: 7aa91296be7cab7d9f1f5f1b2b6e55fa784c4a8760fabebbaac3cf903268da1d
4
- data.tar.gz: cd8a13397002dec2a38da0ad766ce3b9301ca3d6bc5efa2669b30851d3ebc4ca
3
+ metadata.gz: 6a246b757af45ec2b58fd7fad4cda501d6408f273f62c697705a4b85b824c07e
4
+ data.tar.gz: b314a13e482bf33e88d2dd7adec626850612cb1da247ed0a247492dc40bd09af
5
5
  SHA512:
6
- metadata.gz: adf9e9cdc0e6b3e834d86e388b2c6319a42292c302333cc4a039817c9b4136e1394e00dff859c9f2359674728bf550171a22d64387089accdf48aed2d023658f
7
- data.tar.gz: f1d0932b4ad810440543fa9b538a52190f6355ef892356519373748eb002f94a4d3de35f234fbd120c0bcd959b1f609fd6f35bbd27cd2125009a0b84e11dd8bd
6
+ metadata.gz: 2cd02878303337251add7d71e82bd9d29504313217dfeb6bcc2228a9d61f14abe0306523e55374465d431e65f438106b8054936b22d9d2a6de9aaa7b1d1e8a29
7
+ data.tar.gz: b30e1470736ccfd7ebd26c380792eb1759707bb630bbb3d4ad2dc446968d6e414c3ace6ac3164e7681ff57f07445a50d9025e72b5c497f77e6b3de949a537b79
data/.codeclimate.yml ADDED
@@ -0,0 +1,8 @@
1
+ version: "2"
2
+ checks:
3
+ rubocop:
4
+ enabled: true
5
+ channel: "stable"
6
+ plugins:
7
+ test-reporter:
8
+ enabled: true
data/Gemfile CHANGED
@@ -11,4 +11,11 @@ gem "minitest", "~> 5.0"
11
11
 
12
12
  gem "rubocop", "~> 1.21"
13
13
 
14
- gem 'rest-client'
14
+ gem 'rest-client'
15
+
16
+ group :test do
17
+ gem 'simplecov', require: false
18
+ gem 'simplecov_json_formatter', require: false
19
+ end
20
+
21
+
data/Gemfile.lock CHANGED
@@ -8,6 +8,7 @@ GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
10
  ast (2.4.2)
11
+ docile (1.4.0)
11
12
  domain_name (0.5.20190701)
12
13
  unf (>= 0.0.5, < 1.0.0)
13
14
  http-accept (1.7.0)
@@ -44,6 +45,12 @@ GEM
44
45
  rubocop-ast (1.27.0)
45
46
  parser (>= 3.2.1.0)
46
47
  ruby-progressbar (1.13.0)
48
+ simplecov (0.22.0)
49
+ docile (~> 1.1)
50
+ simplecov-html (~> 0.11)
51
+ simplecov_json_formatter (~> 0.1)
52
+ simplecov-html (0.12.3)
53
+ simplecov_json_formatter (0.1.4)
47
54
  unf (0.1.4)
48
55
  unf_ext
49
56
  unf_ext (0.0.8.2)
@@ -58,6 +65,8 @@ DEPENDENCIES
58
65
  rake (~> 13.0)
59
66
  rest-client
60
67
  rubocop (~> 1.21)
68
+ simplecov
69
+ simplecov_json_formatter
61
70
 
62
71
  BUNDLED WITH
63
72
  2.3.26
data/README.md CHANGED
@@ -1,6 +1,8 @@
1
- # ChatGPTRuby
1
+ # ChatGPT Ruby
2
2
 
3
- The `chatgpt-ruby` is a Ruby SDK for the OpenAI API, including methods for generating text, completing prompts, and more.
3
+ [![Gem Version](https://badge.fury.io/rb/chatgpt-ruby.svg)](https://badge.fury.io/rb/chatgpt-ruby) [![License](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![Maintainability](https://api.codeclimate.com/v1/badges/08c7e7b58e9fbe7156eb/maintainability)](https://codeclimate.com/github/nagstler/chatgpt-ruby/maintainability) [![Test Coverage](https://api.codeclimate.com/v1/badges/08c7e7b58e9fbe7156eb/test_coverage)](https://codeclimate.com/github/nagstler/chatgpt-ruby/test_coverage) [![CI](https://github.com/nagstler/chatgpt-ruby/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/nagstler/chatgpt-ruby/actions/workflows/ci.yml) [![GitHub contributors](https://img.shields.io/github/contributors/nagstler/chatgpt-ruby)](https://github.com/nagstler/chatgpt-ruby/graphs/contributors)
4
+
5
+ The `chatgpt-ruby` is a Ruby SDK for the OpenAI API, including methods for generating text, completing prompts, and more ❤️
4
6
 
5
7
  ## Installation
6
8
 
@@ -33,7 +35,7 @@ To use the ChatGPT API SDK, you will need an API key from OpenAI. You can obtain
33
35
  Once you have an API key, you can create a new `ChatGPT::Client` instance with your API key:
34
36
 
35
37
  ```ruby
36
- require 'chatgpt_api'
38
+ require 'chatgpt/client'
37
39
 
38
40
  api_key = 'your-api-key'
39
41
  client = ChatGPT::Client.new(api_key)
@@ -161,11 +163,11 @@ answer = client.generate_answers(prompt, documents)
161
163
 
162
164
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
163
165
 
164
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
166
+ To install this gem onto your local machine, run `bundle exec rake install`.
165
167
 
166
168
  ## Contributing
167
169
 
168
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/chatgpt-ruby. 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/[USERNAME]/chatgpt-ruby/blob/main/CODE_OF_CONDUCT.md).
170
+ Bug reports and pull requests are welcome on GitHub at https://github.com/nagstler/chatgpt-ruby. 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/nagstler/chatgpt-ruby/blob/main/CODE_OF_CONDUCT.md).
169
171
 
170
172
  ## License
171
173
 
@@ -173,4 +175,4 @@ The gem is available as open source under the terms of the [MIT License](https:/
173
175
 
174
176
  ## Code of Conduct
175
177
 
176
- Everyone interacting in the Chatgpt::Ruby project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/[USERNAME]/chatgpt-ruby/blob/main/CODE_OF_CONDUCT.md).
178
+ Everyone interacting in the Chatgpt::Ruby project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/nagstler/chatgpt-ruby/blob/main/CODE_OF_CONDUCT.md).
data/Rakefile CHANGED
@@ -3,8 +3,10 @@
3
3
  require "bundler/gem_tasks"
4
4
  require "rake/testtask"
5
5
 
6
+
6
7
  Rake::TestTask.new(:test) do |t|
7
8
  t.libs << "test"
9
+ t.pattern = 'test/**/*_test.rb'
8
10
  t.libs << "lib"
9
11
  t.test_files = FileList["test/**/test_*.rb"]
10
12
  end
@@ -14,3 +16,4 @@ require "rubocop/rake_task"
14
16
  RuboCop::RakeTask.new
15
17
 
16
18
  task default: %i[test rubocop]
19
+
@@ -10,6 +10,15 @@ module ChatGPT
10
10
  @endpoint = 'https://api.openai.com/v1'
11
11
  end
12
12
 
13
+ # Helper method to prepare headers
14
+ def headers
15
+ {
16
+ 'Content-Type' => 'application/json',
17
+ 'Authorization' => "Bearer #{@api_key}"
18
+ }
19
+ end
20
+
21
+ # Completion-related methods
13
22
  def completions(prompt, params = {})
14
23
  engine = params[:engine] || 'text-davinci-002'
15
24
  max_tokens = params[:max_tokens] || 16
@@ -18,10 +27,6 @@ module ChatGPT
18
27
  n = params[:n] || 1
19
28
 
20
29
  url = "#{@endpoint}/engines/#{engine}/completions"
21
- headers = {
22
- 'Content-Type' => 'application/json',
23
- 'Authorization' => "Bearer #{@api_key}"
24
- }
25
30
  data = {
26
31
  prompt: prompt,
27
32
  max_tokens: max_tokens,
@@ -29,44 +34,38 @@ module ChatGPT
29
34
  top_p: top_p,
30
35
  n: n
31
36
  }
32
- response = RestClient.post(url, data.to_json, headers)
33
- JSON.parse(response.body)
37
+ request_api(url, data)
34
38
  end
35
39
 
40
+ # Search-related methods
36
41
  def search(documents, query, params = {})
37
42
  engine = params[:engine] || 'ada'
38
43
  max_rerank = params[:max_rerank] || 200
39
44
 
40
45
  url = "#{@endpoint}/engines/#{engine}/search"
41
- headers = {
42
- 'Content-Type' => 'application/json',
43
- 'Authorization' => "Bearer #{@api_key}"
44
- }
45
46
  data = {
46
47
  documents: documents,
47
48
  query: query,
48
49
  max_rerank: max_rerank
49
50
  }
50
- response = RestClient.post(url, data.to_json, headers)
51
- JSON.parse(response.body)['data']
51
+ response = request_api(url, data)
52
+ response['data']
52
53
  end
53
54
 
55
+ # Classification-related methods
54
56
  def classify(text, params = {})
55
57
  model = params[:model] || 'text-davinci-002'
56
58
 
57
59
  url = "#{@endpoint}/classifications/#{model}"
58
- headers = {
59
- 'Content-Type' => 'application/json',
60
- 'Authorization' => "Bearer #{@api_key}"
61
- }
62
60
  data = {
63
61
  model: model,
64
62
  input: text
65
63
  }
66
- response = RestClient.post(url, data.to_json, headers)
67
- JSON.parse(response.body)['data'][0]['label']
64
+ response = request_api(url, data)
65
+ response['data'][0]['label']
68
66
  end
69
67
 
68
+ # Summary-related methods
70
69
  def generate_summaries(documents, params = {})
71
70
  model = params[:model] || 'text-davinci-002'
72
71
  max_tokens = params[:max_tokens] || 60
@@ -76,10 +75,6 @@ module ChatGPT
76
75
  presence_penalty = params[:presence_penalty] || 0.0
77
76
 
78
77
  url = "#{@endpoint}/engines/#{model}/generate"
79
- headers = {
80
- 'Content-Type' => 'application/json',
81
- 'Authorization' => "Bearer #{@api_key}"
82
- }
83
78
  data = {
84
79
  prompt: '',
85
80
  max_tokens: max_tokens,
@@ -89,26 +84,36 @@ module ChatGPT
89
84
  presence_penalty: presence_penalty,
90
85
  documents: documents
91
86
  }
92
- response = RestClient.post(url, data.to_json, headers)
93
- JSON.parse(response.body)['choices'][0]['text']
87
+ response = request_api(url, data)
88
+ response['choices'][0]['text']
94
89
  end
95
90
 
91
+ # Answer-generation-related methods
96
92
  def generate_answers(prompt, documents, params = {})
97
93
  model = params[:model] || 'text-davinci-002'
98
94
  max_tokens = params[:max_tokens] || 5
99
95
 
100
96
  url = "#{@endpoint}/engines/#{model}/answers"
101
- headers = {
102
- 'Content-Type' => 'application/json',
103
- 'Authorization' => "Bearer #{@api_key}"
104
- }
105
97
  data = {
106
98
  prompt: prompt,
107
99
  documents: documents,
108
100
  max_tokens: max_tokens
109
101
  }
110
- response = RestClient.post(url, data.to_json, headers)
111
- JSON.parse(response.body)['data'][0]['answer']
102
+ response = request_api(url, data)
103
+ response['data'][0]['answer']
104
+ end
105
+
106
+ private
107
+
108
+ # Helper method to make API requests
109
+ def request_api(url, data)
110
+ begin
111
+ response = RestClient.post(url, data.to_json, headers)
112
+ JSON.parse(response.body)
113
+ rescue RestClient::ExceptionWithResponse => e
114
+ error_msg = JSON.parse(e.response.body)['error']['message']
115
+ raise RestClient::ExceptionWithResponse.new("#{e.message}: #{error_msg} (#{e.http_code})"), nil, e.backtrace
116
+ end
112
117
  end
113
118
  end
114
119
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Chatgpt
4
4
  module Ruby
5
- VERSION = "0.6.0"
5
+ VERSION = "1.0.0"
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chatgpt-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nagendra Dhanakeerthi
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-03-22 00:00:00.000000000 Z
11
+ date: 2023-04-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rest-client
@@ -32,6 +32,7 @@ executables: []
32
32
  extensions: []
33
33
  extra_rdoc_files: []
34
34
  files:
35
+ - ".codeclimate.yml"
35
36
  - ".rubocop.yml"
36
37
  - CHANGELOG.md
37
38
  - CODE_OF_CONDUCT.md