9router / src /lib /db /repos /aliasRepo.js
2api
feat: configurable stream stall timeout + per-provider UI
88c4c60
Raw
History Blame Contribute Delete
1.93 kB
import { getAdapter } from "../driver.js";
import { parseJson, stringifyJson } from "../helpers/jsonCol.js";
import { makeKv } from "../helpers/kvStore.js";
const aliasKv = makeKv("modelAliases");
const customKv = makeKv("customModels");
const mitmKv = makeKv("mitmAlias");
// modelAliases: key=alias, value=modelString
export async function getModelAliases() {
return await aliasKv.getAll();
}
export async function setModelAlias(alias, model) {
await aliasKv.set(alias, model);
}
export async function deleteModelAlias(alias) {
await aliasKv.remove(alias);
}
// customModels: key=`${providerAlias}|${id}|${type}`, value=full model object
function customKey(providerAlias, id, type) {
return `${providerAlias}|${id}|${type}`;
}
export async function getCustomModels() {
const all = await customKv.getAll();
return Object.values(all);
}
// Atomic check-then-insert inside transaction to prevent duplicate races
export async function addCustomModel({ providerAlias, id, type = "llm", name }) {
const k = customKey(providerAlias, id, type);
const db = await getAdapter();
let added = false;
db.transaction(() => {
const row = db.get(`SELECT 1 FROM kv WHERE scope = 'customModels' AND key = ?`, [k]);
if (row) return;
const value = stringifyJson({ providerAlias, id, type, name: name || id });
db.run(`INSERT INTO kv(scope, key, value) VALUES('customModels', ?, ?)`, [k, value]);
added = true;
});
return added;
}
export async function deleteCustomModel({ providerAlias, id, type = "llm" }) {
await customKv.remove(customKey(providerAlias, id, type));
}
// mitmAlias: key=toolName, value=mappings object
export async function getMitmAlias(toolName) {
if (toolName) {
const v = await mitmKv.get(toolName);
return v || {};
}
return await mitmKv.getAll();
}
export async function setMitmAliasAll(toolName, mappings) {
await mitmKv.set(toolName, mappings || {});
}