
    dh$                         S r SSKrSSKJrJrJrJrJr  SSKJ	r	  SSK
JrJr  SSKJr  SSKJrJr  SSKJr  SS	KJrJrJr  SS
KJr  SSKJr  \R8                  " \5      r " S S\5      rg)z'Wrapper around EdenAI's Generation API.    N)AnyDictListLiteralOptional)ClientSession)AsyncCallbackManagerForLLMRunCallbackManagerForLLMRun)LLM)get_from_dict_or_envpre_init)
get_fields)
ConfigDictFieldmodel_validator)enforce_stop_tokens)Requestsc                   T   \ rS rSr% SrSr\\S'   Sr\	\   \S'   Sr
\S   \S	'    S
r\S
   \S'    \\S'    Sr\	\   \S'    \" SSSS9r\	\   \S'   \" SSS9r\	\   \S'   Sr\	\S      \S'   \" \S9r\\\4   \S'    \" \S9r\\\4   \S'    Sr\	\\      \S'    \" SS9r\S\S\4S j5       r\" SS 9\ S\\\4   S\4S! j5       5       r!\"S\4S" j5       r#S#\S\4S$ jr$\%S\4S% j5       r&  S-S&\S'\	\\      S(\	\'   S)\S\4
S* jjr(  S-S&\S'\	\\      S(\	\)   S)\S\4
S+ jjr*S,r+g).EdenAI   a  EdenAI models.

To use, you should have
the environment variable ``EDENAI_API_KEY`` set with your API token.
You can find your token here: https://app.edenai.run/admin/account/settings

`feature` and `subfeature` are required, but any other model parameters can also be
passed in with the format params={model_param: value, ...}

for api reference check edenai documentation: http://docs.edenai.co.
zhttps://api.edenai.run/v2base_urlNedenai_api_keytext)r   imagefeature
generation
subfeatureprovidermodelr      )defaultgeletemperature)r!   r"   
max_tokens)256x256512x512	1024x1024
resolution)default_factoryparamsmodel_kwargsstop_sequencesforbid)extravaluesreturnc                 &    [        USS5      US'   U$ )z,Validate that api key exists in environment.r   EDENAI_API_KEY)r   )clsr0   s     W/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/llms/edenai.pyvalidate_environmentEdenAI.validate_environmentL   s$     $8$&6$
      before)modec                 T   [        U 5      R                  5        Vs1 sH  o"R                  iM     nnUR                  S0 5      n[	        U5       HL  nXS;  d  M
  XT;   a  [        SU S35      e[        R                  U SU S35        UR                  U5      XE'   MN     XAS'   U$ s  snf )z>Build extra kwargs from additional params that were passed in.r,   zFound z supplied twice.zJ was transferred to model_kwargs.
                    Please confirm that z is what you intended.)	r   r0   aliasgetlist
ValueErrorloggerwarningpop)r4   r0   fieldall_required_field_namesr/   
field_names         r5   build_extraEdenAI.build_extraT   s     >H_=S=S=U#V=UEKK=U #V

>2.v,J9&$vj\9I%JKK# %))34JN %+JJz$:! ' "'~ $Ws   B%c                     g)zReturn type of model.edenai )selfs    r5   	_llm_typeEdenAI._llm_typeg   s     r8   outputc                 r    U R                   S:X  a  XR                     S   $ XR                     S   S   S   $ )Nr   generated_textitemsr   r   )r   r   )rK   rN   s     r5   _format_outputEdenAI._format_outputl   s=    <<6!--()9::--(1!4W==r8   c                      SSK Jn   SU  3$ )Nr   __version__z
langchain/)langchain_communityrV   rU   s    r5   get_user_agentEdenAI.get_user_agentr   s    3K=))r8   promptstoprun_managerkwargsc                 p   SnU R                   b  Ub  [        S5      eU R                   b  U R                   nOUnU R                   SU R                   SU R                   3nSU R
                   3U R                  5       S.nU R                  UU R                  U R                  U R                  S.U R                  EUESS0EnUR                  5        V	V
s0 sH  u  pU
c  M
  X_M     nn	n
U R                  b  U R                  U R                  0US	'   [        US
9nUR                  XhS9nUR                   S:  a  [#        SUR                    35      eUR                   S:  a  [        SUR$                   35      eUR                   S:w  a%  [#        SUR                    SUR$                   35      eUR'                  5       nXR                     nUR)                  S5      S:X  a,  UR)                  S0 5      R)                  S5      n[#        U5      eU R+                  U5      nUb  [-        UU5      nU$ s  sn
n	f )zCall out to EdenAI's text generation endpoint.

Args:
    prompt: The prompt to pass into the model.

Returns:
    json formatted str response.
N:stop sequences found in both the input and default params./Bearer Authorizationz
User-Agent	providersr   r%   r$   r)   
num_imagesr    settings)headers)urldata  EdenAI Server: Error   $EdenAI received an invalid payload:    3EdenAI returned an unexpected response with status : statusfailerrormessage)r-   r?   r   r   r   r   rX   r   r%   r$   r)   r+   rQ   r   r   poststatus_code	Exceptionr   jsonr=   rR   r   )rK   rZ   r[   r\   r]   stopsri   rh   payloadkvrequestresponserj   provider_responseerr_msgrN   s                    r5   _callEdenAI._callx   sD    *t/?L    ,''EEqa/@A&t':':&;<--/

 //++//	#
 kk	#
 	#
 !	#
 %,MMOEODAq414OE::!#'==$**"=GJ7+<<C<63&3H4H4H3IJKK!!S(CHMM?STT!!S(E''(8==/; 
 }} /  *f4'++GR8<<YGGG$$$$T*(7F; Fs   H2#H2c                   #    SnU R                   b  Ub  [        S5      eU R                   b  U R                   nOUnU R                   SU R                   SU R                   3nSU R
                   3U R                  5       S.nU R                  UU R                  U R                  U R                  S.U R                  EUESS0EnUR                  5        V	V
s0 sH  u  pU
c  M
  X_M     nn	n
U R                  b  U R                  U R                  0US	'   [        5        ISh  vN nUR                  XhUS
9 ISh  vN nUR                   S:  a  [#        SUR                    35      eUR                   S:  a  [        SUR$                   35      eUR                   S:w  a%  [#        SUR                    SUR$                   35      eUR'                  5       I Sh  vN nXR                     nUR)                  S5      S:X  a,  UR)                  S0 5      R)                  S5      n[#        U5      eU R+                  U5      nUb  [-        UU5      nUsSSS5      ISh  vN   sSSS5      ISh  vN   $ s  sn
n	f  GNT GN> N N$ N! , ISh  vN  (       d  f       O= fSSS5      ISh  vN    g! , ISh  vN  (       d  f       g= f7f)a  Call EdenAi model to get predictions based on the prompt.

Args:
    prompt: The prompt to pass into the model.
    stop: A list of stop words (optional).
    run_manager: A callback manager for async interaction with LLMs.

Returns:
    The string generated by the model.
Nr_   r`   ra   rb   rd   rf   r    rg   )ry   rh   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   )r-   r?   r   r   r   r   rX   r   r%   r$   r)   r+   rQ   r   r   rv   rr   rx   r   ry   r=   rR   r   )rK   rZ   r[   r\   r]   rz   ri   rh   r{   r|   r}   sessionr   response_jsonr   r   rN   s                    r5   _acallEdenAI._acall   s    $ *t/?L    ,''EEqa/@A&t':':&;<--/

 //++//	#
 kk	#
 	#
 !	#
 %,MMOEODAq414OE::!#'==$**"=GJ ??g||Cw|GG8??c)#&;HOO;L$MNN__+$>x}}oN  __+#M#??+2hmm_> 
 '/mmo 5$1--$@!$((2f</33GR@DDYOG#G,,,,];$0?F/ HGG #?? F
 #G !6 H #GGG #?????s   CK
I2%I2+9K
$I8%K
(J0=I;>J0BJI>A4JJ0J J0 K
,J-K
;J0>J J0K
J	
JJ	J0K
)J,*K
0K6J97KK
rJ   )NN),__name__
__module____qualname____firstlineno____doc__r   str__annotations__r   r   r   r   r   r   r   r$   floatr%   intr)   dictr+   r   r   r,   r-   r   r   model_configr   r6   r   classmethodrF   propertyrL   rR   staticmethodrX   r
   r   r	   r   __static_attributes__rJ   r8   r5   r   r      sK   
 0Hc/$(NHSM((.GW_%.>(4J%4@MPE8C= $)!#BK%B %dq 9J9GKJ!BCDK"48FDcN8
 $)#>L$sCx.>*.NHT#Y'. L $ 4   (#c3h C   $" 3  >T >c > *C * * %):>	GG tCy!G 67	G
 G 
GX %)?C	JJ tCy!J ;<	J
 J 
J Jr8   r   ) r   loggingtypingr   r   r   r   r   aiohttpr   langchain_core.callbacksr	   r
   #langchain_core.language_models.llmsr   langchain_core.utilsr   r   langchain_core.utils.pydanticr   pydanticr   r   r   langchain_community.llms.utilsr   &langchain_community.utilities.requestsr   	getLoggerr   r@   r   rJ   r8   r5   <module>r      sN    -  5 5 ! 4 ? 4 7 7 > ;			8	$uS ur8   