openai_101 1.0.0 → 1.2.1
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 +39 -0
- data/.builders/generators/01-bootstrap.rb +135 -0
- data/.releaserc.json +1 -1
- data/.rubocop.yml +7 -24
- data/.tool-versions +1 -1
- data/CHANGELOG.md +18 -11
- data/README.md +41 -65
- data/lib/openai101/sample.rb +10 -0
- data/lib/{openai_101 → openai101}/version.rb +1 -1
- data/lib/openai_101.rb +7 -9
- data/package-lock.json +2225 -1386
- data/package.json +2 -5
- metadata +18 -52
- data/bin/automate-chatgpt.js +0 -60
- data/bin/automate-midjourney.js +0 -75
- data/bin/convert_webp_to_png.rb +0 -86
- data/bin/gpt_context_gatherer.rb +0 -63
- data/course/course.md +0 -64
- data/course/images/beautiful-llm-models.png +0 -0
- data/course/images/prompts/beautiful-llm-models.txt +0 -1
- data/course/images/prompts/series-2-appydave-gpt-summit.txt +0 -1
- data/course/images/series-2-appydave-gpt-summit.png +0 -0
- data/gpt-context/openai-documentation.md +0 -498
- data/gpt-context/ruby-openai-documenation.md +0 -747
- data/gpt-context/theme-prompts.csv +0 -21
- data/lib/openai_101/tools/automate-images-chatgpt.js +0 -60
- data/lib/openai_101/tools/automate-images-midjourney.js +0 -75
- data/lib/openai_101/tools/bulk_image_bot/base_automator.js +0 -53
- data/lib/openai_101/tools/bulk_image_bot/chatgpt_automator.js +0 -27
- data/lib/openai_101/tools/bulk_image_bot/midjourney_automator.js +0 -49
- data/lib/openai_101/tools/clean_ruby_errors.rb +0 -274
- data/lib/openai_101/tools/edl_to_chapters.rb +0 -56
- data/lib/openai_101/tools/file_content_gatherer.rb +0 -36
- data/lib/openai_101/tools/webp_to_png.rb +0 -124
- /data/lib/{openai_101 → openai101}/config/openai.rb +0 -0
data/package.json
CHANGED
@@ -1,14 +1,11 @@
|
|
1
1
|
{
|
2
2
|
"name": "openai_101",
|
3
|
-
"version": "1.
|
4
|
-
"description": "OpenAI 101
|
3
|
+
"version": "1.2.1",
|
4
|
+
"description": "OpenAI 101 working through the API endpoints",
|
5
5
|
"scripts": {
|
6
6
|
"release": "semantic-release"
|
7
7
|
},
|
8
|
-
"dependencies": {},
|
9
8
|
"devDependencies": {
|
10
|
-
"commander": "^10.0.1",
|
11
|
-
"robotjs": "^0.6.0",
|
12
9
|
"@klueless-js/semantic-release-rubygem": "github:klueless-js/semantic-release-rubygem",
|
13
10
|
"@semantic-release/changelog": "^6.0.3",
|
14
11
|
"@semantic-release/git": "^10.0.1",
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: openai_101
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Cruwys
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-06-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: clipboard
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '3'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '3'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: k_log
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -52,42 +52,30 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: mini_magick
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - "~>"
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '4'
|
62
|
-
type: :runtime
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - "~>"
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: '4'
|
69
55
|
- !ruby/object:Gem::Dependency
|
70
56
|
name: ruby-openai
|
71
57
|
requirement: !ruby/object:Gem::Requirement
|
72
58
|
requirements:
|
73
59
|
- - "~>"
|
74
60
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
61
|
+
version: '7'
|
76
62
|
type: :runtime
|
77
63
|
prerelease: false
|
78
64
|
version_requirements: !ruby/object:Gem::Requirement
|
79
65
|
requirements:
|
80
66
|
- - "~>"
|
81
67
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
83
|
-
description: " OpenAI 101
|
84
|
-
endpoints\n"
|
68
|
+
version: '7'
|
69
|
+
description: " OpenAI 101 working through the API endpoints\n"
|
85
70
|
email:
|
86
71
|
- david@ideasmen.com.au
|
87
72
|
executables: []
|
88
73
|
extensions: []
|
89
74
|
extra_rdoc_files: []
|
90
75
|
files:
|
76
|
+
- ".builders/_.rb"
|
77
|
+
- ".builders/boot.rb"
|
78
|
+
- ".builders/generators/01-bootstrap.rb"
|
91
79
|
- ".releaserc.json"
|
92
80
|
- ".rspec"
|
93
81
|
- ".rubocop.yml"
|
@@ -99,32 +87,12 @@ files:
|
|
99
87
|
- LICENSE.txt
|
100
88
|
- README.md
|
101
89
|
- Rakefile
|
102
|
-
- bin/automate-chatgpt.js
|
103
|
-
- bin/automate-midjourney.js
|
104
90
|
- bin/console
|
105
|
-
- bin/convert_webp_to_png.rb
|
106
|
-
- bin/gpt_context_gatherer.rb
|
107
91
|
- bin/setup
|
108
|
-
-
|
109
|
-
-
|
110
|
-
-
|
111
|
-
- course/images/prompts/series-2-appydave-gpt-summit.txt
|
112
|
-
- course/images/series-2-appydave-gpt-summit.png
|
113
|
-
- gpt-context/openai-documentation.md
|
114
|
-
- gpt-context/ruby-openai-documenation.md
|
115
|
-
- gpt-context/theme-prompts.csv
|
92
|
+
- lib/openai101/config/openai.rb
|
93
|
+
- lib/openai101/sample.rb
|
94
|
+
- lib/openai101/version.rb
|
116
95
|
- lib/openai_101.rb
|
117
|
-
- lib/openai_101/config/openai.rb
|
118
|
-
- lib/openai_101/tools/automate-images-chatgpt.js
|
119
|
-
- lib/openai_101/tools/automate-images-midjourney.js
|
120
|
-
- lib/openai_101/tools/bulk_image_bot/base_automator.js
|
121
|
-
- lib/openai_101/tools/bulk_image_bot/chatgpt_automator.js
|
122
|
-
- lib/openai_101/tools/bulk_image_bot/midjourney_automator.js
|
123
|
-
- lib/openai_101/tools/clean_ruby_errors.rb
|
124
|
-
- lib/openai_101/tools/edl_to_chapters.rb
|
125
|
-
- lib/openai_101/tools/file_content_gatherer.rb
|
126
|
-
- lib/openai_101/tools/webp_to_png.rb
|
127
|
-
- lib/openai_101/version.rb
|
128
96
|
- package-lock.json
|
129
97
|
- package.json
|
130
98
|
- sig/openai_101.rbs
|
@@ -133,12 +101,10 @@ licenses:
|
|
133
101
|
- MIT
|
134
102
|
metadata:
|
135
103
|
homepage_uri: http://appydave.com/gems/openai_101
|
136
|
-
source_code_uri: https://github.com/
|
137
|
-
changelog_uri: https://github.com/
|
104
|
+
source_code_uri: https://github.com/appydave/openai_101
|
105
|
+
changelog_uri: https://github.com/appydave/openai_101/blob/main/CHANGELOG.md
|
138
106
|
rubygems_mfa_required: 'true'
|
139
|
-
post_install_message:
|
140
|
-
JavaScript dependencies. These are optional command line tools that can be helpful
|
141
|
-
but not required
|
107
|
+
post_install_message:
|
142
108
|
rdoc_options: []
|
143
109
|
require_paths:
|
144
110
|
- lib
|
@@ -146,7 +112,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
146
112
|
requirements:
|
147
113
|
- - ">="
|
148
114
|
- !ruby/object:Gem::Version
|
149
|
-
version: '3.
|
115
|
+
version: '3.0'
|
150
116
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
151
117
|
requirements:
|
152
118
|
- - ">="
|
@@ -156,5 +122,5 @@ requirements: []
|
|
156
122
|
rubygems_version: 3.3.5
|
157
123
|
signing_key:
|
158
124
|
specification_version: 4
|
159
|
-
summary: OpenAI 101
|
125
|
+
summary: OpenAI 101 working through the API endpoints
|
160
126
|
test_files: []
|
data/bin/automate-chatgpt.js
DELETED
@@ -1,60 +0,0 @@
|
|
1
|
-
const { Command } = require('commander');
|
2
|
-
const fs = require('fs');
|
3
|
-
const robot = require("robotjs");
|
4
|
-
|
5
|
-
const program = new Command();
|
6
|
-
|
7
|
-
program
|
8
|
-
.option('-f, --file <filename>', 'The file to read prompts from', 'prompts.txt')
|
9
|
-
.option('-o, --completed-file <filename>', 'The file to write completed prompts to', 'completed.txt')
|
10
|
-
.option('-i, --interval <seconds>', 'The interval in seconds between prompts', 80)
|
11
|
-
.option('-m, --max-images <number>', 'The maximum number of images to process', 20);
|
12
|
-
|
13
|
-
program.parse(process.argv);
|
14
|
-
|
15
|
-
function read_prompts_from_file(file, maxImages) {
|
16
|
-
const prompts = fs.readFileSync(file, 'utf-8').split('\n').filter(Boolean);
|
17
|
-
return prompts.slice(0, maxImages);
|
18
|
-
}
|
19
|
-
|
20
|
-
function remove_prompt_from_file(file, prompt) {
|
21
|
-
const prompts = fs.readFileSync(file, 'utf-8').split('\n').filter(Boolean);
|
22
|
-
const index = prompts.indexOf(prompt);
|
23
|
-
if (index !== -1) {
|
24
|
-
prompts.splice(index, 1);
|
25
|
-
fs.writeFileSync(file, prompts.join('\n'));
|
26
|
-
}
|
27
|
-
}
|
28
|
-
|
29
|
-
function append_prompt_to_file(file, prompt) {
|
30
|
-
fs.appendFileSync(file, `${prompt}\n`);
|
31
|
-
}
|
32
|
-
|
33
|
-
function wait(ms) {
|
34
|
-
return new Promise(resolve => setTimeout(resolve, ms));
|
35
|
-
}
|
36
|
-
|
37
|
-
async function send_prompt_to_chat(prompt) {
|
38
|
-
const formattedPrompt = `create image: ${prompt}`;
|
39
|
-
robot.typeString(formattedPrompt);
|
40
|
-
robot.keyTap('enter');
|
41
|
-
}
|
42
|
-
|
43
|
-
async function start() {
|
44
|
-
console.log('Starting Image Creation Automation');
|
45
|
-
console.log('Please open the ChatGPT interface where you intend to use this script.');
|
46
|
-
console.log('Automation will begin in 10 seconds.');
|
47
|
-
await wait(10000);
|
48
|
-
|
49
|
-
const prompts = read_prompts_from_file(program.opts().file, parseInt(program.opts().maxImages));
|
50
|
-
for (let prompt of prompts) {
|
51
|
-
console.log(`Sending prompt "${prompt}"...`);
|
52
|
-
await send_prompt_to_chat(prompt);
|
53
|
-
await wait(program.opts().interval * 1000);
|
54
|
-
remove_prompt_from_file(program.opts().file, prompt);
|
55
|
-
append_prompt_to_file(program.opts().completedFile, prompt);
|
56
|
-
}
|
57
|
-
console.log('Automation complete.');
|
58
|
-
}
|
59
|
-
|
60
|
-
start();
|
data/bin/automate-midjourney.js
DELETED
@@ -1,75 +0,0 @@
|
|
1
|
-
const { Command } = require('commander');
|
2
|
-
const fs = require('fs');
|
3
|
-
const robot = require("robotjs");
|
4
|
-
|
5
|
-
const program = new Command();
|
6
|
-
|
7
|
-
program
|
8
|
-
.option('-f, --file <filename>', 'The file to read prompts from', 'prompts.txt')
|
9
|
-
.option('-o, --completed-file <filename>', 'The file to write completed prompts to', 'completed.txt')
|
10
|
-
.option('-i, --interval <seconds>', 'The interval in seconds between prompts', 4)
|
11
|
-
.option('-p, --prompts-per-session <prompts>', 'The number of prompts to process in a session', 7)
|
12
|
-
.option('-w, --wait-between-sessions <seconds>', 'The number of seconds to wait between sessions', 180);
|
13
|
-
|
14
|
-
program.parse(process.argv);
|
15
|
-
|
16
|
-
function read_next_prompt_from_file(file) {
|
17
|
-
const prompts = fs.readFileSync(file, 'utf-8').split('\n').filter(Boolean);
|
18
|
-
return prompts.shift();
|
19
|
-
}
|
20
|
-
|
21
|
-
function remove_prompt_from_file(file, prompt) {
|
22
|
-
const lockfile = `${file}.lock`;
|
23
|
-
fs.writeFileSync(lockfile, '', { flag: 'wx' });
|
24
|
-
const prompts = fs.readFileSync(file, 'utf-8').split('\n').filter(Boolean);
|
25
|
-
const index = prompts.indexOf(prompt);
|
26
|
-
prompts.splice(index, 1);
|
27
|
-
fs.writeFileSync(file, prompts.join('\n'));
|
28
|
-
fs.unlinkSync(lockfile);
|
29
|
-
}
|
30
|
-
|
31
|
-
function append_prompt_to_file(file, prompt) {
|
32
|
-
const lockfile = `${file}.lock`;
|
33
|
-
fs.writeFileSync(lockfile, '', { flag: 'wx' });
|
34
|
-
fs.appendFileSync(file, `${prompt}\n`);
|
35
|
-
fs.unlinkSync(lockfile);
|
36
|
-
}
|
37
|
-
|
38
|
-
function wait(ms) {
|
39
|
-
const end = Date.now() + ms;
|
40
|
-
while (Date.now() < end) {
|
41
|
-
// Wait
|
42
|
-
}
|
43
|
-
}
|
44
|
-
|
45
|
-
function send_prompt_to_discord(prompt) {
|
46
|
-
const formattedPrompt = `/imagine prompt: ${prompt}`;
|
47
|
-
robot.typeString(formattedPrompt);
|
48
|
-
robot.keyTap('enter');
|
49
|
-
}
|
50
|
-
|
51
|
-
function start() {
|
52
|
-
console.log('Starting MidJourney Automation');
|
53
|
-
console.log('Please open Discord and navigate to the MidJourney channel.');
|
54
|
-
console.log('Automation will begin in 10 seconds.');
|
55
|
-
wait(10 * 1000);
|
56
|
-
|
57
|
-
let index = 0;
|
58
|
-
let prompt = read_next_prompt_from_file(program.opts().file);
|
59
|
-
while (prompt) {
|
60
|
-
console.log(`Sending prompt "${prompt}"...`);
|
61
|
-
send_prompt_to_discord(prompt);
|
62
|
-
wait(program.opts().interval * 1000);
|
63
|
-
remove_prompt_from_file(program.opts().file, prompt);
|
64
|
-
append_prompt_to_file(program.opts().completedFile, prompt);
|
65
|
-
index++;
|
66
|
-
if (index % program.opts().promptsPerSession === 0) {
|
67
|
-
console.log(`Pausing for ${program.opts().waitBetweenSessions} seconds.`);
|
68
|
-
wait(program.opts().waitBetweenSessions * 1000);
|
69
|
-
}
|
70
|
-
prompt = read_next_prompt_from_file(program.opts().file);
|
71
|
-
}
|
72
|
-
console.log('Automation complete.');
|
73
|
-
}
|
74
|
-
|
75
|
-
start();
|
data/bin/convert_webp_to_png.rb
DELETED
@@ -1,86 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# frozen_string_literal: true
|
3
|
-
|
4
|
-
require 'pry'
|
5
|
-
require 'optparse'
|
6
|
-
require_relative '../lib/openai_101/tools/webp_to_png'
|
7
|
-
|
8
|
-
options = {
|
9
|
-
prefix: nil,
|
10
|
-
debug: false,
|
11
|
-
dry_run: false
|
12
|
-
}
|
13
|
-
|
14
|
-
OptionParser.new do |opts|
|
15
|
-
opts.banner = 'Usage: convert_webp_to_png.rb [options]'
|
16
|
-
|
17
|
-
opts.on('-s', '--source=SOURCE', 'Source directory containing WEBP files') do |source|
|
18
|
-
options[:source_folder] = source
|
19
|
-
end
|
20
|
-
|
21
|
-
opts.on('-t', '--target=TARGET', 'Target directory for PNG files') do |target|
|
22
|
-
options[:target_folder] = target
|
23
|
-
end
|
24
|
-
|
25
|
-
opts.on('-f', '--filename=FILENAME', 'Specific target filename for the PNG output') do |filename|
|
26
|
-
options[:target_filename] = filename
|
27
|
-
end
|
28
|
-
|
29
|
-
opts.on('-p', '--prefix=PREFIX', 'Optional prefix for the target filename') do |prefix|
|
30
|
-
options[:prefix] = prefix
|
31
|
-
end
|
32
|
-
|
33
|
-
opts.on('-d', '--debug', 'Enable debug mode') do
|
34
|
-
options[:debug] = true
|
35
|
-
end
|
36
|
-
|
37
|
-
opts.on('--dry-run', 'Simulate the conversion process without making any changes') do
|
38
|
-
options[:dry_run] = true
|
39
|
-
end
|
40
|
-
|
41
|
-
opts.on('-h', '--help', 'Prints this help') do
|
42
|
-
puts opts
|
43
|
-
exit
|
44
|
-
end
|
45
|
-
end.parse!
|
46
|
-
|
47
|
-
unless options[:target_filename]
|
48
|
-
puts 'A target filename is required.'
|
49
|
-
exit
|
50
|
-
end
|
51
|
-
|
52
|
-
converter = Openai101::Tools::WebpToPng.new(
|
53
|
-
source_folder: options[:source_folder],
|
54
|
-
target_folder: options[:target_folder],
|
55
|
-
target_filename: options[:target_filename],
|
56
|
-
prefix: options[:prefix]
|
57
|
-
)
|
58
|
-
|
59
|
-
if options[:debug]
|
60
|
-
puts "Source folder : #{converter.source_folder}"
|
61
|
-
puts "Target folder : #{converter.target_folder}"
|
62
|
-
puts "Target filename : #{converter.target_filename}"
|
63
|
-
puts "Source filename : #{converter.source_filename}"
|
64
|
-
puts "Prefix : #{converter.prefix}"
|
65
|
-
puts "Target prompt : #{converter.prompt}"
|
66
|
-
puts "Target PNG file : #{converter.target_png_file}"
|
67
|
-
puts "Target Prompt file : #{converter.target_prompt_file}"
|
68
|
-
end
|
69
|
-
|
70
|
-
if options[:dry_run]
|
71
|
-
puts 'Dry run enabled - no changes will be made.'
|
72
|
-
exit
|
73
|
-
end
|
74
|
-
|
75
|
-
converter.sanitize_all_webp_files
|
76
|
-
|
77
|
-
if converter.source?
|
78
|
-
converter
|
79
|
-
.convert
|
80
|
-
.store_prompt
|
81
|
-
.backup_source
|
82
|
-
.delete_source
|
83
|
-
puts 'Conversion and processing complete.'
|
84
|
-
else
|
85
|
-
puts "\e[31mNo source file found\e[0m"
|
86
|
-
end
|
data/bin/gpt_context_gatherer.rb
DELETED
@@ -1,63 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# frozen_string_literal: true
|
3
|
-
|
4
|
-
# Usage:
|
5
|
-
# ./bin/gpt_context_gatherer.rb -d -i 'lib/openai_101/tools/**/*.rb'
|
6
|
-
# ./bin/gpt_context_gatherer.rb -d -i 'lib/openai_101/tools/**/*' -e 'node_modules/**/*' -e 'package-lock.json' -e 'lib/openai_101/tools/prompts/*.txt'
|
7
|
-
#
|
8
|
-
# Get GPT Context Gatherer code
|
9
|
-
# ./bin/gpt_context_gatherer.rb -i 'bin/**/*gather*.rb' -i 'lib/openai_101/tools/**/*gather*.rb'
|
10
|
-
require 'optparse'
|
11
|
-
require 'clipboard'
|
12
|
-
require_relative '../lib/openai_101/tools/file_content_gatherer'
|
13
|
-
|
14
|
-
options = {
|
15
|
-
include_patterns: [],
|
16
|
-
exclude_patterns: [],
|
17
|
-
debug: false
|
18
|
-
}
|
19
|
-
|
20
|
-
OptionParser.new do |opts|
|
21
|
-
opts.banner = 'Usage: gather_content.rb [options]'
|
22
|
-
|
23
|
-
opts.on('-i', '--include PATTERN', 'Pattern or file to include (can be used multiple times)') do |pattern|
|
24
|
-
options[:include_patterns] << pattern
|
25
|
-
end
|
26
|
-
|
27
|
-
opts.on('-e', '--exclude PATTERN', 'Pattern or file to exclude (can be used multiple times)') do |pattern|
|
28
|
-
options[:exclude_patterns] << pattern
|
29
|
-
end
|
30
|
-
|
31
|
-
opts.on('-d', '--debug', 'Enable debug mode') do
|
32
|
-
options[:debug] = true
|
33
|
-
end
|
34
|
-
|
35
|
-
opts.on_tail('-h', '--help', 'Show this message') do
|
36
|
-
puts opts
|
37
|
-
puts "\nExamples:"
|
38
|
-
puts " #{File.basename($PROGRAM_NAME)} -i 'lib/**/*.rb' -e 'lib/excluded/**/*.rb' -d"
|
39
|
-
puts " #{File.basename($PROGRAM_NAME)} --include 'src/**/*.js' --exclude 'src/vendor/**/*.js'"
|
40
|
-
|
41
|
-
puts ''
|
42
|
-
puts ' # Get GPT Context Gatherer code that is found in any folder (bin, lib & spec)'
|
43
|
-
puts " #{File.basename($PROGRAM_NAME)} -i '**/*gather*.rb'"
|
44
|
-
exit
|
45
|
-
end
|
46
|
-
end.parse!
|
47
|
-
|
48
|
-
pp options if options[:debug]
|
49
|
-
|
50
|
-
gatherer = Openai101::Tools::FileContentGatherer.new(
|
51
|
-
include_patterns: options[:include_patterns],
|
52
|
-
exclude_patterns: options[:exclude_patterns]
|
53
|
-
)
|
54
|
-
|
55
|
-
content = gatherer.build
|
56
|
-
|
57
|
-
if options[:debug]
|
58
|
-
puts '-' * 80
|
59
|
-
puts content
|
60
|
-
puts '-' * 80
|
61
|
-
end
|
62
|
-
|
63
|
-
Clipboard.copy(content)
|
data/course/course.md
DELETED
@@ -1,64 +0,0 @@
|
|
1
|
-
# OpenAI 101
|
2
|
-
|
3
|
-
> OpenAI 101 Series on using OpenAI ChatGPT, DALL·E, and other OpenAI endpoints
|
4
|
-
|
5
|
-
As a software developer, I want to understand OpenAI endpoints and capabilities, so that I can use ChatGPT effectively
|
6
|
-
|
7
|
-
## Overview
|
8
|
-
|
9
|
-
Compreshensive guide to using OpenAI endpoints and capabilities, in this section we will look at the building blocks for this series and what we plan to cover.
|
10
|
-
|
11
|
-
- [Built On](#built-on)
|
12
|
-
- [Hello World](#achieving-hello-world-status)
|
13
|
-
- Configure OpenAI API
|
14
|
-
|
15
|
-
|
16
|
-
## Built On
|
17
|
-
|
18
|
-
- Ruby Gem (Library)
|
19
|
-
- Dependencies
|
20
|
-
- `dotenv` for environment variables
|
21
|
-
- `ruby-openai` for OpenAI API
|
22
|
-
- Tools
|
23
|
-
- `convert_webp_to_png` for converting ChatGPT images from WebP to PNG
|
24
|
-
- `automate-images-chatgpt` for running bulk image creation in ChatGPT/DALL·E
|
25
|
-
- `automate-images-midjourney` for running bulk image creation in MidJourney
|
26
|
-
- `edl_to_chapters` for converting EDL time codes to chapters in YouTube video description
|
27
|
-
|
28
|
-
- GPT Context Documents
|
29
|
-
- OpenAI documentation
|
30
|
-
- Ruby OpenAI documentation
|
31
|
-
|
32
|
-
## Achieving Hello World Status
|
33
|
-
|
34
|
-
- Configure OpenAI API
|
35
|
-
- Create an account
|
36
|
-
- Create an API key
|
37
|
-
- Add API key to `.env` file
|
38
|
-
- Load `.env` file
|
39
|
-
- Use API key to authenticate with OpenAI API
|
40
|
-
- Make first simple prompt request
|
41
|
-
- text completion
|
42
|
-
- Models are Sexy
|
43
|
-
- Model list
|
44
|
-
|
45
|
-
## What we will cover infographic
|
46
|
-
|
47
|
-
TODO: Add infographic
|
48
|
-
|
49
|
-
Notes:
|
50
|
-
|
51
|
-
- List of endpoints
|
52
|
-
- List of usecases
|
53
|
-
- 2nd Brain
|
54
|
-
- GPT Context used for code generation
|
55
|
-
- Code Generation
|
56
|
-
- Text to Image
|
57
|
-
- Image to Text (Vision)
|
58
|
-
- Text to Speech
|
59
|
-
- Speech to Text
|
60
|
-
- Samples in 4 languages (GPT as a Polyglot Developer)
|
61
|
-
- Ruby
|
62
|
-
- Python
|
63
|
-
- JavaScript
|
64
|
-
- REST API (cURL)
|
Binary file
|
@@ -1 +0,0 @@
|
|
1
|
-
A mystical illustration depicting three beautiful women representing large language models, set in an environment inspired by Pocahontas. Each woman
|
@@ -1 +0,0 @@
|
|
1
|
-
An_image_of_a_computer_nerd__characterized_by_glasses_and_casual_tech-themed_attire__standing_confidently_on_a_stage._The_backdrop_is_a_large_screen_d
|
Binary file
|