
    3j7              -       p	   S SK r S SKrS SKrS SKrS SKrS SKrS SKJrJr  S SK	J
r
  S SKJr  S SKJr  S SKJrJrJr  S SKJrJr  S SKrS SKJrJr  S S	KJr  S S
KJr  S SKJr  S SK J!r!  SSK"J#r#  SSK$J%r%J&r&J'r'J(r(J)r)  SSK*J+r+J,r,J-r-  \" S\S9r. " S S5      r/\
 " S S5      5       r0\
 " S S5      5       r11 Skr2/ SQr3/ SQr4/ SQr5SSSSSSSS S!S"SS#SS$S%SS&.S'\6\Rn                     S(\/S)\6\.   S*\\.\-  /\8S-  4   S-  S+\S-  S,\9\:\4   \;\<\:\4      -  S-  S-\:S.\8S/\S-  S0\=S1\8S2\8S3\:S4\=S-  S5\:S-  S6\8S-  S7\>S8\=S9\\=\/\>4   S-  S:\.4(S; jjr?SSSSSSS<S=S>S?S S@SSSASSB.S'\6\Rn                     SC\/S)\6\.   SD\\.\-  /\:\=-  S-  4   SE\\.\-  /\=S-  4   S-  S*\\.\-  /\8S-  4   S-  SF\;\:\=-     S-  SG\;\:\=-     S-  SH\;\:\=-     S-  S+\S-  SI\8SJ\=SK\8SL\=SM\8SN\8S4\=S-  SO\/S-  SP\8SQ\:S-  S:\.4*SR jjr@SSSSSSSS S!S"SSSS#SS$S%SSST.S'\6\Rn                     S(\/S*\\9\:\4   /\8S-  4   S-  S+\9\:\4   \-  S-  S,\9\:\4   \;\<\:\4      -  S-  S-\:S.\8S/\S-  S0\=S1\8S2\8S3\:S4\=S-  SU\>S5\:S-  S6\8S-  S7\>S8\=S9\\=\/\>4   S-  SV\\9\:\:4   /S4   S-  S:\9\:\4   \A-  4*SW jjrBSSSSSSS<S=S>S?S S@SSSASSB.S'\6\Rn                     SC\/SD\\9\:\4   /\:\=-  S-  4   SE\\9\:\4   /\=S-  4   S-  S*\\9\:\4   /\8S-  4   S-  SF\;\:\=-     S-  SG\;\:\=-     S-  SH\;\:\=-     S-  S+\9\:\4   \-  S-  SI\8SJ\=SK\8SL\=SM\8SN\8S4\=S-  SO\/S-  SP\8SQ\:S-  S:\9\:\4   4(SX jjrCSSSY.SZ\6\Rn                     S[\:S-  S\\:\=-  S-  S]\8S-  S:S4
S^ jjrD S|SSSSS_.SZ\6\Rn                     S\\:\=-  S-  S`\=Sa\=S-  S]\8S-  Sb\>S-  Sc\=S-  SQ\:S-  S:S4Sd jjjrES:\9\:\>4   4Se jrFSf\<S:\<\:\\:4   4Sg jrGSh\9\:\4   Si\:S+\9\:\4   S-  S:\9\:\4   4Sj jrHS\\=Sk\S:\:4Sl jrISi\:Sm\:Sn\=S:\:4So jrJS-\:Si\:S+\9\:\4   S-  S,\9\:\4   \;\<\:\4      -  S-  S:\9\:\4   \:-  S-  4
Sp jrKSq\0Sr\>4Ss jrLS)\6\.   St\S:\.4Su jrMS)\6\.   Sv\\./\4   S-  S:\\9\:\4   /\4   S-  4Sw jrNSx\\:\=-     S-  S:\O\:\=-     4Sy jrPSz\:\=-  S-  S:\:\=-  S-  4S{ jrQg)}    N)CallableIterable)	dataclass)Enum)BytesIO)AnyLiteralTypeVar)urljoinurlparse)ClientErrorContentTypeError)	BaseModel)utils)IO)PromptServer   )request_logger)default_base_urlget_comfy_api_headersget_node_idis_processing_interruptedsleep_with_interrupt)ApiServerErrorLocalNetworkErrorProcessingInterruptedM)boundc                   d    \ rS rSr SSSS.S\S\S   S\\\4   S-  S\\\4   S-  4S	 jjjrS
r	g)ApiEndpoint#   N)query_paramsheaderspathmethod)GETPOSTPUTDELETEPATCHr"   r#   c                \    Xl         X l        U=(       d    0 U l        U=(       d    0 U l        g N)r$   r%   r"   r#   )selfr$   r%   r"   r#   s        ;/home/wildlama/comfy/ComfyUI/comfy_api_nodes/util/client.py__init__ApiEndpoint.__init__$   s&     	(.B}"    )r#   r%   r$   r"   )r&   )
__name__
__module____qualname____firstlineno__strr	   dictr   r/   __static_attributes__ r1   r.   r    r    #   sf     DI%
 /3)-%% ?@%
 38nt+% c3h$&% %r1   r    c                      \ rS rSr% \\R                     \S'   \\S'   \	\S'   \
\S'   \\
\4   S-  \S'   \\
\4   \\\
\4      -  S-  \S'   \S-  \S	'   \\S
'   \\S'   \	\S'   \	\S'   Sr\
\S'   Sr\\S'   Sr\S-  \S'   Sr\
S-  \S'   Sr\	S-  \S'   Sr\\\
\4   /\	S-  4   S-  \S'   Sr\\\/\4   S-  \S'   Sr\\\
\
4   /S4   S-  \S'   Srg)_RequestConfig2   node_clsendpointtimeoutcontent_typeNdatafilesmultipart_parsermax_retriesmax_retries_on_rate_limitretry_delayretry_backoffWaiting
wait_labelTmonitor_progressestimated_total	Completedfinal_label_on_successprogress_origin_tsprice_extractoris_rate_limitedresponse_header_validatorr9   )r2   r3   r4   r5   typer   	ComfyNode__annotations__r    floatr6   r7   r   listtupler   intrI   rJ   boolrK   rM   rN   rO   rP   rQ   r8   r9   r1   r.   r;   r;   2   s'   2<<  N
sCx.4
S>DsCx11D88o%""J!d!"&OS4Z&)4C$J4'++GKOXtCH~.<=DK9=OXsCj$./$6=IMxc3h(8$(>?$FMr1   r;   c                       \ rS rSr% \\S'   Sr\\S'   Sr\	\S'   Sr
\S-  \S'   Sr\S-  \S	'   S
r\\S'   Sr\S-  \S'   Srg)_PollUIStateI   startedQueuedstatus_labelT	is_queuedNpriceestimated_duration        base_processing_elapsedactive_sincer9   )r2   r3   r4   r5   rU   rT   r_   r6   r`   rY   ra   rb   rX   rd   re   r8   r9   r1   r.   r[   r[   I   sQ    N L# ItE54<%)d
)%(U(!%L%$,%r1   r[   >             )	succeededsucceedsuccess	completedfinisheddonecomplete)	cancelledcanceled	cancelingfailfailederror)createdqueuedqueueing	submittedinitializingwaitin_queueapplication/jsong      @         ?g       @zWaiting for serverrL   T   )rO   rA   rB   r@   r?   rC   rD   rF   rG   rI   rb   rM   rN   rJ   rE   rP   clsr>   response_modelrO   rA   rB   r@   r?   rC   rD   rF   rG   rI   rb   rM   rN   rJ   rE   rP   returnc          	        #    [        U U40 S[        X#5      _SU_SU_SU_SU_SU_SU	_SU
_S	U_S
U_SU_SS_SU_SU_SU_SU_SU_6I S h  vN n[        U[        5      (       d  [	        S5      e[        UU5      $  N07f)NrO   rA   rB   r@   r?   rC   rD   rF   rG   rI   rb   	as_binaryFrM   rN   rJ   rE   rP   XExpected JSON response to validate into a Pydantic model, got non-JSON (binary or text).)sync_op_raw_wrap_model_extractor
isinstancer7   	Exception_validate_or_raise)r   r>   r   rO   rA   rB   r@   r?   rC   rD   rF   rG   rI   rb   rM   rN   rJ   rE   rP   raws                       r.   sync_opr   Z   s     ,  .nN 	
  "  *     $  .   6  .!" *#$ #<%& (' C* c4  rssnc22/s   AB A>1B       @i  g      ^@
   gffffff?g      $@)progress_extractorrO   completed_statusesfailed_statusesqueued_statusesrA   poll_intervalmax_poll_attemptstimeout_per_pollmax_retries_per_pollretry_delay_per_pollretry_backoff_per_pollrb   cancel_endpointcancel_timeout
extra_textpoll_endpointstatus_extractorr   r   r   r   r   r   r   r   r   r   r   r   r   c          	      ,  #    [        U 40 SU_S[        X#5      _S[        X$5      _S[        X%5      _SU_SU_SU_SU	_S	U
_S
U_SU_SU_SU_SU_SU_SU_SU_SU_6I S h  vN n[        U[        5      (       d  [	        S5      e[        UU5      $  N07f)Nr   r   r   rO   r   r   r   rA   r   r   r   r   r   r   rb   r   r   r   r   )poll_op_rawr   r   r7   r   r   )r   r   r   r   r   rO   r   r   r   rA   r   r   r   r   r   r   rb   r   r   r   r   s                        r.   poll_opr      s    . # /~P 1T	
 .nN . ( (  $ , * 2 2  6  .!" (#$ &%& ' C* c4  rssnc22/s   AB!B"1BF)rO   rA   rB   r@   r?   rC   rD   rF   rG   rI   rb   r   rM   rN   rJ   rE   rP   rQ   r   rQ   c                  #    [        U[        5      (       aX  UR                  SS9n[        UR	                  5       5       H,  u  nn[        U[
        5      (       d  M  UR                  UU'   M.     [        S0 SU _SU_SU_SU_SU_SU_S	U_S
U_SU	_SU
_SU_SU_SU_SU_SU_SU_SU_SU_SU_6n[        UUS9I Sh  vN $  N7f)z
Make a single network request.
  - If as_binary=False (default): returns JSON dict (or {'_raw': '<text>'} if non-JSON).
  - If as_binary=True: returns bytes.
  - response_header_validator: optional callback receiving response headers dict
T)exclude_noner=   r>   r?   r@   rA   rB   rC   rD   rF   rG   rI   rJ   rK   rM   rN   rO   rE   rP   rQ   )expect_binaryNr9   )	r   r   
model_dumprV   itemsr   valuer;   _request_base)r   r>   rO   rA   rB   r@   r?   rC   rD   rF   rG   rI   rb   r   rM   rN   rJ   rE   rP   rQ   kvcfgs                          r.   r   r      s2    : $	""D1&DAq!T""''Q '    "	
   *     $  * +  6 .  (!" #<#$ (%& #<'C* s)<<<<s   ACA"C?C Cc                
  ^ ^^$^%#    [        Uc  [        OU5      n[        Uc  [        OU5      n[        Uc  [        OU5      n[        R
                  " 5       nSnU(       a  [        R                  " S5      OSnSn[        UUS9m$[        R                  " 5       m%U UU$U%4S jn[        R                  " U" 5       5      n UU
:  Ga   [        T UUUUUUSSSSSS9I Sh  vN n[        U[        5      (       d  [        S	5      e  ['        U" U5      5      nU(       a  U" U5      nUb  UT$l        U(       a#  U" U5      n U b  UU :w  a  UR/                  U SS9  U n[        R
                  " 5       n!UU;   n"U"(       a7  T$R0                  b)  T$=R2                  U!T$R0                  -
  -  sl        ST$l        OT$R0                  c  U!T$l        U"T$l        U=(       d    U"(       a  SOST$l        UU;   Ga  T$R0                  b)  T$=R2                  U!T$R0                  -
  -  sl        ST$l        T%R9                  5         ["        R$                  " [        5         UI Sh  vN   SSS5        U(       a  US:w  a  UR/                  SSS9  [;        T U(       a  UOS[=        U!U-
  5      UT$R,                  S[=        T$R2                  5      TS9  UT%R9                  5         ["        R$                  " [        5         UI Sh  vN   SSS5        $ UU;   a:  S[>        R@                  " U5       3n#[(        R*                  " U#5        [        U#5      e [C        U	T SSS5      I Sh  vN   U"(       d  US-  nUU
:  a  GM  [        SU
 S[=        X-  5       S35      e GN! [          aX    U(       aO  ["        R$                  " [        5         [        T UUSS
SSSSS9	I Sh  vN    SSS5        e ! , (       d  f       e = fe f = f! [         a$  n[(        R*                  " SU5        Sn SnAGNSnAff = f GN! , (       d  f       GN= f GNF! , (       d  f       $ = f N! [          aX    U(       aO  ["        R$                  " [        5         [        T UUSS
SSSSS9	I Sh  vN    SSS5        e ! , (       d  f       e = fe f = f! [          a    e [D        [F        4 a    e [         a  n[        SU 35      UeSnAff = f! T%R9                  5         ["        R$                  " [        5         UI Sh  vN    SSS5        f ! , (       d  f       f = f= f7f)a4  
Polls an endpoint until the task reaches a terminal state. Displays time while queued/processing,
checks interruption every second, and calls Cancel endpoint (if provided) on interruption.

Uses default complete, failed and queued states assumption.

Returns the final JSON response from the poll endpoint.
Nr   d   )r]   rb   c                  T  >#     TR                  5       (       d  [        5       (       a  g[        R                  " 5       n TR                  TR
                  b  U TR
                  -
  OS-   n[        TTR                  [        U TR                  -
  5      TR                  TR                  TR                  [        U5      TS9  [        R                  " S5      I Sh  vN   TR                  5       (       d  M  gg N! [         a!  n[         R"                  " SU5         SnAgSnAff = f7f)z;Emit a UI update every second while polling is in progress.Nrc   statuselapsed_secondsrK   ra   r`   processing_elapsed_secondsr   r   zPolling ticker exited: %s)is_setr   time	monotonicrd   re   _display_time_progressr_   rX   r]   rb   ra   r`   asynciosleepr   loggingdebug)nowproc_elapsedexcr   r   statestop_tickers      r.   _tickerpoll_op_raw.<locals>._ticker  s     	<!((**,..nn&$<<272D2D2PS5---VY  ' --$'emm(;$<$)$<$<++#oo/2</@)	 mmC(((# "((**" ) 	<MM5s;;	<sK   D($C: D(B0C: C8C: 6D(8C: :
D%D D( D%%D(CheckingF)
rA   r?   rD   rF   rG   rI   rb   r   rM   rJ   z,Polling endpoint returned non-JSON response.zCancelling task)r?   rD   rI   rb   r   rM   rJ   zStatus extraction failed: %stotalr^   
ProcessingrL   r   zTask failed: r   zPolling timed out after z non-queued attempts (~zs of active polling).zPolling aborted due to error: )$_normalize_statusesCOMPLETED_STATUSESFAILED_STATUSESQUEUED_STATUSESr   r   r   ProgressBarr[   r   Eventcreate_taskr   r   r7   r   r   
contextlibsuppress_normalize_status_valuer   rw   ra   update_absolutere   rd   r`   r_   setr   rX   jsondumpsr   r   r   )&r   r   r   r   rO   r   r   r   rA   r   r   r   r   r   r   rb   r   r   r   completed_statesfailed_statesqueued_statesr]   consumed_attemptsprogress_barlast_progressr   ticker_task	resp_jsonr   e	new_pricenew_progressnow_tsr`   msgr   r   s&   `                 `                 @@r.   r   r      s    < +ASA[+=ast'?;RXghM'?;RXghMnnG-?5$$S)TL $M=OPE--/K< <0 %%gi0K~"33"-!, 4 4"8)'+#+/%*# 	 ")T22#$RSS 3$01A)1LM
 +I6	("+EK!1)<+0M 00S0I$0M^^%F-/I%%111Ve>P>P5PP1)-E&%%-)/E&'EO!'!T	H|E))%%111Ve>P>P5PP1)-E&!((3%%% 4  MS$8 00C0@&%+6$'(8$9$6++#/253P3P/Q)	 !L 	  + ,+K &%djj&;%<=c"n$*=#tT4PPP  !Q&!]  "33` &'8&9 :&6788MO
 	
]  ) "#,,Y7)+$2()'8/3&+37-2
 
 
 8  87 $  <a@D & 43p  ,+? Q( "#,,Y7)+$2()'8/3&+37-2
 
 
 8  87 , ! ~.  E8<=1DE 	  + ,++s  B8T??R0 N
 N$N
 R0 O/ D6R0 P#P P#A(R0 ?*T?)P8/P50P84	T?=A R0 >Q Q	Q R0 *R0 N
 
+O,5O
OO	O,
O'	#	O,,R0 /
P9PR0 PR0  P##
P2-R0 5P88
Q	T?	Q +R-6RRR	R-
R(	$	R--R0 0$S(S##S((S+ ++T<T+T
T+"	T<+
T95T<<T?r   ra   r=   textr   ra   c                   / nU(       a9  UR                  S[        U[        5      (       a  UR                  5       OU 35        UbI  [	        U5      S-  S R                  S5      R                  S5      nUS:w  a  UR                  SU S35        Ub  UR                  U5        U(       a9  [        R                  R                  SR                  U5      [        U 5      5        g g )	NzStatus:    z,.1f0.zPrice: z credits
)appendr   r6   
capitalizerU   rstripr   instancesend_progress_textjoinr   )r=   r   r   ra   display_linesps         r.   _display_textr     s      "Mxz&RU?V?V(9(9(;\b'cdeU|c!$'//4;;C@8  71#X!67T"00=1I;W_K`a r1   )ra   r`   r   r   r   rK   r`   r   c                    UbF  US:  a@  USL a;  Ub  UOUn[        S[        U5      [        U5      -
  5      n	S[        U5       SU	 S3n
OS[        U5       S3n
U(       a  U
 SU 3OU
n[        XXS9  g )	Nr   FzTime elapsed: zs (~zs remaining)sz

r   )maxrX   r   )r=   r   r   rK   ra   r`   r   r   pe	remaining	time_liner   s               r.   r   r     s     "':yE?Q+E+Q'Wf3/#b'9:	$S%9$:$ykV	$S%9$:!<	-7i[ZL)YD(=r1   c            	        ^#    SSS.n [         R                  " SS9nSn[         R                  " US9 ISh  vN mS[        S	[        4U4S
 jjnU Vs/ s H  n[
        R                  " U" U5      5      PM!     nn [
        R                  " U5       H  nUI Sh  vN (       d  M  SU S'     O   U H*  nUR                  5       (       a  M  UR                  5         M,     [
        R                  " USS06I Sh  vN   U S   (       d  U sSSS5      ISh  vN   $ [        [        5       5      nUR                   SUR                   S3n	[        R                   " ["        [$        5         TR'                  U	5       ISh  vN n
U
R(                  S:  U S'   SSS5      ISh  vN   SSS5        SSS5      ISh  vN   U $  GNs  snf  GN- N! U H*  nUR                  5       (       a  M  UR                  5         M,     [
        R                  " USS06I Sh  vN    f = f GN N N! , ISh  vN  (       d  f       N= f! , (       d  f       N= f N! , ISh  vN  (       d  f       U $ = f7f)zLBest-effort connectivity diagnostics to distinguish local vs. server issues.F)internet_accessibleapi_accessibler   r   )zhttps://www.google.comzhttps://www.baidu.comr?   Nurlr   c                   >#     TR                  U 5       IS h  vN nUR                  S:  sS S S 5      IS h  vN   $  N$ N! , IS h  vN  (       d  f       g = f! [        [        [        R
                  4 a     gf = f7f)Nrg   F)getr   r   OSErrorr   TimeoutError)r   respsessions     r.   _probe&_diagnose_connectivity.<locals>._probe  sZ     ";;s++t;;, ,+++++'*>*>? ss   BA ?A AA AA BA A A	A
AA BA A?<B>A??BTr   return_exceptionsz://z/healthrg   r   )aiohttpClientTimeoutClientSessionr6   rY   r   r   as_completedrp   cancelgatherr   r   schemenetlocr   r   r   r   r   r   )resultsr?   internet_probe_urlsr  uprobe_tasksfuttparsed
health_urlr  r  s              @r.   _diagnose_connectivityr    s      %G ###.G N$$W55	c 	d 	 @SS?R!w**6!95?RS		G++K89959G12 9
 !vvxxHHJ ! ..+FFFF,-) 655, *,-c&--@
  g6{{:..$,0KK#,=() /. 71 656 N7 6 T  G !vvxxHHJ ! ..+FFFF% 62 /... 761 6556 Ns/  4I0G I0I&G:I=GGG'	G0I-I9G:I	I0H!I0AI)I?H$
 IH(I!H&"I&I.I09I:I0IGIH*-HH
HI!I0$I&I(H?.H1/H?;I
I	II0I-II-(I0r  c                     [        U 5      S:X  a  U S   U S   S4$ [        U 5      S:X  a  U S   U S   U S   4$ [        S5      e)z*Normalize (filename, value, content_type).   r   r   application/octet-streamr   z4files tuple must be (filename, file[, content_type]))len
ValueError)r  s    r.   _unpack_tupler    sS    
1v{tQqT555
1v{tQqT1Q4
K
LLr1   endpoint_paramsr%   c                     [        U =(       d    0 5      nUR                  5       S:X  a)  U(       a"  UR                  5        H  u  pEUc  M
  XSU'   M     U$ )Nr&   )r7   upperr   )r  r%   rA   paramsr   r   s         r.   _merge_paramsr"    sF    /'R(F||~4JJLDA}q	 ! Mr1   bodyc                    U S:X  a  gU S:X  a  gU S:X  a  gU S:X  a  g [        U[        5      (       a  UR                  S	5      n[        U[        5      (       aE  UR                  S
5      nUR                  S5      nU(       a  U(       a	  SU SU S3$ U(       a  SU 3$ S[        R                  " U5       3$ [        U5      n[        U5      S::  a  SU 3$ SU  S3$ ! [         a	    SU  S3s $ f = f)Ni  z2Unauthorized: Please login first to use this node.i  zFPayment Required: Please add credits to your account to use this node.i  zGThere is a problem with your account. Please contact support@comfy.org.  zaRate Limit Exceeded: The server returned 429 after all retry attempts. Please wait and try again.rw   messagerR   zAPI Error: z (Type: )   zAPI Error (raw): zAPI Error (status HTTP z: Unknown error)r   r7   r   r   r   r6   r  r   )r   r#  errr   typtxts         r.   _friendly_http_messager-    s   }C}W}X}r/dD!!((7#C#t$$ggi(ggfo3(XcU!<<(.. D!1 233d)C3x3*3%00'xq11 /vho../s*   A3C C C 7C C C/.C/r$   attemptc           	          UR                  S5      R                  SS5      =(       d    SnU  SU SU S[        R                  " 5       R                  S S  3$ )N/_op_try   )stripreplaceuuiduuid4hex)r%   r$   r.  slugs       r.   _generate_operation_idr;  ;  sR    ::c?""3,4DXQtfD	4::<+;+;BQ+?*@AAr1   c                 ,   UR                  5       S:X  a  g U S:X  a  [        U=(       d    0 R                  5        VVs/ s H  u  pEUc  M
  UPM     snn5      n/ nU(       a  [        U[        5      (       a  UO[	        UR                  5       5      nU HX  u  pU
c  M
  [        U
[
        5      (       a  U
S   nO[        U
SU	5      nUR                  U	[        U=(       d    S5      S.5        MZ     SXgS.$ U S	:X  a  U=(       d    0 $ U=(       d    0 $ s  snnf )
Nr&   multipart/form-datar   name )fieldfilenameT)
_multipartform_fieldsfile_fields!application/x-www-form-urlencoded)	r   sortedr   r   rV   rW   getattrr   r6   )r@   r%   rA   rB   r   r   rC  rD  	file_iter
field_namefile_objrA  s               r.   "_snapshot_request_body_for_loggingrK  @  s     ||~,,TZR,>,>,@R,@DAAa,@RS,.!+E4!8!8d5;;=>QI(1$
#h..'{H&xDH""ZSUWEX#YZ )2 #;[[::zr:2 Ss   	D

D
r   r   c                 p,  ^ #    T R                   R                  n[        U5      nUR                  (       dF  UR                  (       d5  [        [        5       R                  S5      S-   UR                  S5      5      nT R                   R                  n[        T R                   R                  XDS:X  a  T R                  OS5      nS[        R                  S[        4U 4S jjnT R                   b  T R                   O["        R$                  " 5       nSnT R&                  n	Sn
T R&                  nSnSnSn US
-  n[        R                  " 5       nSnSn[)        UT R                   R                  U5      n[*        R,                  " SXBU5        U(       a  SS0OSS0nUR                  (       d5  UR                  (       d$  UR/                  [1        T R2                  5      5        T R                   R4                  (       a%  UR/                  T R                   R4                  5        SU0nUS:X  a  UR7                  SS5        [9        T R:                  UT R                  T R<                  5      n T R>                  (       a  [        R@                  " U" X5      5      n[B        RD                  " T RF                  S9n[B        RH                  " US9nT R:                  S:X  Ga  US:w  Ga  UR7                  SS5        T RJ                  (       aW  T R                  (       aF  T RK                  T R                  5      n[M        U[B        RN                  5      (       d  [Q        S5      eO[B        RN                  " S	S9nT R                  (       aa  T R                  RS                  5        HC  u  nnUc  M  URU                  U[M        U[V        [X        45      (       d  [[        U5      OU5        ME     T R<                  (       a  [M        T R<                  [\        5      (       a  T R<                  OT R<                  RS                  5       nU H  u  nnUc  M  [M        U[^        5      (       a  [a        U5      u  nnnO[c        USU5      nUnSn[M        U[d        5      (       a4  [f        Rh                  " [j        5         URm                  S5        SSS5        URU                  UUUUS9  M     UUS'   OWT R:                  S:X  a$  US:w  a  SUS'   T R                  =(       d    0 US'   O#US:w  a  SUS'   T R                  =(       d    0 US'   [n        Rp                  " UUUU(       a  [s        U5      OSU(       a  [s        U5      OSUS9  URt                  " XB4SU0UD6n [        R@                  " U 5      n!U!1n"U(       a  U"Rw                  U5        [        Rx                  " U"[        Rz                  S9I Sh  vN u  n#n$U(       a'  UU#;   a!  U!U$;   a  U!R}                  5         [        S5      eU!I Sh  vN n%U% ISh  vN   U%R                  S :  Gan   U%R                  5       I Sh  vN n&Sn'S!n(S"n)U%R                  S#:H  =(       d1    T R                  SL=(       a    T R                  U%R                  U&5      n*U*(       aE  U
T R                  :  a5  U
S
-  n
[        US$5      n(UT R                  -  nS%U
 S&T R                   3n)S	n'OMU%R                  [        ;   a9  X-
  T R                  ::  a'  U	n(U	T R                  -  n	S'X-
   S&T R                   3n)S	n'U'(       Ga  [*        R                  " S(UUU%R                  U(U)5        [n        Rp                  " UUUU%R                  [s        U%R4                  5      U&S)U%R                   S*U) S+U(S, S-3S.9  [        U(T R2                  T R>                  (       a  T R                  OST R>                  (       a  UOST R                  T R>                  (       a  [        OSS/9I Sh  vN    SSS5      ISh  vN   UR                  5         U(       a=  UR}                  5         [f        Rh                  " [j        5         UI Sh  vN   SSS5        U(       a;  [f        Rh                  " [j        5         UR                  5       I Sh  vN   SSS5        U(       d  GM  T R>                  (       d  GM  T R                  (       d  GM  [        T R2                  T R                  Ub  UO [        ["        R$                  " 5       U-
  5      T R                  USUS09  GM  [        U%R                  U&5      n+[n        Rp                  " UUUU%R                  [s        U%R4                  5      U&U+S.9  [k        U+5      eU(       a  [Y        5       n,["        R$                  " 5       n-U%R                  R                  S15        Sh  vN n.U,R                  U.5        ["        R$                  " 5       n/U/U--
  S2:  d  M:  U/n-[        5       (       a  [        S5      eT R>                  (       d  Mi  [        T R2                  T R                  [        U/U-
  5      T R                  5        M   U%R                  5       I Sh  vN n2U2n3[f        Rh                  " [j        5         T R                  (       a  T R                  U25      OSnSSS5        S	n[        ["        R$                  " 5       U-
  5      n[n        Rp                  " UUUU%R                  [s        U%R4                  5      U3S39  U2sSSS5      ISh  vN   UR                  5         U(       a=  UR}                  5         [f        Rh                  " [j        5         UI Sh  vN   SSS5        U(       a;  [f        Rh                  " [j        5         UR                  5       I Sh  vN   SSS5        U(       av  T R>                  (       ad  T R                  (       aR  [        T R2                  T R                  Ub  UO [        ["        R$                  " 5       U-
  5      T R                  USUS09  $ $ $ $ ! , (       d  f       GN= f GN GNi GNa GN:! [        [        R                  4 a    U%R                  5       I Sh  vN  n& GNnf = f GN GN GNP! , (       d  f       GNU= f GN#! , (       d  f       GN(= f GN
 [W        U,5      n0U%R4                  RS                  5        VVs0 s H  u  nnUR                  5       U_M     Os  snnf n1nnT R                  (       aF  [f        Rh                  " [j        5         T R                  U15      nSSS5        O! , (       d  f       O= fT R                  (       a  T R                  U15        S	n[        ["        R$                  " 5       U-
  5      n[n        Rp                  " UUUU%R                  U1U0S39  U0sSSS5      ISh  vN    UR                  5         U(       aP  UR}                  5         [f        Rh                  " [j        5         UI Sh  vN    SSS5        O! , (       d  f       O= fU(       aN  [f        Rh                  " [j        5         UR                  5       I Sh  vN    SSS5        O! , (       d  f       O= fU(       av  T R>                  (       ad  T R                  (       aR  [        T R2                  T R                  Ub  UO [        ["        R$                  " 5       U-
  5      T R                  USUS09  $ $ $ $  GN! [        [        R                  4 au    U%R                  5       I Sh  vN  n4 U4(       a  [        R                  " U45      O0 n2O! [        R                   a    S4U40n2 Of = f[M        U2[r        5      (       a  U2OU4n3 GN?f = f! , (       d  f       GN= f GN GN_! , (       d  f       GNd= f GN2! , (       d  f       GN7= f! , ISh  vN  (       d  f       GO|= f! [~         a    [*        R,                  " S55        e [        [        4 GaE  n5X-
  T R                  ::  GaX  [*        R                  " S6UUU	X-
  T R                  [[        U55      5        [n        Rp                  " UUUU(       a  [s        U5      OSU(       a  [s        U5      OSU[        U55      R                   S7[[        U55       S83S99  [        U	T R2                  T R>                  (       a  T R                  OST R>                  (       a  UOST R                  T R>                  (       a  [        OSS/9I Sh  vN    U	T R                  -  n	 Sn5A5UR                  5         U(       aP  UR}                  5         [f        Rh                  " [j        5         UI Sh  vN    SSS5        O! , (       d  f       O= fU(       aN  [f        Rh                  " [j        5         UR                  5       I Sh  vN    SSS5        O! , (       d  f       O= fU(       d  GM1  T R>                  (       d  GME  T R                  (       d  GMY  [        T R2                  T R                  Ub  UO [        ["        R$                  " 5       U-
  5      T R                  USUS09  GM  [        5       I Sh  vN  n6U6S:   (       dV  [n        Rp                  " UUUU(       a  [s        U5      OSU(       a  [s        U5      OSUS;[[        U55       3S99  [        S<5      U5e[n        Rp                  " UUUU(       a  [s        U5      OSU(       a  [s        U5      OSUS=[[        U55       3S99  [        S>[        5        S?35      U5eSn5A5ff = f UR                  5         U(       aP  UR}                  5         [f        Rh                  " [j        5         UI Sh  vN    SSS5        O! , (       d  f       O= fU(       aN  [f        Rh                  " [j        5         UR                  5       I Sh  vN    SSS5        O! , (       d  f       O= fU(       as  T R>                  (       ab  T R                  (       aQ  [        T R2                  T R                  Ub  UO [        ["        R$                  " 5       U-
  5      T R                  USUS09  GO>! UR                  5         U(       aP  UR}                  5         [f        Rh                  " [j        5         UI Sh  vN    SSS5        O! , (       d  f       O= fU(       aN  [f        Rh                  " [j        5         UR                  5       I Sh  vN    SSS5        O! , (       d  f       O= fU(       av  T R>                  (       ad  T R                  (       aR  [        T R2                  T R                  Ub  UO [        ["        R$                  " 5       U-
  5      T R                  USUS09  f f f f = fGM  7f)@zfCore request with retries, per-second interruption monitoring, true cancellation, and friendly errors.r0  r&   Nstop_evtstart_tsc                   >#     U R                  5       (       d  [        5       (       a  gTR                  (       aK  [        TR                  TR
                  [        [        R                  " 5       U-
  5      TR                  5        [        R                  " S5      I Sh  vN   U R                  5       (       d  M  gg N! [        R                   a     gf = f7f)z:Every second: update elapsed time and signal interruption.Nr   )r   r   rJ   r   r=   rI   rX   r   r   rK   r   r   CancelledError)rM  rN  r   s     r.   _monitor_request_base.<locals>._monitore  s     
	oo'',..''*cnnc$..:JX:U6VX[XkXk mmC((( oo'' )%% 		sE   C$B? CA5B? B= B? ;C=B? ?CCCCr   FTr   z[DEBUG] HTTP %s %s (attempt %d)Acceptz*/*r   r#   zContent-Typer   r   r=  z-multipart_parser must return aiohttp.FormData)default_to_multipartr>  r  )rA  r@   rA   rE  r   )operation_idrequest_methodrequest_urlrequest_headersrequest_paramsrequest_datar!  )return_whenzTask cancelledi  rc   r?  r%  g      >@zrate-limit retry z of zretry z%HTTP %s %s -> %s. Waiting %.2fs (%s).r)  z (z, will retry in z.1fzs))rU  rV  rW  response_status_coderesponse_headersresponse_contenterror_message)display_callback)r   r   rK   ra   r`   r   i   r   )rU  rV  rW  r\  r]  r^  _rawzPolling was interrupted by userz=Connection error calling %s %s. Retrying in %.2fs (%d/%d): %s: z (will retry))rU  rV  rW  rX  rY  rZ  r_  r   zLocalNetworkError: zuUnable to connect to the API server due to local network issues. Please check your internet connection and try again.zApiServerError: zThe API server at zB is currently unreachable. The service may be experiencing issues.)dr>   r$   r   r  r  r   r   r   lstripr%   r"  r"   rA   r   r   rU   rN   r   r   rF   r;  r   r   updater   r=   r#   poprK  r@   rB   rJ   r   r  r  r?   r	  rC   r   FormDatar  r   	add_fieldbytes	bytearrayr6   rV   rW   r  rG  r   r   r   r   seekr   log_request_responser7   requestaddr}   FIRST_COMPLETEDr  r   r   r   r   JSONDecodeErrorr   rP   rE   minrG   _RETRY_STATUSrD   warningr   rI   rK   r   r   closerM   rX   r-  contentiter_chunkedextendr   lowerrO   rQ   loadsr   r   rR   r2   r  r   r   )7r   r   r   
parsed_urlr%   r!  rQ  
start_timer.  delayrate_limit_attemptsrate_limit_delayoperation_succeededfinal_elapsed_secondsextracted_price
stop_eventmonitor_tasksessrU  payload_headers
payload_kwrequest_body_logr?   formr   r   rH  rI  rJ  rA  
file_valuer@   req_cororeq_tasktasksrp   pendingr  r#  should_retry	wait_timeretry_labelis_rlr   buff	last_tickchunkr   bytes_payloadresp_headerspayloadresponse_content_to_logr   r   diags7   `                                                      r.   r   r   [  s]    
,,

C#JZ%6%6&(//4s:CJJsOL\\  F3<<44fTY/chh_cdF %  ,/+A+A+M''SWSaSaScJGOOE %(,$(O
1]]_
,0-1-fcll6G6GQ7gN/<8U+8M_B`  ):):""#8#FG<<""3<<#7#78&/%A
U?5=c>N>NPVX[X`X`bebkbklR	##&228J3ST++#++>G((9D#88Vu_##ND9''CHH//9D%dG,<,<==()XYY > #++FDxx$'HHNN$4DAq y ( NN1Jq5R[J\<]<]c!fcde %5 99-7		4-H-H		ciiooN_I09,
H#+$%h66ANxAX>Hj,'.x'LH)1J+EL%j'::!+!4!4Y!? * 2 "@z:_kl 1: &*
6"!!%HHVW\_2U/%(XX^
6"52D/%(XX^
6"//)%9H_ 5d/5tF|4- ||FMM*MH**84H JE		,'"),,u'BYBY"ZZMD' 4w&OO%+,<== ">Dt;;#%1%)YY[0 $)L #I"$K KK3. ++47bC<O<OPTP[P[]a<b  !4s7T7T!T+q0+$'(8$$?	(C,=,==((9:M9NdSVSpSpRq&r'+57;X]`]l]l:l$)	!2!22(.w/L.MTRURaRaQb&c'+#C" KK%' ';;)5+1(+15-1$,,-?-1,1$++bM]^ghk]lln*o 3%LL.1.B.BCNN*-*>*>JD//GJG[G[-Cae   !e tl NN##%((3&&& 4((3**,&& 4""s';';';@Z@Z@Z&LL55 1< . !1J!>?$'$7$7)#/DY 1dCC"77%1'-$'-1[[)-dll);)-&) $C.( $;D $ 0I'+||'@'@'K 
"eE*"nn.?c1(+I8::&;<L&M M"333 6$'LL#..#cJFVBWY\YlYl!",	a(,		"37>/ $,,Y7JMJ]J]#*=*=g*Fcg 8*.',/0@:0M,N)"77%1'-$'-1[[)-dll);)@ #m ttl NN##%((3&&& 4((3**,&& 4"s';';@Z@Z&LL55 1< . !1J!>?$'$7$7)#/D A[';"G "@!?6 [ "  1,d.B.BC 1%)YY[001LU t ' 43 ' 43u
"'K %*$KM=A\\=O=O=Q#R=QTQAGGIqL=Q#RL#R**'00;.1.A.A,.OO <;;4455lC*.',/0@:0M,N)"77%1'-$'-1[[)5)6 )} ttl NN##%((3&&& 433((3**,&& 433"s';';@Z@Z&LL55 1< . !1J!>?$'$7$7)#/D A[';"{ #4,d.B.BC a%)YY[005:>djj&6BG#33 5'-tnG5=GQU=V=V'\`/a 87U t ' 43 ' 43y ttp % 	MM;<W% 9	-#//AS1OOF 33!-#) #=LD$9RV394<t!1%)!W%5%5$6bQ"N +LL&)&:&:CNN"%"6"6JD''?B?S?S%;Y]   ***< NN##%((3&&& 433((3**,&& 433""s';';';@Z@Z@Z&LL55 1< . !1J!>?$'$7$7)#/DM 0111D-.33!-#) #=LD$9RV394<t!1$7Ax"@ (K  //)%9H_ 5d/5tF|4- 0Q9 !$%5%7$8 9: ; m9	w l NN##%((3&&& 433((3**,&& 433"s';';@Z@Z&LL55 1< . !1J!>?$'$7$7)#/D NN##%((3&&& 433((3**,&& 433"s';';@Z@Z&LL55 1< . !1J!>?$'$7$7)#/D A[';"q s  I$AX6(H?AA 'q,9D$AA q>:AA r
AA #r$AA 'A@(:r
rr
GA@(sA@(#AA .s/AA 3AAX64s:s
;s?)AX6(s"<s=s"AX6AX6'AX6;AAX6BA@((s7,s4-s70.A@("+A@(:A@(}} }&A@( %)%A"A@(AA ;AA AAX6A@> A@$)AX6A@!A@"A@&BAX6,
q;	6	AA AA AA r

-s7r:8s=A@( sA@(AA 
s
sAX6s""
s1,AX64s77)A@( t?>5A@(3v	A@(
v	A0A@(AA xAA AAX6y0!y$"y0'	AX60
y>	:(AX6"{6z97{<	AX6
{	BAX6}-&~&~+*&+&&"A@(%&&A@()
8	3A@(;AA >A@@
A@	@AX6@A@@
A@%	@ AX6@(AA @.A@1@/AA @;AA @>AS5 A AA A1AN9A4DAN4FAFFAN4FAS5 FAAX6GAG3G$AG'G%AG3G*	AX6G3
AHG=(AX6H%AIH9AH<H:AIH?	AX6I
AIIAX6I#AX6I7AX6JAAX6KAN4K,AK/K-CAN4N4AN9N9AS5 N=AAX6O>APPAPPAPP
	AX6P
AP!P(AX6QAQ(QAQQAQ(Q	AX6Q(
AQ6Q2BAX6S5AAX0T7AUT=AU 
T>AUU	AX0U
AUU(AX0U>AV!VAV
VAV!V	AX0V!
AV/V+BAX0X0AX6r  c           	           U R                  U5      $ ! [         aE  n[        R                  " S[	        U SU 5      U5        [        S[	        U SU 5       SU 35      UeS nAff = f)Nz%Response validation failed for %s: %sr2   zResponse validation failed for rb  )model_validater   r   rw   rG  )r   r  r   s      r.   r   r     sv    
,,W55 3NJ?	

 -gnjR`.a-bbdefdgh
	s    
A"A AA"	extractorc                 ^   ^ ^^ Tc  g0 mS[         [        [        4   S[        4UUU 4S jjnU$ )a  Wrap a typed extractor so it can be used by the dict-based poller.
Validates the dict into `response_model` before invoking `extractor`.
Uses a small per-wrapper cache keyed by `id(dict)` to avoid re-validating
the same response for multiple extractors in a single poll attempt.
Ndr   c                    >  [        U 5      nTR                  U5      nUc  TR                  U 5      nUTU'   T" U5      $ ! [         a  n[        R
                  " SU5        e S nAff = f)Nz,Extractor failed (typed -> dict wrapper): %s)idr   r  r   r   rw   )r  keymodelr   _cacher  r   s       r.   _wrapped'_wrap_model_extractor.<locals>._wrapped  si    		Q%CJJsOE}&55a8#sU## 	MMH!L	s   <A   
A'
A""A')r7   r6   r   )r   r  r  r  s   `` @r.   r   r     s:     F
DcN 
s 
 
 Or1   valuesc                     U (       d
  [        5       $ [        5       nU  H$  n[        U5      nUc  M  UR                  U5        M&     U$ r,   )r   r   rm  )r  outr   nvs       r.   r   r     s>    u%C$Q'>GGBK  Jr1   valc                 l    [        U [        5      (       a  U R                  5       R                  5       $ U $ r,   )r   r6   r5  rw  )r  s    r.   r   r     s)    #syy{  ""Jr1   r,   )Rr   r   r   r   r   r7  collections.abcr   r   dataclassesr   enumr   ior   typingr   r	   r
   urllib.parser   r   r  aiohttp.client_exceptionsr   r   pydanticr   comfyr   comfy_api.latestr   serverr   r?  r   _helpersr   r   r   r   r   common_exceptionsr   r   r   r   r    r;   r[   rq  r   r   r   rR   rS   rU   r7   r6   rV   rW   rX   rY   r   r   rh  r   r   r   r   r  r  r"  r-  r;  rK  r   r   r   r   r   r   r9   r1   r.   <module>r     s
         . !   ( ( *  C       X WCy!% % N N N, & & & *e Sd AE!;?*(,*%))4'+!%'9=)-3	bll	-3-3 G	-3
 q3wi56=-3 d
-3 S>DsCx11D8-3 -3 -3 o-3 -3 -3 -3 -3 d
-3   $J!-3" #-3$ %-3&  #'-3( sCj$./$6)-3* +-3l BF@D15.2.2! # ""%$'%)*. !+.3	bll	.3.3 G	.3
 Cy#)d*::;.3 !!c'C$J!67$>.3 q3wi56=.3 S3Y$..3 #)_t+.3 #)_t+.3 d
.3 .3 .3 .3 .3   !.3" "#.3$ d
%.3& !4''.3( ).3* d
+.3, -.3j HL.2;?*(,*%))4'+!%'9=IM+7=	bll	7=7= tCH~.<=D	7=
 sCx.9
$t
+7= S>DsCx11D87= 7= 7= o7= 7= 7= 7= 7= d
7= 7=   $J!7=" #7=$ %7=&  #'7=( sCj$./$6)7=*  (c3h(8$(>?$F+7=, 
#s(^e-7=~ IMGK15.2.2.2 # ""%$'%)*. !)A	bll	AA S#X/sT1AAB	A
 !$sCx.!13:!=>EA tCH~.<=DA S3Y$.A #)_t+A #)_t+A sCx.9
$t
+A A A A A  A  "!A" d
#A$ !4'%A& 'A( d
)A* 
#s(^+AP  $b2<< b
*b #I	b
 4<b 
b0 #'	> !-1!>2<< >#I> > 4Z	> 4<> d{> !$d
> d
> 
>*'d39o 'TMU MuS#s]3 M4S> 3 d3PS8nW[F[ `dehjmem`n /3 /c /c /:B3 Bc BC BC B
 sCx.4
 S>DsCx11D8	
 
#s(^cD 6E^ ED EP
tAw   GS!D( tCH~#$t+8s 3d : s39~ sT!1 cCi$6F r1   