Add optional per-image-profile Qwen prompt enhancers

This commit is contained in:
Mikei386
2026-09-29 21:16:40 +02:00
parent 7ba17308f5
commit c5a028cba9
13 changed files with 363 additions and 19 deletions
+29 -3
View File
@@ -18,6 +18,7 @@ from capacity import assess, overview
from runtime import Runtime
from image_runtime import ImageRuntime
from image_test import ImageTests
from prompt_enhancer import PromptEnhancer
from docker_support import DockerSupport
from inference import LlamaWorker,Scheduler
from endpoint import Endpoint
@@ -75,6 +76,9 @@ class Server(ThreadingHTTPServer):
self.image_tests = ImageTests(self.catalog.root.parent/"image-tests",self.profiles)
self.image_runtime = ImageRuntime(self.catalog.root.parent/"image-runtime")
self.image_tests.runtime = self.image_runtime
self.prompt_enhancer=PromptEnhancer(self.catalog.root.parent/'prompt-enhancers',self.catalog,self.profiles,self.image_runtime)
self.image_tests.enhancer=self.prompt_enhancer
self.profiles.prompt_enhancer_ready=lambda task:bool(self.prompt_enhancer.installed(task))
self.profiles.image_runtime_ready=lambda:self.image_tests.status()["runtime_installed"]
self.tts_runtime=TTSRuntime(self.catalog.root.parent/'tts-runtime')
self.tts_tests=TTSTests(self.catalog.root.parent/'tts-tests',self.profiles,self.tts_runtime)
@@ -95,6 +99,7 @@ class Server(ThreadingHTTPServer):
self.scheduler=Scheduler(self.worker)
self.profiles.chat_blockers=self.worker.blockers
self.image_tests.acquire=self.scheduler.image_reservation
self.prompt_enhancer.acquire=self.scheduler.image_reservation
self.tts_tests.acquire=self.scheduler.tts_reservation
self.scheduler.evict_tts=self.tts_tests.unload_idle
self.stt=STT(self.profiles,self.catalog,self.runtime)
@@ -105,7 +110,7 @@ class Server(ThreadingHTTPServer):
self.chat_tests=ChatTests(self.profiles,self.worker,self.scheduler)
self.auto_tests=AutoTests(self.catalog.root.parent/'auto-tests.json',self.profiles,self.worker,self.scheduler)
def stop_gpu_work():
self.auto_tests.stop();self.chat_tests.stop();self.image_tests.stop();self.tts_tests.stop();self.worker.stop()
self.auto_tests.stop();self.chat_tests.stop();self.image_tests.stop();self.prompt_enhancer.stop_preview();self.tts_tests.stop();self.worker.stop()
self.video=Video(self.scheduler,stop_gpu_work,self.docker,self.catalog.root.parent/'video')
self.endpoint.video=self.video
if self.endpoint.config['autostart']:
@@ -288,6 +293,7 @@ class Handler(BaseHTTPRequestHandler):
if self.path == '/api/v1/video':return self.respond(self.server.video.status())
if self.path == '/api/v1/image-runtime':return self.respond(self.server.image_runtime.status())
if self.path == '/api/v1/image-tests':return self.respond(self.server.image_tests.status())
if self.path == '/api/v1/prompt-enhancers':return self.respond(self.server.prompt_enhancer.status())
if urlsplit(self.path).path == '/api/v1/image-tests/image':
try:return self.respond(self.server.image_tests.image(parse_qs(urlsplit(self.path).query).get('id',[''])[0]),mime='image/png')
except (OSError,ValueError):return self.respond({'error':'Bild nicht verfügbar.'},404)
@@ -457,14 +463,33 @@ class Handler(BaseHTTPRequestHandler):
if self.path.endswith('/start') and self.headers.get('Content-Type','').startswith('multipart/form-data;'):
from image_upload import read_image_upload
fields,images=read_image_upload(self,'profile_id')
if set(fields)!={'profile_id','prompt'}:raise ValueError('Ungültige Bildtest-Anfrage.')
return self.respond(self.server.image_tests.start(fields['profile_id'],fields['prompt'],reference_images=images))
if set(fields)-{'profile_id','prompt','skip_enhancer'} or not {'profile_id','prompt'}<=set(fields) or fields.get('skip_enhancer','0') not in ('0','1'):raise ValueError('Ungültige Bildtest-Anfrage.')
return self.respond(self.server.image_tests.start(fields['profile_id'],fields['prompt'],reference_images=images,skip_enhancer=fields.get('skip_enhancer')=='1'))
data=self.read_json()
if self.path.endswith('/cancel') and not data:return self.respond(self.server.image_tests.stop())
if self.path.endswith('/start') and set(data)=={'profile_id','prompt'}:return self.respond(self.server.image_tests.start(**data))
raise ValueError('Ungültige Bildtest-Anfrage.')
except ValueError as exc:return self.respond({'error':str(exc)},400)
except Exception:return self.respond({'error':'Bildtest konnte nicht vorbereitet werden; Ressourcen prüfen.'},503)
if self.path == '/api/v1/profiles/prompt-enhancer':
try:return self.respond(self.server.profiles.configure_prompt_enhancer(self.read_json()))
except ValueError as exc:return self.respond({'error':str(exc)},400)
except OSError:return self.respond({'error':'Prompt-Aufwerter-Einstellung konnte nicht gespeichert werden.'},503)
if self.path in ('/api/v1/prompt-enhancers/install','/api/v1/prompt-enhancers/cancel','/api/v1/prompt-enhancers/preview'):
try:
enhancer=self.server.prompt_enhancer
if self.path.endswith('/preview') and self.headers.get('Content-Type','').startswith('multipart/form-data;'):
from image_upload import read_image_upload
fields,images=read_image_upload(self,'profile_id')
if set(fields)!={'profile_id','prompt'}:raise ValueError('Profil und Prompt erforderlich.')
return self.respond(enhancer.preview_start(fields['profile_id'],fields['prompt'],images))
data=self.read_json()
if self.path.endswith('/install') and set(data)=={'task'}:return self.respond(enhancer.install(data['task']))
if self.path.endswith('/cancel') and not data:return self.respond(enhancer.stop())
if self.path.endswith('/preview') and set(data)=={'profile_id','prompt'}:return self.respond(enhancer.preview_start(data['profile_id'],data['prompt'],[]))
raise ValueError('Ungültige Prompt-Aufwerter-Anfrage.')
except ValueError as exc:return self.respond({'error':str(exc)},400)
except OSError:return self.respond({'error':'Prompt-Aufwerter nicht erreichbar.'},503)
if self.path == '/api/v1/profiles/components':
try:return self.respond(self.server.profiles.assign(self.read_json()))
except ValueError as exc:return self.respond({'error':str(exc)},400)
@@ -542,6 +567,7 @@ def main():
server.tts_tests.stop()
server.tts_runtime.stop()
server.image_runtime.stop()
server.prompt_enhancer.stop()
server.image_tests.stop()
server.runtime.stop()
server.catalog.stop(shutdown=True)