АРЧ - UI и domain loop: синхронизировать локальную LLM-модель через shared config + КВИН 3
This commit is contained in:
@@ -0,0 +1,107 @@
|
||||
"use strict";
|
||||
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.buildSharedLlmConfigRouter = buildSharedLlmConfigRouter;
|
||||
const express_1 = require("express");
|
||||
const config_1 = require("../config");
|
||||
const http_1 = require("../utils/http");
|
||||
const files_1 = require("../utils/files");
|
||||
const path_1 = __importDefault(require("path"));
|
||||
function sanitizeString(value, fallback) {
|
||||
if (typeof value !== "string") {
|
||||
return fallback;
|
||||
}
|
||||
const trimmed = value.trim();
|
||||
return trimmed.length > 0 ? trimmed : fallback;
|
||||
}
|
||||
function sanitizeNumber(value, fallback) {
|
||||
if (typeof value === "number" && Number.isFinite(value)) {
|
||||
return value;
|
||||
}
|
||||
if (typeof value === "string" && value.trim().length > 0) {
|
||||
const parsed = Number(value);
|
||||
if (Number.isFinite(parsed)) {
|
||||
return parsed;
|
||||
}
|
||||
}
|
||||
return fallback;
|
||||
}
|
||||
function buildFallbackRecord() {
|
||||
return {
|
||||
schema_version: "shared_llm_connection_v1",
|
||||
updated_at: "",
|
||||
connection: {
|
||||
llmProvider: "local",
|
||||
model: "qwen2.5-14b-instruct-1m",
|
||||
baseUrl: "http://127.0.0.1:1234/v1",
|
||||
temperature: 0,
|
||||
maxOutputTokens: 900
|
||||
}
|
||||
};
|
||||
}
|
||||
function loadSharedRecord() {
|
||||
const fallback = buildFallbackRecord();
|
||||
const parsed = (0, files_1.readJsonFile)(config_1.SHARED_LLM_CONNECTION_FILE, null);
|
||||
if (!parsed || typeof parsed !== "object" || !("connection" in parsed) || !parsed.connection) {
|
||||
return null;
|
||||
}
|
||||
const connection = parsed.connection;
|
||||
return {
|
||||
schema_version: "shared_llm_connection_v1",
|
||||
updated_at: sanitizeString(parsed.updated_at, ""),
|
||||
connection: {
|
||||
llmProvider: connection.llmProvider === "local" ? "local" : "openai",
|
||||
model: sanitizeString(connection.model, fallback.connection.model),
|
||||
baseUrl: sanitizeString(connection.baseUrl, fallback.connection.baseUrl),
|
||||
temperature: sanitizeNumber(connection.temperature, fallback.connection.temperature),
|
||||
maxOutputTokens: Math.max(1, Math.trunc(sanitizeNumber(connection.maxOutputTokens, fallback.connection.maxOutputTokens)))
|
||||
}
|
||||
};
|
||||
}
|
||||
function buildSharedLlmConfigRouter() {
|
||||
const router = (0, express_1.Router)();
|
||||
router.get("/api/llm/shared-connection", (_req, res, next) => {
|
||||
try {
|
||||
const record = loadSharedRecord();
|
||||
(0, http_1.ok)(res, {
|
||||
ok: true,
|
||||
connection: record?.connection ?? null,
|
||||
updated_at: record?.updated_at ?? null,
|
||||
exists: Boolean(record)
|
||||
});
|
||||
}
|
||||
catch (error) {
|
||||
next(error);
|
||||
}
|
||||
});
|
||||
router.post("/api/llm/shared-connection", (req, res, next) => {
|
||||
try {
|
||||
const body = (req.body ?? {});
|
||||
const fallback = buildFallbackRecord();
|
||||
const record = {
|
||||
schema_version: "shared_llm_connection_v1",
|
||||
updated_at: new Date().toISOString(),
|
||||
connection: {
|
||||
llmProvider: body.llmProvider === "local" ? "local" : "openai",
|
||||
model: sanitizeString(body.model, fallback.connection.model),
|
||||
baseUrl: sanitizeString(body.baseUrl, fallback.connection.baseUrl),
|
||||
temperature: sanitizeNumber(body.temperature, fallback.connection.temperature),
|
||||
maxOutputTokens: Math.max(1, Math.trunc(sanitizeNumber(body.maxOutputTokens, fallback.connection.maxOutputTokens)))
|
||||
}
|
||||
};
|
||||
(0, files_1.ensureDir)(path_1.default.dirname(config_1.SHARED_LLM_CONNECTION_FILE));
|
||||
(0, files_1.writeJsonFile)(config_1.SHARED_LLM_CONNECTION_FILE, record);
|
||||
(0, http_1.ok)(res, {
|
||||
ok: true,
|
||||
connection: record.connection,
|
||||
updated_at: record.updated_at
|
||||
});
|
||||
}
|
||||
catch (error) {
|
||||
next(error);
|
||||
}
|
||||
});
|
||||
return router;
|
||||
}
|
||||
Reference in New Issue
Block a user