|
import fs from 'node:fs'; |
|
import path from 'node:path'; |
|
|
|
import express from 'express'; |
|
import sanitize from 'sanitize-filename'; |
|
import { sync as writeFileAtomicSync } from 'write-file-atomic'; |
|
|
|
import { getDefaultPresetFile, getDefaultPresets } from './content-manager.js'; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function getPresetSettingsByAPI(apiId, directories) { |
|
switch (apiId) { |
|
case 'kobold': |
|
case 'koboldhorde': |
|
return { folder: directories.koboldAI_Settings, extension: '.json' }; |
|
case 'novel': |
|
return { folder: directories.novelAI_Settings, extension: '.json' }; |
|
case 'textgenerationwebui': |
|
return { folder: directories.textGen_Settings, extension: '.json' }; |
|
case 'openai': |
|
return { folder: directories.openAI_Settings, extension: '.json' }; |
|
case 'instruct': |
|
return { folder: directories.instruct, extension: '.json' }; |
|
case 'context': |
|
return { folder: directories.context, extension: '.json' }; |
|
case 'sysprompt': |
|
return { folder: directories.sysprompt, extension: '.json' }; |
|
case 'reasoning': |
|
return { folder: directories.reasoning, extension: '.json' }; |
|
default: |
|
return { folder: null, extension: null }; |
|
} |
|
} |
|
|
|
export const router = express.Router(); |
|
|
|
router.post('/save', function (request, response) { |
|
const name = sanitize(request.body.name); |
|
if (!request.body.preset || !name) { |
|
return response.sendStatus(400); |
|
} |
|
|
|
const settings = getPresetSettingsByAPI(request.body.apiId, request.user.directories); |
|
const filename = name + settings.extension; |
|
|
|
if (!settings.folder) { |
|
return response.sendStatus(400); |
|
} |
|
|
|
const fullpath = path.join(settings.folder, filename); |
|
writeFileAtomicSync(fullpath, JSON.stringify(request.body.preset, null, 4), 'utf-8'); |
|
return response.send({ name }); |
|
}); |
|
|
|
router.post('/delete', function (request, response) { |
|
const name = sanitize(request.body.name); |
|
if (!name) { |
|
return response.sendStatus(400); |
|
} |
|
|
|
const settings = getPresetSettingsByAPI(request.body.apiId, request.user.directories); |
|
const filename = name + settings.extension; |
|
|
|
if (!settings.folder) { |
|
return response.sendStatus(400); |
|
} |
|
|
|
const fullpath = path.join(settings.folder, filename); |
|
|
|
if (fs.existsSync(fullpath)) { |
|
fs.unlinkSync(fullpath); |
|
return response.sendStatus(200); |
|
} else { |
|
return response.sendStatus(404); |
|
} |
|
}); |
|
|
|
router.post('/restore', function (request, response) { |
|
try { |
|
const settings = getPresetSettingsByAPI(request.body.apiId, request.user.directories); |
|
const name = sanitize(request.body.name); |
|
const defaultPresets = getDefaultPresets(request.user.directories); |
|
|
|
const defaultPreset = defaultPresets.find(p => p.name === name && p.folder === settings.folder); |
|
|
|
const result = { isDefault: false, preset: {} }; |
|
|
|
if (defaultPreset) { |
|
result.isDefault = true; |
|
result.preset = getDefaultPresetFile(defaultPreset.filename) || {}; |
|
} |
|
|
|
return response.send(result); |
|
} catch (error) { |
|
console.error(error); |
|
return response.sendStatus(500); |
|
} |
|
}); |
|
|
|
|
|
router.post('/save-openai', function (request, response) { |
|
if (!request.body || typeof request.query.name !== 'string') return response.sendStatus(400); |
|
const name = sanitize(request.query.name); |
|
if (!name) return response.sendStatus(400); |
|
|
|
const filename = `${name}.json`; |
|
const fullpath = path.join(request.user.directories.openAI_Settings, filename); |
|
writeFileAtomicSync(fullpath, JSON.stringify(request.body, null, 4), 'utf-8'); |
|
return response.send({ name }); |
|
}); |
|
|
|
|
|
router.post('/delete-openai', function (request, response) { |
|
if (!request.body || !request.body.name) { |
|
return response.sendStatus(400); |
|
} |
|
|
|
const name = request.body.name; |
|
const pathToFile = path.join(request.user.directories.openAI_Settings, `${name}.json`); |
|
|
|
if (fs.existsSync(pathToFile)) { |
|
fs.unlinkSync(pathToFile); |
|
return response.send({ ok: true }); |
|
} |
|
|
|
return response.send({ error: true }); |
|
}); |
|
|