mirror of
https://github.com/SillyTavern/SillyTavern.git
synced 2025-06-05 21:59:27 +02:00
Add config.yaml value for cards cache capacity.
This commit is contained in:
@@ -1,6 +1,8 @@
|
|||||||
# -- DATA CONFIGURATION --
|
# -- DATA CONFIGURATION --
|
||||||
# Root directory for user data storage
|
# Root directory for user data storage
|
||||||
dataRoot: ./data
|
dataRoot: ./data
|
||||||
|
# The maximum amount of memory that parsed character cards can use in MB
|
||||||
|
cardsCacheCapacity: 100
|
||||||
# -- SERVER CONFIGURATION --
|
# -- SERVER CONFIGURATION --
|
||||||
# Listen for incoming connections
|
# Listen for incoming connections
|
||||||
listen: false
|
listen: false
|
||||||
|
@@ -14,7 +14,7 @@ import jimp from 'jimp';
|
|||||||
|
|
||||||
import { AVATAR_WIDTH, AVATAR_HEIGHT } from '../constants.js';
|
import { AVATAR_WIDTH, AVATAR_HEIGHT } from '../constants.js';
|
||||||
import { jsonParser, urlencodedParser } from '../express-common.js';
|
import { jsonParser, urlencodedParser } from '../express-common.js';
|
||||||
import { deepMerge, humanizedISO8601DateTime, tryParse, extractFileFromZipBuffer, MemoryLimitedMap } from '../util.js';
|
import { deepMerge, humanizedISO8601DateTime, tryParse, extractFileFromZipBuffer, MemoryLimitedMap, getConfigValue } from '../util.js';
|
||||||
import { TavernCardValidator } from '../validator/TavernCardValidator.js';
|
import { TavernCardValidator } from '../validator/TavernCardValidator.js';
|
||||||
import { parse, write } from '../character-card-parser.js';
|
import { parse, write } from '../character-card-parser.js';
|
||||||
import { readWorldInfoFile } from './worldinfo.js';
|
import { readWorldInfoFile } from './worldinfo.js';
|
||||||
@@ -23,8 +23,9 @@ import { importRisuSprites } from './sprites.js';
|
|||||||
const defaultAvatarPath = './public/img/ai4.png';
|
const defaultAvatarPath = './public/img/ai4.png';
|
||||||
|
|
||||||
// KV-store for parsed character data
|
// KV-store for parsed character data
|
||||||
// 100 MB limit. Would take roughly 3000 characters to reach this limit
|
const cacheCapacity = Number(getConfigValue('cardsCacheCapacity', 100)); // MB
|
||||||
const characterDataCache = new MemoryLimitedMap(1024 * 1024 * 100);
|
// With 100 MB limit it would take roughly 3000 characters to reach this limit
|
||||||
|
const characterDataCache = new MemoryLimitedMap(1024 * 1024 * cacheCapacity);
|
||||||
// Some Android devices require tighter memory management
|
// Some Android devices require tighter memory management
|
||||||
const isAndroid = process.platform === 'android';
|
const isAndroid = process.platform === 'android';
|
||||||
|
|
||||||
|
@@ -680,8 +680,9 @@ export class MemoryLimitedMap {
|
|||||||
* @param {number} maxMemoryInBytes - The maximum allowed memory in bytes for string values.
|
* @param {number} maxMemoryInBytes - The maximum allowed memory in bytes for string values.
|
||||||
*/
|
*/
|
||||||
constructor(maxMemoryInBytes) {
|
constructor(maxMemoryInBytes) {
|
||||||
if (typeof maxMemoryInBytes !== 'number' || maxMemoryInBytes <= 0) {
|
if (typeof maxMemoryInBytes !== 'number' || maxMemoryInBytes <= 0 || isNaN(maxMemoryInBytes)) {
|
||||||
throw new Error('maxMemoryInBytes must be a positive number');
|
console.warn('Invalid maxMemoryInBytes, using a fallback value of 1 GB.');
|
||||||
|
maxMemoryInBytes = 1024 * 1024 * 1024; // 1 GB
|
||||||
}
|
}
|
||||||
this.maxMemory = maxMemoryInBytes;
|
this.maxMemory = maxMemoryInBytes;
|
||||||
this.currentMemory = 0;
|
this.currentMemory = 0;
|
||||||
|
Reference in New Issue
Block a user