o
    ưi'                     @   s   d Z ddlmZmZmZmZ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 dd	lmZ d
dlmZ G dd deeZdS )z
Translation from OpenAI's `/chat/completions` endpoint to IBM WatsonX's `/text/chat` endpoint.

Docs: https://cloud.ibm.com/apidocs/watsonx-ai#text-chat
    )DictListOptionalTupleUnion)verbose_loggerget_secret_str)WatsonXAIEndpointWatsonXModelPattern   )_remove_additional_properties_remove_strict_from_schema   )OpenAIGPTConfig   )IBMWatsonXMixinc                       sD  e Zd ZdedefddZdeeeef  de	fddZ
ded	eded
e	def
 fddZdee dee deee ee f fddZ	ddee dee ded	ededee	 defddZededeeeef  dee fddZededeeeef  dee fddZededeeeef  dee fddZ  ZS )IBMWatsonXChatConfigmodelreturnc                 C   s   g dS )N)ZtemperatureZ
max_tokensZtop_pZfrequency_penaltystopseedstreamtoolstool_choiceZlogprobsZtop_logprobsnZpresence_penaltyZresponse_formatZreasoning_effort )selfr   r   r   _/home/app/Keep/.python/lib/python3.10/site-packages/litellm/llms/watsonx/chat/transformation.pyget_supported_openai_params   s   z0IBMWatsonXChatConfig.get_supported_openai_paramsr   c                 C   s"   |d u rdS t |tr|dv S dS )NF)autononerequired)
isinstancestr)r   r   r   r   r   is_tool_choice_option)   s
   
z*IBMWatsonXChatConfig.is_tool_choice_optionnon_default_paramsoptional_paramsdrop_paramsc                    sv   | dd }|d urt|}t|}|d ur||d< | dd }| |r*||d< n|d ur2||d< t ||||S )Nr   r   Ztool_choice_option)popr   r   r%   supermap_openai_params)r   r&   r'   r   r(   Z_toolsZ_tool_choice	__class__r   r   r+   0   s   

z&IBMWatsonXChatConfig.map_openai_paramsapi_baseapi_keyc                 C   s$   |pt d}|pt dpd}||fS )NZHOSTED_VLLM_API_BASEZHOSTED_VLLM_API_KEY r   )r   r.   r/   Zdynamic_api_keyr   r   r   $_get_openai_compatible_provider_infoL   s   z9IBMWatsonXChatConfig._get_openai_compatible_provider_infoNlitellm_paramsr   c           
      C   s   | j |d}|dr(d|ddd  }|rtjjntjj}	|	j|d}	n
|r.tj	jntj
j}	|d|	 }| j||dd d}|S )N)r.   zdeployment//   )deployment_idapi_version)urlr6   )Z_get_base_url
startswithjoinsplitr
   ZDEPLOYMENT_CHAT_STREAMvalueZDEPLOYMENT_CHATformatZCHAT_STREAMZCHATrstripZ_add_api_version_to_urlr)   )
r   r.   r/   r   r'   r2   r   r7   r5   Zendpointr   r   r   get_complete_urlU   s"   	


z%IBMWatsonXChatConfig.get_complete_urlmessagesc                 C   s   ddl m}m}m} tjj| v r||dS tjj| v r ||dS tjj| v rYd| v r2| 	dd }nd| v r>| 	dd }n| }z|||d}|rL|W S W dS  t
yX   Y dS w tjj| v rt|dd	d
dd	d
dd	d
d|dddS dS )z(Core logic for applying prompt templatesr   )custom_promptibm_granite_ptmistral_instruct_ptr?   watsonx/watsonx_text/r   r?   +<|start_header_id|>system<|end_header_id|>

<|eot_id|>Zpre_messageZpost_message)<|start_header_id|>user<|end_header_id|>
.<|start_header_id|>assistant<|end_header_id|>
systemuserZ	assistant<|begin_of_text|>Z	role_dictr?   Zinitial_prompt_valueZfinal_prompt_valueN)3litellm.litellm_core_utils.prompt_templates.factoryr@   rA   rB   r   GRANITE_CHATr;   IBM_MISTRALGPT_OSSr:   	ExceptionLLAMA3_INSTRUCT)r   r?   hf_template_fnr@   rA   rB   hf_modelresultr   r   r   _apply_prompt_template_coreu   sL   

z0IBMWatsonXChatConfig._apply_prompt_template_corec                    sj  ddl }ddlm}m}m}m}m} tjj	| v r||dS tj
j	| v r)||dS tjj	| v rd| v r;| dd }nd| v rG| dd }n| }z||jv rV|||d}	n	|||dI dH }	|	rd|	W S W dS  ty }
 z%ztd	| d
|
  W n	 ty   Y nw W Y d}
~
dS W Y d}
~
dS d}
~
ww tjj	| v r|dddddddddd|dddS dS )z%Apply prompt template (async version)r   N)ahf_chat_templater@   hf_chat_templaterA   rB   rC   rD   rE   rF   rG   z/Failed to apply HuggingFace template for model z: rH   rI   rJ   rK   rL   rM   rP   rQ   )litellmrR   r\   r@   r]   rA   rB   r   rS   r;   rT   rU   r:   Zknown_tokenizer_configrV   r   debugrW   )r   r?   r^   r\   r@   r]   rA   rB   rY   rZ   er   r   r   aapply_prompt_template   sh   


 


z+IBMWatsonXChatConfig.aapply_prompt_templatec                 C   s   ddl m} tj| ||dS )z$Apply prompt template (sync version)r   )r]   )r   r?   rX   )rR   r]   r   r[   )r   r?   r]   r   r   r   apply_prompt_template   s   z*IBMWatsonXChatConfig.apply_prompt_template)N)__name__
__module____qualname__r$   r   r   r   r   dictboolr%   r+   r   r1   r>   staticmethodr   r[   ra   rb   __classcell__r   r   r,   r   r      sz    

 5Cr   N)__doc__typingr   r   r   r   r   r^   r   Zlitellm.secret_managers.mainr	   Zlitellm.types.llms.watsonxr
   r   utilsr   r   Zopenai.chat.gpt_transformationr   Zcommon_utilsr   r   r   r   r   r   <module>   s    