Files
Athena-Deck/test_sampling.py
T

47 lines
3.1 KiB
Python

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')