char-fork/llama.cpp

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

Aleksander Grygierui: Linting & Formatting scripts (#26819)92d1bb0c9

char/aliceai-t5-moe
3.9 KiB141 linesraw
1import { ParameterSyncService } from './parameter-sync.service';
2import { describe, expect, it } from 'vitest';
3
4describe('ParameterSyncService', () => {
5	describe('roundFloatingPoint', () => {
6		it('should fix JavaScript floating-point precision issues', () => {
7			// Test the specific values from the screenshot
8			const mockServerParams = {
9				min_p: 0.009999999776482582,
10				samplers: ['top_k', 'typ_p', 'top_p', 'min_p', 'temperature'],
11				temperature: 0.800000011920929,
12				top_k: 40,
13				top_p: 0.949999988079071
14			};
15			const result = ParameterSyncService.extractServerDefaults({
16				...mockServerParams,
17				chat_format: '',
18				dry_allowed_length: 2,
19				dry_base: 1.75,
20				dry_multiplier: 0.0,
21				dry_penalty_last_n: 64,
22				dry_sequence_breakers: [],
23				dynatemp_exponent: 1.0,
24				dynatemp_range: 0.0,
25				frequency_penalty: 0.0,
26				generation_prompt: '',
27				grammar: '',
28				grammar_lazy: false,
29				grammar_triggers: [],
30				ignore_eos: false,
31				logit_bias: [],
32				lora: [],
33				max_tokens: -1,
34				min_keep: 0,
35				mirostat: 0,
36				mirostat_eta: 0.1,
37				mirostat_tau: 5.0,
38				n_discard: 0,
39				n_keep: 0,
40				// Add other required fields to match the API type
41				n_predict: 512,
42				n_probs: 0,
43				post_sampling_probs: false,
44				presence_penalty: 0.0,
45				preserved_tokens: [],
46				reasoning_format: '',
47				reasoning_in_content: false,
48				repeat_last_n: 64,
49				repeat_penalty: 1.0,
50				seed: -1,
51				'speculative.n_max': 0,
52				'speculative.n_min': 0,
53				'speculative.p_min': 0.0,
54				stop: [],
55				stream: true,
56				timings_per_token: false,
57				top_n_sigma: 0.0,
58				typ_p: 1.0,
59				xtc_probability: 0.0,
60				xtc_threshold: 0.1
61			} as ApiLlamaCppServerProps['default_generation_settings']['params']);
62
63			// Check that the problematic floating-point values are rounded correctly
64			expect(result.top_p).toBe(0.95);
65			expect(result.min_p).toBe(0.01);
66			expect(result.temperature).toBe(0.8);
67			expect(result.top_k).toBe(40); // Integer should remain unchanged
68			expect(result.samplers).toBe('top_k;typ_p;top_p;min_p;temperature');
69		});
70
71		it('should preserve non-numeric values', () => {
72			const mockServerParams = {
73				max_tokens: -1,
74				samplers: ['top_k', 'temperature'],
75				temperature: 0.7
76			};
77			const result = ParameterSyncService.extractServerDefaults({
78				...mockServerParams,
79				chat_format: '',
80				dry_allowed_length: 2,
81				dry_base: 1.75,
82				dry_multiplier: 0.0,
83				dry_penalty_last_n: 64,
84				dry_sequence_breakers: [],
85				dynatemp_exponent: 1.0,
86				dynatemp_range: 0.0,
87				frequency_penalty: 0.0,
88				generation_prompt: '',
89				grammar: '',
90				grammar_lazy: false,
91				grammar_triggers: [],
92				ignore_eos: false,
93				logit_bias: [],
94				lora: [],
95				min_keep: 0,
96				min_p: 0.05,
97				mirostat: 0,
98				mirostat_eta: 0.1,
99				mirostat_tau: 5.0,
100				n_discard: 0,
101				n_keep: 0,
102				// Minimal required fields
103				n_predict: 512,
104				n_probs: 0,
105				post_sampling_probs: false,
106				presence_penalty: 0.0,
107				preserved_tokens: [],
108				reasoning_format: '',
109				reasoning_in_content: false,
110				repeat_last_n: 64,
111				repeat_penalty: 1.0,
112				seed: -1,
113				'speculative.n_max': 0,
114				'speculative.n_min': 0,
115				'speculative.p_min': 0.0,
116				stop: [],
117				stream: true,
118				timings_per_token: false,
119				top_k: 40,
120				top_n_sigma: 0.0,
121				top_p: 0.95,
122				typ_p: 1.0,
123				xtc_probability: 0.0,
124				xtc_threshold: 0.1
125			} as ApiLlamaCppServerProps['default_generation_settings']['params']);
126
127			expect(result.samplers).toBe('top_k;temperature');
128			expect(result.max_tokens).toBe(-1);
129			expect(result.temperature).toBe(0.7);
130		});
131
132		it('extracts sampling twins only, never ui settings', () => {
133			const result = ParameterSyncService.extractServerDefaults(null);
134
135			expect(result).toEqual({});
136			expect(ParameterSyncService.canSyncParameter('theme')).toBe(false);
137			expect(ParameterSyncService.canSyncParameter('pdfAsImage')).toBe(false);
138			expect(ParameterSyncService.canSyncParameter('temperature')).toBe(true);
139		});
140	});
141});