char-fork/llama.cpp

git clone https://git.t4t.associates/char-fork/llama.cpp

Aleksander Grygierui: Stores split refactor (#27240)521a64cd0

char/aliceai-t5-moe
3.1 KiB87 linesraw
1import { CONFIG_LOCALSTORAGE_KEY } from '$lib/constants';
2import { serverStore } from '$lib/stores/server.svelte';
3import { settingsStore } from '$lib/stores/settings/index.svelte';
4import { beforeEach, describe, expect, it } from 'vitest';
5
6function mockProps(uiSettings: Record<string, string | number | boolean>) {
7	Object.defineProperty(serverStore, 'props', {
8		configurable: true,
9		get: () =>
10			({
11				default_generation_settings: { params: { temperature: 0.8 } },
12				ui_settings: uiSettings
13			}) as unknown as typeof serverStore.props
14	});
15}
16
17describe('server ui_settings application semantics', () => {
18	beforeEach(() => {
19		localStorage.removeItem(CONFIG_LOCALSTORAGE_KEY);
20	});
21
22	it('applies the admin defaults once for a new user', () => {
23		settingsStore.initialize();
24		mockProps({ apiKey: '', theme: 'dark' });
25
26		settingsStore.syncWithServerDefaults();
27
28		expect(settingsStore.config.theme).toBe('dark');
29	});
30
31	it('never reapplies on later loads: the user config diverges freely', () => {
32		settingsStore.initialize();
33		settingsStore.updateConfig('theme', 'light');
34		settingsStore.updateConfig('apiKey', 'sk-user-key');
35
36		// simulated F5: config now exists in localStorage
37		settingsStore.initialize();
38		mockProps({ apiKey: '', theme: 'dark' });
39
40		settingsStore.syncWithServerDefaults();
41		settingsStore.syncWithServerDefaults();
42
43		expect(settingsStore.config.theme).toBe('light');
44		expect(settingsStore.config.apiKey).toBe('sk-user-key');
45		const stored = JSON.parse(localStorage.getItem(CONFIG_LOCALSTORAGE_KEY) ?? '{}');
46
47		expect(stored.apiKey).toBe('sk-user-key');
48	});
49
50	it('keeps a value the user sets before the baseline is reachable', () => {
51		settingsStore.initialize();
52		// the splash is the only way in when the server runs with --api-key,
53		// so the first user write lands before the first successful /props
54		settingsStore.updateConfig('apiKey', 'sk-user-key');
55		mockProps({ apiKey: 'admin-placeholder', theme: 'dark' });
56
57		settingsStore.syncWithServerDefaults();
58
59		expect(settingsStore.config.apiKey).toBe('sk-user-key');
60		expect(settingsStore.config.theme).toBe('dark');
61	});
62
63	it('Reset to Default reapplies the full baseline, api key included', () => {
64		settingsStore.initialize();
65		settingsStore.updateConfig('theme', 'light');
66		settingsStore.updateConfig('apiKey', 'sk-user-key');
67		mockProps({ apiKey: '', theme: 'dark' });
68
69		settingsStore.forceSyncWithServerDefaults();
70
71		expect(settingsStore.config.theme).toBe('dark');
72		expect(settingsStore.config.apiKey).toBe('');
73	});
74});
75
76describe('syncable scope (spec section 4)', () => {
77	it('sampling params keep their live server twin, ui settings carry none', async () => {
78		const { ParameterSyncService } = await import('$lib/services/parameter-sync.service');
79
80		expect(ParameterSyncService.canSyncParameter('temperature')).toBe(true);
81		expect(ParameterSyncService.canSyncParameter('samplers')).toBe(true);
82		expect(ParameterSyncService.canSyncParameter('theme')).toBe(false);
83		expect(ParameterSyncService.canSyncParameter('systemMessage')).toBe(false);
84		expect(ParameterSyncService.canSyncParameter('apiKey')).toBe(false);
85		expect(ParameterSyncService.canSyncParameter('customCss')).toBe(false);
86	});
87});