Add optional per-image-profile Qwen prompt enhancers
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user