15
15
16
16
error_exit () {
17
17
echo -e " \e[31mAutocomplete.sh - $1 \e[0m" >&2
18
- exit 1
18
+ # In a completion context, exit is too severe. Use return instead.
19
+ return 1
19
20
}
20
21
21
22
echo_error () {
@@ -30,9 +31,8 @@ echo_green() {
30
31
# Global Variables & Model Definitions #
31
32
# ##############################################################################
32
33
33
- export ACSH_VERSION=0.4.3
34
+ export ACSH_VERSION=0.4.4
34
35
35
- # Supported models defined in an associative array.
36
36
unset _autocomplete_modellist
37
37
declare -A _autocomplete_modellist
38
38
# OpenAI models
@@ -46,24 +46,21 @@ _autocomplete_modellist['anthropic: claude-3-7-sonnet-20250219']='{ "completion_
46
46
_autocomplete_modellist[' anthropic: claude-3-5-sonnet-20241022' ]=' { "completion_cost":0.0000150, "prompt_cost":0.0000030, "endpoint": "https://api.anthropic.com/v1/messages", "model": "claude-3-5-sonnet-20241022", "provider": "anthropic" }'
47
47
_autocomplete_modellist[' anthropic: claude-3-5-haiku-20241022' ]=' { "completion_cost":0.0000040, "prompt_cost":0.0000008, "endpoint": "https://api.anthropic.com/v1/messages", "model": "claude-3-5-haiku-20241022", "provider": "anthropic" }'
48
48
# Groq models
49
- # Production Models
50
49
_autocomplete_modellist[' groq: llama3-8b-8192' ]=' { "completion_cost":0.0000000, "prompt_cost":0.0000000, "endpoint": "https://api.groq.com/openai/v1/chat/completions", "model": "llama3-8b-8192", "provider": "groq" }'
51
50
_autocomplete_modellist[' groq: llama3-70b-8192' ]=' { "completion_cost":0.0000000, "prompt_cost":0.0000000, "endpoint": "https://api.groq.com/openai/v1/chat/completions", "model": "llama3-70b-8192", "provider": "groq" }'
52
51
_autocomplete_modellist[' groq: llama-3.3-70b-versatile' ]=' { "completion_cost":0.0000000, "prompt_cost":0.0000000, "endpoint": "https://api.groq.com/openai/v1/chat/completions", "model": "llama-3.3-70b-versatile", "provider": "groq" }'
53
52
_autocomplete_modellist[' groq: llama-3.1-8b-instant' ]=' { "completion_cost":0.0000000, "prompt_cost":0.0000000, "endpoint": "https://api.groq.com/openai/v1/chat/completions", "model": "llama-3.1-8b-instant", "provider": "groq" }'
54
53
_autocomplete_modellist[' groq: llama-guard-3-8b' ]=' { "completion_cost":0.0000000, "prompt_cost":0.0000000, "endpoint": "https://api.groq.com/openai/v1/chat/completions", "model": "llama-guard-3-8b", "provider": "groq" }'
55
54
_autocomplete_modellist[' groq: mixtral-8x7b-32768' ]=' { "completion_cost":0.0000000, "prompt_cost":0.0000000, "endpoint": "https://api.groq.com/openai/v1/chat/completions", "model": "mixtral-8x7b-32768", "provider": "groq" }'
56
55
_autocomplete_modellist[' groq: gemma2-9b-it' ]=' { "completion_cost":0.0000000, "prompt_cost":0.0000000, "endpoint": "https://api.groq.com/openai/v1/chat/completions", "model": "gemma2-9b-it", "provider": "groq" }'
57
- # Groq models
58
- # Preview Models
56
+ # Groq preview models
59
57
_autocomplete_modellist[' groq: mistral-saba-24b' ]=' { "completion_cost":0.0000000, "prompt_cost":0.0000000, "endpoint": "https://api.groq.com/openai/v1/chat/completions", "model": "mistral-saba-24b", "provider": "groq" }'
60
58
_autocomplete_modellist[' groq: qwen-2.5-coder-32b' ]=' { "completion_cost":0.0000000, "prompt_cost":0.0000000, "endpoint": "https://api.groq.com/openai/v1/chat/completions", "model": "qwen-2.5-coder-32b", "provider": "groq" }'
61
59
_autocomplete_modellist[' groq: deepseek-r1-distill-qwen-32b' ]=' { "completion_cost":0.0000000, "prompt_cost":0.0000000, "endpoint": "https://api.groq.com/openai/v1/chat/completions", "model": "deepseek-r1-distill-qwen-32b", "provider": "groq" }'
62
60
_autocomplete_modellist[' groq: deepseek-r1-distill-llama-70b-specdec' ]=' { "completion_cost":0.0000000, "prompt_cost":0.0000000, "endpoint": "https://api.groq.com/openai/v1/chat/completions", "model": "deepseek-r1-distill-llama-70b-specdec", "provider": "groq" }'
63
61
_autocomplete_modellist[' groq: llama-3.3-70b-specdec' ]=' { "completion_cost":0.0000000, "prompt_cost":0.0000000, "endpoint": "https://api.groq.com/openai/v1/chat/completions", "model": "llama-3.3-70b-specdec", "provider": "groq" }'
64
62
_autocomplete_modellist[' groq: llama-3.2-1b-preview' ]=' { "completion_cost":0.0000000, "prompt_cost":0.0000000, "endpoint": "https://api.groq.com/openai/v1/chat/completions", "model": "llama-3.2-1b-preview", "provider": "groq" }'
65
63
_autocomplete_modellist[' groq: llama-3.2-3b-preview' ]=' { "completion_cost":0.0000000, "prompt_cost":0.0000000, "endpoint": "https://api.groq.com/openai/v1/chat/completions", "model": "llama-3.2-3b-preview", "provider": "groq" }'
66
-
67
64
# Ollama model
68
65
_autocomplete_modellist[' ollama: codellama' ]=' { "completion_cost":0.0000000, "prompt_cost":0.0000000, "endpoint": "http://localhost:11434/api/chat", "model": "codellama", "provider": "ollama" }'
69
66
@@ -79,7 +76,7 @@ _get_terminal_info() {
79
76
* Operating system: \$ OSTYPE=$OSTYPE
80
77
* Shell: \$ BASH=$BASH
81
78
* Terminal type: \$ TERM=$TERM
82
- * Hostname: \$ HOSTNAME= $HOSTNAME "
79
+ * Hostname: \$ HOSTNAME"
83
80
echo " $terminal_info "
84
81
}
85
82
@@ -145,15 +142,19 @@ _get_recent_files() {
145
142
find . -maxdepth 1 -type f -exec ls -ld {} + | sort -r | head -n " $FILE_LIMIT "
146
143
}
147
144
145
+ # Rewritten _get_help_message using a heredoc to preserve formatting.
148
146
_get_help_message () {
149
147
local COMMAND HELP_INFO
150
148
COMMAND=$( echo " $1 " | awk ' {print $1}' )
151
149
HELP_INFO=" "
152
150
{
153
151
set +e
154
- HELP_INFO=$( $COMMAND --help 2>&1 || true)
152
+ HELP_INFO=$( cat << EOF
153
+ $( $COMMAND --help 2>&1 || true)
154
+ EOF
155
+ )
155
156
set -e
156
- } || HELP_INFO=" Error: '$COMMAND --help' not available"
157
+ } || HELP_INFO=" '$COMMAND --help' not available"
157
158
echo " $HELP_INFO "
158
159
}
159
160
@@ -341,7 +342,8 @@ openai_completion() {
341
342
user_input=${*:- $default_user_input }
342
343
343
344
if [[ -z " $ACSH_ACTIVE_API_KEY " && ${ACSH_PROVIDER^^} != " OLLAMA" ]]; then
344
- error_exit " ACSH_ACTIVE_API_KEY not set. Please set it with: export ${ACSH_PROVIDER^^} _API_KEY=<your-api-key>"
345
+ echo_error " ACSH_ACTIVE_API_KEY not set. Please set it with: export ${ACSH_PROVIDER^^} _API_KEY=<your-api-key>"
346
+ return
345
347
fi
346
348
api_key=" ${ACSH_ACTIVE_API_KEY:- $OPENAI_API_KEY } "
347
349
payload=$( _build_payload " $user_input " )
@@ -350,15 +352,15 @@ openai_completion() {
350
352
attempt=1
351
353
while [ $attempt -le $max_attempts ]; do
352
354
if [[ " ${ACSH_PROVIDER^^} " == " ANTHROPIC" ]]; then
353
- response=$( curl -s -m " $timeout " -w " \n%{http_code}" " $endpoint " \
355
+ response=$( \ c url -s -m " $timeout " -w " \n%{http_code}" " $endpoint " \
354
356
-H " content-type: application/json" \
355
357
-H " anthropic-version: 2023-06-01" \
356
358
-H " x-api-key: $api_key " \
357
359
--data " $payload " )
358
360
elif [[ " ${ACSH_PROVIDER^^} " == " OLLAMA" ]]; then
359
- response=$( curl -s -m " $timeout " -w " \n%{http_code}" " $endpoint " --data " $payload " )
361
+ response=$( \ c url -s -m " $timeout " -w " \n%{http_code}" " $endpoint " --data " $payload " )
360
362
else
361
- response=$( curl -s -m " $timeout " -w " \n%{http_code}" " $endpoint " \
363
+ response=$( \ c url -s -m " $timeout " -w " \n%{http_code}" " $endpoint " \
362
364
-H " Content-Type: application/json" \
363
365
-H " Authorization: Bearer $api_key " \
364
366
-d " $payload " )
@@ -716,12 +718,16 @@ acsh_load_config() {
716
718
if [[ -z " $ACSH_OLLAMA_API_KEY " && -n " $LLM_API_KEY " ]]; then
717
719
export ACSH_OLLAMA_API_KEY=" $LLM_API_KEY "
718
720
fi
721
+ # If the custom API key was set, map it to OLLAMA if needed.
722
+ if [[ -z " $ACSH_OLLAMA_API_KEY " && -n " $ACSH_CUSTOM_API_KEY " ]]; then
723
+ export ACSH_OLLAMA_API_KEY=" $ACSH_CUSTOM_API_KEY "
724
+ fi
719
725
case " ${ACSH_PROVIDER:- openai} " in
720
726
" openai" ) export ACSH_ACTIVE_API_KEY=" $ACSH_OPENAI_API_KEY " ;;
721
727
" anthropic" ) export ACSH_ACTIVE_API_KEY=" $ACSH_ANTHROPIC_API_KEY " ;;
722
728
" groq" ) export ACSH_ACTIVE_API_KEY=" $ACSH_GROQ_API_KEY " ;;
723
729
" ollama" ) export ACSH_ACTIVE_API_KEY=" $ACSH_OLLAMA_API_KEY " ;;
724
- * ) error_exit " Unknown provider: $ACSH_PROVIDER " ;;
730
+ * ) echo_error " Unknown provider: $ACSH_PROVIDER " ;;
725
731
esac
726
732
else
727
733
echo " Configuration file not found: $config_file "
@@ -787,10 +793,15 @@ remove_command() {
787
793
autocomplete_script=$( command -v autocomplete)
788
794
if [ -n " $autocomplete_script " ]; then
789
795
echo " Autocomplete script is at: $autocomplete_script "
790
- read -r -p " Remove the autocomplete script? (y/n): " confirm
791
- if [[ $confirm == " y" ]]; then
796
+ if [ " $1 " == " -y" ]; then
792
797
rm " $autocomplete_script "
793
798
echo " Removed: $autocomplete_script "
799
+ else
800
+ read -r -p " Remove the autocomplete script? (y/n): " confirm
801
+ if [[ $confirm == " y" ]]; then
802
+ rm " $autocomplete_script "
803
+ echo " Removed: $autocomplete_script "
804
+ fi
794
805
fi
795
806
fi
796
807
echo " Uninstallation complete."
0 commit comments