Ë
    µŒjMr  ã                  óZ  — d dl mZ d dlZd dlZd dlZd dlmZmZmZm	Z	m
Z
mZmZmZmZmZmZmZ d dlZd dlmZ d dlmZ d dlmZmZmZ d dlmZmZmZm Z  d dl!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z' d d	l(m)Z)  ejT                  e+«      Z,dd„Z-dd„Z.ddd„Z/dd„Z0dd„Z1 eddd¬«       G d„ d
ee«      «       Z2y)é    )ÚannotationsN)ÚAnyÚCallableÚDictÚListÚLiteralÚMappingÚOptionalÚSequenceÚSetÚTupleÚUnionÚcast)Ú
deprecated)Ú
Embeddings)Úget_from_dict_or_envÚget_pydantic_field_namesÚpre_init)Ú	BaseModelÚ
ConfigDictÚFieldÚmodel_validator)ÚAsyncRetryingÚbefore_sleep_logÚretryÚretry_if_exception_typeÚstop_after_attemptÚwait_exponential)Úis_openai_v1ÚOpenAIEmbeddingsc           
     ó  — dd l }t        dt        | j                  «      t	        d| j
                  | j                  ¬«      t        |j                  j                  «      t        |j                  j                  «      z  t        |j                  j                  «      z  t        |j                  j                  «      z  t        |j                  j                  «      z  t        t        t         j"                  «      ¬«      S )Nr   Té   ©Ú
multiplierÚminÚmax©ÚreraiseÚstopÚwaitr   Úbefore_sleep)Úopenair   r   Úmax_retriesr   Úretry_min_secondsÚretry_max_secondsr   ÚerrorÚTimeoutÚAPIErrorÚAPIConnectionErrorÚRateLimitErrorÚServiceUnavailableErrorr   ÚloggerÚloggingÚWARNING)Ú
embeddingsr,   s     úo/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/embeddings/openai.pyÚ_create_retry_decoratorr;   ,   sÉ   € Ûô ØÜ 
× 6Ñ 6Ó7ÜØØ×,Ñ,Ø×,Ñ,ô
ô $ F§L¡L×$8Ñ$8Ó9Ü% f§l¡l×&;Ñ&;Ó<ñ=ä% f§l¡l×&EÑ&EÓFñGô & f§l¡l×&AÑ&AÓBñCô & f§l¡l×&JÑ&JÓKñ	Lô &¤f¬g¯o©oÓ>ôð ó    c           
     ó  ‡— dd l }t        dt        | j                  «      t	        d| j
                  | j                  ¬«      t        |j                  j                  «      t        |j                  j                  «      z  t        |j                  j                  «      z  t        |j                  j                  «      z  t        |j                  j                  «      z  t        t        t         j"                  «      ¬«      Šdˆfd„}|S )Nr   Tr"   r#   r'   c                ó   •‡ — dˆˆ fd„}|S )Nc               Ÿ  óf   •K  — ‰2 3 d {  –—† } ‰| i |¤Žƒ d {  –—† c S 7 Œ7 Œ6 t        d«      ‚­w)Nzthis is unreachable)ÚAssertionError)ÚargsÚkwargsÚ_Úasync_retryingÚfuncs      €€r:   Ú	wrapped_fz7_async_retry_decorator.<locals>.wrap.<locals>.wrapped_fb   s?   øè ø€ Ù)÷ 3�aÙ! 4Ð2¨6Ñ2×2Ò2ð3øØ2øð *ä Ð!6Ó7Ð7ùs(   ƒ1†%Š!‹%Ž1š#›1¡%£1¥1)rA   r   rB   r   Úreturnr   © )rE   rF   rD   s   ` €r:   Úwrapz$_async_retry_decorator.<locals>.wrapa   s   ù€ ö	8ð
 Ðr<   )rE   r   rG   r   )r,   r   r   r-   r   r.   r/   r   r0   r1   r2   r3   r4   r5   r   r6   r7   r8   )r9   r,   rI   rD   s      @r:   Ú_async_retry_decoratorrJ   G   sÓ   ø€ Ûô #ØÜ 
× 6Ñ 6Ó7ÜØØ×,Ñ,Ø×,Ñ,ô
ô $ F§L¡L×$8Ñ$8Ó9Ü% f§l¡l×&;Ñ&;Ó<ñ=ä% f§l¡l×&EÑ&EÓFñGô & f§l¡l×&AÑ&AÓBñCô & f§l¡l×&JÑ&JÓKñ	Lô &¤f¬g¯o©oÓ>ô€Nõ$ð €Kr<   c                ór   — t        d„ | d   D «       «      r!|sdd l}|j                  j                  d«      ‚| S )Nc              3  ó>   K  — | ]  }t        |d    «      dk(  –— Œ y­w)Ú	embeddingr"   N)Úlen)Ú.0Úds     r:   Ú	<genexpr>z"_check_response.<locals>.<genexpr>n   s!   è ø€ Ð
>Ñ-=¨Œ3ˆq�‰~Ó !Õ#Ñ-=ùs   ‚Údatar   z&OpenAI API returned an empty embedding)Úanyr,   r0   r2   )ÚresponseÚ
skip_emptyr,   s      r:   Ú_check_responserV   m   s5   € Ü
Ñ
>¨X°fÒ-=Ó
>Ô>ÁzÛà�l‰l×#Ñ#Ð$LÓMÐMØ€Or<   c                óŒ   ‡ — t        «       r ‰ j                  j                  di |¤ŽS t        ‰ «      }|dˆ fd„«       } |di |¤ŽS )ú)Use tenacity to retry the embedding call.c                 ój   •—  ‰j                   j                  di | ¤Ž}t        |‰j                  ¬«      S ©N)rU   rH   )ÚclientÚcreaterV   rU   ©rB   rT   r9   s     €r:   Ú_embed_with_retryz+embed_with_retry.<locals>._embed_with_retry{   s1   ø€ à+�:×$Ñ$×+Ñ+Ñ5¨fÑ5ˆÜ˜x°J×4IÑ4IÔJÐJr<   rH   ©rB   r   rG   r   )r   r[   r\   r;   )r9   rB   Úretry_decoratorr^   s   `   r:   Úembed_with_retryra   u   sR   ø€ ä„~Ø'ˆz× Ñ ×'Ñ'Ñ1¨&Ñ1Ð1Ü-¨jÓ9€OàôKó ðKñ Ñ&˜vÑ&Ð&r<   c              ‹  ó¸   ‡ K  — t        «       r$ ‰ j                  j                  di |¤Žƒ d{  –—† S t        ‰ «      dˆ fd„«       } |di |¤Žƒ d{  –—† S 7 Œ(7 Œ­w)rX   Nc               ›  ó†   •K  —  ‰j                   j                  di | ¤Žƒ d {  –—† }t        |‰j                  ¬«      S 7 Œ­wrZ   )r[   ÚacreaterV   rU   r]   s     €r:   Ú_async_embed_with_retryz7async_embed_with_retry.<locals>._async_embed_with_retry‰   s=   øè ø€ à2˜×*Ñ*×2Ñ2Ñ<°VÑ<×<ˆÜ˜x°J×4IÑ4IÔJÐJð =ús   ƒ A£?¤ArH   r_   )r   Úasync_clientr\   rJ   )r9   rB   re   s   `  r:   Úasync_embed_with_retryrg   ƒ   sd   øè ø€ ô „~Ø3�Z×,Ñ,×3Ñ3Ñ=°fÑ=×=Ð=ä˜JÓ'ôKó (ðKñ )Ñ2¨6Ñ2×2Ð2ð >øð 3ús!   ƒ*A­A®#AÁAÁAÁAz0.0.9z1.0z!langchain_openai.OpenAIEmbeddings)ÚsinceÚremovalÚalternative_importc                  ó  — e Zd ZU dZ edd¬«      Zded<    edd¬«      Zded<   dZd	ed
<   eZ	ded<    edd¬«      Z
ded<   	  edd¬«      Zded<   	 dZded<   dZded<   dZded<   	  edd¬«      Zded<   	  edd¬«      Zded<   	  e«       Zded<   dZded<   d Zded!<   	 d"Zded#<   	  edd$¬«      Zd%ed&<   	 dZded'<   dZd(ed)<   	 dZded*<   	 d+Zd(ed,<   	  ee¬-«      Zd.ed/<   	 d+Zd(ed0<   	 dZd1ed2<   dZd3ed4<   d5Z ded6<   	 d7Z!ded8<   	 dZ"d9ed:<   	  e#dd;d<¬=«      Z$ e%d>¬?«      e&dJd@„«       «       Z'e(dKdA„«       Z)e*dLdB„«       Z+ddCœ	 	 	 	 	 	 	 dMdD„Z,ddCœ	 	 	 	 	 	 	 dMdE„Z-	 dN	 	 	 	 	 dOdF„Z.	 dN	 	 	 	 	 dOdG„Z/dPdH„Z0dPdI„Z1y)Qr    aj  OpenAI embedding models.

    To use, you should have the ``openai`` python package installed, and the
    environment variable ``OPENAI_API_KEY`` set with your API key or pass it
    as a named parameter to the constructor.

    Example:
        .. code-block:: python

            from langchain_community.embeddings import OpenAIEmbeddings
            openai = OpenAIEmbeddings(openai_api_key="my-api-key")

    In order to use the library with Microsoft Azure endpoints, you need to set
    the OPENAI_API_TYPE, OPENAI_API_BASE, OPENAI_API_KEY and OPENAI_API_VERSION.
    The OPENAI_API_TYPE must be set to 'azure' and the others correspond to
    the properties of your endpoint.
    In addition, the deployment name must be passed as the model parameter.

    Example:
        .. code-block:: python

            import os

            os.environ["OPENAI_API_TYPE"] = "azure"
            os.environ["OPENAI_API_BASE"] = "https://<your-endpoint.openai.azure.com/"
            os.environ["OPENAI_API_KEY"] = "your AzureOpenAI key"
            os.environ["OPENAI_API_VERSION"] = "2023-05-15"
            os.environ["OPENAI_PROXY"] = "http://your-corporate-proxy:8080"

            from langchain_community.embeddings.openai import OpenAIEmbeddings
            embeddings = OpenAIEmbeddings(
                deployment="your-embeddings-deployment-name",
                model="your-embeddings-model-name",
                openai_api_base="https://your-endpoint.openai.azure.com/",
                openai_api_type="azure",
            )
            text = "This is a test query."
            query_result = embeddings.embed_query(text)

    NT)ÚdefaultÚexcluder   r[   rf   ztext-embedding-ada-002ÚstrÚmodelzOptional[str]Ú
deploymentÚapi_version)rl   ÚaliasÚopenai_api_versionÚbase_urlÚopenai_api_baseÚopenai_api_typeÚopenai_proxyiÿ  ÚintÚembedding_ctx_lengthÚapi_keyÚopenai_api_keyÚorganizationÚopenai_organizationzUnion[Literal['all'], Set[str]]Úallowed_specialÚallz.Union[Literal['all'], Set[str], Sequence[str]]Údisallowed_specialiè  Ú
chunk_sizeé   r-   Útimeoutz0Optional[Union[float, Tuple[float, float], Any]]Úrequest_timeoutÚheadersÚboolÚtiktoken_enabledÚtiktoken_model_nameFÚshow_progress_bar)Údefault_factoryúDict[str, Any]Úmodel_kwargsrU   zUnion[Mapping[str, str], None]Údefault_headersz!Union[Mapping[str, object], None]Údefault_queryé   r.   é   r/   zUnion[Any, None]Úhttp_clientÚforbidrH   )Úpopulate_by_nameÚextraÚprotected_namespacesÚbefore)Úmodec           
     ó`  — t        | «      }|j                  di «      }t        |«      D ]M  }||v rt        d|› d�«      ‚||vsŒt	        j
                  d|› d|› d|› d�«       |j                  |«      ||<   ŒO |j                  |j                  «       «      }|rt        d|› d	�«      ‚||d<   |S )
z>Build extra kwargs from additional params that were passed in.rŒ   zFound z supplied twice.z	WARNING! z/ is not default parameter.
                    zJ was transferred to model_kwargs.
                    Please confirm that z is what you intended.zParameters za should be specified explicitly. Instead they were passed in as part of `model_kwargs` parameter.)	r   ÚgetÚlistÚ
ValueErrorÚwarningsÚwarnÚpopÚintersectionÚkeys)ÚclsÚvaluesÚall_required_field_namesr”   Ú
field_nameÚinvalid_model_kwargss         r:   Úbuild_extrazOpenAIEmbeddings.build_extra  sç   € ô $<¸CÓ#@Ð Ø—
‘
˜>¨2Ó.ˆÜ˜vž,ˆJØ˜UÑ"Ü  6¨*¨Ð5EÐ!FÓGÐGØÐ!9Ò9Ü—‘Ø! * ð .Ø�Lð !)Ø)3¨Ð4JðNôð
 %+§J¡J¨zÓ$:��jÒ!ð 'ð  8×DÑDÀUÇZÁZÃ\ÓRÐÙÜØÐ2Ð3ð 4Sð Tóð ð
 "'ˆˆ~ÑØˆr<   c           	     óN  — t        |dd«      |d<   |d   xs t        j                  d«      |d<   t        |ddd¬«      |d<   t        |d	d
d¬«      |d	<   |d   dv rd}t        |d   d«      |d<   nd}t        |dd|¬«      |d<   |d   xs, t        j                  d«      xs t        j                  d«      |d<   	 ddl}t        «       r¡|d   dv rt        j                  d«       |d   |d   |d   |d   |d   |d   |d   |d   dœ}|j                  d«      s |j                  d i |¤Žj                  |d<   |j                  d«      sD |j                  d i |¤Žj                  |d<   |S |j                  d«      s|j                  |d<   |S 	 |S # t        $ r t        d«      ‚w xY w)!z?Validate that api key and python package exists in environment.r{   ÚOPENAI_API_KEYru   ÚOPENAI_API_BASErv   ÚOPENAI_API_TYPEÚ )rl   rw   ÚOPENAI_PROXY©ÚazureÚazure_adÚazureadz
2023-05-15r�   i   rs   ÚOPENAI_API_VERSIONr}   ÚOPENAI_ORG_IDÚOPENAI_ORGANIZATIONr   NzfIf you have openai>=1.0.0 installed and are using Azure, please use the `AzureOpenAIEmbeddings` class.r„   r-   r�   rŽ   r‘   )rz   r|   rt   rƒ   r-   r�   rŽ   r‘   r[   rf   úTCould not import openai python package. Please install it with `pip install openai`.rH   )r   ÚosÚgetenvr%   r,   r   rœ   r�   r™   ÚOpenAIr9   ÚAsyncOpenAIÚ	EmbeddingÚImportError)r¡   r¢   Údefault_api_versionr,   Úclient_paramss        r:   Úvalidate_environmentz%OpenAIEmbeddings.validate_environment   s@  € ô $8ØÐ$Ð&6ó$
ˆÐÑ ð %+Ð+<Ñ$=ò %
ÄÇÁØóB
ˆÐ Ñ!ô %9ØØØØô	%
ˆÐ Ñ!ô "6ØØØØô	"
ˆˆ~Ñð Ð#Ñ$Ð(HÑHØ".Ðô $' v¨lÑ';¸TÓ#BˆF�<Ò à"$ÐÜ';ØØ Ø Ø'ô	(
ˆÐ#Ñ$ð Ð(Ñ)ò 0Ü�y‰y˜Ó)ò0ä�y‰yÐ.Ó/ð 	Ð$Ñ%ð
!	Ûô Œ~ØÐ+Ñ,Ð0PÑPÜ—M‘MðHôð
  &Ð&6Ñ7Ø$*Ð+@Ñ$AØ &Ð'8Ñ 9Ø%Ð&7Ñ8Ø#)¨-Ñ#8Ø'-Ð.?Ñ'@Ø%+¨OÑ%<Ø#)¨-Ñ#8ñ	!�ð —z‘z (Ô+Ø'4 v§}¡}Ñ'E°}Ñ'E×'PÑ'P�F˜8Ñ$Ø—z‘z .Ô1Ø-?¨V×-?Ñ-?ñ .Ø'ñ.ç ‘jð ˜>Ñ*ð ˆð	 —Z‘Z Ô)Ø#)×#3Ñ#3��xÑ ð ˆð ØˆøôA ò 	Üð?óð ð	ús   Â;F ÆF$c           	     óè  — t        «       rd| j                  i| j                  ¥}|S | j                  | j                  | j                  | j
                  | j                  | j                  | j                  | j                  dœ| j                  ¥}| j                  dv r| j                  |d<   | j                  r#	 dd l}| j                  | j                  dœ|_        |S # t        $ r t        d«      ‚w xY w)Nro   )ro   r„   r…   rz   r|   Úapi_baseÚapi_typerq   r­   Úenginer   r´   )ÚhttpÚhttps)r   ro   rŒ   r„   r…   r{   r}   ru   rv   rs   rp   rw   r,   rº   Úproxy)ÚselfÚopenai_argsr,   s      r:   Ú_invocation_paramsz#OpenAIEmbeddings._invocation_paramsm  sþ   € äŒ>Ø!(¨$¯*©*Ð J¸×8IÑ8IÐ JˆKð: Ðð5 Ÿ™Ø#'×#7Ñ#7ØŸ<™<Ø×.Ñ.Ø $× 8Ñ 8Ø ×0Ñ0Ø ×0Ñ0Ø#×6Ñ6ñ
ð ×#Ñ#ð
ˆKð ×#Ñ#Ð'GÑGØ(,¯©�˜HÑ%à× Ò ðÛ!ð !×-Ñ-Ø!×.Ñ.ñ �”ð Ðøô #ò Ü%ðGóð ðús   Â8C ÃC1)r�   c          	     ó.	  — g }g }| j                   xs | j                  }|xs | j                  }| j                  sª	 ddlm} |j                  |¬«      }	t        |«      D ]‚  \  }
}|	j                  |d¬«      }t        dt        |«      | j                  «      D ]G  }|||| j                  z    }|	j                  |«      }|j                  |«       |j                  |
«       ŒI Œ„ nÖ	 ddl}	 |j!                  |«      }t        |«      D ]±  \  }
}| j                  j+                  d«      r|j-                  dd«      }|j                  || j.                  | j0                  ¬«      }t        dt        |«      | j                  «      D ]4  }|j                  |||| j                  z    «       |j                  |
«       Œ6 Œ³ | j2                  r$	 ddlm}  |t        dt        |«      |«      «      }nt        dt        |«      |«      }g }|D ][  }
t9        | fd||
|
|z    i| j:                  ¤Ž}t=        |t>        «      s|j?                  «       }|jA                  d„ |d   D «       «       Œ] t        t        |«      «      D �cg c]  }g ‘Œ }}t        t        |«      «      D �cg c]  }g ‘Œ }}t        t        |«      «      D ]]  }
| jB                  rt        ||
   «      dk(  rŒ!|||
      j                  ||
   «       |||
      j                  t        ||
   «      «       Œ_ t        t        |«      «      D �cg c]  }g ‘Œ }}t        t        |«      «      D ]§  }
||
   }t        |«      dk(  rDt9        | fddi| j:                  ¤Ž}t=        |t>        «      s|j?                  «       }|d   d   d   }ntE        jF                  |d||
   ¬«      }|tD        jH                  jK                  |«      z  jM                  «       ||
<   Œ© |S # t        $ r t        d«      ‚w xY w# t        $ r t        d«      ‚w xY w# t"        $ r, t$        j'                  d	«       d
}|j)                  |«      }Y �Œbw xY w# t        $ r t        dt        |«      |«      }Y �Œƒw xY wc c}w c c}w c c}w )al  
        Generate length-safe embeddings for a list of texts.

        This method handles tokenization and embedding generation, respecting the
        set embedding context length and chunk size. It supports both tiktoken
        and HuggingFace tokenizer based on the tiktoken_enabled flag.

        Args:
            texts (List[str]): A list of texts to embed.
            engine (str): The engine or model to use for embeddings.
            chunk_size (Optional[int]): The size of chunks for processing embeddings.

        Returns:
            List[List[float]]: A list of embeddings for each input text.
        r   ©ÚAutoTokenizerz¥Could not import transformers python package. This is needed in order to for OpenAIEmbeddings without `tiktoken`. Please install it with `pip install transformers`. ©Úpretrained_model_name_or_pathF©Úadd_special_tokensNú‰Could not import tiktoken python package. This is needed in order to for OpenAIEmbeddings. Please install it with `pip install tiktoken`.ú5Warning: model not found. Using cl100k_base encoding.Úcl100k_baseÚ001Ú
Ú ©Útextr~   r€   )ÚtqdmÚinputc              3  ó&   K  — | ]	  }|d    –— Œ y­w©rM   NrH   ©rO   Úrs     r:   rQ   z<OpenAIEmbeddings._get_len_safe_embeddings.<locals>.<genexpr>ø  ó   è ø€ Ð%OÑ>N¸ a¨¥nÑ>Nùó   ‚rR   r"   r«   rM   ©ÚaxisÚweights)'rˆ   ro   r�   r‡   ÚtransformersrÊ   rº   Úfrom_pretrainedÚ	enumerateÚencodeÚrangerN   ry   ÚdecodeÚappendÚtiktokenÚencoding_for_modelÚKeyErrorr6   ÚwarningÚget_encodingÚendswithÚreplacer~   r€   r‰   Ú	tqdm.autor×   ra   rÇ   Ú
isinstanceÚdictÚextendrU   ÚnpÚaverageÚlinalgÚnormÚtolist)rÅ   ÚtextsrÁ   r�   ÚtokensÚindicesÚ
model_nameÚ_chunk_sizerÊ   Ú	tokenizerÚirÖ   Ú	tokenizedÚjÚtoken_chunkÚ
chunk_textré   Úencodingro   Útokenr×   Ú_iterÚbatched_embeddingsrT   rC   ÚresultsÚnum_tokens_in_batchr9   Ú_resultÚaverage_embeddedrõ   s                                  r:   Ú_get_len_safe_embeddingsz)OpenAIEmbeddings._get_len_safe_embeddings‘  s˜  € ð& ˆØˆØ×-Ñ-Ò;°·±ˆ
Ø Ò3 D§O¡Oˆð ×$Ò$ðÝ6ð &×5Ñ5Ø.8ð 6ó ˆIô % UÖ+‘��4à%×,Ñ,¨TÀeÐ,ÓL�	ô ˜q¤# i£.°$×2KÑ2KÖL�AØ"+¨A°°D×4MÑ4MÑ0MÐ"N�Kð "+×!1Ñ!1°+Ó!>�JØ—M‘M *Ô-Ø—N‘N 1Õ%ñ Mñ ,ðÛð8Ø#×6Ñ6°zÓB�ô
 % UÖ+‘��4Ø—:‘:×&Ñ& uÔ-ð  Ÿ<™<¨¨cÓ2�Dà Ÿ™ØØ$(×$8Ñ$8Ø'+×'>Ñ'>ð (ó �ô ˜q¤# e£*¨d×.GÑ.GÖH�AØ—M‘M %¨¨A°×0IÑ0IÑ,IÐ"JÔKØ—N‘N 1Õ%ñ Ið ,ð$ ×!Ò!ð;Ý*áœU 1¤c¨&£k°;Ó?Ó@‘ô ˜!œS ›[¨+Ó6ˆEà02ÐÛˆAÜ'Øñà˜Q  [¡Ð1ðð ×)Ñ)ñˆHô
 ˜h¬Ô-Ø#Ÿ=™=›?�Ø×%Ñ%Ñ%O¸hÀvÒ>NÓ%OÕOð ô 9>¼cÀ%»jÔ8IÓ+JÑ8I°1ªBÐ8IˆÐ+JÜ<AÄ#ÀeÃ*Ô<MÓ/NÑ<M°q²Ð<MÐÐ/NÜ”s˜7“|Ö$ˆAØ�Š¤3Ð'9¸!Ñ'<Ó#=ÀÒ#BØØ�G˜A‘JÑ×&Ñ&Ð'9¸!Ñ'<Ô=Ø ¨¡
Ñ+×2Ñ2´3°v¸a±y³>ÕBð	 %ô 6;¼3¸u»:Ô5FÓ(GÑ5F°ªÐ5Fˆ
Ð(GÜ”s˜5“zÖ"ˆAØ˜a‘jˆGÜ�7‹|˜qÒ Ü#3Øñ$àð$ð ×-Ñ-ñ$Ð ô
 "Ð"2´DÔ9Ø'7×'<Ñ'<Ó'>Ð$Ø*¨6Ñ2°1Ñ5°kÑB‘äŸ*™* W°1Ð>QÐRSÑ>TÔU�Ø$¤r§y¡y§~¡~°gÓ'>Ñ>×FÑFÓHˆJ�qŠMð #ð ÐøôK ò Ü!ðVóð ðûô2 ò Ü!ðEóð ðûô ò 8Ü—‘ÐVÔWØ%�Ø#×0Ñ0°Ó7“ð8ûô6 ò ;Ü˜a¤ V£¨kÓ:“ð;üò  ,KùÚ/Nùò )HsM   ¼O: Ã&P Ã+P* Ç"Q" É9	RÊ	RÌ/	RÏ:PÐP'Ð*1QÑQÑ"RÒRc          	   ƒ  ó”  K  — g }g }| j                   xs | j                  }|xs | j                  }| j                  sª	 ddlm} |j                  |¬«      }	t        |«      D ]‚  \  }
}|	j                  |d¬«      }t        dt        |«      | j                  «      D ]G  }|||| j                  z    }|	j                  |«      }|j                  |«       |j                  |
«       ŒI Œ„ nÖ	 ddl}	 |j!                  |«      }t        |«      D ]±  \  }
}| j                  j+                  d«      r|j-                  dd«      }|j                  || j.                  | j0                  ¬«      }t        dt        |«      | j                  «      D ]4  }|j                  |||| j                  z    «       |j                  |
«       Œ6 Œ³ g }|xs | j                  }t        dt        |«      |«      D ]c  }
t3        | fd||
|
|z    i| j4                  ¤Žƒ d{  –—† }t7        |t8        «      s|j9                  «       }|j;                  d„ |d   D «       «       Œe t        t        |«      «      D �cg c]  }g ‘Œ }}t        t        |«      «      D �cg c]  }g ‘Œ }}t        t        |«      «      D ]?  }
|||
      j                  ||
   «       |||
      j                  t        ||
   «      «       ŒA t        t        |«      «      D �cg c]  }g ‘Œ }}t        t        |«      «      D ]¯  }
||
   }t        |«      dk(  rLt3        | fddi| j4                  ¤Žƒ d{  –—† }t7        |t8        «      s|j9                  «       }|d   d   d   }nt=        j>                  |d||
   ¬«      }|t<        j@                  jC                  |«      z  jE                  «       ||
<   Œ± |S # t        $ r t        d«      ‚w xY w# t        $ r t        d«      ‚w xY w# t"        $ r, t$        j'                  d	«       d
}|j)                  |«      }Y �Œ2w xY w7 �Œ+c c}w c c}w c c}w 7 Œü­w)aŒ  
        Asynchronously generate length-safe embeddings for a list of texts.

        This method handles tokenization and asynchronous embedding generation,
        respecting the set embedding context length and chunk size. It supports both
        `tiktoken` and HuggingFace `tokenizer` based on the tiktoken_enabled flag.

        Args:
            texts (List[str]): A list of texts to embed.
            engine (str): The engine or model to use for embeddings.
            chunk_size (Optional[int]): The size of chunks for processing embeddings.

        Returns:
            List[List[float]]: A list of embeddings for each input text.
        r   rÉ   z¥Could not import transformers python package. This is needed in order to for OpenAIEmbeddings without  `tiktoken`. Please install it with `pip install transformers`.rË   FrÍ   NrÏ   rÐ   rÑ   rÒ   rÓ   rÔ   rÕ   rØ   c              3  ó&   K  — | ]	  }|d    –— Œ y­wrÚ   rH   rÛ   s     r:   rQ   z=OpenAIEmbeddings._aget_len_safe_embeddings.<locals>.<genexpr>u  rÝ   rÞ   rR   r«   rM   rß   )#rˆ   ro   r�   r‡   râ   rÊ   rº   rã   rä   rå   ræ   rN   ry   rç   rè   ré   rê   rë   r6   rì   rí   rî   rï   r~   r€   rg   rÇ   rñ   rò   ró   rô   rõ   rö   r÷   rø   )rÅ   rù   rÁ   r�   rú   rû   rü   rý   rÊ   rþ   rÿ   rÖ   r   r  r  r  ré   r  ro   r  r  rT   rC   r  r	  r9   r
  r  rõ   s                                r:   Ú_aget_len_safe_embeddingsz*OpenAIEmbeddings._aget_len_safe_embeddings  sR  è ø€ ð& ˆØˆØ×-Ñ-Ò;°·±ˆ
Ø Ò3 D§O¡Oˆð ×$Ò$ðÝ6ð &×5Ñ5Ø.8ð 6ó ˆIô % UÖ+‘��4à%×,Ñ,¨TÀeÐ,ÓL�	ô ˜q¤# i£.°$×2KÑ2KÖL�AØ"+¨A°°D×4MÑ4MÑ0MÐ"N�Kð "+×!1Ñ!1°+Ó!>�JØ—M‘M *Ô-Ø—N‘N 1Õ%ñ Mñ ,ðÛð8Ø#×6Ñ6°zÓB�ô
 % UÖ+‘��4Ø—:‘:×&Ñ& uÔ-ð  Ÿ<™<¨¨cÓ2�Dà Ÿ™ØØ$(×$8Ñ$8Ø'+×'>Ñ'>ð (ó �ô ˜q¤# e£*¨d×.GÑ.GÖH�AØ—M‘M %¨¨A°×0IÑ0IÑ,IÐ"JÔKØ—N‘N 1Õ%ñ Ið ,ð$ 13ÐØ Ò3 D§O¡OˆÜ�qœ#˜f›+ {Ö3ˆAÜ3Øñà˜Q  [¡Ð1ðð ×)Ñ)ñ÷ ˆHô ˜h¬Ô-Ø#Ÿ=™=›?�Ø×%Ñ%Ñ%O¸hÀvÒ>NÓ%OÕOð 4ô 9>¼cÀ%»jÔ8IÓ+JÑ8I°1ªBÐ8IˆÐ+JÜ<AÄ#ÀeÃ*Ô<MÓ/NÑ<M°q²Ð<MÐÐ/NÜ”s˜7“|Ö$ˆAØ�G˜A‘JÑ×&Ñ&Ð'9¸!Ñ'<Ô=Ø ¨¡
Ñ+×2Ñ2´3°v¸a±y³>ÕBð %ô 6;¼3¸u»:Ô5FÓ(GÑ5F°ªÐ5Fˆ
Ð(GÜ”s˜5“zÖ"ˆAØ˜a‘jˆGÜ�7‹|˜qÒ Ü)?Øñ*àð*ð ×-Ñ-ñ*÷ $Ð ô
 "Ð"2´DÔ9Ø'7×'<Ñ'<Ó'>Ð$Ø*¨6Ñ2°1Ñ5°kÑB‘äŸ*™* W°1Ð>QÐRSÑ>TÔU�Ø$¤r§y¡y§~¡~°gÓ'>Ñ>×FÑFÓHˆJ�qŠMð #ð Ðøôw ò Ü!ðVóð ðûô2 ò Ü!ðEóð ðûô ò 8Ü—‘ÐVÔWØ%�Ø#×0Ñ0°Ó7“ð8úð2ûò ,KùÚ/Nùò
 )Hð$úsš   ‚;Q¾O ÁB#QÃ(O$ Ã-O< Ã>DQÈ	P4È
AQÉ!	P7É*QÊ	P<ÊA.QË9	QÌAQÍ	QÍ
BQÏO!Ï!QÏ$O9Ï9QÏ<1P1Ð-QÐ0P1Ð1QÐ7Qc                ó^   — t        t        | j                  «      }| j                  |||¬«      S )aM  Call out to OpenAI's embedding endpoint for embedding search docs.

        Args:
            texts: The list of texts to embed.
            chunk_size: The chunk size of embeddings. If None, will use the chunk size
                specified by the class.

        Returns:
            List of embeddings, one for each text.
        ©rÁ   r�   ©r   rn   rp   r  ©rÅ   rù   r�   rÁ   s       r:   Úembed_documentsz OpenAIEmbeddings.embed_documents�  s3   € ô ”c˜4Ÿ?™?Ó+ˆØ×,Ñ,Ø˜&¨Zð -ó 
ð 	
r<   c              ƒ  óf   K  — t        t        | j                  «      }| j                  |||¬«      S ­w)aS  Call out to OpenAI's embedding endpoint async for embedding search docs.

        Args:
            texts: The list of texts to embed.
            chunk_size: The chunk size of embeddings. If None, will use the chunk size
                specified by the class.

        Returns:
            List of embeddings, one for each text.
        r  r  r  s       r:   Úaembed_documentsz!OpenAIEmbeddings.aembed_documents£  s7   è ø€ ô ”c˜4Ÿ?™?Ó+ˆØ×,Ñ,Ø˜&¨Zð -ó 
ð 	
ùs   ‚/1c                ó,   — | j                  |g«      d   S )z´Call out to OpenAI's embedding endpoint for embedding query text.

        Args:
            text: The text to embed.

        Returns:
            Embedding for the text.
        r   )r  )rÅ   rÖ   s     r:   Úembed_queryzOpenAIEmbeddings.embed_query·  s   € ð ×#Ñ# T FÓ+¨AÑ.Ð.r<   c              ƒ  óL   K  — | j                  |g«      ƒ d{  –—† }|d   S 7 Œ	­w)zºCall out to OpenAI's embedding endpoint async for embedding query text.

        Args:
            text: The text to embed.

        Returns:
            Embedding for the text.
        Nr   )r  )rÅ   rÖ   r9   s      r:   Úaembed_queryzOpenAIEmbeddings.aembed_queryÂ  s,   è ø€ ð  ×0Ñ0°$°Ó8×8ˆ
Ø˜!‰}Ðð 9ús   ‚$˜"™
$)r¢   r‹   rG   r   )r¢   r   rG   r   )rG   r‹   )rù   ú	List[str]rÁ   rn   r�   úOptional[int]rG   úList[List[float]])r   )rù   r  r�   r  rG   r  )rÖ   rn   rG   zList[float])2Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r[   Ú__annotations__rf   ro   rp   rs   ru   rv   rw   ry   r{   r}   Úsetr~   r€   r�   r-   r„   r…   r‡   rˆ   r‰   rò   rŒ   rU   r�   rŽ   r.   r/   r‘   r   Úmodel_configr   Úclassmethodr¦   r   r½   ÚpropertyrÇ   r  r  r  r  r  r  rH   r<   r:   r    r    ‘   s·  … ñ'ñR  ¨dÔ3€FˆCÓ3Ù d°DÔ9€L�#Ó9Ø)€Eˆ3Ó)à %€J�Ó%á(-°dÀ-Ô(PÐ˜ÓPØSá%*°4¸zÔ%J€O�]ÓJðð &*€O�]Ó)à"&€L�-Ó&Ø $Ð˜#Ó$Ø8Ù$)°$¸iÔ$H€N�MÓHØOÙ).°tÀ>Ô)RÐ˜ÓRØNÙ7:³u€OÐ4Ó<ØINÐÐFÓNØ€J�ÓØ8Ø€K�ÓØ<ÙHMØ˜IôI€OÐEó ðà€GˆSÓØ!Ð�dÓ!ðGà)-Ð˜Ó-ðJð $Ð�tÓ#Ø8Ù#(¸Ô#>€L�.Ó>ØVØ€J�Óð!à6:€OÐ3Ó:Ø7;€MÐ4Ó;ð Ð�sÓØ7ØÐ�sÓØ7Ø$(€KÐ!Ó(Ø áØ XÀBô€Lñ ˜(Ô#Øòó ó $ðð2 òJó ðJðX òó ððH MQñAØðAØ+.ðAØ<IðAà	óAðL MQñwØðwØ+.ðwØ<Iðwà	ówðt =>ð
Øð
Ø,9ð
à	ó
ð* =>ð
Øð
Ø,9ð
à	ó
ó(	/ô
r<   )r9   r    rG   zCallable[[Any], Any])r9   r    rG   r   )F)rT   rò   rU   r†   rG   rò   )r9   r    rB   r   rG   r   )3Ú
__future__r   r7   rµ   rœ   Útypingr   r   r   r   r   r	   r
   r   r   r   r   r   Únumpyrô   Úlangchain_core._api.deprecationr   Úlangchain_core.embeddingsr   Úlangchain_core.utilsr   r   r   Úpydanticr   r   r   r   Útenacityr   r   r   r   r   r   Ú langchain_community.utils.openair   Ú	getLoggerr  r6   r;   rJ   rV   ra   rg   r    rH   r<   r:   Ú<module>r1     s¬   ðÝ "ã Û 	Û ÷÷ ÷ ó ó Ý 6Ý 0÷ñ ÷
 CÓ B÷÷ õ :à	ˆ×	Ñ	˜8Ó	$€óó6"ôLó'ó3ñ Ø
ØØ:ôô
v�y *ó vóñ
vr<   