ask_chatgpt 0.3.0 → 0.3.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/bin/ask_chatgpt +3 -0
- data/lib/ask_chatgpt/console.rb +1 -1
- data/lib/ask_chatgpt/executor.rb +19 -3
- data/lib/ask_chatgpt/helpers.rb +43 -0
- data/lib/ask_chatgpt/version.rb +1 -1
- data/lib/ask_chatgpt.rb +1 -1
- metadata +4 -5
- data/lib/ask_chatgpt/core.rb +0 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 86f36d546bd015947fcac7a2bb9366530ba0ff8a9012f21f2151ae0484ecf647
|
4
|
+
data.tar.gz: 136c817bc54317c77325ca0145857262d48680b8b25072e3364dcd0fe526e501
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7b3112557fcb6e3fa11856693e26dc37df80dedafde058f6f181d303a336f75cc4ab21f9c1daf89dd61d253eea150b05d5f664408ab5299c07210f37d8f9d87c
|
7
|
+
data.tar.gz: 4c5a22ca8157813e15fa5e2f639eefd89967ba9bbd300d6c0929bfe18cd3b2ff4e600197d59411520da05626c77ec9ca1786e2b6f3bfd7b51a2d5403f4528098
|
data/bin/ask_chatgpt
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
require 'optparse'
|
4
4
|
require 'active_support'
|
5
|
+
require 'irb'
|
5
6
|
|
6
7
|
require_relative "../lib/ask_chatgpt"
|
7
8
|
|
@@ -24,6 +25,8 @@ parser = OptionParser.new do |opts|
|
|
24
25
|
ask_chatgpt -f app/models/user.rb -q "create RSpec spec for this model"
|
25
26
|
ask_chatgpt -f test/dummy/Gemfile -q "sort Ruby gems alphabetically"
|
26
27
|
|
28
|
+
Version: #{AskChatGPT::VERSION}
|
29
|
+
|
27
30
|
USAGE
|
28
31
|
|
29
32
|
opts.on("-q", "--question \"Your Prompt\"", String, "Specify your prompt with full context, language, etc.") do |prompt|
|
data/lib/ask_chatgpt/console.rb
CHANGED
data/lib/ask_chatgpt/executor.rb
CHANGED
@@ -18,6 +18,11 @@ module AskChatgpt
|
|
18
18
|
|
19
19
|
attr_reader :scope, :client, :spinner, :cursor
|
20
20
|
|
21
|
+
def self.call
|
22
|
+
client = OpenAI::Client.new(access_token: AskChatGPT.access_token)
|
23
|
+
AskChatgpt::Executor.new(client)
|
24
|
+
end
|
25
|
+
|
21
26
|
def initialize(client)
|
22
27
|
@scope = AskChatGPT.included_prompts.dup
|
23
28
|
@client = client
|
@@ -26,6 +31,9 @@ module AskChatgpt
|
|
26
31
|
end
|
27
32
|
|
28
33
|
def inspect
|
34
|
+
return if @executed
|
35
|
+
@executed = true
|
36
|
+
|
29
37
|
pp(executor_parameters) if AskChatGPT.debug
|
30
38
|
call_with_validations do
|
31
39
|
case AskChatGPT.mode
|
@@ -35,11 +43,14 @@ module AskChatgpt
|
|
35
43
|
call_sync
|
36
44
|
end
|
37
45
|
end
|
38
|
-
|
46
|
+
nil
|
47
|
+
rescue SystemExit, SignalException, InputError, NoMethodError => e
|
39
48
|
puts e.message
|
40
49
|
rescue StandardError => e
|
41
50
|
puts e.message
|
42
51
|
puts e.backtrace.take(5).join("\n")
|
52
|
+
rescue Exception => e
|
53
|
+
puts e.message
|
43
54
|
ensure
|
44
55
|
nil
|
45
56
|
end
|
@@ -68,18 +79,22 @@ module AskChatgpt
|
|
68
79
|
print content_part
|
69
80
|
end
|
70
81
|
}))
|
82
|
+
spinner&.stop if spinner&.spinning?
|
71
83
|
if AskChatGPT.markdown
|
84
|
+
result = content.compact.join
|
85
|
+
shift = result.split("\n").size == 1 ? 1 : result.split("\n").size + 1
|
72
86
|
# re-draw the screen
|
73
87
|
# go back to the top by the number of new lines previously printed
|
74
|
-
print cursor.clear_lines(
|
88
|
+
print cursor.clear_lines(shift, :up)
|
75
89
|
# print cursor.restore
|
76
90
|
# print cursor.down
|
77
91
|
# print cursor.clear_screen_down
|
78
92
|
# $content = content.compact.join
|
79
|
-
puts(TTY::Markdown.parse(
|
93
|
+
puts(TTY::Markdown.parse(result))
|
80
94
|
else
|
81
95
|
# nothing, content is already printed in the stream
|
82
96
|
end
|
97
|
+
nil
|
83
98
|
end
|
84
99
|
|
85
100
|
# wait for the whole response and print it at once
|
@@ -98,6 +113,7 @@ module AskChatgpt
|
|
98
113
|
puts(content)
|
99
114
|
end
|
100
115
|
end
|
116
|
+
nil
|
101
117
|
end
|
102
118
|
|
103
119
|
def executor_parameters
|
data/lib/ask_chatgpt/helpers.rb
CHANGED
@@ -7,6 +7,7 @@ module AskChatgpt
|
|
7
7
|
method_or_class_or_str.source
|
8
8
|
when Module, Class, String
|
9
9
|
str = capture_io do
|
10
|
+
init_irb unless IRB.CurrentContext
|
10
11
|
IRB.CurrentContext.main.irb_show_source(method_or_class_or_str.to_s)
|
11
12
|
end.join("\n")
|
12
13
|
# check if source was extracted
|
@@ -22,6 +23,48 @@ module AskChatgpt
|
|
22
23
|
|
23
24
|
private
|
24
25
|
|
26
|
+
class DummyInputMethod < ::IRB::InputMethod
|
27
|
+
attr_reader :list, :line_no
|
28
|
+
|
29
|
+
def initialize(list = [])
|
30
|
+
super("test")
|
31
|
+
@line_no = 0
|
32
|
+
@list = list
|
33
|
+
end
|
34
|
+
|
35
|
+
def gets
|
36
|
+
@list[@line_no]&.tap {@line_no += 1}
|
37
|
+
end
|
38
|
+
|
39
|
+
def eof?
|
40
|
+
@line_no >= @list.size
|
41
|
+
end
|
42
|
+
|
43
|
+
def encoding
|
44
|
+
Encoding.default_external
|
45
|
+
end
|
46
|
+
|
47
|
+
def reset
|
48
|
+
@line_no = 0
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
# https://github.com/ruby/irb/blob/95782f2cf93b4b32e51104a21a860aa4491a04bc/test/irb/test_cmd.rb#L36
|
53
|
+
def init_irb
|
54
|
+
conf = {}
|
55
|
+
main = :self
|
56
|
+
irb_path = nil
|
57
|
+
IRB.init_config(nil)
|
58
|
+
IRB.conf[:VERBOSE] = false
|
59
|
+
IRB.conf[:PROMPT_MODE] = :SIMPLE
|
60
|
+
IRB.conf.merge!(conf)
|
61
|
+
input = DummyInputMethod.new("TestInputMethod#gets")
|
62
|
+
irb = IRB::Irb.new(IRB::WorkSpace.new(main), input)
|
63
|
+
irb.context.return_format = "=> %s\n"
|
64
|
+
irb.context.irb_path = irb_path if irb_path
|
65
|
+
IRB.conf[:MAIN_CONTEXT] = irb.context
|
66
|
+
end
|
67
|
+
|
25
68
|
# from https://github.com/minitest/minitest/blob/master/lib/minitest/assertions.rb#L542
|
26
69
|
def capture_io
|
27
70
|
_synchronize do
|
data/lib/ask_chatgpt/version.rb
CHANGED
data/lib/ask_chatgpt.rb
CHANGED
@@ -9,11 +9,11 @@ require "openai"
|
|
9
9
|
require "tty-markdown"
|
10
10
|
require "tty-spinner"
|
11
11
|
require "tty-cursor"
|
12
|
+
require "irb"
|
12
13
|
|
13
14
|
require_relative "ask_chatgpt/console"
|
14
15
|
require_relative "ask_chatgpt/executor"
|
15
16
|
require_relative "ask_chatgpt/helpers"
|
16
|
-
require_relative "ask_chatgpt/core"
|
17
17
|
|
18
18
|
module AskChatgpt
|
19
19
|
::AskChatGPT = AskChatgpt
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ask_chatgpt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Igor Kasyanchuk
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2023-
|
12
|
+
date: 2023-05-01 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
@@ -138,7 +138,6 @@ files:
|
|
138
138
|
- bin/ask_chatgpt
|
139
139
|
- lib/ask_chatgpt.rb
|
140
140
|
- lib/ask_chatgpt/console.rb
|
141
|
-
- lib/ask_chatgpt/core.rb
|
142
141
|
- lib/ask_chatgpt/default_behavior.rb
|
143
142
|
- lib/ask_chatgpt/executor.rb
|
144
143
|
- lib/ask_chatgpt/helpers.rb
|
@@ -161,11 +160,11 @@ files:
|
|
161
160
|
- lib/generators/ask_chatgpt/ask_chatgpt_generator.rb
|
162
161
|
- lib/generators/ask_chatgpt/templates/template.rb
|
163
162
|
- lib/tasks/ask_chatgpt_tasks.rake
|
164
|
-
homepage: https://github.com/railsjazz
|
163
|
+
homepage: https://github.com/railsjazz/ask_chatgpt
|
165
164
|
licenses:
|
166
165
|
- MIT
|
167
166
|
metadata:
|
168
|
-
homepage_uri: https://github.com/railsjazz
|
167
|
+
homepage_uri: https://github.com/railsjazz/ask_chatgpt
|
169
168
|
post_install_message:
|
170
169
|
rdoc_options: []
|
171
170
|
require_paths:
|