2026-02-27 10:58:48 -06:00
|
|
|
#!/bin/bash
|
|
|
|
|
|
|
|
|
|
# TrueRecall Base - Simple Installer
|
|
|
|
|
# Usage: ./install.sh
|
|
|
|
|
|
|
|
|
|
set -e
|
|
|
|
|
|
|
|
|
|
echo "=========================================="
|
|
|
|
|
echo "TrueRecall Base - Installer"
|
|
|
|
|
echo "=========================================="
|
|
|
|
|
echo ""
|
|
|
|
|
|
|
|
|
|
# Default values
|
2026-02-27 11:54:26 -06:00
|
|
|
DEFAULT_QDRANT_IP="localhost:6333"
|
|
|
|
|
DEFAULT_OLLAMA_IP="localhost:11434"
|
2026-02-27 10:58:48 -06:00
|
|
|
DEFAULT_USER_ID="user"
|
|
|
|
|
|
|
|
|
|
# Get user input with defaults
|
|
|
|
|
echo "Configuration (press Enter for defaults):"
|
|
|
|
|
echo ""
|
2026-02-27 11:54:26 -06:00
|
|
|
echo "Examples:"
|
|
|
|
|
echo " Qdrant: 10.0.0.40:6333 (remote) or localhost:6333 (local)"
|
|
|
|
|
echo " Ollama: 10.0.0.10:11434 (remote) or localhost:11434 (local)"
|
2026-02-27 11:52:07 -06:00
|
|
|
echo ""
|
2026-02-27 10:58:48 -06:00
|
|
|
|
2026-02-27 11:54:26 -06:00
|
|
|
read -p "Qdrant host:port [$DEFAULT_QDRANT_IP]: " QDRANT_IP
|
2026-02-27 10:58:48 -06:00
|
|
|
QDRANT_IP=${QDRANT_IP:-$DEFAULT_QDRANT_IP}
|
|
|
|
|
|
2026-02-27 11:54:26 -06:00
|
|
|
read -p "Ollama host:port [$DEFAULT_OLLAMA_IP]: " OLLAMA_IP
|
2026-02-27 10:58:48 -06:00
|
|
|
OLLAMA_IP=${OLLAMA_IP:-$DEFAULT_OLLAMA_IP}
|
|
|
|
|
|
|
|
|
|
read -p "User ID [$DEFAULT_USER_ID]: " USER_ID
|
|
|
|
|
USER_ID=${USER_ID:-$DEFAULT_USER_ID}
|
|
|
|
|
|
|
|
|
|
echo ""
|
|
|
|
|
echo "Configuration:"
|
2026-02-27 11:54:26 -06:00
|
|
|
echo " Qdrant: http://$QDRANT_IP"
|
|
|
|
|
echo " Ollama: http://$OLLAMA_IP"
|
2026-02-27 10:58:48 -06:00
|
|
|
echo " User ID: $USER_ID"
|
|
|
|
|
echo ""
|
|
|
|
|
|
|
|
|
|
read -p "Proceed? [Y/n]: " CONFIRM
|
|
|
|
|
if [[ $CONFIRM =~ ^[Nn]$ ]]; then
|
|
|
|
|
echo "Installation cancelled."
|
|
|
|
|
exit 0
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
# Create service file
|
|
|
|
|
echo ""
|
|
|
|
|
echo "Creating systemd service..."
|
|
|
|
|
|
2026-02-27 11:49:43 -06:00
|
|
|
# Get absolute path (handles spaces)
|
|
|
|
|
INSTALL_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
|
|
|
|
2026-02-27 10:58:48 -06:00
|
|
|
cat > /tmp/mem-qdrant-watcher.service << EOF
|
|
|
|
|
[Unit]
|
|
|
|
|
Description=TrueRecall Base - Real-Time Memory Watcher
|
|
|
|
|
After=network.target
|
|
|
|
|
|
|
|
|
|
[Service]
|
|
|
|
|
Type=simple
|
|
|
|
|
User=$USER
|
2026-02-27 11:49:43 -06:00
|
|
|
WorkingDirectory=$INSTALL_DIR/watcher
|
2026-02-27 11:54:26 -06:00
|
|
|
Environment="QDRANT_URL=http://$QDRANT_IP"
|
2026-02-27 10:58:48 -06:00
|
|
|
Environment="QDRANT_COLLECTION=memories_tr"
|
2026-02-27 11:54:26 -06:00
|
|
|
Environment="OLLAMA_URL=http://$OLLAMA_IP"
|
2026-02-27 10:58:48 -06:00
|
|
|
Environment="EMBEDDING_MODEL=snowflake-arctic-embed2"
|
|
|
|
|
Environment="USER_ID=$USER_ID"
|
2026-02-27 11:49:43 -06:00
|
|
|
ExecStart=/usr/bin/python3 $INSTALL_DIR/watcher/realtime_qdrant_watcher.py --daemon
|
2026-02-27 10:58:48 -06:00
|
|
|
Restart=always
|
|
|
|
|
RestartSec=5
|
|
|
|
|
|
|
|
|
|
[Install]
|
|
|
|
|
WantedBy=multi-user.target
|
|
|
|
|
EOF
|
|
|
|
|
|
|
|
|
|
# Install service
|
|
|
|
|
sudo cp /tmp/mem-qdrant-watcher.service /etc/systemd/system/
|
|
|
|
|
sudo systemctl daemon-reload
|
|
|
|
|
|
|
|
|
|
echo ""
|
|
|
|
|
echo "Starting service..."
|
|
|
|
|
sudo systemctl enable --now mem-qdrant-watcher
|
|
|
|
|
|
|
|
|
|
echo ""
|
|
|
|
|
echo "=========================================="
|
|
|
|
|
echo "Installation Complete!"
|
|
|
|
|
echo "=========================================="
|
|
|
|
|
echo ""
|
|
|
|
|
echo "Status:"
|
|
|
|
|
sudo systemctl status mem-qdrant-watcher --no-pager
|
|
|
|
|
|
|
|
|
|
echo ""
|
|
|
|
|
echo "Verify collection:"
|
2026-02-27 11:54:26 -06:00
|
|
|
echo " curl -s http://$QDRANT_IP/collections/memories_tr | jq '.result.points_count'"
|
2026-02-27 10:58:48 -06:00
|
|
|
echo ""
|
|
|
|
|
echo "View logs:"
|
|
|
|
|
echo " sudo journalctl -u mem-qdrant-watcher -f"
|