import json import threading import time import unittest from types import SimpleNamespace from unittest.mock import Mock from chat_test import ChatTests from inference import Scheduler,InferenceError,LlamaWorker class Reply: status=200 def __init__(self,events):self.events=iter(events) def read1(self,_):return next(self.events,b'') class Worker: def __init__(self):self.error=None;self.loaded=False;self.conn=Mock();self.conn.getresponse.return_value=Reply([b'data: {"choices":[{"delta":{"content":"OK"}}]}\n\n',b'data: [DONE]\n\n']) def stop(self):self.loaded=False def ensure(self,p,cancel=lambda:False): if self.error:raise InferenceError(self.error) self.loaded=True def status(self):return dict(state='ready' if self.loaded else 'stopped',error=self.error) def connect(self):return self.conn,'synthetic-only' class ChatTestsTests(unittest.TestCase): def setUp(self): self.profile=dict(id='p',name='test',revision=1,kind='chat',runnable=True,parameters=dict(slots=2,temperature=.2,top_p=.8,top_k=20)) self.worker=Worker();self.manager=ChatTests(SimpleNamespace(status=lambda:dict(profiles=[self.profile])),self.worker,Scheduler(self.worker)) def request(self):return dict(profile_id='p',messages=[dict(role='user',content='synthetic test')],max_tokens=8) def finish(self): deadline=time.monotonic()+3 while self.manager.status()['job']['state']=='running' and time.monotonic()