first try

This commit is contained in:
DigitalInfinity committed 2026-10-15 00:01:26 +02:00
1 parent b10435f5f7
commit 99517f483a
14 files changed
+822

No files matched your search

+151
View File
@@ -0,0 +1,151 @@
# 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://<server>: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 <KEY>" 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=<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-name>.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`.
+64
View File
@@ -0,0 +1,64 @@
# opencode mit dem zentralen LocalAI-Server
opencode ist ein Coding-Agent für das Terminal. Er läuft auf dem Client-PC und arbeitet dort auf deinem Code. Nur die Modell-Anfragen gehen an den Server.
## 1. opencode installieren
| System | Befehl |
|---|---|
| Arch / CachyOS | `sudo pacman -S opencode` (oder AUR `opencode-bin`) |
| Linux / macOS allgemein | `curl -fsSL https://opencode.ai/install \| bash` |
| macOS (Homebrew) | `brew install sst/tap/opencode` |
| Windows | `npm i -g opencode-ai` (Node.js nötig) oder `scoop install opencode` |
## 2. Konfiguration einspielen
| System | Pfad |
|---|---|
| Linux / macOS | `~/.config/opencode/opencode.json` |
| Windows | `%USERPROFILE%\.config\opencode\opencode.json` |
```bash
mkdir -p ~/.config/opencode
cp ~/.config/opencode/opencode.json ~/.config/opencode/opencode.json.bak 2>/dev/null
cp client/opencode.json ~/.config/opencode/opencode.json
```
Die Vorlage liegt unter [`client/opencode.json`](../client/opencode.json). Sie nutzt zwei Umgebungsvariablen:
| Variable | Wert |
|---|---|
| `LOCALAI_HOST` | `127.0.0.1` (auf dem Server), `192.168.178.72` (LAN), `100.73.82.219` (NetBird) |
| `LOCALAI_API_KEY` | `LLM_API_KEY` aus der `.env` des Servers |
**fish** (`~/.config/fish/config.fish`):
```fish
set -gx LOCALAI_HOST 100.73.82.219
set -gx LOCALAI_API_KEY <KEY>
```
**bash/zsh** (`~/.bashrc` / `~/.zshrc`):
```bash
export LOCALAI_HOST=100.73.82.219
export LOCALAI_API_KEY=<KEY>
```
**Windows (PowerShell, dauerhaft):**
```powershell
[Environment]::SetEnvironmentVariable("LOCALAI_HOST", "100.73.82.219", "User")
[Environment]::SetEnvironmentVariable("LOCALAI_API_KEY", "<KEY>", "User")
```
## 3. Benutzen
```bash
cd ~/mein-projekt
opencode
```
- `/models` zeigt die Modelle. Dort sollten nur `LocalAI (alegab-pc)`-Einträge stehen.
- `/init` erzeugt eine `AGENTS.md` mit Projektwissen. Das hilft lokalen Modellen sehr und lohnt sich einmal pro Projekt.
- `Tab` wechselt zwischen dem **Build**-Agenten (darf ändern) und dem **Plan**-Agenten (nur lesen).
## Hinweise
- `small_model` zeigt bewusst auf dasselbe Modell wie `model`. Ein zweites Chat-Modell würde auf dem Server bei jedem Titel- oder Zusammenfassungs-Aufruf einen Modellwechsel auslösen.
- Die Kontextgrenzen in `limit.context` passen zur Server-Konfiguration (`-c` in `llama-swap/config.yaml`). Ändert man die eine Seite, muss man die andere mitziehen.
- Fehlercodes (401/403/Timeout): siehe Tabelle in [continue.md](continue.md#7-fehlersuche). Die Ursachen sind dieselben.