
    iM                         d Z ddlmZmZmZ ddlZddlmZ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  G d de
      Z G d de      Zy)z
Support for OVHCloud AI Endpoints `/v1/chat/completions` endpoint.

Our unified API follows the OpenAI standard.
More information on our website: https://endpoints.ai.cloud.ovh.net
    )OptionalUnionListN)ModelResponseStream_get_model_info_helper)OpenAIGPTConfig)verbose_loggerOVHCloudException)BaseModelResponseIterator)BaseLLMException)AllMessageValuesc                        e Zd Zedee   fd       Zded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e	ej                  f   defdZde	de	dede
de	f
 fdZdedee   de	de	de	de	f fdZ xZS )OVHCloudChatConfigreturnc                      y)Novhcloud )selfs    z/Users/manta/Documents/Projects/TheRoad-I1/.venv/lib/python3.12/site-packages/litellm/llms/ovhcloud/chat/transformation.pycustom_llm_providerz&OVHCloudChatConfig.custom_llm_provider   s        modelc                    d}	 t        |d      }|j                  dd      }|d}t
        |   |      }|durYt        j                  d       |j                  d	       |j                  d
       |j                  d       |j                  d       |S # t        $ r$}t        j                  d|        d}Y d}~d}~ww xY w)z
        Details about function calling support can be found here:
        https://help.ovhcloud.com/csm/en-gb-public-cloud-ai-endpoints-function-calling?id=kb_article_view&sysparm_article=KB0071907
        Nr   )r   supports_function_callingFz'Error getting supported OpenAI params: TznYou can see our models supporting function_calling in our catalog: https://endpoints.ai.cloud.ovh.net/catalog toolstool_choicefunction_callresponse_format)r   get	Exceptionr	   debugsuperget_supported_openai_paramsremove)r   r   r   
model_infoeoptional_params	__class__s         r   r$   z.OVHCloudChatConfig.get_supported_openai_params   s    
 59!		./:VJ(2+T)% )0,1)
  '=eD$D0   A ""7+""=1""?3""#45  	.  #J1#!NO(-%	.s   #B 	CB>>Capi_baseapi_keyr(   litellm_paramsstreamc                 :    |dn|j                  d      }| d}|S )Nz0https://oai.endpoints.kepler.ai.cloud.ovh.net/v1/z/chat/completions)rstrip)r   r*   r+   r   r(   r,   r-   complete_urls           r   get_complete_urlz#OVHCloudChatConfig.get_complete_url4   s5      ?% 	
 ##45r   error_messagestatus_codeheadersc                     t        |||      S )Nmessager4   r5   r
   )r   r3   r4   r5   s       r   get_error_classz"OVHCloudChatConfig.get_error_classE   s     !!#
 	
r   non_default_paramsdrop_paramsc                 ,    t         |   ||||      }|S N)r#   map_openai_params)r   r:   r(   r   r;   mapped_openai_paramsr)   s         r   r>   z$OVHCloudChatConfig.map_openai_paramsN   s&      %w8 
 $#r   messagesc                 t    |j                  di       }t        | 	  |||||      }|j                  |       |S )N
extra_body)popr#   transform_requestupdate)	r   r   r@   r(   r,   r5   rB   responser)   s	           r   rD   z$OVHCloudChatConfig.transform_requestZ   sD     %((r:
7,8_ng
 	
#r   r=   )__name__
__module____qualname__propertyr   strr   listr$   dictboolr2   intr   httpxHeadersr   r9   r>   r   r   rD   __classcell__)r)   s   @r   r   r      s@   Xc]    F "&3- # 	
    
"
 
/2
=B4CV=W
	

$ 
$ 
$ 	
$
 
$ 

$ '( 	
   
 r   r   c                        e Zd ZdZdedefdZy)&OVHCloudChatCompletionStreamingHandlerzO
    Handler for OVHCloud AI Endpoints streaming chat completion responses
    chunkr   c                    	 d|v rF|d   }dj                  |j                  dd            }t        ||j                  dd      ddi	      g }|d
   D ]8  }d|v r!d|d   v r|d   j                  d      |d   d<   |j                  |       : t	        |d   d|d   |j                  d      |d   |      S # t
        $ r}t        d| d| dddi	      d}~wt        $ r}|d}~ww xY w)zA
        Parse individual chunks from streaming response
        errorzOVHCloud Error: {}r8   zUnknown errorcodei  zContent-Typezapplication/jsonr7   choicesdelta	reasoningreasoning_contentidzchat.completion.chunkcreatedusager   )r]   objectr^   r_   r   rY   z
KeyError: z), Got unexpected response from CometAPI: N)formatr    r   appendr   KeyErrorr!   )r   rU   error_chunkr3   new_choiceschoicer'   s          r   chunk_parserz3OVHCloudChatCompletionStreamingHandler.chunk_parsero   s>   #	%#Gn 4 ; ;OOI?! () + <+-?@  K	*f$w)G;A'?;N;N#<F7O$78 ""6* + ';.i(ii(Gn#   	#$QC'PQVPWX');< 
  	G	s$   B4B7 7	C) CC)"C$$C)N)rG   rH   rI   __doc__rM   r   rg   r   r   r   rT   rT   j   s    '$ '+> 'r   rT   )rh   typingr   r   r   rP   litellm.utilsr   r   +litellm.llms.openai.chat.gpt_transformationr   litellm._loggingr	   litellm.llms.ovhcloud.utilsr   )litellm.llms.base_llm.base_model_iteratorr   )litellm.llms.base_llm.chat.transformationr   litellm.types.llms.openair   r   rT   r   r   r   <module>rq      sF    ) (  E G + 9 O F 6T Tn,-F ,r   