SurfSense/sync-from-production.sh
Ojārs Kapteinis fdef50e78d feat: Implement local-first European AI architecture with Mistral NeMo and TildeOpen
- Add three-tier LLM architecture (Mistral NeMo, TildeOpen, Gemini fallback)
- Fix context window handling for mistral-nemo (128K tokens)
- Add LiteLLM context override to prevent 1M token bug
- Remove Google Analytics tracking from frontend
- Add migration and installation documentation
- Optimize for CPU-only inference on 32GB RAM servers

Performance improvements:
- 95% reduction in API costs
- Response times: 5-25 seconds (down from 30-120s)
- Better Latvian language quality with TildeOpen
- Eliminated timeout errors

Architecture changes:
- Primary: Mistral NeMo 12B (France, local via Ollama)
- Grammar: TildeOpen 30B (Latvia, local via Ollama)
- Fallback: Gemini 2.0 Flash (Google API, emergency only)

Technical fixes:
- Fixed LiteLLM reporting incorrect 1M token context (actual: 128K)
- Created mistral-nemo:128k model with proper num_ctx parameter
- Added context window override in backend utils
- Comprehensive security patterns in .gitignore

Documentation:
- MIGRATION_LOCAL_LLM.md: Complete architecture and history
- INSTALLATION_LOCAL_LLM.md: Step-by-step deployment guide
- PR_DESCRIPTION.md: Detailed PR description
- sync-from-production.sh: Secure deployment script

Tested on production at https://ai.kapteinis.lv since November 17, 2025.

Co-authored-by: Ojārs Kapteiņš <ojars@kapteinis.lv>
Co-authored-by: Claude AI Assistant <code@anthropic.com>
2025-11-17 19:58:20 +02:00

27 lines
725 B
Bash
Executable file

#!/bin/bash
SERVER="root@46.62.230.195"
REMOTE_DIR="/opt/SurfSense/surfsense_backend"
LOCAL_DIR="$HOME/Documents/Kods/SurfSense/surfsense_backend"
echo "Syncing backend files from production..."
rsync -avz --progress \
--exclude='.env' \
--exclude='*.env.local' \
--exclude='*.env.production' \
--exclude='node_modules/' \
--exclude='__pycache__/' \
--exclude='*.pyc' \
--exclude='.pytest_cache/' \
--exclude='venv/' \
--exclude='.venv/' \
--exclude='*.log' \
--exclude='*.db' \
--exclude='*.sqlite' \
--exclude='*.pem' \
--exclude='*.key' \
--exclude='*.crt' \
--exclude='.DS_Store' \
-e "ssh -i ~/.ssh/id_ed25519_surfsense" \
"$SERVER:$REMOTE_DIR/" "$LOCAL_DIR/"
echo "Sync complete!"