File size: 9,389 Bytes
41a5ab2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
```mermaid

sequenceDiagram

    participant UI as 🧩 ChatSettings

    participant settingsStore as πŸ—„οΈ settingsStore

    participant serverStore as πŸ—„οΈ serverStore

    participant ParamSvc as βš™οΈ ParameterSyncService

    participant LS as πŸ’Ύ LocalStorage



    Note over settingsStore: State:<br/>config: SettingsConfigType<br/>theme: string ("auto" | "light" | "dark")<br/>isInitialized: boolean<br/>userOverrides: Set&lt;string&gt;



    %% ═══════════════════════════════════════════════════════════════════════════

    Note over UI,LS: πŸš€ INITIALIZATION

    %% ═══════════════════════════════════════════════════════════════════════════



    Note over settingsStore: Auto-initialized in constructor (browser only)

    settingsStore->>settingsStore: initialize()

    activate settingsStore



    settingsStore->>settingsStore: loadConfig()

    settingsStore->>LS: get("llama-config")

    LS-->>settingsStore: StoredConfig | null



    alt config exists

        settingsStore->>settingsStore: Merge with SETTING_CONFIG_DEFAULT

        Note right of settingsStore: Fill missing keys with defaults

    else no config

        settingsStore->>settingsStore: config = SETTING_CONFIG_DEFAULT

    end



    settingsStore->>LS: get("llama-userOverrides")

    LS-->>settingsStore: string[] | null

    settingsStore->>settingsStore: userOverrides = new Set(data)



    settingsStore->>settingsStore: loadTheme()

    settingsStore->>LS: get("llama-theme")

    LS-->>settingsStore: theme | "auto"



    settingsStore->>settingsStore: isInitialized = true

    deactivate settingsStore



    %% ═══════════════════════════════════════════════════════════════════════════

    Note over UI,LS: πŸ”„ SYNC WITH SERVER DEFAULTS

    %% ═══════════════════════════════════════════════════════════════════════════



    Note over UI: Triggered from +layout.svelte when serverStore.props loaded

    UI->>settingsStore: syncWithServerDefaults()

    activate settingsStore



    settingsStore->>serverStore: defaultParams

    serverStore-->>settingsStore: {temperature, top_p, top_k, ...}



    loop each SYNCABLE_PARAMETER

        alt key NOT in userOverrides

            settingsStore->>settingsStore: config[key] = serverDefault[key]

            Note right of settingsStore: Non-overridden params adopt server default

        else key in userOverrides

            Note right of settingsStore: Keep user value, skip server default

        end

    end



    alt serverStore.props has webuiSettings

        settingsStore->>settingsStore: Apply webuiSettings from server

        Note right of settingsStore: Server-provided UI settings<br/>(e.g. showRawOutputSwitch)

    end



    settingsStore->>settingsStore: saveConfig()

    deactivate settingsStore



    %% ═══════════════════════════════════════════════════════════════════════════

    Note over UI,LS: βš™οΈ UPDATE CONFIG

    %% ═══════════════════════════════════════════════════════════════════════════



    UI->>settingsStore: updateConfig(key, value)

    activate settingsStore

    settingsStore->>settingsStore: config[key] = value



    alt value matches server default for key

        settingsStore->>settingsStore: userOverrides.delete(key)

        Note right of settingsStore: Matches server default, remove override

    else value differs from server default

        settingsStore->>settingsStore: userOverrides.add(key)

        Note right of settingsStore: Mark as user-modified (won't be overwritten)

    end



    settingsStore->>settingsStore: saveConfig()

    settingsStore->>LS: set(CONFIG_LOCALSTORAGE_KEY, config)

    settingsStore->>LS: set(USER_OVERRIDES_LOCALSTORAGE_KEY, [...userOverrides])

    deactivate settingsStore



    UI->>settingsStore: updateMultipleConfig({key1: val1, key2: val2})

    activate settingsStore

    Note right of settingsStore: Batch update, single save

    settingsStore->>settingsStore: For each key: config[key] = value

    settingsStore->>settingsStore: For each key: userOverrides.add(key)

    settingsStore->>settingsStore: saveConfig()

    deactivate settingsStore



    %% ═══════════════════════════════════════════════════════════════════════════

    Note over UI,LS: πŸ”„ RESET

    %% ═══════════════════════════════════════════════════════════════════════════



    UI->>settingsStore: resetConfig()

    activate settingsStore

    settingsStore->>settingsStore: config = {...SETTING_CONFIG_DEFAULT}

    settingsStore->>settingsStore: userOverrides.clear()

    Note right of settingsStore: All params reset to defaults<br/>Next syncWithServerDefaults will adopt server values

    settingsStore->>settingsStore: saveConfig()

    deactivate settingsStore



    UI->>settingsStore: resetParameterToServerDefault(key)

    activate settingsStore

    settingsStore->>settingsStore: userOverrides.delete(key)

    settingsStore->>serverStore: defaultParams[key]

    settingsStore->>settingsStore: config[key] = serverDefault

    settingsStore->>settingsStore: saveConfig()

    deactivate settingsStore



    %% ═══════════════════════════════════════════════════════════════════════════

    Note over UI,LS: 🎨 THEME

    %% ═══════════════════════════════════════════════════════════════════════════



    UI->>settingsStore: updateTheme(newTheme)

    activate settingsStore

    settingsStore->>settingsStore: theme = newTheme

    settingsStore->>settingsStore: saveTheme()

    settingsStore->>LS: set("llama-theme", theme)

    deactivate settingsStore



    %% ═══════════════════════════════════════════════════════════════════════════

    Note over UI,LS: πŸ“Š PARAMETER INFO

    %% ═══════════════════════════════════════════════════════════════════════════



    UI->>settingsStore: getParameterInfo(key)

    settingsStore->>ParamSvc: getParameterInfo(key, config, serverDefaults, userOverrides)

    ParamSvc-->>settingsStore: ParameterInfo

    Note right of ParamSvc: {<br/>  currentValue,<br/>  serverDefault,<br/>  isUserOverride: boolean,<br/>  canSync: boolean,<br/>  isDifferentFromServer: boolean<br/>}



    UI->>settingsStore: getParameterDiff()

    settingsStore->>ParamSvc: createParameterDiff(config, serverDefaults, userOverrides)

    ParamSvc-->>settingsStore: ParameterDiff[]

    Note right of ParamSvc: Array of parameters where user != server



    %% ═══════════════════════════════════════════════════════════════════════════

    Note over UI,LS: πŸ“‹ CONFIG CATEGORIES

    %% ═══════════════════════════════════════════════════════════════════════════



    Note over settingsStore: Syncable with server (from /props):

    rect rgb(240, 255, 240)

        Note over settingsStore: temperature, top_p, top_k, min_p<br/>repeat_penalty, presence_penalty, frequency_penalty<br/>dynatemp_range, dynatemp_exponent<br/>typ_p, xtc_probability, xtc_threshold<br/>dry_multiplier, dry_base, dry_allowed_length, dry_penalty_last_n

    end



    Note over settingsStore: UI-only (not synced):

    rect rgb(255, 240, 240)

        Note over settingsStore: systemMessage, custom (JSON)<br/>showStatistics, enableContinueGeneration<br/>autoMicOnEmpty, disableAutoScroll<br/>apiKey, pdfAsImage, disableReasoningParsing, showRawOutputSwitch

    end

```