feat: rebuild xiteng.site homelab platform

This commit is contained in:
2026-08-12 09:48:25 +08:00
parent 557b0eca33
commit 5b84988789
128 changed files with 14979 additions and 292 deletions
+44
View File
@@ -0,0 +1,44 @@
import {describe, expect, test} from "bun:test";
import {applyBrowserProviderSettings} from "./browser-provider-settings.ts";
import {discoverProviderModels} from "./provider-connectivity.ts";
function llamaProvider() {
return {
id: "llama.cpp",
name: "llama.cpp",
api: "openai-completions",
connection: {type: "frontend", baseUrl: "http://127.0.0.1:8080/v1", proxy: null},
auth: {type: "none"},
headers: {},
defaultModel: "local-model",
discovery: {type: "openai-models-list", url: "http://127.0.0.1:8080/v1/models"},
builtin: true,
credentialState: "local",
credentials: []
};
}
describe("llama.cpp discovery", () => {
test("applies a browser-local endpoint override", () => {
const provider = applyBrowserProviderSettings(llamaProvider(), {provider: {baseUrl: "http://192.168.4.20:8081/v1/"}});
expect(provider.connection.baseUrl).toBe("http://192.168.4.20:8081/v1");
expect(provider.discovery.url).toBe("http://192.168.4.20:8081/v1/models");
});
test("falls back to /props when /v1/models is unavailable", async () => {
const requests = [];
const result = await discoverProviderModels(llamaProvider(), {}, async (input) => {
requests.push(String(input));
if (String(input).endsWith("/v1/models")) {
return new Response(JSON.stringify({error: "Not Found"}), {status: 404, headers: {"Content-Type": "application/json"}});
}
return new Response(JSON.stringify({
model_path: "/models/Qwen3.5-9B-Q4_K_M.gguf",
default_generation_settings: {n_ctx: 32768}
}), {status: 200, headers: {"Content-Type": "application/json"}});
});
expect(requests).toEqual(["http://127.0.0.1:8080/v1/models", "http://127.0.0.1:8080/props"]);
expect(result.endpoint).toBe("http://127.0.0.1:8080/props");
expect(result.models).toEqual([{id: "Qwen3.5-9B-Q4_K_M.gguf", name: "Qwen3.5-9B-Q4_K_M.gguf", ownedBy: "llamacpp", contextWindow: 32768}]);
});
});