🎨 优化扩展模块,完成ai接入和对话功能
This commit is contained in:
188
data/st-core-scripts/scripts/constants.js
Normal file
188
data/st-core-scripts/scripts/constants.js
Normal file
@@ -0,0 +1,188 @@
|
||||
/**
|
||||
* Common debounce timeout values to use with `debounce` calls.
|
||||
* @readonly
|
||||
* @enum {number}
|
||||
*/
|
||||
export const debounce_timeout = {
|
||||
/** [100 ms] For ultra-fast responses, typically for keypresses or executions that might happen multiple times in a loop or recursion. */
|
||||
quick: 100,
|
||||
/** [200 ms] Slightly slower than quick, but still very responsive. */
|
||||
short: 200,
|
||||
/** [300 ms] Default time for general use, good balance between responsiveness and performance. */
|
||||
standard: 300,
|
||||
/** [1.000 ms] For situations where the function triggers more intensive tasks. */
|
||||
relaxed: 1000,
|
||||
/** [5 sec] For delayed tasks, like auto-saving or completing batch operations that need a significant pause. */
|
||||
extended: 5000,
|
||||
};
|
||||
|
||||
/**
|
||||
* Used as an ephemeral key in message extra metadata.
|
||||
* When set, the message will be excluded from generation
|
||||
* prompts without affecting the number of chat messages,
|
||||
* which is needed to preserve world info timed effects.
|
||||
*/
|
||||
export const IGNORE_SYMBOL = Symbol.for('ignore');
|
||||
|
||||
/**
|
||||
* Common video file extensions. Should be the same as supported by Gemini.
|
||||
* https://ai.google.dev/gemini-api/docs/video-understanding#supported-formats
|
||||
*/
|
||||
export const VIDEO_EXTENSIONS = ['mp4', 'avi', 'mov', 'wmv', 'flv', 'webm', '3gp', 'mkv', 'mpg'];
|
||||
|
||||
/**
|
||||
* Known generation triggers that can be passed to Generate function.
|
||||
*/
|
||||
export const GENERATION_TYPE_TRIGGERS = [
|
||||
'normal',
|
||||
'continue',
|
||||
'impersonate',
|
||||
'swipe',
|
||||
'regenerate',
|
||||
'quiet',
|
||||
];
|
||||
|
||||
/**
|
||||
* Known injection IDs and helper functions for system extensions handling.
|
||||
*/
|
||||
export const inject_ids = {
|
||||
STORY_STRING: '__STORY_STRING__',
|
||||
QUIET_PROMPT: 'QUIET_PROMPT',
|
||||
DEPTH_PROMPT: 'DEPTH_PROMPT',
|
||||
DEPTH_PROMPT_INDEX: (index) => `DEPTH_PROMPT_${index}`,
|
||||
CUSTOM_WI_DEPTH: 'customDepthWI',
|
||||
CUSTOM_WI_DEPTH_ROLE: (depth, role) => `customDepthWI_${depth}_${role}`,
|
||||
CUSTOM_WI_OUTLET: (key) => `customWIOutlet_${key}`,
|
||||
};
|
||||
|
||||
export const COMETAPI_IGNORE_PATTERNS = [
|
||||
// Image generation models
|
||||
'dall-e', 'dalle', 'midjourney', 'mj_', 'stable-diffusion', 'sd-',
|
||||
'flux-', 'playground-v', 'ideogram', 'recraft-', 'black-forest-labs',
|
||||
'/recraft-v3', 'recraftv3', 'stability-ai/', 'sdxl',
|
||||
// Audio generation models
|
||||
'suno_', 'tts', 'whisper',
|
||||
// Video generation models
|
||||
'runway', 'luma_', 'luma-', 'veo', 'kling_', 'minimax_video', 'hunyuan-t1',
|
||||
// Utility models
|
||||
'embedding', 'search-gpts', 'files_retrieve', 'moderation',
|
||||
];
|
||||
|
||||
/**
|
||||
* @readonly
|
||||
* @enum {string}
|
||||
*/
|
||||
export const MEDIA_SOURCE = {
|
||||
API: 'api',
|
||||
UPLOAD: 'upload',
|
||||
GENERATED: 'generated',
|
||||
CAPTIONED: 'captioned',
|
||||
};
|
||||
|
||||
/**
|
||||
* @readonly
|
||||
* @enum {string}
|
||||
*/
|
||||
export const MEDIA_DISPLAY = {
|
||||
LIST: 'list',
|
||||
GALLERY: 'gallery',
|
||||
};
|
||||
|
||||
/**
|
||||
* @readonly
|
||||
* @enum {string}
|
||||
*/
|
||||
export const IMAGE_OVERSWIPE = {
|
||||
GENERATE: 'generate',
|
||||
ROLLOVER: 'rollover',
|
||||
};
|
||||
|
||||
/**
|
||||
* @readonly
|
||||
*/
|
||||
export const MEDIA_TYPE = {
|
||||
getFromMime: (/** @type {string} */ mimeType) => {
|
||||
if (mimeType.startsWith('image/')) {
|
||||
return MEDIA_TYPE.IMAGE;
|
||||
}
|
||||
if (mimeType.startsWith('video/')) {
|
||||
return MEDIA_TYPE.VIDEO;
|
||||
}
|
||||
if (mimeType.startsWith('audio/')) {
|
||||
return MEDIA_TYPE.AUDIO;
|
||||
}
|
||||
return null;
|
||||
},
|
||||
IMAGE: 'image',
|
||||
VIDEO: 'video',
|
||||
AUDIO: 'audio',
|
||||
};
|
||||
|
||||
/**
|
||||
* Bitwise flag-style media request types.
|
||||
* @readonly
|
||||
* @enum {number}
|
||||
*/
|
||||
export const MEDIA_REQUEST_TYPE = {
|
||||
IMAGE: 0b001,
|
||||
VIDEO: 0b010,
|
||||
AUDIO: 0b100,
|
||||
};
|
||||
|
||||
/**
|
||||
* Scroll behavior options when appending media to messages.
|
||||
* @readonly
|
||||
* @enum {string}
|
||||
*/
|
||||
export const SCROLL_BEHAVIOR = {
|
||||
NONE: 'none',
|
||||
KEEP: 'keep',
|
||||
ADJUST: 'adjust',
|
||||
};
|
||||
|
||||
/**
|
||||
* @readonly
|
||||
* @enum {string}
|
||||
*/
|
||||
export const OVERSWIPE_BEHAVIOR = {
|
||||
/** The overswipe right chevron will not be displayed. */
|
||||
NONE: 'none',
|
||||
/** An overswipe will loop to the first swipe. */
|
||||
LOOP: 'loop',
|
||||
/** Pristine greetings will loop, and chevrons will always be shown: https://github.com/SillyTavern/SillyTavern/pull/4712#issuecomment-3557893373 */
|
||||
PRISTINE_GREETING: 'pristine_greeting',
|
||||
/** If chat tree is enabled, then an overswipe will allow the user to edit the message before starting a new generation. */
|
||||
EDIT_GENERATE: 'edit_generate',
|
||||
/** This is the default behavior on character messages. */
|
||||
REGENERATE: 'regenerate',
|
||||
};
|
||||
|
||||
/**
|
||||
* @readonly
|
||||
* @enum {string}
|
||||
*/
|
||||
export const SWIPE_DIRECTION = {
|
||||
LEFT: 'left',
|
||||
RIGHT: 'right',
|
||||
};
|
||||
|
||||
/**
|
||||
* @readonly
|
||||
* @enum {string}
|
||||
*/
|
||||
export const SWIPE_SOURCE = {
|
||||
DELETE: 'delete',
|
||||
KEYBOARD: 'keyboard',
|
||||
BACK: 'back',
|
||||
AUTO_SWIPE: 'auto_swipe',
|
||||
};
|
||||
|
||||
/**
|
||||
* @readonly
|
||||
* @enum {string}
|
||||
*/
|
||||
export const SWIPE_STATE = {
|
||||
NONE: 'none',
|
||||
SWIPING: 'swiping',
|
||||
EDITING: 'editing',
|
||||
};
|
||||
Reference in New Issue
Block a user