
    i'                         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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)verbose_loggerget_secret_str)WatsonXAIEndpointWatsonXModelPattern   )_remove_additional_properties_remove_strict_from_schema   )OpenAIGPTConfig   )IBMWatsonXMixinc                   p    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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     y/Users/manta/Documents/Projects/TheRoad-I1/.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?   zdeployment//   )deployment_idapi_version)urlrL   )_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   rM   rK   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,   messagesc                    ddl 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d| v r| j                  d      d   }n| }	  |||      }|r|S 	 y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r\   watsonx/watsonx_text/r   r\   +<|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_dictr\   initial_prompt_valuefinal_prompt_valueN)3litellm.litellm_core_utils.prompt_templates.factoryr^   r_   r`   r   GRANITE_CHATrS   IBM_MISTRALGPT_OSSrQ   	ExceptionLLAMA3_INSTRUCT)r   r\   hf_template_fnr^   r_   r`   hf_modelresults           r*   _apply_prompt_template_corez0IBMWatsonXChatConfig._apply_prompt_template_coreu   s;   
	
 	
 ++11U:!844 ,,22e;&99 ((..%7U" ;;z226 E) ;;7; 'hJ !M 2 ) !0066%?  (V(4
 (T(4
 (Y(4" "%8#T# & /  * /s   &C, ,	C87C8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 rfd| v r| j                  d      d   }nd| v r| j                  d      d   }n| }	 ||j                  v r |||      }	n |||       d{   }	|	r|	S 	 yt        j"                  j                  | v r |dddddddddd|dd      S y7 @# t        $ r6}
	 t        j                   d	| d
|
        n# t        $ r Y nw xY wY d}
~
yd}
~
ww xY ww)z%Apply prompt template (async version)r   N)ahf_chat_templater^   hf_chat_templater_   r`   ra   rb   rc   rd   re   z/Failed to apply HuggingFace template for model z: rf   rg   rh   rk   rl   rm   rq   rr   )litellmrv   r   r^   r   r_   r`   r   rw   rS   rx   ry   rQ   known_tokenizer_configrz   r   debugr{   )r   r\   r   r   r^   r   r_   r`   r}   r~   es              r*   aapply_prompt_templatez+IBMWatsonXChatConfig.aapply_prompt_template   s    
 		
 	
 ++11U:!844 ,,22e;&99 ((..%7U" ;;z226 E) ;;7; w===-HxPF#48h#WWF !M @ ) !0066%?  (V(4
 (T(4
 (Y(4" "%8#T# & G X
  	"((I(SUVWUXY ! . =	sf   B-E0&D DD E 7ED 	E#D?>E?	EE
EEEEEc                 >    ddl m} t        j                  | ||      S )z$Apply prompt template (sync version)r   )r   )r   r\   r|   )rv   r   r   r   )r   r\   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[   staticmethodr   r   r   r   __classcell__)r>   s   @r*   r   r      s   
 
 
&%T	:J1K PT 
 
 
 	

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