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.
- checksums.yaml +4 -4
- data/.builders/_.rb +1 -0
- data/.builders/boot.rb +40 -0
- data/.builders/generators/01-bootstrap.rb +90 -0
- data/.builders/generators/domain-model.rb +56 -0
- data/.builders/generators/project-plan.rb +32 -0
- data/.rubocop.yml +2 -2
- data/Gemfile +1 -1
- data/docs/domain-model.drawio +31 -0
- data/docs/domain-model.json +269 -0
- data/docs/domain-model.svg +3 -0
- data/docs/project-plan/project.drawio +29 -0
- data/docs/project-plan/project_done.svg +3 -0
- data/docs/project-plan/project_in_progress.svg +3 -0
- data/docs/project-plan/project_todo.svg +3 -0
- data/gpt3-builder.gemspec +1 -0
- data/hooks/update-version +2 -2
- data/lib/gpt3/builder/examples.md +17 -0
- data/lib/gpt3/builder/file_builder.rb +77 -0
- data/lib/gpt3/builder/fine_tune_builder.rb +109 -0
- data/lib/gpt3/builder/gpt3_builder.rb +118 -45
- data/lib/gpt3/builder/known-models.txt +69 -0
- data/lib/gpt3/builder/prompt-delete-text-using-regex.txt +11 -0
- data/lib/gpt3/builder/prompt-tailwind-css-pricing-chart.txt +15 -0
- data/lib/gpt3/builder/version.rb +1 -1
- data/lib/gpt3/builder.rb +2 -2
- metadata +22 -3
@@ -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
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 =
|
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.
|
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
|
-
|
35
|
-
|
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
|
-
|
44
|
-
|
45
|
-
@
|
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
|
-
@
|
50
|
-
@
|
51
|
-
@
|
52
|
-
@
|
53
|
-
@
|
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
|
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
|
-
|
117
|
-
|
118
|
-
|
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
|
-
|
121
|
-
|
158
|
+
self
|
159
|
+
end
|
160
|
+
# rubocop:enable Metrics/ParameterLists
|
122
161
|
|
123
|
-
|
162
|
+
def file_list
|
163
|
+
@response = client.files.list
|
124
164
|
|
125
|
-
|
165
|
+
@response_body = JSON.parse(response.body)
|
126
166
|
|
127
|
-
|
128
|
-
|
129
|
-
|
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
|
-
|
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 =
|
324
|
+
self.prompt = "#{prompt}#{message}\n"
|
252
325
|
end
|
253
326
|
|
254
327
|
def add_block(message)
|
255
|
-
self.prompt =
|
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,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
|
+
|
data/lib/gpt3/builder/version.rb
CHANGED
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
|
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
|
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.
|
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:
|
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.
|
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
|