refactor: streamline runtime management surfaces

This commit is contained in:
Evandro Fonseca Junior committed 2026-03-27 09:16:52 -03:00
1 parent c91cbe51f2
commit ae3b69b27e
18 files changed
+894 -1742

No files matched your search

@@ -0,0 +1,132 @@
import { describe, expect, it } from "vitest";
import {
chooseModel,
createRuntimeConfigPatch,
dedupeModels,
getLocalRuntimeStartReason,
pathName,
toModelFile,
type RuntimeSettingsFormState,
} from "./runtime-settings-form";
import { createDefaultRuntimeSnapshot } from "./runtime-utils";
function createFormState(overrides: Partial<RuntimeSettingsFormState> = {}): RuntimeSettingsFormState {
return {
mode: "local",
startPolicy: "manual",
serverUrl: "https://api.example.com/",
apiKey: " sk-demo ",
modelsDir: "D:/models",
selectedModel: "D:/models/demo.gguf",
addr: "127.0.0.1:8080",
gpuLayers: 48,
ctxSize: 8192,
extraModels: [{ name: "demo.gguf", path: "D:/models/demo.gguf" }],
...overrides,
};
}
describe("runtime settings form helpers", () => {
it("keeps the current model when it still exists", () => {
const current = "D:/models/demo.gguf";
const scanned = [{ name: "demo.gguf", path: current }];
const extra = [{ name: "other.gguf", path: "D:/models/other.gguf" }];
expect(chooseModel(current, scanned, extra)).toBe(current);
});
it("falls back to the first available model when the current one disappears", () => {
expect(
chooseModel(
"D:/models/missing.gguf",
[{ name: "demo.gguf", path: "D:/models/demo.gguf" }],
[],
),
).toBe("D:/models/demo.gguf");
});
it("deduplicates model entries by path while keeping first occurrence", () => {
expect(
dedupeModels([
{ name: "demo.gguf", path: "D:/models/demo.gguf" },
{ name: "duplicate.gguf", path: "D:/models/demo.gguf" },
{ name: "other.gguf", path: "D:/models/other.gguf" },
]),
).toEqual([
{ name: "demo.gguf", path: "D:/models/demo.gguf" },
{ name: "other.gguf", path: "D:/models/other.gguf" },
]);
});
it("builds a trimmed local patch from the form state", () => {
const snapshot = createDefaultRuntimeSnapshot();
const patch = createRuntimeConfigPatch(snapshot.config, createFormState(), 32);
expect(patch).toMatchObject({
connection_mode: "local",
server_url: "https://api.example.com",
api_key: "sk-demo",
model_path: "D:/models/demo.gguf",
models_dir: "D:/models",
gpu_layers: 32,
ctx_size: 8192,
extra_model_paths: ["D:/models/demo.gguf"],
});
});
it("keeps saved local values untouched when editing remote mode", () => {
const snapshot = createDefaultRuntimeSnapshot();
const patch = createRuntimeConfigPatch(
{
...snapshot.config,
model_path: "D:/models/keep.gguf",
models_dir: "D:/models",
extra_model_paths: ["D:/models/keep.gguf"],
},
createFormState({
mode: "remote",
serverUrl: " https://api.example.com/ ",
apiKey: " remote-key ",
modelsDir: "",
selectedModel: "",
extraModels: [],
}),
16,
);
expect(patch).toMatchObject({
connection_mode: "remote",
server_url: "https://api.example.com",
api_key: "remote-key",
model_path: "D:/models/keep.gguf",
models_dir: "D:/models",
extra_model_paths: ["D:/models/keep.gguf"],
});
});
it("explains why local runtime start is blocked", () => {
expect(
getLocalRuntimeStartReason({ mode: "local", binaryPath: null, selectedModel: "D:/models/demo.gguf" }),
).toContain("Build or bundle");
expect(
getLocalRuntimeStartReason({ mode: "local", binaryPath: "D:/bin/localllm.exe", selectedModel: "" }),
).toContain("Choose a model");
expect(
getLocalRuntimeStartReason({
mode: "local",
binaryPath: "D:/bin/localllm.exe",
selectedModel: "D:/models/demo.gguf",
}),
).toBe("");
});
it("normalizes model file labels from a path", () => {
expect(pathName("D:/models/demo.gguf")).toBe("demo.gguf");
expect(toModelFile("D:/models/demo.gguf")).toEqual({
name: "demo.gguf",
path: "D:/models/demo.gguf",
});
});
});