File size: 2,209 Bytes
88c4c60 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | import { getAdapter } from "../driver.js";
import { parseJson, stringifyJson } from "../helpers/jsonCol.js";
const SCOPE = "disabledModels";
export async function getDisabledModels() {
const db = await getAdapter();
const rows = db.all(`SELECT key, value FROM kv WHERE scope = ?`, [SCOPE]);
const out = {};
for (const r of rows) out[r.key] = parseJson(r.value, []);
return out;
}
export async function getDisabledByProvider(providerAlias) {
const db = await getAdapter();
const row = db.get(`SELECT value FROM kv WHERE scope = ? AND key = ?`, [SCOPE, providerAlias]);
return row ? (parseJson(row.value, []) || []) : [];
}
// Atomic read-merge-write inside a transaction (no JS yield mid-transaction).
export async function disableModels(providerAlias, ids) {
if (!providerAlias || !Array.isArray(ids)) return;
const db = await getAdapter();
db.transaction(() => {
const row = db.get(`SELECT value FROM kv WHERE scope = ? AND key = ?`, [SCOPE, providerAlias]);
const current = row ? (parseJson(row.value, []) || []) : [];
const merged = [...new Set([...current, ...ids])];
db.run(
`INSERT INTO kv(scope, key, value) VALUES(?, ?, ?) ON CONFLICT(scope, key) DO UPDATE SET value = excluded.value`,
[SCOPE, providerAlias, stringifyJson(merged)]
);
});
}
export async function enableModels(providerAlias, ids) {
if (!providerAlias) return;
const db = await getAdapter();
db.transaction(() => {
if (!Array.isArray(ids) || ids.length === 0) {
db.run(`DELETE FROM kv WHERE scope = ? AND key = ?`, [SCOPE, providerAlias]);
return;
}
const row = db.get(`SELECT value FROM kv WHERE scope = ? AND key = ?`, [SCOPE, providerAlias]);
const current = row ? (parseJson(row.value, []) || []) : [];
const removeSet = new Set(ids);
const next = current.filter((id) => !removeSet.has(id));
if (next.length === 0) {
db.run(`DELETE FROM kv WHERE scope = ? AND key = ?`, [SCOPE, providerAlias]);
} else {
db.run(
`INSERT INTO kv(scope, key, value) VALUES(?, ?, ?) ON CONFLICT(scope, key) DO UPDATE SET value = excluded.value`,
[SCOPE, providerAlias, stringifyJson(next)]
);
}
});
}
|