
    j-#                         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
mZmZ ddlmZmZ ddlmZ d	d
lmZ  G d dee      Zy)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get_secret_str)WatsonXAIEndpointWatsonXAPIParamsWatsonXModelPattern   )_remove_additional_properties_remove_strict_from_schema   )OpenAIGPTConfig   )IBMWatsonXMixinc                       e Zd ZdedefdZdeeeef      de	fdZ
dededede	def
 fd	Zd
ee   dee   deee   ee   f   fdZ	 dd
ee   dee   dedededee	   defdZdededefdZededeeeef      dee   fd       Zededeeeef      dee   fd       Zededeeeef      dee   fd       Z xZS )IBMWatsonXChatConfigmodelreturnc                 
    g dS )N)temperature
max_tokenstop_pfrequency_penaltystopseedstreamtoolstool_choicelogprobstop_logprobsnpresence_penaltyresponse_formatreasoning_effort )selfr   s     /Users/manta/Documents/Projects/TheRoad-I1/backend/.venv/lib/python3.12/site-packages/litellm/llms/watsonx/chat/transformation.pyget_supported_openai_paramsz0IBMWatsonXChatConfig.get_supported_openai_params   s    
 	
    r!   c                 2    |yt        |t              r|dv S y)NF)autononerequired)
isinstancestr)r)   r!   s     r*   is_tool_choice_optionz*IBMWatsonXChatConfig.is_tool_choice_option)   s$    k3'">>>r,   non_default_paramsoptional_paramsdrop_paramsc                     |j                  dd       }|t        |      }t        |      }|||d<   |j                  dd       }| j                  |      r||d<   n|||d<   t        |   ||||      S )Nr    r!   tool_choice_option)popr   r   r3   supermap_openai_params)r)   r4   r5   r   r6   _tools_tool_choice	__class__s          r*   r;   z&IBMWatsonXChatConfig.map_openai_params0   s     $''626:F/7F*0w' *--mTB%%l34@O01%-9OM*w(
 	
r,   api_baseapi_keyc                 N    |xs t        d      }|xs t        d      xs d}||fS )NHOSTED_VLLM_API_BASEHOSTED_VLLM_API_KEY r   )r)   r?   r@   dynamic_api_keys       r*   $_get_openai_compatible_provider_infoz9IBMWatsonXChatConfig._get_openai_compatible_provider_infoL   s9     E~.DEB~&;<B 	 ((r,   litellm_paramsr   c                    | j                  |      }|j                  d      rldj                  |j                  d      dd        }|rt        j
                  j                  nt        j                  j                  }	|	j                  |      }	n6|rt        j                  j                  nt        j                  j                  }	|j                  d      |	z   }| j                  ||j                  dd             }|S )N)r?   deployment//   )deployment_idapi_version)urlrM   )_get_base_url
startswithjoinsplitr
   DEPLOYMENT_CHAT_STREAMvalueDEPLOYMENT_CHATformatCHAT_STREAMCHATrstrip_add_api_version_to_urlr9   )
r)   r?   r@   r   r5   rG   r   rN   rL   endpoints
             r*   get_complete_urlz%IBMWatsonXChatConfig.get_complete_urlU   s       ( 3M*HHU[[%5ab%9:M  "88>>&66<< 
  ]CH  "--33&++11 
 jjo( **!4!4]D!I + 
 
r,   
api_paramsc                 p    i }|j                  d      rdn||d<   |j                  d      rdn|d   |d<   |S )z
        Prepare payload for deployment models.
        Deployment models cannot have 'model_id' or 'model' in the request body.
        rI   Nmodel_id
project_id)rP   )r)   r   r]   payloads       r*   _prepare_payloadz%IBMWatsonXChatConfig._prepare_payloadu   sJ    
 &+&6&6}&Ed5
$$]3DL9Q 	 r,   messagesc                    ddl m}m}m} t        j
                  j                  | v r	 ||      S t        j                  j                  | v r	 ||      S t        j                  j                  | v r%d| v r| j                  d      d   n| }	  |||      S t        j                  j                  | v r |ddd	d
dd	ddd	d|dd      S y# t        $ r Y yw xY w)z(Core logic for applying prompt templatesr   )custom_promptibm_granite_ptmistral_instruct_ptrc   watsonx/r   rc   +<|start_header_id|>system<|end_header_id|>

<|eot_id|>pre_messagepost_message)<|start_header_id|>user<|end_header_id|>
.<|start_header_id|>assistant<|end_header_id|>
systemuser	assistant<|begin_of_text|>	role_dictrc   initial_prompt_valuefinal_prompt_valueN)3litellm.litellm_core_utils.prompt_templates.factoryre   rf   rg   r   GRANITE_CHATrT   IBM_MISTRALGPT_OSSrR   	ExceptionLLAMA3_INSTRUCT)r   rc   hf_template_fnre   rf   rg   hf_models          r*   _apply_prompt_template_corez0IBMWatsonXChatConfig._apply_prompt_template_core   s	   
	
 	
 ++11U:!844 ,,22e;&99 ((..%76@E6Iu{{:.r2uH%HxHH !0066%?  (V(4
 (T(4
 (Y(4" "%8#T# & -  * -s   	C 	CCc                   K   ddl }ddlm}m}m}m}m} t        j                  j                  | v r	 ||      S t        j                  j                  | v r	 ||      S t        j                  j                  | v rEd| v r| j                  d      d   n| }	 ||j                  v r
 |||      S  |||       d{   S t        j                  j                  | v r |dd	d
dd	d
dd	d
d|dd      S y7 :# t        $ r Y yw xY ww)z%Apply prompt template (async version)r   N)ahf_chat_templatere   hf_chat_templaterf   rg   rh   ri   rj   rk   rl   rm   rn   rq   rr   rs   rw   rx   )litellmr|   r   re   r   rf   rg   r   r}   rT   r~   r   rR   known_tokenizer_configr   r   )	r   rc   r   r   re   r   rf   rg   r   s	            r*   aapply_prompt_templatez+IBMWatsonXChatConfig.aapply_prompt_template   s3    
 		
 	
 ++11U:!844 ,,22e;&99 ((..%76@E6Iu{{:.r2uHw===+(XNN!2H!UUU !0066%?  (V(4
 (T(4
 (Y(4" "%8#T# & / V * -sH   BDC8 -D.C8 ;C6<C8 ?7D6C8 8	DDDDc                 >    ddl m} t        j                  | ||      S )z$Apply prompt template (sync version)r   )r   )r   rc   r   )r|   r   r   r   )r   rc   r   s      r*   apply_prompt_templatez*IBMWatsonXChatConfig.apply_prompt_template   s*    
	
 $??(;K @ 
 	
r,   )N)__name__
__module____qualname__r2   r   r+   r   r   dictboolr3   r;   r   rF   r\   r   rb   staticmethodr   r   r   r   __classcell__)r>   s   @r*   r   r      s   
 
 
&%T	:J1K PT 
 
 
 	

 
 

8) )08)	x}hsm+	,)  "&3- # 	
    
@
c 
7G 
D 
 (("4S>2(	#( (T //"4S>2/	#/ /b 



"4S>2

	#

 

r,   r   N)__doc__typingr   r   r   r   r   litellm.secret_managers.mainr	   litellm.types.llms.watsonxr
   r   r   utilsr   r   openai.chat.gpt_transformationr   common_utilsr   r   r(   r,   r*   <module>r      s;    6 5 7  P = *T
?O T
r,   