chatgpt-rb 0.1.4 → 0.1.5
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/bin/chatgpt-rb +48 -25
- data/lib/chatgpt_rb/conversation.rb +14 -1
- data/lib/chatgpt_rb/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4833d50d716b3f34e13dc2936f3b837ff0346ecfe35d42c2755f1c0d48989883
|
4
|
+
data.tar.gz: c2220ac57c216ea81125552274e65567b4076b127acdc1d62a54daaa427a665f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dc3972ef878ce27bb6576bbc7fcc9e39cbdb364abfa35b762fd7bb2e77b4d025389300630953c8ea8e1d88b7d57af7979116a4af1b63639ddaf3ecd7ad16adee
|
7
|
+
data.tar.gz: 8bb0f8541137f062bdbf716cb1de37114186caaa4d0bcd279ac4cda0d892698b454862af25f923dc854a870defef2425a3c891c5df5fcfd4a222e82e006d39be
|
data/bin/chatgpt-rb
CHANGED
@@ -6,11 +6,6 @@ require "reline"
|
|
6
6
|
require "optparse"
|
7
7
|
require_relative "./../lib/chatgpt_rb"
|
8
8
|
|
9
|
-
begin
|
10
|
-
stty_save = `stty -g`.chomp
|
11
|
-
rescue
|
12
|
-
end
|
13
|
-
|
14
9
|
options = {
|
15
10
|
key: ENV["OPEN_AI_KEY"],
|
16
11
|
model: "gpt-3.5-turbo",
|
@@ -47,6 +42,8 @@ OptionParser.new do |opts|
|
|
47
42
|
end.parse!
|
48
43
|
|
49
44
|
begin
|
45
|
+
stty_save = `stty -g`.chomp
|
46
|
+
|
50
47
|
puts "Type any message to talk with ChatGPT. Type '\\help' for a list of commands."
|
51
48
|
|
52
49
|
functions = options[:functions_files].flat_map do |function_file|
|
@@ -69,27 +66,53 @@ begin
|
|
69
66
|
|
70
67
|
conversation = ChatgptRb::Conversation.new(api_key: options.fetch(:key), model: options.fetch(:model), base_uri: options.fetch(:base_uri), messages:, functions:, prompt: options[:prompt])
|
71
68
|
|
69
|
+
commands = [
|
70
|
+
{
|
71
|
+
names: ["s", "save"],
|
72
|
+
description: "Save this conversation to a JSON file that can be reloaded later with the `-f` argument",
|
73
|
+
implementation: ->() {
|
74
|
+
filename = /^\\save (.+)/.match(message)[1]
|
75
|
+
File.open(filename, "w") { |f| f.write(conversation.messages.to_json) }
|
76
|
+
puts "saved to #{filename} ".colorize(:blue)
|
77
|
+
}
|
78
|
+
},
|
79
|
+
{
|
80
|
+
names: ["q", "quit", "exit"],
|
81
|
+
description: "Exit the program",
|
82
|
+
implementation: ->() {
|
83
|
+
exit
|
84
|
+
}
|
85
|
+
},
|
86
|
+
{
|
87
|
+
names: ["d", "dump"],
|
88
|
+
description: "Print out all messages in this converastion.",
|
89
|
+
implementation: ->() {
|
90
|
+
puts "dump> ".colorize(:blue) + conversation.messages.to_json
|
91
|
+
}
|
92
|
+
},
|
93
|
+
{
|
94
|
+
names: ["f", "functions"],
|
95
|
+
description: "List all available functions.",
|
96
|
+
implementation: ->() {
|
97
|
+
puts "available functions:".colorize(:blue)
|
98
|
+
functions.each do |function|
|
99
|
+
puts "- `#{function.name}` #{function.description}".colorize(:blue)
|
100
|
+
end
|
101
|
+
}
|
102
|
+
},
|
103
|
+
{
|
104
|
+
names: ["h", "help"],
|
105
|
+
description: "List all commands and their description",
|
106
|
+
implementation: ->() {
|
107
|
+
puts commands.map { |command| " - #{command[:names].map { |str| "`\\#{str}`".colorize(:yellow) }.join(", ")}: #{command[:description].colorize(:blue)}" }.join("\n")
|
108
|
+
}
|
109
|
+
}
|
110
|
+
]
|
111
|
+
|
72
112
|
while message = Reline.readline("me> ".colorize(:red), true) do
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
- `\\quit` Exit
|
77
|
-
- `\\save <filename>` Save this conversation to a JSON file that can be reloaded later with the `-f` argument
|
78
|
-
- `\\functions` Get a list of configured functions
|
79
|
-
COMMANDS
|
80
|
-
when "\\q", "\\quit", "\\exit"
|
81
|
-
exit
|
82
|
-
when "\\dump"
|
83
|
-
puts "dump> ".colorize(:blue) + conversation.messages.to_json
|
84
|
-
when "\\functions"
|
85
|
-
puts "available functions:".colorize(:blue)
|
86
|
-
functions.each do |function|
|
87
|
-
puts "- `#{function.name}` #{function.description}".colorize(:blue)
|
88
|
-
end
|
89
|
-
when /^\\save .+/
|
90
|
-
filename = /^\\save (.+)/.match(message)[1]
|
91
|
-
File.open(filename, "w") { |f| f.write(conversation.messages.to_json) }
|
92
|
-
puts "saved to #{filename} ".colorize(:blue)
|
113
|
+
input = message.chomp
|
114
|
+
if (command = commands.find { |command| command[:names].any? { |name| "\\#{name}" == input } })
|
115
|
+
command[:implementation].call
|
93
116
|
else
|
94
117
|
print("ai> ".colorize(:yellow))
|
95
118
|
conversation.ask(message) { |fragment| print(fragment) }
|
@@ -23,7 +23,15 @@ module ChatgptRb
|
|
23
23
|
@api_key = api_key
|
24
24
|
@model = model
|
25
25
|
@functions = functions.each_with_object({}) do |function, hash|
|
26
|
-
func = function.is_a?(ChatgptRb::Function)
|
26
|
+
func = if function.is_a?(ChatgptRb::Function)
|
27
|
+
function
|
28
|
+
else
|
29
|
+
parameters = function.dig(:parameters, :properties)&.map do |name, definition|
|
30
|
+
required = function.dig(:parameters, :required)&.include?(name)
|
31
|
+
ChatgptRb::Parameter.new(name:, required:, **definition)
|
32
|
+
end || []
|
33
|
+
ChatgptRb::Function.new(parameters:, **function.except(:parameters))
|
34
|
+
end
|
27
35
|
hash[func.name] = func
|
28
36
|
end
|
29
37
|
@temperature = temperature
|
@@ -139,6 +147,8 @@ module ChatgptRb
|
|
139
147
|
end
|
140
148
|
end
|
141
149
|
|
150
|
+
raise APIError.new, response.body unless response.success?
|
151
|
+
|
142
152
|
error_buffer.each { |e| $stderr.puts("Error: #{e}") }
|
143
153
|
|
144
154
|
@messages << if block_given? && streamed_content != ""
|
@@ -164,4 +174,7 @@ module ChatgptRb
|
|
164
174
|
end
|
165
175
|
end
|
166
176
|
end
|
177
|
+
|
178
|
+
# Raised when the API responds with an error.
|
179
|
+
class APIError < StandardError; end
|
167
180
|
end
|
data/lib/chatgpt_rb/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: chatgpt-rb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Aaron Breckenridge
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-08-
|
11
|
+
date: 2023-08-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httparty
|