chatgpt-ruby 0.4.0 → 1.0.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6e959cc78a29b94543ca4a79c21905e11296cd5933b39397a31bdd3652b5bede
4
- data.tar.gz: df28d307836ff2e4827f6fa37cd68839cef2089b8418ced1d85f87b6677b98ea
3
+ metadata.gz: 6a246b757af45ec2b58fd7fad4cda501d6408f273f62c697705a4b85b824c07e
4
+ data.tar.gz: b314a13e482bf33e88d2dd7adec626850612cb1da247ed0a247492dc40bd09af
5
5
  SHA512:
6
- metadata.gz: b06065d572303b32d01ce713968d9f92e582309e356061359a2e216f8afef229e7b5c00376ce805ab84d9612d038ec3f60245ed277c8b5ba24395e1ce4b6a020
7
- data.tar.gz: 0a251cea4f557f855d3f515e786c875f62c2d2ea76d1c02bfbbcb85b2ed84adcc14cbf4dcd31983b3b8b1d285b3deb32cb9b9ca59dfd5165dfcdfaa3f8d863c9
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
@@ -1,12 +1,14 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- chatgpt-ruby (0.4.0)
4
+ chatgpt-ruby (0.6.0)
5
+ rest-client
5
6
 
6
7
  GEM
7
8
  remote: https://rubygems.org/
8
9
  specs:
9
10
  ast (2.4.2)
11
+ docile (1.4.0)
10
12
  domain_name (0.5.20190701)
11
13
  unf (>= 0.0.5, < 1.0.0)
12
14
  http-accept (1.7.0)
@@ -43,6 +45,12 @@ GEM
43
45
  rubocop-ast (1.27.0)
44
46
  parser (>= 3.2.1.0)
45
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)
46
54
  unf (0.1.4)
47
55
  unf_ext
48
56
  unf_ext (0.0.8.2)
@@ -57,6 +65,8 @@ DEPENDENCIES
57
65
  rake (~> 13.0)
58
66
  rest-client
59
67
  rubocop (~> 1.21)
68
+ simplecov
69
+ simplecov_json_formatter
60
70
 
61
71
  BUNDLED WITH
62
72
  2.3.26
data/README.md CHANGED
@@ -1,56 +1,173 @@
1
- # ChatGPTRuby
1
+ # ChatGPT Ruby
2
2
 
3
- The `chatgpt-ruby` gem is a simple Ruby SDK for accessing the OpenAI ChatGPT API. This client makes it easy to integrate the ChatGPT API into your Ruby applications.
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
4
 
5
- ### Bundler
5
+ The `chatgpt-ruby` is a Ruby SDK for the OpenAI API, including methods for generating text, completing prompts, and more ❤️
6
+
7
+ ## Installation
6
8
 
7
9
  Add this line to your application's Gemfile:
8
10
 
9
11
  ```ruby
10
- gem "chatgpt-ruby"
12
+ gem 'chatgpt-ruby'
11
13
  ```
12
14
 
15
+
16
+
13
17
  And then execute:
14
18
 
19
+ ```ruby
15
20
  $ bundle install
21
+ ```
16
22
 
17
- ### Gem install
18
23
 
19
- Or install with:
20
24
 
25
+ Or install it yourself as:
26
+
27
+ ```ruby
21
28
  $ gem install chatgpt-ruby
29
+ ```
22
30
 
23
31
  ## Usage
24
32
 
25
- To use the gem in a Ruby script or application, simply require it and initialize the client:
33
+ To use the ChatGPT API SDK, you will need an API key from OpenAI. You can obtain an API key by signing up for the [OpenAI API beta program](https://beta.openai.com/signup/) .
34
+
35
+ Once you have an API key, you can create a new `ChatGPT::Client` instance with your API key:
36
+
37
+ ```ruby
38
+ require 'chatgpt/client'
39
+
40
+ api_key = 'your-api-key'
41
+ client = ChatGPT::Client.new(api_key)
42
+ ```
43
+
44
+
45
+ ### Completions
46
+
47
+ To generate completions given a prompt, you can use the `completions` method:
48
+
26
49
  ```ruby
27
- require 'chatgpt_client'
50
+ prompt = 'Hello, my name is'
51
+ completions = client.completions(prompt)
28
52
 
29
- client = ChatGPTClient::Client.new('your_api_key')
30
- response = client.chat('Please translate the following English text to French: "Hello, how are you?"')
31
- puts response
53
+ # Output: an array of completion strings
32
54
  ```
33
55
 
34
- Replace 'your_api_key' with your actual ChatGPT API key.
35
56
 
36
- ### Parameters
37
57
 
38
- The `chat` method accepts a mandatory `prompt` parameter and an optional `options` parameter.
58
+ You can customize the generation process by passing in additional parameters as a hash:
59
+
60
+ ```ruby
61
+ params = {
62
+ engine: 'text-davinci-002',
63
+ max_tokens: 50,
64
+ temperature: 0.7
65
+ }
66
+ completions = client.completions(prompt, params)
67
+
68
+ # Output: an array of completion strings
69
+ ```
70
+
71
+
72
+ ### Search
73
+
74
+ To perform a search query given a set of documents and a search query, you can use the `search` method:
75
+
76
+ ```ruby
77
+ documents = ['Document 1', 'Document 2', 'Document 3']
78
+ query = 'Search query'
79
+ results = client.search(documents, query)
80
+
81
+ # Output: an array of search result objects
82
+ ```
83
+
84
+
85
+
86
+ You can customize the search process by passing in additional parameters as a hash:
87
+
88
+ ```ruby
89
+ params = {
90
+ engine: 'ada',
91
+ max_rerank: 100
92
+ }
93
+ results = client.search(documents, query, params)
94
+
95
+ # Output: an array of search result objects
96
+ ```
39
97
 
40
- The `prompt` parameter is a string representing the input you want to send to the ChatGPT API.
41
98
 
42
- The `options` parameter is a hash that can include the following keys:
43
- - `max_tokens`: The maximum number of tokens
99
+ ### Classify
100
+
101
+ To classify a given text, you can use the `classify` method:
102
+
103
+ ```ruby
104
+ text = 'This is a sample text'
105
+ label = client.classify(text)
106
+
107
+ # Output: a string representing the classified label
108
+ ```
109
+
110
+
111
+
112
+ You can customize the classification process by passing in additional parameters as a hash:
113
+
114
+ ```ruby
115
+ params = {
116
+ model: 'text-davinci-002'
117
+ }
118
+ label = client.classify(text, params)
119
+
120
+ # Output: a string representing the classified label
121
+ ```
122
+
123
+
124
+ ### Generate Summaries
125
+
126
+ To generate summaries given a set of documents, you can use the `generate_summaries` method:
127
+
128
+ ```ruby
129
+ documents = ['Document 1', 'Document 2', 'Document 3']
130
+ summary = client.generate_summaries(documents)
131
+
132
+ # Output: a string representing the generated summary
133
+ ```
134
+
135
+
136
+
137
+ You can customize the summary generation process by passing in additional parameters as a hash:
138
+
139
+ ```ruby
140
+ params = {
141
+ model: 'text-davinci-002',
142
+ max_tokens: 100
143
+ }
144
+ summary = client.generate_summaries(documents, params)
145
+
146
+ # Output: a string representing the generated summary
147
+ ```
148
+
149
+
150
+ ### Generate Answers
151
+
152
+ To generate answers given a prompt and a set of documents, you can use the `generate_answers` method:
153
+
154
+ ```ruby
155
+ prompt = 'What is the capital of France?'
156
+ documents = ['France is a country in Europe', 'Paris is the capital of France']
157
+ answer = client.generate_answers(prompt, documents)
158
+
159
+ # Output
160
+ ```
44
161
 
45
162
  ## Development
46
163
 
47
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.
48
165
 
49
- 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`.
50
167
 
51
168
  ## Contributing
52
169
 
53
- 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).
54
171
 
55
172
  ## License
56
173
 
@@ -58,4 +175,4 @@ The gem is available as open source under the terms of the [MIT License](https:/
58
175
 
59
176
  ## Code of Conduct
60
177
 
61
- 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
+
@@ -1,23 +1,119 @@
1
- # lib/chatgpt_api.rb
1
+ # lib/chatgpt/client.rb
2
2
 
3
3
  require 'rest-client'
4
+ require 'json'
4
5
 
5
- module ChatgptRuby
6
+ module ChatGPT
6
7
  class Client
7
8
  def initialize(api_key)
8
9
  @api_key = api_key
9
- @endpoint = 'https://api.chatgpt.com'
10
+ @endpoint = 'https://api.openai.com/v1'
10
11
  end
11
12
 
12
- # Methods for accessing the API here
13
- def generate_response(prompt)
14
- url = "#{@endpoint}/generate"
15
- params = {
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
22
+ def completions(prompt, params = {})
23
+ engine = params[:engine] || 'text-davinci-002'
24
+ max_tokens = params[:max_tokens] || 16
25
+ temperature = params[:temperature] || 0.5
26
+ top_p = params[:top_p] || 1.0
27
+ n = params[:n] || 1
28
+
29
+ url = "#{@endpoint}/engines/#{engine}/completions"
30
+ data = {
31
+ prompt: prompt,
32
+ max_tokens: max_tokens,
33
+ temperature: temperature,
34
+ top_p: top_p,
35
+ n: n
36
+ }
37
+ request_api(url, data)
38
+ end
39
+
40
+ # Search-related methods
41
+ def search(documents, query, params = {})
42
+ engine = params[:engine] || 'ada'
43
+ max_rerank = params[:max_rerank] || 200
44
+
45
+ url = "#{@endpoint}/engines/#{engine}/search"
46
+ data = {
47
+ documents: documents,
48
+ query: query,
49
+ max_rerank: max_rerank
50
+ }
51
+ response = request_api(url, data)
52
+ response['data']
53
+ end
54
+
55
+ # Classification-related methods
56
+ def classify(text, params = {})
57
+ model = params[:model] || 'text-davinci-002'
58
+
59
+ url = "#{@endpoint}/classifications/#{model}"
60
+ data = {
61
+ model: model,
62
+ input: text
63
+ }
64
+ response = request_api(url, data)
65
+ response['data'][0]['label']
66
+ end
67
+
68
+ # Summary-related methods
69
+ def generate_summaries(documents, params = {})
70
+ model = params[:model] || 'text-davinci-002'
71
+ max_tokens = params[:max_tokens] || 60
72
+ temperature = params[:temperature] || 0.5
73
+ top_p = params[:top_p] || 1.0
74
+ frequency_penalty = params[:frequency_penalty] || 0.0
75
+ presence_penalty = params[:presence_penalty] || 0.0
76
+
77
+ url = "#{@endpoint}/engines/#{model}/generate"
78
+ data = {
79
+ prompt: '',
80
+ max_tokens: max_tokens,
81
+ temperature: temperature,
82
+ top_p: top_p,
83
+ frequency_penalty: frequency_penalty,
84
+ presence_penalty: presence_penalty,
85
+ documents: documents
86
+ }
87
+ response = request_api(url, data)
88
+ response['choices'][0]['text']
89
+ end
90
+
91
+ # Answer-generation-related methods
92
+ def generate_answers(prompt, documents, params = {})
93
+ model = params[:model] || 'text-davinci-002'
94
+ max_tokens = params[:max_tokens] || 5
95
+
96
+ url = "#{@endpoint}/engines/#{model}/answers"
97
+ data = {
16
98
  prompt: prompt,
17
- api_key: @api_key
99
+ documents: documents,
100
+ max_tokens: max_tokens
18
101
  }
19
- response = RestClient.get(url, params: params)
20
- JSON.parse(response.body)
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
21
117
  end
22
118
  end
23
119
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Chatgpt
4
4
  module Ruby
5
- VERSION = "0.1.0"
5
+ VERSION = "1.0.0"
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,22 +1,38 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chatgpt-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.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
12
- dependencies: []
13
- description: Write a longer description or delete this line.
11
+ date: 2023-04-30 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rest-client
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ description: This gem provides a Ruby SDK for interacting with the OpenAI API, including
28
+ methods for generating text, completing prompts, and more.
14
29
  email:
15
30
  - nagendra.dhanakeerthi@gmail.com
16
31
  executables: []
17
32
  extensions: []
18
33
  extra_rdoc_files: []
19
34
  files:
35
+ - ".codeclimate.yml"
20
36
  - ".rubocop.yml"
21
37
  - CHANGELOG.md
22
38
  - CODE_OF_CONDUCT.md
@@ -29,10 +45,13 @@ files:
29
45
  - lib/chatgpt/ruby.rb
30
46
  - lib/chatgpt/ruby/version.rb
31
47
  - sig/chatgpt/ruby.rbs
32
- homepage:
48
+ homepage: https://github.com/nagstler/chatgpt-ruby.git
33
49
  licenses:
34
50
  - MIT
35
- metadata: {}
51
+ metadata:
52
+ homepage_uri: https://github.com/nagstler/chatgpt-ruby.git
53
+ source_code_uri: https://github.com/nagstler/chatgpt-ruby.git
54
+ changelog_uri: https://github.com/nagstler/chatgpt-ruby/blob/main/CHANGELOG.md
36
55
  post_install_message:
37
56
  rdoc_options: []
38
57
  require_paths:
@@ -51,5 +70,5 @@ requirements: []
51
70
  rubygems_version: 3.3.26
52
71
  signing_key:
53
72
  specification_version: 4
54
- summary: Write a short summary, because RubyGems requires one.
73
+ summary: A Ruby SDK for the OpenAI API
55
74
  test_files: []