diff options
| author | sigoden <sigoden@gmail.com> | 2024-06-08 10:30:34 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-06-08 10:30:34 +0800 |
| commit | 2b5b0f6502cc245b2365e4a8b5fdaaefb9d67b5d (patch) | |
| tree | d54633e31f57b55bf3f1a456a54cbbb6f93f1ebe /scripts/run-tool.sh | |
| parent | 0c6b609c261cb6f586668626d860dc6754725794 (diff) | |
| download | llm-functions-docker-2b5b0f6502cc245b2365e4a8b5fdaaefb9d67b5d.tar.gz | |
refactor: improve Argcfile.sh and scripts/run-tool* (#34)
* refactor: improve Argcfile and scripts/run-tool*
* fix run-tool.js on windows
Diffstat (limited to 'scripts/run-tool.sh')
| -rwxr-xr-x | scripts/run-tool.sh | 124 |
1 files changed, 70 insertions, 54 deletions
diff --git a/scripts/run-tool.sh b/scripts/run-tool.sh index 32e559a..2ed01d5 100755 --- a/scripts/run-tool.sh +++ b/scripts/run-tool.sh @@ -1,60 +1,76 @@ #!/usr/bin/env bash set -e -export LLM_ROOT_DIR="$(cd -- "$( dirname -- "${BASH_SOURCE[0]}" )/.." &> /dev/null && pwd)" - -if [[ -f "$LLM_ROOT_DIR/.env" ]]; then - source "$LLM_ROOT_DIR/.env" -fi - -if [[ "$0" == *run-tool.sh ]]; then - tool_name="$1" - tool_data="$2" -else - tool_name="$(basename "$0")" - tool_data="$1" -fi -if [[ "$tool_name" == *.sh ]]; then - tool_name="${tool_name:0:$((${#tool_name}-3))}" -fi - -export LLM_TOOL_NAME="$tool_name" -export LLM_TOOL_CACHE_DIR="$LLM_ROOT_DIR/cache/$tool_name" - -tool_file="$LLM_ROOT_DIR/tools/$tool_name.sh" - -_jq=jq -if [[ "$OS" == "Windows_NT" ]]; then - _jq="jq -b" - tool_file="$(cygpath -w "$tool_file")" -fi - -if [[ -z "$tool_data" ]]; then - echo "No json data" - exit 1 -fi - -data="$( - echo "$tool_data" | \ - $_jq -r ' - to_entries | .[] | - (.key | split("_") | join("-")) as $key | - if .value | type == "array" then - .value | .[] | "--\($key)\n\(. | @json)" - elif .value | type == "boolean" then - if .value then "--\($key)" else "" end - else - "--\($key)\n\(.value | @json)" - end' -)" || { - echo "Invalid json data" - exit 1 +main() { + this_file_name=run-tool.sh + parse_argv "$@" + root_dir="$(cd -- "$( dirname -- "${BASH_SOURCE[0]}" )/.." &> /dev/null && pwd)" + setup_env + tool_path="$root_dir/tools/$tool_name.sh" + run } -while IFS= read -r line; do - if [[ "$line" == '--'* ]]; then - args+=("$line") + +parse_argv() { + if [[ "$0" == *"$this_file_name" ]]; then + tool_name="$1" + tool_data="$2" else - args+=("$(echo "$line" | $_jq -r '.')") + tool_name="$(basename "$0")" + tool_data="$1" + fi + if [[ "$tool_name" == *.sh ]]; then + tool_name="${tool_name:0:$((${#tool_name}-3))}" fi -done <<< "$data" -"$tool_file" "${args[@]}"
\ No newline at end of file +} + +setup_env() { + export LLM_ROOT_DIR="$root_dir" + if [[ -f "$LLM_ROOT_DIR/.env" ]]; then + source "$LLM_ROOT_DIR/.env" + fi + export LLM_TOOL_NAME="$tool_name" + export LLM_TOOL_CACHE_DIR="$LLM_ROOT_DIR/cache/$tool_name" +} + +run() { + if [[ -z "$tool_data" ]]; then + die "No JSON data" + fi + + _jq=jq + if [[ "$OS" == "Windows_NT" ]]; then + _jq="jq -b" + tool_path="$(cygpath -w "$tool_path")" + fi + + data="$( + echo "$tool_data" | \ + $_jq -r ' + to_entries | .[] | + (.key | split("_") | join("-")) as $key | + if .value | type == "array" then + .value | .[] | "--\($key)\n\(. | @json)" + elif .value | type == "boolean" then + if .value then "--\($key)" else "" end + else + "--\($key)\n\(.value | @json)" + end' + )" || { + die "Invalid JSON data" + } + while IFS= read -r line; do + if [[ "$line" == '--'* ]]; then + args+=("$line") + else + args+=("$(echo "$line" | $_jq -r '.')") + fi + done <<< "$data" + "$tool_path" "${args[@]}" +} + +die() { + echo "$*" >&2 + exit 1 +} + +main "$@" |
