Felipe97/llama-cpp-compiled
01.2k
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 screenshot8 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.94999998807907114 };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 type41 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.161 } as ApiLlamaCppServerProps['default_generation_settings']['params']);62 63 // Check that the problematic floating-point values are rounded correctly64 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 unchanged68 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.776 };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 fields103 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.1125 } 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});142 