diff options
author | AUTOMATIC1111 <16777216c@gmail.com> | 2023-12-16 08:01:42 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-12-16 08:01:42 +0000 |
commit | 5b7d86d42b84878743847c9a87c02af3da1a5ebd (patch) | |
tree | ddfe1af4b1f1446026882af6028d67fce3dcdc9f /modules/api/api.py | |
parent | 93eae69895c34361a71dbed17348bcfd132fbc6a (diff) | |
parent | 6d7e57ba6a4d686d515518b5f90e91b32fa01caf (diff) | |
download | stable-diffusion-webui-gfx803-5b7d86d42b84878743847c9a87c02af3da1a5ebd.tar.gz stable-diffusion-webui-gfx803-5b7d86d42b84878743847c9a87c02af3da1a5ebd.tar.bz2 stable-diffusion-webui-gfx803-5b7d86d42b84878743847c9a87c02af3da1a5ebd.zip |
Merge pull request #14314 from gayshub/master
Add allow specify the task id and get the location of task in the queue of pending task
Diffstat (limited to 'modules/api/api.py')
-rw-r--r-- | modules/api/api.py | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/modules/api/api.py b/modules/api/api.py index b3d74e51..9637cb81 100644 --- a/modules/api/api.py +++ b/modules/api/api.py @@ -31,7 +31,7 @@ from typing import Any import piexif import piexif.helper from contextlib import closing - +from modules.progress import create_task_id, add_task_to_queue, start_task, finish_task, current_task def script_name_to_index(name, scripts): try: @@ -336,6 +336,9 @@ class Api: return script_args def text2imgapi(self, txt2imgreq: models.StableDiffusionTxt2ImgProcessingAPI): + task_id = create_task_id("text2img") + if txt2imgreq.force_task_id is None: + task_id = txt2imgreq.force_task_id script_runner = scripts.scripts_txt2img if not script_runner.scripts: script_runner.initialize_scripts(False) @@ -362,6 +365,8 @@ class Api: send_images = args.pop('send_images', True) args.pop('save_images', None) + add_task_to_queue(task_id) + with self.queue_lock: with closing(StableDiffusionProcessingTxt2Img(sd_model=shared.sd_model, **args)) as p: p.is_api = True @@ -371,12 +376,14 @@ class Api: try: shared.state.begin(job="scripts_txt2img") + start_task(task_id) if selectable_scripts is not None: p.script_args = script_args processed = scripts.scripts_txt2img.run(p, *p.script_args) # Need to pass args as list here else: p.script_args = tuple(script_args) # Need to pass args as tuple here processed = process_images(p) + finish_task(task_id) finally: shared.state.end() shared.total_tqdm.clear() @@ -386,6 +393,10 @@ class Api: return models.TextToImageResponse(images=b64images, parameters=vars(txt2imgreq), info=processed.js()) def img2imgapi(self, img2imgreq: models.StableDiffusionImg2ImgProcessingAPI): + task_id = create_task_id("img2img") + if img2imgreq.force_task_id is None: + task_id = img2imgreq.force_task_id + init_images = img2imgreq.init_images if init_images is None: raise HTTPException(status_code=404, detail="Init image not found") @@ -422,6 +433,8 @@ class Api: send_images = args.pop('send_images', True) args.pop('save_images', None) + add_task_to_queue(task_id) + with self.queue_lock: with closing(StableDiffusionProcessingImg2Img(sd_model=shared.sd_model, **args)) as p: p.init_images = [decode_base64_to_image(x) for x in init_images] @@ -432,12 +445,14 @@ class Api: try: shared.state.begin(job="scripts_img2img") + start_task(task_id) if selectable_scripts is not None: p.script_args = script_args processed = scripts.scripts_img2img.run(p, *p.script_args) # Need to pass args as list here else: p.script_args = tuple(script_args) # Need to pass args as tuple here processed = process_images(p) + finish_task(task_id) finally: shared.state.end() shared.total_tqdm.clear() @@ -511,7 +526,7 @@ class Api: if shared.state.current_image and not req.skip_current_image: current_image = encode_pil_to_base64(shared.state.current_image) - return models.ProgressResponse(progress=progress, eta_relative=eta_relative, state=shared.state.dict(), current_image=current_image, textinfo=shared.state.textinfo) + return models.ProgressResponse(progress=progress, eta_relative=eta_relative, state=shared.state.dict(), current_image=current_image, textinfo=shared.state.textinfo, current_task=current_task) def interrogateapi(self, interrogatereq: models.InterrogateRequest): image_b64 = interrogatereq.image |