Ë
    ºÛ¯jË  ã                   óh   — d dl Z d dlZd dlZ ej                  e«      Z G d„ d«      Z G d„ d«      Zy)é    Nc                   ó:   — e Zd Zdd„Zd„ Zd„ Zd„ Z	 	 	 d	d„Zd„ Zy)
ÚForgeClientc                 óf   — |j                  d«      | _        || _        | j                  › d�| _        y )NÚ/z	/sdapi/v1)ÚrstripÚurlÚtimeoutÚapi_base)Úselfr   r	   s      ú3C:\Users\Usuario\Downloads\NEW\Engine\api_client.pyÚ__init__zForgeClient.__init__   s*   € Ø—:‘:˜c“?ˆŒØˆŒØŸ8™8˜* IÐ.ˆ�ó    c                 óœ   — 	 t        j                  | j                  › d�d¬«      }|j                  dk(  S # t         j                  $ r Y yw xY w)Nz/sdapi/v1/optionsé
   ©r	   éÈ   F)ÚrequestsÚgetr   Ústatus_codeÚConnectionError©r   Úrs     r   Úcheck_statuszForgeClient.check_status   sJ   € ð	Ü—‘ §¡˜zÐ):Ð;ÀRÔHˆAØ—=‘= CÑ'Ð'øÜ×'Ñ'ò 	Ùð	ús   ‚25 µAÁ
Ac                 óž   — t        j                  | j                  › d�| j                  ¬«      }|j	                  «        |j                  «       S )Nú/optionsr   )r   r   r
   r	   Úraise_for_statusÚjsonr   s     r   Úget_optionszForgeClient.get_options   s8   € Ü�L‰L˜DŸM™M˜?¨(Ð3¸T¿\¹\ÔJˆØ	×ÑÔØ�v‰v‹xˆr   c                 ó    — t        j                  | j                  › d�|| j                  ¬«      }|j	                  «        |j                  «       S )Nr   ©r   r	   )r   Úpostr
   r	   r   r   )r   Úoptionsr   s      r   Úset_optionszForgeClient.set_options   s:   € Ü�M‰M˜TŸ]™]˜O¨8Ð4¸7ÈDÏLÉLÔYˆØ	×ÑÔØ�v‰v‹xˆr   c                 óÆ  — |||||||||	|
ddddœ}|j                  |«       t        j                  dt        |«      › d|› d|› d|› �«       t	        j
                  | j                  › d�|| j                  ¬«      }|j                  «        |j                  «       }g }|j                  d	g «      D ]&  }|j                  t        j                  |«      «       Œ( |j                  d
d«      }t        |t        «      rdd l	}	 |j!                  |«      }|j                  dd«      }	t        j                  dt        |«      › d|	› �«       ||fS # |j"                  $ r d|i}Y ŒOw xY w)NF)ÚpromptÚnegative_promptÚwidthÚheightÚstepsÚ	cfg_scaleÚsampler_nameÚ
batch_sizeÚseedÚ	clip_skipÚrestore_facesÚtilingÚ	enable_hrzEnviando a Forge: z chars, Úxz, steps=z/txt2imgr    ÚimagesÚinfoz{}r   Úrawr-   éÿÿÿÿu   Forge respondiÃ³: u    imÃ¡genes, seed=)ÚupdateÚloggerr4   Úlenr   r!   r
   r	   r   r   r   ÚappendÚbase64Ú	b64decodeÚ
isinstanceÚstrÚloadsÚJSONDecodeError)r   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   ÚkwargsÚpayloadr   Údatar3   Úimg_b64r4   r   s                      r   Útxt2imgzForgeClient.txt2img   sb  € ð Ø.ØØØØ"Ø(Ø$ØØ"Ø"ØØñ
ˆð 	�‰�vÔä�‰Ð(¬¨V«¨°X¸e¸WÀAÀfÀXÈXÐV[ÐU\Ð]Ô^Ü�M‰M˜TŸ]™]˜O¨8Ð4¸7ÈDÏLÉLÔYˆØ	×ÑÔØ�v‰v‹xˆàˆØ—x‘x ¨"Ö-ˆGØ�M‰Mœ&×*Ñ*¨7Ó3Õ4ð .ð �x‰x˜ Ó%ˆÜ�dœCÔ Ûð%Ø—z‘z $Ó'�ð �x‰x˜ Ó#ˆÜ�‰Ð(¬¨V«¨Ð5FÀtÀfÐMÔNà�tˆ|Ðøð ×'Ñ'ò %Ø˜t�}’ð%ús   Ã?E
 Å
E ÅE c                 óš   — t        |d«      5 }|j                  |«       d d d «       t        j                  d|› �«       |S # 1 sw Y   Œ#xY w)NÚwbzImagen guardada: )ÚopenÚwriter8   r4   )r   Úimage_bytesÚfilepathÚfs       r   Ú
save_imagezForgeClient.save_imageH   sA   € Ü�(˜DÔ! QØ�G‰G�KÔ ÷ "ä�‰Ð'¨ zÐ2Ô3Øˆ÷ "Ð!ús   �AÁA
N)zhttp://127.0.0.1:7860éx   )	Ú i@  iÀ  é   g      @zDPM++ 2M Karrasé   r6   é   )	Ú__name__Ú
__module__Ú__qualname__r   r   r   r#   rE   rM   © r   r   r   r      s.   „ ó/ò
òò
ð
 EIØ6GØ12ó(óTr   r   c                   ó,   — e Zd Z	 	 dd„Zdd„Zd„ Zd„ Zy)ÚVisionClientc                 óL   — |j                  d«      | _        || _        || _        y )Nr   )r   r   Úmodelr	   )r   r   rZ   r	   s       r   r   zVisionClient.__init__P   s   € à—:‘:˜c“?ˆŒØˆŒ
Øˆ�r   Nc                 óÞ  — |€d}| j                   dd|dœddd|› �idœgd	œgd
ddœ}	 t        j                  d«       t        j                  | j
                  › d�|| j                  ¬«      }|j                  «        |j                  «       d   d   d   d   j                  «       }t        j                  d|› �«       |S # t        $ r#}t        j                  d|› d�«       Y d }~yd }~ww xY w)Nux  Analiza detalladamente esta ilustraciÃ³n anime de forma puramente tÃ©cnica y anatÃ³mica.
Busca errores crÃ­ticos: mÃ¡s de 5 dedos en una mano, ojos bizcos o pupilas derretidas, extremidades flotantes o clones deformes en reflejos/espejos.
Responde ESTRICTAMENTE con una sola palabra: 'APROBADO' si el cuerpo es correcto, o 'RECHAZADO' si detectas mutaciones corporales graves.ÚuserÚtext)Útyper]   Ú	image_urlr   zdata:image/png;base64,)r^   r_   )ÚroleÚcontentgš™™™™™¹?éd   )rZ   ÚmessagesÚtemperatureÚ
max_tokensz*Enviando a OVHcloud Vision (Qwen2.5-VL)...z/chat/completionsr    Úchoicesr   Úmessagera   u   Veredicto crÃ­tico: u   Error en crÃ­tico visual: z. Aprobando por defecto.ÚAPROBADO)rZ   r8   r4   r   r!   r   r	   r   r   ÚstripÚ	ExceptionÚwarning)r   Ú	image_b64r%   rB   r   ÚresultÚes          r   ÚanalyzezVisionClient.analyzeV   s  € Øˆ>ðJð ð —Z‘Zð #à!'°Ñ8Ø!,¸EÐE[Ð\eÐ[fÐCgÐ;hÑið ñðð Øñ
ˆð		Ü�K‰KÐDÔEÜ—‘ §¡ 
Ð*;Ð<À7ÐTX×T`ÑT`ÔaˆAØ×ÑÔ Ø—V‘V“X˜iÑ(¨Ñ+¨IÑ6°yÑA×GÑGÓIˆFÜ�K‰KÐ.¨v¨hÐ7Ô8ØˆMøÜò 	Ü�N‰NÐ7¸°sÐ:RÐSÔTÜûð	ús   ¨BC  Ã 	C,Ã	C'Ã'C,c                 ó&   — d|j                  «       v S )Nrh   )Úupper©r   Úverdicts     r   Úis_approvedzVisionClient.is_approvedz   s   € Ø˜WŸ]™]›_Ð,Ð,r   c                 óf   — | j                  |«      ry |j                  dd«      j                  «       S )Nz
RECHAZADO:rO   )rt   Úreplaceri   rr   s     r   Úget_rejection_reasonz!VisionClient.get_rejection_reason}   s-   € Ø×Ñ˜GÔ$ØØ�‰˜|¨RÓ0×6Ñ6Ó8Ð8r   )z0https://oai.endpoints.kepler.ai.cloud.ovh.net/v1zQwen/Qwen2.5-VL-72B-Instructé   )N)rS   rT   rU   r   ro   rt   rw   rV   r   r   rX   rX   O   s   „ ØMØ?Aóó"òH-ó9r   rX   )r   r;   ÚloggingÚ	getLoggerrS   r8   r   rX   rV   r   r   Ú<module>r{      s7   ðÛ Û Û à	ˆ×	Ñ	˜8Ó	$€÷Eñ E÷P19ò 19r   