Ë
    «Oj§  ã                   óp   — d Z ddlZddlZddlmZ ddlZddlmZ  ej                  e	«      Z
 G d„ d«      Zy)z8GPT Image 2 blog image generation via OpenAI Images API.é    N)ÚAny)Úsettingsc                   ón  — e Zd ZdZdZdZdZdZdZdZ	e
defd	„«       Ze
defd
„«       Ze
deeef   fd„«       Ze
dedefd„«       Ze
deeef   defd„«       Ze
dej*                  defd„«       Ze
dddœdededz  dedz  deeef   fd„«       Ze
ddededeeef   fd„«       Ze
dedeeef   fd„«       Zy)ÚOpenAIImageClientz;OpenAI Images API client for blog header and inline images.z,https://api.openai.com/v1/images/generationszgpt-image-2Ú	1536x1024Úhighi,  zno text, no labels, no words, no letters, no numbers, no watermarks, no captions, no logos, no signs, no writing, no typographyÚreturnc                 ó¢   — t        t        dd «      xs dj                  «       j                  d«      j                  d«      }|st        d«      ‚|S )NÚOPENAI_API_KEYÚ Ú"Ú'zOPENAI_API_KEY not configured)Úgetattrr   ÚstripÚRuntimeError)ÚclsÚkeys     úH/var/www/html/shopify_to_digistore/blogs/services/openai_image_client.pyÚ_api_keyzOpenAIImageClient._api_key   sJ   € ä”xÐ!1°4Ó8Ò>¸B×EÑEÓG×MÑMÈcÓR×XÑXÐY\Ó]ˆÙÜÐ>Ó?Ð?Øˆ
ó    c                 óx   — t        t        dd «      xs | j                  j                  «       xs | j                  S )NÚOPENAI_IMAGE_MODEL)r   r   ÚDEFAULT_MODELr   ©r   s    r   Ú_modelzOpenAIImageClient._model"   s2   € äœÐ"6¸Ó=ÒRÀ×ARÑAR×YÑYÓ[ÒpÐ_b×_pÑ_pÐpr   c                 ó.   — d| j                  «       › �ddœS )NzBearer zapplication/json)ÚAuthorizationzContent-Type)r   r   s    r   Ú_headerszOpenAIImageClient._headers&   s"   € ð  ' s§|¡|£~Ð&6Ð7Ø.ñ
ð 	
r   Úpromptc                 ó@   — |j                  «       › d| j                  › �S )Nú. )r   ÚNO_TEXT_SUFFIX)r   r   s     r   Ú_finalize_promptz"OpenAIImageClient._finalize_prompt-   s!   € à—,‘,“.Ð!  C×$6Ñ$6Ð#7Ð8Ð8r   Úitemc                 óô   — |j                  d«      x}rt        j                  |«      S |j                  d«      x}r3t        j                   |d¬«      }|j	                  «        |j
                  S t        d«      ‚)NÚb64_jsonÚurléx   )Útimeoutz,OpenAI image API returned no url or b64_json)ÚgetÚbase64Ú	b64decodeÚrequestsÚraise_for_statusÚcontentr   )r   r$   Úb64r'   Úresps        r   Ú_image_bytes_from_responsez,OpenAIImageClient._image_bytes_from_response1   sl   € à—(‘(˜:Ó&Ð&ˆ3Ð&Ü×#Ñ# CÓ(Ð(Ø—(‘(˜5“/Ð!ˆ3Ð!Ü—<‘< ¨SÔ1ˆDØ×!Ñ!Ô#Ø—<‘<ÐÜÐIÓJÐJr   r1   c                 óÊ   — 	 |j                  «       j                  d«      xs i }|j                  d«      xs |j                  d d S # t        $ r |j                  d d cY S w xY w)NÚerrorÚmessageiô  )Újsonr*   ÚtextÚ	Exception)r   r1   Úerrs      r   Ú_api_error_messagez$OpenAIImageClient._api_error_message;   s]   € ð	#Ø—)‘)“+—/‘/ 'Ó*Ò0¨bˆCØ—7‘7˜9Ó%Ò8¨¯©°4°C¨Ð8øÜò 	#Ø—9‘9˜T˜c�?Ò"ð	#ús   ‚AA ÁA"Á!A"N)ÚsizeÚqualityr;   r<   c          
      ó@  — | j                  |«      }t        j                  | j                  | j	                  «       | j                  «       ||xs | j                  |xs | j                  ddœ| j                  ¬«      }|j                  dk\  rM| j                  |«      }t        j                  d|j                  |«       t        d|j                  › d|› �«      ‚|j                  «       j                  d«      xs g }|st        d	«      ‚| j!                  |d
   «      |dœS )Né   )Úmodelr   r;   r<   Ún)Úheadersr6   r)   i�  zOpenAI image API error %s: %szOpenAI image API error (z): Údataz$OpenAI image API returned empty datar   )Úimage_bytesÚprompt_used)r#   r-   ÚpostÚ
IMAGES_URLr   r   ÚDEFAULT_SIZEÚDEFAULT_QUALITYÚREQUEST_TIMEOUTÚstatus_coder:   Úloggerr4   r   r6   r*   r2   )r   r   r;   r<   Úfinal_promptr1   ÚmsgrB   s           r   ÚgeneratezOpenAIImageClient.generateC   s  € ð ×+Ñ+¨FÓ3ˆÜ�}‰}Ø�N‰NØ—L‘L“NàŸ™›Ø&ØÒ0 × 0Ñ 0Ø"Ò9 c×&9Ñ&9Øñð ×'Ñ'ô
ˆð ×Ñ˜sÒ"Ø×(Ñ(¨Ó.ˆCÜ�L‰LÐ8¸$×:JÑ:JÈCÔPÜÐ!9¸$×:JÑ:JÐ9KÈ3ÈsÈeÐTÓUÐUà%)§Y¡Y£[§_¡_°VÓ%<Ò%BÀˆÙÜÐEÓFÐFð ×9Ñ9¸$¸q¹'ÓBØ'ñ
ð 	
r   ÚtopicÚnichec                 óJ   — |rd|› d�nd}d|› d|› d�}| j                  |«      S )NzRelated to r!   r   z%Professional blog header image about z$Clean modern aesthetic, wide banner.©rN   )r   rO   rP   Úniche_clauser   s        r   Úgenerate_headerz!OpenAIImageClient.generate_headerf   s@   € á27˜ U G¨2Ñ.¸Rˆà3°E°7¸"ØˆnØ2ð3ð 	ð
 �|‰|˜FÓ#Ð#r   Údescriptionc                 ó*   — | j                  |› d�«      S )Nz). Professional high quality illustration.rR   )r   rU   s     r   Úgenerate_inlinez!OpenAIImageClient.generate_inlinep   s   € à�|‰|˜{˜mÐ+TÐUÓVÐVr   )r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__rF   r   rG   rH   rI   r"   ÚclassmethodÚstrr   r   Údictr   r#   r   Úbytesr2   r-   ÚResponser:   rN   rT   rW   © r   r   r   r      s¯  „ ÙEà?€JØ!€MØ€LØ€OØ€Oð	Eð ð
 ð˜ò ó ðð ðq�sò qó ðqð ð
˜˜c 3˜h™ò 
ó ð
ð ð9 cð 9¨cò 9ó ð9ð ðK¨d°3¸°8©nð KÀò Kó ðKð ð# h×&7Ñ&7ð #¸Cò #ó ð#ð ð
  Ø"ò 
àð 
ð �D‰jð	 
ð
 �t‘ð 
ð 
ˆc�3ˆh‰ò 
ó ð 
ðD ñ$ Cð $°ð $¸TÀ#ÀsÀ(¹^ò $ó ð$ð ðW¨#ð W°$°s¸C°x±.ò Wó ñWr   r   )r[   r+   ÚloggingÚtypingr   r-   Údjango.confr   Ú	getLoggerrX   rK   r   ra   r   r   Ú<module>rf      s7   ðÙ >ã Û Ý ã Ý  à	ˆ×	Ñ	˜8Ó	$€÷eWò eWr   