Offline Model Routing
Source: docs/models/routing.md
Generated: 01/09/2026
JoinGrove replaces cloud-only model routers with offline-first routing — Ollama BYOK, adaptive RAM tiers, and egress policy.
Key Concepts
- What: Model routing decides which endpoint serves chat/agent requests: local Ollama, Copilot cloud, or platform server — governed by zero egress and security mode.
- Why: Unreliable networks and privacy-conscious campuses need deterministic local routing, not opaque cloud model pickers.
- Related: Egress policy (
egress.md), adaptive performance (../global-south/performance.md), comparisons (comparisons.md).
API / Reference
| Mode | Routes to | Blocked when zero egress |
|---|---|---|
| Offline (default) | localhost:11434 (Ollama) |
Copilot cloud, marketplace, telemetry |
| Studio cloud (opt-in) | joingrovePlatform.serverUrl |
Until allowPlatformRequests |
| Billing checkout (opt-in) | joingroveBilling.serverUrl |
Until allowBillingRequests |
| Copilot cloud | GitHub Copilot endpoints | Until zero egress off |
Adaptive tiers (joingroveGlobalSouth / startup)
| Profile | RAM hint | Default model tier |
|---|---|---|
| Lite | ≤ 8 GB | qwen2.5-coder:1.5b |
| Standard | 16 GB+ | qwen2.5-coder:7b |
| Full | High-spec | User choice |
Commands
| Command | ID |
|---|---|
| Toggle zero egress | joingrove.toggleZeroEgressMode |
| Security mode wizard | joingrove.securityModeWizard |
| Telemetry dashboard | joingrove.openTelemetryDashboard |
| Set up Ollama | joingrove.setupOfflineAi |
Setup & Installation
- Default: zero egress ON — all traffic stays local except loopback + configured allowlist.
- Command Palette → Open Transparent Telemetry Dashboard to inspect blocked/allowed hosts.
- For Studio cloud → security wizard or
joingrove.offline.allowPlatformRequests. - For billing →
joingrove.offline.allowBillingRequestswhen checking out Team tier.
Code Examples
Toggle egress (shows current state in notification):
Command Palette → joingrove.toggleZeroEgressMode
Verify egress policy in CI:
npm run verify-offline-first
Next: Read generated egress.md for host allow/block tables.
How It Connects
- Egress reference:
egress.md - Comparisons (cloud vs offline):
comparisons.md - Performance profiles:
performance.md - In-app command:
joingrove.openTelemetryDashboard