Ë
    kQêjp  ã                   óŒ   — d dl mZ d dl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 erd dlZ ed	«       G d
„ de«      «       Zy)é    )Úcached_property)ÚTYPE_CHECKINGÚListÚOptionalÚUnionNé   )Úattempt_import_or_raiseé   )ÚTextEmbeddingFunction)ÚregisterÚopenaic                   ó  — e Zd ZU dZdZeed<   dZee	   ed<   dZ
ee   ed<   dZee   ed<   dZee   ed<   dZee   ed	<   d
Zeed<   d„ Zed„ «       Zdee   fd„Zed„ «       Zed„ «       Zdeee   df   ded   fd„Zed„ «       Zy)ÚOpenAIEmbeddingsa¡  
    An embedding function that uses the OpenAI API

    https://platform.openai.com/docs/guides/embeddings

    This can also be used for open source models that
    are compatible with the OpenAI API.

    Notes
    -----
    If you're running an Ollama server locally,
    you can just override the `base_url` parameter
    and provide the Ollama embedding model you want
    to use (https://ollama.com/library):

    ```python
    from lancedb.embeddings import get_registry
    openai = get_registry().get("openai")
    embedding_function = openai.create(
        name="<ollama-embedding-model-name>",
        base_url="http://localhost:11434",
        )
    ```

    útext-embedding-ada-002ÚnameNÚdimÚbase_urlÚdefault_headersÚorganizationÚapi_keyFÚ	use_azurec                 ó   — | j                   S ©N)Ú_ndims©Úselfs    ú^/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/lancedb/embeddings/openai.pyÚndimszOpenAIEmbeddings.ndims6   s   € Ø�{‰{Ðó    c                  ó   — dgS )Nr   © r!   r   r   Úsensitive_keyszOpenAIEmbeddings.sensitive_keys9   s
   € àˆ{Ðr   Úreturnc                 ó8   — | j                   r| j                   gS g S r   )r   r   s    r   Ú	endpointszOpenAIEmbeddings.endpoints=   s   € Ø"&§-¢-�—‘ˆÐ7°RÐ7r   c                  ó
   — g d¢S )N)r   útext-embedding-3-largeútext-embedding-3-smallr!   r!   r   r   Úmodel_nameszOpenAIEmbeddings.model_names@   s   € ò
ð 	
r   c                 óÎ   — | j                   dk(  ry| j                   dk(  r| j                  xs dS | j                   dk(  r| j                  xs dS t        d| j                   › �«      ‚)Nr   i   r'   i   r(   zUnknown model name )r   r   Ú
ValueErrorr   s    r   r   zOpenAIEmbeddings._ndimsH   sa   € à�9‰9Ð0Ò0ØØ�Y‰YÐ2Ò2Ø—8‘8Ò#˜tÐ#Ø�Y‰YÐ2Ò2Ø—8‘8Ò#˜tÐ#äÐ2°4·9±9°+Ð>Ó?Ð?r   Útextsz
np.ndarrayznp.arrayc                 ó8  ‡ ‡‡	— t        d«      Š	g }g }t        |«      D ]*  \  }}|sŒ	|j                  |«       |j                  |«       Œ, ˆ fd„Šˆˆ	fd„}	  ‰||«      }t        t        |«      «      D �cg c]  }|j                  |d«      ‘Œ c}S # ‰	j                  $ r t	        j
                  d«       ‚ ‰	j                  $ r1 i }t        ||«      D ]  \  }}|j                   |||«      «       Œ Y Œ•t        $ r t	        j                  d«       ‚ w xY wc c}w )z®
        Get the embeddings for the given texts

        Parameters
        ----------
        texts: list[str] or np.ndarray (of str)
            The texts to embed
        r   c                 ó  •— | ‰j                   dœ}‰j                   dk7  r‰j                  |d<    ‰j                  j                  j                  di |¤Ž}t        |j                  |«      D ��ci c]  \  }}||j                  “Œ c}}S c c}}w )N)ÚinputÚmodelr   Ú
dimensionsr!   )r   r   Ú_openai_clientÚ
embeddingsÚcreateÚzipÚdataÚ	embedding)Útexts_batchÚindices_batchÚkwargsÚrsÚvÚidxr   s         €r   Úembed_batchz9OpenAIEmbeddings.generate_embeddings.<locals>.embed_batchh   s~   ø€ à$ØŸ™ñˆFð �y‰yÐ4Ò4Ø'+§x¡x��|Ñ$à6�×$Ñ$×/Ñ/×6Ñ6Ñ@¸Ñ@ˆBÜ36°r·w±wÀÓ3N×O©¨¨C�C˜Ÿ™Ñ$ÓOÐOùÓOs   Á.B	c                 óx   •— 	  ‰|g| g«      S # ‰j                   $ r t        j                  d| |«       i cY S w xY w)Nz%Bad request for input at index %d: %r)ÚBadRequestErrorÚloggingÚ	exception)r=   Útextr>   r   s     €€r   Úembed_one_or_logz>OpenAIEmbeddings.generate_embeddings.<locals>.embed_one_or_logs   sG   ø€ ðÙ" D 6¨C¨5Ó1Ð1øØ×)Ñ)ò Ü×!Ñ!Ð"IÈ3ÐPTÔUØ’	ðús   ƒ
 Ž(9¸9z/Authentication failed: Invalid API key providedzOpenAI embeddings errorN)r	   Ú	enumerateÚappendÚAuthenticationErrorrA   Úerrorr@   r5   ÚupdateÚ	ExceptionrB   ÚrangeÚlenÚget)
r   r,   Úvalid_textsÚvalid_indicesr=   rC   rD   Úvalid_embeddingsr>   r   s
   `       @@r   Úgenerate_embeddingsz$OpenAIEmbeddings.generate_embeddingsS   s%  ú€ ô )¨Ó2ˆàˆØˆÜ" 5Ó)ò 	*‰IˆC�ÚØ×"Ñ" 4Ô(Ø×$Ñ$ SÕ)ð	*ô		Põ	ð	Ù*¨;¸ÓFÐô <AÄÀUÃÓ;LÖM°CÐ ×$Ñ$ S¨$Õ/ÒMÐMøð ×)Ñ)ò 	Ü�M‰MÐKÔLØØ×%Ñ%ò 	Eà!ÐÜ  °Ó<ò E‘	��TØ ×'Ñ'Ñ(8¸¸dÓ(CÕDòEäò 	Ü×ÑÐ7Ô8Øð	üò Ns   Á	B Á6DÂA!DÃ5Dc                 óT  — t        d«      }i }| j                  r| j                  |d<   | j                  r| j                  |d<   | j                  r| j                  |d<   | j                  r| j                  |d<   | j
                  r |j                  di |¤ŽS  |j                  di |¤ŽS )Nr   r   r   r   r   r!   )r	   r   r   r   r   r   ÚAzureOpenAIÚOpenAI)r   r   r:   s      r   r2   zOpenAIEmbeddings._openai_clientŠ   sŸ   € ä(¨Ó2ˆØˆØ�=Š=Ø!%§¡ˆF�:ÑØ×ÒØ(,×(<Ñ(<ˆFÐ$Ñ%Ø×ÒØ%)×%6Ñ%6ˆF�>Ñ"Ø�<Š<Ø $§¡ˆF�9Ñà�>Š>Ø%�6×%Ñ%Ñ/¨Ñ/Ð/à �6—=‘=Ñ* 6Ñ*Ð*r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚstrÚ__annotations__r   r   Úintr   r   Údictr   r   r   Úboolr   Ústaticmethodr"   r   r%   r)   r   r   r   rQ   r2   r!   r   r   r   r      sø   … ñð4 )€Dˆ#Ó(Ø€Cˆ�#‰ÓØ"€Hˆh�s‰mÓ"Ø&*€O�X˜d‘^Ó*Ø"&€L�(˜3‘-Ó&Ø!€GˆX�c‰]Ó!ð €IˆtÓòð ñó ðð8˜4 ™9ó 8ð ñ
ó ð
ð ñ@ó ð@ð5NØ˜4 ™9 lÐ2Ñ3ð5Nà	ˆjÑ	ó5Nðn ñ+ó ñ+r   r   )Ú	functoolsr   Útypingr   r   r   r   rA   Úutilr	   Úbaser   Úregistryr   ÚnumpyÚnpr   r!   r   r   ú<module>rf      sF   ðõ &ß 7Ó 7Û å *Ý 'Ý áÛñ 
ˆ(ÓôI+Ð,ó I+ó ñI+r   