Ë
    uPêj–3  ã            
       ó˜  — U d dl 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
 d dlmZ d dlmZ d dlmZ d d	lmZmZ  G d
„ de«      Z e«       Zeed<   d„ Zddefd„Zdedz  dedz  defd„Zddededz  defd„Zdedee   dededef
d„Zdedee   dededef
d„Zdedee   dededef
d„Z dedee   dededef
d„Z! G d„ d«      Z"y) é    )ÚFinalÚcastN)Úverbose_logger)ÚInMemoryCache)Úfactory)ÚBaseLLMException©Úget_secret_str)ÚAllMessageValues)ÚWatsonXAPIParamsÚWatsonXCredentialsc                   óP   ‡ — e Zd Z	 ddededeej                  z  dz  fˆ fd„Zˆ xZ	S )ÚWatsonXAIErrorNÚstatus_codeÚmessageÚheadersc                 ó*   •— t         ‰| �  |||¬«       y ©N)r   r   r   )ÚsuperÚ__init__)Úselfr   r   r   Ú	__class__s       €úf/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/watsonx/common_utils.pyr   zWatsonXAIError.__init__   s   ø€ ô 	‰Ñ [¸'È7ÐÕSó    ©N)
Ú__name__Ú
__module__Ú__qualname__ÚintÚstrÚdictÚhttpxÚHeadersr   Ú__classcell__)r   s   @r   r   r      sA   ø„ ð
 04ñ	TàðTð ðTð ˜Ÿ™Ñ%¨Ñ,÷	Tñ Tr   r   Úiam_token_cachec                  ó    — t        d«      xs dS )NÚWATSONX_IAM_URLz(https://iam.cloud.ibm.com/identity/tokenr	   © r   r   Úget_watsonx_iam_urlr)      s   € ÜÐ+Ó,ÒZÐ0ZÐZr   Úreturnc                 ó  — t         j                  | «      }|€Ùi }d|d<   | €2t        d«      xs% t        d«      xs t        d«      xs t        d«      } | €t        d«      ‚d|d	<   d
| dœ}t	        «       }t        j                  d|||«       t        j                  j                  |||¬«      }|j                  «        |j                  «       }|d   }t         j                  | ||d   dz
  ¬«       t        t        |«      S )Nz!application/x-www-form-urlencodedúContent-TypeÚ
WX_API_KEYÚWATSONX_API_KEYÚWATSONX_APIKEYÚWATSONX_ZENAPIKEYzAPI key is requiredúapplication/jsonÚAcceptz&urn:ibm:params:oauth:grant-type:apikey)Ú
grant_typeÚapikeyzNcalling ibm `/identity/token` to retrieve IAM token.
URL=%s
headers=%s
data=%s)ÚurlÚdatar   Úaccess_tokenÚ
expires_iné
   )ÚkeyÚvalueÚttl)r%   Ú	get_cacher
   Ú
ValueErrorr)   r   ÚdebugÚlitellmÚmodule_level_clientÚpostÚraise_for_statusÚjsonÚ	set_cacher   r    )Úapi_keyÚparamsÚresultr   r6   Úiam_token_urlÚresponseÚ	json_datas           r   Úgenerate_iam_tokenrL       s)  € Ü(×2Ñ2°7Ó;€Fà€~ØˆØ"Eˆ�ÑØˆ?ä˜|Ó,ò 7Ü!Ð"3Ó4ò7ä!Ð"2Ó3ò7ô "Ð"5Ó6ð	 ð ˆ?ÜÐ2Ó3Ð3Ø.ˆ�ÑàBØñ
ˆô  3Ó4ˆÜ×ÑØ_ØØØô		
ô "×5Ñ5×:Ñ:¸}ÐSWÐahÐ:ÓiˆØ×!Ñ!Ô#Ø#Ÿ=™=›?ˆ	à˜>Ñ*ˆÜ×!Ñ!ØØØ˜,Ñ'¨"Ñ,ð 	"ô 	
ô ”�VÓÐr   rF   Útokenc                 ó$   — |�|S t        | «      }|S r   )rL   ©rF   rM   s     r   Ú_generate_watsonx_tokenrP   I   s   € ØÐØˆÜ˜wÓ'€EØ€Lr   rG   Úmodelc                 ó^  — | j                  d| j                  dd«      «      }| j                  dd«      }| j                  d| j                  dd«      «      }|€"| j                  d| j                  dd«      «      }|€%t        d	«      xs t        d
«      xs t        d«      }|€%t        d«      xs t        d«      xs t        d«      }|€2t        d«      xs% t        d«      xs t        d«      xs t        d«      }|€"|€ |�|j                  d«      st        dd¬«      ‚t	        |||¬«      S )zw
    Find watsonx.ai credentials in the params or environment variables and return the headers for authentication.
    Ú
project_idÚwatsonx_projectNÚspace_idÚregion_nameÚregionÚwatsonx_region_nameÚwatsonx_regionÚWATSONX_PROJECT_IDÚWX_PROJECT_IDÚ
PROJECT_IDÚWATSONX_REGIONÚ	WX_REGIONÚREGIONÚWATSONX_DEPLOYMENT_SPACE_IDÚWATSONX_SPACE_IDÚWX_SPACE_IDÚSPACE_IDúdeployment/é‘  z„Error: Watsonx project_id and space_id not set. Set WX_PROJECT_ID or WX_SPACE_ID in environment variables or pass in as a parameter.©r   r   )rS   rU   rV   )Úpopr
   Ú
startswithr   r   )rG   rQ   rS   rU   rV   s        r   Ú_get_api_paramsri   P   sV  € ð
 —‘Ø�f—j‘jÐ!2°DÓ9ó€Jð �z‰z˜* dÓ+€HØ—*‘*˜]¨F¯J©J°xÀÓ,FÓG€KØÐØ—j‘jØ! 6§:¡:Ð.>ÀÓ#Eó
ˆð
 ÐäÐ/Ó0Òs´NÀ?Ó4SÒsÔWeÐfrÓWsð 	ð ÐÜ$Ð%5Ó6Òq¼.ÈÓ:UÒqÔYgÐhpÓYqˆØÐäÐ8Ó9ò *ÜÐ0Ó1ò*ä˜mÓ,ò*ô ˜jÓ)ð	 	ð Ð˜hÐ.°5Ð3DÈU×M]ÑM]Ð^kÔMlÜØð [ô
ð 	
ô
 ØØØôð r   ÚmessagesÚproviderÚcustom_prompt_dictc              ƒ   óÚ  K  — ddl m} | |v r||    }t        j                  ||j	                  d|j	                  d«      «      |j	                  dd«      |j	                  dd«      |j	                  dd«      |j	                  d	d«      ¬
«      S ||j
                  j                  k(  rt        j                  |¬«      S  || |¬«      ƒ d{  –—† }|r|S t        j                  | |d¬«      S 7 Œ ­w)z:Async core logic for converting watsonx messages to promptr   ©ÚWatsonXModelPatternÚ	role_dictÚrolesÚinitial_prompt_valueÚ Úfinal_prompt_valueÚ	bos_tokenÚ	eos_token©rj   rp   rr   rt   ru   rv   ©rj   ©rQ   rj   NÚwatsonx©rQ   rj   Úcustom_llm_provider©	Úlitellm.types.llms.watsonxro   ÚptfÚcustom_promptÚgetÚIBM_MISTRALAIr;   Úmistral_instruct_ptÚprompt_factory©rQ   rj   rk   rl   Úapply_template_fnro   Úmodel_prompt_dictrH   s           r   Ú_aconvert_watsonx_messages_corerˆ   {   sò   è ø€ õ ?ð Ð"Ñ"Ø#5°eÑ#<ÐÜ× Ñ ØØ'×+Ñ+¨KÐ9J×9NÑ9NÈwÓ9WÓXØ!2×!6Ñ!6Ð7MÈrÓ!RØ0×4Ñ4Ð5IÈ2ÓNØ'×+Ñ+¨K¸Ó<Ø'×+Ñ+¨K¸Ó<ô
ð 	
ð 
Ð(×6Ñ6×<Ñ<Ò	<Ü×&Ñ&°Ô9Ð9ñ 0°eÀhÔO×OˆÙØˆMä×!Ñ!¨¸ÐV_Ô`Ð`ð	 Pús   ‚CC+ÃC)Ã	!C+c                 ó¾  — ddl m} | |v r||    }t        j                  ||j	                  d|j	                  d«      «      |j	                  dd«      |j	                  dd«      |j	                  dd«      |j	                  d	d«      ¬
«      S ||j
                  j                  k(  rt        j                  |¬«      S  || |¬«      }|r|S t        j                  | |d¬«      S )z9Sync core logic for converting watsonx messages to promptr   rn   rp   rq   rr   rs   rt   ru   rv   rw   rx   ry   rz   r{   r}   r…   s           r   Ú_convert_watsonx_messages_corerŠ   ›   så   € õ ?ð Ð"Ñ"Ø#5°eÑ#<ÐÜ× Ñ ØØ'×+Ñ+¨KÐ9J×9NÑ9NÈwÓ9WÓXØ!2×!6Ñ!6Ð7MÈrÓ!RØ0×4Ñ4Ð5IÈ2ÓNØ'×+Ñ+¨K¸Ó<Ø'×+Ñ+¨K¸Ó<ô
ð 	
ð 
Ð(×6Ñ6×<Ñ<Ò	<Ü×&Ñ&°Ô9Ð9ñ *°ÀÔIˆÙØˆMä×!Ñ!¨¸ÐV_Ô`Ð`r   c              ƒ   ó^   K  — ddl m} t        | ||||j                  ¬«      ƒ d{  –—† S 7 Œ­w)z3Async version of convert_watsonx_messages_to_promptr   ©ÚIBMWatsonXChatConfig©rQ   rj   rk   rl   r†   N)Ú(litellm.llms.watsonx.chat.transformationr�   rˆ   Úaapply_prompt_template©rQ   rj   rk   rl   r�   s        r   Ú#aconvert_watsonx_messages_to_promptr’   »   s8   è ø€ õ Nä0ØØØØ-Ø.×EÑEô÷ ð ð ús   ‚$-¦+§-c                 óB   — ddl m} t        | ||||j                  ¬«      S )z2Sync version of convert_watsonx_messages_to_promptr   rŒ   rŽ   )r�   r�   rŠ   Úapply_prompt_templater‘   s        r   Ú"convert_watsonx_messages_to_promptr•   Í   s*   € õ Nä)ØØØØ-Ø.×DÑDôð r   c                   óð   — e Z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z  d	efd„Zdededz  d	efd„Z	dede
deej                  z  d	efd„Zedededz  dedz  d	efd„«       Zdeded	efd„Zy)ÚIBMWatsonXMixinNr   rQ   rj   Úoptional_paramsÚlitellm_paramsrF   Úapi_baser*   c                 ó@  — dddœ}d|v ri |¥|¥S t        t        d z  |j                  d«      xs t        d«      «      }	t        t        d z  |j	                  dd «      xs t        d«      «      }
|	r	d|	› �|d<   n |
r	d	|
› �|d<   nt        ||	¬
«      }	d|	› �|d<   i |¥|¥S )Nr1   )r,   r2   ÚAuthorizationrM   ÚWATSONX_TOKENÚzen_api_keyr0   zBearer z
ZenApiKey rO   )r   r    r�   r
   rg   rP   )r   r   rQ   rj   r˜   r™   rF   rš   Údefault_headersrM   rž   s              r   Úvalidate_environmentz$IBMWatsonXMixin.validate_environmentá   sÙ   € ð /Ø(ñ"
ˆð
 ˜gÑ%Ø1�oÐ1¨Ð1Ð1ÜÜ�$‰JØ×Ñ Ó(ÒK¬N¸?Ó,Kó
ˆô "Ü�$‰JØ×Ñ ¨tÓ4Ò[¼ÐGZÓ8[ó
ˆñ Ø)0°°Ð'8ˆG�OÒ$ÙØ)3°K°=Ð'AˆG�OÒ$ä+°GÀ5ÔIˆEà)0°°Ð'8ˆG�OÑ$Ø-�/Ð- WÐ-Ð-r   c                 ó�   — |xs2 t        d«      xs% t        d«      xs t        d«      xs t        d«      }|€t        dd¬«      ‚|S )NÚWATSONX_API_BASEÚWATSONX_URLÚWX_URLÚWML_URLre   zpError: Watsonx URL not set. Set WATSONX_API_BASE in environment variables or pass in as parameter - 'api_base='.rf   )r
   r   )r   rš   r5   s      r   Ú_get_base_urlzIBMWatsonXMixin._get_base_url  sg   € àò )ÜÐ0Ó1ò)ä˜mÓ,ò)ô ˜hÓ'ò)ô ˜iÓ(ð 	ð ˆ;Ü Øð Kôð ð ˆ
r   r5   Úapi_versionc                 ó>   — |xs t         j                  }|d|› �z   }|S )Nz	?version=)r@   ÚWATSONX_DEFAULT_API_VERSION)r   r5   r§   s      r   Ú_add_api_version_to_urlz'IBMWatsonXMixin._add_api_version_to_url  s(   € Ø!ÒH¤W×%HÑ%HˆØ�i ˜}Ð-Ñ-ˆàˆ
r   Úerror_messager   c                 ó   — t        |||¬«      S r   )r   )r   r«   r   r   s       r   Úget_error_classzIBMWatsonXMixin.get_error_class  s   € Ü¨+¸}ÐV]Ô^Ð^r   c           
      ó  — |xsF | j                  dd «      xs2 t        d«      xs% t        d«      xs t        d«      xs t        d«      }|xsf | j                  d| j                  d| j                  dd «      «      «      xs2 t        d	«      xs% t        d
«      xs t        d«      xs t        d«      }| j                  d| j                  dd «      «      }d }|�V|j                  d|«      }|j                  d|j                  d|«      «      }|j                  d|j                  dd «      «      }|�t        |t        «      st        dd¬«      ‚|�t        |t        «      st        dd¬«      ‚t        ||t        t        d z  |«      ¬«      S )Nr4   r/   r.   r-   r0   r5   rš   Úbase_urlr¢   r£   r¤   r¥   Úwx_credentialsÚwatsonx_credentialsrF   rM   Úwatsonx_tokenre   zrError: Watsonx API key not set. Set WATSONX_API_KEY in environment variables or pass in as parameter - 'api_key='.rf   zuError: Watsonx API base not set. Set WATSONX_API_BASE in environment variables or pass in as parameter - 'api_base='.)rF   rš   rM   )rg   r
   r�   Ú
isinstancer    r   r   r   )r˜   rF   rš   r°   rM   s        r   Úget_watsonx_credentialsz'IBMWatsonXMixin.get_watsonx_credentials  sÑ  € ð ò 3Ø×"Ñ" 8¨TÓ2ò3äÐ.Ó/ò3ô Ð/Ó0ò3ô ˜lÓ+ò	3ô
 Ð1Ó2ð 	ð ò )Ø×"Ñ"ØØ×#Ñ# J°×0CÑ0CÀJÐPTÓ0UÓVóò)ô
 Ð0Ó1ò)ô ˜mÓ,ò)ô ˜hÓ'ò)ô ˜iÓ(ð 	ð !0× 3Ñ 3ØØ×ÑÐ 5°tÓ<ó!
ˆð
 !ˆàÐ%Ø%×)Ñ)¨%°Ó:ˆHØ$×(Ñ(¨°>×3EÑ3EÀiÐQXÓ3YÓZˆGØ"×&Ñ&ØØ×"Ñ"Ø# TóóˆEð ˆ?¤*¨W´cÔ":Ü Øð Môð ð Ð¤:¨h¼Ô#<Ü Øð Pôð ô "¨'¸HÌDÔQTÐW[ÑQ[Ð]bÓLcÔdÐdr   Ú
api_paramsc                 óh   — i }|j                  d«      ri S ||d<   |d   �
|d   |d<   |S |d   |d<   |S )Nrd   Úmodel_idrS   rU   )rh   )r   rQ   rµ   Úpayloads       r   Ú_prepare_payloadz IBMWatsonXMixin._prepare_payloadP  s[   € Ø!ˆØ×Ñ˜MÔ*ØˆIØ#ˆ�
ÑØ�lÑ#Ð/Ø$.¨|Ñ$<ˆG�LÑ!ð ˆð #-¨ZÑ"8ˆG�JÑØˆr   )NN)r   r   r   r!   r    Úlistr   r    r¦   rª   r   r"   r#   r   r­   Ústaticmethodr   r´   r   r¹   r(   r   r   r—   r—   à   s2  „ ð #Ø#ñ!.àð!.ð ð!.ð Ð'Ñ(ð	!.ð
 ð!.ð ð!.ð �t‘ð!.ð ˜‘*ð!.ð 
ó!.ðF c¨D¡jð °Só ð ¨3ð ¸SÀ4¹Zð ÈCó ð_¨Sð _¸sð _ÈTÐTY×TaÑTaÑMað _Ðfvó _ð ð0e°ð 0eÀÀdÁ
ð 0eÐVYÐ\`ÑV`ð 0eÐewò 0eó ð0eðd	 cð 	Ð7Gð 	ÈDô 	r   r—   r   )#Útypingr   r   r"   r@   r   Úlitellm.cachingr   Ú+litellm.litellm_core_utils.prompt_templatesr   r   Ú)litellm.llms.base_llm.chat.transformationr   Úlitellm.secret_managers.mainr
   Úlitellm.types.llms.openair   r~   r   r   r   r%   Ú__annotations__r)   r    rL   rP   r!   ri   rº   rˆ   rŠ   r’   r•   r—   r(   r   r   ú<module>rÃ      s–  ðß Ð ã ã Ý "Ý )Ý FÝ FÝ 7Ý 6ß KôTÐ%ô Tñ '›€�Ó (ò[ñ&°#ó &ðR S¨4¡Zð ¸¸d¹
ð Àsó ñ(˜Dð (¨¨t©ð (Ð?Oó (ðVaØðaàÐ#Ñ$ðað ðað ð	að 	óað@aØðaàÐ#Ñ$ðað ðað ð	að 	óað@ØðàÐ#Ñ$ðð ðð ð	ð
 	óð$ØðàÐ#Ñ$ðð ðð ð	ð
 	ó÷&yò yr   