#! /bin/bash # Orion bot # # Copyright (c) 2022 Sameer Rahmani # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, version 2. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # ----------------------------------------------------------------------------- # Commentary # ----------------------------------------------------------------------------- # This is the builder script for the Orion project. It makes it easier to # interact with the build system # # In order to define a subcommand all you need to do is to define a function # with the following syntax: # # function subcommand-name() { ## DESCRIPTION # .. subcommand body .. # } # # Make sure to provid one line of DESCRIPTION for the subcommand and use two "#" # characters to start the description following by a space. Otherwise, your # subcommand won't be registered set -e # ----------------------------------------------------------------------------- # Vars & Config # ----------------------------------------------------------------------------- command=$1 VERSION="0.1.0" # Change the url to point to the stt native client of your platform STT_BINARY=https://github.com/coqui-ai/STT/releases/download/v1.3.0/native_client.tflite.Linux.tar.xz MODEL=https://coqui.gateway.scarf.sh/english/coqui/v1.0.0-huge-vocab/model.tflite SCORER=https://coqui.gateway.scarf.sh/english/coqui/v1.0.0-huge-vocab/huge-vocabulary.scorer ME=$(cd "$(dirname "$0")/." >/dev/null 2>&1 ; pwd -P) export CGO_LDFLAGS=-L$ME/coqui/ export CGO_CXXFLAGS=-I$ME/coqui/ export LD_LIBRARY_PATH=$ME/coqui/:$LD_LIBRARY_PATH default_model="$ME/models/default.tflite" default_scorer="$ME/models/default.scorer" # ----------------------------------------------------------------------------- # Helper functions # ----------------------------------------------------------------------------- function fn-names() { grep -E '^function [0-9a-zA-Z_-]+\(\) \{ ## .*$$' "$0" | sed 's/^function \([a-zA-Z0-9_-]*\)() { ## \(.*\)/\1/' } function info() { if [ "$1" ] then echo -e "[\033[01;32mINFO\033[00m]: $1" fi } function error() { if [ "$1" ] then echo -e "[\033[01;31mERR\033[00m]: $1" fi } function warn() { if [ "$1" ] then echo -e "[\033[01;33mWARN\033[00m]: $1" fi } # ----------------------------------------------------------------------------- # Subcomaands # ----------------------------------------------------------------------------- function setup() { ## Setup the working directory and make it ready for development info "Creating the virtual env..." virtualenv "$ME/.venv" # shellcheck source=.venv/bin/activate . "$ME/.venv/bin/activate" info "Intalling tflite runtime..." pip3 install -r rigel/requirements.txt pip3 install --extra-index-url https://google-coral.github.io/py-repo/ tflite_runtime info "Downloding STT..." wget $STT_BINARY -O nc.tar.xz mkdir -p "$ME/coqui" tar -Jxvf nc.tar.xz -C "$ME/coqui" info "Installing coqui go binding..." go mod download info "Downloading the model..." mkdir -p "$(dirname $default_model)" wget "$MODEL" -O "$default_model" info "Downloading the scorer..." mkdir -p "$(dirname $default_scorer)" wget "$SCORER" -O "$default_scorer" deactivate } function run() { ## Setup the working directory and make it ready for development # shellcheck source=.venv/bin/activate . "$ME/.venv/bin/activate" go run orion.go -model "$default_model" -scorer "$default_scorer" "$@" deactivate } function rigel() { ## Run the rigel server # shellcheck source=.venv/bin/activate . "$ME/.venv/bin/activate" "$ME/rigel/server.py" --env "$ME/.env" $1 deactivate } function help() { ## Print out this help message echo "Commands:" grep -E '^function [a-zA-Z0-9_-]+\(\) \{ ## .*$$' "$0" | \ sort | \ sed 's/^function \([a-zA-Z0-9_-]*\)() { ## \(.*\)/\1:\2/' | \ awk 'BEGIN {FS=":"}; {printf "\033[36m%-30s\033[0m %s\n", $1, $2}' } function install-openrc() { ## Install openrc service for Rigel(doesn't enable it) # shellcheck source=.venv/bin/activate cp "$ME/rigel/service/openrc/rigel" /tmp/rigel sed -i "s%%$ME%g" /tmp/rigel sudo cp "/tmp/rigel" /etc/init.d/ sudo chmod 0755 /etc/init.d/rigel } # ----------------------------------------------------------------------------- # Main logic # ----------------------------------------------------------------------------- echo -e "\nOrion Version $VERSION" echo -e "\nCopyright (C) 2022 Sameer Rahmani " echo -e "Orion comes with ABSOLUTELY NO WARRANTY;" echo -e "This is free software, and you are welcome" echo -e "to redistribute it under certain conditions;" echo -e "for details take a look at the LICENSE file.\n" # Find the subcommand in the functions and run we find it. for fn in $(fn-names); do if [[ $fn == "$command" ]]; then eval "$fn" "${@:2}" exit $? fi done # If we couldn't find the command print out the help message help