2026-06-15 02:58:21 +02:00
|
|
|
// Testet die Konfig-Invarianten der Single-Server-Architektur.
|
|
|
|
|
// Der ursprüngliche Bug war eine Konfig-Inkonsistenz (Default zeigte auf toten Port 8002).
|
|
|
|
|
|
|
|
|
|
import { test } from "node:test";
|
|
|
|
|
import assert from "node:assert/strict";
|
|
|
|
|
import { readJson, readRepoFile } from "./helpers.mjs";
|
|
|
|
|
|
|
|
|
|
const models = readJson("models.json");
|
|
|
|
|
const settings = readJson("settings.json");
|
|
|
|
|
|
refactor: Modell- und Container-Alias auf coding_model vereinheitlicht
Statt modell-spezifischer Namen (qwen3.5-single, qwen36-27b-single) wird
überall der semantisch neutrale Bezeichner coding_model verwendet.
Dadurch kann das Modell bei Bedarf ausgetauscht werden, ohne Konfiguration,
Skripte oder Tests anpassen zu müssen.
Geändert: models.json, settings.json, start-single.sh, stop-servers.sh,
status.sh, pi-coder-judge-extension.ts, tests/, README.md, BEDIENUNGSANLEITUNG.md
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-15 05:26:58 +02:00
|
|
|
test("models.json: Provider llama-cpp-single hat genau ein Modell coding_model auf Port 8001", () => {
|
2026-06-15 02:58:21 +02:00
|
|
|
const p = models.providers["llama-cpp-single"];
|
|
|
|
|
assert.ok(p, "Provider llama-cpp-single fehlt");
|
|
|
|
|
assert.match(p.baseUrl, /:8001\//, "llama-cpp-single muss auf Port 8001 zeigen");
|
refactor: Modell- und Container-Alias auf coding_model vereinheitlicht
Statt modell-spezifischer Namen (qwen3.5-single, qwen36-27b-single) wird
überall der semantisch neutrale Bezeichner coding_model verwendet.
Dadurch kann das Modell bei Bedarf ausgetauscht werden, ohne Konfiguration,
Skripte oder Tests anpassen zu müssen.
Geändert: models.json, settings.json, start-single.sh, stop-servers.sh,
status.sh, pi-coder-judge-extension.ts, tests/, README.md, BEDIENUNGSANLEITUNG.md
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-15 05:26:58 +02:00
|
|
|
assert.deepEqual(p.models.map((m) => m.id), ["coding_model"]);
|
2026-06-15 02:58:21 +02:00
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test("models.json: tote Dual-/Alt-Provider sind entfernt", () => {
|
|
|
|
|
for (const dead of ["llama-cpp", "llama-cpp-coder", "llama-cpp-judge"]) {
|
|
|
|
|
assert.ok(!(dead in models.providers), `Toter Provider '${dead}' noch vorhanden`);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test("models.json: kein Verweis mehr auf den toten Port 8002", () => {
|
|
|
|
|
assert.doesNotMatch(JSON.stringify(models), /:8002/);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test("settings.json: Default zeigt auf den Single-Server (nicht Port 8002)", () => {
|
|
|
|
|
assert.equal(settings.defaultProvider, "llama-cpp-single");
|
refactor: Modell- und Container-Alias auf coding_model vereinheitlicht
Statt modell-spezifischer Namen (qwen3.5-single, qwen36-27b-single) wird
überall der semantisch neutrale Bezeichner coding_model verwendet.
Dadurch kann das Modell bei Bedarf ausgetauscht werden, ohne Konfiguration,
Skripte oder Tests anpassen zu müssen.
Geändert: models.json, settings.json, start-single.sh, stop-servers.sh,
status.sh, pi-coder-judge-extension.ts, tests/, README.md, BEDIENUNGSANLEITUNG.md
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-15 05:26:58 +02:00
|
|
|
assert.equal(settings.defaultModel, "coding_model");
|
|
|
|
|
assert.deepEqual(settings.enabledModels, ["llama-cpp-single/coding_model"]);
|
2026-06-15 02:58:21 +02:00
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test("settings.json: defaultProvider/defaultModel existieren in models.json", () => {
|
|
|
|
|
const p = models.providers[settings.defaultProvider];
|
|
|
|
|
assert.ok(p, `defaultProvider '${settings.defaultProvider}' nicht in models.json`);
|
|
|
|
|
assert.ok(
|
|
|
|
|
p.models.some((m) => m.id === settings.defaultModel),
|
|
|
|
|
`defaultModel '${settings.defaultModel}' nicht im Provider`
|
|
|
|
|
);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test("settings.json: jeder enabledModels-Eintrag verweist auf existierende Provider/Modelle", () => {
|
|
|
|
|
for (const ref of settings.enabledModels) {
|
|
|
|
|
const idx = ref.indexOf("/");
|
|
|
|
|
const prov = ref.slice(0, idx);
|
|
|
|
|
const id = ref.slice(idx + 1);
|
|
|
|
|
const p = models.providers[prov];
|
|
|
|
|
assert.ok(p, `enabledModels: Provider '${prov}' fehlt in models.json`);
|
|
|
|
|
assert.ok(p.models.some((m) => m.id === id), `enabledModels: Modell '${id}' fehlt in '${prov}'`);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test("settings.json ist valides JSON ohne überraschende Felder", () => {
|
|
|
|
|
// Reine Smoke-Prüfung, dass die Datei parsebar bleibt und die Kernschlüssel da sind.
|
|
|
|
|
for (const key of ["defaultProvider", "defaultModel", "enabledModels"]) {
|
|
|
|
|
assert.ok(key in settings, `Schlüssel '${key}' fehlt in settings.json`);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test("Konsistenz: Extension und settings.json nennen denselben Provider/dasselbe Modell", () => {
|
|
|
|
|
const ext = readRepoFile("pi-coder-judge-extension.ts");
|
|
|
|
|
assert.match(ext, /SINGLE_PROVIDER = "llama-cpp-single"/);
|
refactor: Modell- und Container-Alias auf coding_model vereinheitlicht
Statt modell-spezifischer Namen (qwen3.5-single, qwen36-27b-single) wird
überall der semantisch neutrale Bezeichner coding_model verwendet.
Dadurch kann das Modell bei Bedarf ausgetauscht werden, ohne Konfiguration,
Skripte oder Tests anpassen zu müssen.
Geändert: models.json, settings.json, start-single.sh, stop-servers.sh,
status.sh, pi-coder-judge-extension.ts, tests/, README.md, BEDIENUNGSANLEITUNG.md
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-15 05:26:58 +02:00
|
|
|
assert.match(ext, /SINGLE_MODEL_ID = "coding_model"/);
|
2026-06-15 02:58:21 +02:00
|
|
|
assert.equal(settings.defaultProvider, "llama-cpp-single");
|
refactor: Modell- und Container-Alias auf coding_model vereinheitlicht
Statt modell-spezifischer Namen (qwen3.5-single, qwen36-27b-single) wird
überall der semantisch neutrale Bezeichner coding_model verwendet.
Dadurch kann das Modell bei Bedarf ausgetauscht werden, ohne Konfiguration,
Skripte oder Tests anpassen zu müssen.
Geändert: models.json, settings.json, start-single.sh, stop-servers.sh,
status.sh, pi-coder-judge-extension.ts, tests/, README.md, BEDIENUNGSANLEITUNG.md
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-15 05:26:58 +02:00
|
|
|
assert.equal(settings.defaultModel, "coding_model");
|
2026-06-15 02:58:21 +02:00
|
|
|
});
|