mirror of
https://github.com/SillyTavern/SillyTavern.git
synced 2025-06-05 21:59:27 +02:00
Add function template for world info generation
This commit is contained in:
84
server.js
84
server.js
@@ -133,7 +133,7 @@ app.post("/generate", jsonParser, function(request, response_generate = response
|
|||||||
use_story:false,
|
use_story:false,
|
||||||
use_memory:false,
|
use_memory:false,
|
||||||
use_authors_note:false,
|
use_authors_note:false,
|
||||||
use_world_info:false,
|
use_world_info:!!request.body.use_world_info,
|
||||||
max_context_length: request.body.max_context_length,
|
max_context_length: request.body.max_context_length,
|
||||||
max_length: request.body.max_length,
|
max_length: request.body.max_length,
|
||||||
rep_pen: request.body.rep_pen,
|
rep_pen: request.body.rep_pen,
|
||||||
@@ -1026,8 +1026,90 @@ app.post("/importchat", urlencodedParser, function(request, response){
|
|||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
async function generateKoboldWorldInfo(worldInfoName) {
|
||||||
|
let worldInfoUid = null;
|
||||||
|
|
||||||
|
try {
|
||||||
|
const filename = `${worldInfoName}.json`;
|
||||||
|
const pathToWorldInfo = path.join('public/worldinfos/', filename);
|
||||||
|
const koboldFolderName = getKoboldWorldInfoName(worldInfoName);
|
||||||
|
if (!fs.existsSync(pathToWorldInfo)) {
|
||||||
|
console.log(`World info file ${filename} doesn't exist. Skipping...`);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
const worldInfoText = fs.readFileSync(pathToWorldInfo, 'utf8');
|
||||||
|
|
||||||
|
const baseArgs = {
|
||||||
|
headers: { "Content-Type": "application/json" }
|
||||||
|
};
|
||||||
|
|
||||||
|
// Check is folder exists
|
||||||
|
const foldersData = await getToPromise(api_server + "/v1/world_info/folders", baseArgs);
|
||||||
|
if (foldersData?.folders?.length) {
|
||||||
|
const existingFolder = foldersData.folders.find(x => x.name === koboldFolderName);
|
||||||
|
if (existingFolder) {
|
||||||
|
console.log(`World info folder found: ${existingFolder.uid}`);
|
||||||
|
worldInfoUid = existingFolder.uid;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create folder if not already exists
|
||||||
|
if (!worldInfoUid) {
|
||||||
|
const createArgs = Object.assign(baseArgs, { data: {} });
|
||||||
|
const createdFolder = await postToPromise(api_server + "/v1/world_info/folders", createArgs);
|
||||||
|
console.log(`World info folder created: ${createdFolder.uid}`);
|
||||||
|
worldInfoUid = createdFolder.uid;
|
||||||
|
|
||||||
|
// Set a name so we could find the folder later
|
||||||
|
const setNameArgs = Object.assign(baseArgs, { data: { value: koboldFolderName } });
|
||||||
|
await putToPromise(api_server + `/v1/world_info/folders/${worldInfoUid}/name`, setNameArgs);
|
||||||
|
console.log(`World info folder name set: ${koboldFolderName}`);
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
console.error(err);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return worldInfoUid;
|
||||||
|
}
|
||||||
|
|
||||||
|
function putToPromise(url, args) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
client.put(url, args, (data, response) => {
|
||||||
|
if (response.statusCode >= 400) {
|
||||||
|
reject(data);
|
||||||
|
}
|
||||||
|
resolve(data);
|
||||||
|
}).on('error', e => reject(e));
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function postToPromise(url, args) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
client.post(url, args, (data, response) => {
|
||||||
|
if (response.statusCode >= 400) {
|
||||||
|
reject(data);
|
||||||
|
}
|
||||||
|
resolve(data);
|
||||||
|
}).on('error', e => reject(e));
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function getToPromise(url, args) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
client.get(url, args, (data, response) => {
|
||||||
|
if (response.statusCode >= 400) {
|
||||||
|
reject(data);
|
||||||
|
}
|
||||||
|
resolve(data);
|
||||||
|
}).on('error', e => reject(e));
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function getKoboldWorldInfoName(worldInfoName) {
|
||||||
|
return `TavernAI_${worldInfoName}_WI`;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user