# Continue (VS Code) mit dem zentralen LocalAI-Server Continue ist ein Open-Source-Plugin für VS Code (und JetBrains). Es bietet: | Funktion | Wofür | Modell auf dem Server | |---|---|---| | **Chat / Agent** | Fragen zum Code, Agent-Modus mit Tools (Dateien lesen/schreiben, Terminal) | `qwen3.5-35b-a3b` (oder `glm-4.7-flash`, `qwen3.5-9b`) | | **Edit / Apply** | markierten Code umschreiben lassen (`Ctrl+I`), Vorschläge übernehmen | wie Chat | | **Autocomplete** | Ghost-Text-Vervollständigung beim Tippen (Tab) | `qwen2.5-coder-1.5b` (läuft dauerhaft) | | **Embeddings** | `@codebase`-Suche über das ganze Projekt | `nomic-embed` (läuft dauerhaft, CPU) | Alles läuft über die eine API `http://:8800/v1` mit API-Key. Es geht nichts in die Cloud. --- ## 1. Voraussetzungen - Der Server läuft (`docker compose ps` auf alegab-pc, siehe [README](../README.md)). - Der Client-PC ist **im Heim-LAN (192.168.178.0/24)** oder **mit NetBird verbunden**. Andere Netze bekommen `403`. - Du hast den **API-Key**: Das ist `LLM_API_KEY` aus `.env` auf dem Server. ```bash grep ^LLM_API_KEY ~/workspace/localAI/.env ``` Verbindungstest vom Client aus: ```bash curl -H "Authorization: Bearer " http://192.168.178.72:8800/v1/models # NetBird: http://100.73.82.219:8800/v1/models ``` Kommt eine JSON-Liste mit den Modellen zurück, steht die Verbindung. ## 2. Extension installieren - **VS Code:** Extensions (`Ctrl+Shift+X`) öffnen, nach **„Continue"** suchen (Herausgeber: Continue) und installieren. Alternativ auf der Kommandozeile: `code --install-extension Continue.continue` - **VSCodium / Code-OSS:** gleicher Name, die Extension kommt dort aus Open VSX. Beim ersten Start zeigt Continue eine Anmeldeseite für den „Continue Hub". **Melde dich nicht an.** Wähle stattdessen *„Or, configure your own models"* bzw. *„Skip"* oder *„Local config"*. Damit bleibt alles lokal. ## 3. Konfiguration einspielen Continue liest die lokale Konfiguration aus: | System | Pfad | |---|---| | Linux / macOS | `~/.continue/config.yaml` und `~/.continue/.env` | | Windows | `%USERPROFILE%\.continue\config.yaml` und `%USERPROFILE%\.continue\.env` | **Linux/macOS:** ```bash mkdir -p ~/.continue cp ~/.continue/config.yaml ~/.continue/config.yaml.bak 2>/dev/null # Backup, falls vorhanden cp client/continue/config.yaml ~/.continue/config.yaml cp client/continue/.env.example ~/.continue/.env chmod 600 ~/.continue/.env $EDITOR ~/.continue/.env # LOCALAI_API_KEY= eintragen ``` **Windows (PowerShell):** ```powershell New-Item -ItemType Directory -Force $env:USERPROFILE\.continue Copy-Item client\continue\config.yaml $env:USERPROFILE\.continue\config.yaml Copy-Item client\continue\.env.example $env:USERPROFILE\.continue\.env notepad $env:USERPROFILE\.continue\.env ``` Die Dateien `config.yaml` und `.env.example` liegen in diesem Repo unter [`client/continue/`](../client/continue/). Auf einen anderen PC kopierst du sie per USB-Stick, scp oder Git. ## 4. Server-Adresse eintragen Oben in `config.yaml` gibt es den Block `model_defaults:`. Dort steht **eine** `apiBase`, die für alle Modelle gilt: ```yaml model_defaults: &localai provider: openai apiBase: http://192.168.178.72:8800/v1 # ← hier anpassen apiKey: ${{ secrets.LOCALAI_API_KEY }} ``` | Standort des Client-PCs | `apiBase` | |---|---| | auf alegab-pc selbst | `http://127.0.0.1:8800/v1` | | im Heim-LAN | `http://192.168.178.72:8800/v1` | | unterwegs über NetBird | `http://100.73.82.219:8800/v1` oder `http://.netbird.cloud:8800/v1` | > **Tipp für Laptops**, die mal im LAN und mal unterwegs sind: Nimm immer die **NetBird-Adresse**. Sie funktioniert auch zu Hause, solange NetBird verbunden ist. Dann musst du nie umschalten. Den NetBird-Namen und die NetBird-IP des Servers zeigt `netbird status -d` auf alegab-pc an. Nach dem Speichern lädt Continue die Konfiguration automatisch neu. Falls nicht: Command Palette (`Ctrl+Shift+P`) → *„Continue: Reload"* oder VS Code neu laden. ## 5. Telemetrie abschalten Continue sendet standardmäßig anonyme Nutzungsstatistiken. So schaltest du das ab: VS Code-Einstellungen (`Ctrl+,`) → nach `continue telemetry` suchen → **„Continue: Telemetry Enabled"** abhaken. Oder direkt in `settings.json`: ```json "continue.telemetryEnabled": false ``` ## 6. Benutzung | Aktion | Tastenkürzel (Standard) | |---|---| | Continue-Seitenleiste öffnen / Chat | `Ctrl+L` (markierten Code mitnehmen) | | Code inline bearbeiten (Edit) | Code markieren → `Ctrl+I` | | Autocomplete annehmen | `Tab` (Wort für Wort: `Ctrl+→`) | | Autocomplete ablehnen | `Esc` | | Modell wechseln | Dropdown unten in der Chat-Box | | Modus wechseln (Chat / Plan / Agent) | Dropdown links unten in der Chat-Box | **Kontext mit `@`** im Chat: `@codebase` (semantische Suche im Projekt), `@file`, `@folder`, `@diff` (aktuelle Git-Änderungen), `@terminal`, `@problems`. ### Hinweise zu den Modellen - **Erster Request nach längerer Pause:** Das Chat-Modell wird in den VRAM geladen, das dauert 10–60 s. Danach bleibt es 1 h geladen. - **Modellwechsel** zwischen den Chat-Modellen dauert ebenso. Am besten bei einem Modell bleiben. - Das **Autocomplete-** und das **Embedding-Modell** laufen dauerhaft und werden durch den Chat nie entladen. - Der Server ist **ein gemeinsames System**. Wenn mehrere Leute gleichzeitig chatten, werden die Anfragen nacheinander abgearbeitet. Wer ein *anderes* Chat-Modell wählt, löst bei allen einen Modellwechsel aus. - **Agent-Modus**: Gib kleine, klar umrissene Aufgaben. Lokale Modelle verlieren bei langen Mehrschritt-Aufträgen eher den Faden als Cloud-Modelle. ## 7. Fehlersuche | Symptom | Ursache / Lösung | |---|---| | `401 unauthorized` | API-Key fehlt oder ist falsch. `~/.continue/.env` prüfen (kein Leerzeichen, keine Anführungszeichen). | | `403 forbidden` | Der Client ist in einem nicht erlaubten Netz. LAN oder NetBird verbinden. | | Timeout / „connection refused" | Falsche `apiBase`, Server aus oder Firewall. `curl`-Test aus Abschnitt 1 ausprobieren. | | Erste Antwort dauert lange | Das Modell wird geladen, beim allerersten Mal sogar heruntergeladen. Abwarten. | | Autocomplete zeigt nichts | Unten rechts in der Statusleiste muss „Continue" aktiv sein (Klick → *Enable autocomplete*). Im Output-Panel *„Continue"* nach Fehlern schauen. Das Template in `config.yaml` (`promptTemplates.autocomplete`) muss unverändert sein. | | Autocomplete liefert Müll / Chat-Text | Für Autocomplete muss das Modell `qwen2.5-coder-1.5b` mit `useLegacyCompletionsEndpoint: true` eingestellt sein, kein Chat-Modell. | | Agent ruft keine Tools auf | Das Modell braucht `capabilities: [tool_use]`. `qwen3.5-35b-a3b` oder `glm-4.7-flash` nehmen. | | `@codebase` findet nichts | Indexierung läuft noch, siehe Fortschritt in der Continue-Seitenleiste. Neu anstoßen: Command Palette (`Ctrl+Shift+P`) → „Continue" eintippen → den Befehl zum Neu-Indexieren (*Re-Index* / *Rebuild codebase index*) wählen. | Logs des Servers (auf alegab-pc): ```bash cd ~/workspace/localAI docker compose logs -f llama-swap # Modell-Laden, Requests docker compose logs -f caddy # Zugriffe, 401/403 ``` ## 8. Fertige Varianten ### a) Nur ein Modell, minimal Wenn du nur Chat und Autocomplete willst, lösche in `config.yaml` die Einträge `GLM-4.7 Flash`, `Qwen3.5 9B` und `Nomic Embed`. ### b) Schwacher Client, schnelle Antworten Nimm `Qwen3.5 9B (schnell)` als Chat-Modell. Es liegt komplett im VRAM und antwortet deutlich schneller, ist aber weniger klug. ### c) Projektbezogene Konfiguration Continue liest zusätzlich `.continue/`-Ordner im Projekt. Dort kannst du z. B. projektspezifische Regeln ablegen (`.continue/rules/*.md`) und sie mit ins Repo einchecken. Die Modelle bleiben in der globalen `~/.continue/config.yaml`.