import copy import json from pathlib import Path import tempfile import unittest from types import SimpleNamespace from profiles import Profiles,SCHEMAS,chat_parameters from api_compat import normalize_chat,CompatibilityError from deploy.configure_llm_sampling import configure class SamplingTests(unittest.TestCase): def test_legacy_save_roundtrip_and_validation(self): model=dict(id='m',kind='chat',profile_eligible=True,repo='test/chat',file='model.gguf') with tempfile.TemporaryDirectory() as directory: path=Path(directory)/'profiles.json';catalog=SimpleNamespace(entry=lambda _:model) profiles=Profiles(path,catalog) params={k:v[2] for k,v in SCHEMAS['chat'].items() if not k.endswith('penalty')} payload=dict(id=None,revision=0,name='Legacy',kind='chat',model_id='m',parameters=params) saved=profiles.save(payload) self.assertEqual(saved['parameters']['repeat_penalty'],1.0) payload.update(id=saved['id'],revision=saved['revision'],parameters=saved['parameters']) payload['parameters'].update(repeat_penalty=1.15,presence_penalty=.5,frequency_penalty=-.2) profiles.save(payload) restored=Profiles(path,catalog).rows[0] self.assertEqual(restored['parameters']['repeat_penalty'],1.15) for field,value in [('repeat_penalty',-1),('presence_penalty',3),('frequency_penalty',float('nan')),('repeat_penalty',True)]: bad=copy.deepcopy(payload);bad['revision']=restored['revision'];bad['parameters'][field]=value with self.assertRaises(ValueError):profiles.save(bad) self.assertEqual(json.loads(path.read_text())[0],restored) def test_client_penalties_validation_and_no_mutation(self): request=dict(repeat_penalty=1.15,presence_penalty=.5,frequency_penalty=-.2) self.assertEqual(normalize_chat(request)[0],request) for field,value in [('repeat_penalty',-1),('presence_penalty',3),('frequency_penalty',float('inf')),('repeat_penalty',True)]: with self.assertRaises(CompatibilityError):normalize_chat({field:value}) def test_preset_application_preserves_unrelated_settings_and_is_idempotent(self): rows=[dict(id='q',name='Qwen3.8 27B - Medium',kind='chat',model_id='q',revision=7,parameters=dict(context=160000,slots=1,batch=2048,ubatch=256,gpu_devices=['5080','3060'],tensor_split=[85,15],vision_device='3060',temperature=.2)),dict(id='i',name='Image',kind='image',model_id='i',parameters={}),dict(id='u',name='Unknown',kind='chat',model_id='u',parameters={})] entries={'q':dict(repo='jpetrina/Qwen3.8-27B-IQ4_XS-pure-GGUF')} result,report=configure(rows,entries) self.assertEqual(result[0]['parameters']['temperature'],1) self.assertEqual(result[0]['revision'],8) for key in ('context','slots','batch','ubatch','gpu_devices','tensor_split','vision_device'): self.assertEqual(result[0]['parameters'][key],rows[0]['parameters'][key]) self.assertEqual(result[1:],rows[1:]);self.assertEqual(rows[0]['parameters']['temperature'],.2) self.assertEqual(configure(result,entries)[0],result) expanded,_=configure(result,entries,True) self.assertEqual(expanded[-2]['parameters']['tensor_split'],[86,14]);self.assertEqual(expanded[-1]['parameters']['vision_device'],'cpu')