# Lambda Mindlink Memotron — Windows installer # Run: # powershell -NoProfile -ExecutionPolicy Bypass -File install.ps1 # .\install.ps1 -Backend cpu # non-interactive: cuda | cpu [CmdletBinding()] param( [ValidateSet("cuda", "cpu", "")] [string]$Backend = "" ) $ErrorActionPreference = "Stop" function Info($msg) { Write-Host "[INFO] $msg" -ForegroundColor Green } function Warn($msg) { Write-Host "[WARN] $msg" -ForegroundColor Yellow } function Die($msg) { Write-Host "[ERROR] $msg" -ForegroundColor Red; exit 1 } $RepoUrl = "https://huggingface.co/AIMindLink/lambda-mindlink-memotron" # ── 1. Choose backend ──────────────────────────────────────────────── if (-not $Backend) { $suggest = 2 if (Get-Command nvidia-smi -ErrorAction SilentlyContinue) { $suggest = 1 } Write-Host "" Write-Host "Select llama-cpp-python backend:" Write-Host " 1) CUDA - NVIDIA GPU" Write-Host " 2) CPU - no GPU (slow)" $choice = Read-Host "Choice [1-2, default $suggest]" if (-not $choice) { $choice = "$suggest" } if ($choice -in "1","cuda") { $Backend = "cuda" } elseif ($choice -in "2","cpu") { $Backend = "cpu" } else { Die "Unknown choice '$choice'" } } Info "Backend: $Backend" # ── 2. Python check ────────────────────────────────────────────────── if (-not (Get-Command python -ErrorAction SilentlyContinue)) { Die "Python not found on PATH. Install 3.11/3.12 from python.org and tick 'Add Python to PATH'." } $pyver = ((python --version) 2>&1 | Out-String).Trim() if ($pyver -notmatch '^Python 3\.\d+') { Die "Could not read Python version (got '$pyver'). Is the Windows Store python alias interfering?" } if ($pyver -notmatch '^Python 3\.(11|12)\.') { Warn "Found $pyver — the project targets 3.11/3.12. Continuing anyway." } Info "Found $pyver" # ── 3. Get the repo (skip clone if run from inside the repo) ───────── if (-not (Test-Path "main.py")) { if (-not (Get-Command git -ErrorAction SilentlyContinue)) { Die "git not found. Install from git-scm.com, or download the project ZIP and re-run from inside the folder." } Info "Cloning repository..." git clone $RepoUrl Set-Location "lambda-mindlink-memotron" } # ── 4. Virtual environment ─────────────────────────────────────────── if (-not (Test-Path ".venv")) { Info "Creating virtual environment..." python -m venv .venv } # Use the venv's python.exe directly — sidesteps Activate.ps1 execution-policy issues $py = Join-Path (Get-Location) ".venv\Scripts\python.exe" Info "Upgrading pip..." & $py -m pip install --upgrade pip # ── 5. llama-cpp-python ────────────────────────────────────────────── if ($Backend -eq "cuda") { # Detect CUDA tag: nvcc (toolkit) first, then nvidia-smi (driver) $detected = "" if (Get-Command nvcc -ErrorAction SilentlyContinue) { if ((nvcc --version | Out-String) -match 'release (\d+)\.(\d+)') { $detected = "cu$($Matches[1])$($Matches[2])" } } if (-not $detected -and (Get-Command nvidia-smi -ErrorAction SilentlyContinue)) { if ((nvidia-smi | Out-String) -match 'CUDA Version:\s*(\d+)\.(\d+)') { $detected = "cu$($Matches[1])$($Matches[2])" } } if (-not $detected -or $detected -notin "cu118","cu121","cu122","cu123","cu124") { if (-not $detected) { $detected = "cu121" } else { Warn "Detected $detected has no prebuilt wheel — defaulting to cu121."; $detected = "cu121" } } $tag = Read-Host "CUDA wheel tag [default: $detected] (cu118, cu121, cu122, cu123, cu124)" if (-not $tag) { $tag = $detected } Info "Installing llama-cpp-python (CUDA wheel: $tag)..." & $py -m pip install llama-cpp-python --extra-index-url "https://abetlen.github.io/llama-cpp-python/whl/$tag" Warn "If pip says 'Building wheel for llama-cpp-python', no wheel matched — re-run with another tag." } else { Info "Installing llama-cpp-python (CPU only)..." & $py -m pip install llama-cpp-python Warn "If pip compiles from source, install 'Visual Studio Build Tools' with the C++ workload." } # ── 6. Remaining dependencies + ai folder ───────────────────────────── Info "Installing requirements.txt..." & $py -m pip install -r requirements.txt New-Item -ItemType Directory -Force -Path "ai" | Out-Null # ── 7. Done ────────────────────────────────────────────────────────── Write-Host "" Info "Installation complete." Write-Host "Next steps:" Write-Host " 1. Copy your .gguf files into: $(Get-Location)\ai\" Write-Host " 2. Edit config.py (_ALPHA_INTELLIGENCE_TO_LOAD, _MODEL_TYPE)" Write-Host " 3. Start the app:" Write-Host " .\.venv\Scripts\Activate.ps1" Write-Host " python main.py" ``` Optionally add a tiny `install.bat` so Windows users can just double-click: ```bat @echo off rem Double-click-friendly wrapper for install.ps1 powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0install.ps1" %* pause