
    @'h@                     
   d Z ddl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 ddlmZ ddlmZmZmZmZ dd	lmZmZ  G d
 dee      Z G d dee      Z G d dee      ZeZeZeZdZ ejB                  dfejD                  ejB                  dfejF                  ejB                  dfejH                  ejB                  dfejJ                  ejB                  dfejL                  ejB                  dfejN                  ejB                  dfejP                  ejR                  dfejT                  ejR                  dfejV                  ejR                  dfejX                  ejR                  dfejZ                  ejR                  dfejL                  ejR                  dfejP                  ejR                  dfejN                  iZ.ejB                  dfejD                  ejB                  dfejF                  ejB                  dfejH                  ejB                  dfejJ                  ejB                  dfejL                  ejB                  dfejN                  ejB                  dfejP                  ejR                  dfej^                  ejR                  dfej`                  ejR                  dfejb                  ejR                  dfejd                  ejR                  dfejL                  ejR                  dfejP                  ejR                  dfejN                  iZ3dededededee4   f
dZ5dededededee4   f
dZ6ded ee   dededeee4      f
d!Z7ded ee   dededeee4      f
d"Z8d#ed$ed%eeeef   ef   defd&Z9 G d' d(e      Z:y))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                       e Zd ZdZdZdZy)OpenAIEmbeddingModezOpenAI embedding mode.
similaritytext_searchN)__name__
__module____qualname____doc__SIMILARITY_MODETEXT_SEARCH_MODE     i/home/kushmeetdev/Regenta/Chatbot/venv/lib/python3.12/site-packages/llama_index/embeddings/openai/base.pyr   r      s     "O$r   r   c                   ,    e Zd ZdZdZdZdZdZdZdZ	dZ
y	)
OpenAIEmbeddingModelTypezOpenAI embedding model type.davincicuriebabbageadatext-embedding-ada-002text-embedding-3-largetext-embedding-3-smallN)r   r   r   r   DAVINCICURIEBABBAGEADATEXT_EMBED_ADA_002TEXT_EMBED_3_LARGETEXT_EMBED_3_SMALLr   r   r   r!   r!      s+    &GEG
C111r   r!   c                   L    e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdZy)OpenAIEmbeddingModeModelz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(   N)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_DOCr-   r.   r/   r   r   r   r1   r1   '   sm    & < ?; 8;7 < ?; 473 2 2 2r   r1      r"   r#   r$   r%   r&   r(   r'   clienttextenginekwargsreturnc                     |j                  dd      } | j                  j                  d|g|d|j                  d   j                  S )a   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)r?   r@   rA   rB   s       r   get_embeddingrP   s   sN     <<c"D 	!  FvVFvFKKANXXr   aclientc                    K   |j                  dd      } | j                  j                  d|g|d| d{   j                  d   j                  S 7 w)a  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.

    rE   rF   rG   Nr   r   rJ   )rQ   r@   rA   rB   s       r   aget_embeddingrS      sX      <<c"D )w!!((NvVNvN	N	a			Ns   6AAAlist_of_textc                    t        |      dk  sJ d       |D cg c]  }|j                  dd       }} | j                  j                  d||d|j                  }|D cg c]  }|j
                   c}S c c}w c c}w )a  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.

    r>   .The batch size should not be larger than 2048.rE   rF   rG   r   lenrK   rL   rM   rN   rO   )r?   rT   rA   rB   r@   rN   ds          r   get_embeddingsrZ      s     |$V&VV$8DEDLLs+ELE#6##O,fOOTTD!%&AAKK&& F 's   A8"A=c                    K   t        |      dk  sJ d       |D cg c]  }|j                  dd       }} | j                  j                  d||d| d{   j                  }|D cg c]  }|j
                   c}S c c}w 7 -c c}w w)a  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.

    r>   rV   rE   rF   rG   Nr   rW   )rQ   rT   rA   rB   r@   rN   rY   s          r   aget_embeddingsr\      s      |$V&VV$8DEDLLs+ELE (g  ''Sl&SFSS
d 	 "&&AAKK&& F 	T&s-   BB$BBB,B	?	B	BmoderI   mode_model_dictc                 p    t        |       t        |      f}||vrt        d|       ||   j                  S )zGet engine.z!Invalid mode, model combination: )r   r!   
ValueErrorvalue)r]   rI   r^   keys       r   
get_enginerc      sE     t$&>u&E
FC
/!<SEBCC3%%%r   c            %       l    e Zd ZU dZ eed      Zeee	f   e
d<    ed      Zee
d<    eed	      Zee   e
d
<    eed	      Zee   e
d<    eddd      Zee
d<    eddd      Zee
d<    edd	      Zeeeef      e
d<    edd	      Zee
d<    edd	      Zee   e
d<    e       Zee
d<    e       Zee
d<    e       Zee   e
d<    e       Zee   e
d <    e       Z ee!jD                     e
d!<    e       Z#ee!jH                     e
d"<   e%jL                  e'jP                  d#dddddddddddddfd$ed%ed&edee   deeee	f      dee   d
ee   dee   dededed'ee)   deeeef      d(ee!jD                     d)ee!jH                     d*ee   d+e	d,df$ fd-Z*	 	 	 d>dee   d
ee   dee   d,e+ee   eef   fd.Z,d,efd/Z-d,efd0Z.d1 Z/e0d,efd2       Z1d?d3ed,eee	f   fd4Z2d5ed,e3e   fd6Z4d5ed,e3e   fd7Z5d8ed,e3e   fd9Z6d8ed,e3e   fd:Z7d;e3e   d,e3e3e      fd<Z8d;e3e   d,e3e3e      fd=Z9 xZ:S )@OpenAIEmbeddinga  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.)rg   api_keyzThe base URL for OpenAI API.)defaultrg   api_basezThe version for OpenAI API.api_version
   zMaximum number of retries.r   )rj   rg   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   r]   rI   embed_batch_sizecallback_managerhttp_clientasync_http_clientnum_workersrB   rC   c                 Z   |xs i }|||d<   | j                  |||      \  }}}t        ||t              }t        ||t              }d|v r|j	                  d      }|x}}n|}t        |   d|||||||||	||
||d| || _        || _        d | _	        d | _
        || _        || _        y )Nrs   )ri   rk   rl   
model_name)r{   rs   r|   r   rh   ri   rk   rl   ro   rr   rp   rq   r   r   )_resolve_credentialsrc   _QUERY_MODE_MODEL_DICT_TEXT_MODE_MODEL_DICTpopsuper__init__rt   ru   rv   rw   rx   ry   )selfr]   rI   r{   rs   rh   ri   rk   rl   ro   rp   rr   r|   rq   r}   r~   r   rB   query_enginetext_enginer   	__class__s                        r   r   zOpenAIEmbedding.__init__  s    ( .3!.8l+)-)B)B# *C *
&; "$/EF u.CD6!L1J)33L;J 	
-!-!/##%+#	
 	
  *''"3r   c                     t        |||      S )N)r   )r   ri   rk   rl   s       r   r   z$OpenAIEmbedding._resolve_credentialsN  s     *'8[IIr   c                     | j                   st        di | j                         S | j                  t        di | j                         | _        | j                  S )Nr   )rr   r   _get_credential_kwargsrv   r   s    r   _get_clientzOpenAIEmbedding._get_clientV  sN      :D779::<<!BD$?$?$ABDL||r   c                     | j                   st        di | j                  d      S | j                   t        di | j                  d      | _        | j                  S )NT)is_asyncr   )rr   r   r   rw   r   s    r   _get_aclientzOpenAIEmbedding._get_aclient^  sX      L!<!<d!<!KLL== 'U$*E*Et*E*TUDM}}r   c                 6    t        | j                  dddd      S )z:Create a retry decorator using the instance's max_retries.T<         )ro   random_exponentialstop_after_delay_secondsmin_secondsmax_seconds)r   ro   r   s    r   _create_retry_decoratorz'OpenAIEmbedding._create_retry_decoratorf  s$    %((#%'
 	
r   c                      y)Nre   r   )clss    r   
class_namezOpenAIEmbedding.class_namep  s     r   r   c                     | j                   | j                  | j                  | j                  | j                  |r| j
                  dS | j                  dS )N)ri   base_urlro   rp   rq   r}   )ri   rk   ro   rp   rq   ry   rx   )r   r   s     r   r   z&OpenAIEmbedding._get_credential_kwargst  sU    ||++||#336>422
 	
 EIDUDU
 	
r   queryc                 n      j                          j                         }| fd       } |       S )zGet query embedding.c                  J    t         fdj                  ij                  S NrA   )rP   rt   rh   )r?   r   r   s   r   _retryable_get_embeddingzFOpenAIEmbedding._get_query_embedding.<locals>._retryable_get_embedding  s6      )) ((	 r   r   r   )r   r   retry_decoratorr   r?   s   ``  @r   _get_query_embeddingz$OpenAIEmbedding._get_query_embedding~  <    !!#668		 
	 ())r   c                     K    j                          j                         }| fd       } |        d{   S 7 w)z1The asynchronous version of _get_query_embedding.c                  f   K   t         fdj                  ij                   d {   S 7 wr   )rS   rt   rh   )rQ   r   r   s   r   _retryable_aget_embeddingzHOpenAIEmbedding._aget_query_embedding.<locals>._retryable_aget_embedding  sD     ' )) ((	      '1/1Nr   r   )r   r   r   r   rQ   s   ``  @r   _aget_query_embeddingz%OpenAIEmbedding._aget_query_embedding  F     ##%668		 
	 /0000   7AAAr@   c                 n      j                          j                         }| fd       } |       S )zGet text embedding.c                  J    t         fdj                  ij                  S r   )rP   ru   rh   )r?   r   r@   s   r   r   zEOpenAIEmbedding._get_text_embedding.<locals>._retryable_get_embedding  s6      (( ((	 r   r   )r   r@   r   r   r?   s   ``  @r   _get_text_embeddingz#OpenAIEmbedding._get_text_embedding  r   r   c                     K    j                          j                         }| fd       } |        d{   S 7 w)z"Asynchronously get text embedding.c                  f   K   t         fdj                  ij                   d {   S 7 wr   )rS   ru   rh   )rQ   r   r@   s   r   r   zGOpenAIEmbedding._aget_text_embedding.<locals>._retryable_aget_embedding  sD     ' (( ((	   r   Nr   )r   r@   r   r   rQ   s   ``  @r   _aget_text_embeddingz$OpenAIEmbedding._aget_text_embedding  r   r   textsc                 n      j                          j                         }| fd       } |       S )zGet text embeddings.

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

        c                  J    t         fdj                  ij                  S r   )rZ   ru   rh   )r?   r   r   s   r   _retryable_get_embeddingszGOpenAIEmbedding._get_text_embeddings.<locals>._retryable_get_embeddings  s6    ! (( ((	 r   r   )r   r   r   r   r?   s   ``  @r   _get_text_embeddingsz$OpenAIEmbedding._get_text_embeddings  s>     !!#668		 
	 )**r   c                     K    j                          j                         }| fd       } |        d{   S 7 w)z#Asynchronously get text embeddings.c                  f   K   t         fdj                  ij                   d {   S 7 wr   )r\   ru   rh   )rQ   r   r   s   r   _retryable_aget_embeddingszIOpenAIEmbedding._aget_text_embeddings.<locals>._retryable_aget_embeddings  sD     ( (( ((	   r   Nr   )r   r   r   r   rQ   s   ``  @r   _aget_text_embeddingsz%OpenAIEmbedding._aget_text_embeddings  sF     ##%668		 
	 01111r   )NNN)F);r   r   r   r   r
   dictrh   r   strr   __annotations__ri   r   rk   r   r   rl   ro   intrp   floatrq   rr   boolrs   r   rt   ru   rv   r   rw   r   rx   httpxClientry   AsyncClientr   r   r!   r-   r   r   r   r   r   r   r   classmethodr   r   r   r   r   r   r   r   r   __classcell__)r   s   @r   re   re      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& 
'=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 2r   re   );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!   r1   OAEMOAEMTOAEMMEMBED_MAX_TOKEN_LIMITr   r2   r5   r8   r;   r-   r/   r.   r   r3   r6   r9   r<   r   r4   r7   r:   r=   r   r   rP   rS   rZ   r\   rc   re   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+'2	&
	&	& % 3S 89;SST	& 			&O2m O2r   