mirror of
https://github.com/0xacx/chatGPT-shell-cli.git
synced 2024-11-24 11:25:31 +00:00
Merge pull request #101 from 0xacx/multiline-prompt-chat-mode
Multiline prompt chat mode
This commit is contained in:
commit
b7833e6e25
94
chatgpt.sh
94
chatgpt.sh
@ -12,7 +12,6 @@ CHATGPT_CYAN_LABEL="\033[36mchatgpt \033[0m"
|
||||
PROCESSING_LABEL="\n\033[90mProcessing... \033[0m\033[0K\r"
|
||||
OVERWRITE_PROCESSING_LINE=" \033[0K\r"
|
||||
|
||||
|
||||
if [[ -z "$OPENAI_KEY" ]]; then
|
||||
echo "You need to set your OPENAI_KEY to use this script"
|
||||
echo "You can set it temporarily by running this on your terminal: export OPENAI_KEY=YOUR_KEY_HERE"
|
||||
@ -37,15 +36,34 @@ Commands:
|
||||
*If a command modifies your file system or dowloads external files the script will show a warning before executing.
|
||||
|
||||
Options:
|
||||
-i, --init-prompt - Provide initial chat prompt to use in context
|
||||
--init-prompt-from-file - Provide initial prompt from file
|
||||
-p, --prompt - Provide prompt instead of starting chat
|
||||
--prompt-from-file - Provide prompt from file
|
||||
-t, --temperature - Temperature
|
||||
--max-tokens - Max number of tokens
|
||||
-m, --model - Model
|
||||
-s, --size - Image size. (The sizes that are accepted by the OpenAI API are 256x256, 512x512, 1024x1024)
|
||||
-c, --chat-context - For models that do not support chat context by default (all models except gpt-3.5-turbo and gpt-4), you can enable chat context, for the model to remember your previous questions and its previous answers. It also makes models aware of todays date and what data it was trained on.
|
||||
-i, --init-prompt Provide initial chat prompt to use in context
|
||||
|
||||
--init-prompt-from-file Provide initial prompt from file
|
||||
|
||||
-p, --prompt Provide prompt instead of starting chat
|
||||
|
||||
--prompt-from-file Provide prompt from file
|
||||
|
||||
-b, --big-prompt Allow multi-line prompts during chat mode
|
||||
|
||||
-t, --temperature Temperature
|
||||
|
||||
--max-tokens Max number of tokens
|
||||
|
||||
-l, --list List available openAI models
|
||||
|
||||
-m, --model Model to use
|
||||
|
||||
-s, --size Image size. (The sizes that are accepted by the
|
||||
OpenAI API are 256x256, 512x512, 1024x1024)
|
||||
|
||||
-c, --chat-context For models that do not support chat context by
|
||||
default (all models except gpt-3.5-turbo and
|
||||
gpt-4), you can enable chat context, for the
|
||||
model to remember your previous questions and
|
||||
its previous answers. It also makes models
|
||||
aware of todays date and what data it was trained
|
||||
on.
|
||||
|
||||
EOF
|
||||
}
|
||||
@ -60,6 +78,17 @@ handle_error() {
|
||||
fi
|
||||
}
|
||||
|
||||
# request to openAI API models endpoint. Returns a list of models
|
||||
# takes no input parameters
|
||||
list_models() {
|
||||
models_response=$(curl https://api.openai.com/v1/models \
|
||||
-sS \
|
||||
-H "Authorization: Bearer $OPENAI_KEY")
|
||||
handle_error "$models_response"
|
||||
models_data=$(echo $models_response | jq -r -C '.data[] | {id, owned_by, created}')
|
||||
echo -e "$OVERWRITE_PROCESSING_LINE"
|
||||
echo -e "${CHATGPT_CYAN_LABEL}This is a list of models currently available at OpenAI API:\n ${models_data}"
|
||||
}
|
||||
# request to OpenAI API completions endpoint function
|
||||
# $1 should be the request prompt
|
||||
request_to_completions() {
|
||||
@ -124,8 +153,8 @@ build_chat_context() {
|
||||
fi
|
||||
}
|
||||
|
||||
escape(){
|
||||
echo "$1" | jq -Rrs 'tojson[1:-1]'
|
||||
escape() {
|
||||
echo "$1" | jq -Rrs 'tojson[1:-1]'
|
||||
}
|
||||
|
||||
# maintain chat context function for /completions (all models except
|
||||
@ -218,6 +247,10 @@ while [[ "$#" -gt 0 ]]; do
|
||||
shift
|
||||
shift
|
||||
;;
|
||||
-l | --list)
|
||||
list_models
|
||||
exit 0
|
||||
;;
|
||||
-m | --model)
|
||||
MODEL="$2"
|
||||
shift
|
||||
@ -228,6 +261,10 @@ while [[ "$#" -gt 0 ]]; do
|
||||
shift
|
||||
shift
|
||||
;;
|
||||
--multi-line-prompt)
|
||||
MULTI_LINE_PROMPT=true
|
||||
shift
|
||||
;;
|
||||
-c | --chat-context)
|
||||
CONTEXT=true
|
||||
shift
|
||||
@ -249,6 +286,13 @@ MAX_TOKENS=${MAX_TOKENS:-1024}
|
||||
MODEL=${MODEL:-gpt-3.5-turbo}
|
||||
SIZE=${SIZE:-512x512}
|
||||
CONTEXT=${CONTEXT:-false}
|
||||
MULTI_LINE_PROMPT=${MULTI_LINE_PROMPT:-false}
|
||||
|
||||
# create our temp file for multi-line input
|
||||
if [ $MULTI_LINE_PROMPT = true ]; then
|
||||
USER_INPUT_TEMP_FILE=$(mktemp)
|
||||
trap 'rm -f ${USER_INPUT}' EXIT
|
||||
fi
|
||||
|
||||
# create history file
|
||||
if [ ! -f ~/.chatgpt_history ]; then
|
||||
@ -273,9 +317,16 @@ fi
|
||||
while $running; do
|
||||
|
||||
if [ -z "$pipe_mode_prompt" ]; then
|
||||
echo -e "\nEnter a prompt:"
|
||||
read -e prompt
|
||||
if [ "$prompt" != "exit" ] && [ "$prompt" != "q" ]; then
|
||||
if [ $MULTI_LINE_PROMPT = true ]; then
|
||||
echo -e "\nEnter a prompt: (Press Enter then Ctrl-D to send)"
|
||||
cat > "${USER_INPUT_TEMP_FILE}"
|
||||
input_from_temp_file=$(cat "${USER_INPUT_TEMP_FILE}")
|
||||
prompt=$(escape "$input_from_temp_file")
|
||||
else
|
||||
echo -e "\nEnter a prompt:"
|
||||
read -e prompt
|
||||
fi
|
||||
if [[ ! $prompt =~ ^(exit|q)$ ]]; then
|
||||
echo -ne $PROCESSING_LABEL
|
||||
fi
|
||||
else
|
||||
@ -285,7 +336,7 @@ while $running; do
|
||||
CHATGPT_CYAN_LABEL=""
|
||||
fi
|
||||
|
||||
if [ "$prompt" == "exit" ] || [ "$prompt" == "q" ]; then
|
||||
if [[ $prompt =~ ^(exit|q)$ ]]; then
|
||||
running=false
|
||||
elif [[ "$prompt" =~ ^image: ]]; then
|
||||
request_to_image "$prompt"
|
||||
@ -312,13 +363,7 @@ while $running; do
|
||||
elif [[ "$prompt" == "history" ]]; then
|
||||
echo -e "\n$(cat ~/.chatgpt_history)"
|
||||
elif [[ "$prompt" == "models" ]]; then
|
||||
models_response=$(curl https://api.openai.com/v1/models \
|
||||
-sS \
|
||||
-H "Authorization: Bearer $OPENAI_KEY")
|
||||
handle_error "$models_response"
|
||||
models_data=$(echo $models_response | jq -r -C '.data[] | {id, owned_by, created}')
|
||||
echo -e "$OVERWRITE_PROCESSING_LINE"
|
||||
echo -e "${CHATGPT_CYAN_LABEL}This is a list of models currently available at OpenAI API:\n ${models_data}"
|
||||
list_models
|
||||
elif [[ "$prompt" =~ ^model: ]]; then
|
||||
models_response=$(curl https://api.openai.com/v1/models \
|
||||
-sS \
|
||||
@ -373,7 +418,6 @@ while $running; do
|
||||
if command -v glow &>/dev/null; then
|
||||
echo -e "${CHATGPT_CYAN_LABEL}"
|
||||
echo "${response_data}" | glow -
|
||||
#echo -e "${formatted_text}"
|
||||
else
|
||||
echo -e "${CHATGPT_CYAN_LABEL}${response_data}" | fold -s -w "$COLUMNS"
|
||||
fi
|
||||
@ -399,7 +443,7 @@ while $running; do
|
||||
echo -e "${CHATGPT_CYAN_LABEL}"
|
||||
echo "${response_data}" | glow -
|
||||
else
|
||||
# else remove empty lines and print
|
||||
# else remove empty lines and print
|
||||
formatted_text=$(echo "${response_data}" | sed '1,2d; s/^A://g')
|
||||
echo -e "${CHATGPT_CYAN_LABEL}${formatted_text}" | fold -s -w $COLUMNS
|
||||
fi
|
||||
|
Loading…
Reference in New Issue
Block a user