chatgpt2023 0.2.2 → 0.4.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: 9ec634a55d06fe1dbbeec12535c076677953903146f57aad99bdb1090fdb1c5c
4
- data.tar.gz: 53b6db1a22dabbc4d21948e9d257d93dae12814bf13ef98e6d795f45b9a14ab8
3
+ metadata.gz: 9b89dececa8f5b5da00c97e7e745168c9a0526481f61138a03d5d2b7ff7b4576
4
+ data.tar.gz: b8d72dc15a1a051493786a53d22ed3a0bf135234bddf5d7d72c1db77a264ed6c
5
5
  SHA512:
6
- metadata.gz: 35a5f4aa64030d07af1b053a3adaeb827aaa2ad8d0b545df5cef516ab07d6574cf4715029481ba283dbe40a83cb8ed2b09738c1f916656818f42ec97c3e9a303
7
- data.tar.gz: 96a6868c366028eacaf522b8d8a795034b56f473f0b3aab801b672d779f2de1b694ce295232f2dc2e9c4b2a49e02f55dd56e5a16ab3c537652b9b48ae3bc8a93
6
+ metadata.gz: 31f3e1e57bbd60a724dff54a8317bd8501d939f797d5dd1bc673b9814f581f313d475d2e43900757057e64e5ab2d6e8106cdf055719c16ae935895f9283a2d81
7
+ data.tar.gz: 96e1288e2a79d823d18aaeeb6716f7239c26bc956d1a807530cf64a78ead4a162055103256ab7f6352ef56218198b4de01f9e7e6cf2bc83ce3236729d7861862
checksums.yaml.gz.sig CHANGED
Binary file
data/lib/chatgpt2023.rb CHANGED
@@ -6,6 +6,7 @@ require 'net/http'
6
6
  require 'uri'
7
7
  require 'json'
8
8
  require 'down'
9
+ require 'dynarex-daily'
9
10
 
10
11
 
11
12
  # description: 1st experiment at playing with the ChatGPT API.
@@ -189,14 +190,130 @@ class ChatGpt2023
189
190
  use_ssl: uri.scheme == "https",
190
191
  }
191
192
 
192
- response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
193
- http.request(request)
194
- end
193
+ attempts = 0
195
194
 
196
- h = JSON.parse(response.body, symbolize_names: true)
195
+ begin
196
+
197
+ attempts += 1
198
+
199
+ response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
200
+ http.request(request)
201
+ end
202
+
203
+ h = JSON.parse(response.body, symbolize_names: true)
204
+
205
+ if h[:error] then
206
+ puts 'warning:' + h[:error][:message]
207
+ sleep 5
208
+ end
209
+
210
+ end while h.has_key?(:error) and attempts <= 5
211
+
197
212
  raise ChatGpt2023Error, h[:error][:message].inspect if h.has_key? :error
198
213
 
199
214
  return h
200
215
  end
201
216
 
202
217
  end
218
+
219
+ class CGRecorder < ChatGpt2023
220
+
221
+ attr_reader :index
222
+
223
+ def initialize(apikey: nil, indexfile: 'cgindex.xml',
224
+ logfile: 'chatgpt.xml', debug: false)
225
+
226
+ super(apikey: apikey, debug: debug)
227
+ @dx = DynarexDaily.new filename: logfile, fields: %i(prompt result),
228
+ autosave: true, order: 'descending', debug: false
229
+ @index = Dynarex.new(indexfile, schema: 'entries[title]/entry(prompt, ' \
230
+ + 'tags)', order: 'descending', autosave: true)
231
+ title = 'ChatGPT prompt log'
232
+ @index.title = title
233
+
234
+ end
235
+
236
+ def code_completion(s, tags=nil, temperature: 1, max_tokens: 2000)
237
+
238
+ r = code_completions(s, temperature: temperature, max_tokens: max_tokens)\
239
+ .first[:text].strip
240
+ log(s, r, tags)
241
+
242
+ return r
243
+
244
+ end
245
+
246
+ def completion(s, tags=nil, temperature: 1, max_tokens: 1000)
247
+
248
+ r = completions(s, temperature: temperature, max_tokens: max_tokens)\
249
+ .first[:text].strip
250
+ log(s, r, tags)
251
+
252
+ return r
253
+
254
+ end
255
+
256
+ alias complete completion
257
+ alias ask completion
258
+
259
+ private
260
+
261
+ def log(prompt, result, tags)
262
+
263
+ @index.create({prompt: prompt, tags: tags})
264
+ @dx.create({prompt: prompt, result: result})
265
+
266
+ end
267
+ end
268
+
269
+ class ChatAway
270
+
271
+ # statement below used for debugging
272
+ #attr_reader :dx, :prompts
273
+
274
+ def initialize(questions, apikey: nil, filepath: '/tmp/chatgpt', debug: false)
275
+
276
+ @debug = debug
277
+
278
+ FileUtils.mkdir_p filepath
279
+ idxfile = File.join(filepath, 'index.xml')
280
+ cgfile = File.join(filepath, 'chatgpt.xml')
281
+
282
+ @dx = questions.is_a?(Dynarex) ? questions : Dynarex.new(questions)
283
+ @chat = CGRecorder.new(apikey: apikey, indexfile: idxfile, logfile: cgfile)
284
+ @prompts = @chat.index.all.map(&:prompt)
285
+
286
+ end
287
+
288
+ def start()
289
+
290
+ @dx.all.each do |rx|
291
+
292
+ if @prompts.include?(rx.prompt) and rx.redo != 'true'
293
+ next
294
+ end
295
+
296
+ type = rx.type == 'code' ? :code_completion : :completion
297
+
298
+ prompt = rx.prompt
299
+
300
+ puts 'prompt: ' + prompt
301
+
302
+ attempts = 0
303
+
304
+ begin
305
+ r = @chat.method(type).call prompt
306
+ rescue
307
+ puts 'Something not working! ' + ($!).inspect
308
+ sleep 2
309
+ attempts += 1
310
+ retry if attempts < 4
311
+ end
312
+
313
+ sleep 2
314
+
315
+ end
316
+
317
+ end
318
+
319
+ end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chatgpt2023
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Robertson
@@ -36,7 +36,7 @@ cert_chain:
36
36
  6FQD1/GISew7VvxUJdptXeuVNIsdNKxvL3RpfLCuFsi1WXyJ4k3odRMTmS0kAfTy
37
37
  J4sZZW9RNfabTMQQY7DIs3tUAn6i+O0r9lo=
38
38
  -----END CERTIFICATE-----
39
- date: 2023-02-13 00:00:00.000000000 Z
39
+ date: 2023-02-14 00:00:00.000000000 Z
40
40
  dependencies:
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: down
@@ -58,6 +58,26 @@ dependencies:
58
58
  - - ">="
59
59
  - !ruby/object:Gem::Version
60
60
  version: 5.4.0
61
+ - !ruby/object:Gem::Dependency
62
+ name: dynarex-daily
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '0.7'
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ version: 0.7.0
71
+ type: :runtime
72
+ prerelease: false
73
+ version_requirements: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - "~>"
76
+ - !ruby/object:Gem::Version
77
+ version: '0.7'
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ version: 0.7.0
61
81
  description:
62
82
  email: digital.robertson@gmail.com
63
83
  executables: []
@@ -87,5 +107,5 @@ requirements: []
87
107
  rubygems_version: 3.4.4
88
108
  signing_key:
89
109
  specification_version: 4
90
- summary: 1st experiment at playing with the ChatGPT API
110
+ summary: 'A ChatGPT API wrapper. #experimental'
91
111
  test_files: []
metadata.gz.sig CHANGED
Binary file