aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorHsieh Chin Fan <pham@topo.tw>2023-04-03 14:18:24 +0800
committerHsieh Chin Fan <pham@topo.tw>2023-04-03 19:39:23 +0800
commit39ca31f4002297370572e97ad62b675cf1bc205e (patch)
treeb5273f3833022cd9af9bf195ca993fc1eaae34c2
parentd19590d84386454b3a5e73fc98e1d65ea0e5d53c (diff)
Add subcommand last
-rwxr-xr-xbin/gpt/gpt27
1 files changed, 23 insertions, 4 deletions
diff --git a/bin/gpt/gpt b/bin/gpt/gpt
index a3bfa48..b348a2e 100755
--- a/bin/gpt/gpt
+++ b/bin/gpt/gpt
@@ -6,16 +6,20 @@
6# - Cowork with https://github.com/openai/chatgpt-retrieval-plugin 6# - Cowork with https://github.com/openai/chatgpt-retrieval-plugin
7# - History for prompt 7# - History for prompt
8# - Mac/BSD compatible 8# - Mac/BSD compatible
9# - Generate completions for bash/zsh
9 10
10# Necessary commands 11# Necessary commands
11stacks=( curl jq sed ) 12stacks=( curl jq sed )
12 13
13# User can dynamically change these options for API call 14# User can dynamically change these options for API call
14
15configurable_options=( model behavior temperature max_tokens stream context ) 15configurable_options=( model behavior temperature max_tokens stream context )
16
16# If script is interupt by SIGINT, simply print leave message 17# If script is interupt by SIGINT, simply print leave message
17trap _print_leave_message INT 18trap _print_leave_message INT
18 19
20# Where to cache dir
21CACHE_DIR=${CACHE_DIR:-/tmp}
22
19# If any stack is missing, exit with 2 23# If any stack is missing, exit with 2
20_check_stacks() { 24_check_stacks() {
21 for command in "${stacks[@]}"; do 25 for command in "${stacks[@]}"; do
@@ -85,6 +89,9 @@ Special Input:
85 89
86 .h Ask gpt the usage of this script 90 .h Ask gpt the usage of this script
87 91
92Sub Commands:
93 last Use fzf to choose previous inputs
94
88Reference: https://platform.openai.com/docs/api-reference/completions 95Reference: https://platform.openai.com/docs/api-reference/completions
89EOF 96EOF
90} 97}
@@ -148,7 +155,8 @@ _get_content() {
148 if [ ! "$SKIP_INPUT" = true ] ; then 155 if [ ! "$SKIP_INPUT" = true ] ; then
149 # Read content from terminal 156 # Read content from terminal
150 while true; do 157 while true; do
151 read -e -r -p "Let's Chat: " content </dev/tty 158 read -e -r -p "Let's Chat: " ${PREFILL:+-i "$PREFILL"} content </dev/tty
159 unset PREFILL
152 if [ "$content" = .c ]; then 160 if [ "$content" = .c ]; then
153 echo -e '\n======\n' 161 echo -e '\n======\n'
154 _configure_options 162 _configure_options
@@ -201,6 +209,14 @@ _process_completion() {
201 fi 209 fi
202} 210}
203 211
212_get_input_by_fzf() {
213 PREFILL=$(
214 find "$CACHE_DIR" -name 'gpt.*' 2>/dev/null | \
215 while read -r file; do jq -sr '.[0].messages[1].content' "$file" | head -1; done | \
216 sed -E '/^null$/d' | sort -u | \
217 fzf
218 )
219}
204 220
205#===================================================== 221#=====================================================
206# Main Function starts here 222# Main Function starts here
@@ -208,7 +224,7 @@ _process_completion() {
208 224
209# Check OPENAI API KEY in env 225# Check OPENAI API KEY in env
210# Exit with 6 (configuration issue) if it is not set 226# Exit with 6 (configuration issue) if it is not set
211[ -z "$OPENAI_API_KEY" ] && OPENAI_API_KEY=$(cat $XDG_CONFIG_HOME/openai/key) 227[ -z "$OPENAI_API_KEY" ] && OPENAI_API_KEY=$(cat "$XDG_CONFIG_HOME"/openai/key)
212[ -z "$OPENAI_API_KEY" ] && { echo API KEY not specified; exit 6; } 228[ -z "$OPENAI_API_KEY" ] && { echo API KEY not specified; exit 6; }
213 229
214# Parse arguments 230# Parse arguments
@@ -258,6 +274,10 @@ while [ "$#" -gt 0 ]; do
258 _print_helper_message 274 _print_helper_message
259 exit 0 275 exit 0
260 ;; 276 ;;
277 last)
278 _get_input_by_fzf
279 break
280 ;;
261 --) 281 --)
262 SKIP_INPUT=true 282 SKIP_INPUT=true
263 shift 1 283 shift 1
@@ -287,7 +307,6 @@ stream=${stream:-false}
287INDEX= 307INDEX=
288 308
289# Prepare for chat session 309# Prepare for chat session
290CACHE_DIR=${CACHE_DIR:-/tmp}
291cache=$(mktemp -t gpt.XXXXXX -p ${CACHE_DIR}) && touch "$cache" 310cache=$(mktemp -t gpt.XXXXXX -p ${CACHE_DIR}) && touch "$cache"
292#trap "rm $cache" EXIT 311#trap "rm $cache" EXIT
293session=() 312session=()