q / core /presets.js
Humuhumu33's picture
Upload folder using huggingface_hub
3365e13 verified
Raw
History Blame Contribute Delete
2.7 kB
// core/presets.js — preset CRUD (the saved parameter bundles a conversation spreads, LibreChat's
// conversationPreset semantics). Each preset is a κ-object in the store; the boot index keeps
// pointer rows { presetId, kappa, title } so listing is O(1) without a scan.
import { normPreset } from "./schema.js";
const LC = { lc: "https://librechat.ai/ns#" };
export function makePresets(chatStore) {
const { store, getIndex, newId } = chatStore;
const putIndex = async (idx) => { const b = new TextEncoder().encode(JSON.stringify(idx)); return store.backend.putRaw ? store.backend.putRaw("index:org.hologram.HoloQ", b) : store.backend.put("index:org.hologram.HoloQ", b); };
async function save(p) {
const norm = normPreset(p);
if (!norm.presetId) norm.presetId = newId("preset");
const obj = await store.makeObject({ type: ["schema:PropertyValue", "prov:Entity"], context: [LC], "schema:identifier": norm.presetId, "schema:name": norm.title, "lc:preset": norm });
const idx = await getIndex();
idx.presets = idx.presets || [];
const i = idx.presets.findIndex((x) => x.presetId === norm.presetId);
const ptr = { presetId: norm.presetId, kappa: obj.id, title: norm.title, defaultPreset: !!p.defaultPreset };
if (i >= 0) idx.presets[i] = ptr; else idx.presets.push(ptr);
if (p.defaultPreset) idx.presets.forEach((x) => { if (x.presetId !== norm.presetId) x.defaultPreset = false; });
await putIndex(idx);
return { ...norm, kappa: obj.id };
}
async function list() { return (await getIndex()).presets || []; }
async function get(presetId) {
const ptr = (await list()).find((x) => x.presetId === presetId); if (!ptr) return null;
const obj = await store.getObj(ptr.kappa); if (!obj) return null;
if (!(await store.verify(obj))) return null; // Law L5: a tampered preset is refused
return { ...normPreset(obj["lc:preset"]), kappa: ptr.kappa };
}
async function getDefault() {
const ptrs = await list(); const d = ptrs.find((x) => x.defaultPreset) || null;
return d ? get(d.presetId) : null;
}
async function remove(presetId) {
const idx = await getIndex();
idx.presets = (idx.presets || []).filter((x) => x.presetId !== presetId);
await putIndex(idx); // the κ-object stays content-addressed in the store (dedup'd, unreferenced)
}
return { save, list, get, getDefault, remove };
}
// The factory default — mirrors the engine's real capabilities (greedy decode is the
// deterministic, verifiable path; temperature stays 0 unless a model declares one).
export const DEFAULT_PRESET = () => normPreset({
title: "Default", temperature: 0, maxOutputTokens: 900, promptPrefix: "",
});