131 lines
3.9 KiB
Bash
Executable File
131 lines
3.9 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -eo pipefail
|
|
|
|
# --- Color Definitions ---
|
|
CYAN='\033[96m'
|
|
GREEN='\033[92m'
|
|
YELLOW='\033[93m'
|
|
RED='\033[91m'
|
|
RESET='\033[0m'
|
|
BOLD='\033[1m'
|
|
|
|
# --- Paths & Dependencies ---
|
|
MODEL_DIR="./models"
|
|
AGENT_DIR="./agents"
|
|
LLAMA_SERVER="./core/llama.cpp/build/bin/llama-server"
|
|
PYTHON_SCRIPT="./core/smarterframework.py"
|
|
|
|
echo -e "${CYAN}${BOLD}=== SmarterAgents Core Launch System ===${RESET}"
|
|
|
|
# Ensure local dev and log folders exist in workspace
|
|
mkdir -p dev
|
|
mkdir -p core/logs
|
|
|
|
# Verify core compilation target exists
|
|
if [ ! -f "$LLAMA_SERVER" ]; then
|
|
echo -e "${RED}[ERR] compiled 'llama-server' binary missing at '$LLAMA_SERVER'.${RESET}"
|
|
echo -e "Please run cmake build inside core/llama.cpp as detailed in the README."
|
|
exit 1
|
|
fi
|
|
|
|
# 1. Model Selection
|
|
mapfile -t MODELS < <(find "$MODEL_DIR" -name "*.gguf" 2>/dev/null)
|
|
if [ ${#MODELS[@]} -eq 0 ]; then
|
|
echo -e "${RED}[ERR] No GGUF models discovered in '$MODEL_DIR'. Please copy a model there first.${RESET}"
|
|
exit 1
|
|
fi
|
|
|
|
echo -e "\n${YELLOW}Discovered Models:${RESET}"
|
|
for i in "${!MODELS[@]}"; do
|
|
echo -e " [$i] $(basename "${MODELS[$i]}")"
|
|
done
|
|
read -rp "Select Model Index [0-$((${#MODELS[@]} - 1))]: " MODEL_IDX
|
|
SELECTED_MODEL="${MODELS[$MODEL_IDX]}"
|
|
|
|
# 2. Agent Selection
|
|
mapfile -t AGENTS < <(find "$AGENT_DIR" -name "*.md" 2>/dev/null)
|
|
if [ ${#AGENTS[@]} -eq 0 ]; then
|
|
echo -e "${RED}[ERR] No Markdown agents discovered in '$AGENT_DIR'.${RESET}"
|
|
exit 1
|
|
fi
|
|
|
|
echo -e "\n${YELLOW}Discovered Agent Personas:${RESET}"
|
|
for i in "${!AGENTS[@]}"; do
|
|
echo -e " [$i] $(basename "${AGENTS[$i]}")"
|
|
done
|
|
read -rp "Select Agent Index [0-$((${#AGENTS[@]} - 1))]: " AGENT_IDX
|
|
SELECTED_AGENT="${AGENTS[$AGENT_IDX]}"
|
|
|
|
# 3. Environment Variable Export for Python Orchestrator
|
|
GRAMMAR_FILE=""
|
|
for path in "tools/tool_rules.gbnf" "tools/tool_rules.gnbf" "agents/tools/tool_rules.gbnf" "agents/tools/tool_rules.gnbf"; do
|
|
if [ -f "$path" ]; then
|
|
GRAMMAR_FILE="$path"
|
|
break
|
|
fi
|
|
done
|
|
|
|
if [ -n "$GRAMMAR_FILE" ]; then
|
|
export AMDA_GRAMMAR_FILE="$GRAMMAR_FILE"
|
|
else
|
|
export AMDA_GRAMMAR_FILE="tools/tool_rules.gbnf"
|
|
fi
|
|
|
|
export AMDA_BACKEND_URL="http://127.0.0.1:8080"
|
|
export AMDA_SYSTEM_PROMPT="$SELECTED_AGENT"
|
|
|
|
# 4. Vulkan Background Server Initialization
|
|
PHYS_CORES=8
|
|
|
|
echo -e "\n${CYAN}[Init] Booting Vulkan llama-server daemon...${RESET}"
|
|
echo -e "${DIM}Assigning 100% compute threads to $PHYS_CORES physical cores.${RESET}"
|
|
|
|
# Start llama-server and capture process PID
|
|
"$LLAMA_SERVER" \
|
|
--model "$SELECTED_MODEL" \
|
|
--host "127.0.0.1" \
|
|
--port "8080" \
|
|
--ctx-size 16384 \
|
|
--parallel 1 \
|
|
--threads "$PHYS_CORES" \
|
|
--batch-size 128 \
|
|
--ubatch-size 64 \
|
|
--no-mmap \
|
|
-ngl 999 \
|
|
-fa on \
|
|
-ctk q8_0 \
|
|
-ctv q8_0 \
|
|
--jinja > core/logs/llama-server.log 2>&1 & # <-- Added --jinja here
|
|
SERVER_PID=$!
|
|
|
|
# Safe Target-Specific cleanup (Only kill the llama-server child process)
|
|
cleanup() {
|
|
echo -e "\n${YELLOW}[Exit] Shutting down llama-server daemon... (PID: $SERVER_PID)${RESET}"
|
|
kill -9 "$SERVER_PID" 2>/dev/null || true
|
|
wait "$SERVER_PID" 2>/dev/null || true
|
|
}
|
|
trap cleanup EXIT INT TERM HUP
|
|
|
|
# 5. Health Check Diagnostics
|
|
echo -e "${CYAN}[Health] Polling background loop for local endpoint availability...${RESET}"
|
|
RETRIES=15
|
|
CONNECTED=false
|
|
for ((i=1; i<=RETRIES; i++)); do
|
|
if curl -s -o /dev/null -w "%{http_code}" "$AMDA_BACKEND_URL/health" | grep -q "200"; then
|
|
echo -e "${GREEN}[Ready] Local Vulkan compute engine activated successfully.${RESET}"
|
|
CONNECTED=true
|
|
break
|
|
fi
|
|
sleep 1
|
|
done
|
|
|
|
if [ "$CONNECTED" = false ]; then
|
|
echo -e "${RED}[ERR] llama-server failed to activate within timeout period.${RESET}"
|
|
echo -e "Diagnostics: Last 15 lines of core/logs/llama-server.log:"
|
|
tail -n 15 core/logs/llama-server.log
|
|
exit 1
|
|
fi
|
|
|
|
# 6. Transfer Execution to Python TUI Engine
|
|
echo -e "${CYAN}[Exec] Handoff control to asynchronous user interface...${RESET}\n"
|
|
python3 "$PYTHON_SCRIPT" |