Ë
    µŒj½  ã                   óx  — d Z ddlmZmZ ddlmZmZmZmZmZ ddl	Z	ddl
mZ ddlmZmZmZmZ  G d„ d«      Z	 dd	lmZmZmZmZmZ de	j>                  de fd„Z! G d„ de«      Z"dZ# G d „ d!e«      Z$y# e$ rA d
edef   dedededef   fd„Zdeddfd„Zdededdfd„Zdd ed«      fdedededdfd„ZY Œpw xY w)"z.Util that invokes the Passio Nutrition AI API.é    )ÚdatetimeÚ	timedelta)ÚAnyÚCallableÚDictÚOptionalÚfinalN)Úget_from_dict_or_env)Ú	BaseModelÚ
ConfigDictÚFieldÚmodel_validatorc                   ó<   — e Zd ZdZedd„«       Zededdfd„«       Zy)ÚNoDiskStoragez!Mixin to prevent storing on disk.ÚreturnNc                 ó   — t        d«      ‚©NzDo not store on disk.©ÚAttributeError©Úselfs    ú{/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/utilities/passio_nutrition_ai.pyÚ__getstate__zNoDiskStorage.__getstate__   ó   € äÐ4Ó5Ð5ó    Ústatec                 ó   — t        d«      ‚r   r   )r   r   s     r   Ú__setstate__zNoDiskStorage.__setstate__   r   r   ©r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r	   r   r   r   © r   r   r   r      s9   „ Ù+à
ò6ó ð6ð ð6 #ð 6¨$ò 6ó ñ6r   r   )ÚretryÚretry_if_resultÚstop_after_attemptÚwait_exponentialÚwait_randomÚf.ÚargsÚkwargsr   c                 ó   — | S ©Nr$   )r*   r+   r,   s      r   Úretry_fallbackr/   !   s	   € ð ˆr   Únc                  ó   — y r.   r$   )r0   s    r   Ústop_after_attempt_fallbackr2   &   ó   € Ør   ÚaÚbc                  ó   — y r.   r$   )r4   r5   s     r   Úwait_random_fallbackr7   )   r3   r   é   ÚinfÚ
multiplierÚminÚmaxc                  ó   — y r.   r$   ©r:   r;   r<   s      r   Úwait_exponential_fallbackr?   ,   s   € ð r   Úrspc                 ó8   — t        | «      xr | j                  dv S )z&Check if a HTTP response is retryable.)i˜  i©  i­  iô  iö  i÷  iø  )ÚboolÚstatus_code)r@   s    r   Úis_http_retryablerD   2   s   € ä�‹9ÒO˜Ÿ™Ð,OÐOÐOr   c            
       óÖ   — e Zd ZU dZee   ed<   defd„Ze	de
fd„«       Zdefd„Z e ee«       ed«       ed	d
«       eddd¬«      z   ¬«      dedej*                  fd„«       Zdd„Zy)ÚManagedPassioLifeAuthz)Manage the token for the NutritionAI API.Ú_access_token_expiryÚsubscription_keyc                 óJ   — || _         d | _        d | _        d | _        d | _        y r.   )rH   Ú_last_tokenrG   Ú_access_tokenÚ_customer_id©r   rH   s     r   Ú__init__zManagedPassioLifeAuth.__init__<   s*   € Ø 0ˆÔØˆÔØ$(ˆÔ!Ø!ˆÔØ ˆÕr   r   c                 óz   — | j                  «       s| j                  «        d| j                  › �| j                  dœS )NzBearer )ÚAuthorizationz	Passio-ID)Úis_valid_nowÚrefresh_access_tokenrK   rL   r   s    r   ÚheaderszManagedPassioLifeAuth.headersC   s>   € à× Ñ Ô"Ø×%Ñ%Ô'à& t×'9Ñ'9Ð&:Ð;Ø×*Ñ*ñ
ð 	
r   c                 ó¤   — | j                   d uxrA | j                  d uxr1 | j                  d uxr! | j                  t        j                  «       kD  S r.   )rK   rL   rG   r   Únowr   s    r   rQ   z"ManagedPassioLifeAuth.is_valid_nowL   sV   € à×Ñ dÐ*ò ;Ø×!Ñ!¨Ð-ò;à×)Ñ)°Ð5ò;ð ×)Ñ)¬H¯L©L«NÑ:ð		
r   é   r   ç333333Ó?r8   çš™™™™™¹?é   r>   ©r%   ÚstopÚwaitc                 ó2   — t        j                  d|› �«      S )Nz;https://api.passiolife.com/v2/token-cache/napi/oauth/token/)ÚrequestsÚgetrM   s     r   Ú	_http_getzManagedPassioLifeAuth._http_getT   s!   € ô �|‰|ØIÐJZÐI[Ð\ó
ð 	
r   Nc                 ó  — | j                  | j                  «      }|st        d«      ‚|j                  «       x| _        }|d   | _        |d   | _        t        j                  «       t        |d   ¬«      z   t        d¬«      z
  | _
        y)z1Refresh the access token for the NutritionAI API.zCould not get access tokenÚcustomer_idÚaccess_tokenÚ
expires_in)Úsecondsé   N)r`   rH   Ú
ValueErrorÚjsonrJ   rL   rK   r   rU   r   rG   )r   r@   Útokens      r   rR   z*ManagedPassioLifeAuth.refresh_access_token^   s‚   € à�n‰n˜T×2Ñ2Ó3ˆÙÜÐ9Ó:Ð:Ø#&§8¡8£:Ð-ˆÔ˜5Ø! -Ñ0ˆÔØ" >Ñ2ˆÔä�L‰L‹NÜ  lÑ 3Ô4ñ5ä Ô"ñ#ð 	Õ!r   r   )r    r!   r"   r#   r   r   Ú__annotations__ÚstrrN   ÚpropertyÚdictrS   rB   rQ   r%   r&   rD   r'   r)   r(   r^   ÚResponser`   rR   r$   r   r   rF   rF   7   sŸ   … Ù3à" 8Ñ,Ó,ð!¨ó !ð ð
˜ò 
ó ð
ð
˜dó 
ñ ÙÐ/Ó0Ù Ó"Ù˜˜CÓ Ñ#3¸qÀcÈqÔ#QÑQôð

¨#ð 
°(×2CÑ2Cò 
óð

ô

r   rF   z@https://api.passiolife.com/v2/products/napi/food/search/advancedc            
       óH  — e Zd ZU dZeed<    ee¬«      Zeed<    ee	¬«      Z
e	ed<   eed<    edd	¬
«      Z e ee«       ed«       edd«       eddd¬«      z   ¬«      de	dej*                  fd„«       Zdede	fd„Z ed¬«      ededefd„«       «       Zdedee   fd„Zy)ÚNutritionAIAPIz(Wrapper for the Passio Nutrition AI API.Únutritionai_subscription_key)ÚdefaultÚnutritionai_api_url)Údefault_factoryÚmore_kwargsÚauth_TÚforbid)Úarbitrary_types_allowedÚextrarV   r   rW   r8   rX   rY   r>   rZ   Úparamsr   c                 ón   — t        j                  | j                  | j                  j                  |¬«      S )N)rS   rz   )r^   r_   rs   rv   rS   )r   rz   s     r   r`   zNutritionAIAPI._http_get€   s.   € ô �|‰|Ø×$Ñ$Ø—J‘J×&Ñ&Øô
ð 	
r   Úsearch_termc                 óš   — | j                  d|i| j                  ¥«      }|st        d«      ‚|j                  «        |j	                  «       S )z0Call the NutritionAI API and return the results.Útermz%Could not get NutritionAI API results)r`   ru   rg   Úraise_for_statusrh   )r   r|   r@   s      r   Ú_api_call_resultsz NutritionAIAPI._api_call_resultsŒ   sG   € à�n‰n˜f kÐF°T×5EÑ5EÐFÓGˆÙÜÐDÓEÐEØ×ÑÔØ�x‰x‹zÐr   Úbefore)ÚmodeÚvaluesc                 ót   — t        |dd«      }||d<   t        |ddt        «      }||d<   t        |«      |d<   |S )z9Validate that api key and endpoint exists in environment.rq   ÚNUTRITIONAI_SUBSCRIPTION_KEYrs   ÚNUTRITIONAI_API_URLrv   )r
   ÚDEFAULT_NUTRITIONAI_API_URLrF   )Úclsrƒ   rq   rs   s       r   Úvalidate_environmentz#NutritionAIAPI.validate_environment”   s^   € ô (<ØÐ2Ð4Ró(
Ð$ð 2NˆÐ-Ñ.ä2ØØ!Ø!Ü'ó	
Ðð )<ˆÐ$Ñ%ä/Ð0LÓMˆˆw‰Øˆr   Úqueryc                 óJ   — | j                  |«      }|rt        |«      dk  ry|S )z4Run query through NutrtitionAI API and parse result.r8   N)r€   Úlen)r   rŠ   Úresultss      r   ÚrunzNutritionAIAPI.run¨   s(   € à×(Ñ(¨Ó/ˆÙ”s˜7“| aÒ'ØØˆr   N)r    r!   r"   r#   rk   rj   r   r‡   rs   rm   ru   rF   r   Úmodel_configr%   r&   rD   r'   r)   r(   r^   rn   r`   r€   r   Úclassmethodr   r   r‰   r   rŽ   r$   r   r   rp   rp   s   sñ   … Ù2à"%Ó%Ù$Ð-HÔIÐ˜ÓIÙ¨dÔ3€K�Ó3Ø Ó áØ $Øô€Lñ
 ÙÐ/Ó0Ù Ó"Ù˜˜CÓ Ñ#3¸qÀcÈqÔ#QÑQôð

 ð 
¨×):Ñ):ò 
óð

ð¨Sð °Tó ñ ˜(Ô#Øð¨$ð °3ò ó ó $ðð$˜ð  ¨$¡ô r   rp   )%r#   r   r   Útypingr   r   r   r   r	   r^   Úlangchain_core.utilsr
   Úpydanticr   r   r   r   r   Útenacityr%   r&   r'   r(   r)   ÚImportErrorr/   Úintr2   Úfloatr7   r?   rn   rB   rD   rF   r‡   rp   r$   r   r   Ú<module>r˜      s  ðÙ 4ç (ß 7Õ 7ã Ý 5ß BÓ B÷	6ñ 	6ð÷õ ð4P˜8×,Ñ,ð P°ó Pô
3
˜Mô 3
ðp Gð ô
:�Yõ :øði ò ðØ�C˜�HÑðØ&)ðØ58ðà	�#�s�(Ñ	óð
 sð ¨tó ð ð ¨%ð °Dó ð ¨A¹EÀ%»LñØðØ$)ðØ49ðà	õðús   ºA3 Á3AB9Â8B9