Ë
    uPêjú,  ã                   óþ   — U d Z ddlmZmZmZ ddlZddlZddlmZ ddl	m
Z
 ddlmZmZmZmZmZmZ ddlmZmZmZ ddlmZmZ dd	lmZmZ er	dd
lmZ eZneZdZ ee!d<   dddddœZ"ee!d<    G d„ de
«      Z#e#Z$ee!d<   y)uI  
OCI Generative AI â€” Embedding transformation.

Endpoint: POST /20231130/actions/embedText
Supported models: cohere.embed-english-v3.0, cohere.embed-multilingual-v3.0,
cohere.embed-v4.0, and all other Cohere embed variants available on OCI
(including dedicated endpoints).

Authentication follows the same RSA-SHA256 / OCI SDK signer pattern as chat.
The base handler (base_llm_http_handler.embedding) calls sign_request after
building the body, so signing happens automatically.

Supported models:
- cohere.embed-english-v3.0
- cohere.embed-english-light-v3.0
- cohere.embed-multilingual-v3.0
- cohere.embed-multilingual-light-v3.0
- cohere.embed-english-image-v3.0
- cohere.embed-multilingual-image-v3.0
- cohere.embed-v4.0

Reference: https://docs.oracle.com/en-us/iaas/api/#/en/generative-ai-inference/latest/EmbedTextResult/EmbedText
é    )ÚTYPE_CHECKINGÚAnyÚFinalN)ÚBaseLLMException)ÚBaseEmbeddingConfig)ÚOCI_API_VERSIONÚOCIErrorÚget_oci_base_urlÚresolve_oci_credentialsÚsign_oci_requestÚvalidate_oci_environment)ÚOCIEmbedRequestÚOCIEmbedResponseÚOCIServingMode)ÚAllEmbeddingInputValuesÚAllMessageValues)ÚEmbeddingResponseÚUsage)ÚLoggingé`   ÚOCI_EMBED_BATCH_LIMITÚSEARCH_DOCUMENTÚSEARCH_QUERYÚCLASSIFICATIONÚ
CLUSTERING)Úsearch_documentÚsearch_queryÚclassificationÚ
clusteringÚ_INPUT_TYPE_MAPc                   ó¬  — e Zd ZdZdedee   fd„Z	 d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 ded	z  ded	z  dedededed	z  defd„Z	 	 	 	 d!d
ededededed	z  ded	z  ded	z  ded	z  deeef   fd„Zdededed
edef
d„Z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j0                  z  defd„Zy	)"ÚOCIEmbedConfiguû  
    Transformation config for OCI Generative AI embeddings.

    Supports both text and (on cohere.embed-v4.0) multimodal inputs.

    Authentication â€” same two modes as chat:
    - **OCI SDK signer**: pass ``oci_signer`` in optional_params.
    - **Manual RSA-SHA256**: pass ``oci_user``, ``oci_fingerprint``, ``oci_tenancy``,
      and ``oci_key`` or ``oci_key_file``, or set the corresponding ``OCI_*`` env vars.

    Required call-time params (via optional_params or env vars):
    - ``oci_compartment_id`` / ``OCI_COMPARTMENT_ID``
    - ``oci_region`` / ``OCI_REGION`` (default: ``us-ashburn-1``)

    Optional call-time params:
    - ``oci_serving_mode``: ``"ON_DEMAND"`` (default) or ``"DEDICATED"``
    - ``oci_endpoint_id``: endpoint OCID for dedicated serving mode
    - ``input_type``: ``SEARCH_DOCUMENT``, ``SEARCH_QUERY``, ``CLASSIFICATION``, ``CLUSTERING``
    - ``truncate``: ``NONE``, ``START``, or ``END`` (default ``END``)
    - ``dimensions``: output embedding dimensions (cohere.embed-v4.0+)
    ÚmodelÚreturnc                 ó   — dgS )NÚ
dimensions© )Úselfr#   s     új/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/oci/embed/transformation.pyÚget_supported_openai_paramsz*OCIEmbedConfig.get_supported_openai_paramsZ   s
   € Øˆ~Ðó    Únon_default_paramsÚoptional_paramsÚdrop_paramsc                 óL   — |j                  «       D ]  \  }}|dk(  sŒ||d<   Œ |S )Nr&   ÚoutputDimensions)Úitems)r(   r,   r-   r#   r.   ÚkeyÚvalues          r)   Úmap_openai_paramsz OCIEmbedConfig.map_openai_params]   s;   € ð -×2Ñ2Ó4ò 	<‰JˆC�Ø�lÓ"à6;�Ð 2Ò3ð	<ð Ðr+   NÚheadersÚmessagesÚlitellm_paramsÚapi_keyÚapi_basec                 ó   — |j                  d«      €\t        |«      }dD �	cg c]  }	|j                  |	«      s|	‘Œ }
}	|
s"|j                  d«      s|j                  d«      st        dd¬«      ‚t        |||«      S c c}	w )NÚ
oci_signer)Úoci_userÚoci_fingerprintÚoci_tenancyÚoci_compartment_idÚoci_keyÚoci_key_filei‘  aS  Missing required parameters: oci_user, oci_fingerprint, oci_tenancy, oci_compartment_id and at least one of oci_key or oci_key_file. These can be supplied via optional_params or via OCI_USER, OCI_FINGERPRINT, OCI_TENANCY, OCI_COMPARTMENT_ID, OCI_KEY_FILE environment variables. Alternatively, provide an oci_signer object from the OCI SDK.©Ústatus_codeÚmessage)Úgetr   r	   r   )r(   r5   r#   r6   r-   r7   r8   r9   ÚcredsÚkÚmissings              r)   Úvalidate_environmentz#OCIEmbedConfig.validate_environmentj   s’   € ð ×Ñ˜|Ó,Ð4Ü2°?ÓCˆEðö	àð —y‘y ”|ò ð	ˆGð 	ñ ˜uŸy™y¨Ô3°u·y±yÀÔ7PÜØ #ðXô	ð 	ô (¨°À'ÓJÐJùò+	s   ¡A;Ústreamc                 óV   — t        ||xs t        j                  «      }|› dt        › d�S )Nú/z/actions/embedText)r
   Úlitellmr9   r   )r(   r9   r8   r#   r-   r7   rJ   Úbases           r)   Úget_complete_urlzOCIEmbedConfig.get_complete_url�   s0   € ô ' ¸Ò8TÄG×DTÑDTÓUˆØ��qœÐ)Ð);Ð<Ð<r+   Úrequest_dataÚfake_streamc	           
      ó(   — t        ||||||||¬«      S )N)r5   r-   rP   r9   r8   r#   rJ   rQ   )r   )	r(   r5   r-   rP   r9   r8   r#   rJ   rQ   s	            r)   Úsign_requestzOCIEmbedConfig.sign_request™   s)   € ô  ØØ+Ø%ØØØØØ#ô	
ð 		
r+   Úinputc           
      ó€  — t        |«      }|d   }|st        dd¬«      ‚t        |t        «      r|g}not        |t        «      rSg }|D ]K  }t        |t        «      rt        dd¬«      ‚|j                  t        |t        «      r|n
t        |«      «       ŒM nt        |«      g}t        |«      t        kD  r!t        ddt        › dt        |«      › d�¬«      ‚|j                  d	d
«      j                  «       }	|	dvrt        dd¬«      ‚|	dk(  r |j                  d|«      }
t        d|
¬«      }nt        d
|¬«      }|j                  d«      }|r2t        j                  |j                  «       |j                  «       «      }t        |||||j                  dd«      |j                  d«      ¬«      }|j                  d¬«      S )Nr?   i�  z|oci_compartment_id is required for OCI embedding requests. Pass it as optional_params or set the OCI_COMPARTMENT_ID env var.rB   zmOCI embedText does not support token-array inputs. Convert token lists to strings before calling embedding().zOCI embedText accepts at most z inputs per request (got z). Batch your requests.Úoci_serving_modeÚ	ON_DEMAND>   Ú	DEDICATEDrW   z4oci_serving_mode must be 'ON_DEMAND' or 'DEDICATED'.rX   Úoci_endpoint_id)ÚservingTypeÚ
endpointId)rZ   ÚmodelIdÚ
input_typeÚtruncateÚENDr0   )ÚcompartmentIdÚservingModeÚinputsÚ	inputTyper^   r0   T)Úexclude_none)r   r	   Ú
isinstanceÚstrÚlistÚappendÚlenr   rE   Úupperr   r    Úlowerr   Ú
model_dump)r(   r#   rT   r-   r5   rF   Úcompartment_idÚtextsÚitemÚserving_mode_typeÚendpoint_idÚserving_moder]   Úrequests                 r)   Útransform_embedding_requestz*OCIEmbedConfig.transform_embedding_request¯   sá  € ô /¨Ó?ˆØ %Ð&:Ñ ;ˆÙÜØðXôð ô �eœSÔ!Ø�G‰EÜ˜œtÔ$ØˆEØò 	K�Ü˜d¤DÔ)Ü"Ø$'ðYôð ð —‘¤Z°´cÔ%:™TÄÀDÃ	ÕJñ	Kô ˜“Z�LˆEäˆu‹:Ô-Ò-ÜØà4Ô5JÐ4Kð LÜ ›J˜<Ð'>ð@ôð ð $3×#6Ñ#6Ð7IÈ;Ó#W×#]Ñ#]Ó#_ÐØÐ$>Ñ>ÜØØNôð ð
  Ò+Ø!0×!4Ñ!4Ð5FÈÓ!NˆKÜ)°kÈkÔZ‰Lä)°kÈ5ÔQˆLð %×(Ñ(¨Ó6ˆ
ÙÜ(×,Ñ,¨Z×-=Ñ-=Ó-?À×AQÑAQÓASÓTˆJä(Ø(Ø$ØØ Ø$×(Ñ(¨°UÓ;Ø,×0Ñ0Ð1CÓDô
ˆð ×!Ñ!¨tÐ!Ó4Ð4r+   Úraw_responseÚmodel_responseÚlogging_objc	                 óæ  — |j                   dk7  r!t        |j                   |j                  ¬«      ‚	 |j                  «       }		 t        d
i |	¤Ž}|j                  |_        t        |j                  «      D ��cg c]  \  }}d||dœ‘Œ c}}|_
        |j                  �)t        |j                  «      }t        ||¬«      |_        |S |j                  �<t        |j                  j                  |j                  j                   ¬«      |_        |S t        d	d	¬«      |_        |S # t        $ r}
t        |j                   d|
› �¬«      ‚d }
~
ww xY w# t        $ r}
t        dd|
› �¬«      ‚d }
~
ww xY wc c}}w )NéÈ   rB   z,Failed to parse OCI embed response as JSON: iô  z3OCI embed response does not match expected schema: Ú	embedding)ÚobjectÚindexrz   )Úprompt_tokensÚtotal_tokensr   r'   )rC   r	   ÚtextÚjsonÚ	Exceptionr   r\   r#   Ú	enumerateÚ
embeddingsÚdataÚinputTextTokenCountsÚsumr   ÚusageÚpromptTokensÚtotalTokens)r(   r#   ru   rv   rw   r8   rP   r-   r7   Újson_responseÚeÚparsedÚirz   Útotals                  r)   Útransform_embedding_responsez+OCIEmbedConfig.transform_embedding_responseø   s†  € ð ×#Ñ# sÒ*ÜØ(×4Ñ4Ø$×)Ñ)ôð ð
	Ø#/×#4Ñ#4Ó#6ˆMð	Ü,Ñ=¨}Ñ=ˆFð  &Ÿ~™~ˆÔô !*¨&×*;Ñ*;Ó <÷
ñ ��9ð	 &ØØ&óó
ˆÔð ×&Ñ&Ð2ä˜v×:Ñ:Ó;ˆEÜ#(°uÈ5Ô#QˆNÔ ð Ðð �\‰\Ð%ä#(Ø$Ÿl™l×7Ñ7Ø#Ÿ\™\×5Ñ5ô$ˆNÔ ð Ðô $)°qÀqÔ#IˆNÔ àÐøôO ò 	ÜØ(×4Ñ4ØFÀqÀcÐJôð ûð	ûô ò 	ÜØØMÈaÈSÐQôð ûð	üó
s5   ²D! ÁE Á7E-Ä!	E	Ä*EÅE	Å	E*ÅE%Å%E*Úerror_messagerC   c                 ó   — t        ||¬«      S )NrB   )r	   )r(   r�   rC   r5   s       r)   Úget_error_classzOCIEmbedConfig.get_error_class4  s   € ô  K¸ÔGÐGr+   )F)NN)N)NNNN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rf   rg   r*   ÚdictÚboolr4   r   rI   rO   ÚtupleÚbytesrS   r   rt   ÚhttpxÚResponser   ÚLiteLLMLoggingObjr�   ÚintÚHeadersr   r’   r'   r+   r)   r"   r"   C   s„  „ ñð,°ð ¸¸c¹ó ð "ñà ðð ðð ð	ð
 ðð 
óð( #Ø#ñ!Kàð!Kð ð!Kð Ð'Ñ(ð	!Kð
 ð!Kð ð!Kð �t‘ð!Kð ˜‘*ð!Kð 
ó!KðT #ñ
=à˜‘*ð
=ð �t‘ð
=ð ð	
=ð
 ð
=ð ð
=ð �t‘ð
=ð 
ó
=ð$ #Ø Ø"Ø#'ñ
àð
ð ð
ð ð	
ð
 ð
ð �t‘ð
ð �T‰zð
ð �t‘ð
ð ˜D‘[ð
ð 
ˆt�Uˆ{Ñ	ó
ð,G5àðG5ð 'ðG5ð ð	G5ð
 ðG5ð 
óG5ðR:àð:ð —n‘nð:ð *ð	:ð
 'ð:ð �t‘ð:ð ð:ð ð:ð ð:ð 
ó:ðxHàðHð ðHð ˜Ÿ™Ñ%ð	Hð
 
ôHr+   r"   ÚOCIEmbeddingConfig)%r–   Útypingr   r   r   r›   rM   Ú)litellm.llms.base_llm.chat.transformationr   Ú.litellm.llms.base_llm.embedding.transformationr   Úlitellm.llms.oci.common_utilsr   r	   r
   r   r   r   Úlitellm.types.llms.ocir   r   r   Úlitellm.types.llms.openair   r   Úlitellm.types.utilsr   r   Ú*litellm.litellm_core_utils.litellm_loggingr   Ú_LiteLLMLoggingObjr�   r   Ú__annotations__r    r"   r    r'   r+   r)   ú<module>r«      s•   ðò÷0 -Ñ ,ã ã Ý FÝ N÷÷ ÷ñ ÷
 Pß 8áÝXà*ÑàÐð  "Ð �uÓ !ð )Ø"Ø&Øñ	€�ó ôwHÐ(ô wHðv +Ð �EÔ *r+   