Unify separation tools and add exclusive control mode
This commit is contained in:
+6
-4
@@ -55,12 +55,13 @@ class VideoComfy:
|
||||
self.state='failed';self.error='ComfyUI wurde unerwartet beendet. Auf LLM wechseln und Laufzeit erneut starten.'
|
||||
rows=self.models();ident=self.selection.get('model_id');row=next((x for x in rows if x['model']['id']==ident),None)
|
||||
service=dict(id=ident,name=row['model']['file'] if row else 'Kein Videomodell ausgewählt',running=running,ready=running and self.state=='ready',api_url='/ (ComfyUI auf dem gemeinsamen API-Port)',message='5080: Diffusion/VAE · 3060: Textencoder · große BF16-Gewichte nutzen CPU-Auslagerung.') if row else {}
|
||||
return dict(mode=self.scheduler.gpu_mode,state=self.state,error=self.error,target_mode=self.target_mode,switch_phase=self.switch_phase,switch_started_at=self.switch_started_at,service=service,music_profiles=getattr(self,'music_profiles',lambda:[])(),services=[dict(id=x['model']['id'],name=x['model']['file'],api_url=x['label'],**{k:x[k] for k in ('blockers','runnable')}) for x in rows],models=rows,selected=ident,memory_policy='Gemeinsame ComfyUI-Installation. Video startet einen eigenen Prozess; Gewichte laden bei Workflow-Anfrage. Der Wechsel auf LLM beendet den Prozess.',runtime=self.runtime.status())
|
||||
return dict(mode=self.scheduler.gpu_mode,state=self.state,error=self.error,target_mode=self.target_mode,switch_phase=self.switch_phase,switch_started_at=self.switch_started_at,service=service,music_profiles=getattr(self,'music_profiles',lambda:[])(),separator=getattr(self,'separator_status',lambda:{})(),services=[dict(id=x['model']['id'],name=x['model']['file'],api_url=x['label'],**{k:x[k] for k in ('blockers','runnable')}) for x in rows],models=rows,selected=ident,memory_policy='Gemeinsame ComfyUI-Installation. Video startet einen eigenen Prozess; Gewichte laden bei Workflow-Anfrage. Der Wechsel auf LLM beendet den Prozess.',runtime=self.runtime.status())
|
||||
def switch(self,mode):
|
||||
if mode not in ('llm','video','music'):raise ValueError('Modus muss llm, video oder music sein.')
|
||||
if mode not in ('llm','video','music','separator'):raise ValueError('Modus muss llm, video, music oder separator sein.')
|
||||
with self.lock:
|
||||
if self.state=='switching':raise ValueError('Moduswechsel läuft bereits.')
|
||||
if mode=='music' and not getattr(self,'music_profiles',lambda:[])():raise ValueError('Zuerst ein ausführbares Musikprofil am API-Endpunkt freigeben.')
|
||||
if mode=='separator' and not any(m['installed'] for m in getattr(self,'separator_status',lambda:{'models':[]})().get('models',[])):raise ValueError('Zuerst Audio-Separator-Laufzeit und ein Modellpaket einrichten.')
|
||||
if mode=='video':
|
||||
row=next((x for x in self.models() if x['model']['id']==self.selection.get('model_id')),None)
|
||||
if not row:raise ValueError('Zuerst Videomodell aktivieren.')
|
||||
@@ -77,7 +78,7 @@ class VideoComfy:
|
||||
if time.monotonic()>deadline:raise ValueError('Deck-Aufträge noch aktiv.')
|
||||
self.scheduler.cv.wait(.2)
|
||||
self.scheduler.key=None
|
||||
if mode in ('llm','music'):
|
||||
if mode in ('llm','music','separator'):
|
||||
if any(x.get('running') is not False for x in self._foreign_services()):raise ValueError('Fremder Videodienst blockiert LLM-Modus.')
|
||||
self.foreign_blocked=False
|
||||
else:
|
||||
@@ -92,7 +93,8 @@ class VideoComfy:
|
||||
self.scheduler.key=None
|
||||
self.switch_phase='Freie GPUs prüfen';self._start()
|
||||
with self.scheduler.cv:self.scheduler.gpu_mode=mode;self.scheduler.cv.notify_all()
|
||||
self.state='ready' if mode in ('video','music') else 'idle'
|
||||
self.state='ready' if mode in ('video','music','separator') else 'idle'
|
||||
if mode=='separator':self.switch_phase='Audio-Trennung bereit · Gewichte laden bei Auftrag'
|
||||
if mode=='music':self.switch_phase='Musik bereit · Gewichte laden bei Anfrage'
|
||||
except Exception as exc:
|
||||
self._stop();self.error=str(exc);self.state='failed'
|
||||
|
||||
Reference in New Issue
Block a user