Ë
    uPêjÎ:  ã                   ó   — d dl Z d dlmZmZ d dlmZ d dl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 d d	lmZ d
dlmZ ddlmZmZmZmZ erd dlZd dlm Z! e!Z"neZ" G d„ dee«      Z# G d„ de«      Z$y)é    N)ÚAsyncIteratorÚIterator)Údatetime)ÚTYPE_CHECKINGÚAnyÚFinal)ÚBaseModelResponseIterator)ÚAllMessageValuesÚChatCompletionUsageBlock)ÚWatsonXAIEndpoint)ÚGenericStreamingChunkÚModelResponseÚUsage)Úmap_finish_reasoné   )Ú
BaseConfigé   )ÚIBMWatsonXMixinÚWatsonXAIErrorÚ_get_api_paramsÚ"convert_watsonx_messages_to_prompt)ÚLoggingc            !       óâ  ‡ — e Zd ZU dZdZedz  ed<   dZedz  ed<   dZ	e
dz  ed<   dZe
dz  ed<   dZedz  ed<   dZee   dz  ed	<   dZe
dz  ed
<   dZedz  ed<   dZedz  ed<   dZe
dz  ed<   dZedz  ed<   dZeeef   dz  ed<   dZe
dz  ed<   dZedz  ed<   dZedz  ed<   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d8dedz  dedz  de
dz  de
dz  dedz  d	ee   dz  d
e
dz  dedz  dedz  de
dz  dedz  dedz  de
dz  dedz  dedz  ddf d„Zeˆ fd„«       Zdedefd„Zdefd„Zdededededef
d„Zdefd„Z dedefd „Z!dee   fd!„Z"dee   fd"„Z#ded#ededefd$„Z$ded%ee%   ded&ed'edefd(„Z&ded%ee%   ded&ed'edefd)„Z'	 	 d9ded*e(jR                  d+e*d,e+d-ed%ee%   ded&ed.d/d0edz  d1edz  de*fd2„Z,	 d:d3edz  d0edz  deded&ededz  defd4„Z-	 d;d5e.e   e/e   z  e*z  d6ed1edz  fd7„Z0ˆ xZ1S )<ÚIBMWatsonXAIConfiga³  
    Reference: https://cloud.ibm.com/apidocs/watsonx-ai#text-generation
    (See ibm_watsonx_ai.metanames.GenTextParamsMetaNames for a list of all available params)

    Supported params for all available watsonx.ai foundational models.

    - `decoding_method` (str): One of "greedy" or "sample"

    - `temperature` (float): Sets the model temperature for sampling - not available when decoding_method='greedy'.

    - `max_new_tokens` (integer): Maximum length of the generated tokens.

    - `min_new_tokens` (integer): Maximum length of input tokens. Any more than this will be truncated.

    - `length_penalty` (dict): A dictionary with keys "decay_factor" and "start_index".

    - `stop_sequences` (string[]): list of strings to use as stop sequences.

    - `top_k` (integer): top k for sampling - not available when decoding_method='greedy'.

    - `top_p` (integer): top p for sampling - not available when decoding_method='greedy'.

    - `repetition_penalty` (float): token repetition penalty during text generation.

    - `truncate_input_tokens` (integer): Truncate input tokens to this length.

    - `include_stop_sequences` (bool): If True, the stop sequence will be included at the end of the generated text in the case of a match.

    - `return_options` (dict): A dictionary of options to return. Options include "input_text", "generated_tokens", "input_tokens", "token_ranks". Values are boolean.

    - `random_seed` (integer): Random seed for text generation.

    - `moderations` (dict): Dictionary of properties that control the moderations, for usages such as Hate and profanity (HAP) and PII filtering.

    - `stream` (bool): If True, the model will return a stream of responses.
    ÚsampleNÚdecoding_methodÚtemperatureÚmax_new_tokensÚmin_new_tokensÚlength_penaltyÚstop_sequencesÚtop_kÚtop_pÚrepetition_penaltyÚtruncate_input_tokensFÚinclude_stop_sequencesÚreturn_optionsÚrandom_seedÚmoderationsÚstreamÚreturnc                 ó¤   — t        «       j                  «       }|j                  «       D ]%  \  }}|dk7  sŒ|€Œt        | j                  ||«       Œ' y )NÚself)ÚlocalsÚcopyÚitemsÚsetattrÚ	__class__)r-   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   ÚkwargsÚlocals_ÚkeyÚvalues                       ús/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/watsonx/completion/transformation.pyÚ__init__zIBMWatsonXAIConfig.__init__V   sF   € ô&  ›Ÿ™›ˆØ!Ÿ-™-›/ò 	4‰JˆC�Ø�f‹} Ñ!2Ü˜Ÿ™¨¨UÕ3ñ	4ó    c                 ó    •— t         ‰| �  «       S ©N)ÚsuperÚ
get_config)Úclsr2   s    €r7   r=   zIBMWatsonXAIConfig.get_confign   s   ø€ ä‰wÑ!Ó#Ð#r9   Úparamc                 ó   — g d¢}||v S )zP
        Determine if user passed in a watsonx.ai text generation param
        )r   r   r   r    r!   r"   r$   r%   r&   r'   r(   r)   r   Ú
min_tokens© )r-   r?   Útext_generation_paramss      r7   Úis_watsonx_text_paramz(IBMWatsonXAIConfig.is_watsonx_text_paramr   s   € ò)
Ðð" Ð.Ð.Ð.r9   Úmodelc                 ó
   — g d¢S )N)r   Ú
max_tokensr#   Úfrequency_penaltyÚstopÚseedr*   rB   )r-   rE   s     r7   Úget_supported_openai_paramsz.IBMWatsonXAIConfig.get_supported_openai_params‰   s   € ò
ð 	
r9   Únon_default_paramsÚoptional_paramsÚdrop_paramsc                 ó|  — i }|j                  «       D ]Ÿ  \  }}|dk(  r||d<   Œ|dk(  r||d<   Œ|dk(  r||d<   Œ'|dk(  r||d<   Œ2|dk(  r||d<   Œ=|dk(  r||d	<   ŒH|d
k(  r||d<   ŒS|dk(  r||d<   Œ^|dk(  r||d<   Œi|dk(  r||d<   Œt|dk(  r||d<   Œ|dk(  r||d<   ŒŠ|dk(  r||d<   Œ•|dk(  sŒ›||d<   Œ¡ |r||d<   |S )NrG   r   r*   r   r#   rH   r$   rJ   r(   rI   r!   r   rA   r   r"   r%   r    Ú
time_limitr'   Ú
extra_body)r0   )r-   rL   rM   rE   rN   rQ   ÚkÚvs           r7   Úmap_openai_paramsz$IBMWatsonXAIConfig.map_openai_params”   s>  € ð ˆ
Ø&×,Ñ,Ó.ò 	1‰DˆAˆqØ�LÒ Ø45�Ð 0Ò1Ø�h’Ø,-� Ò)Ø�mÒ#Ø12� Ò.Ø�g’Ø+,� Ò(ØÐ)Ò)Ø89�Ð 4Ò5Ø�f’Ø12� Ò.Ø�f’Ø45�Ð 0Ò1ØÐ'Ò'Ø01�
Ð,Ò-Ø�lÒ"Ø/0�
Ð+Ò,Ø�g’Ø&'�
˜7Ò#ØÐ-Ò-Ø67�
Ð2Ò3ØÐ&Ò&Ø/0�
Ð+Ò,Ø�lÒ"Ø+,�
˜<Ò(ØÐ&Ó&Ø/0�
Ð+Ò,ð9	1ñ< Ø,6ˆO˜LÑ)ØÐr9   c                 ó   — ddddœS )zK
        Common auth params across bedrock/vertex_ai/azure/watsonx
        Úwatsonx_projectÚwatsonx_region_nameÚwatsonx_token)ÚprojectÚregion_nameÚtokenrB   ©r-   s    r7   Úget_mapped_special_auth_paramsz1IBMWatsonXAIConfig.get_mapped_special_auth_params¾   s   € ð
 )Ø0Ø$ñ
ð 	
r9   c                 óp   — | j                  «       }|j                  «       D ]  \  }}||v sŒ||||   <   Œ |S r;   )r]   r0   )r-   rL   rM   Úmapped_paramsr?   r6   s         r7   Úmap_special_auth_paramsz*IBMWatsonXAIConfig.map_special_auth_paramsÈ   sK   € Ø#×BÑBÓDˆà.×4Ñ4Ó6ò 	>‰LˆE�5Ø˜Ò%Ø8=� ¨eÑ 4Ò5ð	>ð Ðr9   c                 ó
   — ddgS )úk
        Source: https://www.ibm.com/docs/en/watsonx/saas?topic=integrations-regional-availability
        zeu-dezeu-gbrB   r\   s    r7   Úget_eu_regionsz!IBMWatsonXAIConfig.get_eu_regionsÐ   s   € ð
 Øð
ð 	
r9   c                 ó   — dgS )rb   zus-southrB   r\   s    r7   Úget_us_regionsz!IBMWatsonXAIConfig.get_us_regionsÙ   s   € ð
 ð
ð 	
r9   Úpromptc                 ó¸   — |j                  di «      }|j                  |«       t        ||¬«      }| j                  ||¬«      }||j                  di «      |dœ|¥S )z%Shared logic to build request payloadrQ   )ÚparamsrE   )rE   Ú
api_paramsr)   )Úinputr)   Ú
parameters)ÚpopÚupdater   Ú_prepare_payload)r-   rE   rf   rM   Úextra_body_paramsÚwatsonx_api_paramsÚwatsonx_auth_payloads          r7   Ú_build_request_payloadz)IBMWatsonXAIConfig._build_request_payloadá   su   € à#2×#6Ñ#6°|ÀRÓ#HÐØ×ÑÐ0Ô1Ü$3¸?ÐRWÔ$XÐØ&*×&;Ñ&;À%ÐTfÐ&;Ó&gÐð Ø*×.Ñ.¨}¸bÓAØ)ñ
ð #ð	
ð 	
r9   ÚmessagesÚlitellm_paramsÚheadersc              ƒ   ó’   K  — ddl m} |j                  d«      d   } ||||i ¬«      ƒ d{  –—† }| j                  |||¬«      S 7 Œ­w)z"Async version of transform_requestr   )Ú#aconvert_watsonx_messages_to_promptú/©rE   rs   ÚproviderÚcustom_prompt_dictN©rE   rf   rM   )Ú!litellm.llms.watsonx.common_utilsrw   Úsplitrr   )	r-   rE   rs   rM   rt   ru   rw   rz   rf   s	            r7   Úatransform_requestz%IBMWatsonXAIConfig.atransform_requestï   sY   è ø€ õ	
ð  Ÿ+™+ cÓ*¨1Ñ-ˆÙAØ (°XÐRTô
÷ 
ˆð ×*Ñ*°¸vÐWfÐ*ÓgÐgð
ús   ‚*A¬A­Ac                 óp   — |j                  d«      d   }t        |||i ¬«      }| j                  |||¬«      S )z!Sync version of transform_requestrx   r   ry   r|   )r~   r   rr   )r-   rE   rs   rM   rt   ru   rz   rf   s           r7   Útransform_requestz$IBMWatsonXAIConfig.transform_request  sF   € ð  Ÿ+™+ cÓ*¨1Ñ-ˆÜ:Ø (°XÐRTô
ˆð ×*Ñ*°¸vÐWfÐ*ÓgÐgr9   Úraw_responseÚmodel_responseÚlogging_objÚrequest_dataÚencodingztiktoken.Encoding | NoneÚapi_keyÚ	json_modec                 ó  — |j                  |d|j                  ¬«       |j                  «       }d|vrt        dd|› �¬«      ‚|€t	        |j                  dd «      ¬«      }|d   d	   d
   }|d   d	   d   }|d   d	   d   }||j                  d	   j                  _        t        |d   d	   d   «      |j                  d	   _
        |j                  d«      r8	 t        j                  |d   «      }t        |j!                  «       «      |_        n"t        t%        j$                  «       «      |_        t'        ||||z   ¬«      }t)        |d|«       |S # t        $ r- t        j                  |d   j                  d«      › d�«      }Y Œ–w xY w)NÚ )rj   r‡   Úoriginal_responseÚresultsiô  z-Error: Invalid response from Watsonx.ai API: )Ústatus_codeÚmessageÚmodel_id)rE   r   Úgenerated_textÚinput_token_countÚgenerated_token_countÚstop_reasonÚ
created_atÚZz+00:00©Úprompt_tokensÚcompletion_tokensÚtotal_tokensÚusage)Ú	post_callÚtextÚjsonr   r   ÚgetÚchoicesrŽ   Úcontentr   Úfinish_reasonr   ÚfromisoformatÚ
ValueErrorÚrstripÚintÚ	timestampÚcreatedÚtimer   r1   )r-   rE   r‚   rƒ   r„   r…   rs   rM   rt   r†   r‡   rˆ   Ú	json_respr�   r—   r˜   Úcreated_datetimerš   s                     r7   Útransform_responsez%IBMWatsonXAIConfig.transform_response  s¶  € ð 	×ÑØØØ*×/Ñ/ð 	ô 	
ð (×,Ñ,Ó.ˆ	à˜IÑ%Ü ØØGÈ	À{ÐSôð ð Ð!Ü*°·±¸zÈ4Ó1PÔQˆNØ )¨)Ñ 4°QÑ 7Ð8HÑ IˆØ(¨Ñ3°AÑ6Ð7JÑKˆØ#,¨YÑ#7¸Ñ#:Ð;RÑ#SÐØ4Bˆ×Ñ˜qÑ!×)Ñ)Ô1Ü2CÀIÈiÑDXÐYZÑD[Ð\iÑDjÓ2kˆ×Ñ˜qÑ!Ô/Ø�=‰=˜Ô&ðjÜ#+×#9Ñ#9¸)ÀLÑ:QÓ#RÐ ô &)Ð)9×)CÑ)CÓ)EÓ%FˆNÕ"ä%(¬¯©«Ó%5ˆNÔ"ÜØ'Ø/Ø&Ð):Ñ:ô
ˆô
 	� ¨Ô/ØÐøô ò jä#+×#9Ñ#9¸YÀ|Ñ=T×=[Ñ=[Ð\_Ó=`Ð<aÐagÐ:hÓ#iÒ ðjús   ÃE Å3FÆFÚapi_basec                 óÖ  — | j                  |¬«      }|j                  d«      rldj                  |j                  d«      dd  «      }|rt        j
                  j                  nt        j                  j                  }	|	j                  |¬«      }	n"|rt        j                  nt        j                  }	|j                  d«      |	z   }| j                  ||j                  dd «      ¬«      }|S )N)r¬   zdeployment/rx   é   )Údeployment_idÚapi_version)Úurlr°   )Ú_get_base_urlÚ
startswithÚjoinr~   r   Ú!DEPLOYMENT_TEXT_GENERATION_STREAMr6   ÚDEPLOYMENT_TEXT_GENERATIONÚformatÚTEXT_GENERATION_STREAMÚTEXT_GENERATIONr¤   Ú_add_api_version_to_urlrl   )
r-   r¬   r‡   rE   rM   rt   r*   r±   r¯   Úendpoints
             r7   Úget_complete_urlz#IBMWatsonXAIConfig.get_complete_urlE  sÓ   € ð × Ñ ¨(Ð Ó3ˆØ×Ñ˜MÔ*à#&§8¡8¨E¯K©K¸Ó,<¸Q¸RÐ,@Ó#AˆMñ ô "×CÑC×IÒIä&×AÑA×GÑGð ð
  —‘°]�ÓC‰HáCIÔ(×?Ò?ÔO`×OpÑOpˆHØ�j‰j˜‹o Ñ(ˆð ×*Ñ*¨sÀ×@SÑ@SÐTaÐcgÓ@hÐ*ÓiˆØˆ
r9   Ústreaming_responseÚsync_streamc                 ó   — t        |||¬«      S )N)r½   r¾   rˆ   )Ú%WatsonxTextCompletionResponseIterator)r-   r½   r¾   rˆ   s       r7   Úget_model_response_iteratorz.IBMWatsonXAIConfig.get_model_response_iterator`  s   € ô 5Ø1Ø#Øô
ð 	
r9   )NNNNNNNNNNNNNNN)NNr;   )F)2Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚstrÚ__annotations__r   Úfloatr   r¥   r   r    Údictr!   Úlistr"   r#   r$   r%   r&   Úboolr'   r(   r)   r*   r8   Úclassmethodr=   rD   rK   rT   r]   r`   rc   re   rr   r
   r   r�   ÚhttpxÚResponser   ÚLiteLLMLoggingObjr«   r¼   r   r   rÁ   Ú__classcell__)r2   s   @r7   r   r       s‘  ø… ñ#ðJ #+€O�S˜4‘ZÓ*Ø $€K�˜‘Ó$Ø!%€N�C˜$‘JÓ%Ø!%€N�C˜$‘JÓ%Ø"&€N�D˜4‘KÓ&Ø'+€N�D˜‘I Ñ$Ó+Ø€Eˆ3�‰:ÓØ€Eˆ5�4‰<ÓØ'+Ð˜ ™Ó+Ø(,Ð˜3 ™:Ó,Ø*/Ð˜D 4™KÓ/Ø-1€N�D˜˜d˜‘O dÑ*Ó1Ø"€K��t‘Ó"Ø#€K�˜‘Ó#Ø€FˆD�4‰KÓð '+Ø$(Ø%)Ø%)Ø&*Ø+/Ø Ø"Ø+/Ø,0Ø.2Ø&*Ø"&Ø#'Ø"ñ!4à˜t™ð4ð ˜T‘\ð4ð ˜d™
ð	4ð
 ˜d™
ð4ð ˜t™ð4ð ˜S™	 DÑ(ð4ð �T‰zð4ð �t‰|ð4ð " D™Lð4ð  # T™zð4ð !% t¡ð4ð ˜t™ð4ð ˜4‘Zð4ð ˜D‘[ð4ð  �t‘ð!4ð$ 
ó%4ð0 ó$ó ð$ð/¨3ð /°4ó /ð.	
°ó 	
ð(à ð(ð ð(ð ð	(ð
 ð(ð 
ó(ðT
°ó 
ð¸$ð ÐQUó ð
  S¡	ó 
ð
  S¡	ó 
ð
¨Cð 
¸ð 
Ètð 
ÐX\ó 
ðhàðhð Ð'Ñ(ðhð ð	hð
 ðhð ðhð 
óhð&hàðhð Ð'Ñ(ðhð ð	hð
 ðhð ðhð 
óhð4 #Ø!%ñ2àð2ð —n‘nð2ð &ð	2ð
 'ð2ð ð2ð Ð'Ñ(ð2ð ð2ð ð2ð -ð2ð �t‘ð2ð ˜$‘;ð2ð 
ó2ðv #ñà˜‘*ðð �t‘ðð ð	ð
 ðð ðð �t‘ðð 
óð> "'ñ	

à$ S™M¨M¸#Ñ,>Ñ>ÀÑNð

ð ð

ð ˜$‘;÷	

r9   r   c                   ó   — e Zd Zdedefd„Zy)rÀ   Úchunkr+   c                 ó¸  — 	 |j                  dg «      }t        |«      dkD  r˜|d   j                  dd«      }|d   j                  d«      }|dk7  }t        |||t        |d   j                  dd«      |d   j                  dd«      |d   j                  dd«      |d   j                  dd«      z   ¬	«      ¬
«      S t        dddd ¬
«      S # t        $ r}|‚d }~ww xY w)NrŒ   r   r�   rŠ   r“   Únot_finishedr‘   r’   r–   )rœ   Úis_finishedr¡   rš   FrI   )rž   Úlenr   r   Ú	Exception)r-   rÒ   rŒ   rœ   r¡   rÕ   Úes          r7   Úchunk_parserz2WatsonxTextCompletionResponseIterator.chunk_parserq  s÷   € ð	Ø"ŸY™Y y°"Ó5ˆGÜ�7‹|˜aÒØ% a™jŸn™nÐ-=¸rÓB�Ø'.¨q¡z§~¡~°mÓ'D�Ø%2°nÑ%D�ä,ØØ +Ø"/Ü2Ø&-¨a¡j§n¡nÐ5HÈ!Ó&LØ*1°!©*¯.©.Ð9PÐRSÓ*TØ%,¨Q¡Z§^¡^Ð4GÈÓ%KØ! !™*Ÿ.™.Ð)@À!ÓDñ&Eôô	
ð 
ô )ØØ!Ø$Øô	ð øô ò 	ØˆGûð	ús   ‚B7C	 Â:C	 Ã		CÃCÃCN)rÂ   rÃ   rÄ   rÉ   r   rÙ   rB   r9   r7   rÀ   rÀ   m  s   „ ð $ð Ð+@ô r9   rÀ   )%r¨   Úcollections.abcr   r   r   Útypingr   r   r   rÍ   Ú)litellm.llms.base_llm.base_model_iteratorr	   Úlitellm.types.llms.openair
   r   Úlitellm.types.llms.watsonxr   Úlitellm.types.utilsr   r   r   Úlitellm.utilsr   Úbase_llm.chat.transformationr   Úcommon_utilsr   r   r   r   ÚtiktokenÚ*litellm.litellm_core_utils.litellm_loggingr   Ú_LiteLLMLoggingObjrÏ   r   rÀ   rB   r9   r7   ú<module>ræ      sk   ðÛ ß 3Ý ß ,Ñ ,ã å Oß PÝ 8ß KÑ KÝ +å 6÷ó ñ ÛåXà*ÑàÐôJ
˜¨*ô J
ôZ
Ð,Eõ r9   