chatgpt2023 0.2.1 → 0.3.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: 4728e79c0d12f0dd5a5ce7a7970f507d6fd79471727fb205f7416b3326fe8985
4
- data.tar.gz: 7ca136ca869d4908c9fa70827b4a2a549cff92633026c1c70e8843886c026b59
3
+ metadata.gz: 9e1847e43e89e75aec42261b773b2f46909463c0a05be57bb532ac2682421088
4
+ data.tar.gz: 751d498aeaaa3eb3b68d977ecbb415385d606282584afa9612fdaf03349f7e59
5
5
  SHA512:
6
- metadata.gz: f403b18eec392d2b1958b1168536ad716f02ddcd7445a3c67fa46916193190ee920020a2902e63c00621135392f580a00e12948b6dfa56a40f5316dd42d591d2
7
- data.tar.gz: bda567ca1b04f4e4350c475d62cc4576887c36d7762bae951dd918269f149419411eb76e309a6190ad5e34cea71db375dd55a2a0b6cddff86ab0495a74506faf
6
+ metadata.gz: 9c3f02bfa4ba351dbfde5d60bc0d74cb8970c46a11d5632ab79b221445549e075cc4abcb03b8a479d7912c919e4a8257239d4f8f117144ea0eede97f7a26df80
7
+ data.tar.gz: 5cbd01a39b78cf3b927ce5a9729c6aabbcf4ff98c5e4e02b90acad8a414102e3c5910887395837bcc76f678ebf5fbd9db094ae3003d80f3f3bd1b887930214d0
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.
@@ -24,6 +25,7 @@ require 'down'
24
25
  # -d '{"model": "text-davinci-003", "prompt": "Say this is a test", "temperature": 0, "max_tokens": 7}'
25
26
 
26
27
  # ChatGpt documentation: https://beta.openai.com/docs/introduction/overview
28
+ # ChatGpt web page: https://chat.openai.com/chat
27
29
 
28
30
  # Usage:
29
31
  # require 'chatgpt2023'
@@ -46,18 +48,40 @@ class ChatGpt2023
46
48
 
47
49
  end
48
50
 
49
- def completions(s, temperature: 0, max_tokens: 7)
51
+ # Example
52
+ # c = ChatGpt2023.new(apikey: 'yourapikey')
53
+ # s = '
54
+ # # Ruby
55
+ # # Ask the user for their name and say "Hello"
56
+ # '
57
+ # r = c.code_completions s, temperature: 0.2
58
+ # puts r.first[:text]
59
+
60
+ def code_completions(s, temperature: 1, max_tokens: 32, n: 1)
50
61
 
51
- r = go_completions(s, temperature: temperature, max_tokens: max_tokens)
52
- raise ChatGpt2023Error, r[:error][:message].inspect if r.has_key? :error
62
+ r = go_code(s, temperature: temperature,
63
+ max_tokens: max_tokens, n: n)
64
+ puts 'code r: ' + r.inspect if @debug
65
+ r[:choices]
53
66
 
67
+ end
68
+
69
+ def code_completion(s, temperature: 1, max_tokens: 32)
70
+ code_completions(s, temperature: temperature, max_tokens: max_tokens)\
71
+ .first[:text].strip
72
+ end
73
+
74
+ def completions(s, temperature: 1, max_tokens: 32, n: 1)
75
+
76
+ r = go_completions(s, temperature: temperature,
77
+ max_tokens: max_tokens, n: n)
54
78
  puts 'completions r: ' + r.inspect if @debug
55
79
  r[:choices]
56
80
 
57
81
  end
58
82
 
59
- def completion(s, temperature: 0, max_tokens: 7)
60
- go_completions(s, temperature: temperature, max_tokens: max_tokens)\
83
+ def completion(s, temperature: 1, max_tokens: 32)
84
+ completions(s, temperature: temperature, max_tokens: max_tokens)\
61
85
  .first[:text].strip
62
86
  end
63
87
 
@@ -84,14 +108,29 @@ class ChatGpt2023
84
108
  end
85
109
 
86
110
  private
111
+
112
+ def go_code(s, temperature: 0, max_tokens: 7, n: 1)
113
+
114
+ h = {
115
+ "model" => 'code-davinci-002',
116
+ "prompt" => s,
117
+ "temperature" => temperature,
118
+ "max_tokens" => max_tokens,
119
+ "n" => n
120
+ }
121
+
122
+ submit('completions', h)
123
+
124
+ end
87
125
 
88
- def go_completions(s, temperature: 0, max_tokens: 7)
126
+ def go_completions(s, temperature: 0, max_tokens: 7, n: 1)
89
127
 
90
128
  h = {
91
129
  "model" => 'text-davinci-003',
92
130
  "prompt" => s,
93
131
  "temperature" => temperature,
94
- "max_tokens" => max_tokens
132
+ "max_tokens" => max_tokens,
133
+ "n" => n
95
134
  }
96
135
 
97
136
  submit('completions', h)
@@ -155,7 +194,57 @@ class ChatGpt2023
155
194
  http.request(request)
156
195
  end
157
196
 
158
- JSON.parse(response.body, symbolize_names: true)
197
+ h = JSON.parse(response.body, symbolize_names: true)
198
+ raise ChatGpt2023Error, h[:error][:message].inspect if h.has_key? :error
199
+
200
+ return h
201
+ end
202
+
203
+ end
204
+
205
+ class CGRecorder < ChatGpt2023
206
+
207
+ def initialize(apikey: nil, indexfile: 'cgindex.xml',
208
+ logfile: 'chatgpt.xml', debug: false)
209
+
210
+ super(apikey: apikey, debug: debug)
211
+ @dx = DynarexDaily.new filename: logfile, fields: %i(prompt result),
212
+ autosave: true, order: 'descending', debug: false
213
+ @index = Dynarex.new(indexfile, schema: 'entries[title]/entry(prompt, ' \
214
+ + 'tags)', order: 'descending', autosave: true)
215
+ @index.title = 'ChatGPT prompt log'
216
+
217
+ end
218
+
219
+ def code_completion(s, tags=nil, temperature: 1, max_tokens: 32)
220
+
221
+ r = code_completions(s, temperature: temperature, max_tokens: max_tokens)\
222
+ .first[:text].strip
223
+ log(s, r, tags)
224
+
225
+ return r
226
+
227
+ end
228
+
229
+ def completion(s, tags=nil, temperature: 1, max_tokens: 32)
230
+
231
+ r = completions(s, temperature: temperature, max_tokens: max_tokens)\
232
+ .first[:text].strip
233
+ log(s, r, tags)
234
+
235
+ return r
236
+
159
237
  end
160
238
 
239
+ alias complete completion
240
+ alias ask completion
241
+
242
+ private
243
+
244
+ def log(prompt, result, tags)
245
+
246
+ @index.create({prompt: prompt, tags: tags})
247
+ @dx.create({prompt: prompt, result: result})
248
+
249
+ end
161
250
  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.1
4
+ version: 0.3.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-07 00:00:00.000000000 Z
39
+ date: 2023-02-13 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