File size: 3,143 Bytes
494c9e4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
/**
 * 与 {@link ./excludePromptPatternsUi bindExcludePromptPatternsUi} / {@link ./excludePromptPatternsUi bindExcludeGeneratedPatternsUi} 同步持久化。
 * Prompt 键名保留历史前缀 `exclude_tokens`,避免用户已存配置失效。
 */
export const EXCLUDE_PROMPT_PATTERNS_STORAGE_KEY = 'info_radar_attribution_exclude_tokens';
export const EXCLUDE_PROMPT_PATTERNS_ENABLED_STORAGE_KEY = 'info_radar_attribution_exclude_tokens_enabled';

export const EXCLUDE_GENERATED_PATTERNS_STORAGE_KEY = 'info_radar_attribution_exclude_generated_tokens';
export const EXCLUDE_GENERATED_PATTERNS_ENABLED_STORAGE_KEY =
    'info_radar_attribution_exclude_generated_tokens_enabled';

/**
 * 首次使用(`exclude_tokens` 键从未写入)时 UI 与生效逻辑采用的默认行;`''` 表示用户已显式清空,不再使用本默认。
 * 与 {@link readStoredEffectiveExcludePromptPatternsText} 的 `null` / 有值区分一致。
 */
export const DEFAULT_EXCLUDE_PROMPT_PATTERNS_TEXT = [
    "#comment# use '#comment#' to comment lines; support regex",
    '<\\|im_start\\|>system\\n',
    '<\\|im_start\\|>user\\n',
    '<\\|im_start\\|>assistant\\n',
    '<\\|im_start\\|>assistant\\n\\n',
    '<\\|im_end\\|>\\n',
    '<think>\\n\\n',
    '</think>\\n\\n',
    '<\\|im_start\\|>system\\n[\\s\\S]*?<\\|im_end\\|>#comment# all system prompt',
].join('\n');

/**
 * 首次使用(`exclude_generated_tokens` 键从未写入)时 Generate & Attribute「Exclude generated」的默认行。
 */
export const DEFAULT_EXCLUDE_GENERATED_PATTERNS_TEXT = [
    '<think>\\n',
    '</think>\\n\\n',
].join('\n');

/**
 * 与归因页「Exclude prompt patterns」展示逻辑一致:读 localStorage;未持久化使能键时默认开启(与页内 try 块一致)。
 * 未持久化文本键(`null`)时使用 {@link DEFAULT_EXCLUDE_PROMPT_PATTERNS_TEXT};已持久化空串表示用户选择排除零条模式。
 */
export function readStoredEffectiveExcludePromptPatternsText(): string {
    try {
        const enabledRaw = localStorage.getItem(EXCLUDE_PROMPT_PATTERNS_ENABLED_STORAGE_KEY);
        const enabled = enabledRaw === null ? true : enabledRaw === '1';
        if (!enabled) return '';
        const raw = localStorage.getItem(EXCLUDE_PROMPT_PATTERNS_STORAGE_KEY);
        if (raw === null) return DEFAULT_EXCLUDE_PROMPT_PATTERNS_TEXT;
        return raw;
    } catch {
        return '';
    }
}

/**
 * Generate & Attribute「Exclude generated patterns」:未持久化文本键(`null`)时用
 * {@link DEFAULT_EXCLUDE_GENERATED_PATTERNS_TEXT};已持久化空串表示用户选择排除零条模式。
 */
export function readStoredEffectiveExcludeGeneratedPatternsText(): string {
    try {
        const enabledRaw = localStorage.getItem(EXCLUDE_GENERATED_PATTERNS_ENABLED_STORAGE_KEY);
        const enabled = enabledRaw === null ? true : enabledRaw === '1';
        if (!enabled) return '';
        const raw = localStorage.getItem(EXCLUDE_GENERATED_PATTERNS_STORAGE_KEY);
        if (raw === null) return DEFAULT_EXCLUDE_GENERATED_PATTERNS_TEXT;
        return raw;
    } catch {
        return '';
    }
}