richat 0.3.4 → 0.3.6
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/lib/richat/color_code.rb +20 -0
- data/lib/richat/command.rb +12 -0
- data/lib/richat/config.rb +3 -1
- data/lib/richat/shell.rb +26 -6
- data/lib/richat/version.rb +1 -1
- data/lib/richat.rb +1 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2fb025384c114dec37924fed7ec5c9d9e9df8346d0b94bd831aacec551602d95
|
4
|
+
data.tar.gz: f60c3e845fcc33da304d2cee618219267fd0b4a7136f86afc3f62c094ed7e688
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8d457a5fd0c5c1740b5b114aee779dbe2d3b77b7f780ac24743bf857b563147df43de933f5d673c8a35070e5e034a9ed074506679defbf10e664d7342d117104
|
7
|
+
data.tar.gz: 4ea395f9d4d57caa9b0c04f2fc87b901e6dbcc065e770eb50699a6bf7e1fd2ae492083d682b317b9ca95d059c94425b7d446566603aa39c0a48aadcc1e11fe6f
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Richat
|
2
|
+
class ColorCode
|
3
|
+
COLOR_CODE = {
|
4
|
+
black: "\e[30m",
|
5
|
+
red: "\e[31m",
|
6
|
+
green: "\e[32m",
|
7
|
+
yellow: "\e[33m",
|
8
|
+
blue: "\e[34m",
|
9
|
+
magenta: "\e[35m",
|
10
|
+
cyan: "\e[36m",
|
11
|
+
white: "\e[37m"
|
12
|
+
}
|
13
|
+
|
14
|
+
class << self
|
15
|
+
def get_code(color)
|
16
|
+
COLOR_CODE.fetch(color.to_sym, nil)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
data/lib/richat/command.rb
CHANGED
@@ -5,6 +5,8 @@ module Richat
|
|
5
5
|
PROMPT_CHANGED_CODE = 2
|
6
6
|
SYS_CMD_CODE = 3
|
7
7
|
SYS_CHAT_CODE = 4
|
8
|
+
TOGGLE_CONTEXT_CODE = 5
|
9
|
+
RESET_CONTEXT_CODE = 6
|
8
10
|
|
9
11
|
class << self
|
10
12
|
attr_reader :prompt, :prompt_id
|
@@ -29,6 +31,10 @@ module Richat
|
|
29
31
|
else
|
30
32
|
handle_choose_prompt(user_input.split(" ").last)
|
31
33
|
end
|
34
|
+
elsif user_input == "/context"
|
35
|
+
TOGGLE_CONTEXT_CODE
|
36
|
+
elsif user_input == "/context-reset"
|
37
|
+
RESET_CONTEXT_CODE
|
32
38
|
end
|
33
39
|
end
|
34
40
|
end
|
@@ -90,6 +96,8 @@ module Richat
|
|
90
96
|
puts "\e[32m/exit\e[0m exit Richat"
|
91
97
|
puts "\e[32m/config\e[0m show configuration"
|
92
98
|
puts "\e[32m/prompt\e[0m show prompt list"
|
99
|
+
puts "\e[32m/context\e[0m toggle chat context"
|
100
|
+
puts "\e[32m/context-reset\e[0m reset chat context"
|
93
101
|
puts "\e[32m/help\e[0m show help info"
|
94
102
|
NEXT_CODE
|
95
103
|
end
|
@@ -162,6 +170,10 @@ module Richat
|
|
162
170
|
puts "\e[31m#{message}\e[0m"
|
163
171
|
end
|
164
172
|
|
173
|
+
def print_info(message)
|
174
|
+
puts "\e[32m#{message}\e[0m"
|
175
|
+
end
|
176
|
+
|
165
177
|
def print_welcome
|
166
178
|
puts "Richat is a command-line ChatGPT tool implemented in Ruby that supports highly customizable configuration, press \e[32m/help\e[0m to display help info. If you have any suggestions or questions, please feel free to provide feedback on https://github.com/fzdp/richat."
|
167
179
|
end
|
data/lib/richat/config.rb
CHANGED
@@ -21,7 +21,9 @@ module Richat
|
|
21
21
|
"enable_chat_context" => true,
|
22
22
|
"show_welcome_info" => true,
|
23
23
|
"shell_history_file" => "~/.richat/history.txt",
|
24
|
-
"exit_keywords" => ["/exit", "q", "quit", "exit"]
|
24
|
+
"exit_keywords" => ["/exit", "q", "quit", "exit"],
|
25
|
+
"chat_context_indicator" => "💡",
|
26
|
+
"user_content_color" => "green"
|
25
27
|
},
|
26
28
|
"sys_cmd" => {
|
27
29
|
"activate_keywords" => [">", "!"],
|
data/lib/richat/shell.rb
CHANGED
@@ -2,7 +2,7 @@ require 'readline'
|
|
2
2
|
|
3
3
|
module Richat
|
4
4
|
class Shell
|
5
|
-
attr_reader :chat_client, :logger, :user_role, :ai_role, :system_role, :history_path
|
5
|
+
attr_reader :chat_client, :logger, :user_role, :ai_role, :system_role, :history_path, :user_color
|
6
6
|
|
7
7
|
def initialize(options = {})
|
8
8
|
@chat_client = options[:chat_client]
|
@@ -12,6 +12,7 @@ module Richat
|
|
12
12
|
@system_role = Config.get("log", "system_role")
|
13
13
|
@history_path = File.expand_path(Config.get("shell", "shell_history_file"))
|
14
14
|
File.open(@history_path, 'w') {} unless File.exist?(@history_path)
|
15
|
+
@user_color = ColorCode.get_code(Config.get("shell", "user_content_color"))
|
15
16
|
end
|
16
17
|
|
17
18
|
def call
|
@@ -36,7 +37,7 @@ module Richat
|
|
36
37
|
sys_cmd_mode = false
|
37
38
|
|
38
39
|
begin
|
39
|
-
while (user_content = Readline.readline(shell_prompt(sys_cmd_mode), true))
|
40
|
+
while (user_content = Readline.readline(shell_prompt(sys_cmd_mode, enable_context_message), true))
|
40
41
|
if user_content.empty?
|
41
42
|
Readline::HISTORY&.pop
|
42
43
|
next
|
@@ -58,9 +59,21 @@ module Richat
|
|
58
59
|
elsif code == Command::SYS_CHAT_CODE
|
59
60
|
sys_cmd_mode = false
|
60
61
|
next
|
62
|
+
elsif code == Command::TOGGLE_CONTEXT_CODE
|
63
|
+
enable_context_message = !enable_context_message
|
64
|
+
unless enable_context_message
|
65
|
+
context_messages = Command.prompt_id ? [{ role: 'system', content: Command.prompt }] : []
|
66
|
+
end
|
67
|
+
Command.print_info("chat context mode " + (enable_context_message ? "enabled." : "disabled."))
|
68
|
+
next
|
69
|
+
elsif code == Command::RESET_CONTEXT_CODE
|
70
|
+
context_messages = Command.prompt_id ? [{ role: 'system', content: Command.prompt }] : []
|
71
|
+
Command.print_info("chat context reset.")
|
72
|
+
next
|
61
73
|
end
|
62
74
|
end
|
63
75
|
|
76
|
+
print "\e[0m"
|
64
77
|
logger.call(role: user_role, content: user_content)
|
65
78
|
response = ''
|
66
79
|
|
@@ -84,7 +97,7 @@ module Richat
|
|
84
97
|
context_messages.pop
|
85
98
|
end
|
86
99
|
|
87
|
-
puts
|
100
|
+
puts "\n\n"
|
88
101
|
end
|
89
102
|
rescue Interrupt
|
90
103
|
if sys_cmd_mode
|
@@ -108,12 +121,19 @@ module Richat
|
|
108
121
|
|
109
122
|
private
|
110
123
|
|
111
|
-
def shell_prompt(sys_cmd_mode)
|
124
|
+
def shell_prompt(sys_cmd_mode, chat_context_mode)
|
125
|
+
prompt_str = "\e[32m#{Command.prompt_id&.+" "}\e[0m"
|
126
|
+
if chat_context_mode
|
127
|
+
prompt_str += Config.get("shell", "chat_context_indicator")
|
128
|
+
end
|
129
|
+
|
112
130
|
if sys_cmd_mode
|
113
|
-
|
131
|
+
prompt_str += "\e[33m>>\e[0m \e[32m$ \e[0m"
|
114
132
|
else
|
115
|
-
|
133
|
+
prompt_str += "\e[33m>> \e[0m#{user_color}"
|
116
134
|
end
|
135
|
+
|
136
|
+
prompt_str
|
117
137
|
end
|
118
138
|
end
|
119
139
|
end
|
data/lib/richat/version.rb
CHANGED
data/lib/richat.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: richat
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- fzdp
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-04-
|
11
|
+
date: 2023-04-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -81,6 +81,7 @@ files:
|
|
81
81
|
- lib/openai/chat.rb
|
82
82
|
- lib/richat.rb
|
83
83
|
- lib/richat/cli.rb
|
84
|
+
- lib/richat/color_code.rb
|
84
85
|
- lib/richat/command.rb
|
85
86
|
- lib/richat/config.rb
|
86
87
|
- lib/richat/logger.rb
|