o yf,@sddlZddlZddlZddlZddlZddlZddlZddlZddlZ ddl m Z ddlm Z ddl mZmZmZmZmZddlmZmZddlmZddlmZddlmZdd lmZddlmZdd l m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.dd l/m0Z0dd lm1Z1dd l2m3Z3m4Z4m5Z5ddl6m7Z7m8Z8ddl9m:Z:m;Z;ddlm?Z?ddl@mAZAddl mBZBddlCmDZDddlEZEddlFZEddlGmHZHddlImJZJmKZKmLZLmMZMmNZNddZOddZPdeQfddZRddZSd d!ZTd"d#ZUd$efd%d&ZVGd'd(d(ZWdS))N)Lock)BytesIO) APIRouterDependsFastAPIRequestResponse) HTTPBasicHTTPBasicCredentials) HTTPException) JSONResponse)jsonable_encoder)compare_digest) sd_samplers deepbooru sd_hijackimagesscriptsuipostprocessingerrorsrestart shared_itemsscript_callbacksinfotext_utils sd_models sd_schedulers)models)opts) StableDiffusionProcessingTxt2Img StableDiffusionProcessingImg2Imgprocess_images)create_embeddingtrain_embedding)create_hypernetworktrain_hypernetwork)PngImagePlugin)$find_checkpoint_config_near_filenameget_realesrgan_models)devices)Any)closing)create_task_idadd_task_to_queue start_task finish_task current_taskc CsJz dd|D|WSty$}z tdd|dd|d}~ww)NcSsg|]}|qS)titlelower.0scriptr2r2`C:\Users\Luke\Documents\Stable diffusion\Automatic1111\stable-diffusion-webui\modules\api\api.py &z(script_name_to_index..zScript 'z ' not found status_codedetail)indexr4 Exceptionr )namerer2r2r8script_name_to_index$s rCcCs&tj|d}|durtddd|S)NzSampler not foundr<)rall_samplers_mapgetr )rAconfigr2r2r8validate_sampler_name+s rHreqcCs,t|}|dd|d<|dd|d<|S)N upscaler_1extras_upscaler_1 upscaler_2extras_upscaler_2)varspop)rIreqDictr2r2r8 setUpscalers3srQcCsnddl}ddlm}z"||}|j}||}|dD]}t|}|js)WdSqWdSty6YdSw)z4Returns True if the url refers to a global resource.rN)urlparseFT) socket urllib.parserRnetlocgethostbyname_ex ipaddress ip_address is_globalr@)urlrTrR parsed_urlZ domain_namehostipip_addrr2r2r8 verify_url:s      r`c Cs|ds |drQtjstdddtjr t|s tdddtjr(dtjini}tj|d|d }z t t |j }|WSt yP}ztdd d|d}~ww|d rb|d d dd }z t t t|}|WSt y}ztddd|d}~ww)Nzhttp://zhttps://zRequests not allowedr<z%Request to local resource not allowedz user-agent)timeoutheaderszInvalid image urlz data:image/;,zInvalid encoded image) startswithrapi_enable_requestsr api_forbid_local_requestsr` api_useragentrequestsrFrreadrcontentr@splitbase64 b64decode)encodingrdresponseimagerBr2r2r8decode_base64_to_imageMs.   ruc Csdt}t|tr|WdStjdkrKd}t}|j D]\}}t|tr;t|tr;| ||d}q%|j |d|rD|ndtj dnOtjdvr|jdkr\|d}|j d d}td tjjtjjj|ppd d d ii}tjdvr|j |d|tj dn|j |d|tj dntddd|}Wdn1swYt|S)NpngFTPNG)formatpnginfoquality)jpgjpegwebpRGBARGB parametersExifunicode)rr)r{r|JPEG)rxexifrzWEBPrazInvalid image formatr<)ior isinstancestrrsamples_formatr4r&PngInfoinfoitemsadd_textsave jpeg_qualitymodeconvertrFpiexifdumpExifIFD UserCommenthelperr getvaluerp b64encode) rt output_bytes use_metadatametadatakeyvaluer exif_bytes bytes_datar2r2r8encode_pil_to_base64fs6        rappcsdztjdddurddlddlddlm}|dWn ty)Ynw|ddt fdd }d t d tffd d |dd t ffdd }| td t d tffdd }| t d t d t ffdd }dS)NFZWEBUI_RICH_EXCEPTIONSr)ConsoleThttprIc st}||IdH}ttt|d}||jd<|jdd}tjjrX| drXt dj t j d|j|jdd |jd d d |jd d|jdd||d|S)NzX-Process-Timepatherrz/sdapiz@API {t} {code} {prot}/{ver} {method} {endpoint} {cli} {duration}z%Y-%m-%d %H:%M:%S.%f http_versionz0.0client)z0:0.0.0rrschememethod)tcodevercliZprotrendpointduration)timerroundrdscoperFsharedcmd_optsapi_logrhprintrxdatetimenowstrftimer=)rI call_nexttsresrrr2r2r8 log_and_times$     z$api_middleware..log_and_timerequestrBc st|jt|ddt|ddt|d}t|tsJd|jd|jd|}rCt |j dd d gd t j d gd nt j|ddtt|ddt|dS)Nr>rbody)errorr>rrz API error: z:  TrSrfF)Z show_localsZ max_frames extra_linessuppressZ word_wrapwidth)exc_infor=ra)r=rn)type__name__rNrFrrr rr[rprint_exceptionminrrreportr r )rrBrmessage)anyioconsolerich_available starletter2r8handle_exceptions &z(api_middleware..handle_exceptionc sBz||IdHWSty }z ||WYd}~Sd}~wwN)r@)rrrBrr2r8exception_handlingsz*api_middleware..exception_handlingc ||Srr2rrBrr2r8fastapi_exception_handler z1api_middleware..fastapi_exception_handlercrrr2rrr2r8http_exception_handlerrz.api_middleware..http_exception_handler) osenvironrFrrZ rich.consolerr@ middlewarerexception_handlerr )rrrrrrr2)rrrrrr8api_middlewares*  rc@seZdZdedefddZdefddZee fde fd d Z d d Z d dZ ddZddZddZddddZdddddZdejfddZdejfd d!Zd"ejfd#d$Zd"ejfd%d&Zd"ejfd'd(Zefd"ejfd)d*Zd+ej fd,d-Z!d.d/Z"d0d1Z#d2d3Z$d4d5Z%d6d7Z&d"e'ee(ffd8d9Z)d:d;Z*dd?Z,d@dAZ-dBdCZ.dDdEZ/dFdGZ0dHdIZ1dJdKZ2dLdMZ3dNdOZ4dPdQZ5dRdSZ6dTdUZ7dVdWZ8dXe'fdYdZZ9dXe'fd[d\Z:dXe'fd]d^Z;dXe'fd_d`ZdedfZ?dgdhZ@didjZAdkdlZBdS)mApir queue_lockcCstjjri|_tjjdD]}|d\}}||j|<qt|_||_||_t |j|j d|j dgt j d|j d|jdgt jd|j d|jdgt jd|j d|jdgt jd|j d |jdgt jd|j d |jd gt jd|j d |jdgd |j d|jdgd |j d|jdgd |j d|jd gt jd|j d|jdgd |j d|jd gt jd|j d|j d gt!t j"d|j d|j#d gt!t j$d|j d|j%d gt!t j&d|j d|j'd gt!t j(d|j d|j)d gt!t j*d|j d|j+d gt!t j,d|j d|j-d gt!t j.d|j d|j/d gt!t j0d|j d|j1d gt!t j2d|j d|j3d gt!t j4d|j d|j5d gt j6d|j d|j7dgd |j d|j8dgd |j d|j9dgd |j d |j:dgt j;d|j d!|jd|j d#|j?dgt j>d|j d$|j@d gt jAd|j d%|jBdgd |j d&|jCdgd |j d'|jDd gt jEd|j d(|jFd gt!t jGd|j d)|jHd gt!t jIdtjjJr|j d*|jKdgd |j d+|jLdgd |j d,|jMdgd g|_Ng|_OtPjQ}tPjR}|jPr|jPstST|jPs&|Ud-|jNs0|V||_N|jPs9|Ud.|jOsE|V||_OdSdS)/Nrg:z/sdapi/v1/txt2imgPOST)methodsresponse_modelz/sdapi/v1/img2imgz/sdapi/v1/extra-single-imagez/sdapi/v1/extra-batch-imagesz/sdapi/v1/png-infoz/sdapi/v1/progressGETz/sdapi/v1/interrogate)rz/sdapi/v1/interruptz/sdapi/v1/skipz/sdapi/v1/optionsz/sdapi/v1/cmd-flagsz/sdapi/v1/samplersz/sdapi/v1/schedulersz/sdapi/v1/upscalersz/sdapi/v1/latent-upscale-modesz/sdapi/v1/sd-modelsz/sdapi/v1/sd-vaez/sdapi/v1/hypernetworksz/sdapi/v1/face-restorersz/sdapi/v1/realesrgan-modelsz/sdapi/v1/prompt-stylesz/sdapi/v1/embeddingsz/sdapi/v1/refresh-embeddingsz/sdapi/v1/refresh-checkpointsz/sdapi/v1/refresh-vaez/sdapi/v1/create/embeddingz/sdapi/v1/create/hypernetworkz/sdapi/v1/train/embeddingz/sdapi/v1/train/hypernetworkz/sdapi/v1/memoryz/sdapi/v1/unload-checkpointz/sdapi/v1/reload-checkpointz/sdapi/v1/scriptsz/sdapi/v1/script-infoz/sdapi/v1/extensionsz/sdapi/v1/server-killz/sdapi/v1/server-restartz/sdapi/v1/server-stopFT)Wrrapi_auth credentialsrorrouterrrr add_api_route text2imgapirTextToImageResponse img2imgapiImageToImageResponseextras_single_image_apiExtrasSingleImageResponseextras_batch_images_apiExtrasBatchImagesResponse pnginfoapiPNGInfoResponse progressapiProgressResponseinterrogateapi interruptapiskip get_config OptionsModel set_config get_cmd_flags FlagsModel get_samplerslist SamplerItemget_schedulers SchedulerItem get_upscalers UpscalerItemget_latent_upscale_modesLatentUpscalerModeItem get_sd_models SDModelItem get_sd_vaes SDVaeItemget_hypernetworksHypernetworkItemget_face_restorersFaceRestorerItemr)RealesrganItemget_prompt_stylesPromptStyleItemget_embeddingsEmbeddingsResponserefresh_embeddingsrefresh_checkpoints refresh_vaer"CreateResponser$r# TrainResponser% get_memoryMemoryResponse unloadapi reloadapiget_scripts_list ScriptsListget_script_info ScriptInfoget_extensions_list ExtensionItemapi_server_stop kill_webui restart_webui stop_webuidefault_script_arg_txt2imgdefault_script_arg_img2imgrscripts_txt2imgscripts_img2imgr create_uiinitialize_scriptsinit_default_script_args)selfrrauthuserpasswordZtxt2img_script_runnerZimg2img_script_runnerr2r2r8__init__s      z Api.__init__rcKs@tjjr|jj||fdt|jgi|S|jj||fi|S)N dependencies)rrrrrrr1)r0rrkwargsr2r2r8rs"zApi.add_api_routercCs6|j|jvrt|j|j|jrdStddddid)NTizIncorrect username or passwordzWWW-AuthenticateBasic)r=r>rd)usernamerrr3r )r0rr2r2r8r1s zApi.authcCs2|dus|dkr dSt||j}|j|}||fSNr)NN)rCselectable_scripts)r0 script_name script_runner script_idxr7r2r2r8get_selectable_scripts   zApi.get_selectable_scriptcCs2ddtjjD}ddtjjD}tj||dS)NcSg|] }|jdur|jqSrrAr5r2r2r8r9'z(Api.get_scripts_list..cSr?rr@r5r2r2r8r9(rA)txt2imgimg2img)rr+r,rr )r0Zt2ilistZi2ilistr2r2r8r&szApi.get_scripts_listcCs0g}tjjtjjfD] }|dd|D7}q |S)NcSr?r)api_infor5r2r2r8r90rAz'Api.get_script_info..)rr+r,)r0r script_listr2r2r8r!,szApi.get_script_infocCs*|dus|dkr dSt||j}|j|Sr9)rCr)r0r;r<r=r2r2r8 get_script4s  zApi.get_scriptcCsd}|jD] }||jkr|j}qdg|}d|d<t.|jD]!}||jrBg}||jD]}||jq1|||j|j<q!Wd|S1sNwY|S)Nrfr) rargs_togrBlocksr is_img2imgappendr args_from)r0r<Zlast_arg_indexr7 script_argsZui_default_valueselemr2r2r8r/;s(       zApi.init_default_script_argsNinput_script_argsc Cs|}|dur|D]\}} | ||<q |r&|j||j|j<|d|d<|jr{|jD]L} || |} | durDtdd| dd| j durOtdddd |j| vrzt dt | j| jt |j| d D]} |j| d | || j| <qiq.|S) Nrfrr;zalways on script not foundr<Fz?Cannot have a selectable script in the always on scripts paramsargs) copyrrMrLrGalwayson_scriptskeysrFr alwaysonrangerlen) r0rZdefault_script_argsr:Zselectable_idxr<rPrMr?rZalwayson_script_nameZalwayson_scriptidxr2r2r8init_script_argsOs&     *zApi.init_script_argsr<mentioned_script_argscs2jsiStj|d}tdrjddnjdd}tj}fdd}|D]} | js1q+| j|vr7q+|| |} | durGt| j| q+j durPi_ t |} | D]\} } } | j vrf| j | <qW|dur|durdd t |j Dfd d |D}|D]\} }|| |} | durq| ||<q|S) azProcesses `infotext` field from the `request`, and sets other fields of the `request` according to what's in infotext. If request already has a field set, and that field is encountered in infotext too, the value from infotext is ignored. Additionally, fills `mentioned_script_args` dict with index: value pairs for script arguments read from infotext. fieldsrT) exclude_unsetcs|jr||n||j}|durdS|jjvr"j|jj}nt|jj}|tdkr0dSt |t rA|ddkrA|d}|durNt ||sN||}|S)N__type__generic_updater) functionrFlabelapi __fields__type_r componentrrdict)fieldparamsr target_typerr2r8get_field_valuezs    z+Api.apply_infotext..get_field_valueNcSsi|]\}}||qSr2r2)r6ivr2r2r8 z&Api.apply_infotext..c3s(|]}|jvr||jfVqdSr)rf)r6rh)indexesr2r8 s&z%Api.apply_infotext..) infotextr paste_fieldshasattrZ model_dumprgparse_generation_parametersrcsetattroverride_settingsget_override_settings enumerateinputs)r0rtabnamer<r\Zpossible_fieldsZ set_fieldsrirlrhrZoverridden_settings_ setting_nameZ script_fieldsr?r2)rqrr8apply_infotextks>"           zApi.apply_infotext txt2imgreqc Cs|jptd}tj}i}|j|d||d||j|\}}|jt|j p&|j |j |j dd}|j r8d|_ t |}| dd| dd| dd| dd|j||j||||d } | d d } | d dt||juttdd tji|Y} d | _|| _tj| _tj| _z7tjjddt||dur| | _tjj | g| jR} n t!| | _t"| } t#|Wtj$tj%&n tj$tj%&wWdn1swYWdn1swY| rt't(t)| j*ng} t+j,| t || -dS)NrBr[) sampler_namedo_not_save_samplesdo_not_save_gridupdater;rMrTrsrO send_imagesT save_imagessd_modelr+jobrrrr2). force_task_idr-rr+rr>r;rSrHr sampler_indexrrNrOrZr)r.rr,rrris_apiroutdir_txt2img_grids outpath_gridsoutdir_txt2img_samplesoutpath_samplesstatebeginr/rMruntupler!r0end total_tqdmclearrmaprrrrjs)r0rtask_idr<infotext_script_argsr:selectable_script_idxpopulaterRrMrp processed b64imagesr2r2r8rsZ            zApi.text2imgapi img2imgreqc Cst|jptd}|j}|durtddd|j}|rt|}tj}i}|j|d||d| |j |\}}|j t |j p<|j|j |j |dd} | j rOd| _t| } | dd| d d| d d| d d| d d|j||j||||d } | dd} | ddt||j~ttddtji| a} dd|D| _d| _|| _tj| _tj| _z7tj j!ddt"||dur| | _#tjj$| g| j#R}n t%| | _#t&| }t'|Wtj (tj)*n tj (tj)*wWdn 1swYWdn 1swY| r"t+t,t-|j.ng}|j/s.d|_d|_t0j1|t||2dS)NrCrDzInit image not foundr<r[)rrrmaskrinclude_init_imagesr;rMrTrsrOrTrrcSsg|]}t|qSr2)rur6xr2r2r8r9sz"Api.img2imgapi..r,rrr2)3rr- init_imagesr rrurr,rr>r;rSrHrrrrNrOrZr*r.rr,r rrrroutdir_img2img_gridsroutdir_img2img_samplesrrrr/rMrrr!r0rrrrrrrrrrr)r0rrrrr<rr:rrrRrMrrrrr2r2r8rsr              zApi.img2imgapirIc Csxt|}t|d|d<|jtjddddddd|}Wdn1s(wYtjt|dd|ddS) NrtrrF) extras_mode image_folder input_dir output_dir save_outputrf)rt html_infor2)rQrurr run_extrasrrr)r0rIrPresultr2r2r8r/s zApi.extras_single_image_apic Cst|}|dg}dd|D}|jtjd d|ddddd|}Wdn1s.wYtjttt |d|dd S) N imageListcSsg|]}t|jqSr2)rudatarr2r2r8r9=rpz/Api.extras_batch_images_api..rfrF)rrrtrrrr)rrr2) rQrOrrrrrrrr)r0rIrP image_listrrr2r2r8r9s   zApi.extras_batch_images_apicCsbt|j}|durtjddSt|\}}|durd}t|}t ||tj|||dS)Nrr)rrr) rurtstriprrrread_info_from_imagerrvrinfotext_pasted_callback)r0rIrtgeninforrir2r2r8rDs   zApi.pnginfoapicCstjjdkrtjddtjtjjdSd}tjjdkr&|tjjtjj7}tjjdkr<|dtjjtjj tjj7}t tjj }||}||}t |d}tj d}tjjre|jsettjj}tj||tj|tjjtdS)Nr)progress eta_relativertextinfog{Gz?rf)rrr current_imagerr1)rr job_countrrrgrjob_nosampling_steps sampling_stepr time_startrset_current_imagerskip_current_imagerr1)r0rIrZtime_since_startetarrr2r2r8rRs        zApi.progressapiinterrogatereqcCs|j}|dur tdddt|}|d}|j&|jdkr&tj|}n|jdkr2t j |}ntdddWdn1sBwYt j |dS) NrDzImage not foundr<rclip deepdanbooruzModel not found)caption) rtr rurrmodelr interrogator interrogatertagrInterrogateResponse)r0rZ image_b64imgrr2r2r8rns      zApi.interrogateapicCstjiSr)rr interruptr0r2r2r8rs zApi.interruptapicCs tiSr)runload_model_weightsrr2r2r8rsz Api.unloadapicCsttjiSr)rsend_model_to_devicerrrr2r2r8rs z Api.reloadapicCstjdSr)rrrrr2r2r8rszApi.skipc Csri}tjjD].}tjj|}|dur)||tjj|tjj|jiq||tjj|diq|Sr)rrrrU data_labelsrFrdefault)r0optionsrrr2r2r8rs(zApi.get_configcCsd|dd}|dur|tjvrtd|d|D] \}}tjj||ddqtjtj dS)Nsd_model_checkpointzmodel rQT)r) rFrcheckpoint_aliases RuntimeErrorrrrsetrconfig_filename)r0rIcheckpoint_namekrnr2r2r8rs zApi.set_configcCs ttjSr)rNrrrr2r2r8rs zApi.get_cmd_flagscCddtjDS)NcSs$g|]}|d|d|ddqS)rrS)rAaliasesrr2)r6samplerr2r2r8r9s$z$Api.get_samplers..)r all_samplersrr2r2r8rzApi.get_samplerscCr)NcSs&g|]}|j|j|j|j|jdqS)rArbr default_rhoneed_inner_modelr)r6 schedulerr2r2r8r9sz&Api.get_schedulers..)r schedulersrr2r2r8rzApi.get_schedulerscCr)NcSs&g|]}|j|jj|jd|jdqS)N)rA model_name model_path model_urlscale)rAscalerr data_pathr)r6upscalerr2r2r8r9sz%Api.get_upscalers..)r sd_upscalersrr2r2r8rrzApi.get_upscalerscCsddgtjpiDS)NcSsg|]}d|iqSr@r2)r6 upscale_moder2r2r8r9s z0Api.get_latent_upscale_modes..)rlatent_upscale_modesrr2r2r8rs zApi.get_latent_upscale_modescCs ddlm}dd|jDS)Nrc Ss,g|]}|j|j|j|j|jt|dqS))r3rhashsha256filenamerG)r3r shorthashrrr'rr2r2r8r9s,z%Api.get_sd_models..)modules.sd_modelsrcheckpoints_listvalues)r0rr2r2r8r s zApi.get_sd_modelscs$ddlmfddjDS)Nrcsg|] }|j|dqS))rr)vae_dictrsd_vaer2r8r9rAz#Api.get_sd_vaes..)modules.sd_vaerrrUrr2rr8r s zApi.get_sd_vaescCr)NcSsg|] }|tj|dqS))rArr hypernetworks)r6rAr2r2r8r9rAz)Api.get_hypernetworks..rrr2r2r8r rzApi.get_hypernetworkscCr)NcSs"g|] }|t|dddqS)cmd_dirN)rAr)rAgetattrrr2r2r8r9s"z*Api.get_face_restorers..)rface_restorersrr2r2r8rrzApi.get_face_restorerscCsddtdDS)NcSsg|] }|j|j|jdqS))rArr)rArrrr2r2r8r9sz-Api.get_realesrgan_models..r(rr2r2r8r)szApi.get_realesrgan_modelscCs@g}tjjD]}tjj|}||d|d|ddq|S)NrrfrS)rApromptnegative_prompt)r prompt_stylesstylesrK)r0Z styleListrstyler2r2r8rs    zApi.get_prompt_stylescs2tjj}ddfdd}||j||jdS)NcSs|j|j|j|j|jdS)Nstep sd_checkpointsd_checkpoint_nameshapevectorsr ) embeddingr2r2r8convert_embeddings z-Api.get_embeddings..convert_embeddingcsfdd|DS)Ncsi|]}|j|qSr2r@)r6rrr2r8ror:zBApi.get_embeddings..convert_embeddings..)r) embeddingsrr2r8convert_embeddingssz.Api.get_embeddings..convert_embeddings)loadedskipped)r model_hijack embedding_dbword_embeddingsskipped_embeddings)r0dbrr2rr8rs  zApi.get_embeddingscCs<|jtjjjddWddS1swYdS)NT) force_reload)rrrr!load_textual_inversion_embeddingsrr2r2r8rs"zApi.refresh_embeddingscC4|j tWddS1swYdSr)rrrrr2r2r8r "zApi.refresh_checkpointscCrr)rrrefresh_vae_listrr2r2r8rrzApi.refresh_vaerRc CszFz$tjjddtdi|}tjjtj d|dWWtj St yF}ztj d|dWYd}~Wtj Sd}~wwtj w)Nr"rzcreate embedding filename: rzcreate embedding error: r2) rrrr"rrrrrrrAssertionErrorrr0rRrrBr2r2r8r"s    zApi.create_embeddingc Csz@ztjjddtdi|}tjd|dWWtjSty@}ztjd|dWYd}~WtjSd}~wwtjw)Nr$rzcreate hypernetwork filename: rzcreate hypernetwork error: r2) rrrr$rrrr!rr"r2r2r8r$s   zApi.create_hypernetworkc Csz{zYtjjddtjj}d}d}|stz(z tdi|\}}Wnty7}z|}WYd}~nd}~wwW|s?t n|sGt wwt j d|d|dWWtj Sty{}zt j d|dWYd}~Wtj Sd}~wwtj w) Nr#rr$train embedding complete: filename:  error: rtrain embedding error: r2) rrrr!training_xattention_optimizationsrundo_optimizationsr#r@apply_optimizationsrrr)r0rRr(rrrrBmsgr2r2r8r#s8    zApi.train_embeddingc Cs\zztjjddgt_tjj}d}d}|stz=z tdi|\}}Wnt y:}z|}WYd}~nd}~wwWtj j t jtj j t j|sRttjntj j t jtj j t j|snttjwtjd|d|dWWtjSt y}ztjd|dWYd}~WtjSd}~wwtjw) Nr%rrr#r$rr%r2)rrrloaded_hypernetworksrr&rr'r%r@rcond_stage_modeltor*devicefirst_stage_modelr(rrr)r0rRr(rr hypernetworkrBexcr2r2r8r%2sB     zApi.train_hypernetworkc Csz(ddl}ddl}||}|}d|j|}||j|j|d}Wnty?}z d|i}WYd}~nd}~wwzdddl}|j r|j } | d| d| d| dd} t |j tj} | d| dd} | d | d d} | d | d d} | d | dd}| d| dd}| | | | ||d}nddi}Wnty}z d|i}WYd}~nd}~wwtj||dS)Nrd)freeusedtotalrrfzallocated_bytes.all.currentzallocated_bytes.all.peak)currentpeakzreserved_bytes.all.currentzreserved_bytes.all.peakzactive_bytes.all.currentzactive_bytes.all.peakz inactive_split_bytes.all.currentzinactive_split_bytes.all.peakZnum_alloc_retriesZnum_ooms)retriesoom)systemactive allocatedreservedinactiveevents unavailable)ramcuda)rpsutilProcessgetpid memory_inforssmemory_percentr@torchrA is_available mem_get_inforg memory_statsrr-rr)r0rrBprocessrZ ram_totalr@rrHsr9r;r<r:r=warningsrAr2r2r8rKsH    zApi.get_memoryc Csbddlm}|g}|jD]}||jdur.||j|j|j|j|j |j |j dq|S)Nr) extensions)rAremotebranch commit_hash commit_dateversionenabled) modulesrOlist_extensionsread_info_from_reporPrKrArQrRrSrTrU)r0rOZext_listextr2r2r8r#ns"    zApi.get_extensions_listc Cs8|j|jtj|j||tjj|tjjtjj ddS)N)r]porttimeout_keep_alive root_path ssl_keyfile ssl_certfile) rinclude_routerruvicornrrrr[ tls_keyfile tls_certfile)r0 server_namerZr\r2r2r8launchs z Api.launchcCs tdSr)r stop_programrr2r2r8r&s zApi.kill_webuicCstrttddS)Ni)r=)ris_restartablerestart_programrrr2r2r8r's zApi.restart_webuicCsdtj_tdS)Nstopz Stopping.)rrserver_commandrrkr2r2r8r(szApi.stop_webui)Cr __module__ __qualname__rrr4rrrr r r1r>rr!rFr/rZrr#StableDiffusionTxt2ImgProcessingAPIr#StableDiffusionImg2ImgProcessingAPIrExtrasSingleImageRequestrExtrasBatchImagesRequestrPNGInfoRequestrProgressRequestrInterrogateRequestrrrrrrrgr+rrrrrrr r r rr)rrrrrr"r$r#r%rr#rdr&r'r(r2r2r2r8rsbJE8G        #  r)Xrprrrrr`rXrlgradiorH threadingrrfastapirrrrrZfastapi.securityr r fastapi.exceptionsr fastapi.responsesr fastapi.encodersr secretsrmodules.sharedrrVrrrrrrrrrrrrrrZ modules.apirrmodules.processingrr r!+modules.textual_inversion.textual_inversionr"r#Z"modules.hypernetworks.hypernetworkr$r%PILr&Zmodules.sd_models_configr'modules.realesrgan_modelr)r*typingr+r piexif.helper contextlibr,Zmodules.progressr-r.r/r0r1rCrHrgrQr`rurrrr2r2r2r8sR       @        !@