
    i@                        S r SSKJr  SSKJrJrJrJrJr  SSK	r	SSK
Jr  SSKJrJr  SSKJr  SSKJrJrJrJr  SS	KJrJr   " S
 S\\5      r " S S\\5      r " S S\\5      r\r\r\rSr \RB                  S4\RD                  \RB                  S4\RF                  \RB                  S4\RH                  \RB                  S4\RJ                  \RB                  S4\RL                  \RB                  S4\RN                  \RB                  S4\RP                  \RR                  S4\RT                  \RR                  S4\RV                  \RR                  S4\RX                  \RR                  S4\RZ                  \RR                  S4\RL                  \RR                  S4\RP                  \RR                  S4\RN                  0r.\RB                  S4\RD                  \RB                  S4\RF                  \RB                  S4\RH                  \RB                  S4\RJ                  \RB                  S4\RL                  \RB                  S4\RN                  \RB                  S4\RP                  \RR                  S4\R^                  \RR                  S4\R`                  \RR                  S4\Rb                  \RR                  S4\Rd                  \RR                  S4\RL                  \RR                  S4\RP                  \RR                  S4\RN                  0r3S\S\S\S\S\\4   4
S jr5S\S\S\S\S\\4   4
S jr6S\S \\   S\S\S\\\4      4
S! jr7S\S \\   S\S\S\\\4      4
S" jr8S#\S$\S%\\\\4   \4   S\4S& jr9 " S' S(\5      r:g))zOpenAI embeddings file.    )Enum)AnyDictListOptionalTupleN)BaseEmbedding)FieldPrivateAttr)CallbackManager)DEFAULT_OPENAI_API_BASEDEFAULT_OPENAI_API_VERSIONcreate_retry_decoratorresolve_openai_credentials)AsyncOpenAIOpenAIc                        \ rS rSrSrSrSrSrg)OpenAIEmbeddingMode   zOpenAI embedding mode.
similaritytext_search N)__name__
__module____qualname____firstlineno____doc__SIMILARITY_MODETEXT_SEARCH_MODE__static_attributes__r       \/home/james-whalen/.local/lib/python3.13/site-packages/llama_index/embeddings/openai/base.pyr   r      s     "O$r!   r   c                   4    \ rS rSrSrSrSrSrSrSr	Sr
S	rS
rg)OpenAIEmbeddingModelType   zOpenAI embedding model type.davincicuriebabbageadatext-embedding-ada-002text-embedding-3-largetext-embedding-3-smallr   N)r   r   r   r   r   DAVINCICURIEBABBAGEADATEXT_EMBED_ADA_002TEXT_EMBED_3_LARGETEXT_EMBED_3_SMALLr    r   r!   r"   r$   r$      s+    &GEG
C111r!   r$   c                   T    \ rS rSrSrSrSrSrSrSr	Sr
S	rS
rSrSrSrSrSrSrSrSrg)OpenAIEmbeddingModeModel'   zOpenAI embedding mode model.ztext-similarity-davinci-001ztext-search-davinci-query-001ztext-search-davinci-doc-001ztext-similarity-curie-001ztext-search-curie-query-001ztext-search-curie-doc-001ztext-similarity-babbage-001ztext-search-babbage-query-001ztext-search-babbage-doc-001ztext-similarity-ada-001ztext-search-ada-query-001ztext-search-ada-doc-001r*   r+   r,   r   N)r   r   r   r   r   TEXT_SIMILARITY_DAVINCITEXT_SEARCH_DAVINCI_QUERYTEXT_SEARCH_DAVINCI_DOCTEXT_SIMILARITY_CURIETEXT_SEARCH_CURIE_QUERYTEXT_SEARCH_CURIE_DOCTEXT_SIMILARITY_BABBAGETEXT_SEARCH_BABBAGE_QUERYTEXT_SEARCH_BABBAGE_DOCTEXT_SIMILARITY_ADATEXT_SEARCH_ADA_QUERYTEXT_SEARCH_ADA_DOCr1   r2   r3   r    r   r!   r"   r5   r5   '   sm    & < ?; 8;7 < ?; 473 2 2 2r!   r5      r&   r'   r(   r)   r*   r,   r+   clienttextenginekwargsreturnc                     UR                  SS5      nU R                  R                  " SU/US.UD6R                  S   R                  $ )z
Get embedding.

NOTE: Copied from OpenAI's embedding utils:
https://github.com/openai/openai-python/blob/main/openai/embeddings_utils.py

Copied here to avoid importing unnecessary dependencies
like matplotlib, plotly, scipy, sklearn.


 inputmodelr   r   replace
embeddingscreatedata	embedding)rD   rE   rF   rG   s       r"   get_embeddingrU   s   sL     <<c"D 	  FvVFvFKKANXXr!   aclientc                    #    UR                  SS5      nU R                  R                  " SU/US.UD6I Sh  vN R                  S   R                  $  N7f)z
Asynchronously get embedding.

NOTE: Copied from OpenAI's embedding utils:
https://github.com/openai/openai-python/blob/main/openai/embeddings_utils.py

Copied here to avoid importing unnecessary dependencies
like matplotlib, plotly, scipy, sklearn.

rJ   rK   rL   Nr   r   rO   )rV   rE   rF   rG   s       r"   aget_embeddingrX      sU      <<c"D !!((NvVNvN	N	a			Ns   6AAAlist_of_textc                    [        U5      S::  d   S5       eU Vs/ s H  oDR                  SS5      PM     nnU R                  R                  " SXS.UD6R                  nU Vs/ s H  ofR
                  PM     sn$ s  snf s  snf )z
Get embeddings.

NOTE: Copied from OpenAI's embedding utils:
https://github.com/openai/openai-python/blob/main/openai/embeddings_utils.py

Copied here to avoid importing unnecessary dependencies
like matplotlib, plotly, scipy, sklearn.

rC   .The batch size should not be larger than 2048.rJ   rK   rL   r   lenrP   rQ   rR   rS   rT   )rD   rY   rF   rG   rE   rS   ds          r"   get_embeddingsr_      s     |$V&VV$8DELLs+LE##O,OOTTD!%&AKK&& F 's   A<$Bc                 (  #    [        U5      S::  d   S5       eU Vs/ s H  oDR                  SS5      PM     nnU R                  R                  " SXS.UD6I Sh  vN R                  nU Vs/ s H  ofR
                  PM     sn$ s  snf  N/s  snf 7f)z
Asynchronously get embeddings.

NOTE: Copied from OpenAI's embedding utils:
https://github.com/openai/openai-python/blob/main/openai/embeddings_utils.py

Copied here to avoid importing unnecessary dependencies
like matplotlib, plotly, scipy, sklearn.

rC   r[   rJ   rK   rL   Nr   r\   )rV   rY   rF   rG   rE   rS   r^   s          r"   aget_embeddingsra      s       |$V&VV$8DELLs+LE   ''SlSFSS
d 	 "&&AKK&& F 	T&s-   BB#BBB.B	BBmoderN   mode_model_dictc                 p    [        U 5      [        U5      4nX2;  a  [        SU 35      eX#   R                  $ )zGet engine.z!Invalid mode, model combination: )r   r$   
ValueErrorvalue)rb   rN   rc   keys       r"   
get_enginerh      sA     t$&>u&E
FC
!<SEBCC%%%r!   c            %       ^  ^  \ rS rSr% Sr\" \SS9r\\	\
4   \S'   \" SS9r\	\S'   \" \S	S
9r\\	   \S'   \" \SS
9r\\	   \S'   \" SSSS9r\\S'   \" SSSS9r\\S'   \" SSS
9r\\\	\	4      \S'   \" SSS
9r\\S'   \" SSS
9r\\   \S'   \" 5       r\	\S'   \" 5       r\	\S'   \" 5       r\\   \S '   \" 5       r\\    \S!'   \" 5       r!\\"RF                     \S"'   \" 5       r$\\"RJ                     \S#'   \&RN                  \(RR                  S$SSSSSSSSSSSSS4S%\	S&\	S'\S\\   S\\\	\
4      S\\	   S\\	   S\\	   S\S\S\S(\\*   S\\\	\	4      S)\\"RF                     S*\\"RJ                     S+\\   S,\
S-S4$U 4S. jjjr+   S@S\\	   S\\	   S\\	   S-\,\\	   \	\	4   4S/ jjr-S-\4S0 jr.S-\ 4S1 jr/S2 r0\1S-\	4S3 j5       r2SAS4\S-\\	\
4   4S5 jjr3S6\	S-\4\   4S7 jr5S6\	S-\4\   4S8 jr6S9\	S-\4\   4S: jr7S9\	S-\4\   4S; jr8S<\4\	   S-\4\4\      4S= jr9S<\4\	   S-\4\4\      4S> jr:S?r;U =r<$ )BOpenAIEmbedding   aQ  
OpenAI class for embeddings.

Args:
    mode (str): Mode for embedding.
        Defaults to OpenAIEmbeddingMode.TEXT_SEARCH_MODE.
        Options are:

        - OpenAIEmbeddingMode.SIMILARITY_MODE
        - OpenAIEmbeddingMode.TEXT_SEARCH_MODE

    model (str): Model for embedding.
        Defaults to OpenAIEmbeddingModelType.TEXT_EMBED_ADA_002.
        Options are:

        - OpenAIEmbeddingModelType.DAVINCI
        - OpenAIEmbeddingModelType.CURIE
        - OpenAIEmbeddingModelType.BABBAGE
        - OpenAIEmbeddingModelType.ADA
        - OpenAIEmbeddingModelType.TEXT_EMBED_ADA_002

z%Additional kwargs for the OpenAI API.)default_factorydescriptionadditional_kwargszThe OpenAI API key.)rm   api_keyzThe base URL for OpenAI API.)defaultrm   api_basezThe version for OpenAI API.api_version
   zMaximum number of retries.r   )rp   rm   gemax_retriesg      N@zTimeout for each request.timeoutNz%The default headers for API requests.default_headersTzReuse the OpenAI client between requests. When doing anything with large volumes of async API calls, setting this to false can improve stability.reuse_clientz^The number of dimensions on the output embedding vectors. Works only with v3 embedding models.
dimensions_query_engine_text_engine_client_aclient_http_client_async_http_clientd   rb   rN   embed_batch_sizecallback_managerhttp_clientasync_http_clientnum_workersrG   rH   c                 Z  > U=(       d    0 nUb  XES'   U R                  UUUS9u  pgn[        X[        5      n[        X[        5      nSU;   a  UR	                  S5      nU=nnOUn[
        TU ]  " SUUUUUUUUU	UU
UUS.UD6  UU l        UU l        S U l	        S U l
        Xl        Xl        g )Nry   )ro   rq   rr   
model_name)r   ry   r   r   rn   ro   rq   rr   ru   rx   rv   rw   r   r   )_resolve_credentialsrh   _QUERY_MODE_MODEL_DICT_TEXT_MODE_MODEL_DICTpopsuper__init__rz   r{   r|   r}   r~   r   )selfrb   rN   r   ry   rn   ro   rq   rr   ru   rv   rx   r   rw   r   r   r   rG   query_enginetext_enginer   	__class__s                        r"   r   OpenAIEmbedding.__init__  s    ( .3!.8l+)-)B)B# *C *
&; "$/EF .CD6!L1J)33L;J 	
-!-!/##%+#	
 	
  *''"3r!   c                     [        XU5      $ )N)r   )r   ro   rq   rr   s       r"   r   $OpenAIEmbedding._resolve_credentialsT  s     *'[IIr!   c                     U R                   (       d  [        S0 U R                  5       D6$ U R                  c  [        S0 U R                  5       D6U l        U R                  $ )Nr   )rx   r   _get_credential_kwargsr|   r   s    r"   _get_clientOpenAIEmbedding._get_client\  sN      :D779::<<!BD$?$?$ABDL||r!   c                     U R                   (       d  [        S0 U R                  SS9D6$ U R                  c  [        S0 U R                  SS9D6U l        U R                  $ )NT)is_asyncr   )rx   r   r   r}   r   s    r"   _get_aclientOpenAIEmbedding._get_aclientd  sX      L!<!<d!<!KLL== 'U$*E*Et*E*TUDM}}r!   c                 0    [        U R                  SSSSS9$ )z:Create a retry decorator using the instance's max_retries.T<      r   )ru   random_exponentialstop_after_delay_secondsmin_secondsmax_seconds)r   ru   r   s    r"   _create_retry_decorator'OpenAIEmbedding._create_retry_decoratorl  s$    %((#%'
 	
r!   c                     g)Nrj   r   )clss    r"   
class_nameOpenAIEmbedding.class_namev  s     r!   r   c                     U R                   U R                  U R                  U R                  U R                  U(       a  U R
                  S.$ U R                  S.$ )N)ro   base_urlru   rv   rw   r   )ro   rq   ru   rv   rw   r   r~   )r   r   s     r"   r   &OpenAIEmbedding._get_credential_kwargsz  sU    ||++||#336>422
 	
 EIDUDU
 	
r!   queryc                 p   ^ ^^ T R                  5       mT R                  5       nUUUU 4S j5       nU" 5       $ )zGet query embedding.c                  J   > [        T T4STR                  0TR                  D6$ NrF   )rU   rz   rn   )rD   r   r   s   r"   _retryable_get_embeddingFOpenAIEmbedding._get_query_embedding.<locals>._retryable_get_embedding  s6      )) ((	 r!   r   r   )r   r   retry_decoratorr   rD   s   ``  @r"   _get_query_embedding$OpenAIEmbedding._get_query_embedding  <    !!#668		 
	 ())r!   c                    ^ ^^#    T R                  5       mT R                  5       nUUUU 4S j5       nU" 5       I Sh  vN $  N7f)z1The asynchronous version of _get_query_embedding.c                  f   >#    [        T T4STR                  0TR                  D6I S h  vN $  N7fr   )rX   rz   rn   )rV   r   r   s   r"   _retryable_aget_embeddingHOpenAIEmbedding._aget_query_embedding.<locals>._retryable_aget_embedding  sC     ' )) ((	      '1/1Nr   r   )r   r   r   r   rV   s   ``  @r"   _aget_query_embedding%OpenAIEmbedding._aget_query_embedding  E     ##%668		 
	 /0000   8AAArE   c                 p   ^ ^^ T R                  5       mT R                  5       nUUU U4S j5       nU" 5       $ )zGet text embedding.c                  J   > [        T T4STR                  0TR                  D6$ r   )rU   r{   rn   )rD   r   rE   s   r"   r   EOpenAIEmbedding._get_text_embedding.<locals>._retryable_get_embedding  s6      (( ((	 r!   r   )r   rE   r   r   rD   s   ``  @r"   _get_text_embedding#OpenAIEmbedding._get_text_embedding  r   r!   c                    ^ ^^#    T R                  5       mT R                  5       nUUU U4S j5       nU" 5       I Sh  vN $  N7f)z"Asynchronously get text embedding.c                  f   >#    [        T T4STR                  0TR                  D6I S h  vN $  N7fr   )rX   r{   rn   )rV   r   rE   s   r"   r   GOpenAIEmbedding._aget_text_embedding.<locals>._retryable_aget_embedding  sC     ' (( ((	   r   Nr   )r   rE   r   r   rV   s   ``  @r"   _aget_text_embedding$OpenAIEmbedding._aget_text_embedding  r   r   textsc                 p   ^ ^^ T R                  5       mT R                  5       nUUU U4S j5       nU" 5       $ )zw
Get text embeddings.

By default, this is a wrapper around _get_text_embedding.
Can be overridden for batch queries.

c                  J   > [        T T4STR                  0TR                  D6$ r   )r_   r{   rn   )rD   r   r   s   r"   _retryable_get_embeddingsGOpenAIEmbedding._get_text_embeddings.<locals>._retryable_get_embeddings  s6    ! (( ((	 r!   r   )r   r   r   r   rD   s   ``  @r"   _get_text_embeddings$OpenAIEmbedding._get_text_embeddings  s>     !!#668		 
	 )**r!   c                    ^ ^^#    T R                  5       mT R                  5       nUUU U4S j5       nU" 5       I Sh  vN $  N7f)z#Asynchronously get text embeddings.c                  f   >#    [        T T4STR                  0TR                  D6I S h  vN $  N7fr   )ra   r{   rn   )rV   r   r   s   r"   _retryable_aget_embeddingsIOpenAIEmbedding._aget_text_embeddings.<locals>._retryable_aget_embeddings  sC     ( (( ((	   r   Nr   )r   r   r   r   rV   s   ``  @r"   _aget_text_embeddings%OpenAIEmbedding._aget_text_embeddings  sE     ##%668		 
	 01111r   )r}   r   r|   r~   rz   r{   )NNN)F)=r   r   r   r   r   r
   dictrn   r   strr   __annotations__ro   r   rq   r   r   rr   ru   intrv   floatrw   rx   boolry   r   rz   r{   r|   r   r}   r   r~   httpxClientr   AsyncClientr   r   r$   r1   r   r   r   r   r   r   r   classmethodr   r   r   r   r   r   r   r   r   r    __classcell__)r   s   @r"   rj   rj      s   . ).*Q)tCH~  %:;GS;#'5SHhsm  "'*8U"K#  R5QVWXKX45PUVWGUW05"I1OXd38n-  WL$  !&3!J  %M3&#L#% +GXf-&1mHh{#3+6=L(5<<(86Am!2!23C (88-@@ #$(6:!%"&%)!6:48.29=%)#=4=4 =4 	=4
 SM=4 $DcN3=4 #=4 3-=4 c]=4 =4 =4 =4 #?3=4 "$sCx.1=4 ell+=4  $E$5$56!=4" c]#=4$ %=4& 
'=4 =4B "&"&%)	J#J 3-J c]	J
 
x}c3&	'JV k 
 !3 ! !
t 
S#X 
*# *$u+ * 1 1e 1 * *U * 1s 1tE{ 1 +$s) +T%[8I +,2c 2tDK?P 2 2r!   rj   );r   enumr   typingr   r   r   r   r   r   %llama_index.core.base.embeddings.baser	    llama_index.core.bridge.pydanticr
   r   llama_index.core.callbacks.baser   #llama_index.embeddings.openai.utilsr   r   r   r   openair   r   r   r   r$   r5   OAEMOAEMTOAEMMEMBED_MAX_TOKEN_LIMITr   r7   r:   r=   r@   r1   r3   r2   r   r8   r;   r>   rA   r   r9   r<   r?   rB   r   r   rU   rX   r_   ra   rh   rj   r   r!   r"   <module>r      s     3 3  ? ? ;  '%#t %	2sD 	22sD 2D     
9%u'D'D	7#U%@%@	9%u'D'D	5!5#<#<	34e6N6N	34e6N6N	34e6N6N	I&(G(G	G$e&C&C	I&(G(G	E"E$?$?	45u7O7O	45u7O7O	45u7O7O $ 
9%u'D'D	7#U%@%@	9%u'D'D	5!5#<#<	34e6N6N	34e6N6N	34e6N6N	I&(E(E	G$e&A&A	I&(E(E	E"E$=$=	45u7O7O	45u7O7O	45u7O7O $&  S C DQVK $ #-0<?	%[,''"&s)'58'DG'	$u+'*''s)' ' 	'
 
$u+'4	&
	&	& % 3S 89;SST	& 			&R2m R2r!   