feat(ai-studio): resume hosted image jobs
This commit is contained in:
@@ -192,6 +192,53 @@ class ImageStudioGenerateJobsWorker(BaseWorker):
|
||||
return summary
|
||||
|
||||
|
||||
class ImageStudioResumeJobsWorker(BaseWorker):
|
||||
"""Resume submitted/running or failed-download AI studio jobs."""
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
*,
|
||||
project_id=None,
|
||||
aspect_ratio="1:1",
|
||||
db_path=None,
|
||||
config=None,
|
||||
cmhub_config_path=None,
|
||||
):
|
||||
super().__init__()
|
||||
self.project_id = int(project_id) if project_id is not None else None
|
||||
self.aspect_ratio = str(aspect_ratio or "1:1")
|
||||
self.db_path = db_path
|
||||
self.config = config
|
||||
self.cmhub_config_path = cmhub_config_path
|
||||
self._done = 0
|
||||
self._failed = 0
|
||||
self._lock = threading.Lock()
|
||||
|
||||
def execute(self):
|
||||
def on_event(payload):
|
||||
event = dict(payload or {})
|
||||
self.log.emit(_format_image_studio_event(event))
|
||||
if event.get("step") == "job_done":
|
||||
with self._lock:
|
||||
self._done += 1
|
||||
if event.get("result") not in {"success"}:
|
||||
self._failed += 1
|
||||
progress = {"done": self._done, "failed": self._failed}
|
||||
self.progress.emit(progress)
|
||||
|
||||
summary = image_studio_generation.resume_image_jobs(
|
||||
project_id=self.project_id,
|
||||
aspect_ratio=self.aspect_ratio,
|
||||
config=self.config,
|
||||
cmhub_config_path=self.cmhub_config_path,
|
||||
path=self.db_path,
|
||||
should_stop=self.should_cancel,
|
||||
on_event=on_event,
|
||||
)
|
||||
summary["project_id"] = self.project_id
|
||||
return summary
|
||||
|
||||
|
||||
class ImageStudioExportWorker(BaseWorker):
|
||||
"""Export AI studio final selections to local JPEG files."""
|
||||
|
||||
|
||||
Reference in New Issue
Block a user