o yfY@sddlZddlZddlZddlZddlmZmZddlm Z ddlm Z ddl m Z ddl Z ddlZddlmZdae ZgZgZdZddZd d Zd d Zd dZddZGdddeZGdddeZGdddeZddZddZdefddZ ddZ!dS) N) BaseModelField)opts) OrderedDict)ListcCs|at|ddSN) current_task pending_taskspopid_taskraC:\Users\Luke\Documents\Stable diffusion\Automatic1111\stable-diffusion-webui\modules\progress.py start_tasksrcCs4t|krdat|ttdkrtddSdS)Nr)r finished_tasksappendlenr r rrr finish_tasks   rcCs2d}dtjtjtj|d}d|d|dS)N)kztask(-))joinrandomchoicesstringascii_uppercasedigits) task_typeNresrrrcreate_task_id(s r$cCs,t||ftttkrtddSdS)Nr)recorded_resultsrrrecorded_results_limitr r r#rrrrecord_results.s r(cCstt|<dSr)timer )Zid_jobrrradd_task_to_queue4sr*c@s6eZdZUeddZeed<eddZee ed<dS)PendingTasksResponsezPending task sizetitlesizezPending task idstasksN) __name__ __module__ __qualname__rr.int__annotations__r/rstrrrrrr+7s r+c@sPeZdZUeddddZeed<eddddZeed <ed d d dZ e ed <dS)ProgressRequestNzTask IDz"id of the task to get progress fordefaultr- descriptionr Live preview image IDz&id of last received last preview imageid_live_previewTzInclude live previewzAboolean flag indicating whether to include the live preview image live_preview) r0r1r2rr r5r4r<r3r=boolrrrrr6;s r6c@seZdZUeddZeed<eddZeed<eddZeed<edd d d Z e ed <edd dZ e ed<edddd Z e ed<edddd Zeed<edddd Ze ed<dS)ProgressResponsez-Whether the task is being worked on right nowr,activezWhether the task is in queuequeuedz%Whether the task has already finished completedNProgressz#The progress with a range of 0 to 1r7progressz ETA in secs)r8r-etazLive preview imagez!Current live preview; a data: urir=r;zDSend this together with next request to prevent receiving same imager<z Info textzInfo text used by WebUI.textinfo)r0r1r2rr@r>r4rArBrDfloatrEr=r5r<r3rFrrrrr?As r?cCs&|jdtdgd|jdtdgtdS)Nz/internal/pending-tasksGET)methodsz/internal/progressPOST)rIresponse_model) add_api_routeget_pending_tasks progressapir?)apprrrsetup_progress_apiLsrPcCstt}t|}t||dS)N)r.r/)listr rr+)Zpending_tasks_idsZ pending_lenrrrrMQs rMreqc Cs|jtk}|jtv}|jtv}|s8d}|r/ttddd}||j}d|dt|}t |||d|dSd }t j j t j j }} t j jt j j} } |d krV|| |7}| d krh|d krh|d|| | 7}t|d}tt j j} |d kr}| |nd} | dur| | nd}d}|j}tjr|jrt j t j j|jkrt j j}|durt}tjd krt|jd krd d i}nddd}ni}|j|fdtji|t |!"d}dtjd|}t j j}t |||||||t j j#dS)Nz Waiting...cSst|Sr)r )xrrr_szprogressapi..)keyzIn queue: {}/{}r:)r@rArBr<rFrpngoptimizeTF)rYcompress_levelformatasciiz data:image/z;base64,)r@rArBrDrEr=r<rF)$r r r rsortedkeysindexr[rr?sharedstate job_countjob_nosampling_steps sampling_stepminr) time_startr<rlive_previews_enabler=set_current_image current_imageioBytesIOlive_previews_image_formatmaxr.savebase64 b64encodegetvaluedecoderF)rRr@rArBrFZ sorted_queuedZ queue_indexrDrbrcrdreZelapsed_since_startZpredicted_durationrEr=r<imagebuffered save_kwargsZ base64_imagerrrrNWsN           rNcsrtkstvrtdtkstvsttfddtDd}|dur)|StttddfS)Ng?cs g|] }|dkr|dqS)rrVr).0rSr rr s z$restore_progress..zCouldn't restore progress for z;: results either have been discarded or never were obtained) r r r)sleepnextiterr%grupdater'rr rrestore_progresss  r~)"rprkr)gradior|pydanticrrmodules.sharedrr` collectionsrrrtypingrr r rr%r&rrr$r(r*r+r6r?rPrMrNr~rrrrs8       9