PageSourceSearch

https://zcjg-hub.hf.space/scripts/macros/definitions/instruct-macros.js

js zcjg-hub.hf.space collected 2026-10-03 17:36:12 UTC 4,957 bytes, 76 lines download raw bytes

1import { MacroRegistry, MacroCategory } from '../engine/MacroRegistry.js';
2import { power_user } from '../../power-user.js';
3
4/**
5 * Registers instruct-mode related {{...}} macros (instruct* and system
6 * prompt/context macros) in the MacroRegistry.
7 */
8export function registerInstructMacros() {
9    /**
10     * Helper to register macros that just expose a value from power_user.instruct.
11     * The first name is the primary, subsequent names become visible aliases.
12     * @param {string[]} names - First is primary, rest are aliases.
13     * @param {() => string} getValue
14     * @param {() => boolean} isEnabled
15     * @param {string} description
16     * @param {string} [category=MacroCategory.PROMPTS]
17     */
18    function registerSimple(names, getValue, isEnabled, description, category = MacroCategory.PROMPTS) {
19        const [primary, ...aliasNames] = names;
20        const aliases = aliasNames.map(alias => ({ alias }));
21
22        MacroRegistry.registerMacro(primary, {
23            category,
24            description,
25            aliases: aliases.length > 0 ? aliases : undefined,
26            handler: () => (isEnabled() ? (getValue() ?? '') : ''),
27        });
28    }
29
30    const instEnabled = () => !!power_user.instruct.enabled;
31    const sysEnabled = () => !!power_user.sysprompt.enabled;
32
33    // Instruct template macros
34    registerSimple(['instructStoryStringPrefix'], () => power_user.instruct.story_string_prefix, instEnabled, 'Instruct story string prefix.');
35    registerSimple(['instructStoryStringSuffix'], () => power_user.instruct.story_string_suffix, instEnabled, 'Instruct story string suffix.');
36
37    registerSimple(['instructUserPrefix', 'instructInput'], () => power_user.instruct.input_sequence, instEnabled, 'Instruct input / user prefix sequence.');
38    registerSimple(['instructUserSuffix'], () => power_user.instruct.input_suffix, instEnabled, 'Instruct input / user suffix sequence.');
39
40    registerSimple(['instructAssistantPrefix', 'instructOutput'], () => power_user.instruct.output_sequence, instEnabled, 'Instruct output / assistant prefix sequence.');
41    registerSimple(['instructAssistantSuffix', 'instructSeparator'], () => power_user.instruct.output_suffix, instEnabled, 'Instruct output / assistant suffix sequence.');
42
43    registerSimple(['instructSystemPrefix'], () => power_user.instruct.system_sequence, instEnabled, 'Instruct system prefix sequence.');
44    registerSimple(['instructSystemSuffix'], () => power_user.instruct.system_suffix, instEnabled, 'Instruct system suffix sequence.');
45
46    registerSimple(['instructFirstAssistantPrefix', 'instructFirstOutputPrefix'], () => power_user.instruct.first_output_sequence || power_user.instruct.output_sequence, instEnabled, 'Instruct first assistant / output prefix sequence');
47    registerSimple(['instructLastAssistantPrefix', 'instructLastOutputPrefix'], () => power_user.instruct.last_output_sequence || power_user.instruct.output_sequence, instEnabled, 'Instruct last assistant / output prefix sequence.');
48
49    registerSimple(['instructStop'], () => power_user.instruct.stop_sequence, instEnabled, 'Instruct stop sequence.');
50    registerSimple(['instructUserFiller'], () => power_user.instruct.user_alignment_message, instEnabled, 'Instruct user alignment filler.');
51    registerSimple(['instructSystemInstructionPrefix'], () => power_user.instruct.last_system_sequence, instEnabled, 'Instruct system instruction prefix sequence.');
52
53    registerSimple(['instructFirstUserPrefix', 'instructFirstInput'], () => power_user.instruct.first_input_sequence || power_user.instruct.input_sequence, instEnabled, 'Instruct first user / input prefix sequence.');
54    registerSimple(['instructLastUserPrefix', 'instructLastInput'], () => power_user.instruct.last_input_sequence || power_user.instruct.input_sequence, instEnabled, 'Instruct last user / input prefix sequence.');
55
56    // System prompt macros
57    registerSimple(['defaultSystemPrompt', 'instructSystem', 'instructSystemPrompt'], () => power_user.sysprompt.content, sysEnabled, 'Default system prompt.');
58
59    MacroRegistry.registerMacro('systemPrompt', {
60        category: MacroCategory.PROMPTS,
61        description: 'Active system prompt text (optionally overridden by character prompt)',
62        handler: ({ env }) => {
63            const isEnabled = !!power_user.sysprompt.enabled;
64            if (!isEnabled) return '';
65
66            if (power_user.prefer_character_prompt && env.character.charPrompt) {
67                return env.character.charPrompt;
68            }
69            return power_user.sysprompt.content ?? '';
70        },
71    });
72
73    // Context template macros
74    registerSimple(['exampleSeparator', 'chatSeparator'], () => power_user.context.example_separator, () => true, 'Separator used between example chat blocks in text completion prompts.');
75    registerSimple(['chatStart'], () => power_user.context.chat_start, () => true, 'Chat start marker used in text completion prompts.');
76}

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.