Ë
    µŒjø$  ã                   óÖ   — 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j8                  e«      Z G d„ de«      Zy)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)y),Ú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     úi/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/llms/edenai.pyÚvalidate_environmentzEdenAI.validate_environmentL   s$   € ô $8ØÐ$Ð&6ó$
ˆÐÑ ð ˆó    Úbefore)Úmodec                 óL  — t        | «      j                  «       D �ch c]  }|j                  ’Œ }}|j                  di «      }t	        |«      D ]I  }||vsŒ||v rt        d|› d�«      ‚t        j                  |› d|› d�«       |j                  |«      ||<   ŒK ||d<   |S c c}w )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   r/   ÚaliasÚgetÚlistÚ
ValueErrorÚloggerÚwarningÚpop)r3   r/   ÚfieldÚall_required_field_namesr.   Ú
field_names         r4   Úbuild_extrazEdenAI.build_extraT   sÁ   € ô >HÈ»_×=SÑ=SÔ=UÓ#VÑ=U°E E§K£KÐ=UÐ Ð#Và—
‘
˜>¨2Ó.ˆÜ˜vž,ˆJØÐ!9Ò9Ø Ñ&Ü$ v¨j¨\Ð9IÐ%JÓKÐKÜ—‘Ø#˜ð %)Ø)3¨Ð4JðNôð %+§J¡J¨zÓ$:��jÒ!ð 'ð "'ˆˆ~ÑØˆùò $Ws   œB!c                  ó   — y)zReturn type of model.Úedenai© )Úselfs    r4   Ú	_llm_typezEdenAI._llm_typeg   s   € ð r6   Úoutputc                 ót   — | j                   dk(  r|| j                     d   S || j                     d   d   d   S )Nr   Úgenerated_textÚitemsr   r   )r   r   )rH   rJ   s     r4   Ú_format_outputzEdenAI._format_outputl   sA   € Ø�<‰<˜6Ò!Ø˜$Ÿ-™-Ñ(Ð)9Ñ:Ð:à˜$Ÿ-™-Ñ(¨Ñ1°!Ñ4°WÑ=Ð=r6   c                  ó   — ddl m}  d| › �S )Nr   ©Ú__version__z
langchain/)Úlangchain_communityrQ   rP   s    r4   Úget_user_agentzEdenAI.get_user_agentr   s   € å3à˜K˜=Ð)Ð)r6   ÚpromptÚstopÚrun_managerÚkwargsc                 ój  — d}| j                   �|�t        d«      ‚| j                   �| j                   }n|}| j                  › d| j                  › d| j                  › �}d| j
                  › �| j                  «       dœ}| j                  || j                  | j                  | j                  dœ| j                  ¥|¥ddi¥}|j                  «       D �	�
ci c]  \  }	}
|
€Œ	|	|
“Œ }}	}
| j                  �| j                  | j                  i|d	<   t        |¬
«      }|j                  ||¬«      }|j                   dk\  rt#        d|j                   › �«      ‚|j                   dk\  rt        d|j$                  › �«      ‚|j                   dk7  r%t#        d|j                   › d|j$                  › �«      ‚|j'                  «       }|| j                     }|j)                  d«      dk(  r,|j)                  di «      j)                  d«      }t#        |«      ‚| j+                  |«      }|�t-        ||«      }|S c c}
}	w )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   Ú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   rS   r   r$   r#   r(   r*   rM   r   r   ÚpostÚstatus_codeÚ	Exceptionr   Újsonr;   rN   r   )rH   rT   rU   rV   rW   Ústopsrc   rb   ÚpayloadÚkÚvÚrequestÚresponserd   Úprovider_responseÚerr_msgrJ   s                    r4   Ú_callzEdenAI._callx   sL  € ð ˆØ×ÑÐ*¨tÐ/?ÜØLóð ð × Ñ Ð,Ø×'Ñ'‰EàˆEà—‘�˜q §¡ ¨a°·±Ð/@ÐAˆà& t×':Ñ':Ð&;Ð<Ø×-Ñ-Ó/ñ
ˆð
 Ÿ™ØØŸ/™/Ø×+Ñ+ØŸ/™/ñ	#
ð �k‰kð	#
ð ð	#
ð ˜!ñ	#
ˆð %,§M¡M¤OÔE¡O™D˜A˜q°q±}�1�a‘4 OˆÑEà�:‰:Ð!Ø#'§=¡=°$·*±*Ð"=ˆG�JÑä 7Ô+ˆØ—<‘< C¨g�<Ó6ˆà×Ñ 3Ò&ÜÐ3°H×4HÑ4HÐ3IÐJÓKÐKØ×!Ñ! SÒ(ÜÐCÀHÇMÁMÀ?ÐSÓTÐTØ×!Ñ! SÒ(ÜØEØ×'Ñ'Ð(¨¨8¯=©=¨/ð;óð ð
 �}‰}‹ˆØ  §¡Ñ/ÐØ× Ñ  Ó*¨fÒ4Ø'×+Ñ+¨G°RÓ8×<Ñ<¸YÓGˆGÜ˜GÓ$Ð$à×$Ñ$ TÓ*ˆàÐÜ(¨°Ó7ˆFàˆùó; Fs   Ã
H/ÃH/c              ‹   óx  K  — d}| j                   �|�t        d«      ‚| j                   �| j                   }n|}| j                  › d| j                  › d| j                  › �}d| j
                  › �| j                  «       dœ}| j                  || j                  | j                  | j                  dœ| j                  ¥|¥ddi¥}|j                  «       D �	�
ci c]  \  }	}
|
€Œ	|	|
“Œ }}	}
| j                  �| j                  | j                  i|d	<   t        «       4 ƒd{  –—† }|j                  |||¬
«      4 ƒd{  –—† }|j                   dk\  rt#        d|j                   › �«      ‚|j                   dk\  rt        d|j$                  › �«      ‚|j                   dk7  r%t#        d|j                   › d|j$                  › �«      ‚|j'                  «       ƒ d{  –—† }|| j                     }|j)                  d«      dk(  r,|j)                  di «      j)                  d«      }t#        |«      ‚| j+                  |«      }|�t-        ||«      }|cddd«      ƒd{  –—†  cddd«      ƒd{  –—†  S c c}
}	w 7 �ŒT7 �Œ:7 Œ¢7 Œ$7 Œ# 1 ƒd{  –—†7  sw Y   nxY wddd«      ƒd{  –—†7   y# 1 ƒd{  –—†7  sw Y   yxY w­w)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.
        NrY   rZ   r[   r\   r^   r`   r   ra   )rs   rb   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   )r,   r=   r   r   r   r   rS   r   r$   r#   r(   r*   rM   r   r   rp   rl   rr   r   rs   r;   rN   r   )rH   rT   rU   rV   rW   rt   rc   rb   ru   rv   rw   Úsessionry   Úresponse_jsonrz   r{   rJ   s                    r4   Ú_acallzEdenAI._acallÁ   sš  è ø€ ð$ ˆØ×ÑÐ*¨tÐ/?ÜØLóð ð × Ñ Ð,Ø×'Ñ'‰EàˆEà—‘�˜q §¡ ¨a°·±Ð/@ÐAˆà& t×':Ñ':Ð&;Ð<Ø×-Ñ-Ó/ñ
ˆð
 Ÿ™ØØŸ/™/Ø×+Ñ+ØŸ/™/ñ	#
ð �k‰kð	#
ð ð	#
ð ˜!ñ	#
ˆð %,§M¡M¤OÔE¡O™D˜A˜q°q±}�1�a‘4 OˆÑEà�:‰:Ð!Ø#'§=¡=°$·*±*Ð"=ˆG�JÑä —?”? gØ—|‘| C¨g¸w�|×GÔGÈ8Ø—?‘? cÒ)Ü#Ð&;¸H¿O¹OÐ;LÐ$MÓNÐNØ—_‘_¨Ò+Ü$Ø>¸x¿}¹}¸oÐNóð ð —_‘_¨Ò+Ü#ØMØ#Ÿ?™?Ð+¨2¨h¯m©m¨_ð>óð ð
 '/§m¡m£o× 5�Ø$1°$·-±-Ñ$@Ð!Ø$×(Ñ(¨Ó2°fÒ<Ø/×3Ñ3°G¸RÓ@×DÑDÀYÓO�GÜ# GÓ,Ð,à×,Ñ,¨]Ó;�ØÐ$Ü0°¸Ó?�Fà÷/ H×GÐG÷ #—?‘?ùó Fð
 #ùØGùð !6øð Høð #øßG×GÑGú÷ #—?—?—?“?üsÈ   ‚CJ:Ã
I,Ã!I,Ã&8J:ÄI2ÄJ:Ä"J%Ä;I5Ä<J%Ä?BI>ÇI8ÇA3I>É	J%ÉI:ÉJ%ÉJ:É&I<É'J:É5J%É8I>É:J%É<J:É>J	ÊJÊJ	ÊJ%ÊJ:ÊJ!ÊJ:Ê%J7Ê+J.Ê,J7Ê3J:)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   ÚclassmethodrD   ÚpropertyrI   rN   ÚstaticmethodrS   r
   r|   r	   r€   rG   r6   r4   r   r      sE  … ñ
ð 0€HˆcÓ/à$(€N�H˜S‘MÓ(à(.€GˆW�_Ñ%Ó.Ø>à(4€J�˜Ñ%Ó4Ø@àƒMØPà€Eˆ8�C‰=Óðñ $)°¸!ÀÔ#B€K�˜%‘ÓBÙ %¨d°qÔ 9€J�˜‘Ó9ØGK€J�˜Ð!BÑCÑDÓKá"°4Ô8€FˆD��c�‰NÓ8ðñ
 $)¸Ô#>€L�$�s˜C�x‘.Ó>Øà*.€N�H˜T #™YÑ'Ó.Ø áØô€Lð ð¨$ð °4ò ó ðñ ˜(Ô#Øð  c¨3 h¡ð °Cò ó ó $ðð" ð˜3ò ó ðð> Tð >¨có >ð ð*˜Cò *ó ð*ð %)Ø:>ñ	GàðGð �t˜C‘yÑ!ðGð Ð6Ñ7ð	Gð
 ðGð 
óGðX %)Ø?Cñ	JàðJð �t˜C‘yÑ!ð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�   r>   r   rG   r6   r4   Ú<module>r™      sP   ðÙ -ã ß 5Õ 5å !÷õ 4ß ?Ý 4ß 7Ñ 7å >Ý ;à	ˆ×	Ñ	˜8Ó	$€ôuˆSõ ur6   