chatgpt-ruby 1.0.0 → 1.1.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: 6a246b757af45ec2b58fd7fad4cda501d6408f273f62c697705a4b85b824c07e
4
- data.tar.gz: b314a13e482bf33e88d2dd7adec626850612cb1da247ed0a247492dc40bd09af
3
+ metadata.gz: 9ab25c3c1b76e0b3249dbeba1c4b0772c4c6f7d34580005f3888ff09c2829453
4
+ data.tar.gz: 3feffdb2bed24d6464bdd945b6a94abb1a752567fac19d2866b5430dfffda019
5
5
  SHA512:
6
- metadata.gz: 2cd02878303337251add7d71e82bd9d29504313217dfeb6bcc2228a9d61f14abe0306523e55374465d431e65f438106b8054936b22d9d2a6de9aaa7b1d1e8a29
7
- data.tar.gz: b30e1470736ccfd7ebd26c380792eb1759707bb630bbb3d4ad2dc446968d6e414c3ace6ac3164e7681ff57f07445a50d9025e72b5c497f77e6b3de949a537b79
6
+ metadata.gz: d42c42272c0f17cecc040f2796f08181cc858b744a5fbf33d6a26c31aa8990352b6f022832a6b9b61d25cf9b8577939783a93ce6e250a3c4458dfec16d4d43f1
7
+ data.tar.gz: f9a3cd15ff2901c09361ba53dd71d3ea7263669069126672b390444b11a8d660805cb34a7ea71b792afd5208c6971c3d374d58e3bb74fe2cccbc4af3a23baa5d
data/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
+ ## [1.0.0] - 2023-04-30
2
+
3
+ ### Added
4
+
5
+ - Initial release of the `chatgpt-ruby` gem.
6
+ - Implements ChatGPT Client with methods for completions, search, classification, summary, and answer generation.
7
+ - Includes unit tests for each method.
8
+
1
9
  ## [Unreleased]
2
10
 
3
11
  ## [0.1.0] - 2023-03-22
4
12
 
5
- - Initial release
13
+ - Initial release
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- chatgpt-ruby (0.6.0)
4
+ chatgpt-ruby (1.0.0)
5
5
  rest-client
6
6
 
7
7
  GEM
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
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
- The `chatgpt-ruby` is a Ruby SDK for the OpenAI API, including methods for generating text, completing prompts, and more ❤️
5
+ The `chatgpt-ruby` is a Ruby SDK for the OpenAI API, providing methods for generating text and completing prompts using the ChatGPT model.
6
6
 
7
7
  ## Installation
8
8
 
@@ -12,16 +12,12 @@ Add this line to your application's Gemfile:
12
12
  gem 'chatgpt-ruby'
13
13
  ```
14
14
 
15
-
16
-
17
15
  And then execute:
18
16
 
19
17
  ```ruby
20
18
  $ bundle install
21
19
  ```
22
20
 
23
-
24
-
25
21
  Or install it yourself as:
26
22
 
27
23
  ```ruby
@@ -41,8 +37,7 @@ api_key = 'your-api-key'
41
37
  client = ChatGPT::Client.new(api_key)
42
38
  ```
43
39
 
44
-
45
- ### Completions
40
+ ## Completions
46
41
 
47
42
  To generate completions given a prompt, you can use the `completions` method:
48
43
 
@@ -53,8 +48,6 @@ completions = client.completions(prompt)
53
48
  # Output: an array of completion strings
54
49
  ```
55
50
 
56
-
57
-
58
51
  You can customize the generation process by passing in additional parameters as a hash:
59
52
 
60
53
  ```ruby
@@ -65,100 +58,10 @@ params = {
65
58
  }
66
59
  completions = client.completions(prompt, params)
67
60
 
61
+ puts completions["choices"].map { |c| c["text"] }
68
62
  # Output: an array of completion strings
69
63
  ```
70
64
 
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
- ```
97
-
98
-
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
- ```
161
-
162
65
  ## Development
163
66
 
164
67
  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.
@@ -1,16 +1,20 @@
1
- # lib/chatgpt/client.rb
2
-
3
1
  require 'rest-client'
4
2
  require 'json'
5
3
 
6
4
  module ChatGPT
7
5
  class Client
6
+ # Initialize the client with the API key
7
+ #
8
+ # @param api_key [String] The API key for the GPT-3 service
8
9
  def initialize(api_key)
9
10
  @api_key = api_key
11
+ # Base endpoint for the OpenAI API
10
12
  @endpoint = 'https://api.openai.com/v1'
11
13
  end
12
14
 
13
- # Helper method to prepare headers
15
+ # Prepare headers for the API request
16
+ #
17
+ # @return [Hash] The headers for the API request
14
18
  def headers
15
19
  {
16
20
  'Content-Type' => 'application/json',
@@ -18,15 +22,24 @@ module ChatGPT
18
22
  }
19
23
  end
20
24
 
21
- # Completion-related methods
25
+ # Generate completions based on a given prompt
26
+ #
27
+ # @param prompt [String] The prompt to be completed
28
+ # @param params [Hash] Additional parameters for the completion request
29
+ #
30
+ # @return [Hash] The completion results from the API
22
31
  def completions(prompt, params = {})
32
+ # Set default parameters
23
33
  engine = params[:engine] || 'text-davinci-002'
24
34
  max_tokens = params[:max_tokens] || 16
25
35
  temperature = params[:temperature] || 0.5
26
36
  top_p = params[:top_p] || 1.0
27
37
  n = params[:n] || 1
28
38
 
39
+ # Construct the URL for the completion request
29
40
  url = "#{@endpoint}/engines/#{engine}/completions"
41
+
42
+ # Prepare the data for the request
30
43
  data = {
31
44
  prompt: prompt,
32
45
  max_tokens: max_tokens,
@@ -34,86 +47,36 @@ module ChatGPT
34
47
  top_p: top_p,
35
48
  n: n
36
49
  }
50
+
51
+ # Make the request to the API
37
52
  request_api(url, data)
38
53
  end
39
54
 
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 = {
98
- prompt: prompt,
99
- documents: documents,
100
- max_tokens: max_tokens
101
- }
102
- response = request_api(url, data)
103
- response['data'][0]['answer']
104
- end
105
-
106
55
  private
107
-
108
- # Helper method to make API requests
109
- def request_api(url, data)
56
+ # Make a request to the API
57
+ #
58
+ # @param url [String] The URL for the request
59
+ # @param data [Hash] The data to be sent in the request
60
+ # @param method [Symbol] The HTTP method for the request (:post by default)
61
+ #
62
+ # @return [Hash] The response from the API
63
+ #
64
+ # @raise [RestClient::ExceptionWithResponse] If the API request fails
65
+ def request_api(url, data, method = :post)
110
66
  begin
111
- response = RestClient.post(url, data.to_json, headers)
67
+ # Execute the request
68
+ response = RestClient::Request.execute(method: method, url: url, payload: data.to_json, headers: headers)
69
+
70
+ # Parse and return the response body
112
71
  JSON.parse(response.body)
113
72
  rescue RestClient::ExceptionWithResponse => e
73
+ # Parse the error message from the API response
114
74
  error_msg = JSON.parse(e.response.body)['error']['message']
75
+
76
+ # Raise an exception with the API error message
115
77
  raise RestClient::ExceptionWithResponse.new("#{e.message}: #{error_msg} (#{e.http_code})"), nil, e.backtrace
116
78
  end
117
79
  end
80
+
118
81
  end
119
82
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Chatgpt
4
4
  module Ruby
5
- VERSION = "1.0.0"
5
+ VERSION = "1.1.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: 1.0.0
4
+ version: 1.1.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-04-30 00:00:00.000000000 Z
11
+ date: 2023-06-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rest-client