refactor: start-single.sh → start-coding-server.sh, stop-servers.sh → stop-coding-server.sh
Konsistente Benennung: Server-Skripte beschreiben ihre Funktion (coding-server), nicht das spezifische Modell oder die Architektur. Alle Referenzen in Extension, Tests, README und BEDIENUNGSANLEITUNG aktualisiert. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
2b0ca79dca
commit
3f66d4a387
6 changed files with 40 additions and 40 deletions
|
|
@ -52,7 +52,7 @@ der Judge kritisiert direkt und konkret, der Coder repariert ohne Widerspruch.
|
|||
|
||||
```bash
|
||||
cd ~/pi_coder
|
||||
./start-single.sh
|
||||
./start-coding-server.sh
|
||||
```
|
||||
|
||||
Ausgabe bei Erfolg:
|
||||
|
|
@ -95,8 +95,8 @@ pi
|
|||
Der Server läuft standardmäßig auf **GPU 1** (überschreibbar):
|
||||
|
||||
```bash
|
||||
./start-single.sh # GPU 1 (Standard)
|
||||
GPU_DEVICE=0 ./start-single.sh # GPU 0
|
||||
./start-coding-server.sh # GPU 1 (Standard)
|
||||
GPU_DEVICE=0 ./start-coding-server.sh # GPU 0
|
||||
```
|
||||
|
||||
Auf einem System mit mehreren GPUs empfiehlt es sich, GPU 0 (Display) freizuhalten
|
||||
|
|
@ -112,7 +112,7 @@ nvidia-smi --query-gpu=index,name,memory.used,memory.free --format=csv
|
|||
|
||||
```bash
|
||||
cd ~/pi_coder
|
||||
./start-single.sh
|
||||
./start-coding-server.sh
|
||||
```
|
||||
|
||||
Erwartete Ausgabe:
|
||||
|
|
@ -127,7 +127,7 @@ Dauer: bis zu 5 Minuten. Danach ist das Modell im VRAM und sofort antwortbereit.
|
|||
### Server stoppen
|
||||
|
||||
```bash
|
||||
./stop-servers.sh
|
||||
./stop-coding-server.sh
|
||||
```
|
||||
|
||||
### Status prüfen
|
||||
|
|
@ -141,7 +141,7 @@ Dauer: bis zu 5 Minuten. Danach ist das Modell im VRAM und sofort antwortbereit.
|
|||
Falls die GGUF-Datei an einem anderen Ort liegt:
|
||||
|
||||
```bash
|
||||
HF_HOME=/mnt/daten/huggingface ./start-single.sh
|
||||
HF_HOME=/mnt/daten/huggingface ./start-coding-server.sh
|
||||
```
|
||||
|
||||
---
|
||||
|
|
@ -856,7 +856,7 @@ Die Checkboxen werden automatisch abgehakt:
|
|||
ls $HF_HOME/models/qwen3/
|
||||
|
||||
# Oder mit explizitem Pfad starten:
|
||||
HF_HOME=/korrekter/pfad ./start-single.sh
|
||||
HF_HOME=/korrekter/pfad ./start-coding-server.sh
|
||||
```
|
||||
|
||||
### Server startet nicht / HTTP nicht erreichbar
|
||||
|
|
@ -872,7 +872,7 @@ HF_HOME=/korrekter/pfad ./start-single.sh
|
|||
docker logs coding_model | tail -50
|
||||
# Suche nach: "CUDA out of memory" oder "failed to allocate"
|
||||
```
|
||||
→ Kontext reduzieren: `-c 65536` statt `-c 262144` in `start-single.sh`
|
||||
→ Kontext reduzieren: `-c 65536` statt `-c 262144` in `start-coding-server.sh`
|
||||
|
||||
2. GPU nicht verfügbar:
|
||||
```bash
|
||||
|
|
@ -880,15 +880,15 @@ HF_HOME=/korrekter/pfad ./start-single.sh
|
|||
# GPU 1 testen:
|
||||
docker run --gpus '"device=1"' --rm nvidia/cuda:12.0-base nvidia-smi
|
||||
# Andere GPU testen:
|
||||
GPU_DEVICE=0 ./start-single.sh
|
||||
GPU_DEVICE=0 ./start-coding-server.sh
|
||||
```
|
||||
|
||||
3. Port 8001 bereits belegt:
|
||||
```bash
|
||||
ss -tlnp | grep 8001
|
||||
docker ps -a # alter Container noch vorhanden?
|
||||
./stop-servers.sh
|
||||
./start-single.sh
|
||||
./stop-coding-server.sh
|
||||
./start-coding-server.sh
|
||||
```
|
||||
|
||||
### "Agent is already processing a prompt"
|
||||
|
|
|
|||
28
README.md
28
README.md
|
|
@ -63,11 +63,11 @@ dasselbe Modell, derselbe Container, unterschiedliche Persona.
|
|||
sudo systemctl restart docker
|
||||
```
|
||||
- NVIDIA-GPU: empfohlen RTX 3090 (24 GB VRAM). Standard: GPU 1. Überschreibbar mit
|
||||
`GPU_DEVICE=0 ./start-single.sh`. Bei 3 GPUs: GPU 0 für Display reservieren.
|
||||
`GPU_DEVICE=0 ./start-coding-server.sh`. Bei 3 GPUs: GPU 0 für Display reservieren.
|
||||
- GGUF-Modell vorhanden unter:
|
||||
`$HF_HOME/models/qwen3/Qwen3.6-27B-Uncensored-HauhauCS-Aggressive-IQ4_XS.gguf`
|
||||
- Standard-Pfad: `HF_HOME=/home/dschlueter/nvme2n1p7_home/huggingface`
|
||||
- Überschreibbar: `HF_HOME=/anderer/pfad ./start-single.sh`
|
||||
- Überschreibbar: `HF_HOME=/anderer/pfad ./start-coding-server.sh`
|
||||
- [pi agent](https://github.com/earendil-works/pi) installiert (`~/.pi/`)
|
||||
|
||||
---
|
||||
|
|
@ -86,7 +86,7 @@ cd ~/pi_coder
|
|||
# /reload
|
||||
|
||||
# 4. Server starten
|
||||
./start-single.sh
|
||||
./start-coding-server.sh
|
||||
```
|
||||
|
||||
Das Install-Skript sichert eine vorhandene `~/.pi/agent/settings.json` als `.bak` und
|
||||
|
|
@ -105,23 +105,23 @@ Nach späteren Änderungen an `pi-coder-judge-extension.ts` oder `models.json`:
|
|||
|
||||
```bash
|
||||
# Server starten (empfohlen — dauert 1–3 Minuten)
|
||||
./start-single.sh
|
||||
./start-coding-server.sh
|
||||
|
||||
# Server auf anderer GPU starten
|
||||
GPU_DEVICE=0 ./start-single.sh
|
||||
GPU_DEVICE=0 ./start-coding-server.sh
|
||||
|
||||
# Stoppen
|
||||
./stop-servers.sh
|
||||
./stop-coding-server.sh
|
||||
|
||||
# Status prüfen
|
||||
./status.sh
|
||||
```
|
||||
|
||||
`start-single.sh` startet den Container und wartet bis HTTP-ready (max. 5 Minuten — die
|
||||
`start-coding-server.sh` startet den Container und wartet bis HTTP-ready (max. 5 Minuten — die
|
||||
neue llama.cpp-Version prüft beim Start, ob Modell + KV-Cache in den VRAM passen, was
|
||||
zusätzliche Zeit kostet).
|
||||
|
||||
Wenn der Server bereits läuft und du `start-single.sh` aufrufst, wird der laufende
|
||||
Wenn der Server bereits läuft und du `start-coding-server.sh` aufrufst, wird der laufende
|
||||
Container zuerst per `docker rm -f` gestoppt und dann neu gestartet — ein laufender
|
||||
Inference-Request wird dabei abgebrochen.
|
||||
|
||||
|
|
@ -149,7 +149,7 @@ Inference-Request wird dabei abgebrochen.
|
|||
| `-n 16384` | 16K | Maximale Ausgabelänge. |
|
||||
| `--temp 0.2` | — | Deterministisch — Coder-Rolle. Der Judge-System-Prompt gleicht die etwas höhere Temperatur aus. |
|
||||
| `--parallel 2` | — | 2 Slots, damit pi agent Folgeanfragen schnell hintereinander stellen kann. |
|
||||
| `--gpus '"device=1"'` | — | Standard: GPU 1. Überschreibbar: `GPU_DEVICE=0 ./start-single.sh`. |
|
||||
| `--gpus '"device=1"'` | — | Standard: GPU 1. Überschreibbar: `GPU_DEVICE=0 ./start-coding-server.sh`. |
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -184,16 +184,16 @@ dürfen nennenswert VRAM belegen (z. B. TTS-Dienste, Ollama). Prüfen mit:
|
|||
nvidia-smi --query-gpu=index,memory.used,memory.free --format=csv
|
||||
```
|
||||
|
||||
Falls der VRAM nicht reicht: Kontext in `start-single.sh` auf `131072` oder `65536` reduzieren.
|
||||
Falls der VRAM nicht reicht: Kontext in `start-coding-server.sh` auf `131072` oder `65536` reduzieren.
|
||||
|
||||
### Anpassung für andere GPU-Konfigurationen
|
||||
|
||||
```bash
|
||||
# Andere GPU verwenden:
|
||||
GPU_DEVICE=0 ./start-single.sh
|
||||
GPU_DEVICE=0 ./start-coding-server.sh
|
||||
|
||||
# 2 GPUs für einen Server (sehr großer Kontext):
|
||||
# start-single.sh anpassen:
|
||||
# start-coding-server.sh anpassen:
|
||||
--gpus '"device=0,1"' \
|
||||
--tensor-split 0.5,0.5 \
|
||||
--main-gpu 0 \
|
||||
|
|
@ -253,8 +253,8 @@ und Extension-Guards gegen Regressionen.
|
|||
| `settings.json` | pi-agent-Settings (Default-Modell, aktivierte Modelle) — wird von Install-Skript deployt |
|
||||
| `run-tests.sh` | Tests ausführen |
|
||||
| `tests/` | Testdateien (pure-logic, config, extension-guards, scripts) |
|
||||
| `start-single.sh` | Single-Server starten (Port 8001, Coder + Judge) |
|
||||
| `stop-servers.sh` | Container stoppen |
|
||||
| `start-coding-server.sh` | Single-Server starten (Port 8001, Coder + Judge) |
|
||||
| `stop-coding-server.sh` | Container stoppen |
|
||||
| `status.sh` | Laufstatus anzeigen |
|
||||
| `install_servers_and_pi_coder_extension.sh` | Extension + models.json + settings.json nach `~/.pi/agent/` deployen |
|
||||
| `examples/` | Demo-Projekte (Python, Rust, Go, C, Bash, HTML/JS) für Live-Demos |
|
||||
|
|
|
|||
|
|
@ -1072,7 +1072,7 @@ export default function (pi: ExtensionAPI) {
|
|||
return;
|
||||
}
|
||||
if (!await waitUntilModelReady(pi, ctx, 8001, "coding_model")) {
|
||||
ctx.ui.notify("Server nicht bereit (Port 8001) — start-single.sh ausführen", "error");
|
||||
ctx.ui.notify("Server nicht bereit (Port 8001) — start-coding-server.sh ausführen", "error");
|
||||
return;
|
||||
}
|
||||
await writeTaskMd(pi, ctx, task);
|
||||
|
|
@ -1086,7 +1086,7 @@ export default function (pi: ExtensionAPI) {
|
|||
description: "Review gegen TASK.md + git show HEAD → Judge-Rolle (:8001).",
|
||||
handler: async function (args: string, ctx: ExtensionCommandContext) {
|
||||
if (!await waitUntilModelReady(pi, ctx, 8001, "coding_model")) {
|
||||
ctx.ui.notify("Server nicht bereit (Port 8001) — start-single.sh ausführen", "error");
|
||||
ctx.ui.notify("Server nicht bereit (Port 8001) — start-coding-server.sh ausführen", "error");
|
||||
return;
|
||||
}
|
||||
await selectRole(pi, ctx, "judge");
|
||||
|
|
@ -1099,7 +1099,7 @@ export default function (pi: ExtensionAPI) {
|
|||
description: "Fixt Judge-Kritik, committet Ergebnis → Coder-Rolle (:8001).",
|
||||
handler: async function (args: string, ctx: ExtensionCommandContext) {
|
||||
if (!await waitUntilModelReady(pi, ctx, 8001, "coding_model")) {
|
||||
ctx.ui.notify("Server nicht bereit (Port 8001) — start-single.sh ausführen", "error");
|
||||
ctx.ui.notify("Server nicht bereit (Port 8001) — start-coding-server.sh ausführen", "error");
|
||||
return;
|
||||
}
|
||||
await selectRole(pi, ctx, "coder");
|
||||
|
|
@ -1112,7 +1112,7 @@ export default function (pi: ExtensionAPI) {
|
|||
description: "Finale Freigabe gegen TASK.md + git log → Judge-Rolle (:8001).",
|
||||
handler: async function (args: string, ctx: ExtensionCommandContext) {
|
||||
if (!await waitUntilModelReady(pi, ctx, 8001, "coding_model")) {
|
||||
ctx.ui.notify("Server nicht bereit (Port 8001) — start-single.sh ausführen", "error");
|
||||
ctx.ui.notify("Server nicht bereit (Port 8001) — start-coding-server.sh ausführen", "error");
|
||||
return;
|
||||
}
|
||||
await selectRole(pi, ctx, "judge");
|
||||
|
|
@ -1178,7 +1178,7 @@ export default function (pi: ExtensionAPI) {
|
|||
ctx.ui.setStatus("optimize", "Single-Server wird geprüft (Port 8001)…");
|
||||
const serverReady = await waitUntilModelReady(pi, ctx, 8001, "coding_model");
|
||||
if (!serverReady) {
|
||||
finalNotify(ctx, "⛔ Server nicht erreichbar", "Port 8001 — kein HTTP 200 nach 3 min. start-single.sh ausführen");
|
||||
finalNotify(ctx, "⛔ Server nicht erreichbar", "Port 8001 — kein HTTP 200 nach 3 min. start-coding-server.sh ausführen");
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
|
|
@ -1203,7 +1203,7 @@ export default function (pi: ExtensionAPI) {
|
|||
// echten Completion-Request bedeutet: Modell ist im VRAM und bereit.
|
||||
ctx.ui.setStatus("optimize", "Single-Server wird geprüft…");
|
||||
if (!await waitUntilModelReady(pi, ctx, 8001, "coding_model")) {
|
||||
finalNotify(ctx, "⛔ Server nicht erreichbar", "Port 8001 — kein HTTP 200 nach 3 min. start-single.sh ausführen");
|
||||
finalNotify(ctx, "⛔ Server nicht erreichbar", "Port 8001 — kein HTTP 200 nach 3 min. start-coding-server.sh ausführen");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
|
@ -1409,7 +1409,7 @@ export default function (pi: ExtensionAPI) {
|
|||
return;
|
||||
}
|
||||
if (!await waitUntilModelReady(pi, ctx, 8001, "coding_model")) {
|
||||
ctx.ui.notify("Server nicht bereit (Port 8001) — start-single.sh ausführen", "error");
|
||||
ctx.ui.notify("Server nicht bereit (Port 8001) — start-coding-server.sh ausführen", "error");
|
||||
return;
|
||||
}
|
||||
await selectRole(pi, ctx, "coder");
|
||||
|
|
@ -1422,7 +1422,7 @@ export default function (pi: ExtensionAPI) {
|
|||
description: "Schnelle OK/PROBLEM-Prüfung einer kleinen Codeänderung → Judge-Rolle (:8001).",
|
||||
handler: async function (args: string, ctx: ExtensionCommandContext) {
|
||||
if (!await waitUntilModelReady(pi, ctx, 8001, "coding_model")) {
|
||||
ctx.ui.notify("Server nicht bereit (Port 8001) — start-single.sh ausführen", "error");
|
||||
ctx.ui.notify("Server nicht bereit (Port 8001) — start-coding-server.sh ausführen", "error");
|
||||
return;
|
||||
}
|
||||
await selectRole(pi, ctx, "judge");
|
||||
|
|
@ -1490,7 +1490,7 @@ export default function (pi: ExtensionAPI) {
|
|||
return;
|
||||
}
|
||||
if (!await waitUntilModelReady(pi, ctx, 8001, "coding_model")) {
|
||||
ctx.ui.notify("Server nicht bereit (Port 8001) — start-single.sh ausführen", "error");
|
||||
ctx.ui.notify("Server nicht bereit (Port 8001) — start-coding-server.sh ausführen", "error");
|
||||
return;
|
||||
}
|
||||
await writeTaskMd(pi, ctx, task);
|
||||
|
|
@ -1572,7 +1572,7 @@ export default function (pi: ExtensionAPI) {
|
|||
|
||||
// Standard-Verhalten: unterbrochenen Prozess wieder aufnehmen
|
||||
if (!await waitUntilModelReady(pi, ctx, 8001, "coding_model")) {
|
||||
ctx.ui.notify("Server nicht bereit (Port 8001) — start-single.sh ausführen", "error");
|
||||
ctx.ui.notify("Server nicht bereit (Port 8001) — start-coding-server.sh ausführen", "error");
|
||||
return;
|
||||
}
|
||||
await selectRole(pi, ctx, "coder");
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ MODEL_ALIAS="coding_model"
|
|||
GPU_DEVICE="${GPU_DEVICE:-1}"
|
||||
|
||||
echo "[*] Verwende HF_HOME = $HF_HOME"
|
||||
echo "[*] GPU device = $GPU_DEVICE (überschreibbar: GPU_DEVICE=2 ./start-single.sh)"
|
||||
echo "[*] GPU device = $GPU_DEVICE (überschreibbar: GPU_DEVICE=2 ./start-coding-server.sh)"
|
||||
if [ ! -f "$HF_HOME/$MODEL_REL_PATH" ]; then
|
||||
echo "[!] Modell-Datei nicht gefunden: $HF_HOME/$MODEL_REL_PATH" >&2
|
||||
exit 1
|
||||
|
|
@ -22,15 +22,15 @@ test("Dual-GPU-Skripte sind entfernt", () => {
|
|||
}
|
||||
});
|
||||
|
||||
test("start-single.sh nutzt eine GPU und registriert Alias coding_model", () => {
|
||||
const s = readRepoFile("start-single.sh");
|
||||
test("start-coding-server.sh nutzt eine GPU und registriert Alias coding_model", () => {
|
||||
const s = readRepoFile("start-coding-server.sh");
|
||||
assert.match(s, /--alias\s+"\$\{MODEL_ALIAS\}"/);
|
||||
assert.match(s, /MODEL_ALIAS="coding_model"/);
|
||||
assert.match(s, /device=\$\{GPU_DEVICE\}/, "GPU muss konfigurierbar/einzeln sein");
|
||||
});
|
||||
|
||||
test("stop-servers.sh stoppt den Single-Container", () => {
|
||||
assert.match(readRepoFile("stop-servers.sh"), /coding_model/);
|
||||
test("stop-coding-server.sh stoppt den Single-Container", () => {
|
||||
assert.match(readRepoFile("stop-coding-server.sh"), /coding_model/);
|
||||
});
|
||||
|
||||
test("status.sh prüft den Single-Container", () => {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue