forked from Shinonome/dots-hyprland
add back ai primary buffer query (closes #1462)
This commit is contained in:
@@ -0,0 +1,99 @@
|
||||
#!/bin/bash
|
||||
|
||||
# From strikeoncmputrz/LLM_Scripts
|
||||
# License: Apache-2.0, can be found in the same folder as this script
|
||||
|
||||
# Global Vars
|
||||
ollama_url=http://localhost
|
||||
port="11434"
|
||||
blobs=()
|
||||
model_name_paths=()
|
||||
|
||||
|
||||
#Parse arguments
|
||||
while [ "$#" -gt 0 ]; do
|
||||
case $1 in
|
||||
-h|--help)
|
||||
echo
|
||||
echo " Identifies Ollama models running on this operating system by parsing running processes."
|
||||
echo
|
||||
echo " Usage: $0 [options]"
|
||||
echo
|
||||
echo " Options:"
|
||||
echo " -j, --json_output Prints result as a json object. Other output disabled. (Default: false)"
|
||||
echo " -p, --port [port number] Specify Ollama Server port (Default: 11434)"
|
||||
echo " -u, --ollama_url [url] Specify Ollama Server URL (Default: http://localhost)"
|
||||
echo
|
||||
echo " Dependencies: jq"
|
||||
exit 0
|
||||
;;
|
||||
-j|--json_output)
|
||||
json_out=1
|
||||
shift 1
|
||||
;;
|
||||
-u|--ollama_url)
|
||||
ollama_url=$2
|
||||
shift 2
|
||||
;;
|
||||
-p|--port)
|
||||
port=$2
|
||||
shift 2
|
||||
;;
|
||||
*)
|
||||
echo "Unknown option: $1"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
compare_running_models_and_modelfiles() {
|
||||
json_match=()
|
||||
json_output=()
|
||||
local matching_models=()
|
||||
OLDIFS=$IFS
|
||||
for ((i=0; i<${#model_name_paths[@]}; i++)); do # Iterate over the array of modelname,blob-path
|
||||
for blob in "${blobs[@]}"; do
|
||||
IFS=',', read -ra fields <<< "${model_name_paths[i]}" # Split the string into parts
|
||||
if [ "${fields[1]}" == "$blob" ]; then # Check if current 'field' matches a blob
|
||||
matching_models+=( '{ "model": "'"${fields[0]}"'", "path": "'"${fields[1]}"'"}') # Add to list of matching models
|
||||
fi
|
||||
done
|
||||
done
|
||||
|
||||
if [ -z "$json_out" ]; then
|
||||
echo -e "\nModel Found: \n $(echo ${matching_models[*]} | jq '.' | sed s/[{}]//g) \n"
|
||||
else
|
||||
local json_match="${matching_models[*]}"
|
||||
json_output=$(echo $json_match | jq -c -s .)
|
||||
echo "$json_output"
|
||||
fi
|
||||
IFS=$OLDIFS
|
||||
}
|
||||
|
||||
get_running_model_paths() {
|
||||
blobs=$(ps aux | grep -- '--model' | grep -v grep | grep -Po '(?<=--model\s).*' | cut -d ' ' -f1)
|
||||
if [ -z "$blobs" ]; then
|
||||
echo -e "\n\n Warning: No running Ollama models detected!\n"
|
||||
exit 0
|
||||
fi
|
||||
}
|
||||
|
||||
parse_modelfiles() {
|
||||
if [ -z "$json_out" ]; then
|
||||
echo -e "\nConnecting to $ollama_url:$port\n"
|
||||
if [ -z "$(curl -s $ollama_url:$port)" ]; then
|
||||
echo -e "Could not connect to Ollama. Check the ollama_url parameter and that the server is running\n"
|
||||
exit 1
|
||||
fi
|
||||
curl -s "$ollama_url:$port"
|
||||
fi
|
||||
local models=( $(curl -s "$ollama_url:$port/api/tags" | jq -r '.models[].name') )
|
||||
for model in "${models[@]}"; do
|
||||
local modelfile=$(curl -s "$ollama_url:$port/api/show" -d '{ "name": "'"$model"'", "modelfile": true }' | jq -r '.modelfile')
|
||||
model_name_paths+=($model,$(echo "$modelfile" | awk '/^FROM/{print $2}'))
|
||||
done
|
||||
}
|
||||
|
||||
parse_modelfiles
|
||||
get_running_model_paths
|
||||
compare_running_models_and_modelfiles
|
||||
Reference in New Issue
Block a user