Add optional per-image-profile Qwen prompt enhancers
This commit is contained in:
+12
-5
@@ -124,12 +124,12 @@ class ImageTests:
|
||||
return {'cancellation_requested':True}
|
||||
def model_path(self,item):
|
||||
return (self.profiles.catalog.root/item['id']/('model'+Path(item['file']).suffix)).resolve()
|
||||
def start(self,profile_id,prompt,wait=False,reserved=False,reference_images=None):
|
||||
def start(self,profile_id,prompt,wait=False,reserved=False,reference_images=None,skip_enhancer=False):
|
||||
if not isinstance(prompt,str) or not 1<=len(prompt.strip())<=4000:raise ValueError('Bitte einen Prompt mit 1–4000 Zeichen eingeben.')
|
||||
release=(lambda:None) if reserved else self.acquire(wait)
|
||||
try:return self._start(profile_id,prompt,release,reference_images or [])
|
||||
try:return self._start(profile_id,prompt,release,reference_images or [],skip_enhancer)
|
||||
except Exception:release();raise
|
||||
def _start(self,profile_id,prompt,release,reference_images):
|
||||
def _start(self,profile_id,prompt,release,reference_images,skip_enhancer=False):
|
||||
if not isinstance(prompt,str) or not 1<=len(prompt.strip())<=4000:raise ValueError('Bitte einen Prompt mit 1–4000 Zeichen eingeben.')
|
||||
with self.lock:
|
||||
if self.job and self.job['state']=='running':raise ValueError('Ein Bildtest läuft bereits.')
|
||||
@@ -153,11 +153,18 @@ class ImageTests:
|
||||
if shutil.disk_usage(self.root).free<10*GIB:raise ValueError('Weniger als 10 GiB freier Plattenspeicher.')
|
||||
job_id=uuid.uuid4().hex;seed=params['seed'] if params['seed']>=0 else secrets.randbelow(2147483648)
|
||||
self.cancel.clear();self.job=dict(id=job_id,state='running',phase='Bildlaufzeit startet',profile_id=profile_id,profile_name=profile['name'],started_at=time.time(),gpu=gpu['name'],encoder_gpu=encoder_gpu['name'],seed=seed,parameters=params,reference_count=len(references))
|
||||
self._save();threading.Thread(target=self._run,args=(job_id,prompt,params,seed,gpu,encoder_gpu,model,encoder,vae,release,references),daemon=True).start()
|
||||
self._save();threading.Thread(target=self._run,args=(job_id,prompt,params,seed,gpu,encoder_gpu,model,encoder,vae,release,references,profile,skip_enhancer),daemon=True).start()
|
||||
return dict(self.job)
|
||||
def _run(self,job_id,prompt,params,seed,gpu,encoder_gpu,model,encoder,vae,release=lambda:None,references=()):
|
||||
def _run(self,job_id,prompt,params,seed,gpu,encoder_gpu,model,encoder,vae,release=lambda:None,references=(),profile=None,skip_enhancer=False):
|
||||
directory=self.root/job_id;process=None
|
||||
try:
|
||||
if not skip_enhancer and profile and getattr(self,'enhancer',None) and (profile.get('prompt_enhancer') or {}).get('i2i' if references else 't2i'):
|
||||
self._phase('Prompt-Aufwerter lädt; Bildmodell wartet')
|
||||
result=self.enhancer.rewrite(profile,prompt,references,self.cancel)
|
||||
prompt=result['prompt']
|
||||
with self.lock:self.job['prompt_enhanced']=True;self.job['prompt_enhancer']=result['source'];self._save()
|
||||
if self.cancel.is_set():raise InterruptedError()
|
||||
self._phase('Prompt-Aufwerter entladen; Bildlaufzeit startet')
|
||||
directory.mkdir(mode=0o700)
|
||||
for role,item,filename in [('unet',model,'model.safetensors' if model['repo']==FLUX_REPO else 'model.gguf'),('clip',encoder,'encoder.safetensors'),('vae',vae,'vae.safetensors')]:
|
||||
dest=directory/'models'/role;dest.mkdir(parents=True);(dest/filename).symlink_to(self.model_path(item))
|
||||
|
||||
Reference in New Issue
Block a user