
    dhMr                    `   S SK Jr  S SKrS SKrS SKrS SKJrJrJrJ	r	J
r
JrJrJrJrJrJrJr  S SKrS SKJr  S SKJr  S SKJrJrJr  S SKJrJrJrJ r   S SK!J"r"J#r#J$r$J%r%J&r&J'r'  S S	K(J)r)  \RT                  " \+5      r,SS jr-SS jr.SSS jjr/SS jr0SS jr1\" SSSS9 " S S
\\5      5       r2g)    )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           
        SS K n[        S[        U R                  5      [	        SU R
                  U R                  S9[        UR                  R                  5      [        UR                  R                  5      -  [        UR                  R                  5      -  [        UR                  R                  5      -  [        UR                  R                  5      -  [        [        [         R"                  5      S9$ )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     ]/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/embeddings/openai.py_create_retry_decoratorr;   ,   s     
 6 67,,,,
 $FLL$8$89%fll&;&;<=%fll&E&EFG &fll&A&ABC &fll&J&JK	L &fgoo>     c           
       ^ SS K n[        S[        U R                  5      [	        SU R
                  U R                  S9[        UR                  R                  5      [        UR                  R                  5      -  [        UR                  R                  5      -  [        UR                  R                  5      -  [        UR                  R                  5      -  [        [        [         R"                  5      S9mSU4S jjnU$ )Nr   Tr"   r#   r'   c                   >^  SUU 4S jjnU$ )Nc                 f   >#    T  S h  vN nT" U 0 UD6I S h  vN s  $  N N
 [        S5      e7f)Nzthis is unreachable)AssertionError)argskwargs_async_retryingfuncs      r:   	wrapped_f7_async_retry_decorator.<locals>.wrap.<locals>.wrapped_fb   s<     ) 3a!42622232 * !677s(   1%!%1#1%11)rA   r   rB   r   returnr    )rE   rF   rD   s   ` r:   wrap$_async_retry_decorator.<locals>.wrapa   s    	8 	8
 r<   )rE   r   rH   r   )r,   r   r   r-   r   r.   r/   r   r0   r1   r2   r3   r4   r5   r   r6   r7   r8   )r9   r,   rJ   rD   s      @r:   _async_retry_decoratorrL   G   s     #
 6 67,,,,
 $FLL$8$89%fll&;&;<=%fll&E&EFG &fll&A&ABC &fll&J&JK	L &fgoo>N$ Kr<   c                    [        S U S    5       5      (       a&  U(       d  SS KnUR                  R                  S5      eU $ )Nc              3  B   #    U H  n[        US    5      S:H  v   M     g7f)	embeddingr"   N)len).0ds     r:   	<genexpr>"_check_response.<locals>.<genexpr>n   s      
>-=3q~!#-=s   datar   z&OpenAI API returned an empty embedding)anyr,   r0   r2   )response
skip_emptyr,   s      r:   _check_responserY   m   s8    

>Xf-=
>>>zll##$LMMOr<   c                   ^  [        5       (       a  T R                  R                  " S0 UD6$ [        T 5      nUSU 4S jj5       nU" S0 UD6$ ))Use tenacity to retry the embedding call.c                 d   > TR                   R                  " S0 U D6n[        UTR                  S9$ N)rX   rI   )clientcreaterY   rX   rB   rW   r9   s     r:   _embed_with_retry+embed_with_retry.<locals>._embed_with_retry{   s/    $$++5f5xJ4I4IJJr<   rI   rB   r   rH   r   )r   r^   r_   r;   )r9   rB   retry_decoratorra   s   `   r:   embed_with_retryre   u   sR    ~~  ''1&11-j9OK K &v&&r<   c                   ^ #    [        5       (       a$  T R                  R                  " S0 UD6I Sh  vN $ [        T 5      SU 4S jj5       nU" S0 UD6I Sh  vN $  N* N7f)r[   Nc                    >#    TR                   R                  " S0 U D6I S h  vN n[        UTR                  S9$  N7fr]   )r^   acreaterY   rX   r`   s     r:   _async_embed_with_retry7async_embed_with_retry.<locals>._async_embed_with_retry   s:     #**22<V<<xJ4I4IJJ =s    ><>rI   rc   )r   async_clientr_   rL   )r9   rB   ri   s   `  r:   async_embed_with_retryrl      sb      ~~,,33=f===J'K (K )26222 > 3s!   /A!A%A!AA!A!z0.0.9z1.0z!langchain_openai.OpenAIEmbeddings)sinceremovalalternative_importc                     \ rS rSr% Sr\" SSS9rS\S'   \" SSS9rS\S'   S	r	S
\S'   \	r
S\S'   \" SSS9rS\S'    \" SSS9rS\S'    SrS\S'   SrS\S'   SrS\S'    \" SSS9rS\S'    \" SSS9rS\S'    \" 5       rS\S'   SrS\S '   S!rS\S"'    S#rS\S$'    \" SS%S9rS&\S''    SrS\S('   SrS)\S*'    SrS\S+'    S,rS)\S-'    \" \S.9rS/\S0'    S,rS)\S1'    SrS2\S3'   Sr S4\S5'   S6r!S\S7'    S8r"S\S9'    Sr#S:\S;'    \$" SS<S=S>9r%\&" S?S@9\'SKSA j5       5       r(\)SLSB j5       r*\+SMSC j5       r,SSD.       SNSE jjr-SSD.       SNSF jjr. SO     SPSG jjr/ SO     SPSH jjr0SQSI jr1SQSJ jr2S=r3g)Rr       a  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^   rk   ztext-embedding-ada-002strmodelzOptional[str]
deploymentapi_version)rr   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_kwargsrX   zUnion[Mapping[str, str], None]default_headersz!Union[Mapping[str, object], None]default_query   r.      r/   zUnion[Any, None]http_clientforbidrI   )populate_by_nameextraprotected_namespacesbefore)modec           
     r   [        U 5      nUR                  S0 5      n[        U5       HQ  nXC;   a  [        SU S35      eXB;  d  M  [        R
                  " SU SU SU S35        UR                  U5      X4'   MS     UR                  UR                  5       5      nU(       a  [        SU S	35      eX1S'   U$ )
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_extraOpenAIEmbeddings.build_extra  s     $<C#@ 

>2.v,J" 6*5E!FGG9!* .L !))34JN
 %+JJz$:! '  8DDUZZ\R23 4S T 
 "'~r<   c           	        [        USS5      US'   US   =(       d    [        R                  " S5      US'   [        USSSS9US'   [        US	S
SS9US	'   US   S;   a  Sn[        US   S5      US'   OSn[        USSUS9US'   US   =(       d3    [        R                  " S5      =(       d    [        R                  " S5      US'    SSKn[        5       (       a  US   S;   a  [        R                  " S5        US   US   US   US   US   US   US   US   S.nUR                  S5      (       d  UR                  " S 0 UD6R                  US'   UR                  S5      (       d  UR                  " S 0 UD6R                  US'   U$ UR                  S5      (       d  UR                  US'   U$  U$ ! [         a    [        S5      ef = f)!z?Validate that api key and python package exists in environment.r   OPENAI_API_KEYr{   OPENAI_API_BASEr|   OPENAI_API_TYPE )rr   r}   OPENAI_PROXYazureazure_adazureadz
2023-05-15r   i   ry   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   )r   r   rz   r   r-   r   r   r   r^   rk   TCould not import openai python package. Please install it with `pip install openai`.rI   )r   osgetenvr%   r,   r   r   r   r   OpenAIr9   AsyncOpenAI	EmbeddingImportError)r   r   default_api_versionr,   client_paramss        r:   validate_environment%OpenAIEmbeddings.validate_environment   sG    $8$&6$
  %++<$= %
B
 ! %9	%
 ! "6	"
~ #$(HH". $'vl';T#BF< "$';  '	(
#$ () 0yy)0yy./ 	$%
!	 ~~+,0PPMMH
  &&67$*+@$A &'8 9%&78#)-#8'-.?'@%+O%<#)-#8	! zz(++'-}}'E}'E'P'PF8$zz.11-3-?-? .'. j >* 	 ZZ))#)#3#3x   A  	? 	s   F1 1Gc           	        [        5       (       a  SU R                  0U R                  EnU$ U R                  U R                  U R                  U R
                  U R                  U R                  U R                  U R                  S.U R                  EnU R                  S;   a  U R                  US'   U R                  (       a#   SS KnU R                  U R                  S.Ul        U$ ! [         a    [        S5      ef = f)Nru   )ru   r   r   r   r   api_baseapi_typerw   r   enginer   r   )httphttps)r   ru   r   r   r   r   r   r{   r|   ry   rv   r}   r,   r   proxy)selfopenai_argsr,   s      r:   _invocation_params#OpenAIEmbeddings._invocation_paramsm  s    >>!($** J8I8I JK: 5 #'#7#7<<.. $ 8 8 00 00#66
 ##
K ##'GG(,H%  ! !--!..   # %G s   C( (C>)r   c          	     	   / n/ nU R                   =(       d    U R                  nU=(       d    U R                  nU R                  (       d   SSKJn  UR                  US9n	[        U5       H  u  pU	R                  USS9n[        S[        U5      U R                  5       HF  nXXR                  -    nU	R                  U5      nUR                  U5        UR                  U
5        MH     M     O SSKn UR!                  U5      n[        U5       H  u  pU R                  R+                  S5      (       a  UR-                  SS5      nUR                  UU R.                  U R0                  S9n[        S[        U5      U R                  5       H4  nUR                  UXU R                  -    5        UR                  U
5        M6     M     U R2                  (       a$   SSKJn  U" [        S[        U5      U5      5      nO[        S[        U5      U5      n/ nU H_  n
[9        U 4SXJX-    0U R:                  D6n[=        U[>        5      (       d  UR?                  5       nURA                  S US    5       5        Ma     [        [        U5      5       Vs/ sH  n/ PM     nn[        [        U5      5       Vs/ sH  n/ PM     nn[        [        U5      5       Hb  n
U RB                  (       a  [        UU
   5      S:X  a  M(  UXZ      R                  UU
   5        UXZ      R                  [        XJ   5      5        Md     [        [        U5      5       Vs/ sH  n/ PM     nn[        [        U5      5       H  n
UU
   n[        U5      S:X  aI  [9        U 4SS0U R:                  D6n[=        U[>        5      (       d  UR?                  5       nUS   S   S   nO[D        RF                  " USUU
   S9nU[D        RH                  RK                  U5      -  RM                  5       UU
'   M     U$ ! [         a    [        S5      ef = f! [         a    [        S5      ef = f! ["         a,    [$        R'                  S	5        S
nUR)                  U5      n GNf = f! [         a    [        S[        U5      U5      n GNf = fs  snf s  snf s  snf )a  
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   AutoTokenizerzCould 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_tokensNCould 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  (   #    U H	  oS    v   M     g7frO   NrI   rQ   rs     r:   rS   <OpenAIEmbeddings._get_len_safe_embeddings.<locals>.<genexpr>       %O>Nn>N   rU   r"   r   rO   axisweights)'r   ru   r   r   transformersr   r   from_pretrained	enumerateencoderangerP   r   decodeappendtiktokenencoding_for_modelKeyErrorr6   warningget_encodingendswithreplacer   r   r   	tqdm.autor   re   r   
isinstancedictextendrX   npaveragelinalgnormtolist)r   textsr   r   tokensindices
model_name_chunk_sizer   	tokenizerir   	tokenizedjtoken_chunk
chunk_textr   encodingru   tokenr   _iterbatched_embeddingsrW   rC   resultsnum_tokens_in_batchr9   _resultaverage_embeddedr   s                                  r:   _get_len_safe_embeddings)OpenAIEmbeddings._get_len_safe_embeddings  s   & --;
 3DOO $$6 &55.8 6 I %U+%,,Te,L	 q#i.$2K2KLA"+4M4M0M"NK "+!1!1+!>JMM*-NN1% M ,8#66zB
 %U+::&&u--  <<c2D $($8$8'+'>'> (  q#e*d.G.GHAMM%0I0I,I"JKNN1% I ,$ !!;*U1c&k;?@ !S[+6E02A'1 ))H
 h--#==?%%%Ohv>N%OO  9>c%j8I+J8I1B8I+J<A#e*<M/N<Mq<M/Ns7|$A3'9!'<#=#BGJ&&'9!'<=
+223vy>B	 % 6;3u:5F(G5F5F
(Gs5z"AajG7|q #3$$ --$ 
 ""2D99'7'<'<'>$*6215kB**W1>QRS>TU$ryy~~g'>>FFHJqM # K  !V 2  !E   8VW%#00786  ;aVk:;  ,K/N )HsN   P$ 0P= 5Q "R R64R;S $P:=Q2RR R32R3c          	       #    / n/ nU R                   =(       d    U R                  nU=(       d    U R                  nU R                  (       d   SSKJn  UR                  US9n	[        U5       H  u  pU	R                  USS9n[        S[        U5      U R                  5       HF  nXXR                  -    nU	R                  U5      nUR                  U5        UR                  U
5        MH     M     O SSKn UR!                  U5      n[        U5       H  u  pU R                  R+                  S5      (       a  UR-                  SS5      nUR                  UU R.                  U R0                  S9n[        S[        U5      U R                  5       H4  nUR                  UXU R                  -    5        UR                  U
5        M6     M     / nU=(       d    U R                  n[        S[        U5      U5       Hg  n
[3        U 4SXJX-    0U R4                  D6I Sh  vN n[7        U[8        5      (       d  UR9                  5       nUR;                  S US    5       5        Mi     [        [        U5      5       Vs/ sH  n/ PM     nn[        [        U5      5       Vs/ sH  n/ PM     nn[        [        U5      5       H=  n
UXZ      R                  UU
   5        UXZ      R                  [        XJ   5      5        M?     [        [        U5      5       Vs/ sH  n/ PM     nn[        [        U5      5       H  n
UU
   n[        U5      S:X  aQ  [3        U 4SS0U R4                  D6I Sh  vN n[7        U[8        5      (       d  UR9                  5       nUS   S   S   nO[<        R>                  " USUU
   S9nU[<        R@                  RC                  U5      -  RE                  5       UU
'   M     U$ ! [         a    [        S5      ef = f! [         a    [        S5      ef = f! ["         a,    [$        R'                  S	5        S
nUR)                  U5      n GNNf = f GN@s  snf s  snf s  snf  GN7f)a4  
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   zCould 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  (   #    U H	  oS    v   M     g7fr   rI   r   s     r:   rS   =OpenAIEmbeddings._aget_len_safe_embeddings.<locals>.<genexpr>u  r   r   rU   r   rO   r   )#r   ru   r   r   r   r   r   r   r   r   r   rP   r   r   r   r   r   r   r6   r   r   r   r   r   r   rl   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  ru   r  r  rW   rC   r  r  r9   r  r  r   s                                r:   _aget_len_safe_embeddings*OpenAIEmbeddings._aget_len_safe_embeddings  sF    & --;
 3DOO $$6 &55.8 6 I %U+%,,Te,L	 q#i.$2K2KLA"+4M4M0M"NK "+!1!1+!>JMM*-NN1% M ,8#66zB
 %U+::&&u--  <<c2D $($8$8'+'>'> (  q#e*d.G.GHAMM%0I0I,I"JKNN1% I ,$ 13 3DOOq#f+{3A31 )) H h--#==?%%%Ohv>N%OO 4 9>c%j8I+J8I1B8I+J<A#e*<M/N<Mq<M/Ns7|$AGJ&&'9!'<=
+223vy>B % 6;3u:5F(G5F5F
(Gs5z"AajG7|q )?** --* $ 
 ""2D99'7'<'<'>$*6215kB**W1>QRS>TU$ryy~~g'>>FFHJqM # w  !V 2  !E   8VW%#00782 ,K/N
 )H$s   A
Q/O/ BQ/2P 7P! DQ/QAQ/9QQ/Q"'A-Q/Q'AQ/'Q,(BQ//PQ/PQ/!2QQ/QQ/Q/c                V    [        [        U R                  5      nU R                  XUS9$ )a  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   rt   rv   r  r   r  r   r   s       r:   embed_documents OpenAIEmbeddings.embed_documents  s1     c4??+,,Z - 
 	
r<   c                ^   #    [        [        U R                  5      nU R                  XUS9$ 7f)a  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_documents!OpenAIEmbeddings.aembed_documents  s4      c4??+,,Z - 
 	
s   +-c                ,    U R                  U/5      S   $ )zCall 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_queryOpenAIEmbeddings.embed_query  s     ##TF+A..r<   c                L   #    U R                  U/5      I Sh  vN nUS   $  N	7f)zCall 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_queryOpenAIEmbeddings.aembed_query  s+       00$88
!} 9s   $"
$)r   r   rH   r   )r   r   rH   r   )rH   r   )r  	List[str]r   rt   r   Optional[int]rH   List[List[float]])r   )r  r,  r   r-  rH   r.  )r   rt   rH   zList[float])4__name__
__module____qualname____firstlineno____doc__r   r^   __annotations__rk   ru   rv   ry   r{   r|   r}   r   r   r   setr   r   r   r-   r   r   r   r   r   r   r   rX   r   r   r.   r/   r   r   model_configr   classmethodr   r   r   propertyr   r  r  r!  r$  r'  r*  __static_attributes__rI   r<   r:   r    r       s   'R d3FC3dD9L#9)E3) %J%(-d-(PPS%*4z%JO]J &*O])"&L-& $#$8$)$i$HNMHO).t>)RRN7:uO4<INFNJ8K<HMIIOE GS!d!G)--J $t#8#(#>L.>VJ!6:O3:7;M4; s7s7$(K!( XB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    rH   zCallable[[Any], Any])r9   r    rH   r   )F)rW   r   rX   r   rH   r   )r9   r    rB   r   rH   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;   rL   rY   re   rl   r    rI   r<   r:   <module>rD     s    "  	      6 0 
 C B  :			8	$6"L'3 
:
vy* v
vr<   