
    3fi                         d Z ddlZddlmZmZmZmZmZmZ ddl	m
Z
mZmZ ddlmZmZmZmZmZ ddlmZ ddlmZ  ej.                  e      Z G d d	e      Zy)
z3Utility that calls OpenAI's Dall-E Image Generator.    N)AnyDictMappingOptionalTupleUnion)from_envget_pydantic_field_namessecret_from_env)	BaseModel
ConfigDictField	SecretStrmodel_validator)Self)is_openai_v1c                      e Zd ZU dZdZeed<    edd      Zeed<    edd	      Z	e
ed
<    ee      Zee
ef   ed<    ed edd            Zee   ed<   	  ed edd            Zee
   ed<   	  ed eddgd            Zee
   ed<   	  e edd            Ze
ed<    edd	      Zeeeeef   edf   ed<   dZeed<   	 d Ze
ed!<   	 d"Ze
ed#<   	 dZee
   ed$<   	 d%Zeed&<   	 dZ ee!e
e
f   df   ed'<   dZ"ee!e
e#f   df   ed(<   dZ$eedf   ed)<   	  e%d*d+,      Z& e'd-.      e(d/ee
ef   d0efd1              Z) e'd2.      d0e*fd3       Z+d4e
d0e
fd5Z,y)6DallEAPIWrapperzWrapper for OpenAI's DALL-E Image Generator.

    https://platform.openai.com/docs/guides/images/generations?context=node

    Usage instructions:

    1. `pip install openai`
    2. save your OPENAI_API_KEY in an environment variable
    NclientT)defaultexcludeasync_clientzdall-e-2model)r   alias
model_name)default_factorymodel_kwargsapi_keyOPENAI_API_KEY)r   )r   r   openai_api_keybase_urlOPENAI_API_BASEopenai_api_baseorganizationOPENAI_ORG_IDOPENAI_ORGANIZATIONopenai_organizationOPENAI_PROXY openai_proxytimeoutrequest_timeout   n	1024x1024size
	separatorquality   max_retriesdefault_headersdefault_queryhttp_clientforbid )extraprotected_namespacesbefore)modevaluesreturnc           
      `   t        |       }|j                  di       }t        |      D ]M  }||v rt        d| d      ||vst        j                  d| d| d| d       |j                  |      ||<   O |j                  |j                               }|rt        d| d	      ||d<   |S )
z>Build extra kwargs from additional params that were passed in.r   zFound z supplied twice.z	WARNING! z/ is not default parameter.
                    zJ was transferred to model_kwargs.
                    Please confirm that z is what you intended.zParameters za should be specified explicitly. Instead they were passed in as part of `model_kwargs` parameter.)	r
   getlist
ValueErrorloggerwarningpopintersectionkeys)clsr?   all_required_field_namesr;   
field_nameinvalid_model_kwargss         q/var/www/auto_recruiter/arenv/lib/python3.12/site-packages/langchain_community/utilities/dalle_image_generator.pybuild_extrazDallEAPIWrapper.build_extraN   s     $<C#@ 

>2.v, 		;JU" 6*5E!FGG!99!* .L !))34JN
 %+JJz$:j!		;  8DDUZZ\R23 4S T 
 "'~    afterc           	      :   	 ddl }t               r| j                  r| j                  j	                         nd| j
                  | j                  | j                  | j                  | j                  | j                  | j                  d}| j                  s! |j                  di |j                  | _        | j                  s! |j                   di |j                  | _        | S | j                  s|j"                  | _        | S 	 | S # t        $ r t        d      w xY w)z?Validate that api key and python package exists in environment.r   NzTCould not import openai python package. Please install it with `pip install openai`.)r   r$   r!   r+   r5   r6   r7   r8   r:   )openaiImportErrorr   r    get_secret_valuer'   r#   r,   r5   r6   r7   r8   r   OpenAIimagesr   AsyncOpenAIImage)selfrS   client_paramss      rN   validate_environmentz$DallEAPIWrapper.validate_environmenti   s   	 > &&  ..??A $ 8 8 00//#//#'#7#7!%!3!3#//M ;;+fmm<m<CC$$$6F$6$6$G$G$N$N!
 	  ,,DK  9  	? 	s   D Dqueryc                 B   t               r|| j                  | j                  | j                  d}| j                  | j                  |d<    | j
                  j                  di |}| j                  j                  |j                  D cg c]  }|j                   c}      }nl| j
                  j                  || j                  | j                  | j                        }| j                  j                  |d   D cg c]  }|d   	 c}      }|r|S dS c c}w c c}w )z*Run query through OpenAI and parse result.)promptr.   r0   r   r3   dataurlzNo image was generatedr:   )r   r.   r0   r   r3   r   generater2   joinr`   ra   create)rZ   r]   kwargsresponseitem
image_urlss         rN   runzDallEAPIWrapper.run   s    >VV			F ||'$(LLy!+t{{++5f5H,,8==-Q4dhh-QRJ{{))TYYdoo * H ,,hvFV-Wdd5k-WXJ'zE-EE .R
 .Xs   
D>D)-__name__
__module____qualname____doc__r   r   __annotations__r   r   r   strdictr   r   r   r    r   r   r	   r#   r'   r*   r,   r   floatr   r.   intr0   r2   r3   r5   r6   r   r7   objectr8   r   model_configr   classmethodrO   r   r\   ri   r:   rP   rN   r   r      s&    FCdD9L#9Jg>J>#(#>L$sCx.>*/'
+NHY'  P%*(3Dd*S&OXc] ). 34d
*#  Oh~r.RSL#SDIIEOU5%u"5sD@A  AsJ&D##Is;!GXc]!5K<6:OU738,d23:7;M5f-t34; %)KsDy!( H2FL(#c3h C   $2 '"!d ! #!FF F FrP   r   )rm   loggingtypingr   r   r   r   r   r   langchain_core.utilsr	   r
   r   pydanticr   r   r   r   r   typing_extensionsr    langchain_community.utils.openair   	getLoggerrj   rE   r   r:   rP   rN   <module>r}      sL    9  = = 
 N M " 9			8	$MFi MFrP   