§
    æ˜ºh÷$  ã                   óÊ   — 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mZ ddl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)ÚExtraÚFieldÚroot_validator©Úget_from_dict_or_env)Ú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<   	  G d„ d¦  «        Z e¦   «         dedefd„¦   «         Z ed¬¦  «        deeef         deeef         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º  Wrapper around 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_sequencesc                   ó    — e Zd ZdZej        ZdS )úEdenAI.Configz'Configuration for this pydantic object.N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚforbidÚextra© ó    úg/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/langchain_community/llms/edenai.pyÚConfigr-   F   s   € € € € € Ø5Ð5à”ˆˆˆr5   r7   ÚvaluesÚreturnc                 ó.   — t          |dd¦  «        |d<   |S )z,Validate that api key exists in environment.r   ÚEDENAI_API_KEYr   )Úclsr8   s     r6   Úvalidate_environmentzEdenAI.validate_environmentK   s)   € õ $8ØÐ$Ð&6ñ$
ô $
ˆÐÑ ð ˆr5   T)Úprec                 óL  — d„ | j                              ¦   «         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 r4   )Úalias)Ú.0Úfields     r6   ú	<setcomp>z%EdenAI.build_extra.<locals>.<setcomp>V   s   € Ð#UÐ#UÐ#U°E E¤KÐ#UÐ#UÐ#Ur5   r*   zFound z supplied twice.zJ was transferred to model_kwargs.
                    Please confirm that z is what you intended.)Ú
__fields__r8   ÚgetÚlistÚ
ValueErrorÚloggerÚwarningÚpop)r<   r8   Úall_required_field_namesr3   Ú
field_names        r6   Úbuild_extrazEdenAI.build_extraS   sâ   € ð $VÐ#U¸S¼^×=RÒ=RÑ=TÔ=TÐ#UÑ#UÔ#UÐ à—
’
˜>¨2Ñ.Ô.ˆÝ˜v™,œ,ð 	;ð 	;ˆJØÐ!9Ð9Ð9Ø Ð&Ð&Ý$Ð%J¨jÐ%JÐ%JÐ%JÑKÔKÐKÝ—’Ø#ð Nð NØ)3ðNð Nð Nñô ð ð %+§J¢J¨zÑ$:Ô$:��jÑ!øØ!&ˆˆ~ÑØˆr5   c                 ó   — dS )zReturn type of model.Úedenair4   )Úselfs    r6   Ú	_llm_typezEdenAI._llm_typee   s	   € ð ˆxr5   Úoutputc                 ó|   — | j         dk    r|| j                 d         S || j                 d         d         d         S )Nr   Úgenerated_textÚitemsr   r   )r   r   )rQ   rS   s     r6   Ú_format_outputzEdenAI._format_outputj   s>   € ØŒ<˜6Ò!Ð!Ø˜$œ-Ô(Ð)9Ô:Ð:à˜$œ-Ô(¨Ô1°!Ô4°WÔ=Ð=r5   c                  ó   — ddl m}  d| › �S )Nr   ©Ú__version__z
langchain/)Úlangchain_communityrZ   rY   s    r6   Úget_user_agentzEdenAI.get_user_agentp   s"   € à3Ð3Ð3Ð3Ð3Ð3à)˜KÐ)Ð)Ð)r5   Ú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 ©Nr4   ©rB   ÚkÚvs      r6   ú
<dictcomp>z EdenAI._call.<locals>.<dictcomp>    ó   € ÐEÐEÐE™D˜A˜q°q°}�1�a°}°}°}r5   Úsettings)Úheaders)ÚurlÚdataéô  úEdenAI Server: Error é�  ú$EdenAI received an invalid payload: éÈ   ú3EdenAI returned an unexpected response with status ú: ÚstatusÚfailÚerrorÚmessage)r+   rH   r   r   r   r   r\   r   r#   r"   r'   r)   rV   r   r   ÚpostÚstatus_codeÚ	Exceptionr   ÚjsonrF   rW   r   )rQ   r]   r^   r_   r`   Ústopsrs   rr   ÚpayloadÚrequestÚresponsert   Úprovider_responseÚerr_msgrS   s                  r6   Ú_callzEdenAI._callv   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àˆr5   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.
        Nrb   rc   rd   re   rg   ri   r   c                 ó   — i | ]
\  }}|®||“ŒS rk   r4   rl   s      r6   ro   z!EdenAI._acall.<locals>.<dictcomp>ì   rp   r5   rq   )rƒ   rr   ru   rv   rw   rx   ry   rz   r{   r|   r}   r~   r   )r+   rH   r   r   r   r   r\   r   r#   r"   r'   r)   rV   r   r   r€   r|   r‚   r   rƒ   rF   rW   r   )rQ   r]   r^   r_   r`   r„   rs   rr   r…   Úsessionr‡   Úresponse_jsonrˆ   r‰   rS   s                  r6   Ú_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)'r.   r/   r0   r1   r   ÚstrÚ__annotations__r   r   r   r   r   r   r   r"   Úfloatr#   Úintr'   Údictr)   r   r   r*   r+   r   r7   r   r=   rN   ÚpropertyrR   rW   Ústaticmethodr\   r
   rŠ   r	   r�   r4   r5   r6   r   r      sb  € € € € € € ð
ð 
ð 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Ô'Ð.Ð.Ñ.Ø ðð ð ð ð ñ ô ð ð
 €^ÑÔð¨$ð °4ð ð ð ñ Ôðð €^˜ÐÑÔð  c¨3 h¤ð °D¸¸c¸´Nð ð ð ñ Ôðð" ð˜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r5   r   )r1   ÚloggingÚtypingr   r   r   r   r   Úaiohttpr   Úlangchain_core.callbacksr	   r
   Ú#langchain_core.language_models.llmsr   Úlangchain_core.pydantic_v1r   r   r   Úlangchain_core.utilsr   Úlangchain_community.llms.utilsr   Ú&langchain_community.utilities.requestsr   Ú	getLoggerr.   rI   r   r4   r5   r6   ú<module>r¡      s0  ðØ -Ð -Ø €€€Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5à !Ð !Ð !Ð !Ð !Ð !ðð ð ð ð ð ð ð ð 4Ð 3Ð 3Ð 3Ð 3Ð 3Ø CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CØ 5Ð 5Ð 5Ð 5Ð 5Ð 5à >Ð >Ð >Ð >Ð >Ð >Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;à	ˆÔ	˜8Ñ	$Ô	$€ðuð uð uð uð uˆSñ uô uð uð uð ur5   