§
    šŠtjø$  ã                   óÚ   — d Z ddlZddlmZmZmZmZmZ ddlm	Z	 ddl
mZmZ ddlmZ ddlmZmZ ddlmZ dd	l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dS )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                   ó  — e Zd ZU dZdZeed<   dZee         ed<   dZ	e
d         ed<   	 d	Ze
d	         ed
<   	 eed<   	 dZee         ed<   	  eddd¬¦  «        Zee         ed<    edd¬¦  «        Zee         ed<   dZee
d                  ed<    ee¬¦  «        Zeeef         ed<   	  ee¬¦  «        Zeeef         ed<   	 dZeee                  ed<   	  ed¬¦  «        Zededefd„¦   «         Z ed¬¦  «        edeeef         defd „¦   «         ¦   «         Z e!defd!„¦   «         Z"d"edefd#„Z#e$defd$„¦   «         Z%	 	 d+d%ed&eee                  d'ee&         d(edef
d)„Z'	 	 d+d%ed&eee                  d'ee(         d(edef
d*„Z)dS ),ÚEdenAIa«  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                 ó.   — t          |dd¦  «        |d<   |S )z,Validate that api key exists in environment.r   ÚEDENAI_API_KEY)r   )Úclsr/   s     ú]/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/llms/edenai.pyÚvalidate_environmentzEdenAI.validate_environmentL   s)   € õ $8ØÐ$Ð&6ñ$
ô $
ˆÐÑ ð ˆó    Úbefore)Úmodec                 ó\  — d„ t          | ¦  «                             ¦   «         D ¦   «         }|                     di ¦  «        }t          |¦  «        D ]U}||vrO||v rt	          d|› d�¦  «        ‚t
                               |› d|› d�¦  «         |                     |¦  «        ||<   ŒV||d<   |S )z>Build extra kwargs from additional params that were passed in.c                 ó   — h | ]	}|j         ’Œ
S © )Úalias)Ú.0Úfields     r4   ú	<setcomp>z%EdenAI.build_extra.<locals>.<setcomp>X   s   € Ð#VÐ#VÐ#V°E E¤KÐ#VÐ#VÐ#Vr6   r+   zFound z supplied twice.zJ was transferred to model_kwargs.
                    Please confirm that z is what you intended.)r   r/   ÚgetÚlistÚ
ValueErrorÚloggerÚwarningÚpop)r3   r/   Úall_required_field_namesr.   Ú
field_names        r4   Úbuild_extrazEdenAI.build_extraT   sæ   € ð $WÐ#V½ZÈ¹_¼_×=SÒ=SÑ=UÔ=UÐ#VÑ#VÔ#VÐ à—
’
˜>¨2Ñ.Ô.ˆÝ˜v™,œ,ð 	;ð 	;ˆJØÐ!9Ð9Ð9Ø Ð&Ð&Ý$Ð%J¨jÐ%JÐ%JÐ%JÑKÔKÐKÝ—’Ø#ð Nð NØ)3ðNð Nð Nñô ð ð %+§J¢J¨zÑ$:Ô$:��jÑ!øØ!&ˆˆ~ÑØˆr6   c                 ó   — dS )zReturn type of model.Úedenair;   )Úselfs    r4   Ú	_llm_typezEdenAI._llm_typeg   s	   € ð ˆxr6   Úoutputc                 ó|   — | j         dk    r|| j                 d         S || j                 d         d         d         S )Nr   Úgenerated_textÚitemsr   r   )r   r   )rK   rM   s     r4   Ú_format_outputzEdenAI._format_outputl   s>   € ØŒ<˜6Ò!Ð!Ø˜$œ-Ô(Ð)9Ô:Ð:à˜$œ-Ô(¨Ô1°!Ô4°WÔ=Ð=r6   c                  ó   — ddl m}  d| › �S )Nr   ©Ú__version__z
langchain/)Úlangchain_communityrT   rS   s    r4   Úget_user_agentzEdenAI.get_user_agentr   s"   € à3Ð3Ð3Ð3Ð3Ð3à)˜KÐ)Ð)Ð)r6   ÚpromptÚstopÚrun_managerÚkwargsc                 óæ  — d}| j         �|�t          d¦  «        ‚| j         �| j         }n|}| j        › d| j        › d| j        › �}d| j        › �|                      ¦   «         dœ}| j        || j        | j	        | j
        dœ| j        ¥|¥ddi¥}d	„ |                     ¦   «         D ¦   «         }| j        �| j        | j        i|d
<   t          |¬¦  «        }	|	                     ||¬¦  «        }
|
j        dk    rt#          d|
j        › �¦  «        ‚|
j        dk    rt          d|
j        › �¦  «        ‚|
j        dk    rt#          d|
j        › d|
j        › �¦  «        ‚|
                     ¦   «         }|| j                 }|                     d¦  «        dk    r8|                     di ¦  «                             d¦  «        }t#          |¦  «        ‚|                      |¦  «        }|�t-          ||¦  «        }|S )z¸Call 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   c                 ó   — i | ]
\  }}|®||“ŒS ©Nr;   ©r=   ÚkÚvs      r4   ú
<dictcomp>z EdenAI._call.<locals>.<dictcomp>¢   ó   € ÐEÐEÐE™D˜A˜q°q°}�1�a°}°}°}r6   Úsettings)Úheaders)ÚurlÚdataéô  úEdenAI Server: Error é�  ú$EdenAI received an invalid payload: éÈ   ú3EdenAI returned an unexpected response with status ú: ÚstatusÚfailÚerrorÚmessage)r,   rB   r   r   r   r   rV   r   r$   r#   r(   r*   rP   r   r   ÚpostÚstatus_codeÚ	Exceptionr   Újsonr@   rQ   r   )rK   rW   rX   rY   rZ   Ústopsrm   rl   ÚpayloadÚrequestÚresponsern   Úprovider_responseÚerr_msgrM   s                  r4   Ú_callzEdenAI._callx   sa  € ð ˆØÔÐ*¨tÐ/?ÝØLñô ð ð Ô Ð,ØÔ'ˆEˆEàˆEà”ÐAÐA ¤ÐAÐA°´ÐAÐAˆà< tÔ':Ð<Ð<Ø×-Ò-Ñ/Ô/ð
ð 
ˆð
 œØØœ/ØÔ+Øœ/ð	#
ð 	#
ð Œkð	#
ð ð	#
ð ˜!ð	#
ð 	#
ˆð FÐE G§M¢M¡O¤OÐEÑEÔEˆàŒ:Ð!Ø#'¤=°$´*Ð"=ˆG�JÑå 7Ð+Ñ+Ô+ˆØ—<’< C¨g�<Ñ6Ô6ˆàÔ 3Ò&Ð&ÝÐJ°HÔ4HÐJÐJÑKÔKÐKØÔ! SÒ(Ð(ÝÐSÀHÄMÐSÐSÑTÔTÐTØÔ! SÒ(Ð(Ýð;ØÔ'ð;ð ;Ø+3¬=ð;ð ;ñô ð ð
 �}Š}‰ŒˆØ  ¤Ô/ÐØ× Ò  Ñ*Ô*¨fÒ4Ð4Ø'×+Ò+¨G°RÑ8Ô8×<Ò<¸YÑGÔGˆGÝ˜GÑ$Ô$Ð$à×$Ò$ TÑ*Ô*ˆàÐÝ(¨°Ñ7Ô7ˆFàˆr6   c              ‹   óÈ  K  — d}| j         �|�t          d¦  «        ‚| j         �| j         }n|}| j        › d| j        › d| j        › �}d| j        › �|                      ¦   «         dœ}| j        || j        | j	        | j
        dœ| j        ¥|¥ddi¥}d	„ |                     ¦   «         D ¦   «         }| j        �| j        | j        i|d
<   t          ¦   «         4 ƒd{V —†}	|	                     |||¬¦  «        4 ƒd{V —†}
|
j        dk    rt#          d|
j        › �¦  «        ‚|
j        dk    rt          d|
j        › �¦  «        ‚|
j        dk    rt#          d|
j        › d|
j        › �¦  «        ‚|
                     ¦   «         ƒ d{V —†}|| j                 }|                     d¦  «        dk    r8|                     di ¦  «                             d¦  «        }t#          |¦  «        ‚|                      |¦  «        }|�t-          ||¦  «        }|cddd¦  «        ƒd{V —† cddd¦  «        ƒd{V —† S # 1 ƒd{V —†swxY w Y   	 ddd¦  «        ƒd{V —† dS # 1 ƒd{V —†swxY w Y   dS )aI  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]   r^   r_   ra   rc   r   c                 ó   — i | ]
\  }}|®||“ŒS re   r;   rf   s      r4   ri   z!EdenAI._acall.<locals>.<dictcomp>î   rj   r6   rk   )r}   rl   ro   rp   rq   rr   rs   rt   ru   rv   rw   rx   ry   )r,   rB   r   r   r   r   rV   r   r$   r#   r(   r*   rP   r   r   rz   rv   r|   r   r}   r@   rQ   r   )rK   rW   rX   rY   rZ   r~   rm   rl   r   Úsessionr�   Úresponse_jsonr‚   rƒ   rM   s                  r4   Ú_acallzEdenAI._acallÁ   s'  è è € ð$ ˆØÔÐ*¨tÐ/?ÝØLñô ð ð Ô Ð,ØÔ'ˆEˆEàˆEà”ÐAÐA ¤ÐAÐA°´ÐAÐAˆà< tÔ':Ð<Ð<Ø×-Ò-Ñ/Ô/ð
ð 
ˆð
 œØØœ/ØÔ+Øœ/ð	#
ð 	#
ð Œkð	#
ð ð	#
ð ˜!ð	#
ð 	#
ˆð FÐE G§M¢M¡O¤OÐEÑEÔEˆàŒ:Ð!Ø#'¤=°$´*Ð"=ˆG�JÑå ‘?”?ð 	ð 	ð 	ð 	ð 	ð 	ð 	 gØ—|’| C¨g¸w�|ÑGÔGð ð ð ð ð ð ð È8Ø”? cÒ)Ð)Ý#Ð$M¸H¼OÐ$MÐ$MÑNÔNÐNØ”_¨Ò+Ð+Ý$ØN¸x¼}ÐNÐNñô ð ð ”_¨Ò+Ð+Ý#ð>Ø#œ?ð>ð >Ø.6¬mð>ð >ñô ð ð
 '/§m¢m¡o¤oÐ 5Ð 5Ð 5Ð 5Ð 5Ð 5�Ø$1°$´-Ô$@Ð!Ø$×(Ò(¨Ñ2Ô2°fÒ<Ð<Ø/×3Ò3°G¸RÑ@Ô@×DÒDÀYÑOÔO�GÝ# GÑ,Ô,Ð,à×,Ò,¨]Ñ;Ô;�ØÐ$Ý0°¸Ñ?Ô?�Fàð/ð ð ð ñ ô ð ð ð ð ð ð ð ð	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ðð ð ð ð ð ð ð ð ð øøøð ð ð ð ð ð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s7   ÃIÃ8DH,ÈIÈ,
H6	È6IÈ9H6	È:IÉ
IÉI)NN)*Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚstrÚ__annotations__r   r   r   r   r   r   r   r#   Úfloatr$   Úintr(   Údictr*   r   r   r+   r,   r   r   Úmodel_configr   r5   r   ÚclassmethodrH   ÚpropertyrL   rQ   ÚstaticmethodrV   r
   r„   r	   r‰   r;   r6   r4   r   r      sL  € € € € € € ð
ð 
ð 0€HˆcÐ/Ð/Ñ/à$(€N�H˜S”MÐ(Ð(Ñ(à(.€GˆW�_Ô%Ð.Ð.Ñ.Ø>à(4€J�˜Ô%Ð4Ð4Ñ4Ø@à€M€M�MØPà€Eˆ8�CŒ=ÐÐÑðð $) 5°¸!ÀÐ#BÑ#BÔ#B€K�˜%”ÐBÐBÑBØ % ¨d°qÐ 9Ñ 9Ô 9€J�˜”Ð9Ð9Ñ9ØGK€J�˜Ð!BÔCÔDÐKÐKÑKà"˜U°4Ð8Ñ8Ô8€FˆD��c�ŒNÐ8Ð8Ñ8ðð
 $) 5¸Ð#>Ñ#>Ô#>€L�$�s˜C�x”.Ð>Ð>Ñ>Øà*.€N�H˜T #œYÔ'Ð.Ð.Ñ.Ø à�:Øðñ ô €Lð ð¨$ð °4ð ð ð ñ „Xðð €_˜(Ð#Ñ#Ô#Øð  c¨3 h¤ð °Cð ð ð ñ „[ñ $Ô#ðð" ð˜3ð ð ð ñ „Xðð> Tð >¨cð >ð >ð >ð >ð ð*˜Cð *ð *ð *ñ „\ð*ð %)Ø:>ð	Gð GàðGð �t˜C”yÔ!ðGð Ð6Ô7ð	Gð
 ðGð 
ðGð Gð Gð GðX %)Ø?Cð	Jð JàðJð �t˜C”yÔ!ðJð Ð;Ô<ð	Jð
 ðJð 
ðJð Jð Jð Jð Jð Jr6   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Š   rC   r   r;   r6   r4   ú<module>r¢      sH  ðØ -Ð -à €€€Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5à !Ð !Ð !Ð !Ð !Ð !ðð ð ð ð ð ð ð ð 4Ð 3Ð 3Ð 3Ð 3Ð 3Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7à >Ð >Ð >Ð >Ð >Ð >Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;à	ˆÔ	˜8Ñ	$Ô	$€ðuð uð uð uð uˆSñ uô uð uð uð ur6   