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 +4 -4
- checksums.yaml.gz.sig +0 -0
- data/lib/chatgpt2023.rb +121 -4
- data.tar.gz.sig +0 -0
- metadata +23 -3
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9b89dececa8f5b5da00c97e7e745168c9a0526481f61138a03d5d2b7ff7b4576
|
4
|
+
data.tar.gz: b8d72dc15a1a051493786a53d22ed3a0bf135234bddf5d7d72c1db77a264ed6c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
|
193
|
-
http.request(request)
|
194
|
-
end
|
193
|
+
attempts = 0
|
195
194
|
|
196
|
-
|
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.
|
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-
|
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:
|
110
|
+
summary: 'A ChatGPT API wrapper. #experimental'
|
91
111
|
test_files: []
|
metadata.gz.sig
CHANGED
Binary file
|