diff options
| author | sigoden <sigoden@gmail.com> | 2024-06-06 13:28:59 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-06-06 13:28:59 +0800 |
| commit | c6eeb84402f50d05002ebbaf2d1652f42ff060aa (patch) | |
| tree | 7f6c5fe65e573c6abe0252d7196bfcd2e0035bc8 /scripts/create.sh | |
| parent | a144077aec90d13587d67b3a2065d5728d4f6319 (diff) | |
| download | llm-functions-docker-c6eeb84402f50d05002ebbaf2d1652f42ff060aa.tar.gz | |
feat: add scripts/create.sh for creating tool script quickly (#23)
Diffstat (limited to 'scripts/create.sh')
| -rwxr-xr-x | scripts/create.sh | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/scripts/create.sh b/scripts/create.sh new file mode 100755 index 0000000..27e2441 --- /dev/null +++ b/scripts/create.sh @@ -0,0 +1,117 @@ +#!/usr/bin/env bash +set -e + +# @describe Create a boilplate tool script file. +# @arg name! The script filename. +# @arg params* The script parameters + +main() { + ext="${argc_name##*.}" + output="tools/$argc_name" + if [[ -f "$output" ]]; then + _die "$output already exists" + fi + case $ext in + sh) create_sh ;; + js) create_js ;; + py) create_py ;; + *) _die "Invalid extension name: '$ext'" ;; + esac +} + +create_sh() { + cat <<-'EOF' | sed 's/__DESCRIBE_TAG__/# @describe/g' > "$output" +#!/usr/bin/env bash +set -e + +__DESCRIBE_TAG__ +EOF + for param in "${argc_params[@]}"; do + echo "# @option --$(echo $param | sed 's/-/_/g')" >> "$output" + done + cat <<-'EOF' >> "$output" + +main() { + ( set -o posix ; set ) | grep ^argc_ # inspect all argc variables +} + +eval "$(argc --argc-eval "$0" "$@")" +EOF + chmod +x "$output" +} + +create_js() { + cat <<EOF > "$output" +exports.declarate = function declarate() { + return $(build_schema) +} + +exports.execute = function execute(data) { + console.log(data) +} +EOF +} + +create_py() { + cat <<EOF > "$output" +def declarate(): + return $(build_schema) + + +def execute(data): + print(data) +EOF +} + +build_schema() { + echo '{ + "name": "'"${argc_name%%.*}"'", + "description": "", + "parameters": '"$(build_properties)"' + }' | jq '.' | sed '2,$s/^/ /g' +} + +build_properties() { + required_params=() + properties='' + for param in "${argc_params[@]}"; do + if [[ "$param" == *'!' ]]; then + param="${param::-1}" + required_params+=("$param") + property='{"'"$param"'":{"type":"string","description":""}}' + elif [[ "$param" == *'+' ]]; then + param="${param::-1}" + required_params+=("$param") + property='{"'"$param"'":{"type":"array","description":"","items": {"type":"string"}}}' + elif [[ "$param" == *'*' ]]; then + param="${param::-1}" + property='{"'"$param"'":{"type":"array","description":"","items": {"type":"string"}}}' + else + property='{"'"$param"'":{"type":"string","description":""}}' + fi + properties+="$property" + done + required='' + for param in "${required_params[@]}"; do + if [[ -z "$required" ]]; then + required=',"required":[' + fi + required+="\"$param\"," + done + if [[ -n "$required" ]]; then + required="${required::-1}" + required+="]" + fi + echo '{ + "type": "object", + "properties": '"$(echo "$properties" | jq -s 'add')$required"' + }' | jq '.' +} + +_die() { + echo "$*" + exit 1 +} + +# See more details at https://github.com/sigoden/argc +eval "$(argc --argc-eval "$0" "$@")"
\ No newline at end of file |
