gpt3-builder 0.0.3 → 0.0.4

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.
@@ -0,0 +1,3 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
3
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="302px" height="62px" viewBox="-0.5 -0.5 302 62"><defs><linearGradient x1="0%" y1="0%" x2="0%" y2="100%" id="mx-gradient-ffffff-0.9-ffffff-0.1-s-0"><stop offset="0%" style="stop-color: rgb(255, 255, 255); stop-opacity: 0.9;"/><stop offset="100%" style="stop-color: rgb(255, 255, 255); stop-opacity: 0.1;"/></linearGradient></defs><g><rect x="0" y="0" width="300" height="60" rx="9" ry="9" fill="#dae8fc" stroke="#6c8ebf" pointer-events="all"/><path d="M 10.15 -1 Q -1 -1 -1 10.15 L -1 24 Q 150 42 301 24 L 301 10.15 Q 301 -1 289.85 -1 Z" fill="url(#mx-gradient-ffffff-0.9-ffffff-0.1-s-0)" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 298px; height: 1px; padding-top: 30px; margin-left: 1px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Support the different engines: [Ada, Babbage, Curie, Davinci]</div></div></div></foreignObject><text x="150" y="34" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">Support the different engines: [Ada, Babbage, Curi...</text></switch></g></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Text is not SVG - cannot display</text></a></switch></svg>
data/gpt3-builder.gemspec CHANGED
@@ -42,4 +42,5 @@ Gem::Specification.new do |spec|
42
42
  spec.add_dependency 'ruby-openai'
43
43
  # spec.add_dependency 'k_type' , '~> 0.0.0'
44
44
  # spec.add_dependency 'k_util' , '~> 0.0.0'
45
+ spec.metadata['rubygems_mfa_required'] = 'true'
45
46
  end
data/hooks/update-version CHANGED
@@ -19,7 +19,7 @@ namespaces.each do |namespace|
19
19
  indent += 1
20
20
  end
21
21
 
22
- output.push "#{' ' * indent}VERSION = \'#{version}'"
22
+ output.push "#{' ' * indent}VERSION = '#{version}'"
23
23
  indent -= 1
24
24
 
25
25
  namespaces.each do
@@ -30,4 +30,4 @@ end
30
30
  output.push('')
31
31
 
32
32
  printf "%-25<label>s : %<version>s\n", label: 'GEM VERSION', version: version
33
- File.open('lib/gpt3/builder/version.rb', 'w+') { |f| f.write(output.join("\n")) }
33
+ File.write('lib/gpt3/builder/version.rb', output.join("\n"))
@@ -0,0 +1,17 @@
1
+
2
+ ## Chatbot
3
+
4
+ [Default Chat](https://beta.openai.com/playground/p/default-chat) - notice the use of stop words
5
+
6
+ ```json
7
+ {
8
+ "model": "text-davinci-002",
9
+ "prompt": "The following is a conversation with an AI assistant. The assistant is helpful, creative, clever, and very friendly.\n\nHuman: Hello, who are you?\nAI: I am an AI Cyborg from the planet Zandar. What do you want ugly human?\nHuman: \nAI: Wow, you're really ugly!\nHuman: Not as ugly as you Zandarlornian\nAI: I'm sorry, I didn't mean to insult you.\nHuman: It was not an insult, this is my way",
10
+ "temperature": 0.9,
11
+ "max_tokens": 150,
12
+ "top_p": 1,
13
+ "frequency_penalty": 0,
14
+ "presence_penalty": 0.6,
15
+ "stop": [" Human:", " AI:"]
16
+ }
17
+ ```
@@ -0,0 +1,77 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Gpt3
4
+ module Builder
5
+ class FileBuilder
6
+ include KLog::Logging
7
+
8
+ attr_reader :client
9
+
10
+ # List of files
11
+ # OpenAI::Client.new.files.list
12
+ # r["data"]
13
+ # or
14
+ # r["data"][0]["filename"]
15
+
16
+ # {
17
+ # "data": [
18
+ # {
19
+ # "id": "file-ccdDZrC3iZVNiQVeEA6Z66wf",
20
+ # "object": "file",
21
+ # "bytes": 175,
22
+ # "created_at": 1613677385,
23
+ # "filename": "train.jsonl",
24
+ # "purpose": "search"
25
+ # },
26
+ # {
27
+ # "id": "file-XjGxS3KTG0uNmNOK362iJua3",
28
+ # "object": "file",
29
+ # "bytes": 140,
30
+ # "created_at": 1613779121,
31
+ # "filename": "puppy.jsonl",
32
+ # "purpose": "search"
33
+ # }
34
+ # ],
35
+ # "object": "list"
36
+ # }
37
+
38
+ # Upload a file
39
+ # purpose = 'answers'
40
+ # response = OpenAI::Client.new.files.upload(parameters: { file: file, purpose: purpose })
41
+ # r = JSON.parse(response.body)
42
+ # r["filename"]
43
+ # {
44
+ # "id": "file-XjGxS3KTG0uNmNOK362iJua3",
45
+ # "object": "file",
46
+ # "bytes": 140,
47
+ # "created_at": 1613779121,
48
+ # "filename": "mydata.jsonl",
49
+ # "purpose": "fine-tune"
50
+ # }
51
+
52
+ # Retrieve a file
53
+ # response = OpenAI::Client.new.files.retrieve(id: id) }
54
+ # r = JSON.parse(response.body)
55
+ # r["data"]["filename"]
56
+ # {
57
+ # "id": "file-XjGxS3KTG0uNmNOK362iJua3",
58
+ # "object": "file",
59
+ # "bytes": 140,
60
+ # "created_at": 1613779657,
61
+ # "filename": "mydata.jsonl",
62
+ # "purpose": "fine-tune"
63
+ # }
64
+
65
+ # Delete a file
66
+ # response = OpenAI::Client.new.files.delete(id: id)
67
+ # r = JSON.parse(response.body)
68
+ # r["data"]["id"]
69
+ # r["data"]["deleted"]
70
+ # {
71
+ # "id": "file-XjGxS3KTG0uNmNOK362iJua3",
72
+ # "object": "file",
73
+ # "deleted": true
74
+ # }
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,109 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Gpt3
4
+ module Builder
5
+ class FileBuilder
6
+ include KLog::Logging
7
+
8
+ attr_reader :client
9
+
10
+ # List fine-tunes
11
+ # List your organization's fine-tuning jobs
12
+ # https://api.openai.com/v1/fine-tunes
13
+ # {
14
+ # "object": "list",
15
+ # "data": [
16
+ # {
17
+ # "id": "ft-AF1WoRqd3aJAHsqc9NY7iL8F",
18
+ # "object": "fine-tune",
19
+ # "model": "curie",
20
+ # "created_at": 1614807352,
21
+ # "fine_tuned_model": null,
22
+ # "hyperparams": { ... },
23
+ # "organization_id": "org-...",
24
+ # "result_files": [],
25
+ # "status": "pending",
26
+ # "validation_files": [],
27
+ # "training_files": [ { ... } ],
28
+ # "updated_at": 1614807352,
29
+ # },
30
+ # { ... },
31
+ # { ... }
32
+ # ]
33
+ # }
34
+
35
+ # Retrieve fine-tune
36
+ # Gets info about the fine-tune job.
37
+ # https://api.openai.com/v1/fine-tunes/{fine_tune_id}
38
+ # {
39
+ # "id": "ft-AF1WoRqd3aJAHsqc9NY7iL8F",
40
+ # "object": "fine-tune",
41
+ # "model": "curie",
42
+ # "created_at": 1614807352,
43
+ # "events": [
44
+ # {
45
+ # "object": "fine-tune-event",
46
+ # "created_at": 1614807352,
47
+ # "level": "info",
48
+ # "message": "Job enqueued. Waiting for jobs ahead to complete. Queue number: 0."
49
+ # },
50
+ # {
51
+ # "object": "fine-tune-event",
52
+ # "created_at": 1614807356,
53
+ # "level": "info",
54
+ # "message": "Job started."
55
+ # },
56
+ # {
57
+ # "object": "fine-tune-event",
58
+ # "created_at": 1614807861,
59
+ # "level": "info",
60
+ # "message": "Uploaded snapshot: curie:ft-acmeco-2021-03-03-21-44-20."
61
+ # },
62
+ # {
63
+ # "object": "fine-tune-event",
64
+ # "created_at": 1614807864,
65
+ # "level": "info",
66
+ # "message": "Uploaded result files: file-QQm6ZpqdNwAaVC3aSz5sWwLT."
67
+ # },
68
+ # {
69
+ # "object": "fine-tune-event",
70
+ # "created_at": 1614807864,
71
+ # "level": "info",
72
+ # "message": "Job succeeded."
73
+ # }
74
+ # ],
75
+ # "fine_tuned_model": "curie:ft-acmeco-2021-03-03-21-44-20",
76
+ # "hyperparams": {
77
+ # "batch_size": 4,
78
+ # "learning_rate_multiplier": 0.1,
79
+ # "n_epochs": 4,
80
+ # "prompt_loss_weight": 0.1,
81
+ # },
82
+ # "organization_id": "org-...",
83
+ # "result_files": [
84
+ # {
85
+ # "id": "file-QQm6ZpqdNwAaVC3aSz5sWwLT",
86
+ # "object": "file",
87
+ # "bytes": 81509,
88
+ # "created_at": 1614807863,
89
+ # "filename": "compiled_results.csv",
90
+ # "purpose": "fine-tune-results"
91
+ # }
92
+ # ],
93
+ # "status": "succeeded",
94
+ # "validation_files": [],
95
+ # "training_files": [
96
+ # {
97
+ # "id": "file-XGinujblHPwGLSztz8cPS8XY",
98
+ # "object": "file",
99
+ # "bytes": 1547276,
100
+ # "created_at": 1610062281,
101
+ # "filename": "my-data-train.jsonl",
102
+ # "purpose": "fine-tune-train"
103
+ # }
104
+ # ],
105
+ # "updated_at": 1614807865,
106
+ # }
107
+ end
108
+ end
109
+ end
@@ -2,27 +2,31 @@
2
2
 
3
3
  module Gpt3
4
4
  module Builder
5
+ # GPT3 Builder
5
6
  class Gpt3Builder
6
7
  include KLog::Logging
7
8
 
9
+ # Re-write
10
+
11
+ # Prompt builder
12
+ # Pre-prompt sanitization (before applying to prompt, you want to remove useless stuff)
13
+ # - This is essentially a pre-processor or it might be a filter within prompts
14
+ # Executor (run the prompt and store the results)
15
+
8
16
  attr_reader :client
17
+ attr_reader :response
18
+ attr_reader :response_body
9
19
 
10
20
  attr_accessor :prompt
11
21
 
12
22
  attr_accessor :access_token
13
- attr_accessor :engine
14
-
15
- attr_accessor :max_tokens
16
- attr_accessor :temperature
17
- attr_accessor :top_p
18
- attr_accessor :frequency_penalty
19
- attr_accessor :presence_penalty
20
-
21
- # response = client.completions(engine: engine,
22
- # parameters: {
23
- # prompt: prompt,
24
- # })
25
23
 
24
+ attr_accessor :default_engine
25
+ attr_accessor :default_max_tokens
26
+ attr_accessor :default_temperature
27
+ attr_accessor :default_top_p
28
+ attr_accessor :default_frequency_penalty
29
+ attr_accessor :default_presence_penalty
26
30
 
27
31
  # def self.build
28
32
  # init.build
@@ -31,8 +35,9 @@ module Gpt3
31
35
  # Create and initialize the builder.
32
36
  #
33
37
  # @return [Builder] Returns the builder via fluent interface
34
- def self.init() #configuration = nil)
35
- builder = new() #configuration)
38
+ # configuration = nil)
39
+ def self.init
40
+ builder = new # configuration)
36
41
 
37
42
  yield(builder) if block_given?
38
43
 
@@ -40,19 +45,19 @@ module Gpt3
40
45
  end
41
46
 
42
47
  # assigns a builder hash and defines builder methods
43
- def initialize() # configuration = nil)
44
- @access_token = ENV['OPENAI_ACCESS_TOKEN'] # ENV['OPENAI_SECRET_KEY']
45
- @client = OpenAI::Client.new(access_token: access_token)
46
-
47
- @engine = 'davinci-codex'
48
+ # configuration = nil)
49
+ def initialize
50
+ @access_token = ENV.fetch('OPENAI_ACCESS_TOKEN', nil) # ENV['OPENAI_SECRET_KEY']
51
+ @client = OpenAI::Client.new(access_token: access_token)
48
52
 
49
- @max_tokens = 50
50
- @temperature = 0
51
- @top_p = 1
52
- @frequency_penalty = 0
53
- @presence_penalty = 0
53
+ @default_default_engine = 'code-davinci-001'
54
+ @default_max_tokens = 100
55
+ @default_temperature = 0
56
+ @default_top_p = 1
57
+ @default_frequency_penalty = 0
58
+ @default_presence_penalty = 0
54
59
 
55
- @prompt = ''
60
+ @prompt = ''
56
61
 
57
62
  # @target_folders = configuration.target_folders.clone
58
63
  # @template_folders = configuration.template_folders.clone
@@ -92,45 +97,100 @@ module Gpt3
92
97
  def start(message)
93
98
  @started = true
94
99
  add_block(message)
95
-
100
+
96
101
  self
97
102
  end
98
103
 
99
104
  def human(message)
100
105
  @human_question = true
101
106
  add_block("You: #{message}")
102
-
107
+
103
108
  self
104
109
  end
105
110
  alias dude human
106
111
 
112
+ def message(message)
113
+ add_block(message)
114
+
115
+ self
116
+ end
117
+
118
+ def line(message)
119
+ add_line(message)
120
+
121
+ self
122
+ end
123
+
107
124
  def example(example = nil, file: nil)
108
- example = example || ''
125
+ example ||= ''
109
126
  example = File.read(file) if file
110
-
127
+
111
128
  add_block(example)
112
-
129
+
113
130
  self
114
131
  end
115
132
 
116
- def add_file(file, **opts)
117
- # move to command
118
- full_file = opts.key?(:folder_key) ? target_file(file, folder: opts[:folder_key]) : target_file(file)
133
+ # rubocop:disable Metrics/ParameterLists
134
+ def complete(
135
+ engine: default_engine,
136
+ max_tokens: default_max_tokens,
137
+ temperature: default_temperature,
138
+ top_p: default_top_p,
139
+ frequency_penalty: default_frequency_penalty,
140
+ presence_penalty: default_presence_penalty,
141
+ suffix: nil
142
+ )
143
+ parameters = {
144
+ prompt: prompt,
145
+ max_tokens: max_tokens,
146
+ temperature: temperature,
147
+ top_p: top_p,
148
+ frequency_penalty: frequency_penalty,
149
+ presence_penalty: presence_penalty
150
+ }
151
+
152
+ parameters[:suffix] = suffix if suffix
153
+
154
+ @response = client.completions(engine: engine, parameters: parameters)
155
+
156
+ @response_body = JSON.parse(response.body)
119
157
 
120
- # Need logging options that can log these internal details
121
- FileUtils.mkdir_p(File.dirname(full_file))
158
+ self
159
+ end
160
+ # rubocop:enable Metrics/ParameterLists
122
161
 
123
- content = process_any_content(**opts)
162
+ def file_list
163
+ @response = client.files.list
124
164
 
125
- file_write(full_file, content, on_exist: opts[:on_exist])
165
+ @response_body = JSON.parse(response.body)
126
166
 
127
- # Prettier needs to work with the original file name
128
- run_prettier file if opts.key?(:pretty)
129
- # Need support for rubocop -a
167
+ self
168
+ end
169
+
170
+ def write_result(file)
171
+ File.write(file, response_text)
130
172
 
131
173
  self
132
174
  end
133
- alias touch add_file # it is expected that you would not supply any options, just a file name
175
+
176
+ # def add_file(file, **opts)
177
+ # # move to command
178
+ # full_file = opts.key?(:folder_key) ? target_file(file, folder: opts[:folder_key]) : target_file(file)
179
+
180
+ # # Need logging options that can log these internal details
181
+ # FileUtils.mkdir_p(File.dirname(full_file))
182
+
183
+ # content = process_any_content(**opts)
184
+
185
+ # file_write(full_file, content, on_exist: opts[:on_exist])
186
+
187
+ # # Prettier needs to work with the original file name
188
+ # run_prettier file if opts.key?(:pretty)
189
+ # # Need support for rubocop -a
190
+
191
+ # self
192
+ # end
193
+ # alias touch add_file # it is expected that you would not supply any options, just a file name
134
194
 
135
195
  # def make_folder(folder_key = nil, sub_path: nil)
136
196
  # folder_key = current_folder_key if folder_key.nil?
@@ -240,19 +300,32 @@ module Gpt3
240
300
  # end
241
301
 
242
302
  def debug
243
- puts "----------------------------------------------------------------------"
303
+ puts '----------------------------------------------------------------------'
244
304
  puts prompt
245
- puts "----------------------------------------------------------------------"
305
+ puts '----------------------------------------------------------------------'
306
+
307
+ # puts '- Pretty JSON-----------------------------------------------------------'
308
+ # puts JSON.pretty_generate(run_commands.response_body)
309
+ return unless response_body
310
+
311
+ puts '- JSON----------------------------------------------------------------'
312
+ puts response_body['choices'].first['text']
246
313
  end
247
314
 
248
315
  private
249
316
 
317
+ def response_text
318
+ return '' if response_body.nil?
319
+
320
+ response_body['choices'].first['text']
321
+ end
322
+
250
323
  def add_line(message)
251
- self.prompt = self.prompt + message + "\n"
324
+ self.prompt = "#{prompt}#{message}\n"
252
325
  end
253
326
 
254
327
  def add_block(message)
255
- self.prompt = self.prompt + message + "\n\n"
328
+ self.prompt = "#{prompt}#{message}\n\n"
256
329
  end
257
330
  end
258
331
  end
@@ -0,0 +1,69 @@
1
+ code-davinci-002
2
+ code-cushman-001
3
+
4
+
5
+ ada
6
+ ada-code-search-code
7
+ ada-code-search-text
8
+ ada-search-document
9
+ ada-search-query
10
+ ada-similarity
11
+ ada:2020-05-03
12
+ audio-transcribe-001
13
+ babbage
14
+ babbage-code-search-code
15
+ babbage-code-search-text
16
+ babbage-search-document
17
+ babbage-search-query
18
+ babbage-similarity
19
+ babbage:2020-05-03
20
+ code-cushman-001
21
+ code-davinci-001
22
+ code-davinci-002
23
+ code-davinci-edit-001
24
+ code-search-ada-code-001
25
+ code-search-ada-text-001
26
+ code-search-babbage-code-001
27
+ code-search-babbage-text-001
28
+ curie
29
+ curie-instruct-beta
30
+ curie-search-document
31
+ curie-search-query
32
+ curie-similarity
33
+ curie:2020-05-03
34
+ cushman:2020-05-03
35
+ davinci
36
+ davinci-if:3.0.0
37
+ davinci-instruct-beta
38
+ davinci-instruct-beta:2.0.0
39
+ davinci-search-document
40
+ davinci-search-query
41
+ davinci-similarity
42
+ davinci:2020-05-03
43
+ if-curie-v2
44
+ if-davinci-v2
45
+ if-davinci:3.0.0
46
+ text-ada-001
47
+ text-ada:001
48
+ text-babbage-001
49
+ text-babbage:001
50
+ text-curie-001
51
+ text-curie:001
52
+ text-davinci-001
53
+ text-davinci-002
54
+ text-davinci-edit-001
55
+ text-davinci-insert-001
56
+ text-davinci-insert-002
57
+ text-davinci:001
58
+ text-search-ada-doc-001
59
+ text-search-ada-query-001
60
+ text-search-babbage-doc-001
61
+ text-search-babbage-query-001
62
+ text-search-curie-doc-001
63
+ text-search-curie-query-001
64
+ text-search-davinci-doc-001
65
+ text-search-davinci-query-001
66
+ text-similarity-ada-001
67
+ text-similarity-babbage-001
68
+ text-similarity-curie-001
69
+ text-similarity-davinci-001
@@ -0,0 +1,11 @@
1
+ A function in ruby that deletes any text that matches a regex
2
+
3
+
4
+ A:
5
+
6
+ def delete_text(text, regex)
7
+ text.gsub(regex, '')
8
+ end
9
+
10
+
11
+ <!--((.*)|[^<]*|[^!]*|[^-]*|[^>]*)-->
@@ -0,0 +1,15 @@
1
+ <!--
2
+ Create a Tailwind CSS component of a pricing chart with three cards representing three plans.
3
+
4
+ The first plan is a hobby plan worth $69 per month with 3 features.
5
+
6
+ The 2nd plan is the small business plan worth $99 per month with 7 features.
7
+
8
+ The third plan is for enterprises worth $169 per month with 12 features.
9
+
10
+ The small business plan should be highlighted
11
+ -->
12
+
13
+ [insert]
14
+ </section>
15
+
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Gpt3
4
4
  module Builder
5
- VERSION = '0.0.3'
5
+ VERSION = '0.0.4'
6
6
  end
7
7
  end
data/lib/gpt3/builder.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'k_log'
4
- require "ruby/openai"
4
+ require 'ruby/openai'
5
5
 
6
6
  require 'gpt3/builder/version'
7
7
  require 'gpt3/builder/gpt3_builder'
@@ -15,7 +15,7 @@ module Gpt3
15
15
  end
16
16
  end
17
17
 
18
- if ENV['KLUE_DEBUG']&.to_s&.downcase == 'true'
18
+ if ENV.fetch('KLUE_DEBUG', 'false').downcase == 'true'
19
19
  namespace = 'Gpt3Builder::Version'
20
20
  file_path = $LOADED_FEATURES.find { |f| f.include?('gpt3/builder/version') }
21
21
  version = Gpt3::Builder::VERSION.ljust(9)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gpt3-builder
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Cruwys
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-09-24 00:00:00.000000000 Z
11
+ date: 2022-10-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: k_log
@@ -46,6 +46,11 @@ executables: []
46
46
  extensions: []
47
47
  extra_rdoc_files: []
48
48
  files:
49
+ - ".builders/_.rb"
50
+ - ".builders/boot.rb"
51
+ - ".builders/generators/01-bootstrap.rb"
52
+ - ".builders/generators/domain-model.rb"
53
+ - ".builders/generators/project-plan.rb"
49
54
  - ".github/workflows/main.yml"
50
55
  - ".gitignore"
51
56
  - ".rspec"
@@ -63,11 +68,24 @@ files:
63
68
  - bin/kgitsync
64
69
  - bin/khotfix
65
70
  - bin/setup
71
+ - docs/domain-model.drawio
72
+ - docs/domain-model.json
73
+ - docs/domain-model.svg
74
+ - docs/project-plan/project.drawio
75
+ - docs/project-plan/project_done.svg
76
+ - docs/project-plan/project_in_progress.svg
77
+ - docs/project-plan/project_todo.svg
66
78
  - gpt3-builder.gemspec
67
79
  - hooks/pre-commit
68
80
  - hooks/update-version
69
81
  - lib/gpt3/builder.rb
82
+ - lib/gpt3/builder/examples.md
83
+ - lib/gpt3/builder/file_builder.rb
84
+ - lib/gpt3/builder/fine_tune_builder.rb
70
85
  - lib/gpt3/builder/gpt3_builder.rb
86
+ - lib/gpt3/builder/known-models.txt
87
+ - lib/gpt3/builder/prompt-delete-text-using-regex.txt
88
+ - lib/gpt3/builder/prompt-tailwind-css-pricing-chart.txt
71
89
  - lib/gpt3/builder/version.rb
72
90
  homepage: http://appydave.com/gems/gpt3-builder
73
91
  licenses:
@@ -76,6 +94,7 @@ metadata:
76
94
  homepage_uri: http://appydave.com/gems/gpt3-builder
77
95
  source_code_uri: https://github.com/klueless-io/gpt3-builder
78
96
  changelog_uri: https://github.com/klueless-io/gpt3-builder/commits/master
97
+ rubygems_mfa_required: 'true'
79
98
  post_install_message:
80
99
  rdoc_options: []
81
100
  require_paths:
@@ -91,7 +110,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
91
110
  - !ruby/object:Gem::Version
92
111
  version: '0'
93
112
  requirements: []
94
- rubygems_version: 3.2.7
113
+ rubygems_version: 3.1.6
95
114
  signing_key:
96
115
  specification_version: 4
97
116
  summary: Gpt3 Builder provides builder pattern for creating GTP3 questions and answers