Ë
    uPêj   ã                   ó¬   — d Z ddlZddlZddlmZmZ ddlZddlmZ	 ddl
mZ ddlmZ ddlmZ ddlmZmZ dd	lmZmZ  G d
„ de«      Z G d„ de«      Zy)ao  
Perplexity AI Embedding API

Docs: https://docs.perplexity.ai/api-reference/embeddings-post

Supports models:
  - pplx-embed-v1-0.6b  (1024 dims, 32 K context)
  - pplx-embed-v1-4b    (2560 dims, 32 K context)

Perplexity returns embeddings as base64-encoded signed int8 values by default.
This module decodes them into float arrays for OpenAI-compatible responses.
é    N)ÚAnyÚFinal)ÚLogging)ÚBaseLLMException)ÚBaseEmbeddingConfig©Úget_secret_str)ÚAllEmbeddingInputValuesÚAllMessageValues)ÚEmbeddingResponseÚUsagec                   óJ   ‡ — e Zd Zi fdededeej                  z  fˆ fd„Zˆ xZ	S )ÚPerplexityEmbeddingErrorÚstatus_codeÚmessageÚheadersc                 óÊ   •— || _         || _        t        j                  dd¬«      | _        t        j
                  || j                  ¬«      | _        t        ‰| �!  |||¬«       y )NÚPOSTú'https://api.perplexity.ai/v1/embeddings)ÚmethodÚurl)r   Úrequest)r   r   r   )	r   r   ÚhttpxÚRequestr   ÚResponseÚresponseÚsuperÚ__init__)Úselfr   r   r   Ú	__class__s       €úu/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/perplexity/embedding/transformation.pyr   z!PerplexityEmbeddingError.__init__   sX   ø€ ð 'ˆÔØˆŒÜ—}‘}¨FÐ8aÔbˆŒÜŸ™°;ÈÏÉÔUˆŒÜ‰ÑØ#ØØð 	õ 	
ó    )
Ú__name__Ú
__module__Ú__qualname__ÚintÚstrÚdictr   ÚHeadersr   Ú__classcell__)r    s   @r!   r   r      s7   ø„ ð
 )+ñ	
àð
ð ð
ð ˜Ÿ™Ñ%÷	
ñ 
r"   r   c                   ó|  — e Zd ZdZdd„Z	 d dedz  dedz  deded	ed
edz  defd„Zdede	fd„Z
dededededef
d„Z	 	 d!dedede	e   ded	ededz  dedz  defd„Zdededededef
d„Zedede	e   fd„«       Zdi i i fdedej*                  dedededz  deded	edefd„Zdededeej4                  z  defd„Zy)"ÚPerplexityEmbeddingConfigzM
    Reference: https://docs.perplexity.ai/api-reference/embeddings-post
    ÚreturnNc                  ó   — y ©N© )r   s    r!   r   z"PerplexityEmbeddingConfig.__init__3   s   € Ør"   Úapi_baseÚapi_keyÚmodelÚoptional_paramsÚlitellm_paramsÚstreamc                 ó8   — |r|j                  d«      s|› d�}|S y)Nz/embeddingsz/v1/embeddingsr   )Úendswith)r   r1   r2   r3   r4   r5   r6   s          r!   Úget_complete_urlz*PerplexityEmbeddingConfig.get_complete_url6   s)   € ñ Ø×$Ñ$ ]Ô3Ø&˜Z ~Ð6�ØˆOØ8r"   c                 ó
   — ddgS ©NÚ
dimensionsÚencoding_formatr0   )r   r3   s     r!   Úget_supported_openai_paramsz5PerplexityEmbeddingConfig.get_supported_openai_paramsE   s   € àØð
ð 	
r"   Únon_default_paramsÚdrop_paramsc                 ób   — |j                  «       D ]  \  }}|dk(  r||d<   Œ|dk(  sŒ||d<   Œ |S r;   )Úitems)r   r?   r4   r3   r@   ÚkÚvs          r!   Úmap_openai_paramsz+PerplexityEmbeddingConfig.map_openai_paramsK   sN   € ð '×,Ñ,Ó.ò 	7‰DˆAˆqØ�LÒ Ø01� Ò-ØÐ'Ó'Ø56�Ð 1Ò2ð		7ð
 Ðr"   r   Úmessagesc                 óF   — |€t        d«      xs t        d«      }d|› �ddœS )NÚPERPLEXITYAI_API_KEYÚPERPLEXITY_API_KEYzBearer zapplication/json)ÚAuthorizationzContent-Typer   )r   r   r3   rF   r4   r5   r2   r1   s           r!   Úvalidate_environmentz.PerplexityEmbeddingConfig.validate_environmentY   s6   € ð ˆ?Ü$Ð%;Ó<ÒdÄÐOcÓ@dˆGà& w iÐ0Ø.ñ
ð 	
r"   Úinputc                 ó   — ||dœ|¥S )N)r3   rL   r0   )r   r3   rL   r4   r   s        r!   Útransform_embedding_requestz5PerplexityEmbeddingConfig.transform_embedding_requestj   s   € ð Øñ
ð ð
ð 	
r"   Úembedding_valuec                 óþ   — t        | t        «      r| S t        | t        «      rUt        j                  | «      }t        |«      }t        j                  |› d�|«      }|D �cg c]  }t        |«      dz  ‘Œ c}S | S c c}w )a  
        Decode a Perplexity embedding into a list of floats.

        Perplexity returns base64-encoded signed int8 values by default.
        If the value is already a list of numbers (e.g. from a mock or
        future float format), it is returned as-is.
        Úbg     À_@)	Ú
isinstanceÚlistr'   Úbase64Ú	b64decodeÚlenÚstructÚunpackÚfloat)rO   Ú	raw_bytesÚcountÚint8_valuesrD   s        r!   Ú_decode_base64_embeddingz2PerplexityEmbeddingConfig._decode_base64_embeddingw   sr   € ô �o¤tÔ,Ø"Ð"Ü�o¤sÔ+Ü%×/Ñ/°Ó@ˆIÜ˜y›>ˆEÜ!'§¡°%°¸¨{¸IÓ!FˆKØ.9Ö:¨”E˜!“H˜uÓ$Ò:Ð:ØÐùò ;s   Á A:Úraw_responseÚmodel_responseÚlogging_objÚrequest_datac	                 óV  — 	 |j                  «       }	|	j                  d|«      |_        |	j                  dd«      |_        |	j                  dg «      }
g }|
D ]A  }t        |«      }| j                  |j                  d«      «      |d<   |j                  |«       ŒC ||_        |	j                  di «      }t        |j                  dd	«      xs |j                  d
d	«      |j                  d
d	«      ¬«      }||_        |S # t        $ r" t        |j                  |j                  ¬«      ‚w xY w)N)r   r   r3   ÚobjectrS   ÚdataÚ	embeddingÚusageÚprompt_tokensr   Útotal_tokens)rg   rh   )ÚjsonÚ	Exceptionr   Útextr   Úgetr3   rc   r(   r]   Úappendrd   r   rf   )r   r3   r^   r_   r`   r2   ra   r4   r5   Úraw_response_jsonÚraw_dataÚdecoded_dataÚitemÚdecoded_itemÚ
usage_datarf   s                   r!   Útransform_embedding_responsez6PerplexityEmbeddingConfig.transform_embedding_response‰   s.  € ð	lØ'3×'8Ñ'8Ó':Ðð  1×4Ñ4°W¸eÓDˆÔØ 1× 5Ñ 5°hÀÓ GˆÔà+×/Ñ/°¸Ó;ˆØ46ˆØò 	.ˆDÜ ›:ˆLØ(,×(EÑ(EÀdÇhÁhÈ{ÓF[Ó(\ˆL˜Ñ%Ø×Ñ Õ-ð	.ð +ˆÔà-×1Ñ1°'¸2Ó>ˆ
ÜØ$Ÿ.™.¨¸!Ó<ÒaÀ
ÇÁÈ~Ð_`Ó@aØ#Ÿ™¨¸Ó:ô
ˆð  %ˆÔØÐøô) ò 	lÜ*°<×3DÑ3DÐR^×RjÑRjÔkÐkð	lús   ‚C= Ã=+D(Úerror_messager   c                 ó   — t        |||¬«      S )N)r   r   r   )r   )r   ru   r   r   s       r!   Úget_error_classz)PerplexityEmbeddingConfig.get_error_class¬   s   € ô (°È;Ð`gÔhÐhr"   )r-   Nr/   )NN)r#   r$   r%   Ú__doc__r   r'   r(   Úboolr9   rS   r>   rE   r   rK   r
   rN   Ústaticmethodr   rY   r]   r   r   r   ÚLiteLLMLoggingObjrt   r&   r)   r   rw   r0   r"   r!   r,   r,   .   s  „ ñóð #ñ9à˜‘*ð9ð �t‘ð9ð ð	9ð
 ð9ð ð9ð �t‘ð9ð 
ó9ð
°ð 
¸ó 
ðà ðð ðð ð	ð
 ðð 
óð* #Ø#ñ
àð
ð ð
ð Ð'Ñ(ð	
ð
 ð
ð ð
ð �t‘ð
ð ˜‘*ð
ð 
ó
ð"
àð
ð 'ð
ð ð	
ð
 ð
ð 
ó
ð ð°#ð ¸$¸u¹+ò ó ðð. #ØØ "Ø!ñ!àð!ð —n‘nð!ð *ð	!ð
 'ð!ð �t‘ð!ð ð!ð ð!ð ð!ð 
ó!ðFiàðið ðið ˜Ÿ™Ñ%ð	ið
 
ôir"   r,   )rx   rT   rW   Útypingr   r   r   Ú*litellm.litellm_core_utils.litellm_loggingr   r{   Ú)litellm.llms.base_llm.chat.transformationr   Ú.litellm.llms.base_llm.embedding.transformationr   Úlitellm.secret_managers.mainr	   Úlitellm.types.llms.openair
   r   Úlitellm.types.utilsr   r   r   r,   r0   r"   r!   ú<module>rƒ      sH   ðñó Û ß ã å SÝ FÝ NÝ 7ß Oß 8ô
Ð/ô 
ô$DiÐ 3õ Dir"   